1. 程式人生 > >VS中使用QT,多國語言翻譯問題

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檔案的路徑正確(如果有多個相似版本的專案,有可能將路徑混淆);

翻譯未成功的問題

如果專案之前就已經有翻譯檔案,將專案重新生成一遍,步驟為:生成->重新生成;