一.代碼編寫注意:
將需要翻譯的字符串用 QObject::tr("Hello world!").
或者QApplication::translate("Dialog", "Hello world!", 0); 包含
例如:
第一種:
lab = new QLabel(tr("trans_text","text"), this);
tr參數第一個表示翻譯字符(標識),第二個為翻譯提示
第二種(一般為UI編輯器方式):
pushButton->setText(QApplication::translate("Widget", "click", 0));
二.生成翻譯文件
1.在pro文件中加入關鍵字,例如:
TRANSLATIONS += XXX/en.ts \
XXX/zh.ts
表示要在XXX目錄生成相應的翻譯文件。
2.保存項目后運行:
菜單欄->工具->外部->Qt語言家->lupdate
相當于執(zhí)行了lupdate *.pro
會自動在目錄生成兩個文件:en.ts zh.ts
3.運行l(wèi)inguist工具加載en.ts zh.ts兩個文件并分別進行相應的翻譯。
每一個翻譯完了按ctrl+ENTER確認下即可。
4.翻譯完成后運行:
菜單欄->工具->外部->Qt語言家->release
相當于執(zhí)行了 lrelease *.pro
會自動在相應目錄生成兩個文件:en.qm zh.qm
三、語言切換
1.在程序啟動時候已經確定,不需要動態(tài)切換
//可定義成靜態(tài)
QTranslator translator;
translator.load(Global::rootPath+Global::langPath+"zh.qm");
qApp->installTranslator(&translator); //qApp是全局的變量
注意上面語句一定要在頁面實例化之前。
2.動態(tài)語言切換:每個類重寫LanguageChange事件
void XXX::changeEvent(QEvent *e)
{
if(e->type()==QEvent::LanguageChange){ //如果是語言事件
label->setText(tr("trans_we")); //定義所有需要自動改變的部件
}else{
QWidget::changeEvent(e);
}
}
相應的觸發(fā)槽中重新加載語言文件即可,會自動觸發(fā)所有對象的changeEvent事件
translator->load("XXX/zh.qm");
qApp->installTranslator(translator); //qApp是全局的變量