如何阻止gettext的msginit命令预填充新PO文件的msgstr值?
关于msginit预填充msgstr的问题解答
是否为预期行为?
是,这是msginit的默认预期行为。该命令的设计逻辑是为翻译工作提供便利:将源文本(msgid)预填充到翻译字段(msgstr)中,作为翻译人员的起始参考,尤其适合源语言与目标语言差异较小的场景。而msgmerge的核心是合并已有翻译和更新的模板,因此不会自动填充空的msgstr。
如何禁用预填充?
有两种实用方案:
方案1:生成后用msgattrib清空msgstr
先正常执行msginit生成文件,再通过msgattrib批量清空所有msgstr值:
# 生成初始PO文件 msginit --input=mydomain_source.pot \ --locale=fr_FR.UTF-8 \ --no-wrap \ --no-translator \ --output-file="mydomain-fr_FR.po" # 清空所有msgstr字段 msgattrib --empty-output --output=mydomain-fr_FR.po mydomain-fr_FR.po
方案2:直接用msgmerge生成空msgstr的PO文件
绕过msginit,通过msgmerge结合空PO文件来生成目标文件:
# 创建空PO文件 touch empty.po # 生成带空msgstr的目标PO文件 msgmerge --no-wrap --no-translator --output-file=mydomain-fr_FR.po empty.po mydomain_source.pot
执行上述任一方案后,生成的PO文件将符合预期:
#. Message for unknown errors #: /Http/Response.php:367 msgid "An unknown error occurred." msgstr ""
内容的提问来源于stack exchange,提问作者DevelJoe
相关产品推荐
相关产品推荐

