任意のタイミングでロケールを変更する
検証環境
- 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
をセットするだけで切り替えられます。
Locale
は Locale.CreateLocale
メソッドにロケールの名前をセットすれば作成することが出来ます。
ただしロケールの変更処理は非同期であるため、LocalizationSettings.SelectedLocale
をセットした次の処理ですでにロケールが完全に切り替わってるというわけではありません。
ロケールに依存する処理を行っている場合は注意してください。
実行して確認
処理はこれだけですので後は実行して動きを確認してください。 ゲーム画面の右上でロケールを変更したときと同じように各種リソースが動的に切り替わることを確認できると思います。