当单数存在时,Gettext不会解析复数形式

时间:2013-03-07 20:11:23

标签: php internationalization gettext poedit plural

这是我的情况: 我通过Poedit使用gettext来翻译PHP应用程序。 我有复数形式的自定义函数:

function ListOutput($result,$column_names,$singular='.',$plural='.',$link=false,$group=array(),$options=array())

Poedit中引用了关键字ListOutput:3,4

现在,我的问题是,当我有一个要翻译的字符串时,我使用_('example_string'),但如果我稍后通过ListOutput($result,$column_names,'example_string', 'example_string_plural')翻译它,则只会出现 example_string 在Poedit。

此外,我应该说这个问题出现在时间,其他时候,我会有复数形式和单数形式(所以,单数字符串2次......)。

注1:如果字符串仅在 ListOutput()中引用,则复数形式将正确显示在Poedit中。

注2: ListOutput()函数调用 ngettext(),并将列表元素的数量作为第三个参数。

1 个答案:

答案 0 :(得分:0)

我对此xgettext行为并不感到惊讶。在Gettext中,(未翻译的)字符串是ID - 您不能在目录中具有两个具有相同ID的不同条目。它没有任何意义,不是吗?

您要求xgettextmsgid "example_string"写入具有两个相互矛盾的定义的ePO目录中:作为单个表单条目(来自_()出现)或作为具有复数的条目表格(来自ListOutput()电话)。如果它报告错误会更好,但它只是选择第一个定义并不奇怪。

无论如何看起来很腥 - 怎样才能在两种方式中正确使用相同的字符串?更可能的是,两种用途中的一种是不正确的。如果它确实合法,您可以使用msgctxt消除两个字符串的歧义。