在Poedit的PO文件中,如何提供关键字列表,以便为每个关键字自动提取评论?

In PO file for Poedit, How to provide keywords list, so that a comment is automatically extracted for each keyword?

我想在我的源文件中添加关键字和注释。

gettext 的关键字文档说:如果 keywordspec 的格式为 'id:argnum...,"xcomment"',xgettext 在从指定的参数字符串中提取消息时,添加提取的注释 xcomment到消息。

我找不到任何示例来帮助我解决这个问题。

这是我的 X-Pedit-KeywordsList header,

"X-Poedit-KeywordsList: __;_ex;\n"

这是我的 php 源代码中的示例行:

_ex("unlock_level", "Available at level #.")

我希望输出为:

# "Available at level #."
msgid "unlock_level"

我应该如何编辑我的关键字列表 header(and/or 来源)?

关键字规范(bourne shell 语法!)的示例是:

xgettext --keyword='_ex:1,"my comment"' so.php

很遗憾,这不是您想要的。它产生这个 po 条目:

#. my comment
#: so.php:3
msgid "unlock_level"
msgstr ""

上面的command-line翻译成"extract the first argument all all calls to _ex() as the msgid, and always add the comment 'my comment' to the PO entry"。您只能指定哪些参数是单数、复数或消息上下文。

X-POEdit-KeywordsList 似乎是 POEdit 使用的自定义 header。对你也没有帮助。

您可以通过将源更改为以下内容来达到预期的效果:

<?
# TRANSLATORS: Available at level #.
_ex("unlock_level");
?>

现在像这样调用 xgettext

xgettext --add-comments=TRANSLATORS: --keyword=_ex so.php

您获得此 PO 条目:

#. TRANSLATORS: Available at level #.
#: so.php:3
msgid "unlock_level"
msgstr ""

选项 --add-comments=TRANSLATORS: 的效果是它在关键字前添加注释,前提是该注释恰好以字符串 "TRANSLATORS:" 开头。您可以用您选择的字符串交换 "TRANSLATORS:"。您还可以省略 --add-comments 的参数并提取紧接在关键字之前的所有注释。

不完全是您最初想要的,但尽可能接近。

Poedit 支持译者评论。我最终像这样将本地化密钥添加到我的源文件中:

// TRANSLATORS: "Available at level #."
__("unlock_level")

这就是我在 Poedit 中按更新按钮在我的 po 文件中得到的内容:

#. TRANSLATORS: "Available at level #."
msgid "unlock_level"

我刚刚遇到这个 post 因为我也在寻找一种方法来做到这一点,并且只是想补充一点 @Paiman Roointans 的解决方案有效,因为 PoEdit 使用 TRANSLATORS: 标签作为comment extraction 通过 gettext 的默认标签。

如果您打开 PoEdit -> Preferences -> Extractors,然后单击 window 左下角的小“+”按钮,这实际上可以看到,这将向您显示 PoEdit 触发的命令默认情况下,从源文件中提取翻译字符串,类似于:

xgettext -L PHP --add-comments=TRANSLATORS: --force-po -o %o %C %K %F

其中 %o %C %K %F 是各自的占位符,例如 %o 用于输出文件名,%K 用于关键字列表(您在 POEdits 关键字掩码中指定)等

要更改 PoEdit 中的默认注释标识符,只需转到翻译 -> 属性 -> 单击 window 的“翻译属性”选项卡下的“高级提取首选项”,然后弹出。通常那里的第一个字段应该告诉您当前用作注释标识标签的字符串。例如将其更改为 mysamplecommentkey,并在 PHP 代码中编写这样的翻译,例如:

/* mysamplecommentkey: This is a test */
gettext( "Translate Me" );

从源代码中提取时,您的“翻译我”将附加 This is a test 注释。

还有一点:在 PoEdit 中,您应该使用 POT 而不是 PO 模板文件来进行 gettext 本地化。每次更新翻译时,设置所有关键字提取器和/或注释标识符字符串,然后从源代码中提取到 .pot 文件中。

然后,在你所有的 PO 文件中,你只需在 PoEdit 中点击 update from POT-File,它就会正确更新你所有的翻译,包括所有的翻译评论,这将全部也可以直接从 POT 文件中提取(因此您最好使用所有翻译人员最有可能理解的语言来编写这些翻译评论)。

我花了一些时间来弄清楚所有这些,如果我从一开始就知道所有这些,我会节省很多时间,所以我想在这里分享。如果使用得当,PoEdit(已经是它的免费版)可以为您节省很多时间!