ChatGPT解决这个技术问题 Extra ChatGPT

.NET 中 CultureInfo 的 CurrentCulture 和 CurrentUICulture 属性有什么区别?

在 .NET 中,System.Globalization 命名空间中有 CultureInfo 类。它有两个相似的属性,都返回 CultureInfo 类型的值:CurrentCultureCurrentUICulture

它们之间有什么区别?

我应该在何时以及为什么使用哪一个?

请记住,Microsoft 不会将美国英语和(英国)英语或其他英语的 UI 文化分开。英语没有 MUI,这意味着 CurrentUICulture 在英语机器上将始终为 en-US,无论 CurrentCulture 可以设置为本地化区域设置。
是的。我在英国,发现 CurrentCulture 是“en-GB”,但 CurrentUICulture 是“en-US”。
刚刚发现这篇文章详细解释了这一点:github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture

S
Shog9

CurrentCulture 是系统默认用户区域设置的 .NET 表示形式。这控制默认数字和日期格式等。

CurrentUICulture 指默认用户界面语言,这是在 Windows 2000 中引入的设置。这主要与应用程序的 UI 本地化/翻译部分有关。

无论系统配置为具有何种区域选项,都将是 .NET 应用程序中的“当前”值。

很多时候它们都是一样的。但在我的系统上它们会有所不同:我更喜欢德语格式的数字和日期,所以 CurrentCulture 是德语,但我也更喜欢我的所有应用程序都是英文的,所以 CurrentUICulture 是英文的。

关于该主题有一篇不错的文章:Sorting it all Out: Why we have both CurrentCulture and CurrentUICulture


实际上,这可能是深入解释的一个很好的选择:forums.asp.net/post/1080435.aspx
@Michael12345 感谢您的提示。我已经更新了链接。您链接到的帖子也不错,甚至可能更好。
那么,这些名字很糟糕,因为 CurrentUICulture 真的意味着 CurrentLanguageCulture,而 CurrentCulture 真的意味着 CurrentDataCulture。
@Pxtl:我会选择 CurrentFormattingCulture 而不是 CurrentDataCulture。不过,请注意,这些可能并不像您的名字所暗示的那样明显脱节。例如,我认为长日期格式 (D) 可以包含相当多的“语言”:en-US 返回“Friday, April 6, 2018”,而 ru-RU 返回“6 апреля 2018 г.”。
E
EBarr

这是我用来记住要使用哪一个的简单技巧:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

如果要信任 nicodemus13Colonel Panic 的评论,那么您的技巧的第二部分似乎不应该奏效。
I
Ivaylo Slavov

除了其他用户所做的很好的解释之外,还有一个很好的方式来做出改变,以及 Web 应用程序开发的一个重要方面如下:

CurrentCulture 表示 Web 服务器的设置。例如,如果您的 ASP.NET Web 应用程序托管在德国,那么 CutlureInfo.CurrentCulture 的值很可能是 de-DE。因此,IFormattable 类型的默认 .ToString() 格式将使用默认的德语格式,或者已在服务器操作系统上设置为默认格式的格式。

CurrentUICulture 可以从用户代理中捕获,并且可以代表连接到网站的客户端的用户界面文化。例如,如果您从俄罗斯加载该网站,您的本地设置设置为使用俄语,并且您的用户代理将您的区域设置发送到服务器(Opera 和 IE 会自动执行此操作,Chrome 和 FireFox 不确定),CurrenUICulture将代表 ru-RU。这将导致任何资源(如通过 ResourceManager 检索的本地化字符串或 ASP.NET aspx/ascx 文件中的本地化表达式)为俄语(如果有翻译)。


M
Matas Vaitkevicius

差异:

CurrentCulture 用于格式化日期和货币,而 CurrentUICulture 用于语言/翻译。 ResourceManager 将使用它来按文化查找资源。 CurrentCulture 类的命名空间在 System.Globalization 中,而 CurrentUICulture 来自 System.Threading。 CurrentCulture 在会话中的不同请求中保持不变,而 CurrentUICulture 需要为每个请求设置。

喜欢:

它们都是 System.Globalization.CultureInfo 实例。


S
Sebris87

值得注意的是,CurrentUICulture 支持非特定国家/地区的语言环境,例如“en”(中性文化),而 CurrentCulture 仅支持特定国家/地区的语言环境,例如“en-GB”。将 CurrentCulture 设置为中性文化会抛出 ArgumentException

我认为这是因为日期和货币等格式与国家本身的联系更紧密,但显示的语言通常在国家之间可以互换。


确实是一个很好的观点。不过,我会争论 CurrentUICulture 是否旨在仅用于中性文化。您可以使用 CurrentUICulture 成功分配特定的文化,如果您在使用相同语言的某些国家/地区的本地化方面存在差异,这将是有意义的。