5

我已经尝试了几个小时来寻找一种设置POEdit的方法,以便它只能从特定域中获取文本

我的 gettext 函数如下所示:

function ri($id, $parameters = array(), $domain = 'default', $locale = null)

示例调用:

echo ri('Text %xyz%', array('%xyz%'=>100), 'myDomain');

我只需要获取域 myDomain 的文本进行翻译,或者至少我希望 POEdit 将这些文本放入域特定的文件中。有没有办法做到这一点?

我发现了几个相似的问题,但答案并没有真正告诉我该怎么做(我想我是个菜鸟,必须用简单的英语解释才能理解):

如何在 Poedit 中设置 gettext 文本域?

如何获取可翻译消息列表

4

2 回答 2

10

所以我经过几天的搜索终于想通了,我终于在这里找到了答案:

http://sourceforge.net/mailarchive/message.php?msg_id=27691818

  • xgettext 识别字符串中的上下文,并在 *.pot 文件中给出一个 msgctxt 字段,该字段被翻译软件识别为上下文并显示为这样(查看下面显示上下文的 Pootle 的图像)

    • 这可以通过 3 种方式完成:

      1. 代码中的字符串格式应为 _t('context','string'); 并且 xgettext 调用应该采用 --keyword=_t:1c,2 的形式(这基本上向 xgettext 解释了关键字函数中有 2 个参数,第一个是上下文,第二个是字符串)
      2. 格式为 _t('string','context'); 的代码中的字符串 和 xgettext 调用应采用 --keyword=_t:1,2c 形式
      3. 代码中的字符串应为 _t('context|string') 并且 xgettext 调用应采用 --keyword=_t:1g 的形式

因此,为了回答我自己的问题,我将其添加到 Poedit 的“来源关键字”选项卡中:

ri:1,3c

ri 是函数名,1 是 stringid 的位置,3 是上下文/域的位置

希望这对其他人有所帮助,我讨厌所有这些神秘的文件

于 2012-10-13T14:46:31.377 回答
0

(这是我在这里对同一件事的回答的转贴。)

GNU gettext 工具和 Poedit(使用它们)都不支持这种对 gettext 的特殊滥用。

在 gettext 中,大致是“一个软件”——一个程序、一个库、一个插件、一个主题。因此,它通常驻留在单个目录树中并且单独存在 - 或者至少,如果您有多个片段=域,您可以将它们合理地组织到一些您可以限制提取的子目录中。

像您一样在单个文件中混合和匹配域不是 gettext 的预期用途,除了使用您自己的辅助函数之外,没有合理的解决方案来处理它,例如将所有 myDomain 文本包装到__mydomain(您必须定义,显然)并在为 myDomain 提取时将其添加到 Poedit 中的关键字列表中,而不是将其添加到其他域文件的关键字列表中。

于 2015-11-10T06:50:29.823 回答