作成したロケールの一覧を取得する

ページ更新日 :
ページ作成日 :

検証環境

Windows
  • Windows 11
Unity エディター
  • 2021.3.12f1
Input System (Unity Technologies)
  • 1.4.4
Localization (Unity Technologies)
  • 1.3.2

この Tips の前提設定

この Tips の説明の前提として以下の設定を事前に行っています。

当 Tips のゴール

ドロップダウン UI に、対応するロケールの一覧を表示しユーザーが選択したロケールに合わせて表示テキストを切り替えます。

前提知識と準備

この Tips は以下のテキストのローカライズを前提として説明しています。 まずは以下の Tips を参考にローカライズしたテキストを表示するところまで準備してください。

ロケール変更用ドロップダウンの配置

ロケール一覧を表示するためのドロップダウンを用意します。 表示と選択ができればよいので UI の各パラメータは適度に設定してください。

ロケールの一覧を取得する

作成したロケールの一覧は LocalizationSettings.AvailableLocales.Locales で取得することが出来ます。 これを利用してシーン開始時にドロップダウンにセットすれば OK です。 ただし、ゲームを開始した時点では Localization の初期化が完了していない場合があるので完了するまで待機する必要があります。

まずはスクリプトを作成します。名前は DropDownEvent としておきます。

スクリプトは以下のようにします。

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

public class DropDownEvent : MonoBehaviour
{
  // 最初のフレームアップデートの前に開始が呼び出されます
  async void Start()
  {
    // Localization の初期化が完了するまで待機します
    await LocalizationSettings.InitializationOperation.Task;

    // 処理対象の Dropdown コンポーネントを取得します
    var dropdownLocale = GetComponent<Dropdown>();
    dropdownLocale.options.Clear();

    // LocalizationSettings.AvailableLocales.Locales からロケール一覧を取得してオプションを追加します
    foreach (var locale in LocalizationSettings.AvailableLocales.Locales)
    {
      dropdownLocale.options.Add(new Dropdown.OptionData(locale.name));
    }

    // 初期選択されているロケールのインデックスを取得して選択します
    dropdownLocale.value = LocalizationSettings.AvailableLocales.Locales.IndexOf(LocalizationSettings.SelectedLocale);

    // ドロップダウンのアイテムが選択されたときにロケールを変更します
    dropdownLocale.onValueChanged.AddListener((index) =>
    {
      LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];
    });
  }
}

Start メソッドでシーン開始時に処理を行いますが、この時点では Localization の初期化が終わっていない場合があるので、 await LocalizationSettings.InitializationOperation.Task で初期化が完了するまで待機します。 await を使っているので Start メソッドに async を追加してください。

次に LocalizationSettings.AvailableLocales.Locales に作成したロケールの一覧が含まれているので foreach でロケールの数だけ処理し、 Dropdown.OptionData にロケール名をセットして Dropdown に追加していきます。

ドロップダウンで現在のロケールを選択させるために Dropdown.value プロパティに対象ロケールを検索してインデックスをセットします。

一覧の作成はこれで終わりですが、ドロップダウンのアイテムを選択したときにロケールを変更させる処理も入れたいので onValueChanged イベントにロケール切り替え処理を追加します。これは前回の Tips と同じ内容です。

作成したスクリプトはドロップダウンにアタッチします。

実行して確認

ゲームを実行して確認してみてください。 ゲーム開始直後にロケール一覧がセットされていない時間がありますが、これは Localization が初期化されていないためです。

少し時間が経過するとドロップダウンにロケールの一覧が登録されることを確認できると思います。 試しにアイテムを切り替えるとテキストの内容が変化することを確認できると思います。