我想從Windows獲取當前系統語言。我發現成千上萬的答案,如Get current language in CultureInfo與建議使用System.Globalization和CultureInfo或Thread.CurrentThread ...但解決方案不起作用。從CultureInfo獲取當前系統語言給出錯誤結果
我測試了幾乎所有的解決方案,在我的Windows 7和我的Windows 10上,我總是得到:「en-US」。
這裏從我的Windows 7設置的屏幕截圖:Region and Language Settings from my 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 \ [Any Folder] \ Control Panel \ International中查看了我的註冊表,並且所有語言都設置正確LocaleName = de-DE。
看起來你沒有足夠努力。你在混合當前的文化和系統文化。可能的重複[在C#中獲取操作系統語言](http://stackoverflow.com/questions/5710127/get-operating-system-language-in-c-sharp) –
+ T.S。我測試了「CultureInfo.InstalledUICulture.ToString();」也是,我仍然是「en-US」。並且確定我在一分鐘前再次測試過。我知道這個主題有很多帖子,但沒有人與wrang語言有同樣的問題。 – Darkproduct