Dúvida: Internacionalização com JSF

4 respostas
flavio-mendes

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.

4 Respostas

E

se me lembro bem, você pode usar EL no faces-config.xml para indicar o idioma, com isso pode tornar dinâmico.

LucianoM86

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/

flavio-mendes

Ok, Luciano, vou dar uma conferida neste tutorial que você me passou e postarei o que achei. Muito obrigado!

flavio-mendes

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>
Criado 30 de julho de 2012
Ultima resposta 1 de ago. de 2012
Respostas 4
Participantes 3