このようなことのためにngettext
機能を使用してください。 を使用すると、英語の複数形や他の言語の を正しく扱うことができます。あなたはこのようにそれを使用します。複数ある場合は1つだけコメントして第二のフォーマット 文字列("%d Comments"
)がある場合
printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);
ngettext
関数は最初のフォーマット文字列("%d Comment"
)を返します。 printf
関数は となり、数値を文字列に入れます。
は、これは多くの作業のように見えるかもしれませんが、それは非常に強力である:それは
つ以上の複数形を持つ言語で を作品 - 彼らが存在し、実際に (!)。 PHPマニュアルには、 "window"という単語の例があります。 の言語では、 "1 okno"、 "2 okna"、 "
5 oken"になります。あなたはあなたに非常に感謝するでしょう、あなたの将来のユーザー遠くの国から を
ngettext
を、使用について、その結果としてある場合
:-)
編集:コメントで示唆したようには、単一の関数があります に上記の操作を行います。デフォルトでは
function pluralize($num, $singleWord, $pluralWord) {
return printf(ngettext($singleWord, $pluralWord, $num), $num);
}
を、xgettext
は文句を言わない、この新しい機能を認識していますが、 --keyword
フラグを追加することができます。あなたは
xgettext --keyword=pluralize:2,3 test.php
たmessages.po
ファイルを使用して文字列を抽出することができます
echo ngettext("foo", "foos", 1);
echo pluralize(2, "bar", "bars");
でファイルtest.php
を考えると、これらのようなエントリがあります。
#: test.php:7
msgid "foo"
msgid_plural "foos"
msgstr[0] ""
msgstr[1] ""
#: test.php:8
msgid "bar"
msgid_plural "bars"
msgstr[0] ""
msgstr[1] ""
翻訳者がそれぞれ複数形で入力されます
とメッセージカタログのヘッダに正しく 形成された「複数形を」ラインで、あなたは ことができるようになりますすべての言語をサポートします。
+1、それが私に言ったので。それは賢明なことですが、私はそれだけであなたが得たアップボートがいくつあるのか知ることに興味があります。 :) – Dusty
私は半誘惑私は数が1でない場合は0が同様に複数形を取得するよう機能は、Sを追加するだろう –