2013-10-15 106 views
1

我在CultureInfo類中發現了一個有趣的事情。我書面方式在ASP.NET中的應用程序,我是用Thread.CurrentThread.CurrentCulture來獲得當前選擇的語言和:.NET CultureInfo區別ru和RU-RU

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

有2個地方,我可以設置當前線程的文化在一個地方,我喜歡做的這些:

  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); 

的問題是 - 「爲什麼微軟能夠將 「RU」 和 「RU-RU」

+1

ru&ru-Ru是不是俄羅斯文化名? – Regon

+2

_「是不同的」_以什麼方式? @Maris:別喊!此外,沒有必要成爲令人反感的Sriram。 –

+0

@Tim Schmelter。它是一個類CultureInfo的差異實例 – Maris

回答

5

這是因爲CultureInfo.GetCultureInfo("ru")回報NeutralCulture?CultureInfo.GetCultureInfo("ru-RU")返回SpecificCulture。 實際上,SpecificCulture派生自NeutralCulture。所以沒什麼,他們不一樣,他們有不同的LCID。

在一般情況下,您應該始終使用SpecificCulture。

關於CultureInfo建議閱讀this MSDN article

5

ru文化是中立,這意味着它不能用於格式和解析。另一方面,ru-RU文化是特定(),因此您可以使用它來格式化和解析您的數據。

比較兩種文化的頁面顯示ru有一個由ru-RU提供的設置的子集。

其中,試圖將中性文化設置爲線程當前的文化會導致例外(demo #2 on Mono, does not crash on .NET 4.5)。

+0

你對演示#2錯了。我已經運行了這個: 'var culture = CultureInfo.GetCultureInfo(「ru」); (.NET 4.5) – Maris

+1

@Maris一個演示是一個演示:它演示了一個事實,即有一個C#(它恰好是單聲道)的實現,它會崩潰當你做某件事時。它不會在其他系統上崩潰的事實令人鼓舞,但我認爲很高興知道它不是普遍安全的。我編輯了答案以反映您的評論。 – dasblinkenlight