請使用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