1. 程式人生 > >Qt多國語言國際化

Qt多國語言國際化

改變 exec 支持 data- hang cati ngui imu msi

Qt自己提供了一種國際化的方案,而不是採用INI配置文件的方式。

使用QString。QTranslator等類和tr()函數可以非常方便的完畢增加國際化的支持。

(1)使用QString對象表示全部用戶可見的文本,QString採用的是內部Unicode編碼實現。
(2)使用tr()函數獲取全部須要翻譯的文本。
(3)使用QString::arg()組織動態文本。

eg:QString str = tr("Mission status: %1 of %2 are completed".arg(x).arg(y));

(4)使用QTranslator::load()和QCoreApplication::installTranslator()讀取相應的翻譯後的資源文件。並安裝QTranslator對象。
詳細操作例如以下:
第一步
在你的pro裏面增加 TRANSLATIONS = xx.ts

第二步
用lupdate 操作pro 將要翻譯的提取到ts文件。命令是 lupdate xx.pro

第三步
用 linguist 打開剛才的ts文件,linugist是在qt的bin的文件夾裏面, 是一個界面工具 打開linguist 後用菜單條file ->open 打開 對應的ts文件 如剛才myexec_zh.ts 打開後你會看到左邊是對應的類 右邊的上半部 是對應的類裏面tr 裏面的內容 所以在程序裏面 tr裏面的都是e文 到這裏就用上了下半部是你要翻譯的語言的對應的東西,就是你輸入中文的地方 要註意的就是 那些標點符號 不妨用e文輸入狀態的如save as.... 就應該是 另存為.... 而不是 另存為。。

。。

註意後面的標點的區別,當中綠色的表示翻譯好了,嘆號的表示沒有翻譯對,交叉的表示沒有翻譯 第四步 先用 linguist 菜單保存你翻譯好的ts文件,接著用linguist界面工具裏面菜單file裏面的release...,點擊這個就會彈出對話框 提示你輸入 qm文件的文件名稱。用默認的就能夠了。按確定後你會在ts文件所在的文件夾看到一個qm後綴名的個文件,這就程序翻譯器要用到的文件。 第五步。在你的程序裏面使用剛才得到的qm文件,方法例如以下: int main(int argc,char **argv) { QApplication app(argc,argv); QTranslator qtTranslator(0); qtTranslator.load("test.qm", "."); //和名字對應 app.installTranslator(&qtTranslator); Window window; window.setFont(QFont("unifont", 16)); //設置字體 window.setMaximumSize(0, 0); window.showMinimized(); return app.exec(); } 註意要在界面的前面安裝翻譯器。

 
對於須要動態改變語言的,假設已經安裝了第一步
在你的pro裏面增加 TRANSLATIONS = xx.ts

第二步
用lupdate 操作pro 將要翻譯的提取到ts文件 命令是 lupdate xx.pro

第三步
用 linguist 打開剛才的ts文件,linugist是在qt的bin的文件夾裏面, 是一個界面工具 打開linguist 後用菜單條file ->open 打開 對應的ts文件 如剛才myexec_zh.ts 打開後你會看到左邊是對應的類 右邊的上半部 是對應的類裏面tr 裏面的內容 所以在程序裏面 tr裏面的都是e文 到這裏就用上了下半部是你要翻譯的語言的對應的東西。就是你輸入中文的地方 要註意的就是 那些標點符號 不妨用e文輸入狀態的如save as.... 就應該是 另存為.... 而不是 另存為。。。。註意後面的標點的區別,當中綠色的表示翻譯好了。嘆號的表示沒有翻譯對,交叉的表示沒有翻譯

第四步
先用 linguist 菜單保存你翻譯好的ts文件。接著用linguist界面工具裏面菜單file裏面的release...,點擊這個就會彈出對話框 提示你輸入 qm文件的文件名稱,用默認的就能夠了。

按確定後你會在ts文件所在的文件夾看到一個qm後綴名的個文件。這就程序翻譯器要用到的文件。 第五步。在你的程序裏面使用剛才得到的qm文件 方法例如以下 int main(int argc,char **argv) { QApplication app(argc,argv); QTranslator qtTranslator(0); qtTranslator.load("test.qm", "."); //和名字對應 app.installTranslator(&qtTranslator); Window window; window.setFont(QFont("unifont", 16)); //設置字體 window.setMaximumSize(0, 0); window.showMinimized(); return app.exec(); } 註意一定要在安裝界面前安裝翻譯器。

 
對於須要動態改變語言的情況。能夠定義一個static的QTranslator對象以方便移除和又一次安裝。

借鑒代碼例如以下:

void LangSwitch::changeTr(const QString& langCode)
{
    static QTranslator* translator;

    if (translator != NULL)
    {
        qApp->removeTranslator(translator);
        delete translator;
        translator = NULL;
    }
    translator = new QTranslator;
    QString qmFilename = "lang_" + langCode;
    if (translator->load(QString("D:/QtPro/CH14/CH1402/LangSwitch/")+qmFilename))
    {
        qApp->installTranslator(translator);
    }
}

Qt多國語言國際化