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

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

他们有什么区别?

我应该使用哪一个,为什么?

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 。 因此, IFormattabletypes的默认.ToString()格式将使用默认的德语格式或在服务器操作系统上设置的默认格式。

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

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

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

区别:

  1. CurrentCulture用于格式化date和货币,而CurrentUICulture用语言/翻译。 它将被ResourceManager用于通过文化查找资源。
  2. CurrentCulture类的名字空间在System.GlobalizationCurrentUICulture来自System.Threading
  3. CurrentCulture持续在会话中的不同请求,而CurrentUICulture需要设置每个请求。

神似:

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