我正在编写一个 WPF 应用程序,并且在文化方面遇到了一些困难。
我想知道当没有明确设置值时,.NET 应用程序在哪里获取 CurrentThread.CurrentCulture 的值。它不是来自 Windows 文化信息,因为我已将其从 en-US 更改为 en-GB,而在运行时没有注意到应用程序的任何变化。
请帮忙!
标记
来自精美手册:
请参阅该
CultureInfo.CurrentCulture
属性以了解如何确定线程的默认文化,以及用户如何为其计算机设置文化信息。
如何确定线程的文化
当一个线程启动时,它的文化最初确定如下:
DefaultThreadCurrentCulture
如果属性值不是 ,则通过检索由执行线程的应用程序域中的属性指定的区域性null
。通过调用 Windows
GetUserDefaultLocaleName
函数。请注意,如果您设置了不同于系统安装的区域性或用户首选区域性的特定区域性,并且您的应用程序启动了多个线程,则这些线程的当前区域性将是
GetUserDefaultLocaleName
函数返回的区域性,除非您指定DefaultThreadCurrentCulture
线程正在执行的应用程序域中属性的文化。有关如何确定线程区域性的详细信息,请参阅本主题中的“区域性和线程”部分
CultureInfo
。
文化与主题
当一个新的应用程序线程启动时,它的当前文化和当前 UI 文化由当前系统文化定义,而不是由当前线程文化定义。以下示例说明了差异。它将应用程序线程的当前文化和当前 UI 文化设置为法语(法国)文化 (fr-FR)。如果当前文化已经是 fr-FR,则该示例将其设置为英语(美国)文化 (en-US)。它将三个随机数显示为货币值,然后创建一个新线程,该线程又将另外三个随机数显示为货币值。但正如示例的输出所示,与主应用程序线程的输出不同,新线程显示的货币值不反映法语(法国)文化的格式约定。
请注意,它表示新应用程序线程何时启动。所以,鉴于你说:
它不是来自 Windows 文化信息,因为我已将其从 en-US 更改为 en-GB,而在运行时没有注意到应用程序的任何变化。
您可能想查看此答案。
当未指定特定文化或使用空字符串而不是文化名称时,InvariantCulture
使用。
它与英语相关,但与任何国家/地区无关。