Bom dia pessoal, tudo bem?
Tenho uma dúvida sobre a questão de Internacionalização com JSF. Aprendi como criar os arquivos de propriedades e configurá-los no faces-config.xml e setar as legendas na página jsp ou xhtml. Porém gostaria de saber sobre alguma implementação que faça com que a página seja traduzida após, por exemplo, eu clicar em um link “Leia em Inglês”, recarregando a página traduzida conforme o idioma do link clicado, puxando as configurações de outro aqruivo de propriedades. Têm como alguém me ajudar com alguns trechos de código?
Obrigado.
se me lembro bem, você pode usar EL no faces-config.xml para indicar o idioma, com isso pode tornar dinâmico.
Você pode setar o locale explicitamente quando o usuário clicar no link do idioma, veja:
http://www.mkyong.com/jsf2/jsf-2-internationalization-example/
Ok, Luciano, vou dar uma conferida neste tutorial que você me passou e postarei o que achei. Muito obrigado!
Luciano, observei o seu link é bem interessante a maneira de efetuar a internacionalização via menu de seleção! Me ajudou a clarear mais o conceito. Eu acabei por fazer através de links mesmo. Segue o que eu fiz:
No faces-config.xml:
<application>
<message-bundle>meuPacote.rotulos</message-bundle>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>pt</supported-locale>
</locale-config>
</application>
<managed-bean>
<managed-bean-name>Sessao</managed-bean-name>
<managed-bean-class>meuPacote.SessaoBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Na minha Bean:
public class SessaoBean {
private String locale;
public String getLocale(){
return this.locale;
}
public void setLocale(String locale){
this.locale = locale;
}
public void setLanguage(ActionEvent event){
String localeId = event.getComponent().getId();
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot = context.getViewRoot();
viewRoot.setLocale(new Locale(localeId));
locale = localeId;
}
}
No Jsp:
<f:view locale="#{Sessao.locale}">
<f:loadBundle basename="meuPacote.rotulos" var="msgs" />
<head>
<title><h:outputText value="#{msgs.titulo}"/></title>
</head>
<body>
<h:form>
<h:commandLink id="en" action="null" actionListener="#{Sessao.setLanguage}" value="#{msgs.ingles}" /> |
<h:commandLink id="pt" action="null" actionListener="#{Sessao.setLanguage}" value="#{msgs.portugues}" /><br />
<br />
<h:outputText value="#{msgs.nome}" />
<h:inputText value="#{MeuBean.nome}" />
<br />
<h:outputText value="#{msgs.email}" />
<h:inputText value="#{MeuBean.email}" />
<br />
<h:commandButton value="#{msgs.enviar}" />
</h:form>
</body>
</f:view>