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

Mar*_*ris 3 .net c# cultureinfo

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

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(alias);
Run Code Online (Sandbox Code Playgroud)

有两个地方我可以在一个地方设置当前线程的文化,就像这样:

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

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

然后我突然发现文化(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);
Run Code Online (Sandbox Code Playgroud)

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

Fed*_*dor 9

那是因为CultureInfo.GetCultureInfo("ru")返回NeutralCultureCultureInfo.GetCultureInfo("ru-RU")返回SpecificCulture.实际上,SpecificCulture源于NeutralCulture.所以asnwer不是,他们不一样,他们有不同的LCID.

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

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


das*_*ght 6

ru文化是中性的,这意味着它不能在格式化和分析使用.的ru-RU文化,而另一方面,是具体的(演示#1),所以你可以用它来格式化和分析数据.

比较两种文化的页面显示ru有一个设置的子集ru-RU.

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