MRが楽しい

MRやVRについて学習したことを書き残す

Unityでアプリが動作している環境のロケールを参照する

本日は 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