如何让PoEdit正确解析自定义的“ngettext”实现?

问题描述:

我编写了一个使l10n的整个过程更简单一点的gettext包装,但不知何故,我无法让PoEdit正确识别并解析函数的多个版本调用。这是我原来的:如何让PoEdit正确解析自定义的“ngettext”实现?

_e(array('%d house', '%d houses'), 5); 

但是,这根本不起作用,PoEdit根本没有选择。我也试过:

_e('%d house', '%d houses', 5); 

这次PoEdit软件捕捉%d house但不是%d houses复数形式,但如果我尝试完全一样,但有ngettext()称之为完美的作品,单数和复数形式被确定:

ngettext('%d house', '%d house', 5); 

我正确的(?)的添加_e关键字项目设置,但它不拿起复数形式。我也注意到,PoEdit只有_,gettextgettext_noop作为默认的键盘才能拿起,没有任何参考ngettext,dngettextdcngettext的功能,但它仍然可以正确地拿起ngettext调用...这使得我想知道PoEdit是否对ngettext关键字进行了硬编码 - 这真的很让人伤心。

无论如何,有没有办法让PoEdit(或任何其他类似的应用程序),正确解析自定义函数?

+0

你有至少poEdit的1.3.0? – 2010-08-03 02:36:32

+0

@Alexandre:Poedit 1.4.6(Windows)。 – 2010-08-03 02:38:51

+0

我发现这个链接(http://www.devcomments.com/Zend_Translate-plural-forms-and-poedit-at188420.htm)似乎是不可能的。有没有其他的选择? – 2010-08-03 02:39:19

我已经找到了解决方案,该关键字与下面的表达式定义:

_e:1,2 

来源:http://osdir.com/ml/editors.poedit.user/2008-05/msg00012.html

+2

是的,如'xgettext'文档中所记录的... Poedit只是调用'xgettext'。 – 2010-08-03 10:43:00

这里是另一种解决方案,它是非常容易安装。只需按照以下步骤操作:

菜单:目录 - >设置将打开设置对话框。在项目信息选项卡上,您会在底部找到“复数形式”。只要复制粘贴&在这一领域的以下行:

nplurals=2; plural=n != 1; 

这将完全解决问题。我甚至不需要重新消息来源;正确的行自动出现在PoEditer中。

+1

我不认为你理解我的问题。 – 2011-04-03 17:33:00

其实你需要做以上两件事。

  • 定义关键字像 '_E:1,2' AND
  • 添加复数形式 nplurals = 2;复数= n!= 1;

到类别设置

+1

复数形式因语言而异,但仍与问题无关。 – 2011-06-21 05:23:03

+0

ngettext只支持两个复数形式,所以你有什么意思? – Deckard 2011-08-17 16:54:48

+1

其实没有。查看http://php.net/manual/en/function.ngettext.php上的第一个(也是唯一)示例:“1 okno”,“2 okna”和“5 oken”。 – 2011-08-17 17:38:20