默认区域性在.NET应用程序中的设置位置
本文关键字:设置 位置 应用程序 区域性 NET 默认 | 更新日期: 2023-09-27 18:21:43
我正在编写一个WPF应用程序,在文化方面遇到了一些困难。
我想知道当没有显式设置CurrentThread.CurrentCulture的值时,.NET应用程序在哪里获取该值。这不是来自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
。
它与英语有关,但与任何国家/地区无关。