Qt多國語言的實現與切換(國際化)
1、建立語言檔案
開啟.pro檔案,加入以下:
TRANSLATIONS+=cn.ts
工具->外部->Qt語言家->更新翻譯,將產生翻譯檔案cn.ts
2、編輯翻譯檔案
啟動Linguist(Qt語言家),開啟cn.ts,然後進行編輯,主要是將源文對應的譯文填寫上,最後儲存
3、部署翻譯檔案
工具->外部->Qt語言家->部署翻譯,將產生語言檔案qm
4、載入翻譯檔案 ?
QTranslator translator; bool b = false ; b = translator.load( "cn.qm" ); a.installTranslator(&translator); |
(以上四步要注意清理和更新,負載檔案路徑不對時load會失敗,最好方式是把翻譯檔案放到qrc裡,用qrc的調用方式,路徑基本不會出問題)
4.1要翻譯一個指定(使用者可見)的字串,如果在QObject類中可以直接調用tr()函數,如果在不是QObject類中加入QObject首碼QObject::tr()重寫tr(),也可以使用Q_DECLARE_TR_FUNCTION()宏把tr()函數添加到該類中。
4.2用這個命令產生最新ts檔案(工程編譯過後再產生該檔案) lupdate qml/LoginWindow.qml qml/MainWindow.qml -ts en.ts zh_cn.ts
4.3用Qt Linguist開啟上一步產生的qml.ts 和 app.ts,將我們翻譯的文字輸入進去即可,最後儲存檔案,完成。 然後在命令列中輸入:
lconvert app.ts qml.ts -o displayChinese_zh_CN.ts
這是為了將兩個ts檔案合并起來。最後的效果如圖:
4.4.動態庫中的多語言也可以放到主程式做,用同一個ts qm檔案,只要在main載入一次就行,但是要注意的是ts/qm檔案的命名必須遵循iso標準格式,不然的話動態庫的多語言顯示不出來,只能顯示主程式的多語言。比如translation_zh_CN.ts 或 translation_en.ts這些格式,而尾碼不是標準格式的則只能應用在主程式的多語言,動態庫的多語言無能為力,這可能是動態庫載入時必須搜尋標準格式的原因吧。
4.5要注意還要載入上qt內建翻譯,否則qt的彈出框之類的都是英語了。
4.6
多語言要注意載入系統的多語言,比如彈出框要是沒載入系統多語言的話,有些系統介面會只顯示英文
。具體實現為 QString language = set.value("language",Qlocale::system()).tolocale().name();
//載入本系統翻譯的結果
QTranslator *translator = new QTranslator();
if(translator->load(Gt::home()+"/translations/mcs_"+language)==false){
translator->deleteLater();}
else
QApplication::installTranslator(translator);
//載入qt自有的翻譯
QTranslator *qtTranslator = new QTranslator();
if(qtTranslator->load(Gt::home()+"/translations/qt_"+language)==false){
qtTranslator->deleteLater();}
else
QApplication::installTranslator(qtTranslator);
5、
ui->retranslateUi(this);//這裡實現語言翻譯器的更新
。