This article is currently in the process of being translated into German (~99% done).
The RegionInfo class
Im vorherigen Artikel über die CultureInfo-Klasse haben wir über den Länder-/Regionalteil gesprochen, aber wir können mit einer der anderen Klassen im System.Globalization-Namensraum viel mehr regionales Zeug machen: Die Klasse RegionInfo. Es enthält viele nützliche Informationen über eine bestimmte Region (normalerweise ein Land), z.B. den Namen und das Symbol ihrer Währung, ob sie das metrische System verwenden oder nicht und so weiter.
Erzeugen einer RegionInfo-Instanz
Um Zugriff auf regionale Informationen zu erhalten, benötigen Sie eine Instanz der Klasse RegionInfo. Es hat einen Konstruktor, der einen ISO 3166-Code oder den Sprachcode bzw. Ländercode der Region (z.B. "en-US") aufnehmen kann. Hier ist ein Beispiel:
RegionInfo regionInfo = new RegionInfo("en-US");
Console.WriteLine(regionInfo.EnglishName);
Dies bedeutet auch, dass Sie, wenn Sie bereits einen Verweis auf eine CultureInfo-Klasse haben, diese einfach verwenden können, um sicherzustellen, dass Sie die passende RegionInfo erhalten. Und wie wir in einem früheren Artikel erfahren haben, hat Ihre Anwendung immer eine Fallback CultureInfo-Instanz, auf die Sie verweisen können:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine(regionInfo.EnglishName);
Lassen Sie uns einen Blick auf einige der nützlichen Funktionen der RegionInfo-Klasse werfen.
Wichtige Eigenschaften der Klasse RegionInfo
Wir haben die EnglishName-Eigenschaft bereits überprüft - sie gibt einfach den Namen der Region zurück, auf Englisch. Aber natürlich gibt es noch mehr gute Sachen - zum Beispiel einige Eigenschaften, die mit der Währung zu tun haben:
RegionInfo regionInfo = new RegionInfo("sv-SE");
Console.WriteLine(regionInfo.CurrencySymbol);
Console.WriteLine(regionInfo.ISOCurrencySymbol);
Console.WriteLine(regionInfo.CurrencyEnglishName);
Console.WriteLine(regionInfo.CurrencyNativeName);
Mit CurrencySymbol, ISOCurrencySymbol, CurrencyEnglishName und/oder CurrencyNativeName erhalten wir die Informationen, die wir benötigen, um monetäre Nachrichten auszugeben. Das Ergebnis sieht so aus (in diesem Fall für Schwedisch/Schweden):
kr
SEK
Swedish Krona
Svensk krona
Sie können auch leicht überprüfen, ob die angegebene Region das metrische System verwendet, indem Sie die IsMetric-Eigenschaft verwenden:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine("Is the metric system used in " + regionInfo.EnglishName + "? " + (regionInfo.IsMetric ? "Yes" : "No"));
Übrig bleiben die identitätsbezogenen Eigenschaften:
- Name liefert Ihnen den ISO 3166 Code, der die Sprache und das Land/die Region identifiziert, z.B. "en-US"_ für Englisch/Vereinigte Staaten.
- DisplayName liefert Ihnen den vollständigen Namen des Landes/der Region in der lokalisierten.NET Framework-Version.
- EnglishName liefert Ihnen den vollständigen Namen des Landes/der Region in englischer Sprache.
- NativeName liefert Ihnen den vollständigen Namen des Landes/Region in der angegebenen Sprache, z.B. "United States" für en-US oder "Deutschland" für de-DE.
- TwoLetterISORegionName liefert Ihnen den zweistelligen ISO 3166 Code für das Land/die Region, z.B. "US" für die Vereinigten Staaten oder "DE" für Deutschland.
- ThreeLetterISORegionName liefert Ihnen den dreistelligen ISO 3166 Code für das Land/die Region, z.B. "USA" für die Vereinigten Staaten oder "DEU" für Deutschland.
Natürlich werden diese Eigenschaften nützlich sein, wenn Sie Informationen über ein Land/eine Region anzeigen müssen, wie wir in unserem nächsten Beispiel sehen werden.
Eine Liste der Länder mit RegionInfo erhalten
In einem früheren Artikel habe ich Ihnen gezeigt, wie Sie eine Liste aller definierten Kulturen im .NET Framework erhalten, was uns im Grunde genommen eine Liste von Sprach-Länder/Regionen-Kombinationen hinterlässt. Wir können das in Kombination mit der RegionInfo-Klasse verwenden, um eine Liste der Länder/Regionen zu erhalten:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace RegionInfoCountries
{
class Program
{
static void Main(string[] args)
{
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
List<RegionInfo> countries = new List<RegionInfo>();
foreach (CultureInfo ci in cultures)
{
RegionInfo regionInfo = new RegionInfo(ci.Name);
if (countries.Count(x => x.EnglishName == regionInfo.EnglishName) <= 0)
countries.Add(regionInfo);
}
foreach (RegionInfo regionInfo in countries.OrderBy(x => x.EnglishName))
Console.WriteLine(regionInfo.EnglishName);
}
}
}
Also, dieses Beispiel ist etwas länger als die anderen Beispiele in diesem Artikel, aber lassen Sie es mich für Sie aufschlüsseln. Wir beginnen mit einer Liste aller verfügbaren, spezifischen Kulturen - wie wir in einem früheren Artikel gelernt haben, sind es die Kulturen, die eine Sprache UND eine Region/Land definieren. Wir durchlaufen diese Liste und verwenden bei jeder Iteration die CultureInfo-Instanz, um eine entsprechende RegionInfo-Instanz zu erzeugen. Wir prüfen, ob ein Land mit diesem Namen bereits zu unserer Liste hinzugefügt wurde und wenn nicht, fügen wir es hinzu. Wenn die Schleife beendet ist, haben wir nun eine vollständige Liste der durch das .NET-Framework definierten Länder, die wir durchschleifen und an die Konsole ausgeben können, oder so ziemlich alles andere, was wir nützlich finden könnten.
Dies ist ein großartiges Beispiel dafür, was Sie mit der Kombination von CultureInfo und RegionInfo erreichen können, aber lassen Sie mich betonen, dass dies keine vollständige und genaue Liste der Länder ist. Es ist stattdessen eine vollständige Liste der Länder, die in der von Ihnen verwendeten Version des .NET-Frameworks definiert sind, was im Wesentlichen bedeutet, dass einige Länder fehlen oder ihren Namen seit der Veröffentlichung der Version geändert haben könnten. Wenn Sie also eine Liste von Ländern benötigen, die 100% genau und aktuell ist, müssen Sie diese wahrscheinlich selbst erstellen und pflegen.
Zusammenfassung
Die RegionInfo-Klasse ist grundsätzlich eine Erweiterung der CultureInfo-Klasse mit noch mehr nützlichen Informationen über ein bestimmtes Land/eine bestimmte Region. Es erlaubt Ihnen, mehr über die Identität und Währung einer bestimmten Region zu erfahren, und es kann Ihnen helfen, eine Liste von Ländern/Regionen zu erhalten.