Teilen über


Globalisieren von Datums-, Uhrzeit- und Zahlenformaten

Entwerfen Sie Ihre App so, dass sie global einsetzbar ist, indem Sie Daten, Zeiten, Zahlen, Telefonnummern und Währungen entsprechend formatieren. Sie können Ihre App später für weitere Kulturen, Regionen und Sprachen auf dem globalen Markt anpassen.

Einführung

Wenn Sie bei der Entwicklung Ihrer App nicht nur an eine einzige Sprache und Kultur denken, werden Sie weniger (wenn überhaupt) unerwartete Probleme haben, wenn Ihre App in neue Märkte expandiert. So können beispielsweise Daten, Uhrzeiten, Zahlen, Kalender, Währungen, Telefonnummern, Maßeinheiten und Papiergrößen in verschiedenen Kulturen oder Sprachen unterschiedlich dargestellt werden.

Verschiedene Regionen und Kulturen verwenden unterschiedliche Datums- und Zeitformate. Dazu gehören Konventionen für die Reihenfolge von Tag und Monat im Datum, für die Trennung von Stunden und Minuten in der Uhrzeit und sogar dafür, welche Interpunktion als Trennzeichen verwendet wird. Darüber hinaus können Datumsangaben in verschiedenen Längenformaten („Mittwoch, 28. März 2012“) oder Kurzformaten („28.3.12“) angezeigt werden, die von Kultur zu Kultur variieren. Und natürlich unterscheiden sich die Namen und Abkürzungen für die Wochentage und Monate des Jahres von Sprache zu Sprache.

Sie können eine Vorschau der verwendeten Formate in den verschiedenen Sprachen anzeigen. Wechseln Sie zu Einstellungen>Time & Language>Region & Language, und klicken Sie auf Zusätzliche Datums-, Uhrzeit- und Regionseinstellungen>Ändern von Datums-, Uhrzeit- oder Zahlenformaten. Wählen Sie auf der Registerkarte Formate eine Sprache aus der Dropdownliste Format aus, und sehen Sie sich eine Vorschau der Formate in Beispiele an.

In diesem Thema werden die Begriffe „Benutzerprofil-Sprachenliste“, „App-Manifest Sprachenliste“ und „App-Laufzeitsprachenliste“ verwendet. Ausführliche Informationen dazu, was diese Begriffe bedeuten und wie sie auf ihre Werte zugreifen können, finden Sie unter Verständnis der Sprachen für Benutzerprofile und App-Manifeste.

Datums- und Zeitangaben für die Sprachliste der App-Laufzeit formatieren

Wenn Sie den Benutzern die Möglichkeit geben müssen, ein Datum oder eine Uhrzeit auszuwählen, verwenden Sie die Standardsteuerungen für Kalender, Datum und Uhrzeit. Diese verwenden automatisch das beste Datums- und Uhrzeitformat für die App-Laufzeitsprachenliste.

Wenn Sie Datums- oder Uhrzeitangaben selbst anzeigen müssen, können Sie die DateTimeFormatter-Klasse verwenden. Standardmäßig verwendet DateTimeFormatter automatisch das beste Datums- und Zeitformat für die Sprachliste der App-Laufzeit. Der folgende Code formatiert also eine bestimmte DateTime-Angabe in der für diese Liste besten Weise. Nehmen Sie zum Beispiel an, dass Ihre App-Manifest-Sprachliste Englisch (Vereinigte Staaten), das auch Ihre Standardsprache ist, und Deutsch (Deutschland) enthält. Wenn das aktuelle Datum der Nov 6 2017 ist und die Sprachliste des Benutzerprofils zuerst Deutsch (Deutschland) enthält, dann gibt der Formatierer „06.11.2017“ an. Wenn die Sprachliste des Benutzerprofils zuerst Englisch (Vereinigte Staaten) enthält (oder wenn sie weder Englisch noch Deutsch enthält), dann gibt der Formatierer „11/6/2017“ aus (da „en-US“ übereinstimmt oder als Standard verwendet wird).

    // Use the DateTimeFormatter class to display dates and times using basic formatters.

    var shortDateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shortdate");
    var shortTimeFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shorttime");

    var dateTimeToFormat = DateTime.Now;

    var shortDate = shortDateFormatter.Format(dateTimeToFormat);
    var shortTime = shortTimeFormatter.Format(dateTimeToFormat);

    var results = "Short Date: " + shortDate + "\n" +
                  "Short Time: " + shortTime;

Sie können den obigen Code auf Ihrem eigenen PC wie folgt testen.

Datums- und Zeitangaben für die Sprachliste des Benutzerprofils formatieren

Denken Sie daran, dass DateTimeFormatter standardmäßig der App-Laufzeitsprachenliste entspricht. Wenn Sie also Zeichenfolgen wie „Das Datum < ist Datum >“ anzeigen, wird die Sprache dem Datumsformat entsprechen.

Wenn Sie aus irgendeinem Grund Datums- und/oder Uhrzeitangaben nur entsprechend der Benutzerprofil-Sprachenliste formatieren möchten, können Sie dies mit Code wie dem folgenden Beispiel tun. Aber wenn Sie das tun, sollten Sie sich darüber im Klaren sein, dass der Benutzer eine Sprache wählen kann, für die Ihre App keine übersetzten Zeichenketten hat. Wenn Ihre App beispielsweise nicht auf Deutsch (Deutschland) lokalisiert ist, der Benutzer aber diese Sprache als bevorzugte Sprache auswählt, könnte dies zur Anzeige von seltsam anmutenden Zeichenfolgen wie „Das Datum ist der 06.11.2017“ führen.

    // Use the DateTimeFormatter class to display dates and times using basic formatters.

    var userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

    var shortDateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shortdate", userLanguages);

    var results = "Short Date: " + shortDateFormatter.Format(DateTime.Now);

Zahlen und Währungen richtig formatieren

Verschiedene Kulturen formatieren Zahlen unterschiedlich. Die Formatunterschiede können die Anzahl der anzuzeigenden Dezimalstellen, die als Dezimaltrennzeichen zu verwendenden Zeichen und das zu verwendende Währungssymbol betreffen. Verwenden Sie Klassen im NumberFormatting-Namespace, um Dezimal-, Prozent- oder Promillezahlen und Währungen anzuzeigen. In den meisten Fällen werden Sie wollen, dass diese Formatierungsklassen das beste Format für das Benutzerprofil verwenden. Sie können aber die Formatierer verwenden, um eine Währung für jede Region oder jedes Format anzuzeigen.

Dieses Beispiel zeigt, wie Sie Währungen sowohl für das Benutzerprofil als auch für ein bestimmtes Währungssystem anzeigen können.

    // This scenario uses the CurrencyFormatter class to format a number as a currency.

    var userCurrency = Windows.System.UserProfile.GlobalizationPreferences.Currencies[0];

    var valueToBeFormatted = 12345.67;

    var userCurrencyFormatter = new Windows.Globalization.NumberFormatting.CurrencyFormatter(userCurrency);
    var userCurrencyValue = userCurrencyFormatter.Format(valueToBeFormatted);

    // Create a formatter initialized to a specific currency,
    // in this case US Dollar (specified as an ISO 4217 code) 
    // but with the default number formatting for the current user.
    var currencyFormatUSD = new Windows.Globalization.NumberFormatting.CurrencyFormatter("USD");
    var currencyValueUSD = currencyFormatUSD.Format(valueToBeFormatted);

    // Create a formatter initialized to a specific currency.
    // In this case it's the Euro with the default number formatting for France.
    var currencyFormatEuroFR = new Windows.Globalization.NumberFormatting.CurrencyFormatter("EUR", new[] { "fr-FR" }, "FR");
    var currencyValueEuroFR = currencyFormatEuroFR.Format(valueToBeFormatted);

    // Results for display.
    var results = "Fixed number (" + valueToBeFormatted + ")\n" +
                    "With user's default currency: " + userCurrencyValue + "\n" +
                    "Formatted US Dollar: " + currencyValueUSD + "\n" +
                    "Formatted Euro (fr-FR defaults): " + currencyValueEuroFR;

Sie können den obigen Code auf Ihrem eigenen PC testen, indem Sie das Land oder die Region in Einstellungen>Time & Language>Region & Language>Country or Region ändern. Wählen Sie ein Land oder eine Region (vielleicht Island) aus, und führen Sie den Code erneut aus.

Verwendung eines kulturspezifischen Kalenders

Der Kalender unterscheidet sich je nach Region und Sprache. Der gregorianische Kalender ist nicht die Standardeinstellung für jede Region. Benutzer in einigen Regionen können alternative Kalender auswählen, z.B. den Kalender der japanischen Ära oder den arabischen Mondkalender. Datums- und Zeitangaben im Kalender sind auch von verschiedenen Zeitzonen und der Sommerzeit abhängig.

Um sicherzustellen, dass das bevorzugte Kalenderformat verwendet wird, können Sie die Standardsteuerungen für Kalender, Datum und Uhrzeit verwenden. Für komplexere Szenarien, in denen die direkte Arbeit mit Vorgängen an Kalenderdaten erforderlich sein kann, stellt Windows.Globalization eine Kalender-Klasse zur Verfügung, die eine geeignete Kalenderdarstellung für die jeweilige Kultur, Region und den Kalendertyp bereitstellt.

Telefonnummern richtig formatieren

Telefonnummern sind in den verschiedenen Regionen unterschiedlich formatiert. Die Anzahl der Ziffern, die Gruppierung der Ziffern und die Bedeutung bestimmter Teile der Telefonnummer sind von Land zu Land unterschiedlich. Ab Windows 10, Version 1607, können Sie Klassen im Namespace PhoneNumberFormatting verwenden, um Telefonnummern für die aktuelle Region passend zu formatieren.

PhoneNumberInfo analysiert eine Zeichenkette von Zahlen und ermöglicht Ihnen: festzustellen, ob die Zahlen eine gültige Telefonnummer in der aktuellen Region sind, zwei Zahlen auf Gleichheit zu vergleichen und die verschiedenen funktionalen Teile der Telefonnummer zu extrahieren, z. B. die Landesvorwahl oder die geografische Ortsvorwahl.

PhoneNumberFormatter formatiert eine Zeichenkette von Zahlen oder eine PhoneNumberInfo für die Anzeige, auch wenn die Zeichenkette der Zahlen eine partielle Telefonnummer darstellt. Sie können diese partielle Zahlenformatierung verwenden, um eine Zahl zu formatieren, während ein Benutzer die Zahl eingibt.

Das folgende Beispiel zeigt, wie Sie PhoneNumberFormatter verwenden, um eine Telefonnummer so zu formatieren, wie sie eingegeben wird. Jedes Mal, wenn sich der Text in einer TextBox mit der Bezeichnung phoneNumberInputTextBox ändert, wird der Inhalt der Textbox unter Verwendung des aktuellen Standardbereichs formatiert und in einem TextBlock mit der Bezeichnung phoneNumberOutputTextBlock angezeigt. Zu Demonstrationszwecken wird die Zeichenkette auch mithilfe der Region für Neuseeland formatiert und in einem TextBlock mit der Bezeichnung phoneNumberOutputTextBlockNZ angezeigt.

    using Windows.Globalization.PhoneNumberFormatting;

    PhoneNumberFormatter currentFormatter, NZFormatter;

    public MainPage()
    {
        this.InitializeComponent();

        // Use the default formatter for the current region
        this.currentFormatter = new PhoneNumberFormatter();

        // Create an explicit formatter for New Zealand. 
        PhoneNumberFormatter.TryCreate("NZ", out this.NZFormatter);
    }

    private void phoneNumberInputTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        // Format for the default region.
        this.phoneNumberOutputTextBlock.Text = currentFormatter.FormatPartialString(this.phoneNumberInputTextBox.Text);

        // If the NZFormatter was created successfully, format the partial string for the NZ TextBlock.
        if(this.NZFormatter != null)
        {
            this.phoneNumberOutputTextBlockNZ.Text = this.NZFormatter.FormatPartialString(this.phoneNumberInputTextBox.Text);
        }
    }

Sie können den obigen Code auf Ihrem eigenen PC testen, indem Sie das Land oder die Region in Einstellungen>Time & Language>Region & Language>Country or Region ändern. Wählen Sie ein Land oder eine Region aus (vielleicht Neuseeland, um zu bestätigen, dass die Formate übereinstimmen), und führen Sie den Code erneut aus. Für Testdaten können Sie eine Websuche nach der Telefonnummer eines Unternehmens in Neuseeland durchführen.

Die sprachlichen und kulturellen Präferenzen des Benutzers

Für Szenarien, in denen Sie unterschiedliche Funktionen bereitstellen möchten, die ausschließlich auf den Sprach-, Regions- oder Kultureinstellungen des Benutzers basieren, bietet Windows eine Möglichkeit, auf diese Einstellungen über Windows.System.UserProfile.GlobalizationPreferences zuzugreifen. Verwenden Sie bei Bedarf die GlobalizationPreferences-Klasse, um den Wert der aktuellen geografischen Region des Benutzers, bevorzugte Sprachen, bevorzugte Währungen usw. abzurufen. Aber denken Sie daran: Wenn die Zeichenketten/Bilder Ihrer App nicht für die bevorzugte Sprache des Benutzers lokalisiert sind, stimmen Daten und Zeiten sowie andere Daten, die für die bevorzugte Sprache formatiert sind, nicht mit den von Ihnen angezeigten Zeichenketten überein.

Wichtige APIs

Beispiele