Qt教程-Qt Creator中定制GUI程序(国际化多语言)

作为一个设计良好的 GUI 程序,支持多国语言是显而易见的需求,毕竟需要照顾到的用户人群也许是不分国界的,那么如何使得程序拥有多语言则是一个很大的问题,这里我们继续使用之前的例子来演示多语言的处理。
要设计多语言,我们首先向工程中加入 ts 文件。
如下图所示:

也就是向pro文件加入

1
2
3
4
5
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 文件。
为了让程序加载我们的翻译文件,我们需要在代码里面增加加载翻译的代码。
这里我们直接修改主函数,让程序根据系统设置的国家自动选择语言。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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 文件到可执行文件所在的目录。
最后运行效果如图:

工程源代码下载地址: /uploads/public/qt_tutorial/mainwindow_language_609C0483.7z