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

时间:2010-08-03 02:03:39

标签: php localization internationalization gettext poedit

我编写了一个gettext包装器,它使l10n的整个过程变得更简单但不知何故我无法让PoEdit正确识别和解析对该函数的多个版本调用。这就是我最初的所作所为:

_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作为默认的keyworks,而ngettext,{{1}没有任何参考}}或dngettext函数,但它仍然可以正确地接听dcngettext次调用...这让我想知道PoEdit是否对ngettext关键字进行了硬编码 - 这真的很难过。

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

3 个答案:

答案 0 :(得分:9)

我找到了解决方案,必须使用以下表达式定义关键字:

_e:1,2

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

答案 1 :(得分:3)

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

  • 定义关键字'_e:1,2' AND
  • 添加复数表格 nplurals = 2; plural = n!= 1;

到目录设置

答案 2 :(得分:0)

这是另一种解决方案,它很容易设置。只需按照以下步骤操作:

菜单:目录 - >设置将打开“设置”对话框。在项目信息选项卡上,您会在底部找到“多个表单”。只需复制&在此字段中粘贴以下行:

nplurals=2; plural=n != 1;

这将完美地解决问题。我甚至没有重新扫描来源; PoEditer中会自动出现正确的线条。