核心流程
- 標記可翻譯字符串:代碼中用
tr("Source Text") 包裹所有可見文本。
- 生成 .ts 文件:
lupdate project.pro 掃描源碼生成 XML 翻譯源文件。
- 翻譯:使用 Qt Linguist 打開 .ts,逐條翻譯並釋放 (
Ctrl+Enter)。
- 發布 .qm 文件:
lrelease project.pro 編譯生成二進制翻譯文件。
- 加載翻譯器:運行時安裝
QTranslator 到 qApp。
動態切換代碼示例
// main.cpp
QApplication app(argc, argv);
QTranslator translator;
QString locale = QLocale::system().name(); // "zh_CN"
if (translator.load(":/i18n/myapp_" + locale)) {
app.installTranslator(&translator);
}
// 切換語言槽函數
void MainWindow::switchLanguage(const QString &locale) {
qApp->removeTranslator(&m_translator);
if (m_translator.load(":/i18n/myapp_" + locale)) {
qApp->installTranslator(&m_translator);
}
// 關鍵:觸發 UI 重新翻譯
retranslateUi(); // 手動調用或依賴 changeEvent
}
// 重寫 changeEvent 自動響應
void MainWindow::changeEvent(QEvent *event) {
if (event->type() == QEvent::LanguageChange) {
ui->retranslateUi(this); // UI 設計器生成的重新翻譯函數
}
QMainWindow::changeEvent(event);
}
VS2010 集成要點
- 安裝 Qt Visual Studio Add-in (對應 Qt 4.8.5 版本)。
- 專案屬性 → Qt Build Steps → 添加
lupdate / lrelease 自定義構建步驟,自動生成 .ts/.qm。
- .qm 文件放入資源文件
.qrc 以 :/i18n/ 前綴訪問,打包進 EXE 避免外部依賴。
常見問題排查
| 現象 | 原因 | 解決 |
| 切換後界面不變 | 未調用 retranslateUi 或 changeEvent 未觸發 | 手動調用 ui->retranslateUi(this) 或發送 LanguageChange 事件 |
| .ts 文件為空 | 源碼未用 tr() 包裹、lupdate 路徑錯誤 | 檢查 tr() 使用、.pro 中 SOURCES/HEADERS/TRANSLATIONS 設置 |
| 運行找不到 .qm | 未加入 .qrc 或路徑前綴錯誤 | 資源文件前綴需與 load() 參數一致 (如 ":/i18n/") |
注意
Qt 4.8.5 已停止維護,新項目強烈建議遷移至 **Qt 5/6 + CMake**,國際化機制基本兼容但構建系統現代化。
- 上一篇文章: Java 控制台輸入邏輯錯誤導致程序無輸出的排查
- 下一篇文章: Android 實現用戶長時間無操作自動退出登錄功能
Copyright ©
程式碼之家 All Rights Reserved