我在 Windows 8.1 控制面板中将我的区域/位置更改为南非。当我从 Visual Studio 2013 启动我的应用程序并获取 CultureInfo.CurrentUICulture 时,它仍然显示“en-US”。
public CultureInfo getCurrentCulture() {
if (CultureInfo.DefaultThreadCurrentUICulture != null) {
return CultureInfo.DefaulThreadCurrentUICulture;
} else {
return CultureInfo.CurrentUICulture;
}
}
我还尝试使用 CultureInfo.CurrentCulture 而不是 CurrentUICulture,但它们的行为方式相同。如何通过代码确定用户的真实语言环境?还是我通过 Windows 设置错误地设置了区域?
我的应用格式化货币字符串等,我需要确保它使用正确的货币符号。南非对我来说是一个很好的用例,因为他们仍然使用英语,但具有不同的区域数字格式。
最佳答案
我想我应该回答这个问题。
Windows 区分用户的物理位置、所需的本地化(格式)属性和运行语言。例如,讲西类牙语的用户可能位于英国,但想要美式英语格式。 CultureInfo.CurrentCulture
引用"Formats"下的设置Regions 的选项卡控制面板。 (以上链接之一中显示的用户界面对于 Win8 来说有点过时;请参阅 here 以了解 Win8 类似物。)
本文提供了有关各种文化属性以及如何在用户界面中设置它们的更多信息:YACVCP (Yet another CurrentCulture vs. CurrentUICulture post)
因此,要测试南非货币字符串等,您必须将“格式”下拉菜单更改为“英语(南非)”并重新运行。
另外,通过实验,我发现当我重新运行我的应用程序时,Visual Studio 2008(我正在使用的)并不总能识别区域设置的变化。这可能是 Hosting Process 的某种错误.重新启动并重新运行我的应用程序通常似乎可以解决问题。关闭并重新打开 Visual Studio 总是如此。
(注意——我使用的是 Win7。)
关于C# CultureInfo.CurrentCulture 说 en_US 但我的 Windows 设置设置为南非,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251224/