Next: Prioritizing messages, Previous: Information Flow, Up: Translators [Contents][Index]
あなたが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...などのときにも使用するので、書式指定子を省くことはできません。