Qt多国语言的实现与切换(国际化)

Qt多国语言的实现与切换(国际化)

1、创建语言文件

  打开.pro文件,加入以下:

TRANSLATIONS+=cn.ts

  工具->外部->Qt语言家->更新翻译,将生成翻译文件cn.ts

2、编辑翻译文件

  启动Linguist(Qt语言家),打开cn.ts,然后进行编辑,主要是将源文对应的译文填写上,最后保存

3、部署翻译文件

  工具->外部->Qt语言家->部署翻译,将生成语言文件qm

4、加载翻译文件

?
QTranslator translator;
bool  b = false ;
b = translator.load( "cn.qm" );
a.installTranslator(&translator);
(以上四步要注意清理和更新,加载文件路径不对时load会失败,最好方式是把翻译文件放到qrc里,用qrc的调用方式,路径基本不会出问题)


4.1要翻译一个指定(用户可见)的字符串,如果在QObject类中可以直接调用tr()函数,如果在不是QObject类中加入QObject前缀QObject::tr()重写tr(),也可以使用Q_DECLARE_TR_FUNCTION()宏把tr()函数添加到该类中。

 4.2用这个命令生成最新ts文件(工程编译过后再生成该文件) lupdate qml/LoginWindow.qml qml/MainWindow.qml -ts en.ts zh_cn.ts

4.3用Qt Linguist打开上一步生成的qml.ts 和 app.ts,将我们翻译的文字输入进去即可,最后保存文件,完成。 然后在命令行中输入:

lconvert app.ts qml.ts -o displayChinese_zh_CN.ts

这是为了将两个ts文件合并起来。最后的效果如图:

 4.4.动态库中的多语言也可以放到主程序做,用同一个ts qm文件,只要在main加载一次就行,但是要注意的是ts/qm文件的命名必须遵循iso标准格式,不然的话动态库的多语言显示不出来,只能显示主程序的多语言。比如translation_zh_CN.ts 或 translation_en.ts这些格式,而后缀不是标准格式的则只能应用在主程序的多语言,动态库的多语言无能为力,这可能是动态库加载时必须搜寻标准格式的原因吧。

4.5要注意还要加载上qt自带翻译,否则qt的弹出框之类的都是英语了。

4.6

多语言要注意加载系统的多语言,比如弹出框要是没加载系统多语言的话,有些系统界面会只显示英文

。具体实现为 QString language = set.value("language",Qlocale::system()).tolocale().name();
//加载本系统翻译的结果
QTranslator *translator = new QTranslator();
if(translator->load(Gt::home()+"/translations/mcs_"+language)==false){
translator->deleteLater();}
else
QApplication::installTranslator(translator);
//加载qt自有的翻译
QTranslator *qtTranslator = new QTranslator();
if(qtTranslator->load(Gt::home()+"/translations/qt_"+language)==false){
qtTranslator->deleteLater();}
else
QApplication::installTranslator(qtTranslator);

 

 

5、

ui->retranslateUi(this);//这里实现语言翻译器的更新


你可能感兴趣的:(Qt多国语言的实现与切换(国际化))