.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 个地方设置当前线程的区域性,我这样做:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru");
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"分开?
这是因为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 上不会崩溃)。