Qt Quick 项目实现根据操作系统语言自动显示指定翻译

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 指示要生成几种语言的翻译模板。

生成 .ts 中间文件

点击 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):

  • 第一个参数指定当前系统语言,使用 QLocale 就可以获取到。
  • 第二个参数设置当前翻译文件的前缀名字,我们名字前缀是 app。
  • 第三个参数设置前缀名字和实际语言中间的分割符号。
  • 第四个参数指定翻译文件的位置,就是程序当前目录。

最终组成的就是 前缀+分隔符号+系统语言+.qm。这样编译出来的程序就可以根据系统语言自动切换翻译文件了。讲我们刚刚生成的两个 .qm 文件复制到 exe 所在目录:

然后运行程序,在 Windows 10 中文系统中最终运行效果如下:

发表评论