请将此ngettext
功能用于此类事情。它使您可以一劳永逸地正确处理英语和其他语言的复数形式。你像这样使用它:
printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);
如果只有一条注释,该ngettext
函数将返回第一个格式字符串 ( ),如果有更多,则返回第二个格式字符串 ( )。然后该函数会将数字放入字符串中。"%d
Comment"
"%d Comments"
printf
这似乎需要做很多工作,但它非常强大:它适用于具有多个复数形式(!)的语言——它们确实存在。PHP手册给出了一个例子,“window”这个词在我不认识的一些异国语言中变成了“1 okno”、“2 okna”和“ 5 oken”......
如果您因此而使用ngettext
,那么来自遥远国家的未来用户将非常感谢您 :-)
编辑:正如评论中所建议的,有一个功能可以完成上述操作:
function pluralize($num, $singleWord, $pluralWord) {
return printf(ngettext($singleWord, $pluralWord, $num), $num);
}
默认情况下,xgettext
不会识别这个新功能,但您可以使用--keyword
标志添加它。test.php
给定一个文件
echo ngettext("foo", "foos", 1);
echo pluralize(2, "bar", "bars");
你可以提取字符串
xgettext --keyword=pluralize:2,3 test.php
生成的messages.po
文件具有如下条目:
#: test.php:7
msgid "foo"
msgid_plural "foos"
msgstr[0] ""
msgstr[1] ""
#: test.php:8
msgid "bar"
msgid_plural "bars"
msgstr[0] ""
msgstr[1] ""
翻译人员将填写每个复数形式,并在消息目录标题中使用正确格式的“Plural-Forms”行,您将能够支持所有语言。