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.
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:
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:
Simples, não? Conheça API I4JSF
Espero que tenham gostado. See ya!!!
Abraços.
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!