Olá Pessoal,
Objetivo deste topico
Ajudar os colegas a i18n sua aplicação com JSF. E este topico ser uma referencia para i18n em JSF. Pois mtos exemplos sempre traduziam a pagina atual e nunca toda a aplicação.
Vamos lá …
Se vc fez o exemplo do livro Core JavaServer Faces e não conseguiu …
Se vc tentou fazer uma gambiarra de usar HashMap e tbm não conseguiu …
Pois é, eu tbm tentei tudo isso e não consegui!!! Apenas era internacionalizada a pagina que esta no momento, ao mudar de pagina ele volta para a linguagem default.
Vou colocar um exemplo rapido e facil para internacionalizar sua aplicação, isso se vc utiliza JSF é claro.
ManageBean
import javax.faces.event.ActionEvent;
public class LocaleBean {
private String local = "pt_BR";
public String getLocal() {
return local;
}
public void setLocal(String local) {
this.local = local;
}
public ChangeLocaleController(){
}
public void brasilAction(ActionEvent actionEvent) {
this.local = "pt_BR";
}
public void englishAction(ActionEvent actionEvent) {
this.local = "en";
}
}
Configurar o Bean no faces-config.xml
<managed-bean>
<managed-bean-name>localeBean</managed-bean-name>
<managed-bean-class>LocaleBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Aqui vai o mais importante, na sua pagina jsf, dentro da tag f:view, temos um atributo locale, que aceita tanto um java.util.Locale quanto um String.
<f:view locale="#{localeBean.local}">
//aqui vai toda a sua pagina ....
// no meu caso eu uso layout, portanto basta adiciona-lo uma vez aqui ....
// se vc tiver varios f:view .. so adicionar locale="#{localeBean.local}" e pronto
</f:view>
Agora vc adiciona as bandeirinhas no header por exemplo e chama os metodos no bean atraves da propriedade actionListener.
Ai basta configura o MessageResources.properties e chamar a key na sua pagina.
Pronto, sua aplicação esta internacionalizada…
Espero ter ajudado e comentarios são bem vindos !
Valeu Galera