Condividi tramite


Internazionalizzare i formati di data/ora/numeri

Progettare l'app per essere pronta a livello globale formattando in modo appropriato date, ore, numeri, numeri di telefono e valute. Sarai in seguito in grado di adattare l'app per le culture, aree e lingue aggiuntive nel mercato globale.

Introduzione

Quando crei la tua app, se pensi in modo più ampio rispetto a una singola lingua e cultura, avrai meno problemi imprevisti (se presenti) quando la tua app si espande in nuovi mercati. Ad esempio, date, orari, numeri, calendari, valute, numeri di telefono, unità di misura e formati di carta sono elementi che possono essere presentati diversamente in culture o lingue diverse.

Regioni e culture diverse usano formati di data e ora diversi. Queste includono convenzioni per l'ordine di giorno e mese nella data, per la separazione di ore e minuti nel tempo e anche per la punteggiatura usata come separatore. Inoltre, le date possono essere visualizzate in vari formati lunghi ("Mercoledì, 28 marzo 2012") o formati brevi ("28/3/12"), che variano a seconda delle culture. E, naturalmente, i nomi e le abbreviazioni per i giorni della settimana e dei mesi dell'anno differiscono tra le lingue.

È possibile visualizzare in anteprima i formati usati per lingue diverse. Passare a Impostazioni>Ora e lingua>Regione e lingua, e fare clic su Impostazioni aggiuntive di data, ora e regionali>Modifica formati di data, ora o numero. Nella scheda Formati , selezionare una lingua dall'elenco a discesa Formato e visualizzare in anteprima i formati negli esempi.

Questo argomento utilizza i termini "elenco di lingue del profilo utente", "elenco di lingue del manifesto dell'app" e "elenco di lingue del runtime dell'app". Per dettagli sul significato esatto di questi termini e su come accedere ai valori, consultare Comprendere le lingue del profilo utente e le lingue del manifesto dell'app.

Formattare date e ore per l'elenco di lingue di runtime dell'app

Se è necessario consentire agli utenti di scegliere una data o di selezionare un'ora, usare i controlli calendario, data e ora standard. Questi usano automaticamente il formato di data e ora migliore per la lista di lingue di esecuzione dell'app.

Se è necessario visualizzare manualmente date o ore, è possibile usare la classe DateTimeFormatter. Per impostazione predefinita, DateTimeFormatter usa automaticamente il formato di data e ora migliore per l'elenco delle lingue di runtime dell'app. Quindi, il codice seguente formatta un determinato DateTime nel modo migliore per tale elenco. Si supponga, ad esempio, che l'elenco di lingue del manifesto dell'app includa l'inglese (Stati Uniti), che è anche il valore predefinito e il tedesco (Germania). Se la data corrente è il 6 novembre 2017 e l'elenco di lingue del profilo utente contiene prima il tedesco (Germania), il formattatore assegna "06.11.2017". Se l'elenco di lingue del profilo utente contiene prima inglese (Stati Uniti) (o se contiene né inglese né tedesco), il formattatore assegna "11/6/2017" (poiché "en-US" corrisponde o viene usato come predefinito).

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

È possibile testare il codice riportato sopra sul proprio PC come questo.

Formattare date e ore per l'elenco delle lingue del profilo utente

Tenere presente che, per impostazione predefinita, DateTimeFormatter corrisponde all'elenco di lingue di runtime dell'app. In questo modo, se si visualizzano stringhe come "La data è <data>", la lingua corrisponderà al formato della data.

Se per qualsiasi motivo vuoi formattare date e/o ore solo in base all'elenco di lingue del profilo utente, puoi farlo usando codice come l'esempio seguente. Tuttavia, se lo fai, capisci che l'utente può scegliere una lingua per cui l'app non ha stringhe tradotte. Ad esempio, se l'app non è localizzata in tedesco (Germania) e l'utente sceglie quella come lingua preferita, questo potrebbe comportare la visualizzazione di stringhe che appaiono strane come "La data è 06/11/2017".

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

Formattare i numeri e le valute in modo appropriato

Culture diverse formatano i numeri in modo diverso. Le differenze di formato possono includere il numero di cifre decimali da visualizzare, i caratteri da usare come separatori decimali e il simbolo di valuta da usare. Usare le classi nello spazio dei nomi NumberFormatting per visualizzare numeri decimali, percentuali o permille e valute. Nella maggior parte dei casi, vorrai che queste classi di formattazione usino il formato migliore per il profilo utente. È tuttavia possibile utilizzare i formattatori per visualizzare una valuta per qualsiasi area o formato.

In questo esempio viene illustrato come visualizzare le valute in base al profilo utente e per un sistema di valuta specifico.

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

È possibile testare il codice sopra riportato sul proprio PC modificando il paese o l'area geografica in Impostazioni>ora e area geografica>e lingua>. Scegliere un paese o un'area geografica (ad esempio Islanda) ed eseguire di nuovo il codice.

Usare un calendario appropriato a livello culturale

Il calendario differisce tra aree e lingue. Il calendario gregoriano non è l'impostazione predefinita per ogni area. Gli utenti in alcune aree possono scegliere calendari alternativi, ad esempio il calendario dell'era giapponese o i calendari lunari arabi. Le date e le ore del calendario sono anche sensibili ai diversi fusi orari e all'ora legale.

Per assicurarsi che venga usato il formato di calendario preferito, è possibile utilizzare i controlli standard di calendario, data e ora. Per scenari più complessi, in cui è possibile usare direttamente le operazioni sulle date del calendario, Windows.Globalization fornisce una classe Calendario che fornisce una rappresentazione del calendario appropriata per le impostazioni cultura, l'area e il tipo di calendario specificati.

Formattare i numeri di telefono in modo appropriato

I numeri di telefono vengono formattati in modo diverso tra aree. Il numero di cifre, la modalità di raggruppamento delle cifre e l'importanza di determinate parti del numero di telefono variano tra paesi/aree geografiche. A partire da Windows 10 versione 1607, puoi usare le classi nello spazio dei nomi PhoneNumberFormatting per formattare i numeri di telefono in modo appropriato per l'area corrente.

PhoneNumberInfo analizza una stringa di cifre e consente di: determinare se le cifre sono un numero di telefono valido nell'area corrente; confrontare due numeri per l'uguaglianza; e per estrarre le diverse parti funzionali del numero di telefono, ad esempio il codice paese o il codice area geografica.

PhoneNumberFormatter formatta una stringa di cifre o un PhoneNumberInfo per la visualizzazione, anche quando la stringa di cifre rappresenta un numero di telefono parziale. È possibile utilizzare questa formattazione numerica parziale per formattare un numero quando un utente immette il numero.

L'esempio seguente mostra come usare PhoneNumberFormatter per formattare un numero di telefono durante l'immissione. Ogni volta che il testo cambia in un controllo TextBox denominato phoneNumberInputTextBox, il contenuto della casella di testo viene formattato usando l'area predefinita corrente e visualizzata in un controllo TextBlock denominato phoneNumberOutputTextBlock. A scopo dimostrativo, la stringa viene formattata anche usando l'area per la Nuova Zelanda e visualizzata in un textBlock denominato phoneNumberOutputTextBlockNZ.

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

È possibile testare il codice sopra riportato sul proprio PC modificando il paese o l'area geografica in Impostazioni>ora e area geografica>e lingua>. Scegliere un paese o un'area geografica (ad esempio nuova Zelanda per confermare che i formati corrispondano) ed eseguire di nuovo il codice. Per i dati di test, è possibile eseguire una ricerca Web per il numero di telefono di un'azienda in Nuova Zelanda.

Preferenze linguistiche e culturali dell'utente

Per gli scenari in cui vuoi fornire funzionalità diverse in base esclusivamente alle preferenze di lingua, area geografica o cultura dell'utente, Windows ti offre un modo per accedere a tali preferenze, tramite Windows.System.UserProfile.GlobalizationPreferences. Se necessario, usare la classe GlobalizationPreferences per ottenere il valore dell'area geografica corrente dell'utente, lingue preferite, valute preferite e così via. Tenere tuttavia presente che se le stringhe o le immagini dell'app non sono localizzate per la lingua preferita dell'utente, date e ore e altri dati formattati per la lingua preferita non corrisponderanno alle stringhe visualizzate.

API importanti

Esempi