1

这是我的情况:我通过 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()并将列表元素的数量作为第三个参数。

4

1 回答 1

0

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

您要求使用两个相互冲突的定义xgettext写入msgid "example_string"ePO 目录:作为单一形式条目(来自_()事件)或作为具有复数形式的条目(来自ListOutput()调用)。如果它报告错误会更好,但它也只选择第一个定义并不完全令人惊讶。

无论如何,这似乎很可疑——同一个字符串怎么能以两种方式正确使用?这两种用法中的一种很可能是不正确的。如果它确实是合法的,您可以使用msgctxt来消除这两个字符串的歧义。

于 2013-03-13T12:18:43.597 回答