Compartilhar via


ASP.NET MVC – Globalizando aplicações (pt-BR)

Introdução

O ASP.NET MVC, assim como boa parte dos produtos da Microsoft, foi criado em Inglês (Novidade hein), e sendo assim, as vezes nos deparamos com mensagens que para nossos usuários (PT-BR) não são interessantes.

As validações com DataAnnotations são fáceis e simples de utilizar, mas na outra mão, temos suas mensagens de retorno, como “The field {1} is required.” e assim por diante.

Neste post, abordarei algumas soluções para globalizar aplicações ASP.NET MVC sem muito esforço.

Tudo começa no Web.Config

Globalizar uma aplicação na plataforma .NET começa pela adição da TAG Globalization no arquivo de configuração Web.Config.

Esta tag possui conhecidos parâmetros:

  • Culture – Cultura da aplicação (PT, EU, US)
  • uiCulture – Cultura da interface (PT-BR, EU, US)
  • EnableClientBasedCulture - Obtém ou define um valor indicando se as propriedades Culture e UICulture devem se basear no valor do AcceptLanguage, que é enviado pelo cabeçalho do browser.

Esta propriedade deve ser definida entre as tags System.Web no arquivo Web.Config, conforme imagem abaixo.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb.png

Existem vários tutorias sobre como globalizar aplicações ASP.NET Web Forms, este é um bom exemplo: http://msdn.microsoft.com/en-us/library/bz9tc508.aspx.

Globalizando decimais

Nosso primeiro desafio é globalizar números decimais, que neste caso aceitam somente ponto “.” como casa decimal, e necessitamos de vírgula “,”.

A figura abaixo mostra o erro, onde é exibida uma mensagem mesmo o número estando correto (Para o padrão Brasileiro).

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb1.png

Este erro pode ser contornado ao adicionar um JavaScript que extende os validation methods do jQuery, permitindo o uso de vírgula “,” ao invés de ponto “.”.

Infelizmente, o site de plugins do jQuery está fora, impossibilitando o download deste script: http://archive.plugins.jquery.com/node/8/release

Fique à vontade em baixar o arquivo do source no fim deste artigo.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb2.png

Com o arquivo “methods_pt.js” incluso na pasta Scripts da aplicação, é só fazer referência ao mesmo sempre que utilizar o jQuery Unnobstrutive, como nas páginas Create e Edit.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb3.png

Deste modo, já podemos utilizar decimais “abrasileirados”.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb4.png

Mas ainda temos o problema da mensagem em inglês, caso um valor com “.” seja digitado.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb5.png

Infelizmente, a única forma que encontrei para resolver este problema, foi mediante um regular expression, que só permite números.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb6.png

Deste modo, agora temos a mensagem agora está em portugês, como definida nas anotações da propriedade.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb7.png

Pronto, decimais globalizados!

Utilizando Resources com DataAnnotations

Em alguns casos, você pode querer utilizar os bones e velhos Resources, que são arquivos onde mapeamos mensagens a serem substituidas em tempo de execução, justamente para globalização de aplicações.

Para este exemplo criei um arquivo chamado DataAnnotations.resx na pasta App_GlobalResources da aplicação, e nele adicionei duas strings.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb8.png

A primeira chave, o “LidoDoResource” é uma palavra não reservada, que utilizarei para leitura nas anotações.

Já a palavra PropertyValueInvalid é uma palavra reservada, que toda vez que um valor inválido, para uma data por exemplo, for inserido, esta mensagem será retornada.

Então, no arquivo Global.asax, definimos um binder para que as requisições utilizem o Resource que criamos.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb9.png

Para utilizar os resources criados nas anotações, basta utilizar as propriedades ErrorMessageResourceName e ErrorMessageResourceType.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb10.png

O resultado é que agora ele lê a mensagem direto do Resource.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb11.pnghttp://andrebaltieri.files.wordpress.com/2011/12/image_thumb12.png

No caso do resource PropertyValueInvalid, este processo ocorre automaticamente.

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb13.png

http://andrebaltieri.files.wordpress.com/2011/12/image_thumb14.png

Conclusão

Globalizar aplicações sempre desprenderá um esforço extra, porém temos alguns meios de minimizar isto, como mostrado neste post.

A questão dos decimais no ASP.NET MVC também é algo que irrita um pouco, mas como vimos pode ser facilmente contornado com um JavaScript.

Downloads

http://files.insidedotnet.com.br/IE7Tests.zip

Referências

Using MVC 3 with non-English Locales
http://blogs.msdn.com/b/rickandy/archive/2011/02/17/using-mvc-3-with-non-english-locales.aspx

How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization
http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

André Baltieri
MTAC - Microsoft Technical Audience Contributor
MSN:
andrebaltieri@hotmail.com | Twitter:
@andrebaltieri
Blog: http://andrebaltieri.wordpress.com

Inside .NET Users Group Leader
http://www.insidedotnet.com.br/