ローカライゼーション・サンプル

Creators Club Onlineに以下の3つの新しいサンプルが追加されました。

  1. ローカライゼーション サンプル(Localization)
  2. セーフエリア サンプル(Safe Area)
  3. 招待 サンプル(Invites)

一気に紹介すると長くなるので、三回に分けてそれぞれのサンプルを紹介していきます。今回はローカライゼーション サンプルについて紹介します。

ローカライゼーション

コミュニティゲームでゲームを投稿する場合、配信地域を選ぶことができます。現状ではアメリカ、カナダ、イギリス、フランス、イタリア、そしてスペインの6カ国で、2009年の前半には日本が加わり7カ国になります。世界の複数の国々の人達に自分の作ったゲームを楽しんで貰うためには必要な作業としてローカライズがあります。そこで、このサンプルではローカライズされた文字列とアセットの使い方のコードが含まれています。

ローカライズされた文字列表示

このサンプルでは言語別のリソースファイル(.resxファイル)を用意し、ゲームクラスコンストラクタの中で実行環境の言語情報を以下のコードのように指定して文字列を変更しています。

 Strings.Culture = CultureInfo.CurrentCulture;

SpriteFontDescriptionクラスから派生したLocalizedFontDescriptionクラスに複数のリソースファイルを指定できるようになっていて、ここに各言語の文字列が入ったリソースファイルを指定し、コンテント・パイプライン内でLocalizedFontProcessorによって変換されます。

言語別のリソースファイルは、リソース名.言語コード.resxのようになっています。このサンプルではリソース名がStringsになっていて日本語のリソースファイル名はStrings.ja.resxとなっています。この言語コードはISO 639-1で定義されているアルファベット2文字になっています。

殆どの場合は言語コードを指定するだけで済むのですが、言語コードだけでは足りなくなる場合もあります。例えば、同じ英語でもアメリカの場合はcolorでもイギリスの場合はcolourと違いがあります。その場合は言語コードと国名コードの組み合わせを使います。国名コードはISO 3166-1で定義されているアルファベット2文字を使います。アメリカの英語の場合はen-US、イギリスの英語の場合はen-GBとなります。

この言語コード-国名コードの組み合わせをカルチャ名と呼び、カルチャを表すCultureInfoクラスを生成する時に以下のコードのようにして使用します。

 Strings.Culture = new CultureInfo("en-GB");

ローカライズされたアセット読み込み

ローカライズ作業の大半は文章の翻訳になりますが、中にはテクスチャ等のアセット自体をローカライズしたい時があります。このサンプルでは読み込むアセット名を前述のリソースファイル名と同じように、アセット名.カルチャ名の組み合わせであることを前提として使うGetLocalizedAssetNameメソッドがゲームクラスに宣言されていて、国別の国旗テクスチャを変更しています。

以下はコミュニティゲームがサポートする国と言語の表です。

国名 公用語 言語コード 国名コード カルチャ名
アメリカ 英語 en US en-US
カナダ 英語、フランス語 en,fr CA en-CA,fr-CA
イギリス 英語 en GB en-GB
フランス フランス語 fr FR fr-FR
イタリア イタリア語 it IT it-IT
スペイン スペイン語 es ES es-ES
日本 日本語 ja JP ja-JP

特徴として、カナダでは公用語が英語とフランス語の2つの言語が使われていることです。

このサンプルは複数の言語へのローカライズの参考にもなりますが、リソースファイルを使った日本語表示の方法としても参考になるサンプルだと思います。