我什么时候应该调用CultureInfo。CreateSpecificCulture(String)而不是CultureInfo。GetCultureInfo(String)。 MSDN文档不是很清楚。
还有一种方法可以更便宜地检查文化的名称是否有效?
我认为如果你将“en”而不是“en-GB”传递给CultureInfo.CreateSpecificCulture(String),你会收到一个错误,但是CultureInfo.GetCultureInfo(String)并不介意。例如。如果您只传递一种语言,CultureInfo.GetCultureInfo(String)可以应对。 但是我仍然不清楚这一点。
答案 0 :(得分:25)
文化分为三组:不变培养,中性培养和特定培养。文化en
是一种中性文化,而文化en-US
是一种特定的文化。
GetCultureInfo
会为您提供您所要求的文化,因此,如果您要求中立文化,您也会获得像en
这样的中立文化。
CreateSpecificCulture
将根据中立文化创建特定文化,因此,如果您致电CreateSpecificCulture("en")
,则CultureInfo
返回的是en-US
文化。我不确定中性文化是如何映射到特定文化的,但BCL或Windows中必须包含一些包含这些映射的表,并确定返回的是en-US
而不是en-GB
。将特定文化指定为CreateSpecificCulture
的参数将为您提供与CultureInfo
一样的特定GetCultureInfo
。
但是,特定文化创造了一个令人惊讶的特征:
如果此方法返回的特定区域性的区域性标识符与当前Windows区域性的区域性标识符匹配,则此方法将创建使用Windows区域性覆盖的CultureInfo对象。覆盖包括DateTimeFormat属性返回的DateTimeFormatInfo对象的属性的用户设置以及NumberFormat属性返回的NumberFormatInfo对象。
这意味着如果CreateSpecificCulture
返回的特定文化与用户在Windows中的区域和语言控制面板中选择的文化相匹配,则会包含对该文化的任何用户自定义在CultureInfo
返回。例如。用户可以更改数字中使用的长日期模式或小数分隔符。考虑这一点的另一种方法是,当CreateSpecificCulture
返回与CurrentCulture
名称匹配的文化时,它将实际返回此文化,包括任何用户自定义。
据我所知,GetCultureInfo
没有此属性,并且将始终返回未经修改的CultureInfo
。
要检查文化是否有效,我会使用GetCultureInfo
。
答案 1 :(得分:14)
这取决于你需要什么样的文化。短名称(“en”,“fr”等)用于中性文化,足以用于语言特定的资源管理。但是对于数字和日期格式,您需要特定的文化,例如“en-GB”。
CultureInfo.CreateSpecificCulture("en");
在这里工作正常。它尤其旨在为中立者提供“特定的”文化。