Qt 中英文切換


一、前言

  軟件面向不同國籍用戶時,需要顯示不同語言的操作界面,Qt提供語言家可翻譯為不同語言類型,方便軟件走向國際化。

二、功能實現

  1、翻譯文件制作

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

   

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

  2)修改源代碼繼承changeEvent事件,在該事件內刷新字符串設置

 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自帶的命令行窗體

  

  3)切換到源代碼存放目錄,並執行"lupdate 工程pro文件"生成ts文件

   

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

  

  5)如正確創建res目錄后,再次執行lupdate指令生成ts文件

  

  6)在res目錄下,查看生成的ts文件

  

  7)打開Qt語言家

  

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

  注:程序默認設置英文字符串,可不用操作lang_en_US.ts文件

  

  9)對需要翻譯的內容增加漢語翻譯,並保存

  

  注:選擇上下文中的“ZHEN_Test”,還可查看到一個“Back”,此時是因為代碼中使用的是tr包含字符串,默認分類到類名列表中

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

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

  

  11)在剛才Qt命令窗體中,執行”lrelease 工程pro文件“,生成各qm文件

  

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

  

  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文件中添加翻譯資源文件

  

  3、加載資源文件

  1)軟件啟動時,加載資源中的所有qm文件到內存

 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的應用類,加載當前選擇語言對應的資源文件

 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、運行效果

  

  5、代碼與二進制運行文件如下鏈接,可進行下載

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM