任意のタイミングでロケールを変更する

ページ作成日 :

検証環境

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

この Tips の前提設定

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

前提知識と準備

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

ロケール変更用ボタンの配置

Unity エディター上で実行した場合は画面右上でロケールを変更できますが、ゲームビルド後はその機能はついていないため自分で用意する必要があります。 今回は3つの言語「Japanese (ja)」「English (en)」「Spanish (es)」を切り替えるためにそれぞれボタンを配置してクリックしたら切り替わるようにしておきます。

ボタン用のスクリプト作成

ボタンをクリックしたときに対象のメソッドが呼ばれるようにしてください。ここらへんは汎用的な手順になるので詳細は省きます。 詳しい説明は以下の Tips を参照してください。

ButtonEvent という名前でスクリプトを作成します。

using UnityEngine;

public class ButtonEvent : MonoBehaviour
{
  /// <summary>Japanese (ja) ボタンをクリックしたとき。</summary>
  public void OnClickJa()
  {
  }

  /// <summary>English (en) ボタンをクリックしたとき。</summary>
  public void OnClickEn()
  {
  }

  /// <summary>Spanish (es) ボタンをクリックしたとき。</summary>
  public void OnClickEs()
  {
  }
}

各メソッドをボタンのクリックに割り当てます。

ロケールの変更処理

コードを以下のように修正します。

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

public class ButtonEvent : MonoBehaviour
{
  /// <summary>Japanese (ja) ボタンをクリックしたとき。</summary>
  public void OnClickJa()
  {
    LocalizationSettings.SelectedLocale = Locale.CreateLocale("ja");
  }

  /// <summary>English (en) ボタンをクリックしたとき。</summary>
  public void OnClickEn()
  {
    LocalizationSettings.SelectedLocale = Locale.CreateLocale("en");
  }

  /// <summary>Spanish (es) ボタンをクリックしたとき。</summary>
  public void OnClickEs()
  {
    LocalizationSettings.SelectedLocale = Locale.CreateLocale("es");
  }
}

変更自体は簡単で LocalizationSettings.SelectedLocale プロパティに対象の Locale をセットするだけで切り替えられます。 LocaleLocale.CreateLocale メソッドにロケールの名前をセットすれば作成することが出来ます。

ただしロケールの変更処理は非同期であるため、LocalizationSettings.SelectedLocale をセットした次の処理ですでにロケールが完全に切り替わってるというわけではありません。 ロケールに依存する処理を行っている場合は注意してください。

実行して確認

処理はこれだけですので後は実行して動きを確認してください。 ゲーム画面の右上でロケールを変更したときと同じように各種リソースが動的に切り替わることを確認できると思います。