【问题标题】:FxCop CA1305: CurrentCulture vs. CurrentUICultureFxCop CA1305:CurrentCulture 与 CurrentUICulture
【发布时间】:2011-07-22 20:43:09
【问题描述】:

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

例如:

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

然后我这样做返回它:

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

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

【问题讨论】:

    标签: c# cultureinfo string-formatting currentculture currentuiculture


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 1970-01-01
          • 1970-01-01
          • 2010-09-24
          相关资源
          最近更新 更多