2D 繪圖系列告一段落,轉向開發者常問的國際化 (i18n) 主題。Qt 提供多種國際化方案,推薦使用 tr() 函式搭配 .ts/.qm 翻譯檔流程,避免硬編碼字元集導致的相容性問題。
在原始碼中,所有面向使用者的可見字串皆以 tr() 包裹:
QMenu *fileMenu = new QMenu(tr("&File"), menuBar);
QAction *newFile = new QAction(tr("&New..."), fileMenu);
fileDialog->setWindowTitle(tr("Open File"));
QMessageBox::information(NULL, tr("Path"), tr("You selected\n%1").arg(path));
注意 & 標記選單快捷鍵,%1 佔位符搭配 arg() 實現動態參數插值——這是支援翻譯的關鍵,切勿改用字串串接 (+),否則 lupdate 無法提取完整語句。
.pro 加入 TRANSLATIONS += myapp.tslupdate MyApp.pro,生成 .ts (XML 格式).ts 逐項翻譯,完成後點選「發布」產出二進位 .qmmain() 載入 .qm:
QTranslator qtTranslator;
qtTranslator.load("myapp.qm");
a.installTranslator(&qtTranslator);
若執行後介面仍為英文,通常是 .qm 檔未置於執行檔同目錄。load() 採相對路徑會在執行檔所在資料夾尋找,請確認部署時將 .qm 複製至同層目錄。這也印證翻譯檔為動態載入,支援執行時期切換語言。
下一篇將深入 tr() 多載參數、複數形式處理、QT_TR_NOOP 等進階宏、以及如何翻譯 Qt 內建對話框 (如檔案選擇器) 的標準按鈕文字。