Introdução

 

A import√Ęncia dos sistemas multi-idiomas √© algo que n√£o precisa ser discutido, hoje em dia cada vez mais existem pessoas de todas as partes do globo trabalhando em qualquer parte, fico feliz em mostrar que o .Net Framework tem diversas facilidades para auxiliar na solu√ß√£o desta necessidade.

Em diversos projetos que eu participei foi importante ter tradu√ß√£o dos softwares para idiomas como espanhol, ingl√™s ou alem√£o, por√©m estas tradu√ß√Ķes tanto para desenvolvimento de aplica√ß√Ķes Windows Forms quanto para aplica√ß√Ķes Web Forms, √© facilitada com alguns conceitos e mecanismos b√°sicos suportados pelo CLR. Os principais namespaces que iremos utilizar s√£o System.Resources e System.Globalization.

 

Arquivos de Resources

 

Para conceituar os resource files, s√£o arquivos que podem conter em sua estrutura imagens, informa√ß√Ķes como strings, inteiros e etc, ou seja, qualquer tipo de informa√ß√£o que poder√° ser utilizada durante a execu√ß√£o do sistema.

 

Voltando aos aplicativos que atendem diversos idiomas, o suporte no .NET Framework sobre o multi-idiomas em geral é fácil, normalmente criamos arquivos de Resources para cada idioma que a aplicação irá suportar. Algumas vezes será apenas um arquivo para cada Web Forms ou Windows Forms, ou claro poderá ser um arquivo para cada idioma para atender todo o projeto.

 

Aplicando na pr√°tica (cen√°rio)

 

Para ilustrar melhor o uso dos resources para fazer a tradução dos nossos forms, vamos criar um pequeno cenário.

Imagine que estamos trabalhando em uma grande companhia que possuí uma filial na Argentina e outra filial nos Estados Unidos da América, dentro deste cenário teremos colaboradores que não são nativos no idioma português e poderão ter dificuldades em aprender um idioma tão complexo quanto o nosso.

Seria interessante para esta companhia ter um software que disponibilizasse para os seus colaboradores a opção de idiomas em português, inglês ou espanhol.

Agora utilizando o Visual Studio 2008 vamos criar um pequeno aplicativo Web que possu√≠ a op√ß√£o de tradu√ß√£o dos componentes. Esta op√ß√£o poderia estar relacionada ao perfil de usu√°rio no cadastro dos colaboradores, por√©m para n√£o perdermos o foco do artigo vamos o nosso aplicativo ir√° pegar o idioma padr√£o das configura√ß√Ķes do browser.

 

Criando o aplicativo

Agora utilizando o Visual Studio 2008 vamos criar um pequeno aplicativo Web que possuí a opção de tradução dos componentes.

         Ap√≥s criar um novo projeto, utilize o arquivo default.aspx para criar o nosso aplicativo, desenhe um form como a tela como a que segue na imagem abaixo:



Figura 1 - Exemplo da aplicação

 

         Ao montar a p√°gina acima utilize a nomenclatura dos objetos referenciados na tabela abaixo:


Tabela 1 - Propriedade dos objetos

 

Agora vamos adicionar um arquivo de recursos local para criar a referencia de cada idioma aos objetos que est√£o no Web Form. Para incluir o arquivo de recursos basta clicarmos no menu Tool e Generate Local Resource.



Figura 2 - Criando arquivo de resource

 

         Por padr√£o o Visual Studio adiciona na janela Solution Explorer uma pasta chamada App_LocalResources e dentro um arquivo nomeado Default.aspx.resx este arquivo ir√° conter o nome de todos os objetos e o seu respectivo valor para o campo Text.


Figura 3 - Os Resources

 

         Por√©m para trabalharmos com um novo idioma teremos que adicionar um novo arquivo de Resource para cada idioma, se seguirmos os mesmos passos para adicionar o Local Resource File n√£o ir√° funcionar, pois o Visual Studio ir√° criticar perguntado se deseja sobrescrever o arquivo existente, por este motivo vamos copiar e colar o mesmo arquivo dentro da mesma pasta renomeado para Default.aspx.en-US.resx e o outro arquivo para Default.aspx.es-AR.resx. Para conhecer a lista de idiomas suportados e os prefixos a serem utilizados dentro da aplica√ß√£o acesse o site MSDN.

         E quanto √† tradu√ß√£o? As tradu√ß√Ķes est√£o por nossa conta basta abrir os arquivos e alterar os valores correspondentes a tradu√ß√£o de cada um dos objetos.

√Č importante perceber que temos um ganho nesse trabalho, em algumas empresas mesmo que o idioma seja o mesmo existe a necessidade de ter nomes diferentes. Vamos a tradu√ß√£o, abaixo segue as imagens da tradu√ß√£o em portugu√™s, ingl√™s e na seq√ľ√™ncia em espanhol.


Figura 5 - Resources em Inglês [US]


Figura 6 - Resources em Espanhol - [AR]

 

Após traduzir, basta configurar para a nossa aplicação rodar.

 

Fazendo funcionar

Antes de fazer o ‚Äúmilagre da tradu√ß√£o‚ÄĚ vamos rodar a nossa aplica√ß√£o no Windows em Portugu√™s teremos um retorno parecido com a imagem abaixo.


Figura 7 - O aplicativo em Português

 

Para rodarmos a nossa aplica√ß√£o no idioma ingl√™s americano vamos ter que alterar as permiss√Ķes do browser, para isso o primeiro passo √© acessar o menu Op√ß√Ķes da Internet do site.


Figura 8 - Op√ß√Ķes da Internet

 

Na tela que irá abrir vamos acessar a guia Geral e a opção Idiomas.


Figura 9 ‚Äď Idiomas

 

Na tela de idiomas que irá aparecer (se estiver utilizando o Windows em português) irá aparecer uma tela como a que segue.


Figura 10 - Preferência de Idioma

 

Nesta tela teremos a oportunidade de adicionar o idioma de prefer√™ncia, para isso basta acionar o bot√£o Adicionar e escolher o idioma Ingl√™s (Estados Unidos) ‚Äď [en-US] agora basta selecionar o idioma Ingl√™s como o primeiro da sua lista e confirmar.


Figura 11 - Selecionando o idioma Inglês [US]


Figura 12 - Definindo com o padr√£o

 

Ap√≥s fazer as devidas confirma√ß√Ķes basta recarregar a p√°gina, pressionando a tecla F5 que a ‚Äúmagia‚ÄĚ est√° feita.


Figura 13 - Aplicação atualizada

 

         E para o idioma Espanhol da Argentina vamos utilizar o mesmo processo, por√©m o idioma a ser selecionado √© Espanhol (Argentina) [es-AR].


Figura 14 - Idioma Espanhol [AR]

 

Conclus√£o

         Esse artigo demonstra como √© f√°cil criar aplicativos multi-idiomas com o .NET Framework utilizando recursos b√°sicos e poucos comandos. Existem diversos recursos que n√£o abordei neste artigo, mas vale mencionar para futuras pesquisas como, por exemplo, o uso de Threads com CurrentCulture e CurrentUICulture.