Unityでのローカライズ(4) スクリプトで言語を変更する
今回はLocalizationパッケージでC#スクリプトで言語を切り替える方法を説明していきたいと思います。
まだパッケージのインストールや初期設定を行っていない方は、まずは前の記事をご覧ください。
→ ローカライズ(1) Localizationの導入
→ ローカライズ(2) 文字列のローカライズ
→ ローカライズ(3) 画像のローカライズ
スクリプトで言語を切り替える
オプション画面などで言語を動的に切り替えたい場合があると思います。
C#スクリプトから言語を切り替える方法を説明します。

以下にサンプルのスクリプトを載せておきます。
ボタンを押すと任意の "SystemLanguageの値" を用いて言語を変更する関数を呼び出します。
"LocalizationSettings.AvailableLocales.GetLocale" にその値を与えれば目標の "Locale" が得られます。
その後、 "LocalizationSettings.SelectedLocale" に変更したい "Locale" を指定してあげれば変更できます。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
public class Test_Localization : MonoBehaviour
{
//ボタン
public Button JP_Button; //日本語に変更するボタン
public Button En_Button; //英語に変更するボタン
//初期化
void Awake()
{
//ボタンがクリックされたときにChangeLocaleを呼び出す。
JP_Button.onClick.AddListener( () => { this.ChangeLocale(SystemLanguage.Japanese); });
En_Button.onClick.AddListener( () => { this.ChangeLocale(SystemLanguage.English); });
}
// Localeを切り替える
private void ChangeLocale(SystemLanguage language)
{
//Localeがあるかどうか調べる
Locale locale = LocalizationSettings.AvailableLocales.GetLocale(language);
if(locale == null)
{
Debug.LogWarning("Localeがありません。");
return;
}
//現在のLocaleと同じだったら変更しない
if(locale == LocalizationSettings.SelectedLocale)
{
return;
}
//Localeを設定する
LocalizationSettings.SelectedLocale = locale;
}
}
切り替えは非同期で行われます。切替完了まで待つ必要がある場合は async や await を使って非同期対応してください。
次回は 保存した設定の言語を選択する 方法を書いていく予定です。
