VS中使用QT,多國語言翻譯問題
VS版本:VS2010
Qt版本:Qt5.5.1
例 子:英譯漢
以下介紹是我站在巨人們的肩膀上,並結合自己在工作中所遇到的問題作出的總結。
在VS中使用Qt程式設計,VS是不支援中文格式的,所以遇到了語言翻譯的問題。例如,一個按鈕的名字你是在UI介面上使用中文命名的,現在你要通過程式碼將該按鈕的名字用另一個名字替換,pushButton->setText(“按鈕”),這樣是不可行的,顯示出來的是亂碼。這就需要用Qt語言家來翻譯文字資訊。
翻譯的過程主要分為以下三步:
1、lupdate:提取待翻譯元素,生成.ts中間檔案。
選中.ts檔案->右鍵->lupdate;
2、寫翻譯內容。
寫翻譯內容的方法有兩種,任選其一即可
① 將.ts檔案中所有提取出來的待翻譯元素進行翻譯。
雙擊開啟.ts檔案->找到待翻譯元素->在translation標籤中填寫翻譯內容->儲存;
② 開啟Launch Linguist進行翻譯。
Qt5 -> Launch Linguist -> 檔案 -> 開啟.ts檔案 -> 找到待翻譯元素進行翻譯 -> 儲存;
3、lrelease:將翻譯好的檔案生成qm檔案。
選中.ts檔案->右鍵->lrelease;
新建翻譯檔案
如果當前專案沒有翻譯檔案,需要新增翻譯檔案則新建.ts檔案。
工程右鍵 -> Create New Translation File -> 英譯漢如下圖
選擇目標語言,這裡是英譯漢,所以選擇中文
點選OK,.ts檔案就生成了
選中.ts檔案->右鍵->開啟方式,設定預設開啟方式為該項
檔案開啟之後是這樣的
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>Human</name>
<message>
<location filename="human.ui" line ="14"/>
<source>Human</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="human.cpp" line="10"/>
<source>man</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="human.cpp" line="14"/>
<source>woman</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
在translation標籤項中填寫翻譯,儲存
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>Human</name>
<message>
<location filename="human.ui" line="14"/>
<source>Human</source>
<translation type="unfinished">人類</translation>
</message>
<message>
<location filename="human.cpp" line="10"/>
<source>man</source>
<translation type="unfinished">男人</translation>
</message>
<message>
<location filename="human.cpp" line="14"/>
<source>woman</source>
<translation type="unfinished">女人</translation>
</message>
</context>
</TS>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
選中.ts檔案->右鍵->lrelease,這樣就生成了.qm檔案
下面在main.cpp中為程式安裝翻譯檔案
#include "test.h"
#include <QtWidgets/QApplication>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
translator.load("test_zh.qm");
a.installTranslator(&translator);
Test w;
w.show();
return a.exec();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
無法提取到待翻譯元素的問題:
(1)首先,確保在工程程式碼中所有需要翻譯的字串已用 tr 標示出來。這一點非常重要,沒有用 tr 標誌的文字將不會翻譯,也提取不出來。
(2)lupdate提取待翻譯元素時,需要將 待翻譯元素所在的.cpp檔案儲存之後才能提取出來;
(3)如果你是使用Launch Linguist 來進行翻譯,請確保你開啟的.ts檔案的路徑正確(如果有多個相似版本的專案,有可能將路徑混淆);
翻譯未成功的問題
如果專案之前就已經有翻譯檔案,將專案重新生成一遍,步驟為:生成->重新生成;