六、QT国际化(i18n)
要使得应用程序支持多种 语言,并且能够灵活切换,就需要添加QT的国际化支持。
打开QTDemo.pro,添加如下语句:
TRANSLATIONS += en.ts zh_CN.ts zh_TW.ts
然后在命令行窗口中输入 以下命令:
lupdate QTDemo.pro
这样就生成了3个语言文件:en.ts,zh_CN.ts,zh_TW.ts,分别存放英文、中文、繁体中
文的字符串。en.ts的内容如下:
这是一个XML文件,其中存放了所有工程中涉及到的字符串。
用linguist(在QT安装目录下的bin目录中)打开zh_CN.ts,选择“编辑”->“翻译文件设置…”,选择
Chinese/China:
选中某一个字符串,在译文文本框中输入对应于中文的字符串:
在翻译完成后一定要记得点击一下字符串前面的“?”,使其变成一个“√”:
最 后选择“文件”->“另外发布为…”,将语言文件发布为zh_CN.qm文件
用同样的方法生成zh_TW.qm文件,唯一不同的地方就是翻译文件设置中应该选择Chinese/Taiwan。
对于en.ts 文 件,不需要翻译,直接发布为en.qm即可。
下面在程序中添加对国际 化的支持,将main.cpp修改为如下内容:
#include
#include
#include "MyDlg.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QTranslator translator;
translator.load(QString(argv[1]));
app.installTranslator(&translator);
MyDlg *mydlg = new MyDlg;
return mydlg->exec();
}
重新执行make命令,生成可执行程序。
在运行程序时通过传递命 令行参数指定所使用的语言,注意不需要指定扩展名.qm,例
如:
QTDemo zh_CN
这样运行程序时界面就编 程中文的了,是不是很简单啊~
动态的语言切换功能 :
1. 为用户提供一个切换方法,按钮或者菜单都可以。
2. 在用户切换语言的时候,重新装载对应的翻译文件。
例如切换到日语翻译:
appTranslator.load("myapp_jp.qm");
3. 重新装载翻译文件后,重新调用tr()生成新的字符串。
用户可以所有可翻译的字符串搜集到retranslateUi函数。
(可以参考ui生成的h文件)
实现语言切换菜单的功能:
// 切换翻译文件,全局函数
void switchLanguage(QString lan)
{
appTranslator.load("myapp_"+ lan, ":/translations/qm/");
}
// 切换到日文界面
void MainWindow::on_actionLanguageJp_triggered()
{
// 先切换语言文件,然后信息翻译ui
switchLanguage("jp");
ui.retranslateUi(this);
}