qt国际化翻译功能用法
文章目录
- @[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);
