.NET CultureInfo ru 和 ru-RU 之间的差异

本文关键字:之间 ru-RU CultureInfo ru NET | 更新日期: 2023-09-27 18:35:37

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

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

我可以在 2 个地方设置当前线程的区域性,我这样做:

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

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

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

是我做错了什么还是Microsoft喝醉了?

编辑

@Tim 施梅尔特

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

问题是——"Microsoft为什么要把"ru"和"ru-RU"分开?

.NET CultureInfo ru 和 ru-RU 之间的差异

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

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

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

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

比较两种区域性的页面表明,ru具有 ru-RU 提供的设置子集。

除此之外,尝试将非特定区域性设置为线程的当前区域性会导致异常(Mono 上的演示 #2,在 .NET 4.5 上不会崩溃)。