Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Projete seu aplicativo para estar pronto para uso global formatando datas, horas, números, números de telefone e moedas adequadamente. Mais tarde, você poderá adaptar seu aplicativo para outras culturas, regiões e idiomas no mercado global.
Introdução
Ao criar seu aplicativo, se você pensar de forma mais ampla do que um único idioma 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. Estas incluem convenções para a ordem do dia e do mês na data, para a separação de horas e minutos no tempo, e até mesmo para que 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 curtos ("28/03/12"), que variam entre culturas. E, claro, os nomes e abreviaturas dos dias da semana e dos meses do ano diferem entre as línguas.
Você pode visualizar os formatos usados para diferentes idiomas. Vá para Configurações>Hora e Idioma>Região e idioma, e clique em Configurações adicionais de data, hora e região>Alterar formatos de data, hora ou número. Na guia Formatos, selecione um idioma no menu pendente Formato e pré-visualize os formatos nos Exemplos.
Este tópico usa os termos "lista de idiomas de perfil de usuário", "lista de idiomas de manifesto de aplicativo" e "lista de idiomas de tempo de execução de aplicativo". Para obter detalhes sobre exatamente o que esses termos significam e como acessar seus valores, consulte Entender os idiomas do perfil do usuário e os idiomas do manifesto do aplicativo.
Formatar datas e horas para a lista de idiomas em execução do aplicativo
Se você precisar permitir que os usuários escolham uma data ou uma hora, use os controles padrão de calendário, data e hora. Eles utilizam automaticamente o melhor formato de data e hora para a lista de idiomas em que o aplicativo é executado.
Se você precisar exibir datas ou horas por conta própria, então você pode usar a classe DateTimeFormatter . Por padrão, DateTimeFormatter usa automaticamente o melhor formato de data e hora para a lista de idiomas de tempo de execução do aplicativo. Assim, o código abaixo formata um determinado DateTime da melhor maneira para essa lista. Por exemplo, suponha que a lista de idiomas do manifesto do aplicativo inclua inglês (Estados Unidos), que também é o padrão, e alemão (Alemanha). Se a data atual for 6 de novembro de 2017 e a lista de idiomas do perfil de usuário contiver alemão (Alemanha) primeiro, o formatador dará "06.11.2017". Se a lista de idiomas do perfil de usuário contiver inglês (Estados Unidos) primeiro (ou se não contiver inglês nem alemão), o formatador dará "11/6/2017" (já que "en-US" corresponde ou é usado como 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 PC assim.
- Certifique-se de que você tenha arquivos de recursos em seu projeto qualificados para "en-US" e "de-DE" (consulte Adaptar seus recursos para idioma, escala, alto contraste e outros qualificadores).
- Altere a lista de idiomas do seu perfil de utilizador em Settings>Time & Language>Region & language>Languages. Adicione alemão (Alemanha), torne-o o padrão e execute o código novamente.
Formatar datas e horas para a lista de idiomas do perfil de usuário
Lembre-se de que, por padrão, DateTimeFormatter está em conformidade com a lista de idiomas de tempo de execução 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 de usuário, então você pode fazer isso usando um 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 tenha cadeias de caracteres traduzidas. Por exemplo, se o seu aplicativo não estiver localizado em alemão (Alemanha), mas o usuário escolher esse idioma como seu idioma preferido, isso pode resultar na exibição de cadeias de caracteres de aparência indiscutivelmente estranha, 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 o formatters para exibir uma moeda para qualquer região ou formato.
Este exemplo mostra como exibir moedas por perfil de usuário e para um determinado sistema de moedas.
// 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;
Pode testar o código acima no seu próprio PC alterando o país ou região em Definições>Hora & Idioma>Região & idioma>País ou região. Escolha um país ou região (talvez a Islândia) e execute o código novamente.
Use 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. As datas e horas no calendário também são sensíveis a diferentes fusos horários e horário de verão.
Para garantir que o formato de calendário preferido seja usado, você pode usar os controles padrão de calendário, data e hora. Para cenários mais complexos, onde pode ser necessário trabalhar diretamente com operações em datas de calendário, Windows.Globalization fornece uma classe Calendário que dá uma representação de calendário apropriada para a cultura, região e tipo de calendário fornecidos.
Formatar números de telefone adequadamente
Os números de telefone são formatados de forma diferente entre as regiões. O número de dígitos, como os dígitos são agrupados e a importância de certas 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 dígitos e permite: determinar se os dígitos são um número de telefone válido na região atual; comparar dois números para a igualdade; e para extrair as diferentes partes funcionais do número de telefone, como o código do país ou o código da área geográfica.
PhoneNumberFormatter formata uma cadeia de caracteres de dígitos ou um PhoneNumberInfo para exibição, mesmo quando a cadeia 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 à medida que um usuário está inserindo o número.
O exemplo abaixo mostra como usar PhoneNumberFormatter para formatar um número de telefone como ele está sendo inserido. Cada vez que o texto é alterado em uma TextBox chamada 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);
}
}
Pode testar o código acima no seu próprio PC alterando o país ou região em Definições>Hora & Idioma>Região & idioma>País ou região. Escolha um país ou região (talvez a Nova Zelândia para confirmar que 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 utilizador
Para cenários em que você deseja fornecer funcionalidades diferentes com base exclusivamente no idioma, 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 preferidas e assim por diante. Mas lembre-se de que, se as cadeias de caracteres/imagens do seu aplicativo não estiverem localizadas para o idioma preferido do usuário, as datas e horas e outros dados formatados para esse idioma preferido não corresponderão às cadeias de caracteres exibidas.
APIs importantes
- DateTimeFormatter
- FormataçãoNumérica
- Calendário
- FormataçãoDeNúmeroDeTelefone
- Preferências de Globalização
Tópicos relacionados
- Controles de calendário, data e hora
- Compreender os idiomas do perfil de utilizador e os idiomas do manifesto da aplicação
- Adapte seus recursos para idioma, escala, alto contraste e outros qualificadores
Exemplos
Windows developer