ローカライズの注意点

テーマ:
 日本語以外の言語をサポートする時、注意する必要がいくつかあります。

 特に、LocalizationSample のように、アセンブリ リソース ファイルで文字列を扱う時です。
 恐らく、ローカライズは英語のみのゲームが多いと思いますが、リソースは以下のように作成しましょう。

・「リソース名.resx」に英語の文字列を登録し、日本語は「リソース名.ja.resx」に登録する。

 LocalizationSampleと同じ方法で、登録しましょうと言う事です。

 この形式で登録すると、以下のようにリソースが使用されます。

・日本語のXbox360上 → 日本語
・英語のXbox360上 → 英語
・それ以外の言語のXbox360上 → 英語

 これを逆に登録してしまうと、例えば英語はわかるけど日本語はわからないフランス人が、そのゲームを起動すると日本語が出てきてしまい、Xbox360の設定を変えない限り、英語では遊べなくなります。
 むしろ、英語に対応してないと勘違いしてしまう可能性が高いと思います。

 リソースを使わない場合でも、テクスチャ等を言語で分けている場合、日本語環境なら日本用のテクスチャ、それ以外は英語のテクスチャを読み込むと言う形にしておきましょう。

 ところで、日本語大好きフランス人が、日本製のゲームは日本語で遊びたいと思った時は、どうすれば良いでしょうか?
 Xbox360 の設定を日本語にすれば動きますが、切り替えが面倒です。

 ゲーム中で切り替え機能を入れれば、多少は楽になりそうです。

 リソースを使わない場合、特に問題はありませんね。言語情報を変数で確保し、そこを書き換えて、テクスチャ等の再読み込みをするだけで、終了です。

 では、リソースを使う場合は?

 リソース名で作られたクラスには、Cultureと言うプロパティがあるので、そこを書き換えればOKです。

 LocalizationSampleでは、初期化時に以下のように現在のCultureInfoを渡しています。

  Strings.Culture = CultureInfo.CurrentCulture;

 例えば、以下のような感じで、Cultureプロパティを初期化します。

・英語(アメリカ)

  リソース名.Culture = new CultureInfo(0x0409);

・英語(イギリス)

  リソース名.Culture = new CultureInfo(0x0809);

・英語(英語圏全体)

  リソース名.Culture = new CultureInfo(0x0009);

・日本語

  リソース名.Culture = new CultureInfo(0x0011);

 CultureInfoのコンストラクタの引数に渡す値は、CultureInfoのヘルプの表のカルチャ識別子を参照して下さい。

 尚、テクスチャ読み込み時に言語情報を見る場合は、LocalizationSampleのソースとは変えて、リソースのCultureプロパティを参照するようにすると、設定場所が一箇所になるのでうっかりミスも防げると思います。

 そんな感じで、本来遊んで貰えたかも知れない人々に遊んで貰えなくならないようにするためのTIPでした。

AD

コメント(1)