如何在运行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
相关产品推荐
相关产品推荐

