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

如何在运行xgettext时自动为gettext字符串添加注释?

在PHP项目中给gettext翻译字符串添加上下文注释的方案

你的双参数写法默认不支持

标准的_()函数(gettext的别名)仅接受单个字符串参数,xgettext默认无法识别_("文本", "注释")这种写法——它不会把第二个参数当作翻译注释提取,反而可能将其判定为另一个待翻译字符串,因此不建议采用这种写法。

给翻译人员添加上下文注释的最佳实践

1. 代码注释+ xgettext提取规则

在待翻译字符串上方添加以TRANSLATORS:开头的注释,通过xgettext的参数可将这些注释直接提取到.po文件中,翻译人员能直观看到上下文说明。

示例代码:

// TRANSLATORS: 此文本出现在用户个人中心的密码修改表单底部,是提交修改的按钮文字
echo _("Save Changes");

修改你的xgettext命令,加入--add-comments=TRANSLATORS:参数:

find ./app -iname "*.php" | xargs xgettext -d app/Locale/messages --add-comments=TRANSLATORS:

生成的.po文件会包含对应注释:

#. TRANSLATORS: 此文本出现在用户个人中心的密码修改表单底部,是提交修改的按钮文字
msgid "Save Changes"
msgstr ""

2. 用pgettext区分场景上下文

如果同一个字符串在不同场景需要不同翻译(比如"Submit"在按钮和页面标题中的译法不同),可以使用pgettext()函数指定上下文,xgettext会自动将上下文提取到.po文件的msgctxt字段。

示例代码:

// 表单按钮场景的Submit
echo pgettext("form_button", "Submit");
// 页面标题场景的Submit
echo pgettext("page_title", "Submit");

生成的.po文件条目:

msgctxt "form_button"
msgid "Submit"
msgstr ""

msgctxt "page_title"
msgid "Submit"
msgstr ""

翻译人员可通过msgctxt明确每个字符串的使用场景。

3. 避免自定义非标准函数

不要自行修改_()函数的参数逻辑,这会增加xgettext的解析复杂度,不符合gettext的标准规范,后续维护和协作成本会更高。

内容的提问来源于stack exchange,提问作者Samuel Sylvander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:10:09