ローカライズ(多言語)対応する


宴2.5.2からローカライズ機能が追加されました。

ローカライズの設定

ローカライズに関する設定は、Projectウィンドウ内の、「プロジェクト名」/ScriptableObject/LanguageManager から詳細設定できます。


名前 内容
Language 起動時の言語設定。空欄の場合は、実行環境の言語を自動的に判別してその言語を使う
DefaultLanguage 対応する言語のデータがない場合に使用する言語
DataLanguage シナリオデータのText列などの言語指定。デフォルトは空欄。詳細は下記
LanguageData エラーメッセージなどのデータ。ローカライズシートで設定・上書きできるが、基本設定の言語を削除するときなどは編集が必要。詳細は下記
Igonore Localize UI Text UIのテキスト変更を無視する
Igonore Localize Voice ボイスのローカライズを無視する

シナリオのテキストをローカライズする

各シナリオシートに、対応する言語名の列を追加し、対応言語のテキストを記述するだけです。(言語名の一覧は、Unityのリファレンスを参照。)

サンプル

Text列の言語指定

通常、Text列は現在の環境の言語がない場合のデフォルトの表示テキストとして使われます。
ただこの方法ですと、「Text」列を日本語で作成してしまうと、アプリ実行時は日本語が基本となってしまい、対応言語がない場合は英語を表示することができません。
そこで、LanguageManager の「DataLanguage」に言語を指定することで、「Text」列の言語を指定できます。
・「DataLanguage」で言語指定がある場合、Text列は指定言語の場合にのみ表示されるようになります。
・「DefaultLanguage」の列のテキストが基本の表示テキストとして使用されます。
・「DefaultLanguage」の列のテキストが空の場合は、やはりText列のテキストを表示します。

つまり、「開発は日本語。アプリの基本言語は英語」としたい場合は、
LanguageManagerの「DefaultLanguage」を「English」に。「DataLanguage」を「Japanese」にしてください。

シーンギャラリーのセーブのタイトルのローカライズ

テキスト列以外にも、シーンギャラリーやシナリオラベルにおけるセーブのタイトルでも、言語列を追加することで、ローカライズができます。

ボイスをローカライズする

LanguageManageの「Igonore Localize Voice」のチェックをオフにして、


Soundリソースフォルダ以下に、
「Voice+対応言語名」のフォルダを作って、全ボイスファイルを作成してください。

通常、ボイスまでローカライズするのは困難な場合も多いため、「Igonore Localize Voice」でボイスのローカライズをするかどうかを切り替えられるようにしてあります。

ローカライズシート

詳細は、ローカライズシートも参照してください。

キャラクターの名前

キャラクターの名前のテキストは、ローカライズしたいNameTextをキーにして、言語ごとのテキストを追加します。

UIやエラーメッセージ等をローカライズする

LanguageManageの「Igonore Localize UI Text」のチェックをオフにして、

[ローカライズシート]にUIのテキストのキーと、対応言語のテキストを記述します。

ローカライズしたいUIのテキストには、UguiLocalizeコンポーネントを追加し、対応するキーを設定してください。

初期状態の全てのUIには、すでにUguiLocalizeコンポーネントが設定済みです。
 初期状態では、殆どのUIには既にUguiLocalizeコンポーネントが設定済みですが、メッセージウィンドウ下部のボタンなど、一部のUIはローカライズ非対応です。

・UIのテキストを変えている場合は、ローカライズシートにキーとテキストを追加し、UguiLocalizeコンポーネントにキーを設定。
という作業をしてください。
・新しく自作したUIはUguiLocalizeコンポーネントを追加して、対応するキーを設定してください。

デフォルトのローカライズデータ

これは主にエラーメッセージや、UIボタンのローカライズデータが初期設定されています。
ローカライズシートで上書きできるので、基本的には初期設定のままで構いません。
ただ、上書きにはできますが、すでにある項目を削除はできません。
デフォルトに日本語と英語が設定されていますので、これらの言語のローカライズデータを削除したい場合は、
LaguageDataからこれらのファイルを削除するか、ファイルをコピーして使用する言語のみ設定するように編集したものに差し替えてください。
形式はTSV(タブ区切りのCSV)です。

プログラムからローカライズしたテキストを呼び出す

プログラムから、ローカライズしたテキストを呼び出すには以下のように、ローカライズシートのキーを指定して行います。

public class SampleLocalize : MonoBehaviour
{
    public Text text;
    void Localize()
    {
        string key = "Yes";
        text.text = LanguageManager.Instance.LocalizeText(key);
    }
}

フォントのサイズや、UIの位置や大きさをローカライズする 

言語によって必要となる文字数に大きな差があるため、「指定の領域に文字が収まるようにする」のが難しい場合もあります。
その対策として、フォントのサイズや、UI位置や大きさを変えることもできます。

フォントの種類やサイズを変える

テキストオブジェクトに、UguiLocalizeTextSettingコンポーネントを追加してください。

名前 内容
SettingList 設定データリスト。対応言語ぶん追加する
Language 言語名
Font この言語で使用するフォント。未設定の場合は、フォントは変えない
FontSize フォントのサイズ
LineSpacing 行間の設定

UIの位置や大きさを変える

位置・大きさを変えたいUIにUguiLocalizeRectTransformをAddComponentしてください。

名前 内容
SettingList 設定データリスト。対応言語ぶん追加する
Language 言語名
Anchored Position 位置
Size 大きさ

Strechは未対応

UguiLocalizeRectTransformで設定する位置、大きさはアンカーは適用されますが、Strech(親オブジェクトの大きさによってサイズを変える機能)は適用されない状態のものになります。
MessesageWindowなどStrechが設定されているオブジェクトの場合は、数値の設定がしづらくなると思いますので、下図のようにStrechを解除してみてください。

プログラムから言語を切り替える

プログラムから言語を切り替えるサンプルは、
Utage\Sample\Scripts\SampleLanguage.cs にあります。

    public class SampleLanguage : MonoBehaviour
    {
        //指定の言語に切り替え
        public void ChangeLanguage(string language)
        {
            LanguageManagerBase langManager = LanguageManagerBase.Instance;
            if (langManager == null) return;
            if (langManager.Languages.Count < 1) return;

            langManager.CurrentLanguage = language;
        }
    }

言語名をシステムセーブデータ内のパラメーターに設定する

宴3.8.0から、言語名をシステムセーブデータ内のパラメーターに自動で保存できるようにしました。

設定方法

Paramシートに、「言語名のパラメーター」を追加します。
「language」などのキー(ラベル名)をつけて、Typeを「String」、FileTypeを「System」としてください。

AdvEngineの「Language Key Of Param」に先ほど作成した「言語名のパラメーター」のキー(ラベル名)を設定します。

これを設定しおくと、プログラムから言語を切り替えた場合、自動的にシステムセーブデータのパラメーターに言語名を保存するようになり、
次回以降の宴の起動時に、前回設定した言語名に自動で切り替わるようになります。

また、パラメーターとして言語名が使えるようになるので、Jumpコマンドの条件文などにすることで言語によってシナリオを分岐するなども可能になります。

表示する画像を言語によって切り替える

CharacterシートやTextureシートのConditionalに言語名による条件文を設定することで、表示する画像を言語によって自動的に切り替えることが可能になります。

Conditionalは条件の成否にかかわらず画像を全てロードしてしまうので、
言語ごとにたくさんの画像が必要な場合はDicingなどを使ってサイズを削減するなどしてください。
また、Conditionalは表示した後でパラメーターが変更されてもその影響は受けません。
つまり画像を表示中に言語を切り替えても、その画像は変更されません。
その点が気になるのであれば、ゲームの起動前のタイトル画面などで言語設定するようにして、ゲームのプレイ中には切り替えをしないようにするなどしてください。