文章目录
- @[toc]
- 1 概述
- 2 设置待翻译文本
- 3 生成ts翻译源文件
- 4 编辑ts翻译源文件
- 5 生成qm翻译二进制文件
- 6 加载qm翻译文件进行翻译
文章目录
- @[toc]
- 1 概述
- 2 设置待翻译文本
- 3 生成ts翻译源文件
- 4 编辑ts翻译源文件
- 5 生成qm翻译二进制文件
- 6 加载qm翻译文件进行翻译
更多精彩内容 |
---|
👉内容导航 👈 |
👉Qt开发经验 👈 |
1 概述
在 Qt 中,
ts
文件和qm
文件是用于国际化和本地化的关键文件。以下是它们的详细说明:ts 文件
- 用途:
ts
文件是 Qt 的翻译源文件,存储了应用程序中需要翻译的字符串及其翻译内容。- 格式: 它是基于 XML 的文本文件,便于编辑和版本控制。
- 内容:
- 包含原始字符串(
source
)和翻译后的字符串(translation
)。- 还可能包含上下文(
context
)信息,用于区分不同模块中的相同字符串。- 生成方式:
- 使用 Qt 提供的工具
lupdate
从源代码中提取需要翻译的字符串,生成.ts
文件。- 示例命令:
lupdate myproject.pro -ts translations/myproject_zh_CN.ts
- 编辑方式:
- 可以使用 Qt 提供的翻译工具 Qt Linguist 进行翻译。
- 也可以手动编辑,因为它是 XML 格式。
qm文件
- 用途:
qm
文件是 Qt 的翻译二进制文件,供应用程序运行时加载使用。- 格式: 它是
.ts
文件的编译版本,体积更小,加载速度更快。- 生成方式:
- 使用 Qt 提供的工具
lrelease
将.ts
文件编译为.qm
文件。- 示例命令:
lrelease translations/myproject_zh_CN.ts
文件对比
特性 TS文件 QM文件 可编辑性 可人工编辑 不可编辑 文件格式 XML文本 二进制 生成阶段 开发阶段 构建/发布阶段 文件大小 较大(含元数据) 较小(优化存储) 运行时依赖 不需要 必需
环境 | 说明 |
---|---|
系统 | windows11 |
Qt | 5.14.2、6.8 |
IDE | qtcreator14 |
2 设置待翻译文本
-
创建一个Qt工程;
-
在UI文件中添加的文本都可以被翻译;
-
如果在
QObject
类的子类中,需要使用tr()
包含文本才可以被翻译; -
如果在普通函数、或者不是QObject子类的类中,就不能直接使用
tr()
函数包含待翻译的文本了,可以使用下面几种方式;
3 生成ts翻译源文件
方法1:
-
鼠标右键【添加新文件】;
-
选择【Qt】【Qt Translation File】;
-
选择语言,例如下图中选择
English
就可以将Qt中文本翻译位英文。
方法2:
-
打开
.pro
文件,添加如下所示代码,建议文件名包含语言和地区的代码(zh_CN
、en_US
等),会更加名称中缩写推理出适用于什么语言翻译。TRANSLATIONS += \untitled9_en_US.ts\a_zh_CN.ts\b_zh_CN.ts
-
然后鼠标选择【工具】【外部】【Linguist】【lupdate】;
-
就可以在工程路径下生成对应的
ts
文件了;
4 编辑ts翻译源文件
-
鼠标选择ts文件,右键【Qt语言家】打开ts文件;
-
如下图所示,Qt UI界面中的文本或者使用
tr()
、QCoreApplication::translate()
包含的文件就可以在语言家中呈现。 -
然后如下图所示,将中文文本翻译为英文文本,填入对应位置;
-
填写完翻译后,点击工具栏中的勾,就可以将选中的文本标记为已完成。
5 生成qm翻译二进制文件
-
编写完成ts文件后,鼠标点击【工具】【外部工具】【Linguist】【lrelease】,就可以将
ts
文件生成为qm
文件。 -
生成的qm文件如下所示;
6 加载qm翻译文件进行翻译
-
如下所示,使用
QTranslator
加载qm翻译文件;#include "widget.h"#include <QApplication> #include <QDebug> #include <QTranslator>int main(int argc, char* argv[]) {QApplication a(argc, argv);QTranslator translator;if (translator.load("E:/test/untitled9/untitled9_en_US.qm")){qDebug() << "加载成功";QCoreApplication::installTranslator(&translator);}else{qDebug() << "加载失败";}qDebug() << "main函数1";qDebug() << QObject::tr("main函数2");qDebug() << QCoreApplication::tr("main函数3", "描述信息");qDebug() << QCoreApplication::translate("main", "main函数4");qDebug() << QCoreApplication::translate("main", "main函数5", "描述信息");Widget w;w.show();return a.exec(); }
-
注意:
- 必须先调用
installTranslator()
再创建UI对象; - 多个翻译器会叠加生效,后加载的优先;
- 必须先调用
-
也可以使用
QString locale = QLocale::system().name(); // 获取系统语言,例如 "zh_CN"
获取操作系统语言来选中使用的qm文件; -
加载qm翻译文件成功后如下所示,在ts文件中填写了翻译信息的就会被翻译。
-
如果在程序运行时动态切换语言,需要调用
retranslateUi()
方法刷新界面。例如:ui->retranslateUi(this);