Globalizando sua aplicação com ASP.NET 2.0

 

Bom neste artigo vamos falar sobre globalização algo muito comum em aplicações web, já que com este recurso é possível internacionalizar sua aplicação, ou seja, determinar a língua corrente da sua aplicação por usuário.

 

Este recurso já existia na versão anterior do ASP.NET, mas felizmente como de costume a Microsoft implementou alguns recursos interessantes e úteis nesta nova versão do ASP.NET, como pode ser ver na Tabela 1.

 

Recurso

Definição

Auto detecção da cultura

Para adaptar a cultura da aplicação de forma rápida através de informações enviadas do browser.

Geração de Resources locais

Possibilita a geração automática de resources específicos por página.

Expressões declarativas implícitas e explicitas

Possibilitam definir sua aplicação como multilíngual sem a necessidade codificar a busca e a substituição dos dados conforme a cultura do usuário corrente.

 

Essas são as principais mudanças em relação a este recurso na versão 2.0 do ASP.NET.

 

Detecção automática da cultura

Na versão anterior do ASP.NET 1.x, onde o programador já podia utilizar o recurso de globalização para definir a cultura do sistema a partir de dados do usuário  corrente, como por exemplo recuperar através do objeto Request o qual fornece através da propriedade UserLanguages[0] a cultura default, além desta técnica outras formas par detectar a cultura do usuário corrente são utilizadas mais não é o fosse deste artigo comentar tais técnicas. Felizmente nesta versão do ASP.NET foi implementada uma forma automaticamente de detectar a cultura do usuário corrente a partir das configurações do seu Browser.

 

A Listagem 01 ilustra quão simples se tornou a implementação da globalização automática em sua aplicação web ASP.NET.

 

<%@ Page Culture="auto:pt-BR" UICultura=”auto” %>

Listagem 01. Defini a cultura utilizada no site.

 

Como podemos ver na listagem 01 é definido na diretiva page da sua página a cultura como auto isso significa que a detecção da cultura deve ser feita pelo próprio ASP.NET que utilizará as configurações do Browser do usuário corrente. Podemos notar que seguido do parâmetro auto neste exemplo foi definido uma cutlura a qual será utilizada caso automaticamente não seja possível definir a cultura do usuário corrente, então neste caso será utilizada a cultura padrão que conforme ilustra a listagem 01 é a cultura pt-BR. Um ponto que considero importante é que apesar de existir uma forma automática de se detectar a cultura do usuário é preciso criar os arquivos de recursos para cada cultura a qual o nosso sistema dará suporte. E o padrão na nomenclatura que é extremamente importante para que o arquivo de recurso seja carregado continua sendo o mesmo, conforme abaixo:

 

nome.[cultura].resx

 

A definição da globalização pode ser feita tanto por página como mostra a listagem 01 como pode ser feita no arquivo de configurações, conforme listagem 02.

 

<globalization culture="auto" uiCulture="auto"/>

Listagem 02. Definição da cultura de forma global através do arquivo de configurações da aplicação.

 

Uma coisa que eu acho muito importante é que o programador ou responsável por desenvolver algo saiba o que esta fazendo e o porquê de tudo o que esta sendo feito e por isso acho que é interessante explicar duas propriedades importantes para implementação da globalização.

·         Culture esta propriedade é responsável por definir o padrão na apresentação de datas, moedas, números e formatação em geral;

·         UICulture esta propriedade é responsável por gerenciar o carregamento dos arquivos de recursos.

 

Geração de Resources locais

Agora também contamos com outro recurso que é a geração automática do arquivo de recursos. Para utilizá-lo basta seguir os passos abaixo:

·         Dentro da página para a qual deve ser gerado o arquivo de recursos, acesse o menu Tools(Ferramentas);

·         No menu que foi aberto selecione a opção Generate Local Resource(Gerar Resource Local).

 

Pronto agora se você acessar o Solution Explorer verá que uma nova pasta foi criada e um novo arquivo foi adicionado a ela. Este arquivo deve estar nomeado conforme o padrão nomedapagina.aspx.resx.

 

Feito isso basta que você copie o arquivo e o renomeie adicionando a cultura ao seu nome conforme foi mencionado anteriormente.

 

Alem de gerar o arquivo o ASP.NET faz também automaticamente a relação entre os controles da página e os valores do arquivo de recursos, conforme mostra a Listagem 03.

 

<asp:Label ID="teste" runat="server" meta:resourcekey="testeResource1"></asp:Label>

Listagem 03. Ilustra uma expressão implicita para atribuir ao controle o valor contido no arquivo de recurso.

 

Expressões declarativas

O terceiro, porém não menos importante recurso implementado é a utilização de expressões para se relacionar o controle ao arquivo de recursos.

 

Estas expressões são divididas em 2, conforme Tabela 02.

 

Explicitas

Esta expressão é usada para definir o valor de propriedades de exibição de dados dos controles a partir de um arquivo de recursos este arquivo se encontra na pasta App_GlobalResources. São expressões com uma sintaxe concisa e declarativa.

<%$ Resources:[filename prefix,]resource-key %>

O parâmetro filename é opcional e representa o nome do arquivo a ser utilizado e o parâmetro resource-key representa a chave do arquivo de recursos.

Implícitas

Esta expressão é usada para definir o valor de propriedades de exibição de dados dos controles a partir de um arquivo de recursos este se encontra na pasta App_LocalResources. São expressões com uma sintaxe declarativa e concisa, assim como as expressões explicitas. Porém neste caso as expressões são diretamente ligadas a um arquivo de recurso especifico, pois como podemos notar que diferentemente das expressões explicitas onde podíamos especificar o arquivo de recuso onde os dados deveriam ser carregados neste tipo de expressão podemos apenas definir a chave.

<asp:Label ID="Label1" runat="server" meta:resourcekey="resource-key-prefix" />

O parâmetro resource-key-prefix representa a chave do arquivo de recursos

 

 

Como o que já sabemos fica fácil criar uma aplicação globalizada.

 

Abraços,

Diego Dias