C#CultureInfo.CurrentCulture说en_US但我的Windows设置设置为南非

时间:2014-08-11 19:50:37

标签: c# internationalization .net-4.5 windows-8.1 cultureinfo

我将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设置错误地设置了区域?

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

1 个答案:

答案 0 :(得分:7)

我想我应该回答这个问题。

Windows区分用户的物理位置,所需的本地化(格式化)属性和运行语言。例如,讲西班牙语的用户可能位于英国,但希望使用美式英语格式。 CultureInfo.CurrentCulture指的是"Formats"控制台的Regions标签下的设置。 (上面其中一个链接中显示的用户界面对于Win8来说有点过时;有关Win8模拟的信息,请参阅here。)

本文提供了有关各种文化属性及其在用户界面中的设置方式的更多信息:YACVCP (Yet another CurrentCulture vs. CurrentUICulture post)

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

此外,通过实验,我发现当我重新运行我的应用程序时,Visual Studio 2008(我正在使用的)并不总是在区域设置中进行更改。这可能是Hosting Process的某种错误。重新启动并重新运行我的应用程序通常似乎可以解决问题。关闭并重新打开Visual Studio总是这样做。

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