実装Read this article in English

Unityでのゲームローカライズ — 最初に押さえておくこと

Unityにはローカライズ用の公式パッケージがあり、どのエンジンでも最終的に必要になる概念で組み立てられています。対応するロケールの一覧、キーとロケールごとの翻訳文字列を対応させるテーブル、そして実行中にロケールを切り替えてUIやセリフを即座に更新する仕組みです。まだ使ったことがない場合、具体的なセットアップ手順やコンポーネント名、インポートの手順は公式ドキュメントを見るのが確実です。これらの細部はバージョンごとに変わるため、又聞きで覚える価値は低いです。

先に理解しておく価値があり、どんなツールを使っても変わらないのは、問題そのものの形です。テキストはシーンやスクリプトから外に出し、翻訳者が扱える場所に置き、ハードコードされた値ではなくルックアップを通じてゲームに戻ってくる必要があります。この記事はその部分を中心に扱います。

まずシーンとスクリプトからテキストを追い出す

最初のローカライズ作業で最もよくある失敗は、シーン上のUI TextやTextMeshProのコンポーネントに直接テキストを打ち込んでしまうこと、あるいはスクリプトの中に文字列リテラルを埋め込んでしまうことです。どちらも翻訳者からは見えず、監査でも見落としやすい形です。何よりもまず、プレイヤーに見えるすべての文字列に安定したキーを与え、文字列テーブル、CSV、JSONファイルなど、パイプラインが使う「唯一の置き場所」に集約する必要があります。

キーは英語のテキストそのものであってはいけません。原文をそのままキーとして使う(よくある近道)は、英語の文言を編集した瞬間に破綻します。キーが変わり、既存の翻訳がすべて孤立してしまうからです。代わりに、画面やシステムごとにグループ化した短く安定した識別子を使います。例えば次のような形です。

menu.settings.title
dialogue.chapter1.guard_01.line_03
item.potion_health.name

プレースホルダーと書式

ほとんどのゲームには、プレイヤー名やアイテム数、ダメージ数値のようにパーツを組み合わせて作る文字列があります。エンジンやライブラリが使う書式の仕組みが何であれ、プレースホルダーの記法は絶対に守るべきものとして扱ってください。翻訳者はその言語の文法に合わせてプレースホルダーの順序を入れ替えることはできますし、むしろ入れ替えるべきですが、名前を変えたり削除したり重複させたりしてはいけません。プレースホルダーの欠落や誤記は、よくてランタイムエラー、悪ければ静かに壊れた文字列として出荷されます。これは自動チェックで見つけやすく、逆に数千行を目視で確認するのは非常に見落としやすい種類の問題です。

数値や日付にも同じ注意が必要です。複数形のルールは英語の単数/複数の区別よりもはるかに言語ごとに異なり、キー構造がそれを想定していなければ、フラットな文字列を渡された翻訳者に複数形のルールを直すすべはありません。

フォントとグリフの網羅

ここでローカライズ作業は純粋なテキストの問題ではなくなります。フォントアセットは、そこに焼き込まれた、あるいは参照されているグリフしか表示できません。日本語、韓国語、中国語など、デフォルトのフォントがカバーしていない文字体系を追加すると、足りないグリフは空白や豆腐(□)として表示されます。これはエラーではなく単なる沈黙なので、自分が確認していない画面ではそのまま出荷されがちです。

これは早めに計画しておくべきことです。対象言語を洗い出し、フォント(またはフォントのフォールバックチェーン)がその言語に必要な文字集合を実際にカバーしているかを確認し、フォントプレビューツールだけでなくゲーム内での表示確認に時間を確保してください。特にCJKのフォントはサイズが大きいので、ビルドサイズが問題になるならサブセット化や動的なフォント読み込みを検討しておくとよいでしょう。

文字数の増減とUIレイアウト

英語は、同じ意味のUIテキストの中で最も短くなることが多い言語です。ドイツ語やフィンランド語は、同じ意味でも訳文が目に見えて長くなる例としてよく挙げられます。日本語や中国語は文字数としては短くなる一方、1文字あたりの幅は広くなります。英語のラベルにぴったり合わせたボタンは、翻訳された瞬間にはみ出したり不格好に折り返したりします。

最初から余裕を持ってUIを組んでください。自動でサイズ調整されるテキスト要素、伸縮できるコンテナ、そして「たまたまそうなった」のではなく意図して決めた省略やスケーリングのルールです。本物の翻訳が来る前に、対応言語のおおよその長さに合わせたわざと長いダミー文字列でテストしておくと、この手の問題の多くを早期に見つけられます。

ゲーム内での言語切り替えをテストする

シーンの再読み込みでしかロケールの切り替えが反映されないというのはよくある初期のバグです。画面に表示中のセリフやツールチップ、キャッシュされた文字列が古い言語のまま残ってしまうことがあります。タイトル画面だけでなくセッションの途中で言語を切り替えてテストし、ポーズメニュー、設定画面、チュートリアルなど、プレイヤーが到達できるすべての画面を確認してください。テクスチャや動画に埋め込まれたテキストは文字列システムを通じてローカライズできないので、これは別途計画が必要です。

  • プレイヤーに見えるすべての文字列にキーがあり、シーンやコードに散らばっていない
  • プレースホルダーは目視ではなく自動チェックで検証されている
  • フォントはすべての対象文字体系についてゲーム内で確認されている
  • 本物の翻訳が来る前に、長い文字列でUIの負荷テストを行っている
  • 言語切り替えはセッション途中、到達可能なすべての画面でテストされている

出荷前に

ここまでの内容はUnityに固有のものではなく、文字列テーブル型のローカライズ機能を持つどのエンジンでも同じチェックリストです。そして実際のローカライズバグの多くはここに潜んでいます。セットアップの手順そのものはUnity公式ドキュメントを一次情報として扱い、ある言語を「完了」と判断する前に確認すべきことのリストとしてこの記事を使ってください。

関連記事