ngettext
このような場合はこの機能をご利用ください。これにより、英語やその他の言語の複数形を一度に正しく処理できます。次のように使用します。
printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);
このngettext
関数は"%d
Comment"
、コメントが1つしかない場合は最初のフォーマット文字列()を返し、"%d Comments"
それ以上ある場合は2番目のフォーマット文字列()を返します。次に、printf
関数は数値を文字列に入れます。
これは大変な作業のように思えるかもしれませんが、非常に強力です。複数形(!)が複数ある言語で機能します。実際に存在します。PHPのマニュアルには、私が認識できないエキゾチックな言語で「1 okno」、「2 okna」、「5oken」になる「window」という単語の例が示されています。
を使用することになった場合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] ""
翻訳者は各複数形に記入し、メッセージカタログヘッダーに正しく形成された「複数形」の行を入力すると、すべての言語をサポートできるようになります。