Internacionalização de Mensagens no JavaScript
Novembro 5, 2007 at 8:14 am | In Desenvolvimento, Java, JavaScript | 9 CommentsO java fornece um excelente suporte para internacionalização de aplicações. Para conhecer mais sobre internacionalização e como implementá-la em Java, indico este excelente artigo da Caelum.
Porém, em aplicações web, o uso de javascript é inevitável, seja para deixar a aplicação mais dinâmica ou para validar o preenchimento de um formulário. Portanto é necessário que as mensagens mostradas pelo javascript também estejam internacionalizadas. Neste artigo vamos demostrar uma forma bem simples e funcional de internacionalizar o javascript.
Veja o exemplo de uma função que faz a validação de um formulário:
Este exemplo tem um grande problema: a mensagem de erro está amarrada no código de validação. O legal seria que estas mensagens estivessem internacionalizadas, ou seja, fossem recuperadas de algum arquivo de mensagens, e este é nosso objetivo.
Depois de analisarmos o problema, vamos para a solução, que basicamente pode ser divida em 3 etapas:
- ao carregar a pagina, uma requisição AJAX é feita para um servlet.
- o serlvet recupera as mensagens de acordo com o locale do usuário.
- as mensagens são retornadas para o cliente e armazenadas em memória pelo javascript.
Veja a implementação do serlvet. Basicamente ele recupera as mensagens de acordo com o locale do usuário, as transformam em um JSON que é retornado como resposta da requisição. (clique na imagem para ampliar).
Este servlet foi mapeado para a url “i18n”.
Caso tenha problemas com a acentuação das mensagens, basta alterar o content-type do response: pRes.setContentType(“text/html; charset=ISO-8859-1″);
Agora é preciso implementar o javascript que irá fazer a requisição AJAX para o servlet e tratar sua resposta.
Quando este script for carregado pelo browser, a requisição ajax será feita utilizando a função $.get(…) da biblioteca jQuery.
Quando a requisição retornar, o método initialize do bundle é invocado, recebendo como parâmetro o JSON retornado pelo servlet. Seu papel é simples, interpretar o JSON e inserir as mensagens em um array interno do objeto ResouceBundle.
Para recuperar uma mensagem do bundle, basta chamar o método get(key) .
Simples não???
Agora com a solução implementada, vamos modificar o script de validação para que ele pegue a mensagem de erro do bundle.
Podemos melhorar a nossa pequena API de internacionalização adicionando métodos para trabalhar com mensagens que esperam parâmetros, por exemplo:
invalidProtocol = O número de procolo {0} é inválido.
Veja o método get() melhorado, agora é possível passar os valores para substituir os parâmetros da mensagem.
Após esta modificação, vamos ver como fica a função que valida o formulário:
Esta foi uma solução para implementar internacionalização de mensagens no javascript. E você, como é a sua solução???
9 Comentários »
Feed RSS dos comentários deste post URI do TrackBack
Deixe um comentário
Blog no WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.







Isso já foi feito no harpia..????
o Bita consegui fazer isso..????
Comentário por Ewerton - TON Timão — Novembro 8, 2007 #
fala Ewerton, blz?
estavamos com um problema para internacionalizar as mensagens do javascript. As mensagens de interface ficam em arquivos de propriedades.
Esta solução atendeu perfeitamente as nossas necessidades.
Comentário por Marcelo Madeira — Novembro 8, 2007 #
Gostaria de obter o código de um formulário exatamente igual a esse que estou preenxendo.
Ficario grato.
No aguardo,
Caio.
Comentário por Caio Fascina — Novembro 22, 2007 #
Caio…
você quer o código deste artigo, é isso?
abraços
Marcelo
Comentário por Marcelo Madeira — Novembro 29, 2007 #
Gostaria de saber se você poderia disponibilizar o projeto.
Comentário por Marco — Junho 10, 2008 #
Olá Marco…
vou verificar se ainda tenho o código do projeto.
abraços.
Comentário por Marcelo Madeira — Junho 10, 2008 #
Bom dia,
Gostaria de saber se você poderia me explicar como funciona o trecho do codigo q vc usa “ResourceBundle.prototype.initialize” e “bundle.initialize” não entendi e não consegui encontrar uma explicação na web… implementei seu codigo e está funcinando perfeitamente mas preciso fazer uma adpatação e preciso entender como funciona a sua lógica…
Comentário por Marco — Junho 11, 2008 #
CARO COLEGA, GOSTARIA QUE VOCÊ ME ENVIASSE ESSE JAVA DO COMENTÁRIO, ESTOU PRECISANDO DE UM FORMULARIO DESSE TIPO.
OBRIGADO
Comentário por DEIVSON ALMEIDA — Outubro 30, 2008 #
esse é o jeito simples?
Comentário por Eu — Fevereiro 19, 2009 #