当我的应用程序启动时,它将自己的文化设置为CultureInfo.InvariantCulture
,但在某些地方,我想根据用户在Windows中设置的内容使用本地化的数字格式。我怎样才能做到这一点?
System.Globalization.CultureInfo.CurrentCulture
仅返回不再是用户默认的线索文化。
我希望在更改线程或创建新线程之前,比存储线程的默认文化更优雅,只是为了从中读取文化。
也许有一个用于Windows函数GetUserDefaultLocaleName
的内置.Net包装器?
答案 0 :(得分:2)
System.Globalization.CultureInfo
有一个名为UserDefaultCulture
的内部属性,它是Win32 GetUserDefaultLCID()
的等效项,如.NET代码中所述:
// // This is the equivalence of the Win32 GetUserDefaultLCID() // internal static CultureInfo UserDefaultCulture
因此,您可以使用它以这种方式获取用户默认文化:
var property = typeof(System.Globalization.CultureInfo).GetProperty("UserDefaultCulture",
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
var culture = (System.Globalization.CultureInfo)property.GetValue(null);
另外,您可以创建一个新线程并使用其CurrentCulture
属性:
var culture = new System.Threading.Thread(() => { }).CurrentCulture;