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