背景:
公司要求本项目支持多语言, 网上查看了Qt语言家教程Qt项目实战:语言家(中英文翻译), 自己作了Demo,翻译效果良好。在正式工程施工时发现库里的界面没有翻译效果。本文记录解决这个问题。
省流结论:
对于工程每个包含界面的项目都独立使用lupdate 生成.ts文件,
使用lconvert 合并ts文件,
最后用linguist语言家翻译,发布qm文件。
环境:
开发系统:20.04.1-Ubuntu
QT :Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit)
问题现象:
工程里有两个项目存在界面文件,如下图
如果使用lupdate 选择DH_App和SoftKeyboardlib 分别执行生成的同一个ts 文件,那么另一个项目的翻译文字被保留为"过时"条目, 这样发布的qm文件并不能完全应用程序中。
解决方案:
独立生成ts ,合并,再翻译, 最后发布qm文件。
最后帖一段deepseek生成的翻译合并脚本
#!/bin/bash PROJECT_ROOT=~/Project/DH_APP_Git/Qt_D9016 # 多语言种类 LANGUAGES=("zh_CN" "en_US") cd $PROJECT_ROOT echo "=== 更新所有翻译 ===" # 为每种语言处理 for LANG in "${LANGUAGES[@]}"; do echo "处理 $LANG 语言..." # 生成主程序翻译 cd $PROJECT_ROOT/DH_App_Aarch64 lupdate -no-obsolete DH_App_Aarch64.pro -ts i18n/DH_App_main_$LANG.ts # 生成软键盘翻译 cd $PROJECT_ROOT/SoftKeyboardLib lupdate -no-obsolete SoftKeyboardLib.pro -ts ../DH_App_Aarch64/i18n/DH_App_softkeyboard_$LANG.ts # 合并翻译 cd $PROJECT_ROOT/DH_App_Aarch64 lconvert -i i18n/DH_App_main_$LANG.ts i18n/DH_App_softkeyboard_$LANG.ts -o i18n/DH_App_$LANG.ts # 清理临时文件 # rm i18n/DH_App_main_$LANG.ts i18n/DH_App_softkeyboard_$LANG.ts echo "✓ $LANG 翻译更新完成" done echo "=== 所有翻译更新完成 ===" echo "请用 Qt Linguist 编辑翻译文件, 例如:" echo "linguist $PROJECT_ROOT/DH_App_Aarch64/i18n/DH_App_en_US.ts"