Compartilhar via


Globalize seus formatos de data, hora e número

Projete seu aplicativo para estar pronto para o mundo formatando adequadamente datas, horas, números, números de telefone e moedas. Posteriormente, você poderá adaptar seu aplicativo para culturas, regiões e idiomas adicionais no mercado global.

Introdução

Ao criar seu aplicativo, se você pensar mais amplamente do que uma única linguagem e cultura, terá menos (se houver) problemas inesperados quando seu aplicativo crescer em novos mercados. Por exemplo, datas, horas, números, calendários, moeda, números de telefone, unidades de medida e tamanhos de papel são todos os itens que podem ser exibidos de forma diferente em diferentes culturas ou idiomas.

Diferentes regiões e culturas usam diferentes formatos de data e hora. Elas incluem convenções para a ordem de dia e mês na data, para a separação de horas e minutos no tempo e até mesmo para qual pontuação é usada como separador. Além disso, as datas podem ser exibidas em vários formatos longos ("Quarta-feira, 28 de março de 2012") ou formatos curtos ("28/3/12"), que variam entre culturas. E, claro, os nomes e abreviações dos dias da semana e meses do ano diferem entre idiomas.

Você pode visualizar os formatos usados para idiomas diferentes. Vá para Configurações>Hora & Idioma>Região e idioma, e clique em Configurações regionais adicionais de data, hora, e região>Alterar formatos de data, hora ou número. Na guia Formatos , selecione um idioma na lista suspensa Formatar e previsualize os formatos em Exemplos.

Este tópico usa os termos "lista de idiomas de perfil do usuário", "lista de idiomas de manifesto do aplicativo" e "lista de idiomas do runtime do aplicativo". Para obter detalhes sobre exatamente o que esses termos significam e como acessar seus valores, consulte Noções básicas sobre idiomas de perfil de usuário e idiomas de manifesto do aplicativo.

Formatar datas e horas para a lista de idiomas do runtime do aplicativo

Se você precisar permitir que os usuários escolham uma data ou selecionem uma hora, use os controles padrão calendário, data e hora. Eles usam automaticamente o melhor formato de data e hora para a lista de idiomas do runtime do aplicativo.

Se você precisar exibir datas ou horas por conta própria, poderá usar a classe DateTimeFormatter. Por padrão, DateTimeFormatter usa automaticamente o melhor formato de data e hora para a lista de idiomas do runtime do aplicativo. Portanto, o código abaixo formata um determinado DateTime da melhor maneira para essa lista. Por exemplo, suponha que sua lista de idiomas de manifesto do aplicativo inclua inglês (Estados Unidos), que também é seu padrão, e alemão (Alemanha). Se a data atual for 6 de novembro de 2017 e a lista de idiomas de perfil do usuário contiver alemão (Alemanha) primeiro, o formatador fornecerá "06.11.2017". Se a lista de idiomas de perfil de usuário contiver inglês (Estados Unidos) primeiro (ou se não contiver inglês nem alemão), o formatador fornecerá "11/6/2017" (uma vez que "en-US" corresponde ou é usado como o padrão).

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

Você pode testar o código acima em seu próprio computador assim.

Formatar datas e horas para a lista de idiomas de perfil do usuário

Lembre-se de que, por padrão, DateTimeFormatter corresponde à lista de idiomas do runtime do aplicativo. Dessa forma, se você exibir cadeias de caracteres como "A data é <data>", o idioma corresponderá ao formato de data.

Se, por qualquer motivo, você quiser formatar datas e/ou horas apenas de acordo com a lista de idiomas do perfil do usuário, poderá fazer isso usando código como o exemplo abaixo. Mas se você fizer isso, entenda que o usuário pode escolher um idioma para o qual seu aplicativo não tem cadeias de caracteres traduzidas. Por exemplo, se seu aplicativo não estiver localizado em alemão (Alemanha), mas o usuário escolher isso como seu idioma preferido, isso poderá resultar na exibição de cadeias de caracteres indiscutivelmente ímpares, como "A 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);

Formatar números e moedas adequadamente

Diferentes culturas formatam números de forma diferente. As diferenças de formato podem incluir quantos dígitos decimais exibir, quais caracteres usar como separadores decimais e qual símbolo de moeda usar. Use classes no namespace NumberFormatting para exibir números decimais, percentuais ou permille e moedas. Na maioria das vezes, você desejará que essas classes de formatador usem o melhor formato para o perfil de usuário. Mas você pode usar os formatadores para exibir uma moeda para qualquer região ou formato.

Este exemplo mostra como exibir moedas de acordo com o perfil do usuário e para um determinado sistema monetário específico.

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

Você pode testar o código acima em seu próprio computador alterando o país ou a região em ConfiguraçõesHora & IdiomaRegião & idiomaPaís ou região. Escolha um país ou região (talvez a Islândia) e execute o código novamente.

Usar um calendário culturalmente apropriado

O calendário difere entre regiões e idiomas. O calendário gregoriano não é o padrão para todas as regiões. Os usuários em algumas regiões podem escolher calendários alternativos, como o calendário da era japonesa ou calendários lunares árabes. Datas e horários no calendário também são sensíveis a fusos horários diferentes e horário de verão.

Para garantir que o formato de calendário preferencial seja usado, você pode usar os controles de calendário, data e hora padrão . Para cenários mais complexos, onde pode ser necessário trabalhar diretamente com operações em datas de calendário, Windows.Globalization oferece uma classe Calendar que proporciona uma representação de calendário adequada para a cultura, região e tipo de calendário específicos.

Formatar números de telefone adequadamente

Os números de telefone são formatados de forma diferente entre regiões. O número de dígitos, como os dígitos são agrupados e a significância de determinadas partes do número de telefone variam entre países/regiões. A partir do Windows 10, versão 1607, você pode usar classes no namespace PhoneNumberFormatting para formatar números de telefone adequadamente para a região atual.

PhoneNumberInfo analisa uma cadeia de caracteres de dígitos e permite que você: determine se os dígitos são um número de telefone válido na região atual; comparar dois números para igualdade; e extrair as diferentes partes funcionais do número de telefone, como código de país ou código de área geográfica.

PhoneNumberFormatter formata uma sequência de dígitos ou um PhoneNumberInfo para exibição, mesmo quando a sequência de dígitos representa um número de telefone parcial. Você pode usar essa formatação de número parcial para formatar um número enquanto um usuário está inserindo o número.

O exemplo a seguir mostra como usar PhoneNumberFormatter para formatar um número de telefone à medida que ele está sendo inserido. Sempre que o texto é alterado em um TextBox chamado phoneNumberInputTextBox, o conteúdo da caixa de texto é formatado usando a região padrão atual e exibido em um TextBlock chamado phoneNumberOutputTextBlock. Para fins de demonstração, a cadeia de caracteres também é formatada usando a região para a Nova Zelândia e exibida em um TextBlock chamado 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);
        }
    }

Você pode testar o código acima em seu próprio computador alterando o país ou a região em ConfiguraçõesHora & IdiomaRegião & idiomaPaís ou região. Escolha um país ou região (talvez a Nova Zelândia para confirmar se os formatos correspondem) e execute o código novamente. Para dados de teste, você pode fazer uma pesquisa na Web para o número de telefone de uma empresa na Nova Zelândia.

Idioma e preferências culturais do usuário

Para cenários em que você deseja fornecer funcionalidades diferentes com base apenas na linguagem, região ou preferências culturais do usuário, o Windows oferece uma maneira de acessar essas preferências, por meio de Windows.System.UserProfile.GlobalizationPreferences. Quando necessário, use a classe GlobalizationPreferences para obter o valor da região geográfica atual do usuário, idiomas preferenciais, moedas preferenciais e assim por diante. Mas lembre-se de que se as cadeias de caracteres/imagens do aplicativo não forem localizadas para o idioma preferido do usuário, datas e horas e outros dados formatados para esse idioma preferencial não corresponderão às cadeias de caracteres exibidas.

APIs importantes

Exemplos