【Unity】Localizationでテキストを切り替える

言語ごとにテキストを切り替える(Localization) C#
言語ごとにテキストを切り替える(Localization)
バージョン
  • Unity6 (6000.0.25f1)
  • Localization 1.5.3

UnityのLocalizationを使用してテキストの多言語対応をしていきます。
このページでは「日本語(Japanese)」と「英語(English)」の2種類に対応させていきます。

多言語対応テーブル作成

まずは各言語に対応する文字列のテーブルを作成します。

Unity Editor

メニューバー「Window」→「Asset Management」→「Localization Tables」


テーブル作成用ウィンドウが開きます。

Localization Tables

「+ New Table Collection」をクリック


さらに詳細ウィンドウが表示され、テーブルの種類や名前を設定します。
このページでは「SampleTable」という名前で作成します。

Localization Tables
  • Type: 「String Table Collection」
  • Name: 任意のテーブル名
  • 上記設定後、「Create」をクリック
String Table Collection文字列
Asset Table Collectionアセット


テーブルの詳細を設定したら保存先を選択します。

Localization Tables

任意の場所に保存

これでテーブルの作成は完了です。

各言語のローカライズ設定・編集

テーブルの作成が完了したらテーブルを編集していきます。
編集したいテーブルが表示されていない場合は「Selected Collection」で任意のテーブルを選択します。

Localization Tables

「New Entry」をクリック


「Key」、「English(en)」、「Japanese(ja)」という3種類の入力エリアが表示されるのでそれぞれ入力していきます。

Localization Tables
  • Key: 任意のキー名を入力
  • English(en): ローカライズした英語の文字列を入力
  • Japanese(ja): ローカライズした日本語の文字列を入力

上記の設定だと、日本語対応時は「サンプル」、英語対応時は「Sample」と表示されるようになります。
キー名は自分が後から見た時に分かる名前であれば何でもOKです。

これをローカライズしたい文字列の分だけ作成していきます。
ローカライズ用のテーブル編集はこれで完了です。

ロケールデータの適用

ロケールデータが作成できたら実際に適用していきます。
このページではUI用のTextMeshProにアタッチしていきます。

TextMeshPro Inspector

TextMeshProコンポーネントを右クリック →「Localize」


「Localize String Event」コンポーネントが自動的に追加されます。
「String Reference」で作成したキーを選択して、このTextMeshProに設定します。

Localize String Event
Localize String Event

「String Reference」→ 任意のキーを選択

これでTextMeshProへのアタッチが完了です。
この状態でUnityを実行して文字列が言語ごとに切り替わるか確認してみます。

サンプルテキスト(日本語)
Sample Text (English)

右上のドロップダウンで言語切替ができます。

想定通り、日本語では「サンプル」、英語では「Sample」と表示されました。

スクリプトでロケール切替

各言語ごとにテキストの切替ができる状態になったので、最後にスクリプトから切り替えられるようにしていきます。

今回はToggleを2つ用意して、選択した言語に切り替わるようにします。
以下のスクリプトをToggleにアタッチします。

using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.Localization;
using UnityEngine.UI;

public class ToggleLocale : MonoBehaviour
{
    private Toggle toggle;
    private string localeKey;

    void Start()
    {
        toggle = GetComponent<Toggle>();
        localeKey = toggle.name;
        toggle.onValueChanged.AddListener(Change);
    }

    public async void Change(bool isOn)
    {
        if (isOn)
        {
            LocalizationSettings.SelectedLocale = Locale.CreateLocale(localeKey);

            //初期化のため待機
            await LocalizationSettings.InitializationOperation.Task;
        }
    }
}

簡略化するためにToggleのオブジェクト名に言語キーを設定しています。


Unityを実行します。

サンプルテキスト(日本語)
Sample Text (English)

Toggleを切り替えることで、テキストも各言語に対応して表示されました。
以上でテキストのローカライズ対応は完了です。

Localization - Unity マニュアル


Toggleについてはこちらをどうぞ!

タイトルとURLをコピーしました