在.NET中CultureInfo的CurrentCulture和CurrentUICulture属性有什么区别?
在.NET中, System.Globalization
命名空间中有CultureInfo
类。 它有两个相似的属性,都返回CultureInfo
types的值: CurrentCulture
和CurrentUICulture
。
他们有什么区别?
我应该使用哪一个,为什么?
CurrentCulture
是系统的默认用户区域设置的.NET表示forms。 这控制了默认的数字和date格式等。
CurrentUICulture
指的是默认的用户界面语言,这是Windows 2000中引入的一种设置。这主要是关于应用程序的UI本地化/翻译部分。
无论系统configuration的区域选项是什么,都将是.NET应用程序中的“当前”值。
通常他们都是一样的。 但是在我的系统中,他们会有所不同:我更喜欢德文格式的数字和date,所以CurrentCulture
会是德语,但我也更喜欢我所有的英文应用程序,所以CurrentUICulture
会是英文。
关于这个话题有一篇不错的文章: sorting:为什么我们同时拥有CurrentCulture和CurrentUICulture
这是我用来记住使用哪一个简单的技巧:
(date, currency, double).tostring = CurrentCulture resource.fr-CA.resx file = currentUICulture
一个很好的方式,除了由用户做的很好的解释,以及在Web应用程序开发中的一个重要方面有所作为以下是:
-
CurrentCulture
表示Web服务器的设置。 例如,如果您的ASP.NET Web应用程序在德国托pipe,则CutlureInfo.CurrentCulture
的值很可能是de-DE
。 因此,IFormattable
types的默认.ToString()
格式将使用默认的德语格式或在服务器操作系统上设置的默认格式。 -
CurrentUICulture
可以从用户代理中捕获,并可以代表连接到网站的客户端的用户界面文化。 例如,如果您从俄罗斯加载该网站,则您的本地设置设置为使用俄语,并且您的用户代理将您的语言环境设置发送到服务器(Opera和IE会自动执行此操作,不确定适用于Chrome和FireFox),CurrenUICulture
将代表ru-RU
。 这将导致像通过ResourceManager或ASP.NET aspx / ascx文件中的本地化expression式检索本地化string的任何资源在俄罗斯(如果翻译是可用的)。
值得注意的是, CurrentUICulture
支持“en”(中立文化)等非国家特定语言环境,而CurrentCulture
仅支持“en-GB”等国家特定语言环境。 将CurrentCulture
设置为中立文化将抛出ArgumentException
。
我认为这是因为date和货币等格式与国家本身的联系更为密切,但所显示的语言在国家之间通常是可以互换的。
区别:
-
CurrentCulture
用于格式化date和货币,而CurrentUICulture
用语言/翻译。 它将被ResourceManager
用于通过文化查找资源。 -
CurrentCulture
类的名字空间在System.Globalization
而CurrentUICulture
来自System.Threading
。 -
CurrentCulture
持续在会话中的不同请求,而CurrentUICulture
需要设置每个请求。
神似:
他们都是System.Globalization.CultureInfo
实例。