【问题标题】:C# CultureInfo.CurrentCulture says en_US but my Windows settings are set to South AfricaC# CultureInfo.CurrentCulture 说 en_US 但我的 Windows 设置设置为南非
【发布时间】:2014-08-11 19:50:37
【问题描述】:

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

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

【问题讨论】:

  • 您是否也更改了系统区域设置(区域 -> 管理选项卡 -> 非 unicode 程序的语言)?
  • @MarcelN。我也将其设置为“英语(南非)”,文化信息仍然显示“en-US”
  • 您是在更改“区域和语言”的“格式”选项卡下的“格式:”下拉菜单,还是“位置”选项卡下的“当前位置:”下拉菜单,或者两个都?警告:我使用的是 Win7,所以问题可能不适用。
  • @dbc 哦,看起来确实还有一个“格式”选项卡。我将其设置为“英语(南非)”并重新启动了我的应用程序,但 CultureInfo 仍然是“en-US”。 :/ 我想知道我是否希望我的用户必须经历所有这些,或者我是否应该为他们提供一个应用内区域选择器。
  • 我对 VS2008 进行了一些实验,它看起来像 1)CultureInfo.CurrentCulture 由“格式”选项卡定义,2)当我重新运行我的应用程序时,并不总是会更改格式在 Visual Studio 中——可能是因为 Hosting Process 保留了过时的信息?关闭并重新打开解决方案可以解决此问题。从任务管理器中显式终止托管进程也可能会。

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


【解决方案1】:

我想我应该这样回答。

Windows 区分用户的物理位置、所需的本地化(格式)属性和运行语言。例如,说西班牙语的用户可能位于英国,但想要美式英语格式。 CultureInfo.CurrentCulture 指的是Regions 控制面板的"Formats" 选项卡下的设置。 (以上链接之一中显示的用户界面对于 Win8 来说有点过时;请参阅 here 了解 Win8 类似物。)

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

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

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

(注意——我使用的是Win7。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多