作成したロケールの一覧を取得する
現在表示しているページは選択中の表示言語には対応しておりません。
検証環境
- 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
が初期化されていないためです。
少し時間が経過するとドロップダウンにロケールの一覧が登録されることを確認できると思います。 試しにアイテムを切り替えるとテキストの内容が変化することを確認できると思います。