Início > .NET Framework > Desvendando o Globalization do .NET

Desvendando o Globalization do .NET

 O .NET contem recursos que possibilitam que sua aplicação trabalhe de forma condizente com uma linguagem/cultura específica sem que você precise refazer o código quando você quiser mudar de cultura.

Abaixo eu descreverei várias funcionalidade do Globalization que podemos utilizar em nossos projetos. Recomendo ler os itens na seqüência, pois os assuntos estão organizados por pré-requisitos de aprendizado.

Verificando qual cultura sua aplicação está configurada

Por padrão sua aplicação assume as configurações de cultura que seu Windows está configurado. Para verificar isso utilize o código abaixo. Para utiliza-lá você precisa incluir o namespace System.Threading na sua aplicação.

Thread.CurrentThread.CurrentCulture.ToString();

No meu caso este exemplo retorna “pt-BR” aonde “pt”(Português) que define as configurações da linguagem e “BR” (Brasil) define as configurações regionais, específica de cada país.

No código abaixo você pode verificar a configuração que o Resource Manager esta configurado.

Thread.CurrentThread.CurrentUICulture.ToString();

Alterando a configurações regionalização da sua aplicação

Para alterar as configurações de sua aplicação, primeiro você precisa conhecer a Classe CultureInfo. É ela que Fornece informações sobre uma cultura específica. Ex.: Calendário, Ordenação e formatação de datas e horas. Para utiliza-lá você precisa incluir o namespace System.Globalization na sua aplicação.

Segue abaixo o código para realizar a alteração.

Thread.CurrentThread.CurrentCulture = new CultureInfo(“en-US”);

Neste caso estou alterando a minha aplicação para utilizar as configurações “en”(Inglês) “US(Estados Unidos)”. Você também pode alterar o CurrentUICulture da mesma forma.

Você pode verificar a diferença de formatação de cada cultura em relação a data utilizando o seguinte código para cada configuração que você escolher. Utilizando um projeto console.

Console.WriteLine(DateTime.Now.ToString());

Utilizando culturas diferentes no método ToString()

Para configurar a cultura específica apenas na saída string de uma propriedade utilize o código abaixo.  Neste caso estou alterando para Inglês-Estados Unidos.

Console.WriteLine(DateTime.Now.ToString(new CultureInfo(“en-US”)));

Listando todas as culturas registradas no Framework

A classe CultureInfo tem um método chamado GetCultures que retorna um coleção de CultureInfo registrados no Framework. Este método aceita um CultureTypes como parâmetro que funciona como um filtro. Para retornar todas as culturas registradas utilize o seguinte código.

foreach (CultureInfo item in CultureInfo.GetCultures(CultureTypes.AllCultures))
               Console.WriteLine(item.ToString());

Recuperando as configurações de uma cultura específica

A classe CultureInfo possui uma série propriedades que permitem você recuperar informações interessantes sobre uma configuração. São elas a NumberFormat e a DateTimeFormat. Dentro de cada uma delas você tem configurações específicas para número e Data. Por exemplo: NumberDecimalSeparator e DateSeparator.

Abaixo um exemplo de utilização.

CultureInfo cultura = new CultureInfo(“pt-BR”);

cultura.NumberFormat.NumberDecimalSeparator;

Construindo e registrando sua própria cultura

Você pode construir culturas personalizadas para ser usadas por todas suas aplicações.

Primeiro adicione o assembly sysglobl.dll (que na minha maquina fica na pasta C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sysglobl.dll).

Utilize a classe CultureAndRegionInfoBuilder para construir a nova cultura.

CultureAndRegionInfoBuilder construtorCultura = new CultureAndRegionInfoBuilder(“pt-K1”, CultureAndRegionModifiers.None);

Carregue sua nova cultura baseada em outra.

construtorCultura.LoadDataFromCultureInfo(new CultureInfo(“pt-BR”));   construtorCultura.LoadDataFromRegionInfo(new RegionInfo(“BR”));

Altere as propriedades que você deseja personalizar. Existem muitas propriedades, então, segue abaixo apenas um exemplo.

construtorCultura.IsMetric = false;

Para registrar utilize:

construtorCultura.Register();

Agora você já pode utilizar esta cultura em todas as suas aplicações, basta apenas instancia-lá chamando o CultureInfo(“pt-K1”).

E para retirar o registro utilize:

construtorCultura.Unregister(“pt-K1”);

Ordenação de acordo com a cultura

Um conceito muito interessante sobre culturas no .Net é que a mesma influencia na ordenação de caracteres. O caractere “Æ” vem antes “A” na nossa ordenação comum, mas em alemão é diferente, ela vem após a letra “A”.  Teste o seguinte exemplo com a cultura “pt-BR” e com a “da-DK”. e verifique que a ordenação automática do .Net mudou a seqüencia do array.

string[] caracteres= new string[] { “A”, “Æ” }; Array.Sort(caracteres);

Pesquisa de string de acordo com a cultura

A pesquisa de index de uma string (“texto”.IndexOf) pode trabalhar de forma diferente para cada cultura. Por exemplo:

Com a cultura “pt-BR”, se você pesquisar o caractere “Æ” dentro de uma string, ele retornará tanto os caracteres “Æ” quanto “AE”,  e a mesma coisa quando você estiver procurando o caractere “AE” ele irá retornar tanto o “Æ” quando “AE”. Já com a cultura “da-DK” é diferente, quando você pesquisar por “Æ” só retornará “Æ” e quando você pesquisar por “AE” só retornará “AE”. Faça um teste com o seguinte código abaixo configurando cada teste em uma cultura diferente.

“Æ”.IndexOf(“Æ”); “Æ”.IndexOf(“AE”);

“AE”.IndexOf(“Æ”); “AE”.IndexOf(“AE”);

Para contornar esta situação podemos declarar que as comparações serão independentes da cultura utilizando os seguintes métodos.

“Æ”.IndexOf(“Æ”, StringComparison.InvariantCulture); ou  Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

Comparação de acordo com a cultura

A comparação de strings também se comporta diferente em cada cultura. Faça o seguinte teste na cultura “pt-BR” e “tr-TR”

string.Compare(“teste”, “TESTE”, true);

Você pode verificar que mesmo mesmo indicando com o “true” que a comparação a ser feita é case-insensitive em “tr-TR”(Turquia-Turco) o retorno é falso indicando que as strings são diferentes. Já em “pt-BR” o retorno me diz que a comparação é verdadeira.

Aprendi muito escrevendo este artigo, espero que gostem.

Fontes:

http://msdn.microsoft.com/pt-br/library/system.globalization.cultureinfo(VS.90).aspx

http://msdn.microsoft.com/pt-br/library/1ztca10y(VS.90).aspx

http://msdn.microsoft.com/pt-br/library/system.threading.thread.currentuiculture(VS.90).aspx

http://www.microsoft.com/learning/en/us/Book.aspx?ID=12915&locale=en-us

Categorias:.NET Framework
  1. Ainda sem comentários.
  1. No trackbacks yet.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

%d bloggers like this: