Skip to content

Desenvolva aplicações web com suporte multi-idioma

15 de outubro de 2009

Estou em uma nova fase da minha vida profissional,  aprendendo um pouco de ASP.NET, Jquery, enfim, tentando ser uma Front End completa. Estou gostando até, tenho aprendido bastante coisa. Afinal, acho que um HTMLer hoje em dia tem que ser um Front End completo, um desenvolvedor de interface. Enfim, isso fica em algum outro post. Hoje venho apresentar alguma coisinha que aprendi em ASP.NET e achei válido, pra colocarmos nosso site/sistema e vários idiomas.

Utilizando Resources

Habitualmente, as aplicações usam imagens e strings como ícones para barras de ferramentas ou menus, texto de menus e texto de labels. Alterar estes strings e imagens pode ser realmente “feio” e trabalhoso se você os colocou diretamente no código-fonte. Para alterar estes strings e imagens da forma mais fácil possível sem ter que procurá-los e alterá-los diretamente em seus códigos-fontes, você pode colocá-los em arquivos separados e então mudá-los em um único local.

O Framework .NET e o CLR (Common Language Runtime) oferecem grande apoio e este tipo de abordagem através da utilização de embebed resources (recursos embutidos).

O principal uso de resources é para localização. Utilizando arquivos de resource, você pode definir valores para as principais propriedades dos controles (como o text de um controle label) em diferentes arquivos – um para cada idioma que sua aplicação tenha suporte. Cada um destes resources contém strings (pares: chave/valor) para as propriedades localizadas em cada controle traduzido dentro do idioma correspondente.

Os arquivos de resource também podem ser usados com outra finalidade, porém não irei discutí-las neste momento.

Os conteúdo destes resources ficam armazenados habitualmente em arquvos .resx, que nada mais são do que arquivos XML contendo valores strings ou referência a arquivos externos. Ao compilar sua aplicação esses arquivos (strings e referências) são adicionados junto com o binário de sua aplicação.

Existem dois tipos de arquivos de resource:Local e Global que estão descritos abaixo:

Local Resources

Os resources locais são específicos para uma única página web e devem ser usados apenas para provê versões da página em diferentes idiomas.

Os resources locais devem ser armazenados no subdiretório App_LocalResources localizado dentro do mesmo diretório da página web, ou seja, deve-se existir um subdiretório App_LocalResources em cada diretório.

Os arquivos de resource são nomeados utilizando o formato: [.idioma].resx . Abaixo um exemplo de arquivos de resource válidos para diferentes idiomas para a página Default.aspx:

Default.aspx.resx – Arquivo base do resource, este arquivo será utilizado quando nenhum outro idioma for encontrado.

Default.aspx.de.resx – Resource para Alemão (A abreviatuta para Alemão é de).

Default.aspx.en.resx – Resource para o idioma inglês. (abreviatura para inglês é en).

Default.aspx.pt-BR .resx – Resouce para idioma Português (Brasil) especificamente (a abreviatura para o idioma português usado no Brasil é “pt-BR”)

Como o propósito de nossa aplicação é utilizar o recurso de multi-idiomas em todo o site não vamos utilizar resources do tipo local.

Global Resources

Os resources globais podem ser lidos de qualquer página ou código no web site. Você deve utilizar apenas os resources globais quando precisar acessar um único resource em múltiplas paginas web. Os resources globais devem ser armazenados no diretório App_GlobalResources na raiz da aplicação.

Os resources globais devem ser nomeados usando o formato [.idioma].resx. Abaixo um exemplo de arquivos de resources globais válidos:

MeuResource.resx – Arquivo padrão de resource. Será usado quando nenhum arquivo de resouce for localizado para o idioma atual.

MeuResource.en-US.resx – Arquivo de Resource para o idioma IngLês – Estados Unidos.

MeuResource.it-IT.resx – Arquivo de Resource para o idioma italiano –Itália.

Usar resources locais para definir automáticamente os valores dos controles é chamado de “implicit localization”. Através da “explicit localization” você define as propriedades dos controles manualmente associando-os com os arquivos de resource globais. o ASP.NET então automáticamente provê a tradução cultural para os usuários finais.

Para utilizar a localização explícita (explicit localization), crie primeiro um arquivo padrão de resource e então crie os arquivos de resource para cada idioma individualmente. Finalmente, associe as propriedades dos controles para os resources.

Após a descrição de o que é, e como funciona um arquivo de resource, vamos finalmente começar a criação de nossa aplicação.

No nosso exemplo, vamos utilizar os idiomas: Alemão, Francês, Inglês, Italiano e claro o nosso Português.

Para saber o código identificador de cada idioma, acesse a lista de identificadores aqui.

Criação dos arquivos de Resource Globais.

Para criar um arquivo de resource global siga os passos abaixo:

  1. No Solution Explorer, clique com o botão direito do mouse na raiz do web site e então clique em Add ASP.NET Folder e depois em App_GlobalResources.
  2. Clique com o botão direito do mouse em App_GlobalResources e então clique em Add New Item.
  3. Na tela Visual Studio installer templates, clique em Resource File.
  4. Na caixa de texto Nome, digite qualquer nome que queira utilizar seguido da extensão .resx. (No nosso exemplo usamos Idioma.resx).
  5. Dê um duplo clique no novo resource para abri-lo no Visual Studio. Será exibido uma tabela. Adicione valores para o idioma e então clique em Salvar.
  6. Copie e cole o arquivo de resouce para criar outros arquivos em diferentes idiomas. Para cada idioma adicione o identificador imediatamente antes da extensão .resx. Por exemplo, para o idioma espanhol, o arquivo deverá ser nomeado para Idioma.es-ES.resx.

Associando as propriedades do controle com o resource

Assim que os arquivos de resource foram definidos, você pode associar as propriedades do controle (como Label.Text) com o resource global e automaticamente o ASP.NET irá exibir o texto correto para o idioma do usuário.

Para associar as propriedades do controle com o resource global, adicione a o código <%$ Resource:ClassKey, ResourceKey %>. na propriedade que deseja utilizar o arquivo de resource.

Ex:

<asp:Label ID=”lblExemplo” runat=”server” Text=” <%$ Resources:Idioma,TextoExemplo %>”> </asp:Label>

Caso queira alimentar a propriedade programaticamente, siga o exemplo abaixo:

lblExemplo.Text = Resources.Idioma.TextoExemplo;

Se as propriedades do resource não estiverem disponível em tempo de desenvolvimento, você pode usar a função GetGlobalResourceObject, como abaixo:

lblExemplo.Text = GetGlobalResourceObject(”Idioma”, “TextoExemplo”).ToString();

Definindo a cultura (idioma) atual

É possível definir dois tipo de propriedades para definir a cultura, são elas:

Culture: Determina o resultado de funções dependentes de cultura, como formatos de datas, números e moeda. Você só pode definir esta propriedade usando o formato linguagem-região (como pt-BR) não é possível definir a propriedade apenas com a linguagem (pt).

UICulture: Determina qual cultura será carregada na página. Você pode definir apenas a linguagem (pt).

Para definir estas propriedades, você deve sobrescrever o método InitializeCulture. Após definir as propriedades Culture e UICulture, você deve chamar o método base.InitializeCulture.

No nosso exemplo, criamos uma página base (PageBase) onde sobrescrevemos o método InitializeCulture:

protected override void InitializeCulture()

{

string c = Idioma;

UICulture = c;

Culture = c;

base.InitializeCulture();

}

Com isso você já pode utilizar o recurso multi-idioma em seus projetos web.

Em nosso exemplo, definimos uma master page com um dropdown onde é possível alterar o idioma da página em tempo de execução.

Logo abaixo, o link com o código-fonte completo de nossa aplicação exemplo com suporte multi-idioma.

Download: GlobalizationExample.rar

Citação do Blog: http://roniedias.wordpress.com/2009/04/03/globalization-desenvolva-aplicacoes-web-com-suporte-multi-idioma/

Bom pessoal, por hoje é só.. Tenho mais coisas pra comentar do que venho aprendendo.. em breve posto aqui..

No comments yet

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: