You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:48:24