用 Qt 5 中實現(xiàn)多國語言支持

Qt5 實現(xiàn)多國語言

引言

  • 目的:自用/筆記
  • 時間:2018-02-13 01:13
  • 平臺: Windows 7
  • 項目:將英語界面添加德語和土耳其語翻譯

步驟

  1. 使用默認語言寫出整個工程,這里使用英語作為缺省語言

  2. 標記期望譯為多國語言的字符串,在代碼中把相關(guān)字符使用tr()替換

    例如在代碼中,把界面上的"Select Output Image" 期望轉(zhuǎn)換為多國語言,只需要將代碼中的字符替換為 tr(”Select Output Image")

QFileDialog::getSaveFileName(this,"SelectOutputImage",QDir::currentPath(),"*.jpg;;*.png);
QFileDialog::getSaveFileName(this,tr("SelectOutputImage"),QDir::currentPath(),"*.jpg;;*.png);
//這行代碼功能是選擇存儲路徑,getSaveFileName函數(shù)第二個參數(shù)是文件選擇導(dǎo)航器界面的標題欄,我們希望他參與多國語言翻譯,所以使用tr函數(shù)將其"標記"
  1. 把翻譯文件添加到工程文件(.PRO文件)中,添加該語句:

    TRANSLATIONS = translation_de.ts translation_tr.ts

    ts文件是Qt用以實現(xiàn)多國語言的一個中間文件,再此聲明一下

    de代表德國語,tr代表土耳其語(這是個很好的命名習(xí)慣,可讀性高而且后期還要使用這個文件名繼續(xù)生成其他文件)

  2. 使用Qt的 lupdate 工具生成TS文件

    • 此步驟就是生成第3步中向工程聲明的兩個ts文件,其原理是遍歷源代碼和 UI 文件尋找可翻譯的文本并創(chuàng)建ts文件。翻譯人員使用Qt提供的Linguist工具就可以翻譯這些文本

    • lupdate 位于Qt安裝目錄的bin文件夾,如:C:\Qt|Qt5.9.1\msvc2015\bin

    • 方法一: 直接在Qt中運行l(wèi)update,工具->外部->Qt語言家->lupdate

    • 方法二:使用命令行工具

      使用CD指令切換到項目目錄,也就是有.pro文件的那個目錄

      輸入C:\Qt\Qt5.9.1\msvc2015/bin/lupdate.exe *.pro執(zhí)行l(wèi)update

      運行結(jié)束后,工程路徑下就會有兩個ts文件

  3. 運行l(wèi)inguist 并加載剛剛生成的兩個ts文件,翻譯好保存

  4. 創(chuàng)建QM文件。創(chuàng)建ts文件方法相同(直接IDE中運行或命令行運行),把lupdate替換為lrelease即可

  5. 把QM文件添加到工程的resources中

  6. Qt中負責(zé)多國語言的是QTranslator類,所以要向mainWindow.h中添加包含文件

本例中需要翻譯出兩國語言,故聲明兩個QTranslator 對象作為MainWindow的私有成員

#include <QTranslaotr>
QTranslator *turkishTranslator;
QTranslator *germanTranslator;
  1. 在構(gòu)造函數(shù)中添加以下代碼,以便啟動軟件時自動加載翻譯文件

    turkishTranslator = new QTranslator(this);
    turkishTranslator
    ->load(":/translations/translation_tr.qm");
    germanTranslator = new QTranslator(this);
    germanTranslator
    ->load(":/translations/translation_de.qm");
    //承于QObject在父對象銷毀時會自動去銷毀子對象。(父類被銷毀時,子類也被銷毀)
    
  2. 在界面中創(chuàng)建語言設(shè)定菜單右鍵單擊接界面,點選創(chuàng)建菜單欄,命名為Language,然后創(chuàng)建子項:

  • English
  • German
  • Turkish

創(chuàng)建完成后,在底部的Action Editor中就會顯示三個入口,這些入口是創(chuàng)建菜單時自動生成的

  1. 右鍵單擊Turkish后選擇轉(zhuǎn)到槽,觸發(fā)類型:triggered()

    x向生成的函數(shù)中添加如下代碼

    void MainWindow::on_actionTurkish_triggered()
    {
        qApp -> installTranslator(turkishTranslator);
    }
    
  2. 同理,向German的槽中添加如下代碼

    void MainWindow::on_actionTurkish_triggered()
    {
        qApp -> installTranslator(germanTranslator);
    }
    
  3. 對actionEnglish執(zhí)行同樣的操作。與之前不同,由于工程本身就是用英語寫的,所以要想顯示英語,只需移除turkishTranslator 和 germanTranslator即可,代碼如下

    void MianWindow::on_actionEnglish_triggered()
    {
        qApp -> removeTranslator(turkishTranslator);
        qApp -> removeTranslator(germanTranslator);
    }
    
  4. 為保證界面翻譯成功運行,我們需要重寫changeEvent,在mianWindow.h中添加如下代碼

    void changeEvent(QEvent *event);
    
  5. 在mainWindow.cpp文件中添加如下代碼:

    void MainWindow::changeEvent(QEvent *event)
    {
        if(event -> type() == QEvent::LanguageChange)
        {
            
        }
    }
    

    ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文提及如何使用QT和QT Linguist來實現(xiàn)翻譯,如果你對所謂動態(tài)翻譯感興趣,請移步到其他文章。筆者也推薦一...
    陸大胖閱讀 4,286評論 1 6
  • Qt是屬于一個跨平臺的GUI開發(fā)軟件,支持的平臺有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一葉之界閱讀 8,395評論 0 17
  • 為什么在頭文件中有的是使用前置聲明,而有的是包含頭文件? 如下代碼: 前置聲明(forward declarati...
    Joe_HUST閱讀 1,447評論 0 6

友情鏈接更多精彩內(nèi)容