作为一个设计良好的Qt程序,支持多国语言是显而易见的需求,毕竟需要照顾到的用户人群也许是不分国界的,那么如何使得程序拥有多语言则是一个很大的问题,这里我们继续使用之前的例子来演示多语言的处理。
要设计多语言,我们首先向工程中加入ts文件。
如下图所示:
也就是向pro文件加入
TRANSLATIONS += \ zh_cn.ts DISTFILES += \ zh_cn.ts
这里加入DISTFILES是给项目增加了其他文件的的意思,个人推荐加上这样方便点,当然也可以不加。
之后需要使用Qt Creator中的更新翻译菜单,更新翻译文件。
如下图所示:
这里注意.ts文件不要自己手工创建,如果创建了一个空文件再更新翻译,可能会收到类似这样的错误“zh_cn.ts:1:0: 文档过早的结束。”
更新完毕之后我们选择启动Qt语言家(Qt Linguist)对字符进行翻译。
启动Qt语言家后我们需要首先选择语言文件对应的是哪种语言。
如下图所示:
随后我们就能看到翻译界面,选择需要翻译的短语,然后填上相应的翻译内容最后保存即可。
这里注意的是,部分控件使用了html代码来控制格式内容,如果我们想保持和之前一致的显示风格,则需要连同html代码一起复制。这里我们为了演示效果,并没有留下html代码。
翻译完成后选择菜单的发布翻译即可,最后会生成一个qm文件。
为了让程序加载我们的翻译文件,我们需要在代码里面增加加载翻译的代码。
这里我们直接修改主函数,让程序根据系统设置的国家自动选择语言。
#include "mainwindow.h" #include <QApplication> #include <QTranslator> #include <QLocale> #include <QString> int main(int argc, char *argv[]) { QApplication a(argc, argv); //部分教程会教大家使用QSystemLocale,但是最新版的Qt中该类已经取消 QLocale locale; QTranslator translator; QString load_name=""; QLocale::Country country = locale.country(); switch(country) { case QLocale::China: load_name = "zh_cn.qm"; break; default: break; } if(load_name.length()!=0) { bool b_translator_load = false; b_translator_load = translator.load(load_name); if(b_translator_load==true) { a.installTranslator(&translator); } } MainWindow w; w.show(); return a.exec(); }
通过这些代码,如果系统设置为中国地区,程序在启动时会加载启动目录下的zh_cn.qm这个文件。这里需要注意的是,编译产生的可执行文件往往不在源代码目录,所以需要自行复制qm文件到可执行文件所在的目录。
最后运行效果如图
工程源代码下载地址:
https://www.exvs.org/wp-content/uploads/public/Qt_Tutorial/MainWindow_language_609C0483.7z