実装Read this article in English

文法性(男性・女性名詞)と格変化 — テンプレート文が他言語で壊れる理由

「You received {itemName}」のような文は、一見どんな値を入れても安全に見えます。プレースホルダーは一つだけ、意味も明確で、英語であればどんなアイテム名が入っても自然に読めます。しかし文法性(名詞の性)や格変化を持つ言語に翻訳した瞬間、この安全性は崩れます。プレースホルダーの周りの単語が、埋め込まれる名詞によって変化する必要があるのに、その名詞は実行時まで分からないからです。

これはゲームの翻訳テキストが非文法的になる最も一般的な原因の一つで、対象言語を自分で書けなくても基本だけは理解しておく価値があります。

文法性とは何か

多くの言語では、すべての名詞が文法上のクラス — 一般に男性・女性・中性と呼ばれる — に属していて、それはその名詞が指すものに現実の性別があるかどうかとは無関係です。同じ言語の中で、剣と盾が意味的な理由もなく異なる文法性に属することがあります。

名詞の前に置く冠詞や、しばしば形容詞も、この性に一致させる必要があります。「新しい剣」と言うときと「新しい盾」と言うときで、「その」にあたる語や「新しい」の語尾が変わりうるのです。文の構造自体は同じなのに、です。変数のアイテム名の周りに冠詞や形容詞の語尾を固定で書き込んだテンプレートは、あるアイテムでは正しくても別のアイテムでは間違いになります。

格変化がもう一つの軸を加える

性とは別に、一部の言語は名詞を格変化させます。文中での文法上の役割(主語・目的語・所有者など)によって、名詞の語尾や語形そのものが変わるのです。「剣を受け取った」と「剣の力」で、剣という単語自体の形が変わることがあります。意味が変わったからではなく、文中の役割が変わったからです。

性と格が組み合わさると、一つの名詞が取りうる形はかなりの数になります。翻訳者はソースファイル上で名詞だけを見ても、どの形が必要かを常に予測できるわけではありません。文全体、しばしば具体的なアイテム名そのものを見て初めて正しい形が分かります。

実際にどこで壊れるか

壊れ方の型はいつも同じです。固定テキストと変数を連結するテンプレートが、変数に入りうるすべての値に当てはまるわけではない、ある一つの文法形を前提に書かれている、というものです。

// 英語では安全に見えるが、翻訳すると安全ではない
"You received {itemName}."
"New {itemName} unlocked!"
"Equip {itemName}?"

実際に効く対策

すべての言語に効く単一の解決策はありませんが、被害を大きく減らせるアプローチはいくつかあります。

  • 一致を必要としない言い回しに書き換える — 「You received {itemName}」ではなく「Received: {itemName}」にすれば、変数の隣に冠詞がなくなるので一致の問題そのものを回避できる
  • 自然な中立表現が不可能な場合は、性別や格ごとにテンプレートのバリエーションを用意し、一つのテンプレートですべてのアイテムをカバーしようとしない
  • その言語で危険なテンプレートがどれかを、翻訳者に早い段階で聞く — ネイティブスピーカーなら一致の問題を数秒で見抜けるが、それは孤立したソース文ではなく、実際のアイテム名を埋め込んだ状態を見せた場合に限る
  • アイテム名とテンプレートをレビューしやすい別の列に分けて保持し、翻訳を一度だけ行って後から追加されるすべてのアイテムに通用することを祈るのではなく、すべての組み合わせを翻訳者が確認できるようにする

エンジニアリング側の教訓

これは本質的に文字列連結の問題であって、翻訳の質の問題ではありません。構造的にすべての値と一致し得ないテンプレートは、どれほど優れた翻訳者でも直せません。対策はテンプレート設計の段階で行う必要があり、できれば性や格を持つ言語がスコープに入る前に行うべきです。リリース後にアイテム名とテンプレートの仕組み全体を書き直すのは、最初からリスクを織り込んで設計するよりはるかにコストがかかります。

関連記事