【问题标题】:How to make PoEdit correctly parse custom "ngettext" implementation?如何使 PoEdit 正确解析自定义“ngettext”实现?
【发布时间】:2011-03-24 12:23:37
【问题描述】:

我编写了一个 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 作为默认的按键,没有任何对 ngettextdngettextdcngettext 函数的引用,但它可以仍然正确地接听了ngettext 调用...这让我想知道 PoEdit 是否对 ngettext 关键字进行了硬编码——那真的很伤心。

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

【问题讨论】:

  • 你至少有 Poedit 1.3.0 吗?
  • @Alexandre:Poedit 1.4.6 (Windows)。
  • 我找到了这个链接 (devcomments.com/…) 似乎不可能。有其他选择吗?
  • 根据xgettext documentation,您必须将_e 关键字添加到项目(仅接受第一个参数)或_e:1,2 将接受第一个和第二个参数并解释它们是复数形式。

标签: php localization internationalization gettext poedit


【解决方案1】:

其实上面两件事你都需要做。

  • 定义关键字如'_e:1,2' 和
  • 添加复数形式 复数=2;复数=n != 1;

到目录设置

【讨论】:

  • 复数形式因语言而异,但仍然与问题无关。
  • ngettext 反正只支持两种复数形式,那你有什么意义呢?
  • 其实没有。请参阅php.net/manual/en/function.ngettext.php 上的第一个(也是唯一一个)示例:“1 okno”、“2 okna”和“5 oken”。
  • “无论如何,有没有办法让 PoEdit(或任何其他类似的应用程序)正确解析自定义函数?” PoEdit 使用自定义复数功能对我来说效果很好。我将关键字定义为 Deckard 提到的(或本页第 5.1.6 节中定义的gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/…)。
【解决方案2】:

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

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

nplurals=2; plural=n != 1;

这将完美地解决问题。我什至不必重新扫描源; PoEditer 中自动出现正确的行。

【讨论】:

  • 我认为你没有理解我的问题。
【解决方案3】:

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

_e:1,2

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

【讨论】:

  • 是的,如 xgettext 文档中所述... Poedit 只需调用 xgettext
猜你喜欢
  • 2016-01-10
  • 2013-07-21
  • 2022-08-22
  • 2013-02-20
  • 2011-04-04
  • 1970-01-01
  • 2020-12-23
  • 2020-11-24
  • 2011-11-13
相关资源
最近更新 更多