ローカライズ(多言語対応)に関するあれこれ

世界中の人々に届け!

せっかくゲームを作るわけですから、たくさんの人に遊んでもらいたいものです。
もちろん国内だけじゃなく、世界中の人に遊んでもらえたら最高ですね!

…というわけで、今回のお話は「ローカライズ」――つまり多言語対応に関するお話です。
と言ってもプログラマの技術ブログですから、技術的なこともちょこっと織り交ぜながら…。

翻訳するだけ…って思ってない?

「日本語で書かれたテキストを対象の言語に翻訳していけばいいんでしょ?」
…って思ってませんか? いや、それだけでも大変なのに、それだけじゃないんですよ!

テキスト以外の翻訳について

まずはテキストの翻訳については後回しにして、テキスト以外の翻訳についてです。
「テキスト以外で翻訳が必要なものがあるのか?」――答えはYESです。

ハンドサインやジェスチャ

親指を立てるハンドサイン「サムズアップ👍」は、多くの国では「いいね!」という肯定的な意味で捉えられます。キャラクターのモーションやUI上のアイコンとして、ごくごく普通に使われています。ところが、仕向け地によってはこれが問題となることもあるのです。なんと、一部の国では相手への侮辱を意味するサインだったりするのです。他にもハンドサインやジェスチャは国によって意味がまったく異なることがあります。

シンボル

十字形(クロス)や六芒星、月と星など、国や地域によって特定の宗教や思想を連想させるものは、その使い方に慎重にならなければなりません。誤解に基づく無用なトラブルを避けるため、そもそも利用を避けることさえあります。よく目を凝らさないと気づかないような、服や建物のちょっとした装飾であってもです。

「卍」やそれに類似したシンボルは、ナチスのハーケンクロイツに見えてしまうということもあって、誤解を招く恐れがあるために使用を避ける傾向にあります。まじ卍…。

アイコン・ピクトグラム

日本人なら、学校のテストで間違ったところには「✔」印が付けられていたことが多いかと思います。しかし、アメリカでは正答した箇所に「✔」が付けられます。台湾では間違っている箇所に「〇」を付けるのが普通だったりと、意味がまるで正反対である場合もあります。

他には日本では温泉を意味する「♨」マークですが、これの意味がぜんぜん海外に伝わらないとして話題になってたりもしましたね。暖かい料理に見えるとか…。たしかに言われてみればそうかも??(笑)

サウンド

ボイスのあるゲームなら、大抵はボイスデータについても翻訳が必要になります。言語の数だけ声優さんが必要になるでしょうし、コストもかかります。また、言語切り替えができるゲームなのであれば、ROMには多言語のボイスデータを格納しなければならないことになりますので、それだけROM容量を圧迫します。多言語対応とフルボイスの両方を考えているなら、これらのことは考慮しておかなければなりません。

倫理的な問題/法的な問題

国や地域によって倫理観や法律も異なります。僕はゲーム内の酒場に酒瓶が置いてあるのはあたりまえだと思うのですが、国によっては「いやいや、子供が遊ぶゲームなら少しでも飲酒を想起させるような表現は避けるべきだ! このゲームは酒瓶の描写があるので〇〇歳未満には販売できませんよ!」なんて風に捉えられてしまうこともあります。

だいたいどの国や地域にも、コンピュータゲームのレーティング機構(日本のCEROとか、アメリカのESRBとか)が存在していて、倫理的な問題も含め、様々な側面からレーティングを評価しています。そして、レーティングによっては販売や広告が制限される場合があります。そうすると売り上げとかにも影響してきますし、なによりその国の人たちはそう感じているわけですから、その国の人々の倫理観を尊重しなければなりません。

他にも法的な問題とかは色々あるでしょうけど、その辺のことはちょっと難しいので、現地の法律に詳しい人の助言に耳を傾けましょう。

つまり…?

プログラマの観点からここまでをまとめると、要するにテキスト以外にも国や地域ごとに差し替えしなければならないアセットはたくさんあるということです。

ゲームが利用するほぼ全てのアセットは、国や地域、言語によって変更される可能性があるものとして考えなければなりません。この手の差し替えは、最初から差し替えが想定されているのとそうでないのとでは、実装コストに大きな差が出てきます(あとから対応し出すと大抵コードが無駄に複雑化します)。

できるだけソースコードに変更を加えることなく、あらゆるアセットを言語ごとや地域ごとに切り替えできるような仕組みを、プロジェクトの初期段階から設計しておかなければ大変だということを意味しています。

テキストの翻訳について

次はテキストの翻訳についてですが、これも翻訳者に依頼してハイ終わりで済むような話ではありません。色々大変なんですよ。

テクスチャに書き込まれたテキスト

たとえばタイトル画面に大きく表示されるタイトルロゴなんかがわかりやすいですが、テクスチャに画像として書き込んだり、3Dのモデルデータとしてテキストを描画したいケースがあります。フォントの表現力を超えた装飾的なテキスト表現や、手書き文字のような表現をしたい場合にこういう手法が採られますが、このようなテキストが再翻訳される場合には大きな作業コストが発生することがあります。

やっと全言語のデータを作り終えた段階になって、「あ、ゴメンゴメン! ここのテキストなんだけど『クエストクリア!』じゃなくて『ミッションクリア!』に変えてくれない?」なんて用語変更があったりしたら…

  • 全言語の再翻訳
  • 翻訳結果に基づいて各国語分のテクスチャを描き直し
  • 描き直したものをまた各国の担当者がチェック

…なんてことになります。翻訳者が全員日本にいる場合はまだマシですが、そうでない場合は時差とかも絡んでくるので更にやりとりに時間がかかります。用語変更ぐらい…って軽い気持ちで依頼したはずなのに、すごいコストがかかるんです。

できる限り、フォントで描画できるものはフォントで描画しておいた方が無難です。フォントで描画できるようにしておけば、翻訳者の手元で翻訳結果をゲーム画面上で確認でき、何かを描き直したり、そのチェックにかかるコストを抑えられるからです。場合によってはそのために独自にフォントを作ったり、テキストに対する装飾効果をランタイムで掛けたりします。

表示できる領域の問題

ゲーム画面内で、テキストが表示できる領域の広さには制限があります。例えば「装備」と書かれたUIボタンを作ったとしましょう。ローカライズのことは特に意識していなかったため、ボタンのサイズは「装備」というテキストがギリギリ表示できるぐらいのサイズで作ってしまったとしましょう。これをイタリア語に翻訳したら「Equipaggiamento」になったとします。

…これ、どう考えてもボタンのスペースに入りきらないですよね。

ですから、あらかじめ翻訳を意識してボタンを大きめにデザインしたりするわけですが、場合によってはこれだと日本語版で妙に空白の多いスカスカなデザインになってしまうこともあります。その場合はボタンのサイズをテキストの長さに合わせて変化させられるように実装する必要があるでしょう。

ロケール

4桁以上の大きな数を表示する場合、日本では読みやすくするために3桁ずつカンマ(,)で区切るのが一般的です。ところが、この区切り文字がドット(.)である国(代わりに小数点がカンマだったりする)もありますし、千の位までは3桁で区切り、それ以降は2桁ずつ区切るという変則的な桁区切りのルールを持つ国もあります。

他にも日時の表記法、週の始まりの曜日、建物の階数の表記法、辞書順の文字の並び etc… 国や言語によって異なる規則はたくさんあります。こういった国や言語ごとの表記規則を「ロケール」と言います。

多くのプログラミング言語はロケールに合わせて数値や日時をフォーマットする機能を標準ライブラリ等の形で提供していますので、それを利用することで実装を簡略化できるかもしれません。

複数形や冠詞の問題

これも日本人のプログラマーにとってはなかなか面倒な問題です。

例えば「{m}を{n}個手に入れた!」という変数付きのテキストがあって、これが英語に翻訳されて、「You obtained {n} {m}!」になったとします。試しに変数の部分に「空きびん(bottle)」と「3」を入れてみます。すると、「You obtained 3 bottle!」となりますが、この場合は複数形(bottles)でなければならないはずです。

つまり、{n} が 1 なのかそれ以上なのかによって、{m} の部分は単数形になったり複数形になったりするのです。複数形は必ず末尾に「s」が付くだけとは限りません。変則的な変化をするものもあるため、アイテム名を示すテキストは単数形と複数形の両方を用意しなければならないでしょう。

また、{n} が 1 の場合は「You obtained a bottle!」のように、「1」ではなくて冠詞「a」を入れて欲しいという要望もあるかもしれません。この場合は更に厄介で、この冠詞「a」は直後に母音が来ると「an」に変化するため、{m} の最初の発音が母音なのかどうかによって「a」か「an」を使い分けなければなりません。これは {m} の最初の文字ではないので、機械的に判定するのは(現実的には)不可能です。

このようなケースではアイテム名の「冠詞付きバージョン」も用意してもらわなければなりません。ただ、コストがかかるし管理も複雑になるので、別の表記法を模索するというのがほとんどです。

「{m} x{n} を入手した!」 → 「空きびん x3 を入手した!」

…みたいな表記法にしておいたら複数形や冠詞の問題から逃れることができそうですね。

まとめ

世界はとにかく広い…! いろんな言語があって、いろんな文化があって、いろんな考え方が存在しています。それを日本人の開発者が全て把握するなんてことは難しいですから、できる限り翻訳者の意見に耳を傾けることが大切です。でも、ある程度こういった知識を持っていないと、いざという時に実装コストの予期せぬ増加を招くことになるかもしれません。

「そんなルールがあるなんて知らないよ~~!!」

なんてトラブルをできるだけ避けられるように…また、世界中の人に愛されるゲームを目指すためにも…少しでも多くの知識を蓄えておく必要がありますね。