这是我的情况: 我通过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(),并将列表元素的数量作为第三个参数。
答案 0 :(得分:0)
我对此xgettext
行为并不感到惊讶。在Gettext中,(未翻译的)字符串是ID - 您不能在目录中具有两个具有相同ID的不同条目。它没有任何意义,不是吗?
您要求xgettext
将msgid "example_string"
写入具有两个相互矛盾的定义的ePO目录中:作为单个表单条目(来自_()
出现)或作为具有复数的条目表格(来自ListOutput()
电话)。如果它报告错误会更好,但它只是选择第一个定义并不奇怪。
无论如何看起来很腥 - 怎样才能在两种方式中正确使用相同的字符串?更可能的是,两种用途中的一种是不正确的。如果它确实合法,您可以使用msgctxt
消除两个字符串的歧义。