Qt多语言开发--Qt语言专家

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文件

Qt多语言开发--Qt语言专家_第1张图片
点击更新翻译后,会自动将代码中的标识字符串更新到ts文件中。当代码中字符串有修改或者添加时,记得先运行更新翻译。

4、Qt语言专家打开ts文件并填写翻译

Qt语言专家是Qt自带的一种软件工具,在安装QtCreator时就默认已经安装了,下面从windows和linux两个平台教大家运行语言专家:

4.1 linux平台:

打开命令行,输入lin然后tab键自动补全,会出现linguist,然后回车会自动打开语言专家。

root@Xubuntu18:~$ linguist

然后File->open,选择要打开的ts文件
Qt多语言开发--Qt语言专家_第2张图片

4.2 windows平台

在windows平台,推荐大家使用everything工具去搜索,下面给出常用软件的连接:

程序员提高工作效率的利器(不看你会后悔的)

用everything搜索“linguist”,单机打开对应的exe,注意下你用的是64位编译还是32位编译。
Qt多语言开发--Qt语言专家_第3张图片
Qt多语言开发--Qt语言专家_第4张图片

4.3 打开ts文件填写对应的翻译

左侧栏是对应的文件,字符串栏对应识别出来的字符串
Qt多语言开发--Qt语言专家_第5张图片

选择原文字符串,然后在下面填写对应的翻译
Qt多语言开发--Qt语言专家_第6张图片

翻译成功后,单机原文的❓,让其变成√
Qt多语言开发--Qt语言专家_第7张图片
将所有的文件中的字符串翻译完成后保存,并关闭ts文件。

5、Qt语言专家将翻译后的ts文件生成qm文件

Qt多语言开发--Qt语言专家_第8张图片
在ts目录下会生成同名的qm文件
Qt多语言开发--Qt语言专家_第9张图片

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刷新,详情可以看 这里

你可能感兴趣的:(QT/QML,qt5,qml)