2016-11-18 2 views
1

Ich brauche einen Weg zu erkennen, ob die Thread.CurrentThread.CurrentCulture eine bestimmte Sprache verwendet.Alternative Möglichkeit festzustellen, ob eine CultureInfo eine bestimmte Sprache verwendet?

Insbesondere muss ich erkennen, ob das CurrentCulture Objekt unterstützt/verwendet/ist "Englisch", unabhängig von dem Land/der Region - aber, es gibt eine Möglichkeit, die ich auch für andere Sprachen überprüfen möchte.

Ich weiß, dass jede englische Sprache CultureInfo Objekte Name s wird mit en- und dann der Region (US, GB etc.) vorangestellt wird - nach MSDN's Table of Language Culture Name and Codes.

So konnte ich einfach überprüfen, ob die aktuelle Kultur Name "beginnt mit" dem en- Präfix:

var currentCultureName = Thread.CurrentThread.CurrentCulture.Name; 
if (currentCultureName.StartsWith("en-")) 
{ 
    // We have an English language culture 
} 

EDIT: Ähnlich (wie Evk hingewiesen) - wenn ich die TwoLetterISOLanguageName verwenden waren, ich konnte am Ende mit dem gleichen Ergebnis:

var twoLetterISOLanguageName = 
          Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; 

if (twoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase)) 
{ 
    // We have an English language culture 
} 

gibt es eine Alternative, oder m eine typensichere Art, dies zu überprüfen, mit der Möglichkeit, andere Sprachen erkennen zu müssen (z.B. Französisch, Deutsch usw.)? - um zu sparen, eine potentiell große switch Aussage schreiben zu müssen?

Oder ist das, was ich oben verwende - und mit einer switch Aussage der beste Ansatz?

Vielen Dank im Voraus für Ihre Hilfe und Vorschläge :)

+0

Was möchten Sie erreichen? – CharithJ

+0

@CharithJ - Ich muss nur darauf hinweisen, dass es nicht speziell mit lokalisierten Strings zu tun hat (ich verwende dafür sprachspezifische .resx-Dateien). Ich habe eine Konfigurationsdatei für App-spezifische Einstellungen für jede Kundenversion der App. Insbesondere gibt es einen String, der sich in dieser Konfiguration befindet (nennen wir ihn 'WelcomeText') - also möchten einige Kunden vielleicht" Hallo "oder" Willkommen "(alle Englisch) usw. Aber es gibt einen bestimmten Kunden, der möchte App in verschiedenen Sprachen verfügbar, und ich möchte überprüfen, ob ihre Sprache "nicht Englisch" in Code ist, und verwenden Sie dann die lokalisierte Version, basierend auf dieser Sprache. –

+0

Wie viele verschiedene Sprachen unterstützen Sie? – CharithJ

Antwort

1

Es gibt keine wirklich eine sehr elegante Lösung ist, was Sie haben nicht schlecht vorgeschlagen für einige Sprachen ist. Sie könnten CultureInfo.Parent Property verwenden, die die neutrale Kultur zurückgibt.

Es gibt einige Komplikationen, wenn es eine Hierarchie gibt, in der mehrere Elternsprachen verfügbar sind (zB: einige traditionelle Chinesen, Taiwan). Aber das sollte für DE, FR und EN in Ordnung sein.

var neutralCulture = Thread.CurrentThread.CurrentCulture.Parent.Name; 

if (neutralCulture.Equals("en", StringComparison.OrdinalIgnoreCase)) 
{ 
    // We have an English language culture 
} 
else if (neutralCulture.Equals("fr", StringComparison.OrdinalIgnoreCase)) 
{ 
    // We have a French language culture 
} 
else if (neutralCulture.Equals("de", StringComparison.OrdinalIgnoreCase)) 
{ 
    // We have a German language culture 
} 
+0

Danke für Ihre Antwort. Könntest du vielleicht erklären, wie ich von deinem Vorschlag im Vergleich zu meinem Vorschlag profitieren kann - aus dem, was ich sehen kann, benutze den 'CurrentCulture.Parent.Name' und einige zusätzliche 'else if'-Aussagen? –

+0

Sie verwendeten CurrentCulture.Name und wahrscheinlich CurrentCulture.Parent.Name ist etwas besser .. – CharithJ

+0

Danke für den Vorschlag. Können Sie mir sagen, was der Unterschied zwischen den 2 und den Vorteilen ist, die "CurrentCulture.Parent" hat? –

Verwandte Themen