默认 Culture 和 UICulture 是如何确定的?

Posted

技术标签:

【中文标题】默认 Culture 和 UICulture 是如何确定的?【英文标题】:How is the default Culture and UICulture determined? 【发布时间】:2017-02-08 13:58:28 【问题描述】:

InitializeCulture() 方法可以被覆盖,您可以轻松选择自己的Page.CulturePage.UICulture。您还可以在Web.config 中添加全球化部分或在您的 BasePage 中设置文化。但是这些属性的默认值是如何确定和准确设置的呢? UICulture 是否取自浏览器请求的接受标头?文化是从服务器获取的吗?

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

【问题讨论】:

你的意思是:IIS管理器->选择你的网站->选择“.NET全球化”设置,选择文化和UI文化。 如果这是唯一考虑的事情,那么是的,这就是我要找的。但是,如果还考虑到用户的浏览器设置等其他因素,我很想知道哪个设置胜过哪个设置等。 在您指向 Page.Culture 的链接中,它在备注下方显示:“您还可以将值设置为 auto,这将自动检测浏览器的首选语言并进行设置” 【参考方案1】:

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

UI 文化指定应用程序支持用户输入和输出所需的资源,默认情况下与操作系统文化相同。

至于Culture,它又是一个正在运行的线程的属性,但这里的默认值以更复杂的方式确定,解释here。一个简短的总结:

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

【讨论】:

以上是关于默认 Culture 和 UICulture 是如何确定的?的主要内容,如果未能解决你的问题,请参考以下文章

Page.UICulture -- 如何检索两个字母的 UICulture 代码?

从 c# 检测操作系统语言

PowerShell 多条命令的变化范围 - UICulture

完全更改当前 PowerShell 会话的语言(包括文化)

PowerShell UICulture 与 Windows 设置

.NET6之MiniAPI:本地化