前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt Quick 项目实现根据操作系统语言自动显示指定翻译

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

作者头像
我与梦想有个约会
发布2020-01-04 13:16:52
1.5K0
发布2020-01-04 13:16:52
举报
文章被收录于专栏:jiajia_dengjiajia_deng

Qt 提供了一整套的翻译引擎,讲你需要翻译的内容使用 qsTr(“”) 包括起来就可以通过工具来扫描这些待翻译的内容。我们用 Qt 创建的 Empty 项目来做演示,创建完成后,main.qml 中只有如下代码:

代码语言:javascript
复制
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 文件中添加如下内容:

代码语言:javascript
复制
# 告诉 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):

代码语言:javascript
复制
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 中文系统中最终运行效果如下:

相关

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年11月1日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 将待翻译文件添加到扫描列表
  • 生成 .ts 中间文件
  • 开始翻译
  • 生成目标二进制文件
  • 加载翻译
    • 相关
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档