在.NET中,有一个位于System.Globalization
命名空间中的CultureInfo
类。它具有两个类似的属性,均返回CultureInfo
类型的值: CurrentCulture
和CurrentUICulture
。
它们之间有什么区别?
我应该在何时使用哪一个以及为什么?
在.NET中,有一个位于System.Globalization
命名空间中的CultureInfo
类。它具有两个类似的属性,均返回CultureInfo
类型的值: CurrentCulture
和CurrentUICulture
。
它们之间有什么区别?
我应该在何时使用哪一个以及为什么?
CurrentCulture
是系统默认用户区域设置的 .NET 表示形式。它控制默认的数字和日期格式等。
CurrentUICulture
指的是默认用户界面语言,这是在 Windows 2000 中引入的一种设置。这主要涉及您应用程序的 UI 本地化/翻译部分。
无论系统配置了什么区域选项,都将成为您的 .NET 应用程序中的“Current”值。
通常它们两者相同。但在我的系统上,它们将是不同的:我喜欢以德语格式显示我的数字和日期,因此 CurrentCulture
将是德语,但我也喜欢所有应用程序都是英语,所以 CurrentUICulture
将是英语。
有一篇关于此主题的好文章:协调 CurrentCulture 和 CurrentUICulture
D
)可以包含相当多的“语言”: en-US
返回“Friday, April 6, 2018”,而 ru-RU
返回“6 апреля 2018 г.”。 - O. R. Mapper以下是我用来记忆哪个该使用的简单技巧:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
在同行用户提供的良好解释之外,另一个在Web应用程序开发中重要的方面是:
CurrentCulture
表示Web服务器的设置。例如,如果你的ASP.NET Web应用程序托管在德国,CultureInfo.CurrentCulture
的值很可能是 de-DE
。因此,默认的 .ToString()
格式化会使用默认的德语格式化,或者在服务器操作系统上设置为默认值的格式化。
CurrentUICulture
可以从用户代理中捕获,并且可能表示连接到网站的客户端的用户界面文化。例如,如果你从俄罗斯加载该网站,你的本地设置被设置为使用俄语,且你的用户代理将你的区域设置发送到服务器(Opera和IE会自动执行此操作,对于Chrome和FireFox不确定),那么 CurrentUICulture
将表示 ru-RU
。这将导致通过ResourceManager检索的任何类似本地化字符串的资源,或者在ASP.NET aspx/ascx文件中的本地化表达式都是俄语(如果有可用的翻译)。
区别:
CurrentCulture
用于日期和货币格式化,而 CurrentUICulture
用于语言/翻译。它将由 ResourceManager
按文化查找资源。CurrentCulture
类的命名空间在 System.Globalization
中,而 CurrentUICulture
来自 System.Threading
。CurrentCulture
在会话中跨不同请求保留,而 CurrentUICulture
需要在每个请求中设置。相似之处:
它们都是 System.Globalization.CultureInfo
实例。
值得注意的是,CurrentUICulture
支持非特定国家/地区的语言环境,比如 'en'(中性文化),而 CurrentCulture
仅支持特定国家/地区的语言环境,比如 'en-GB'。将 CurrentCulture
设置为中性文化将会抛出一个 ArgumentException
异常。
我认为这是因为日期和货币等格式更与国家本身相关联,但所显示的语言在不同国家之间通常可以互换。
CurrentUICulture
是否只设计用于中性文化。您可以成功地使用CurrentUICulture
分配特定的文化,如果您在使用相同语言的某些国家的本地化方面存在差异,则这是有意义的。 - Ivaylo Slavov
CurrentCulture
是'en-GB',但CurrentUICulture
是'en-US'。 - Colonel Panic