2013-10-21 8 views
5

sto ottenendo la cultura corrente come segue:Get Cultura Nome visualizzato in lingua

var culture = Thread.CurrentThread.CurrentCulture.DisplayName; 

Il problema è che ho sempre trovato il nome in inglese:

  • IT diventa Inglese
  • PT diventa portoghese anziché Português
  • FR diventa francese anziché ...

Come posso ottenere il DisplayName di una cultura in quella lingua specifica?

Grazie, Miguel

+0

display visualizzerà il nome nella lingua del posizione attuale .net framework. Usa nome o NativeName. –

+0

Nessuno di questi lavori ... Entrambi mi danno in inglese –

risposta

10

È necessario visualizzare il NativeName al posto del DisplayName.

+1

Non funziona ... Prendo comunque l'inglese ... Forse perché il mio sistema operativo è in inglese? –

5

DisplayName verrà visualizzato nella lingua del percorso del framework .NET corrente.

È possibile utilizzare NativeName (o forse anche solo Name non ho provato questo) invece di DisplayName, che dovrebbe fare il trucco.

Modifica

Dopo aver testato questo con il seguente codice:

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

I risultati sono stati:

nativo = "Deutsch (Deutschland)"

display = "Tedesco (Germania)"

name = "de-DE"

0

Se si cerca solo per ottenere la lingua localizzata di una cultura (senza il paese) si può usare questo frammento:

CultureInfo culture = Thread.CurrentThread.CurrentCulture; 

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

Se si userà un nome specifico lingua localizzata, si può usare questo:

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

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

Se si desidera avere un nome per il titolo (ad es. Français invece di français), utilizzare questa linea:

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

Come metodo:

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

O come un metodo di estensione:

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; 
} 
Problemi correlati