言語別ガイドRead this article in English

ロシア語の複数形と格変化 — 二形式テンプレートが必ず壊れる理由

ロシア語向けにテストされたことのあるローカライズパイプラインは、たいていこの言語に対して健全な敬意を持つようになります。チームが最初に想定しがちな西欧の言語のほとんどで成り立つ前提を、ロシア語はことごとく崩すからです。特に、後から発覚すると被害が大きい二つの特徴があります。複数形の種類の多さと、名詞が文中での役割によって形を変える文法格です。

複数形 — 単数・複数の二種類では足りない

英語には複数カテゴリが二つしかありません。数が1のときの形と、0を含むそれ以外すべての「other」です。「{n} item」「{n} items」というテンプレートで英語はすべてカバーできます。ロシア語にはこれより多くのカテゴリがあり、ある言語が何種類の複数形を必要とし、どの数がどのカテゴリに入るかの標準的な基準であるUnicode CLDRの複数形規則では、ロシア語に対して四つのカテゴリを定義しています。one(1で終わる数、ただし11で終わる数を除く)、few(2〜4で終わる数、ただし12〜14を除く)、many(0、5〜9、または11〜14で終わる数)、そして一部の分数値に使われるotherです。

具体的には、ロシア語では1個・2個・5個・21個のitemがそれぞれ別の語形を要求しうるということです。1 предмет、2 предмета、5 предметов、21 предмет。21が「1で終わるからoneの形に戻る」のに対し、11は11〜14の例外帯に入るため戻らない、という点に注意してください。二形式にハードコードされたテンプレートには、この四カテゴリのうち三つを入れる場所がそもそもありません。エラーになるか、英語の複数化ロジックにフォールバックして誤ったロシア語を生成するか、文法的に誤ったテキストがそのまま出荷されるかのいずれかになります。

格変化は周囲ではなく名詞そのものを変える

ロシア語は格を持つ言語です。名詞は、それを修飾する形容詞などとともに、主語・直接目的語・所有関係などの文中での文法的役割に応じて形を変えます。主格・生格・与格・対格・造格・前置格の六つの格があります。これがローカライズに直接効いてくるのは、アイテム名が辞書形のまま文に差し込まれることはほとんどないからです。「剣を見つけた」は剣(меч)の対格を使い、「剣が残っていない」は生格複数(мечей)を使い、「剣で戦う」は造格(мечом)を使います。これらはスタイルの違いではなく、同じ語根から派生した別の単語であり、誤った形を使うとロシア語の読者はすぐに気づく文法的な誤りになります。

アイテム名につき一つの形しか保存していないローカライズデータベースは、差し込まれるすべての文テンプレートを正しく埋めることができません。完全な正確さを求めるなら、名詞ごとに複数の格変化形を保存するか、あるいは文脈に関わらず名詞が常に同じ格で現れるように文を組み立て直す必要があります。後者はゲームUIにおいては完全な格変化表を持つより実務的なことが多いですが、その代わり原文テンプレートで言える内容に制約がかかります。

文字とフォントのカバレッジ

ロシア語はキリル文字で書かれ、ラテン文字とは別個の独自の字形を持つ文字体系です。а、б、в、г、дなどはラテン文字の装飾的なバリエーションではなく、まったく別のグリフです。ロシア語UIテキストに使うフォントには実際にキリル文字のセットが含まれている必要があります。未対応のグリフをシステムの既定フォントに静かにフォールバックさせるフォントは、意図したラテン文字用書体とフォールバックのキリル文字が混在した、見た目に一貫性のないテキストを生成します。「たぶんキリル文字も入っているだろう」と想定せず、明示的に確認する価値があります。

移植性のある解としてのICU MessageFormat複数形構文

ロシア語の複数カテゴリに対する実務的な答えは、複数形のロジックをアプリケーションコードにハードコードするのをやめ、言語ごとに複数形の分岐を宣言的に表現できるメッセージフォーマットを使うことです。これにより、ロシア語には何形式が必要か、他の各言語には何形式が必要かを、それぞれの言語が実際に必要とするカテゴリぶんだけ一度定義すればよくなります。ICU MessageFormatの複数形構文はこのための広く採用された標準で、翻訳者(または翻訳ファイル)は対象言語が実際に使うCLDR複数カテゴリごとに一つずつ分岐を用意し、実行時のライブラリが数値と現在のロケールの複数形規則に基づいて正しい分岐を選択します。文字列を描画するアプリケーションコード側は、ロシア語やアラビア語や英語がそれぞれ何形式の複数形を必要とするかを一切知る必要がありません。

  • ロシア語に翻訳される文字列に対して、単数・複数の二形式をハードコードしない
  • 複数形のデータモデルにはブール値ではなくCLDRの複数カテゴリ(one, few, many, other)を使う
  • 名詞を差し込む各文テンプレートに対して、格に応じた正しい形を保存または生成する
  • フォントのキリル文字グリフカバレッジを明示的に確認し、システムフォントへのフォールバックを許容できると決めつけない
  • 言語ごとのif/elseロジックではなく、ICU MessageFormat(またはそれに相当する宣言的な複数形構文)を採用する

関連記事