如何使用POEdit从特定域获取(可翻译)字符串

mr1*_*011 5 dns gettext poedit

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

我的gettext函数如下所示:

function ri($id, $parameters = array(), $domain = 'default', $locale = null)
Run Code Online (Sandbox Code Playgroud)

一个样本电话:

echo ri('Text %xyz%', array('%xyz%'=>100), 'myDomain');
Run Code Online (Sandbox Code Playgroud)

我将只需要使用域myDomain来翻译文本,或者至少我希望POEdit将这些文本放入特定于域的文件中.有办法吗?

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

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

如何获取可翻译消息列表

mr1*_*011 9

经过几天的搜索,我终于弄明白了,我终于找到了答案:

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的"sources keywords"标签中:

ri:1,3c
Run Code Online (Sandbox Code Playgroud)

ri是函数名,1是stringid的位置,3是context/domain的位置

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

  • 但域和上下文是两回事. (3认同)