1. 程式人生 > >Qt筆記-翻譯機制

Qt筆記-翻譯機制

and iii 函數的參數 命令 字符串 存在 reat 返回值 譯文

i) Qt的翻譯機制入門:

0)以tr("<英文文本>")封裝需要翻譯的文本,比如:ui->label->setText(tr("Date"));
1)在工程.pro文件中寫入: TRANSLATION += <.pro‘s name>_ZH_CN.ts #這裏語言和區域名字一定要嚴格,否則之後生成的同名.qm文件無法被Qt翻譯器加載#
2)利用命令行工具lupdate -verbose -no-obsolete <.pro‘path and name>生成.ts文件。-no-obsolete參數表示生成的.ts文件中檢測並剔除代碼中不再存在的tr("< 英文文本>")。使用Qt Creator的“工具”->"外部"->"Qt語言家"->"更新翻譯(lupdate)",等同於上述的lupdate -verbose,即:跳過檢測過期的翻譯原始文本。
3)在工程的資源文件中添加這個.ts文件
4)利用Qt翻譯家翻譯這個.ts文件並發布為.qm文件
5)把.qm文件添加入資源文件中
6)在main.cpp中寫如下語句:QTranslator translator;
translator.load(<資源文件中的.qm文件路徑和名字>);
7)如果6)的返回值為true,那麽把main.cpp中的QApplication對象執行.installTranslator(&translator); 這樣翻譯文件就加載完成了。
註意:若qt可以找到正確命名後的qm文件但卻無法加載qm文件,可以先刪除build目錄再編譯運行。

ii) tr()函數的參數如果為宏定義的字符串,那麽這種字符串是無法被翻譯的。

iii) tr()函數的參數如果是變量,(似乎?)需要通過tr("%1").arg(<QString>)解決。

iv) 任何需要翻譯的文本所在的類的.h文件中均需要聲明Q_OBJECT宏,否則lupdate工具無法檢測到需要翻譯的原始文本。

v) 建議需要翻譯的原始文本以英文書寫。因為這樣會使因字符編碼差異造成的兼容性問題最小化。

Qt筆記-翻譯機制