在.NET中,CultureInfo
命名空间中有System.Globalization
个类。它有两个类似的属性,都返回CultureInfo
类型的值:CurrentCulture
和CurrentUICulture
。
他们之间有什么区别?
我应该在何时以及为何使用哪一个?
答案 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)
<强>差异:强>
CurrentCulture
用于格式化日期和货币,而CurrentUICulture
用于语言/翻译。 ResourceManager
将使用它来按文化查找资源。CurrentCulture
类的命名空间位于System.Globalization
,而CurrentUICulture
来自System.Threading
。CurrentCulture
会在会话中的不同请求中保留,而CurrentUICulture
需要为每个请求设置。<强>象形:强>
它们都是System.Globalization.CultureInfo
个实例。
答案 4 :(得分:7)
值得注意的是,CurrentUICulture
支持非国家/地区特定区域设置,例如&#39; en&#39; (中性文化)而CurrentCulture
仅支持国家特定的语言环境,例如&#39; en-GB&#39;。将CurrentCulture
设置为中性文化会引发ArgumentException
。
我认为这是因为日期和货币等格式与国家本身的联系更紧密,但所显示的语言在国家之间通常可以互换。