Componente para internacionalização de Javascript no VRaptor 3

Boa tarde a todos,

Ontem desenvolvi um esquema legal para a aplicação que estou desenvolvendo no VRaptor 3, um componente que gera os arquivos de mensagens internacionalizadas “i18n” do Javascript com base nos meus arquivos .properties do pacote ‘app.i18n‘.

Os arquivos Javascript gerados contém uma implementação de um plugin jQuery que é chamado através da chamada $.msg( chave ), logo é gerado um arquivo .JS para arquivo .properties que a aplicação tem.

Para que este novo recurso funcionasse do modo que eu queria, tive que pesquisar um pouco sobre as anotações que eu poderia adicionar na classe e nos métodos que permitisse que quando o servidor de aplicação iniciasse a minha aplicação, que o componente fosse executado e criasse ou atualizasse os arquivos de mensagens JS automaticamente. Basicamente utilizei as anotações @Component e @ApplicationScoped para a classe e @PostConstruct para o método principal da classe.

Um problema que eu achei para fazer isso foi de como achar o caminho dos arquivos .properties e o destino dos arquivos .JS a serem gerados ou atualizados, nisso recebi uma colaboração do Lucas Diedrich com um método para localizar o caminho atual da própria classe, que é o código abaixo:

Feito isso, o resto é somente lógica da aplicação pura, a sacada está também no plugin jQuery que agiliza a chamada das traduções e não deixa milhões de chaves em forma da variável na memória do navegador, o código da estrutura base do plugin está descrita abaixo:

Assim basta eu chamar qualquer mensagem a ser apresentada na aplicação através do método $.msg( chave ), não esquecendo que para funcionar precisamos incluir no HTML/JSP o nosso plugin jQuery.

Feito isso, agora é só ir trabalhando normal, criando as suas telas e mensagens nos N idiomas que a sua aplicação venha a ter, que, toda a vez que você iniciar a mesma no servidor de aplicação o componente ResourceBundleJavascriptExport irá criar ou atualizar os arquivos JS de mensagens.

Download

Está disponível lá no Github e também no vraptor-contrib, o nome do projeto é vraptor-js-i18n.

https://github.com/carlosjrcabello/vraptor-js-i18n

Ou em formato zip ou gz.

https://github.com/carlosjrcabello/vraptor-js-i18n/zipball/master

Referências

Para desenvolver o componente em si eu me bati um pouco porque não dominava algumas anotações do VRaptor 3 bem como os seus comportamentos, mas recomendo uma leitura na seção de documentação do VRaptor 3 que contém muitas dicas e exemplos prontos dos recursos oferecidos pelo VRaptor 3.

http://vraptor.caelum.com.br/documentacao/componentes/

Acho que por enquanto é só, qualquer dúvida é postar aí.

Um abraço a todos.

Blog Java