Globalizzare i formati di data, ora e numeri

Progettare l'app in modo che sia valida a livello globale formattando in modo appropriato date, ore, numeri, numeri di telefono e valute. Sarà quindi possibile adattare l'app per cultura, aree e lingue aggiuntive nel mercato globale.

Introduzione

Quando si realizza l'app, bisogna pensare in modo più ampio rispetto a una singola lingua e cultura, così si riscontreranno avere meno problemi imprevisti (se presenti) quando l'app cresce in nuovi mercati. Ad esempio, date, ore, numeri, calendari, valuta, numeri di telefono, unità di misura e formati carta sono tutti gli elementi che possono essere visualizzati in modo diverso in diverse culture o lingue.

Aree geografiche e culture diverse usano formati di data e ora differenti. Ciò include convenzioni relative a ordine di giorno e mese nella data, separazione di ore e minuti riguardo all'ora e anche la punteggiatura usata come separatore. Inoltre, le date possono essere visualizzate in diversi formati lunghi ("Mercoledì, 28 marzo 2012") o formati brevi ("28/3/12"), che variano in base alla cultura. 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 & Lingua>Regione & lingua e fare clic su Impostazioni aggiuntive di data, ora & regione>Modifica i formati di data, ora o numero. Nella scheda Formati selezionare una lingua dall'elenco a discesa Formato e visualizzare in anteprima i formati indicati negli Esempi.

Questo argomento usa i termini "elenco di lingue del profilo utente", "elenco di lingue del manifesto dell'app" ed "elenco di lingue di runtime dell'app". Per informazioni dettagliate sul significato esatto di questi termini e su come accedere ai valori, consultare Informazioni sulle lingue del profilo utente e sulle lingue del manifesto dell'app.

Formattare data e ora 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 comandi ora, data e calendario standard. Questi usano automaticamente il formato di data e ora migliore per l'elenco di lingue di runtime dell'app.

Se è necessario visualizzare manualmente data o ora, è possibile usare la classe DateTimeFormatter. Per impostazione predefinita, DateTimeFormatter usa automaticamente il formato di data e ora migliore per l'elenco di lingue di runtime dell'app. Il codice seguente formatta quindi un valore DateTime specificato nel modo migliore per tale elenco. Si supponga, ad esempio, che l'elenco di lingue di manifesto dell'app includa l'inglese (Stati Uniti), 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 l'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 data e ora 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 si vogliono formattare date e/o ore solo in base all'elenco di lingue del profilo utente, è possibile farlo usando codice come l'esempio seguente. Tuttavia, in questo caso si comprende 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), ma l'utente sceglie questa lingua come lingua preferita, ciò potrebbe comportare la visualizzazione di stringhe probabilmente 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

Diverse culture formattano i numeri in modo differente. 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, è necessario che queste classi formattatore 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 PC modificando il paese o l'area geografica in Impostazioni>Ora & Lingua>Regione & lingua>Paese e regione. Scegliere un paese o un'area geografica (ad esempio Islanda) ed eseguire di nuovo il codice.

Usare un calendario culturalmente appropriato

Il calendario differisce tra aree e lingue. Il calendario gregoriano non è l'impostazione predefinita per ogni regione. Gli utenti in alcune regioni possono scegliere calendari alternativi, ad esempio il calendario giapponese o i calendari lunari arabi. Inoltre ora e data del calendario sono sensibili ai diversi fusi orari e all'ora legale.

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

Formattare i numeri di telefono in modo appropriato

I numeri di telefono vengono formattati in modo diverso a seconda dell'area geografica. Il numero di cifre, la modalità di raggruppamento delle cifre e il significato di determinate parti del numero di telefono variano tra i paesi. A partire da Windows 10 versione 1607, è possibile usare le classi nello spazio dei nomi PhoneNumberFormatting per formattare numeri di telefono in modo appropriato per la specifica regione.

PhoneNumberInfo analizza una stringa di cifre e consente di: determinare se le cifre sono un numero di telefono valido nella specifica regione, 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 illustra come usare PhoneNumberFormatter per formattare un numero di telefono durante l'immissione. Ogni volta che il testo cambia in TextBox denominato phoneNumberInputTextBox, il contenuto della casella di testo viene formattato usando l'area predefinita corrente e visualizzata in TextBlock denominato phoneNumberOutputTextBlock. A scopo dimostrativo, la stringa viene formattata anche usando la regione 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 PC modificando il paese o l'area geografica in Impostazioni>Ora & Lingua>Regione & lingua>Paese e regione. 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 GlobalizationPreferences per ottenere valore dell'area geografica corrente dell'utente, lingue preferite, valute preferite e così via. Tuttavia considerare 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