Qt多国语言的实现与切换(国际化)
来源:互联网 发布:广电网络官网 编辑:程序博客网 时间:2024/04/28 20:10
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);
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多国语言的实现与切换(国际化)
- Qt多国语言的实现与切换(国际化)
- Qt多国语言的实现与切换(国际化)
- Qt 国际化之二:多国语界面动态切换的实现
- Qt实现多国语言切换
- Qt实现多国语言动态切换
- QT实现多国语言的动态切换
- QT实现多国语言的动态切换
- Qt 界面实现多国语言的切换实例
- QT实现多国语言的动态切换
- Qt 界面实现多国语言的切换实例
- QT实现多国语言的动态切换
- Qt多国语言国际化
- Qt 多国语言国际化
- Qt实现多国语言(即界面翻译)可实时进行切换
- 2.4 Qt多国语言切换
- android多国语言与国际化
- 多国语言国际化
- C# 概述
- 怎么将不定长字符串组合进行保存,又能方便读取
- 程序员的野心:让GPU像CPU一样运行
- Socket传输字符串数组
- CentOS/RHEL上通过Cacti监控mysql
- Qt多国语言的实现与切换(国际化)
- 资源分配图检测死锁
- ubuntu下出现sudo被禁用和获得不了root权限时的处理办法
- main函数的参数argc和argv说明以及基本的cmd命令使用
- MongoDB之数据建模
- xml格式的字符串转xml
- 35岁以前把下面十件事做好
- ImageView的属性android:scaleType作用
- 我的Java开发学习之旅------>Eclipse 项目有红感叹号解决之道