2

Windows から現在のシステム言語を取得したいと考えています。System.Globalization と CultureInfo または Thread.CurrentThread を使用するように提案されたGet current language in CultureInfo のような何千もの回答が見つかりましたが、解決策は機能しません。

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\[Any Folder]\Control Panel\International のレジストリも確認したことを忘れていましたが、すべての言語が適切に LocaleName = de-DE に設定されています。

4

1 に答える 1

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();
于 2017-03-08T14:04:35.727 に答える