【问题标题】:In PO file for Poedit, How to provide keywords list, so that a comment is automatically extracted for each keyword?在 Poedit 的 PO 文件中,如何提供关键字列表,以便为每个关键字自动提取评论?
【发布时间】:2018-12-31 17:55:42
【问题描述】:

我想将关键字和 cmets 放入我的源文件中。

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

我找不到任何可以帮助我解决此问题的示例。

这是我的 X-Pedit-KeywordsList 标题,

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

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

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

我希望输出是:

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

我应该如何编辑我的关键字列表标题(和/或来源)?

【问题讨论】:

  • X-Poedit-KeywordsList 可能有错字。不应该是 _ex 而不是 _e 吗?
  • @GuidoFlohr 你是对的。已编辑。

标签: gettext poedit


【解决方案1】:

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

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

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

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

上面的命令行转换为“提取第一个参数所有对 _ex() 的调用作为 msgid,并且总是将注释 'my comment' 添加到 PO 条目”。您只能指定哪些参数是单数、复数或消息上下文。

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

您可以通过将来源更改为以下方式来实现所需的结果:

<?
# 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:”开头,则它会添加紧接在关键字之前的 cmets。您可以用您选择的字符串交换“TRANSLATORS:”。您还可以省略 --add-comments 的参数并提取紧接在关键字之前的所有 cmets。

不是你最初想要的,但尽可能接近。

【讨论】:

  • 我没有手动运行 xgettext,但非常感谢。你的回答很有帮助。
【解决方案2】:

Poedit 支持翻译器 cmets。我最终将本地化密钥添加到我的源文件中,如下所示:

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

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

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

【讨论】:

    【解决方案3】:

    我刚刚看到这篇文章,因为我也在寻找一种方法来做到这一点,并且只是想添加 @Paiman Roointans 的解决方案,因为 PoEdit 通过 gettext 使用 TRANSLATORS: 标签作为 comment extraction 的默认标签.

    如果您打开 PoEdit -> 首选项 -> 提取器,然后单击窗口左下方的小“+”按钮,实际上可以看到这一点,这将显示默认情况下 PoEdit 触发的命令以提取源文件中的翻译字符串,例如:

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

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

    要更改 PoEdit 中的默认注释标识符,只需转到翻译 -> 属性 -> 单击然后弹出窗口的“翻译属性”选项卡下的“高级提取首选项”。通常,那里的第一个字段应该告诉您当前字符串被用作注释标识标签。例如将其更改为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,它就会正确更新您的所有翻译,包括所有用于翻译的 cmets,这些都将从 POT 文件中提取也可以直接使用(因此您最好使用所有翻译人员最有可能理解的语言编写这些翻译程序集)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多