2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityEditorでの言語設定エミュレーション用のスクリプト

Last updated at Posted at 2020-01-12

やりたいこと

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 パッケージを使うと、言語設定をシミュレートできるっぽいです。(試してないからわからないけど)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?