本日は Unity の小ネタ枠です。
Unityでアプリが動作している環境のロケールを参照する方法を記事にします。
ロケールの参照
今回は以下の2つの関数を利用してみます。
Application.systemLanguage
OSで選択している言語を取得します。
これを使用してユーザーのシステム言語に基づいたローカリゼーションを自動的に選択したりできます。
docs.unity3d.com
CultureInfo.CurrentUICulture
リソースマネージャーによって使用されている CultureInfo オブジェクトを取得します。
CultureInfo はロケールに関する情報を提供します。
learn.microsoft.com
CultureInfo はRFC 4646 に基づいて、ロケールごとに一意の名前を指定します。
名前は言語に関連付けられた ISO639 の2文字または3文字の小文字カルチャコードと、国または地域に関連付けられた ISO3166 の2文字の大文字サブカルチャコードの組み合わせです。
例えば日本語(日本)は ja-JP、英語(米国)は en-US などです。
learn.microsoft.com
.NET Framework および .NET Core アプリでは CurrentCulture プロパティはスレッドごとの設定であり、現在のスレッドのロケールと UI ロケールのみを反映します。
一方でUWPアプリでは CurrentCulture プロパティは Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages コレクションの最初の値にマップされます。
learn.microsoft.com
サンプルコード
以下のサンプルコードを作成しました。
・LocaleChecker.cs
using System.Globalization; using UnityEngine; public class LocaleChecker : MonoBehaviour { async void Start() { Debug.Log($"Application.systemLanguage: {Application.systemLanguage}"); Debug.Log($"CultureInfo.CurrentUICulture: {CultureInfo.CurrentUICulture}"); } }
UnityEditor 環境で実行するとそれぞれ以下の値が取得できました。
Application.systemLanguage: Japanese CultureInfo.CurrentUICulture: ja-JP
一方で UWP アプリ上で本スクリプトを使って値をチェックすると、日本語環境でも以下のように CurrentUICulture で ja-JP でない値が取得できることがありました。
Application.systemLanguage: Japanese CultureInfo.CurrentUICulture: en-GB