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

Ian*_*ose 38 .net internationalization

我应该什么时候打电话给CultureInfo.CreateSpecificCulture(String)而不是CultureInfo.GetCultureInfo(String).MSDN文档不是很清楚.

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

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

Mar*_*age 27

文化分为三组:不变文化,中性文化和特定文化.文化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.

  • 对 Henk 没有任何影响,但这是一个更好的答案!感谢您指出这两种方法之间一些非常有趣的差异。 (2认同)

Hen*_*man 14

这取决于你需要什么样的文化.短名称("en","fr"等)用于中性文化,足以用于语言特定的资源管理.但是对于数字和日期格式,您需要特定的文化,例如"en-GB".

CultureInfo.CreateSpecificCulture("en");在这里工作得很好.它尤其旨在为中立者提供"特定"的文化.