请使用ngettext
功能这样的事情。它 允许您正确处理英语和其他 语言的复数,一劳永逸。您可以使用这样的:
printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);
的ngettext
函数将返回第一个格式化字符串("%d Comment"
)如果有只是一个单一的评论和第二格式 串("%d Comments"
)如果有更多。 printf
函数将 然后将该数字放入字符串中。
这似乎是一个大量的工作,但它是非常强大:它的工作原理与 有不止一个复数形式语言 - 他们 实际存在(!)。 PHP手册给出了一个“窗口” 这个词,它变成了“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”行,您将成为 支持所有语言。
+1对于您的用户名,因为它告诉我。这很聪明,我很想知道你为此单独获得了多少点赞赏。 :) – Dusty 2009-07-21 20:19:02
我一半试图downvote只是为了抵消upvote的人的影响 – 2009-07-21 22:59:44