C#CultureInfo.CurrentCulture显示en#u US,但我的Windows设置设置为南非

C#CultureInfo.CurrentCulture显示en#u US,但我的Windows设置设置为南非,c#,internationalization,.net-4.5,windows-8.1,cultureinfo,C#,Internationalization,.net 4.5,Windows 8.1,Cultureinfo,我将Windows 8.1控制面板中的区域/位置更改为南非。当我从Visual Studio 2013启动我的应用程序并获取CultureInfo.CurrentUICulture时,它仍然显示“en US” 我还尝试了CultureInfo.CurrentCulture而不是CurrentUICulture,但它们的行为方式相同。如何通过代码确定用户的真实区域设置?或者我是否通过Windows设置错误地设置了区域 我的应用程序格式化货币字符串等,我需要确保它使用了正确的货币符号。南非对我来说是

我将Windows 8.1控制面板中的区域/位置更改为南非。当我从Visual Studio 2013启动我的应用程序并获取CultureInfo.CurrentUICulture时,它仍然显示“en US”

我还尝试了CultureInfo.CurrentCulture而不是CurrentUICulture,但它们的行为方式相同。如何通过代码确定用户的真实区域设置?或者我是否通过Windows设置错误地设置了区域


我的应用程序格式化货币字符串等,我需要确保它使用了正确的货币符号。南非对我来说是一个很好的使用案例,因为他们仍然使用英语,但只是有不同的区域编号格式

我想我应该回答这个问题

Windows区分用户的物理位置、所需的本地化(格式化)属性和运行语言。例如,说西班牙语的用户可能位于英国,但需要美式英语格式。指控制面板选项卡下的设置。(上面其中一个链接中显示的用户界面对于Win8来说有点过时;有关Win8的模拟,请参阅。)

本文提供了有关各种区域性属性以及如何在用户界面中设置它们的更多信息:

因此,要测试南非货币字符串等,必须将“格式”下拉列表更改为“英语(南非)”并重新运行

另外,通过实验,我发现当我重新运行应用程序时,VisualStudio2008(我正在使用的)并不总是检测到语言环境的变化。这可能是与的某种错误。重新启动并重新运行我的应用程序似乎可以解决这个问题。关闭和重新打开VisualStudio总是这样


(注意——我正在使用Win7。)

您是否也更改了系统区域设置(区域->管理选项卡->非unicode程序的语言)?@MarcelN。我也将其设置为“英语(南非)”,文化信息仍然显示“en-US”,您是在“地区和语言”的“格式”选项卡下更改“格式:”下拉列表,还是在“位置”选项卡下更改“当前位置:”下拉列表,还是两者都更改?警告:我正在使用Win7,所以这个问题可能不适用。@dbc哦,看起来还有一个格式选项卡。我将其设置为“英语(南非)”并重新启动了我的应用程序,但CultureInfo仍然是“en-US”。/我想知道我是否希望我的用户必须经历所有这些,或者我是否应该为他们提供一个应用程序内区域选择器。我在VS2008上做了一些试验,它看起来像1)
CultureInfo。CurrentCulture
由“格式”选项卡定义,2)当我从VisualStudio内部重新运行我的应用程序时,更改格式并不总是被选中——可能是因为它保留了过时的信息?关闭并重新打开解决方案可修复此问题。从任务管理器显式地终止宿主进程可能也会。
public CultureInfo getCurrentCulture() {
    if (CultureInfo.DefaultThreadCurrentUICulture != null) {
        return CultureInfo.DefaulThreadCurrentUICulture;
    } else {
        return CultureInfo.CurrentUICulture;
    }
}