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.