.NET 中 CultureInfo 的 CurrentCulture 和 CurrentUICulture 属性有什么区别?
-
11-07-2019 - |
题
在.NET中有 CultureInfo
类在 System.Globalization
命名空间。它有两个相似的属性,都返回 CultureInfo
类型: CurrentCulture
和 CurrentUICulture
.
它们之间有什么区别?
我应该何时使用哪一个以及为什么?
解决方案
CurrentCulture
是系统的默认用户区域设置的.NET表示。这控制默认号码和日期格式等。
CurrentUICulture
指的是默认的用户界面语言,Windows 2000中引入了此设置主要是关于您的应用程序的UI本地化/翻译部分。
不管区域选项的系统被配置为具有将在您的NET应用程序的“当前”值。
很多时候它们都是相同的。但我的系统上,他们将是不同的。我喜欢我的数字和日期在德国的格式,所以CurrentCulture
将是德国人,但我也喜欢学英语的所有应用程序,所以CurrentUICulture
将英语
有是关于这一主题的好文章:整理这一切了:为什么我们兼得的CurrentCulture和的CurrentUICulture
其他提示
这是一个简单的技巧我使用记住要使用哪一个:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
差异:
CurrentCulture
用于格式化日期和货币CurrentUICulture
与语言/翻译一起使用。它将被使用ResourceManager
按文化查找资源。- 的命名空间
CurrentCulture
班级在System.Globalization
尽管CurrentUICulture
来自System.Threading
. CurrentCulture
在会话中的不同请求中持续存在CurrentUICulture
需要根据每个请求进行设置。
相似度:
他们都是 System.Globalization.CultureInfo
实例。
除了其他用户所做的精彩解释之外,还有一个产生影响的好方法,这也是 Web 应用程序开发中的一个重要方面:
CurrentCulture
代表网络服务器的设置。例如,如果您的 ASP.NET Web 应用程序托管在德国,则值CutlureInfo.CurrentCulture
最有可能的是de-DE
. 。因此,默认的.ToString()
格式化为IFormattable
类型将使用默认的德语格式,或在服务器操作系统上设置的默认格式。CurrentUICulture
可以从用户代理捕获,并且可以代表连接到网站的客户端的用户界面文化。例如,如果您从俄罗斯加载该网站,则您的本地设置设置为使用俄语,并且您的用户代理将您的区域设置发送到服务器(Opera 和 IE 自动执行此操作,Chrome 和 FireFox 不确定),CurrenUICulture
将代表ru-RU
. 。这将导致任何资源(例如通过 ResourceManager 检索的本地化字符串或 ASP.NET aspx/ascx 文件中的本地化表达式)为俄语(如果有翻译)。
值得注意的是,CurrentUICulture
支持非国家特定区域设置如“en”(中性培养物)而CurrentCulture
仅支持国家特定区域设置如“en-GB”。设置CurrentCulture
到中性培养将引发ArgumentException
。
我认为这是因为格式,如日期和货币更密切相关国家本身,但显示的语言往往是国家之间互换。