FxCop CA1305:CurrentCulture与CurrentUICulture

时间:2011-07-22 20:43:09

标签: c# cultureinfo string-formatting currentculture currentuiculture

所以,我有一些用于本地化的资源文件。它们是可以格式化的字符串。

例如:

MyResource.resx
 Title: "MyApp - Ver: {0}"

然后通过这样做返回它:

public String Title
{
    get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); }
}

我理解CurrentUICulture和CurrentCulture之间的区别,但FxCop告诉我改为使用CurrentCulture吗?

3 个答案:

答案 0 :(得分:7)

在某种程度上,FxCop是对的:在这种情况下你不应该使用CurrentUICulture。正如其他人已经说过的那样,CurrentCulture用于区域设置感知格式,而CurrentUICulture用于从资源中读取可翻译字符串。
你在这里做的是格式化数字,因此FxCop抱怨你使用了不正确的CultureInfo。不幸的是,FxCop没有告诉你的是,你实际上应该使用CultureInfo.InvariantCulture。为什么?因为版本号不依赖于Locale。你总会看到像1.9这样的东西,而不是1,9。因此,InvariantCulture是要走的路 Microsoft甚至提供了特定的类来存储版本信息 - 奇怪的是它的名称是Version(AFAIR它在System命名空间中)。当你执行ToString()时,这将始终显示我之前提到的版本号。它的构造函数在实例化时也需要Locale-invariant版本字符串。

答案 1 :(得分:5)

String.Format通常用于数字或日期格式设置,它基于CurrentCulture而不是CurrentUICulture

答案 2 :(得分:3)

另一件事是CurrentUICulture可以是一种中立文化,而CurrentCulture始终是一种特定的文化。

XXXFormatInfo类型不适用于中性文化,并会引发NotSupportedException例外。