Top Posts

Série Spring:Spring 3 com Hibernate 3.x

Continue lendo

Internacionalização sua aplicação com JSF

Posted by camilolopes | Posted in Java, JSF | Posted on 30-08-2013

3

Olá Pessoal,

No post de hoje veremos como internacionalizar nossa aplicação JSF.  Eu acho o suporte de internacionalização do JSF muito simples e fácil. É comum você trabalhar em um projeto e o cliente falar que deseja dar suporte pelo menos a 2 idiomas: um default e +1. Veremos como preparar nossa aplicação para isso. Lets go…

Starting…

O JSF procura os arquivos de tradução em um local, que é dentro de resources / src/main/resources, então é lá que vamos colocar os .properties para cada idioma que a aplicação vai suportar. No exemplo aqui será português e inglês, portanto crie dois arquivos .properties chamado: language_en_US e language_pt_BR.  O nome language pode ser qualquer outro. O que teremos nele? Como qualquer arquivo de properties um key=value, é nele que vamos colocar a tradução da aplicação dos labels, message etc. Dentro de src/main/resources crie o seguinte package: com/camilolopes/readerweb/idiom, é onde ficarão nossos arquivos .properties. Poderia deixar na raiz, mas quis colocar em package para ficar organizado.

 

jsfinterproperties

Feito isso, abra o seu face-config.xml e faça isso dentro de application:

<locale-config>

   <default-locale>pt_BR</default-locale>

   <supported-locale>pt_BR</supported-locale>

   <supported-locale>en_US</supported-locale>

  </locale-config>

  <!– Local where is .properties –>

  <resource-bundle>

       <base-name>com.camilolopes.readerweb.idiom.language</base-name>

       <!–  variable will be used in system of context –>

       <var>language</var>

  </resource-bundle>

 

Observe que criamos uma variável. É ela que vamos usar no XHTML passando o key do .properties para que possa ser traduzido com base no idioma definido no browser.

Colocando tradução no .properties

Eu particularmente gosto muito do plugin Resource Bundle http://sourceforge.net/projects/eclipse-rbe/ , pois ele me permite de uma única vez atualizar os dois arquivos  .properties, já inserindo a tradução, veja:

 

jsfpropertiesbundle

Se você usa o Eclipse é só instalar o plugin, mas ele não está no Eclipse Market, é old school, ou seja, você vai na pasta plugin do seu eclipse e cola todo o conteúdo de plugin que está no resource bundle que você acabou de baixar.

Usando na Prática

<h:outputLabel value=“#{language[‘label.type.description’]}” for=“name” />

<h:commandButton value=“#{language[‘command.save’]}” />

 

Resultado:

jsfinterlabelenglish

 

jsfinterlabelpt

Simples, não? Conheça API I4JSF

Espero que tenham gostado. See ya!!!

Abraços.

Related Posts with Thumbnails

Comments (3)

Olá Camilo, como vai!?

Antes de tudo… Parabéns pelo seu post.

Eu estou aprendendo a cada dia esse universo Java e me simpatizei com o framework JSF por ser focado em componentes.

A minha dúvida é:

Como montar um menu dinâmico de acordo com seu perfil de acesso que que seja também configurável por um Message Bundle!?

Abraço

Rubens

Rubens,
Use SpringSecurity a versão mais recente, vc tem uma tag que permite vc colocar no se html e o conteudo dentro do bloco será renderizado apenas se o usuario logado tem permissão, ou seja, baseado em role.
flw.

Muito bom, funcionou de primeira.
Mas como eu faria para carregar o idioma conforme o usuário? Eu tenho um campo na tabela usuário para o idioma, e depois que ele loga eu gostaria que a aplicação ficasse naquele idioma… Como poderia fazer?

Obrigado!

Write a comment