2017-03-08 71 views
0

我想從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。

+0

看起來你沒有足夠努力。你在混合當前的文化和系統文化。可能的重複[在C#中獲取操作系統語言](http://stackoverflow.com/questions/5710127/get-operating-system-language-in-c-sharp) –

+0

+ T.S。我測試了「CultureInfo.InstalledUICulture.ToString();」也是,我仍然是「en-US」。並且確定我在一分鐘前再次測試過。我知道這個主題有很多帖子,但沒有人與wrang語言有同樣的問題。 – Darkproduct

回答

0

我用這個post in the unity3D forum解決了我的問題。對不起,我沒有指出我使用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();