何时使用CultureInfo.GetCultureInfo(String)或CultureInfo.CreateSpecificCulture(String)

时间:2009-06-12 13:53:39

标签: .net internationalization

我什么时候应该调用CultureInfo。CreateSpecificCulture(String)而不是CultureInfo。GetCultureInfo(String)。 MSDN文档不是很清楚。

还有一种方法可以更便宜地检查文化的名称是否有效?

认为如果你将“en”而不是“en-GB”传递给CultureInfo.CreateSpecificCulture(String),你会收到一个错误,但是CultureInfo.GetCultureInfo(String)并不介意。例如。如果您只传递一种语言,CultureInfo.GetCultureInfo(String)可以应对。 但是我仍然不清楚这一点。

2 个答案:

答案 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");在这里工作正常。它尤其旨在为中立者提供“特定的”文化。