.NET CultureInfo ru和ru-RU之间的区别

时间:2013-10-15 10:02:16

标签: c# .net cultureinfo

我在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");

  3. 然后我突然发现文化(1)与文化(2)不同,但两者都是俄语。

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

    修改

    @Tim Schmelter

            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“分开?

2 个答案:

答案 0 :(得分:7)

这是因为CultureInfo.GetCultureInfo("ru")返回 NeutralCulture ,而CultureInfo.GetCultureInfo("ru-RU")返回 SpecificCulture 。 实际上,SpecificCulture来自NeutralCulture。所以asnwer不是,他们不一样,他们有不同的LCID。

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

关于CultureInfo建议阅读this MSDN article

答案 1 :(得分:5)

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

比较两种文化的网页显示ruru-RU提供的设置子集。

除此之外,尝试将中立文化设定为线索的当前文化会导致异常(demo #2 on Mono, does not crash on .NET 4.5)。