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

时间:2008-11-30 16:26:18

标签: .net globalization cultureinfo

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

他们之间有什么区别?

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

5 个答案:

答案 0 :(得分:332)

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

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

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

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

有一篇关于这个主题的好文章:Sorting it all Out: Why we have both CurrentCulture and CurrentUICulture

答案 1 :(得分:105)

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

答案 2 :(得分:12)

除了用户所做的精彩解释之外,还有一个很好的方法,以及Web应用程序开发的一个重要方面如下:

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

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

答案 3 :(得分:10)

<强>差异:

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

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

答案 4 :(得分:7)

值得注意的是,CurrentUICulture支持非国家/地区特定区域设置,例如&#39; en&#39; (中性文化)而CurrentCulture仅支持国家特定的语言环境,例如&#39; en-GB&#39;。将CurrentCulture设置为中性文化会引发ArgumentException

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