Qt 国际化,简单理解为 Qt 多国语言界面显示。
关于多国语言,在不同的程序框架中,可能有多种不同的实现方法,但是要注意一点,字符串用UNICODE。
Qt 默认的就是UNICODE编码。
在Qt 中:
工具:Qt Creator;
1:将需要翻译的字符串用 QObject::tr("Hello world!"). 或者QApplication::translate("Dialog", "Hello world!", 0); 包含;
其主要目的就是自动将其中的字符串保存到ts文件中,同时Linguist工具找到需要翻译的字符串。这里就明白,无需翻译和界面显示的字符串不用上述函数包含;
2:在工程文件.pro中添加
TRANSLATIONS += testQtCreator_english.ts
3:通过 工程的菜单: 工具 -> 外部 -> 语言专家 ->更新翻译(lupdate) 可以生成ts文件;
4:启动Linguist工具,打开工程中生成的“testQtCreator_english.ts”文件,在开始的提示框中,目标语言设置为"Englishi"(根据语言的多少自定义设置);
下图显示了从英文到中文的翻译:
5:翻译完成,保存退出Linguist工具;
然后 通过 工程的菜单: 工具 -> 外部 -> 语言专家 ->发布翻译(lrelease) 可以生成qm文件;
qm文件可以通过程序添加显示到界面;
6:应用qm文件:
int main(int argc, char *argv[]){QApplication a(argc, argv);QTranslator qtTranslator;qtTranslator.load("testQtCreator_english.qm");a.installTranslator(&qtTranslator);
Dialog w;w.show();
return a.exec();}到这里,基本上就可以在设置软件想要的语言了。新的问题,如果实现语言的动态切换?如:在上述例子中的Dialog中有一个按钮函数 OnBtnChangetoEnglish()?方法如下://pQApplication 指向qtTranslator的指针;void Dialog::OnBtnChangetoEnglish(){
// MessageBoxQ( tr("测试 test") );QTranslator qtTranslator;qtTranslator.load("testQtCreator_English.qm");pQApplication->installTranslator(&qtTranslator);
ui->retranslateUi(this);}
这样就可以根据qm文件,动态切换任意语言了。