我在CultureInfo类中发现了一件有趣的事情。我在ASP.NET中编写了一个应用程序,我使用Thread.CurrentThread.CurrentCulture
来获取当前选定的语言,并且:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(alias);
有两个地方我可以在一个地方设置当前线程的文化:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru");
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);
问题是 - “为什么微软将”ru“和”ru-RU“分开?
答案 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),因此您可以使用它来格式化和解析数据。
除此之外,尝试将中立文化设定为线索的当前文化会导致异常(demo #2 on Mono, does not crash on .NET 4.5)。