天天看點

Qt 中英文切換

一、前言

  軟體面向不同國籍使用者時,需要顯示不同語言的操作界面,Qt提供語言家可翻譯為不同語言類型,友善軟體走向國際化。

二、功能實作

  1、翻譯檔案制作

  1)在pro檔案中添加生成中英文翻譯過渡檔案(.ts檔案)所需代碼

   

Qt 中英文切換

  注:res為存放生成ts檔案的存放目錄,需手動建立res目錄,否則執行下面第3步時會報錯

  2)修改源代碼繼承changeEvent事件,在該事件内重新整理字元串設定

Qt 中英文切換
Qt 中英文切換

1 void ZhEn_Test::changeEvent(QEvent *event)
 2 {
 3     if (event->type() == QEvent::LanguageChange)
 4     {
 5         //帶參數情況
 6         m_InfoQlb->setText(QObject::tr("The %1 language switch.").arg(m_Count));
 7 
 8         //不帶參數情況
 9         setWindowTitle(QObject::tr("Qt Linguist"));
10         m_EnRadioButton->setText(QObject::tr("English"));
11         m_VieRadioButton->setText(QObject::tr("Vietnamese"));
12         m_ZhRadioButton->setText(QObject::tr("Simplified Chinese"));
13 
14         //同一字元串需翻譯為不同含義情況
15         m_Back1Qpb->setText(tr("Back"));
16         m_Back2Qpb->setText(QObject::tr("Back"));
17         m_Back3Qpb->setText(QObject::tr("Back", "Test"));
18     }
19     QWidget::changeEvent(event);
20 }      

重新整理字元串

  3)打開Qt自帶的指令行窗體

  

Qt 中英文切換

  3)切換到源代碼存放目錄,并執行"lupdate 工程pro檔案"生成ts檔案

   

Qt 中英文切換

  4)如在工程本地未建立res目錄,則會報如下錯誤

Qt 中英文切換

  5)如正确建立res目錄後,再次執行lupdate指令生成ts檔案

Qt 中英文切換

  6)在res目錄下,檢視生成的ts檔案

Qt 中英文切換

  7)打開Qt語言家

Qt 中英文切換

  8)打開需要翻譯的ts檔案,先選擇lang_zh_CN.ts

  注:程式預設設定英文字元串,可不用操作lang_en_US.ts檔案

Qt 中英文切換

  9)對需要翻譯的内容增加漢語翻譯,并儲存

Qt 中英文切換

  注:選擇上下文中的“ZHEN_Test”,還可檢視到一個“Back”,此時是因為代碼中使用的是tr包含字元串,預設分類到類名清單中

  如果不需要将三個“Back”翻譯為不同意思,可使用QObject::tr包含字元串,節約翻譯工作量與減小翻譯檔案大小

  10)同樣打開lang_vie_HE.ts,翻譯英文為越南語,并儲存

Qt 中英文切換

  11)在剛才Qt指令窗體中,執行”lrelease 工程pro檔案“,生成各qm檔案

Qt 中英文切換

   12)到此翻譯檔案制作完成,如下*.qm檔案

Qt 中英文切換

  2、翻譯檔案包含進工程

  1)建立一個文本檔案,名稱修改為language.qrc,添加内容如下

1 <RCC>
2     <qresource prefix="" >
3         <file>res/lang_en_US.qm</file>
4         <file>res/lang_zh_CN.qm</file>
5         <file>res/lang_vie_HE.qm</file>
6     </qresource>
7 </RCC>      

  2)工程pro檔案中添加翻譯資源檔案

Qt 中英文切換

  3、加載資源檔案

  1)軟體啟動時,加載資源中的所有qm檔案到記憶體

Qt 中英文切換
Qt 中英文切換
1 #include "ZhEn_Test.h"
 2 #include "application.h"
 3 
 4 int main(int argc, char *argv[])
 5 {    
 6     Application app(argc, argv);
 7     //加載所有qm資源檔案到記憶體
 8     app.loadTranslations(":/res");
 9     
10     ZhEn_Test w;
11     w.show();
12 
13     return app.exec();
14 }      

加載資源檔案到記憶體

  2)編寫繼承QApplication的應用類,加載目前選擇語言對應的資源檔案

Qt 中英文切換
Qt 中英文切換
1 void Application::setLanguage(const QString& locale)
 2 {
 3     QTranslator * item = NULL;
 4 
 5     //移除上次語言
 6     while (m_Current.count())
 7         removeTranslator(m_Current.takeFirst());
 8 
 9     //安裝新語言
10     m_Current = m_Translators.values(locale);
11     foreach(item, m_Current)
12         installTranslator(item);
13 }      

設定目前語言

  4、運作效果

Qt 中英文切換

  5、代碼與二進制運作檔案如下連結,可進行下載下傳

   連結:https://pan.baidu.com/s/12LnPQY80xw-axoa_QvaHyA,提取碼:zhEn

繼續閱讀