2013-10-21 65 views
5

我得到當前文化如下:獲取文化顯示名稱在其語言

var culture = Thread.CurrentThread.CurrentCulture.DisplayName; 

的問題是,我始終用英文獲取名稱:

  • EN成爲英語
  • PT變成葡萄牙語而不是Português
  • FR變成法語而不是...

如何獲得該文化的顯示名稱?

謝謝你, 米格爾

+0

顯示器將在的語言顯示的名稱當前的.net框架位置。使用名稱或NativeName。 –

+0

這些工作都沒有......他們都給我英文 –

回答

10

你需要顯示NativeName而不是DisplayName

+1

它不工作......我無論如何得到英語......也許是因爲我的操作系統是英文的? –

5

DisplayName將以當前.NET框架位置的語言顯示。

您可以使用NativeName(或者甚至可能只是Name我沒有試過這個)而不是DisplayName,應該這樣做。

編輯

用下面的代碼測試此之後:

// set the current culture to German  
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); 
var native = Thread.CurrentThread.CurrentCulture.NativeName; 
var display = Thread.CurrentThread.CurrentCulture.DisplayName; 
var name = Thread.CurrentThread.CurrentCulture.Name; 

結果爲:

天然= 「德語(德國)」

顯示= 「德國(德國)」

名=「DE-DE」

0

如果一個只是試圖讓文化的本地化語言(沒有國家)可以使用這個片段:

CultureInfo culture = Thread.CurrentThread.CurrentCulture; 

string nativeName = culture.IsNeutralCulture 
    ? culture.NativeName 
    : culture.Parent.NativeName; 

如果一個人會使用特定的本地化語言名稱,可以使用這樣的:

string language = "es-ES"; 
CultureInfo culture = new CultureInfo(language); 

string nativeName = culture.IsNeutralCulture 
    ? culture.NativeName 
    : culture.Parent.NativeName; 

如果想要標題案例名稱(例如,的問題,而不是的問題),則使用這條線:

string result = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nativeName); 

作爲方法:

private static string GetTitleCaseNativeLanguage(string language) 
{ 
    CultureInfo culture = new CultureInfo(language); 

    string nativeName = culture.IsNeutralCulture 
     ? culture.NativeName 
     : culture.Parent.NativeName; 

    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nativeName); 
} 

或者作爲一個擴展方法:

public static string GetNativeLanguageName(this CultureInfo culture, bool useTitleCase = true) 
{ 
    string nativeName = culture.IsNeutralCulture 
     ? culture.NativeName 
     : culture.Parent.NativeName; 

    return useTitleCase 
     ? CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nativeName) 
     : nativeName; 
}