开发一个软件的时候有时候会遇到需要进行国际化的操作,也就是说一些显示可能因为需求而要改为另一种语言,像一些常见的软件是会提供一些语言包,然后再软件中加载就可以更换显示语言了,今天这一篇讲的就是这个,而且暂时针对VS下开发Qt而言,如果在Qt Creator上开发的话,可能会有不同,但是大致还是一样的。
在VS上开发Qt的项目的话是,Qt的VS插件是很有用的,现在我们的国际化操作也是要依赖这一个小插件的,这里以VS2013为例(VS2015基本上是一样的),VS2013安装好Qt的插件之后位于下图的位置:
待我们写好一个Qt项目之后就可以使用插件生成一个翻译文件。
简单写一个超级简单的空白界面,我只设置标题,代码如下:
this->setWindowTitle(tr("bearoom"));
这里要说明的就是需要翻译的字符串是要用tr()包装起来的,如上面的tr("bearoom"),然后运行一下确认是英文没错吧:
接下来就要生成一个翻译文件啦,就是直接点第一张图片的插件的选项,然后会弹出一个窗口选择语言和文件名:
这里我选择中文简体,中国的,确定之后就会在工程下生成这个文件:
然后在VS打开该文件,一般会默认用Qt的Linguist打开,如下:
然后就要可以看到我代码里面有哪些字符串被tr()包围着的,然后选择该字符串,并在下方输入中文翻译:
翻译好了之后我们需要讲文件发布出来,也就是release需要注意这里不是保存,而是release为一个qm文件:
release之后可以看到工程目录下多了一个qm文件:
这个不是在VS中,而是在工程的文件夹下的,然后需要翻译的时候就加载这个文件即可,加载的代码如下:
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator *tran = new QTranslator;
tran->load("qt5_ch01_zh.qm");
a.installTranslator(tran);
qt5_ch01 w;
w.show();
return a.exec();
}
然后运行程序的时候就可以看到标题已经被翻译了
这里我觉得需要注意的点是写代码的时候一定要用英文来写,包括软件上显示的名称都要用英文来命名比较好,然后需要显示为中文的时候就使用这种方法来实现,如果一开始就用中文的话,要把工程转到Linux下开发的时候就很尴尬了,可能存在编码问题,因为VS一般默认是用GB2312来编码,如果在Linux下用UTF-8的话是可以转的,但是cpp文件或.h文件就是乱码了,反而比较麻烦。
不恨天涯行役苦,
只恨西风,吹梦成今古。
明日客程还几许,
沾衣况是新寒雨。