1. 程式人生 > >Qt多國語言的實現與切換(國際化)

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);

注:隨時可以重複“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
*translator=newQTranslator(qApp);
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
(":/res/%1.qm").arg("cn"));
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;來確保整個翻譯工作的正確性。