xgettext无法提取GTK4 Builder文件中可翻译字符串的问题
嘿,我之前也碰到过一模一样的问题!其实xgettext默认对GTK4 Builder文件的支持需要一些小调整,尤其是你这种由blueprint-compiler生成的glade文件,咱们一步步来解决:
先检查xgettext版本:旧版本的xgettext对GTK4的Builder格式支持不太到位,建议用0.21及以上版本。你可以在终端里跑
xgettext --version确认一下版本号,要是版本太低就更新一下。指定正确的文件类型参数:xgettext需要明确知道这是Glade/Builder文件,所以执行提取命令的时候要加上
--language=Glade参数,完整命令大概是这样:xgettext --language=Glade -o messages.pot builder.glade这个参数会让xgettext专门解析Builder文件里的可翻译属性,比如窗口的
title、按钮的label这些。优先从Blueprint源文件提取(更靠谱):既然你的glade文件是由.blp文件生成的,直接从Blueprint源文件提取翻译字符串会更准确,还能避免生成文件里的格式问题。用blueprint-compiler自带的提取命令就行:
blueprint-compiler extract builder.blp -o blueprint.pot如果还有其他代码里的翻译字符串,可以用
msgcat把多个pot文件合并:msgcat blueprint.pot your_code.pot -o combined.pot确保字符串标记为可翻译:在Blueprint文件里,要给需要翻译的字符串加上下划线前缀,比如:
title: _("My App")这样blueprint-compiler生成glade文件时,会自动加上
translatable="yes"属性,xgettext就能准确识别这些字符串了。指定编码格式:你的文件是UTF-8编码的,加上
--from-code=UTF-8参数能避免编码识别错误,命令调整为:xgettext --language=Glade --from-code=UTF-8 -o messages.pot builder.glade
按照这些步骤试一下,应该就能顺利提取到可翻译字符串啦!
备注:内容来源于stack exchange,提问作者Joel

