UnityのLocalizationパッケージのLocale Selectorでアプリ起動時の言語を設定する方法についてまとめました。
Unity2020.3.15f2
Localization 1.1.1
はじめに
本記事ではUnityのLocalizationパッケージのLocale Selector機能を使って、
アプリを起動した時の言語を適切に設定する方法についてまとめます。
Localizationパッケージの基礎知識については以下にまとめていますので、必要に応じて参照してください。
Locale Selectorの役割
Localizationパッケージで多言語対応したアプリケーションには複数の言語の情報が含まれています。
ユーザがそのアプリケーションを起動した際には、そのうちからいずれかの言語が選択される必要があります。
Locale Selector
はこれを設定するための機能です。
なお、Locale Selector
はLocalization Scene Controls
でActive Locale
が設定されていない状態で再生された際に言語を選択するためにも使用されます。
Locale Selectorの設定方法
Locale Selector
はProject Settings > Localization > Locale Selectors
から設定できます。
デフォルトの設定では上記のように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 =
のようにスペースが入っていますがコードを見る限りこれだとうまく動作しないように思います。
さて上記の仕様を踏まえると、例えばユーザが動的に言語を選択できるような仕様のアプリの場合には、以下のように設定するのが良さそうです(もちろん仕様によりますが)。
- Player Prefs Locale Selector: ユーザが選択した言語がすでにあればそれを最優先
- Command Line Locale Selector: 初期言語をコマンドラインで上書きすることも可能
- System Locale Selector: 基本的には初期言語は端末で指定されている言語に合わせる
- Specific Locale Selector: 使わないと思うけどここまで通ってしまった時のために一応設定
カスタムLocale Selector
IStartupLocaleSelector
を実装すると独自のLocale Selector
を作成することができます。
実装は難しくなさそうなので、必要になったら以下のAPIリファレンスを参照しましょう。