【Unity】【Localization】Locale Selectorでアプリ起動時の言語を設定する方法まとめ

UnityのLocalizationパッケージのLocale Selectorでアプリ起動時の言語を設定する方法についてまとめました。

Unity2020.3.15f2
Localization 1.1.1

はじめに

本記事ではUnityのLocalizationパッケージのLocale Selector機能を使って、
アプリを起動した時の言語を適切に設定する方法についてまとめます。

Localizationパッケージの基礎知識については以下にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

Locale Selectorの役割

Localizationパッケージで多言語対応したアプリケーションには複数の言語の情報が含まれています。
ユーザがそのアプリケーションを起動した際には、そのうちからいずれかの言語が選択される必要があります。
Locale Selectorはこれを設定するための機能です。

なお、Locale SelectorLocalization Scene ControlsActive Localeが設定されていない状態で再生された際に言語を選択するためにも使用されます。

f:id:halya_11:20220228184027p:plain
Active LocaleがNone

Locale Selectorの設定方法

Locale SelectorProject Settings > Localization > Locale Selectorsから設定できます。

f:id:halya_11:20220228184056p:plain
Project Settings

デフォルトの設定では上記のように3つ程度のLocale Selectorが設定されていると思います。
LocalizationパッケージがLocaleを選択する際には、これを上から順に評価していき、最初に有効なLocaleが見つかった時点でそれを採用します。

Locale Selectorの種類

デフォルトでは以下のLocale Selectorが用意されています。

名前 説明
Command Line Locale Selector コマンドラインオプションとして指定されたLocaleを選択する。
コマンドラインオプションの指定方法はCommand Line Argumentで指定可能。
System Locale Selector CultureInfo.CurrentUICultureやApplication.systemLanguageを使ってシステムで使われている言語に基づいてLocaleを選択する。
Specific Locale Selector 直接Localeを指定する。
Player Prefs Locale Selector PlayerPrefsに保存されたLocaleを選択する。
このLocale Selectorが設定されていると、言語が変更されたときにPlayerPrefsが書き換わる。
つまり次回起動した時にユーザが選択した言語に選択されるという挙動を実現できる。

Command Line Locale Selectorの指定方法が少しわかりづらいですが、
Command Line Argument-language=と指定して、コマンドラインオプションとして-language=enのようにLocaleのCodeを指定するのが良さそうです。
デフォルトでは-language =のようにスペースが入っていますがコードを見る限りこれだとうまく動作しないように思います。

さて上記の仕様を踏まえると、例えばユーザが動的に言語を選択できるような仕様のアプリの場合には、以下のように設定するのが良さそうです(もちろん仕様によりますが)。

  1. Player Prefs Locale Selector: ユーザが選択した言語がすでにあればそれを最優先
  2. Command Line Locale Selector: 初期言語をコマンドラインで上書きすることも可能
  3. System Locale Selector: 基本的には初期言語は端末で指定されている言語に合わせる
  4. Specific Locale Selector: 使わないと思うけどここまで通ってしまった時のために一応設定

カスタムLocale Selector

IStartupLocaleSelectorを実装すると独自のLocale Selectorを作成することができます。

実装は難しくなさそうなので、必要になったら以下のAPIリファレンスを参照しましょう。

docs.unity3d.com

関連

light11.hatenadiary.com

参考

docs.unity3d.com

docs.unity3d.com