Получить текущий язык системы от CultureInfo дает неправильные результаты

Я хотел бы получить текущий язык системы из Windows. Я нашел тысячи ответов, таких как Получить текущий язык в CultureInfo, с предложением использовать System.Globalization и CultureInfo или Thread.CurrentThread... но решения не работают.

Я протестировал почти все решения на моей Windows 7, а также на моей Windows 10, и я всегда получаю: "en-US".

Вот скриншот из моих настроек Windows 7: настройки региона и языка из моей Windows 7.

Я нашел рабочее решение, но я думаю, что System.Globalization является лучшим подходом, и я также хочу, чтобы в качестве результата использовалось "de-DE", а не "de-de".

 [DllImport("kernel32.dll")]
 static extern int GetUserGeoID(int geoId);
 [DllImport("kernel32.dll")]
 static extern int GetGeoInfo(int geoid, int GeoType, StringBuilder lpGeoData, int cchData, int langid);
 [DllImport("kernel32.dll")]
 static extern int GetUserDefaultLCID();

 private const int GEOCLASS_NATION = 16;
 //SYSGEOTYPE
 private const int GEO_NATION = 1;
 private const int GEO_LATITUDE = 2;
 private const int GEO_LONGITUDE = 3;
 private const int GEO_ISO2 = 4;
 private const int GEO_ISO3 = 5;
 private const int GEO_RFC1766 = 6;
 private const int GEO_LCID = 7;
 private const int GEO_FRIENDLYNAME = 8;
 private const int GEO_OFFICIALNAME = 9;
 private const int GEO_TIMEZONES = 10;
 private const int GEO_OFFICIALLANGUAGES = 11;

 public string language;

 // ***********************************************************

 // Code 
 int geoId = GetUserGeoID(GEOCLASS_NATION);
 int lcid = GetUserDefaultLCID();
 StringBuilder bldr = new StringBuilder(50);
 GetGeoInfo(geoId, GEO_RFC1766, bldr, bldr.Capacity, lcid);

 Debug.Log(lcid);

 language = bldr.ToString();

Кто-нибудь знает, что я должен сделать, чтобы заставить CultureInfo работать?

Изменить: я забыл упомянуть, я также проверил мой реестр в HKEY_USERS\[Любая папка]\ Панель управления \ Международный и все языки установлены правильно LocaleName = de-DE.

1 ответ

Решение

Я решил свой вопрос с этим постом на форуме unity3D. Извините, я не указал, что использую Unity, но я не знал, что программа может иметь такой эффект.

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
static extern int GetUserDefaultLCID();

//*************************************************************************

CultureInfo culture = CultureInfo.GetCultureInfo(GetUserDefaultLCID());
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

language = culture.ToString();
Другие вопросы по тегам