搜尋此網誌

2011年9月29日 星期四

在Qt中實現多語系的功能

1. 在程式中所有要翻譯的文字都必須在 QObject::tr()之中

ex:
QMessageBox msgb(this);
msgb.setWindowTitle(tr("Illegal"));
msgb.setText(tr("Illegal product!"));
msgb.setIcon(QMessageBox::Warning);
msgb.exec();


2. 在.pro檔中,設定預計產生的翻譯檔語系名稱及其位置 (本例名稱為 test.pro)

ex:
TRANSLATIONS += ./translations/test_en.ts ./translations/test_tw.ts ./translations/test_jp.ts ./translations/test_cn.ts


3. 執行 lupdate 產生 .ts檔

ex:
lupdate test.pro


4. 使用 Qt Linguist 編輯.ts檔

5. 使用 lrelease 產生 .qm檔

ex:
lrelease ./translations/*.ts


6. copy .qm檔到你所指定的目錄

ex: cp -ax ./translations/*.qm /home/daniel/language/qm/*


7. 在主程式 main當中,依據需求載入你所需的qm檔

ex:

QTranslator translator, defTrans;
QLocale g_sysLocale;

//繁體中文
translator.load("test_tw", "/home/daniel/language/qm");
defTrans.load("qt_zh_TW", "/home/daniel/language/qm");

app.installTranslator(&translator);
app.installTranslator(&defTrans);
g_sysLocale = QLocale(QLocale::Chinese, QLocale::Taiwan);

// 簡體中文
/*
translator.load("test_cn", "/home/daniel/language/qm");
defTrans.load("qt_zh_CN", "/home/daniel/language/qm");
app.installTranslator(&translator);
app.installTranslator(&defTrans);
g_sysLocale = QLocale(QLocale::Chinese, QLocale::China);
*/

QLocale::setDefault(g_sysLocale);
MainWindow mainWin(0);
mainWin.setLocale(g_sysLocale);
mainWin.start();
return app.exec();


8. 所有包在 QObject::tr()中的字串,就會依照所載入的qm檔,做文字置換動作

沒有留言: