3

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

例如:

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

然后我通过这样做返回它:

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

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

4

3 回答 3

7

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

于 2011-07-25T10:30:27.753 回答
5

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

于 2011-07-22T20:48:53.880 回答
4

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

这些XXXFormatInfo类型不适用于中立文化,并且会引发NotSupportedException异常。

于 2011-07-22T22:55:15.927 回答