文章目錄
- @[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);