Qt 提供了一整套的翻译引擎,讲你需要翻译的内容使用 qsTr(“”) 包括起来就可以通过工具来扫描这些待翻译的内容。我们用 Qt 创建的 Empty 项目来做演示,创建完成后,main.qml 中只有如下代码:
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
}
其中 Hello World 文字就使用 qsTr() 括起来了,我们首先需要做的就是让 Qt 翻译工具可以扫描到这些带翻译的文件。
在 Qt 项目的 pro 文件中添加如下内容:
# 告诉 Qt 翻译处理工具扫描所有当前目录下的 qml 文件
lupdate_only {
SOURCES += *.qml
}
# 你要生成几种语言的模板文件,这里指示生成两种,一种英文、一种中文
TRANSLATIONS = app_zh_cn.ts \
app_en_us.ts
如如上注释,lupdate_only
要告诉 Qt 翻译工具你要扫描所有目录下的 qml 文件,TRANSLATIONS
指示要生成几种语言的翻译模板。
点击 Qt Creaetor 菜单栏的工具->外部->Qt语言专家->更新翻译(lupdate),生成中间的 .ts 文件。
此时看下面概要信息生成了如下内容:
到项目目录下就能看到这两个中间待翻译的 .ts 文件了:
到你的 Qt 安装目录下找到 Qt5.12.3\5.12.3\msvc2017\bin\linguist.exe
文件,不同的编译器路径可能不一样,自己仔细找一下。打开 linguist.exe
将我们要翻译的文件拖进去,比如我要翻译刚刚生成的 app_zh_cn.ts
文件。选择你要翻译的内容,然后在下面输入翻译的文字,最后点击上面的绿色勾确认翻译。
完成后记得保存文件(切记切记)
在翻译中间文件完成后,返回 Qt Creator,还是点击 工具->外部->Qt语言专家->发布翻译(lrelease),此时你会看到生成了两个后缀为 .qm 的文件:
这就是最终的目标翻译文件了,接下来就是加载翻译了。
打开 main.cpp 文件,在实例化 app 对象后面加入如下代码(别忘了 include QTranslator):
QTranslator translator;
if (translator.load(QLocale(), QLatin1String("app"), QLatin1String("_"), QGuiApplication::applicationDirPath())) {
app.installTranslator(&translator);
}
translator.load() 的参数说明如下(也可以参考 Qt 官网:https://doc.qt.io/qt-5/qtranslator.html#load-1):
最终组成的就是 前缀+分隔符号+系统语言+.qm
。这样编译出来的程序就可以根据系统语言自动切换翻译文件了。讲我们刚刚生成的两个 .qm 文件复制到 exe 所在目录:
然后运行程序,在 Windows 10 中文系统中最终运行效果如下: