我正在编写一个WPF应用程序,并且在文化方面遇到了一些困难。
我想知道当没有显式设置值时,.NET应用程序在哪里获取CurrentThread.CurrentCulture的值。它不是来自Windows文化信息,因为我已将其从en-US更改为en-GB,而未在运行时注意到应用程序中的任何更改。
请帮忙!
标记
答案 0 :(得分:7)
请参阅
CultureInfo.CurrentCulture
属性,了解如何确定线程的默认文化,以及用户如何为其计算机设置文化信息。
如何确定线程的文化
当线程启动时,其文化最初确定如下:
通过检索执行该线程的应用程序域中
DefaultThreadCurrentCulture
属性指定的区域性,如果属性值不是null
。通过调用Windows
GetUserDefaultLocaleName
函数。请注意,如果您设置的特定区域性与系统安装的区域性或用户的首选区域性不同,并且您的应用程序启动多个线程,那么这些线程的当前区域性将是{{返回的区域性)。 1}}函数,除非您将文化分配给执行该线程的应用程序域中的
GetUserDefaultLocaleName
属性。有关如何确定线程文化的更多信息,请参阅
DefaultThreadCurrentCulture
主题中的“文化和主题”部分。
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。
答案 1 :(得分:0)
如果未指定特定文化或使用空字符串而不是文化名称,则使用InvariantCulture
。
它与英语有关,但与任何国家/地区无关。