翻譯應用程式


您可以在應用程式中的一些文字位置撰寫預設語系文字,例如英語系文字,若要改變整個應用程式中的文字為另一個語系的文字,再提供qm檔來進行翻譯,要擁有這個功能,首要條件是在您的應用程式中:
  1. 所有要翻譯的文字,都必須撰寫在QObject::tr()函式之中
  2. 實例化QTranslator,載入.qm檔案
  3. 為QApplication安裝QTranslator

簡 單的顯示中文(使用 Unicode 轉換) 為例,示範如何讓它擁有置換.qm檔即可翻譯應用程式:
  • main.cpp
#include <QApplication>
#include <QLabel>
#include <QTranslator>

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QTranslator translator;
translator.load("hello");
app.installTranslator(&translator);

QLabel *label = new QLabel;
label->setText(
QObject::tr("<center><h1>Qt4 Gossip</h1></center>"));
label->setWindowTitle(
QObject::tr("caterpillar"));

label->resize(200, 50);
label->show();

return app.exec();
}

要翻譯的文字,一定要直接撰寫在tr()之中,tr()之中不得使用變數,因為稍後使用lupdate工具程式處理時,會無法找出需要翻譯的文字,例如以下的寫法就不行:
QString name = "caterpillar";
label->setWindowTitle(name);

QTranslator的load()方法設置為hello,這預設會去尋找hello.qm檔,檔案中包括要進行翻譯的文字,上面的應用程式已經可以執行,在不提供.qm檔案時,預設就是顯示原始程式碼中的文字:



接著,確定在您的.pro檔案中,設置原始檔案名稱與即將產生的.ts檔案名稱:
SOURCES += main.cpp
TRANSLATIONS += hello.ts

如此就可以直接使用Qt附的lupdate工具程式來自動產生.ts檔案,指令為:
lupdate -verbose yourApp.pro

.ts檔案的格式內容為XML檔案,您可以直接編輯它:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1">
<context>
    <name>QObject</name>
    <message>
        <location filename="main.cpp" line="15"/>
        <source>&lt;center&gt;&lt;h1&gt;Qt4 Gossip&lt;/h1&gt;&lt;/center&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="main.cpp" line="17"/>
        <source>caterpillar</source>
        <translation type="unfinished"></translation>
    </message>
</context>
</TS>

但更簡單的方法是使用Qt附的linguist:
linguist hello.ts

這會出現linguist視窗程式,若要中文,可以執行「Edit/Translation File Settings」,設定為中文語系編輯:



接著可以在右上窗格進行翻譯的文字編輯,例如:



修改所有要翻譯的文字之後進行儲存,原本的.ts檔將修改為如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="zh_TW">
<defaultcodec></defaultcodec>
<context>
    <name>QObject</name>
    <message>
        <location filename="main.cpp" line="15"/>
        <source>&lt;center&gt;&lt;h1&gt;Qt4 Gossip&lt;/h1&gt;&lt;/center&gt;</source>
        <translation>&lt;center&gt;&lt;h1&gt;Qt4 學習筆記&lt;/h1&gt;&lt;/center&gt;</translation>
    </message>
    <message>
        <location filename="main.cpp" line="17"/>
        <source>caterpillar</source>
        <translation>良葛格</translation>
    </message>
</context>
</TS>

接著使用Qt的lrelease工具程式,將.ts檔轉換為.qm檔:
lrelease hello.ts

接著啟動應用程式,QTranslator可以載入hello.qm檔的內容,並將所有tr()中的文字作置換,畫面如下: