4

我在 CultureInfo 课程中发现了一件有趣的事情。我正在用 ASP.NET 编写一个应用程序,我正在使用Thread.CurrentThread.CurrentCulture它来获取当前选择的语言,并且:

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(alias);

有两个地方我可以在一个地方设置当前线程的文化,如下所示:

  1. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru");

  2. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru-RU");

然后我突然发现文化(1)与文化(2)不同,但它们都是俄罗斯人。

是我做错了什么还是微软喝醉了?

编辑

@蒂姆施梅尔特

        var culture = CultureInfo.GetCultureInfo("ru");
        var culture2 = CultureInfo.GetCultureInfo("ru-RU");
        if (Equals(culture, culture2))
        {
            Console.Write(true);
            return;
        }
        Console.Write(false);

问题是 - “为什么微软将“ru”和“ru-RU”分开?

4

2 回答 2

11

那是因为CultureInfo.GetCultureInfo("ru")返回NeutralCultureCultureInfo.GetCultureInfo("ru-RU")返回SpecificCulture。实际上,SpecificCulture源自NeutralCulture. 所以答案是否定的,它们不一样,并且具有不同的 LCID。

在一般情况下,您应该始终使用 SpecificCulture。

关于CultureInfo建议阅读这篇 MSDN 文章

于 2013-10-15T10:18:22.110 回答
7

ru文化是中性的,这意味着它不能用于格式化和解析。ru-RU另一方面,文化是特定的(演示# 1),因此您可以使用它来格式化和解析数据。

比较两种文化的页面表明,它ru具有由 提供的设置子集ru-RU

除其他外,尝试将中性文化设置为线程的当前文化会导致异常(Mono 上的演示 #2,在 .NET 4.5 上不会崩溃)。

于 2013-10-15T10:18:33.777 回答