言語別ガイドRead this article in English

アラビア語対応 — RTLレイアウト・文字接合・複数形は翻訳ではなく実装の課題

ゲームに追加する可能性のある言語の中で、UIが左から右へ・ラテン文字という前提をエンジンレベルで埋め込んでしまっていたことを最も露呈させやすいのがアラビア語です。アラビア語をきちんと対応させる作業の大部分は翻訳ではありません。テキストが流れる方向から個々の文字同士のつながり方まで、ほぼすべてのレベルで挙動の異なる文字体系を、描画とレイアウトの仕組みが正しく扱えるようにすることです。

右から左へのレイアウトとミラーリング

アラビア語は右から左へ書かれ読まれます。これはテキストの揃え位置だけの話ではありません。正しくローカライズされたアラビア語UIはレイアウト全体を鏡合わせにします。ナビゲーションは右から左に流れ、左にあった戻るボタンは右に移動し、プログレスバーは逆方向に伸び、方向性を持つアイコン(「次へ進む」を示す矢印など)は鏡合わせにした版が必要です。設定の歯車やゴミ箱アイコンのように方向性を持たないアイコンはミラーリング不要で、それらを無理にミラーリングするとかえって不自然に見えます。つまりこれは全アセットを一律に反転させる話ではなく、アイコンごとに判断すべき事項です。

そのため、RTL対応は画面ごとに個別対応するのではなく、レイアウトの仕組みそのものの機能として計画されるのが通常です。左右を固定値でハードコードするのではなく「論理的な」開始/終了プロパティをサポートするUIフレームワークなら、現在のロケールがRTLのときに自動で反転できますが、左右の位置指定で丸ごと組まれたUIは画面ごとに手作業での作り直しが必要になります。

双方向テキスト

実際のアラビア語テキストが純粋に右から左だけになることはほとんどありません。数字や、埋め込まれたラテン文字テキスト——ブランド名、英語から差し込まれる変数、ファイル拡張子など——は、アラビア語の文中にあっても左から右に読まれるためです。この方向が混在するテキストは双方向テキスト(バイディレクショナルテキスト)と呼ばれ、画面上で正しい順序に並べるにはUnicode双方向アルゴリズムを通す必要があります。これは、論理的な(入力された)順序から、方向が混在する文字列の視覚的な表示順序を決定するものです。ここを誤ると目立つバグになります。埋め込まれた英単語や数字を含む文が、レンダリングパイプラインが双方向制御を無視して文字列を単純に連結しているせいで、ラテン文字部分が誤った位置に表示されたり、句読点が誤った側にくっついたりすることがあります。

位置によって形が変わる文字 — 筆記体的な字形接合

アラビア文字は筆記体的で、ほとんどの文字は隣接する文字とつながり、一つの文字が単独形・語頭形・語中形・語末形として最大四つの異なる視覚的な形を持ちます。これは正しいアラビア語テキスト描画スタックであれば自動的に処理されますが、ラテン文字なら安全にできるような文字単位の操作をアラビア語テキストに対して行うと、実際のバグの原因になります。固定文字数で末尾を省略記号で切り詰める、何らかの変換のために文字を逆順にする、語の途中に文字を挿入する、といった操作です。こうした処理は、Unicode文字自体は技術的には変わっていなくても、正しく接合しないグリフの並びを生成してしまい、語の形が目に見えて崩れる結果を招きます。

単数・複数だけではない複数カテゴリ

アラビア語のCLDR複数形規則は、英語が使う二種類ではなく六つのカテゴリを定義します。zero、one、two、few、many、otherです。これは古典アラビア語および現代標準アラビア語が持つ、単数・双数(ちょうど二つ)・複数という文法上の数の区別に由来します。0個、1個、2個、3〜10個、11個以上、そして一部の分数値のそれぞれが、別個の文法的な形を要求しうるということです。ロシア語の四カテゴリと同様、アラビア語の文字列には、その言語が使うカテゴリごとに分岐を持つ複数形対応のメッセージフォーマットが必要です。単数・複数のハードコードされたペアでは、六形式のうち四つを入れる場所がそもそもありません。

フォントと字形接合の要件

アラビア語テキストに使うフォントには、実際のアラビア文字のグリフに加えて、各文字の位置に応じた正しい形を選び、つながりの部分を正しく描画するための字形接合ロジックが必要です(これは通常フォントファイル単体ではなく、テキスト描画エンジン側が担います)。この字形接合の処理は双方向テキストの順序処理と合わさって、一文字一グリフ・左から右への固定送りを前提にした描画パイプラインにおいて、アラビア語テキストを単純にラテン文字列の差し替えとして扱えないことを意味します。「フォントファイルにアラビア文字が入っているから大丈夫」と決めつけず、アラビア語の描画そのものを明示的に確認する価値があります。

  • RTL向けにレイアウト方向と方向性のあるアイコンをミラーリングする。方向性のないアイコンはミラーリングしない
  • 可能な限り、左右の固定値ではなく論理的な開始/終了プロパティを持つレイアウトの仕組みを使う
  • アラビア語とラテン文字・数字が混在する文字列は、単純な連結ではなく正しい双方向処理を経由させる
  • アラビア語テキストを生の文字単位で切り詰めたり、逆順にしたり、途中に挿入したりしない
  • アラビア語が必要とする六つのCLDRカテゴリすべてに対応した複数形対応のメッセージフォーマットを使う
  • フォントファイルだけでなく、実際の描画パイプラインでアラビア語の字形接合とグリフカバレッジを確認する

関連記事