默认的Culture和UICulture是怎么确定的?

How is the default Culture and UICulture determined?

InitializeCulture() method can be overridden and you can easily choose your own Page.Culture and Page.UICulture。您还可以在 Web.config 中添加全球化部分或在您的 BasePage 中设置文化。但是这些属性的默认值是如何确定和准确设置的呢? UICulture 是否取自浏览器请求的accept-header?文化是从服务器上拿的吗?

请注意,我不是在询问 difference between these two properties,而是在何处或何时设置默认值(如果我未在我的应用程序中的任何位置设置默认值)。那么我的应用程序之外的哪些浏览器、用户、服务器...设置会影响该值?

UICulturePage.CurrentThread.CurrentUICulture的快捷方式,根据docs:

The UI culture specifies the resources an application needs to support user input and output, and by default is the same as the operating system culture.

至于Culture,它又是运行线程的属性,但这里的默认值是用更复杂的方式确定的here。简短摘要:

  1. 检查应用程序域中的 DefaultThreadCurrentCulture 属性
  2. 如果我们在 .Net 4.6 或更高版本中并且当前线程是其他线程调用的任务,请尝试获取调用者的文化
  3. 通过调用 Windows GetUserDefaultLocaleName 函数(因此再次 OS)