当单数和复数形式相同时,如何使用 php-gettext 的 ngettext()?

Posted

技术标签:

【中文标题】当单数和复数形式相同时,如何使用 php-gettext 的 ngettext()?【英文标题】:How can I use ngettext() of php-gettext when the singular and plural form are the same? 【发布时间】:2016-12-17 14:40:56 【问题描述】:

我正在使用库 php-gettext 来解决 Google Cloud AppEngine 上缺少的 gettext 扩展。当英语的单复数形式相同,但在其他语言中不同时。

ngettext("%d correct", "%d correct", $n)

西班牙语翻译是

"%d correcto" (singular)
"%d correctos" (plural)

指出给出的正确答案的数量。

但这给了我一个错误,因为单数 msgid 与复数 msgid 完全相同。即使是允许在翻译中添加上下文的函数dngettext() 也不起作用:

dngettext("Number of correct answers", "%d correct", "%d correct", $n)

它会在gettext 库中触发警告和错误:

PHP Notice:  Undefined offset: -1
PHP Parse error: syntax error, unexpected '!=' (T_IS_NOT_EQUAL)
PHP Notice:  Undefined variable: number
PHP Warning:  Missing argument 4 for gettext_reader::npgettext()

我将英文句子用作msgids,现在无法将我的整个项目更改为使用神秘的 ID,例如

ngettext("%d-correct-singular", "%d-correct-plural", $n) 

在原始语言中处理相同的单复数形式的适当方法是什么?

【问题讨论】:

第一个例子有什么错误?我刚试了一下,它运行良好(尽管没有翻译表) 【参考方案1】:

刚刚发现其实是gettext库中的一个已知bug:https://bugs.launchpad.net/php-gettext/+bug/1415873?comments=all

您需要手动修复此错误才能正确使用 ngettext 功能。

这个问题与一般的gettext扩展无关。

【讨论】:

以上是关于当单数和复数形式相同时,如何使用 php-gettext 的 ngettext()?的主要内容,如果未能解决你的问题,请参考以下文章

runs是否run的复数?

Python - 生成单数名词的复数名词

具有复数和单数生成相同实体名称的 Lightspeed 数据库优先表

resource啥时候用单数?啥时候用复数?

[转]英语论文写作技巧-1

whose引导的定语从句,先行词是复数形式,从句里谓语动词用单数还是复数?