Next: , Previous: , Up: Translators   [Contents][Index]


12.6 複数形の翻訳

あなたがPOファイルを翻訳しようとしていて、それには以下のようなエントリーが含まれているとしましょう:

#, c-format
msgid "One file removed"
msgid_plural "%d files removed"
msgstr[0] ""
msgstr[1] ""

これはどういう意味なのでしょうか? どうやって記入すればよいのでしょうか?

このようなエントリーは、メッセージにplural formがあることを示しています。plural formとは、メッセージ中の数字の値が複数形として出力しなければならない値の時に出力すべき文字列です。msgid_plural行に記述されているのは、Englishにおけるそのようなメッセージの一般的な形式です。msgid行には、Englishにおけるsingular formで、数字の値が1のときに出力するテキストが記述されています。plural formについての詳細は、Plural formsで説明しています。

最初に見る必要があるのは、POファイルのヘッダーエントリーのPlural-Formsという行です。この行にはplural formを判定するための数字と式が記述されています。まだPOファイルにそのような行がない場合は、追加する必要があります。これは、あなたが翻訳しようとしている言語に依存します。この情報はmsginitコマンド(Creatingを参照してください) – これには既知のplural formulaのデータベースが含まれています – を使うか、翻訳チームの他のメンバーに尋ねてみてください。

以下のような行について考えてみましょう:

"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"

これは論理的には1行になります。POファイルの書式では、各行を80文字までにおさまるように長い行を分割できることを思い出してください。

npluralsの値は、3つのplural formがあることを示しています。最初に行わなければならないのは、各形式ごとにmsgstrを含むエントリーを作ることです:

#, c-format
msgid "One file removed"
msgid_plural "%d files removed"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""

それからmsgid_pluralを翻訳して、各msgstr行にそれを記述します:

#, c-format
msgid "One file removed"
msgid_plural "%d files removed"
msgstr[0] "%d slika uklonjenih"
msgstr[1] "%d slika uklonjenih"
msgstr[2] "%d slika uklonjenih"

ではplural formに適合するように翻訳を改善しましょう。上述の式にしたがって、msgstr[0]には1で終わるが11では終わらない数字のときの翻訳を、msgstr[1]には2、3、4で終わるが12、13、14では終わらない数字のときの翻訳、そしてmsgstr[2]にはそれ以外のときに使用する翻訳を記述します。これにしたがって改善したものが以下の翻訳です:

#, c-format
msgid "One file removed"
msgid_plural "%d files removed"
msgstr[0] "%d slika je uklonjena"
msgstr[1] "%d datoteke uklonjenih"
msgstr[2] "%d slika uklonjenih"

Englishのsingular form(msgid)では、数字用の書式指定が省かれて、数字の1をあらわす“one”という単語に置き換えられていることに気づくでしょう。あなたが翻訳するときも同じようできるでしょうか?

msgstr[0] "jednom datotekom je uklonjen"

これはmsgstr[0]を1のときだけ使うのか、他の数字のときも使うかによります。plural formulaに当てはめて考えると、msgstr[0]n == 1のときだけ、数字用の書式指定子を使わない特定の翻訳文を使うことができます。しかしこの例の場合、msgstr[0]は21、31、41...などのときにも使用するので、書式指定子を省くことはできません。