Qt强的的功能之一就是支持多语言切换,本文主要介绍如何去支持多语言开发。
Qt多语言开发主要流程如下:
1、Qt tr()和qsTr()标记待翻译字符串
2、Pro文件中,添加生成ts的代码
3、Qt语言专家更新ts文件
4、Qt语言专家打开ts文件,填写对应的翻译
5、Qt语言专家将翻译后的ts文件生成qm文件
6、QTranslator加载qm语言文件
7、qApp->installTranslator() 安装语言文件
1、标记待翻译内容
Qt代码包括c++代码和qml代码,不同风格的代码标记字符串的函数不同。C++代码中,使用tr()函数标记字符串;QML代码中,使用qsTr()函数。具体使用方法如下:
C++代码:
int ShowConnectState()
{
ui->label->setText(tr("Wired device is disconnected"));
return 0;
}
或者
int ShowConnectState()
{
QString showInfo = tr("Wired device is disconnected");
ui->label->setText(showInfo);
return 0;
}
qml代码:
Text {
id: stringInfo
text: isChinese ? qsTr("Chinese") : qsTr("English")
color: "black"
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.bold: true
font.pixelSize: 30
}
2、在pro文件中添加命令
TRANSLATIONS = language_zh_EN.ts \
language_zh_CN.ts
在pro文件最后面添加上面两行命令,重新编译运行,会自动生成上面的两个ts文件。其中EN代表英文,CN代表中文。如果有其他国家,建议新增其他国家的ts文件。
3、Qt语言专家更新ts文件
点击更新翻译后,会自动将代码中的标识字符串更新到ts文件中。当代码中字符串有修改或者添加时,记得先运行更新翻译。
4、Qt语言专家打开ts文件并填写翻译
Qt语言专家是Qt自带的一种软件工具,在安装QtCreator时就默认已经安装了,下面从windows和linux两个平台教大家运行语言专家:
4.1 linux平台:
打开命令行,输入lin然后tab键自动补全,会出现linguist,然后回车会自动打开语言专家。
root@Xubuntu18:~$ linguist
然后File->open,选择要打开的ts文件
4.2 windows平台
在windows平台,推荐大家使用everything工具去搜索,下面给出常用软件的连接:
用everything搜索“linguist”,单机打开对应的exe,注意下你用的是64位编译还是32位编译。
4.3 打开ts文件填写对应的翻译
左侧栏是对应的文件,字符串栏对应识别出来的字符串
选择原文字符串,然后在下面填写对应的翻译
翻译成功后,单机原文的❓,让其变成√
将所有的文件中的字符串翻译完成后保存,并关闭ts文件。
5、Qt语言专家将翻译后的ts文件生成qm文件
在ts目录下会生成同名的qm文件
6、加载和安装qm语言文件
在main函数中,加载qm文件
QTranslator translator;
if (translator.load(":/language/language_zh_CN.qm")) {
qApp->installTranslator(&translator);
}
初始化完成后会显示当前加载的语言。
7、页面语言刷新
动态切换语言,例如页面有一个切换语言的按钮,触发按钮后,如何刷新所有的语言?下面分两部分来介绍。
7.1、 QWidget 刷新语言
每个Widget窗口或页面都需要通过UI 调用命令:
ui->retranslateUi(this);
7.2、 QML刷新语言
engine->retranslate();
关于qml刷新,详情可以看 这里