Unityでのローカライズ(5) 保存した設定の言語を選択する
今回は保存した言語設定を Startup Locale Selector で言語選択する方法を説明していきたいと思います。
まだパッケージのインストールや初期設定を行っていない方は、まずは前の記事をご覧ください。
→ ローカライズ(1) Localizationの導入
→ ローカライズ(2) 文字列のローカライズ
→ ローカライズ(3) 画像のローカライズ
→ ローカライズ(4) スクリプトで言語を変更する
保存した設定の言語を選択する
アプリ内のオプションで変更した言語設定を保存しておいて、次にアプリを起動したときにその言語にしたいということがあると思います。
Project Settings の Localization の Locale Selectors に保存した言語を選ぶ Selector を追加することで実現できます。
そのためにUnity の PlayerPrefs を使用した "Player Pref Locale Selector" が用意されていますが、今回は "IStartupLocaleSelector インターフェースを使用してオリジナルのカスタムセレクターを作る" ことで実装する方法を紹介します。
1. "IStartupLocaleSelector インターフェース" を継承してセレクターのスクリプトを作成します。
以下に以下にサンプルのスクリプトを載せておきます。
※設定のロードは模擬関数になってますので実際使用する場合は自分に合った内容に変更してください。
using System;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
[DisplayName("Test Startup Selector")]
[Serializable]
public class Test_StartupSelector : IStartupLocaleSelector
{
//IStartupLocaleSelectorインターフェイスに必ず必要な関数。Startup時にこの関数が呼ばれる。
public Locale GetStartupLocale(ILocalesProvider availableLocales)
{
SystemLanguage language;
//設定に保存された言語を取得する。保存されてなければstring.Emptyが返ってくるとする。
string savedLanguage = this.GetSavedLanguageSetting();
//設定が保存されてなければnillを返し選択失敗させる。
if(savedLanguage == string.Empty)
{
return null;
}
//stringの選択情報をSystemLanguageに変換
switch(savedLanguage)
{
case "Japanese":
language = SystemLanguage.Japanese;
break;
case "English":
language = SystemLanguage.English;
break;
default :
return null;
}
//Localeを返す
return availableLocales.GetLocale(language);
}
// 保存された言語設定を取得する模擬関数。
public string GetSavedLanguageSetting()
{
//設定ファイルの有無。本当はここには設定ファイルがあるか調べる処理を書く。
bool settingExists = true;
//設定ファイルが存在していたら言語を返す。
if(settingExists)
{
//本当はここには設定をロードしてそこに保存されていた言語を返す。
return "English";
}
//設定ファイルが存在してなかったらstring.Emptyを返す。
return string.Empty;
}
}
2. メインメニュー[Edit ⇒ Project Settings] で Project Settings ウィンドウを開き Localization の設定を表示させます。
Locale Selecors のリストで [+ ⇒ 先ほど作成したセレクター] を追加してください。

3.次にSelectorの優先順位を調整します。保存された設定はシステム環境の設定よりも前に判定される必要があるので、追加したセレクターを "System Locale Selector" の上にドラッグして移動させてください。これで設定完了です。

次回は アプリ名のローカライズ の方法を書いていく予定です。