如何用Linguist与lrelease生成专有语言的翻译语言文件?
解决lupdate无法识别自定义pm()函数的问题
lupdate默认只识别Qt自带的翻译标记(比如tr()、QT_TR_NOOP()),你的pm()是自定义函数,得手动配置让它被扫描到,按以下步骤操作:
1. 配置自定义翻译函数识别
- 如果项目有Qt的.pro文件,直接在文件里添加一行:
这行代码的作用是告诉lupdate,把TRANSLATION_FUNCTIONS += pmpm()当作包含待翻译字符串的函数处理。 - 要是没有.pro文件,可直接在lupdate命令里指定要识别的函数:
lupdate -recursive '.' -ts HAUSMITTEIL_de.ts -tr-function pm
2. 确保待翻译字符串为字面量
lupdate只能扫描到硬编码在代码里的字符串字面量,比如pm("Datum")这种格式。如果你的专有语言是动态生成C++代码的,要保证最终生成的代码中,pm()的第一个参数是直接写死的字符串,不能是变量或动态拼接的内容,否则lupdate无法捕获。
3. 重新生成ts文件
- 用.pro文件的情况:先执行
qmake更新配置,再运行lupdate your_project.pro - 直接用命令的情况:重新执行带
-tr-function参数的lupdate命令
完成后生成的HAUSMITTEIL_de.ts文件里,就会包含"Datum"、"Seite %1!"这些待翻译条目了。
后续操作
- 用Qt Linguist打开ts文件完成翻译
- 执行
lrelease HAUSMITTEIL_de.ts -qm HAUSMITTEIL_de.qm生成最终可用的qm语言文件
内容的提问来源于stack exchange,提问作者Andy A.
相关产品推荐
相关产品推荐

