Internacionalização

Boa noite galera, :-o
Gostaria de saber se existe algum metodo em JSF que eu consiga pegar todas as linguagens(arquivos de propriedade) que minha aplicação tem, e quando eu adcionar uma nova marca no faces-config ela ja apareça neste metodo.

Desde já, Obrigado.

Tem como vc detalhar mais ??? :smiley:

Eu consegui galera !!
Mas vou explicar melhor, quero uma aplicação que me mostre todas os idiomas que ela tem, que para isso eu apenas crie um arquivo de propriedade e depois mepei no faces-config, sem que eu n mecha em nada da pagina JSF.
Bem, eu fiz assim:

Pagina JSF …

<h:form> <h:selectOneMenu value="#{aplicacaoMB.langCode}"> <f:selectItems value="#{aplicacaoMB.langCodes}"/> </h:selectOneMenu> </h:form>

Bean Gerenciado, metodo que capitura todas os idiomas …

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package beans;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;

/**
*

  • @author Lucas
    */
    @ManagedBean
    @RequestScoped
    public class AplicacaoMB {
    private String langCode;

    public AplicacaoMB() {
    }

    public void testar() throws ValidatorException{
    FacesContext context = FacesContext.getCurrentInstance();
    String textoMensagem = carregarMensagemDeArquivo(“SUCESSO”);
    context.addMessage(“form:campo1”, new FacesMessage(FacesMessage.SEVERITY_ERROR, null, textoMensagem));
    }

    public void alterar() throws ValidatorException{
    FacesContext context = FacesContext.getCurrentInstance();
    String textoMensagem = carregarMensagemDeArquivo(“ALTERADO”);
    context.addMessage(“form:campo1”, new FacesMessage(FacesMessage.SEVERITY_ERROR, null, textoMensagem));
    }

    public String carregarMensagemDeArquivo(String chave) {
    //código pra carregar e retornar texto da chave do arquivo Mensagens
    FacesContext context = FacesContext.getCurrentInstance();
    Locale myLocale = context.getViewRoot().getLocale();
    String text = LocaleHelper.getLocaleString(context.getApplication().getMessageBundle(), chave , null, myLocale);
    return text;
    }

    public String getLangCode() {
    return langCode;
    }

    public void setLangCode(String langCode) {
    this.langCode = langCode;
    }

    public List getLangCodes() {
    List items = new ArrayList();
    Application app = FacesContext.getCurrentInstance().getApplication();
    Locale locale = app.getDefaultLocale();
    items.add(new SelectItem(locale.toString()));
    Iterator iter = app.getSupportedLocales();
    while (iter.hasNext()) {
    locale = iter.next();
    items.add(new SelectItem(locale.toString()));
    }
    return items;
    }

    public String mudarIdioma(Locale locale) {
    FacesContext fc = FacesContext.getCurrentInstance();
    fc.getViewRoot().setLocale(locale);
    return “”;
    }

    public String espanhol() {
    Locale locale = new Locale(“es”, “ES”);
    mudarIdioma(locale);
    return null;
    }

    public String portugues() {
    Locale locale = new Locale(“pt”, “BR”);
    mudarIdioma(locale);
    return null;
    }

    public String italiano() {
    Locale locale = new Locale(“it”, “IT”);
    mudarIdioma(locale);
    return null;
    }

    public String frances() {
    Locale locale = new Locale(“fr”, “FR”);
    mudarIdioma(locale);
    return null;
    }

}
[/code]

:roll:

Abraços e desculpe ai se não soube explicar bem, mas fica ai para quem quiser.
:smiley:

Esqueci de comentar que o metodo que pega os idiomas é o “getLangCodes”

Gostaria de saber de ond importa a classe LocaleHelper, que faz a chamada estática ao método getLocaleString(…)

Obrigado!

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package beans;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
*

  • @author Convidado
    */
    public class LocaleHelper {

    protected static ClassLoader getClassLoader(Object defaultObject){
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    if(loader == null){
    loader = defaultObject.getClass().getClassLoader();
    }
    return loader;
    }

    public static String getLocaleString(String bundle,String key,Object parameters[],Locale locale){
    String text = null;
    ResourceBundle resourceBundle = ResourceBundle.getBundle(bundle, locale, getClassLoader(parameters));
    try{
    text = resourceBundle.getString(key);
    } catch(MissingResourceException e){
    text = “Erro”;
    }
    if(parameters != null){
    StringBuffer stringBuffer = new StringBuffer();
    MessageFormat messageFormat = new MessageFormat(text, locale);
    text = messageFormat.format(parameters, stringBuffer , null).toString();
    }
    return text;
    }
    }
    [/code]

Cara vc cria essa classe aqui resolve, muito dos seus problemas, mas so nun me peça para lhe explicar :roll:

Meu professor me disse o seguinte: “Funciona? Então tá blz”

Flws