Как я могу получить информацию о локали в Unity C #? - PullRequest
0 голосов
/ 27 мая 2019

Я занимаюсь разработкой проекта с Unity 2019.2b, ожидается, что он будет работать на всех платформах (android, ios, windows, macos), я пытаюсь получить информацию о локали устройства (например, en-us, en-au, en -bz) но все что я могу найти это определение Application.systemLanguage. Даже если я решу использовать эту информацию, мне все равно понадобится информация о регионе. Есть ли какой-нибудь пример или способ получить информацию о локали в Unity или получить информацию о регионе устройства? (Если решение только для информации о регионе; я не хочу использовать местоположение устройства или не хочу использовать IP-адрес пользователя, я хочу получить его из настроек)

Я пытался получить информацию о локали или, по крайней мере, регионе устройства с помощью определений RegionInfo, CultureInfo, System.Threading.Thread.CurrentThread.CurrentUICulture и System.Threading.Thread.CurrentThread.CurrentCulture, но это не сработало.

string regionName = System.Globalization.RegionInfo.CurrentRegion.Name;
string cultureName = System.Globalization.CultureInfo.CurrentCulture.Name;
string cname = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
string uiname = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;

В зависимости от платформы (ios, android, windows, macos) иногда результат получается как InvariantCulture, иногда всегда en-US, даже если локаль устройства не en-US.

1 Ответ

0 голосов
/ 27 мая 2019

Проблема исходит от Mono, используется Unity.

Я нашел несколько решений в этой ветке форума .

Если вы работаете с Windows, обходной путь может использовать PInvoke:

 [System.Runtime.InteropServices.DllImport("KERNEL32.DLL")]
 private static extern int GetSystemDefaultLCID();

А затем проверьте глобальную культуру следующим образом:

var currentCulture = new CultureInfo(GetSystemDefaultLCID());

Это может быть использовано для установки культуры:

 Thread.CurrentThread.CurrentCulture = new CultureInfo(GetSystemDefaultLCID());
 Thread.CurrentThread.CurrentUICulture = new CultureInfo(GetSystemDefaultLCID());
...