【问题标题】:Where does the default culture get set in a .NET application.NET 应用程序中的默认区域性设置在哪里
【发布时间】:2013-07-10 09:39:27
【问题描述】:

我正在编写一个 WPF 应用程序,但在文化方面遇到了一些困难。

我想知道当没有明确设置值时,.NET 应用程序在哪里获取 CurrentThread.CurrentCulture 的值。它不是来自 Windows 文化信息,因为我已将其从 en-US 更改为 en-GB,而在运行时没有注意到应用程序的任何变化。

请帮忙!

标记

【问题讨论】:

标签: c# .net culture


【解决方案1】:

来自the fine manual

查看CultureInfo.CurrentCulture 属性以了解线程的默认文化是如何确定的,以及用户如何为其计算机设置文化信息。

One laborious click later...

如何确定线程的文化

当一个线程启动时,它的文化最初确定如下:

  • 如果属性值不是null,则通过检索由线程正在执行的应用程序域中的DefaultThreadCurrentCulture 属性指定的区域性。

  • 通过调用 Windows GetUserDefaultLocaleName 函数。

请注意,如果您设置了不同于系统安装的文化或用户首选文化的特定文化,并且您的应用程序启动了多个线程,则这些线程的当前文化将是 @987654329 返回的文化@ 函数,除非您在其中执行线程的应用程序域中为 DefaultThreadCurrentCulture 属性分配区域性。

有关如何确定线程文化的更多信息,请参阅CultureInfo 主题中的“文化和线程”部分。

I didn't budget for another click, but clicked anyway.

文化与主题

当一个新的应用程序线程启动时,它的当前文化和当前 UI 文化由当前系统文化定义,而不是由当前线程文化定义。以下示例说明了差异。它将应用程序线程的当前文化和当前 UI 文化设置为法语(法国)文化 (fr-FR)。如果当前文化已经是 fr-FR,则该示例将其设置为英语(美国)文化 (en-US)。它将三个随机数显示为货币值,然后创建一个新线程,该线程又将另外三个随机数显示为货币值。但正如示例的输出所示,与主应用程序线程的输出不同,新线程显示的货币值不反映法语(法国)文化的格式约定。

请注意,它表示新的应用程序线程启动时。所以,鉴于你说:

这不是来自 Windows 文化信息,因为我已将其从 en-US 更改为 en-GB,而在运行时没有注意到应用程序有任何变化。

您可能想查看this answer

【讨论】:

    【解决方案2】:

    当未指定特定文化或使用空字符串代替文化名称时,使用InvariantCulture

    它与英语相关联,但与任何国家/地区无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2012-01-25
      • 2021-04-07
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多