Visual Studio.NET

Suporte a Internacionalização

Por Mauro Sant'Anna (santanna@mas.com.br). Mauro é um "MSDN Regional Director", consultor e instrutor da MAS Informática (www.mas.com.br), tendo ministrado treinamentos na arquitetura .NET desde outubro de 2000.

Quem desenvolve programas para o mercado americano normalmente não precisa preocupar-se muito com questões como formatações de datas e números. Já quem desenvolve para outros mercados, muitas vezes se vê a volta com problemas relacionados ao suporte de outros idiomas e culturas.

Este suporte é tradicionalmente disponibilizado pelas "bibliotecas de runtime" dos compiladores, com alguma integração com o suporte do próprio Windows. Esta integração às vezes deixa a desejar.

Em todas as linguagens de programação disponíveis para a arquitetura Microsoft .NET®, as questões relacionadas à internacionalização não são mais ligadas à nenhum compilador e sim à biblioteca .NET Framework®. Isto é muito bom, pois a .NET Framework possui um excelente suporte de internacionalização. A Microsoft® é uma empresa que sofre na própria pele este tipo de problema, pois comercializa seus produtos no mundo todo.

Neste artigo não pretendo cobrir todos os problemas que envolvem adaptar um software a outros idiomas, mas me concentrarei em permitir facilmente o uso de um outro idioma com o Visual Studio .NET Beta 2®.

Namespace Globalization

As principais rotinas de internacionalização encontram-se concentradas no namespace "Globalization". Este "namespace" inclui rotinas dos seguintes tipos:

  • Formatação de datas, números e valores monetários;

  • Rotinas de calendário (Juliano, gregoriano, japonês, árabe etc) e conversões entre os diferentes calendários;

  • Conjunto de caracteres utilizados, conversões (maiúsculas e minúsculas), ordenações e conversões entre os diferentes conjuntos de caracteres;

  • Constantes com nomes de dias da semana, meses, etc;

  • Informações sobre horário de verão.

O .NET Framework define uma Culture (cultura) como um conjunto de características associadas a uma cultura. Uma cultura não é exatamente nem um país nem um idioma, pois tanto podem existir vários países que usam a mesma cultura, como um país que tenha várias culturas. O padrão de culturas usado no Microsoft .NET segue a recomendação Internet "RFC 1766", para a formação dos identificadores, disponível em http://www.ietf.org/rfc/rfc1766.txt?number=1766.

A quantidade total de culturas no Visual Studio Beta 2 é de aproximadamente 230. A lista completa pode ser obtida no auxílio on-line da classe CultureInfo. Veja uma lista parcial das culturas disponíveis:

Identificador como string

Identificador numérico

Idioma/Região

iv

0x007F

invariant culture

af

0x0036

Afrikaans

af-ZA

0x0436

Afrikaans - South Africa

sq

0x001C

Albanian

sq-AL

0x041C

Albanian - Albania

ar

0x0001

Arabic

ar-DZ

0x1401

Arabic - Algeria

(muitas retiradas)

en

0x0009

English

en-AU

0x0C09

English - Australia

en-BZ

0x2809

English - Belize

en-CA

0x1009

English - Canada

en-CB

0x2409

English - Caribbean

en-IE

0x1809

English - Ireland

en-JM

0x2009

English - Jamaica

en-NZ

0x1409

English - New Zealand

en-PH

0x3409

English - Philippines

en-ZA

0x1C09

English - South Africa

en-TT

0x2C09

English - Trinidad and Tobago

en-GB

0x0809

English - United Kingdom

en-US

0x0409

English - United States

en-ZW

0x3009

English - Zimbabwe

(muitas retiradas)

Pt

0x0016

Portuguese

pt-BR

0x0416

Portuguese - Brazil

pt-PT

0x0816

Portuguese - Portugal

(muitas retiradas)

es

0x000A

Spanish

es-AR

0x2C0A

Spanish - Argentina

es-BO

0x400A

Spanish - Bolivia

es-CL

0x340A

Spanish - Chile

es-CO

0x240A

Spanish - Colombia

es-CR

0x140A

Spanish - Costa Rica

es-DO

0x1C0A

Spanish - Dominican Republic

es-EC

0x300A

Spanish - Ecuador

es-SV

0x440A

Spanish - El Salvador

es-GT

0x100A

Spanish - Guatemala

es-HN

0x480A

Spanish - Honduras

es-MX

0x080A

Spanish - Mexico

es-NI

0x4C0A

Spanish - Nicaragua

es-PA

0x180A

Spanish - Panama

es-PY

0x3C0A

Spanish - Paraguay

es-PE

0x280A

Spanish - Peru

es-PR

0x500A

Spanish - Puerto Rico

es-ES

0x0C0A

Spanish - Spain

es-UY

0x380A

Spanish - Uruguay

es-VE

0x200A

Spanish – Venezuela

(muitas retiradas)

Uz

0x0043

Uzbek

Cy-uz-UZ

0x0843

Uzbek (Cyrillic) - Uzbekistan

Lt-uz-UZ

0x0443

Uzbek (Latin) - Uzbekistan

vi

0x002A

Vietnamese

vi-VN

0x042A

Vietnamese - Viet Nam

Note que a Culture pode ser identificada tanto por um número como por uma string. Por exemplo, "Português do Brasil" é "0416" hexadecimal ou "pt-BR". Este valor é importante se desejarmos alterar a cultura, conforme mostrado a seguir.

Existe também uma Culture chamada InvariantCulture que nunca muda. A InvariantCulture é a mais indicada para armazenar dados internos dos programas, "arquivos de log" e informações que devem ser sempre as mesmas independente do idioma.

Alterando a Cultura

A princípio a cultura corrente é obtida dos "Ajustes regionais" do Windows. Existem várias maneiras de alterar a cultura usada nas conversões. Uma delas é alterar a cultura da thread principal com o seguinte comando em C#:

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("pt-BR"); 

O comando acima deve ser colocado uma vez, logo no início do programa ou em um evento chamado na carga inicial como "Load" do formulário em aplicativos com janelas:

private void Form1_Load(object sender, System.EventArgs e)
{ 
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("pt-BR"); 
} 

Aplicativos ASP.NET

Alterar a cultura em aplicativos ASP.NET (Web) é ainda mais fácil. Basta colocar uma linha identificando a cultura na seção "globalization" do arquivo web.Config:

<globalization 
requestEncoding="utf-8" 
responseEncoding="utf-8" 
culture="pt-BR" 
/> 

Veja a saída de uma página com componente de calendário sem ajuste de cultura no Windows em inglês:

vs_supint_1.jpg

Veja agora com a cultura alterada para "pt-BR". Não é necessário nem reiniciar o aplicativo para a modificação ser aceita; basta pedir para recarregar a página:

vs_supint_2.jpg

A cultura usada é determinada para cada "aplicativo Web" e cada aplicativo pode ter uma cultura diferente sem que seja necessário mudar ajustes do próprio servidor.

Conclusão

A arquitetura Microsoft .NET tem um excelente suporte para internacionalização, tornando muito simples a tarefa de suportar diferentes culturas e idiomas.

Faça o download deste documento:

· Suporte a Internacionalização

downl.gif formato Word, compactado - 70 Kb