Qt多國語言的實現與切換(國際化)
阿新 • • 發佈:2019-01-24
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);
|
注:隨時可以重複“2”~“3”步驟以便更新翻譯
5、切換不同多國語言
void MainWindow::Refresh()
{
ui->listWidget->addItem(tr( "item1" ));
ui->listWidget->addItem(tr( "item2" ));
ui->listWidget->addItem(tr( "item3" ));
}
void MainWindow::on_pushButton_clicked()
{
QTranslator boolb=false; b=translator->load(QString(":/res/%1.qm").arg("en")); qApp->installTranslator(translator);
this ->Refresh();
}
void MainWindow::on_pushButton_2_clicked()
{
QTranslator*translator=newQTranslator(qApp); boolb=false; b=translator->load(QString qApp->installTranslator(translator);
this ->Refresh();
}
在幫助文件中,關於 QTranslator::load有這樣一句話。 The data is not copied. The caller must be able to guarantee that data will not be deleted or modifiled. 這段話明確的說明了,QTranslator在load以後,並沒有把qm檔案中的資料拷貝一份,而是在需要的時候去查詢字串。如果qm在這期間被刪除或修改,對程式都是有影響的。擴充套件開來,QTranslator必須保證要一直有效,如果在函式中定義的區域性變數,函式結束後就自動釋放掉了,那麼翻譯工作就不能正常進行。所以建議在private中定義個成員變數 QTranslator* app_translator;來確保整個翻譯工作的正確性。 |