一、前言
軟體面向不同國籍使用者時,需要顯示不同語言的操作界面,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