382

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

它们之间有什么区别?

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

4

5 回答 5

369

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

CurrentUICulture指默认用户界面语言,这是在 Windows 2000 中引入的一种设置。这主要与您的应用程序的 UI 本地化/翻译部分有关。

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

很多时候它们都是一样的。但是在我的系统上它们会有所不同:我更喜欢德语格式的数字和日期,所以CurrentCulture应该是德语,但我也更喜欢我的所有应用程序都是英文的,所以CurrentUICulture应该是英文的。

关于该主题有一篇不错的文章:全部整理:为什么我们同时拥有 CurrentCulture 和 CurrentUICulture

于 2008-11-30T16:35:29.653 回答
111

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture
于 2010-09-02T12:23:48.953 回答
19

除了其他用户所做的很好的解释之外,还有一个很好的方式来做出改变,以及 Web 应用程序开发的一个重要方面如下:

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

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

于 2015-11-26T14:02:33.340 回答
15

差异:

  1. CurrentCulture用于日期和货币的格式,同时 CurrentUICulture与语言/翻译一起使用。它将用于ResourceManager按文化查找资源。
  2. 类的命名空间 CurrentCultureSystem.Globalizationwhile CurrentUICulture来自System.Threading.
  3. CurrentCulture在会话中的不同请求中持续存在,同时CurrentUICulture需要为每个请求设置。

喜欢:

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

于 2015-11-26T13:18:06.780 回答
12

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

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

于 2016-05-12T13:52:19.330 回答