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

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

它们之间的区别是什么?

什么时候用,为什么用?

85777 次浏览

CurrentCulture是系统默认用户语言环境的. net表示。它控制默认的数字和日期格式等。

CurrentUICulture指的是Windows 2000中引入的默认用户界面语言。这主要是关于应用的UI本地化/翻译部分。

无论系统配置为什么区域选项,都将是. net应用程序中的“Current”值。

通常它们都是一样的。但在我的系统上,它们将是不同的:我更喜欢数字和日期的德语格式,因此CurrentCulture将是德语,但我也更喜欢所有的应用程序都是英语,因此CurrentUICulture将是英语。

有一篇关于这个主题的好文章:整理一下:为什么我们同时拥有当前文化和当前文化

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

(date, currency, double).tostring = CurrentCulture


resource.fr-CA.resx file = currentUICulture

差异:

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

相似:

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

除了其他用户的解释之外,还有一个很好的方法可以让你有所不同,这也是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文件必须是俄文的(如果有翻译的话)。

值得注意的是,CurrentUICulture支持非特定国家的地区,如'en'(中性文化),而CurrentCulture只支持特定国家的地区,如'en- gb '。将CurrentCulture设置为中性区域性将抛出ArgumentException

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