やりたいこと
Unityでは、Application.systemLanguageでシステムの言語設定が取得できます。
UnityEditorで実行中はApplication.systemLanguageの値はOSの設定と同じになると思います。(※1)
しかし、このままだと言語を切り替えたときの動作の確認がやりにくいです。(検証のたびにOSの言語設定を変えないといけないため)
そのため、UnityEditorで実行した時はエディタで設定した言語を読み取り、ビルドしたアプリではシステムの言語設定を読み取るようなスクリプトを作成しました。
※1 macOS Catalina / Unity2019.3.0f3 環境ではOSが日本語設定でもなぜかEnglishになります。
→ 2020/2/2 追記: もしかするとDevice Simulatorの設定で上書きされてるかも?(追記参照)
スクリプト
using System;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace HiiroHitoyo
{
#if UNITY_EDITOR
public class EmulatableLanguageSettings : SettingsProvider
{
static readonly string emulatedLanguageKey = "EmulatedLanguageKey";
public EmulatableLanguageSettings( string path, SettingsScope scope ): base( path, scope ) { }
[SettingsProvider]
private static SettingsProvider Create()
{
var path = "Project/Language Emulation";
var provider = new EmulatableLanguageSettings( path, SettingsScope.Project );
provider.keywords = new []{ "Language"};
return provider;
}
public override void OnGUI( string searchContext )
{
var currentLanguage = emulatedLanguage;
var lang = (SystemLanguage) EditorGUILayout.EnumPopup("Language", currentLanguage);
EditorPrefs.SetInt(emulatedLanguageKey, (int) lang);
}
static public SystemLanguage emulatedLanguage => (SystemLanguage) Enum.ToObject(typeof(SystemLanguage), EditorPrefs.GetInt(emulatedLanguageKey, (int)Application.systemLanguage));
}
#endif
public class EmulatableLanguage
{
#if UNITY_EDITOR
static public SystemLanguage systemLanguage => EmulatableLanguageSettings.emulatedLanguage;
#else
static public SystemLanguage systemLanguage => Application.systemLanguage;
#endif
}
}
使い方
設定言語の読み取り方法
Application.systemLanguageの代わりに、EmulatableLanguage.systemLanguageを呼び出してください。
using HiiroHitoyo
public class Example
{
public void test()
{
Debug.Log("Language = " + EmulatableLanguage.systemLanguage);
}
}
言語設定方法
Edit -> Project Settings から Language Emulationタブを選択し、プルダウンから設定したい言語を選択したください。
注意事項
設定値をEditorPrefsで保存しているので、設定値はプロジェクトをまたいで変更されます。
設定をプロジェクト内で留めたい場合はEditorUserSettingsで保存するなどしてください。
動作確認環境
Mac OS 10.15.2
Unity 2019.3.0f3
2020/2/2 追記
Unity 2019.3 から使えるようになった、Device Simulator パッケージを使うと、言語設定をシミュレートできるっぽいです。(試してないからわからないけど)