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: :smiley:](https://www.guj.com.br/images/emoji/twitter/smiley.png?v=6)
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: :smiley:](https://www.guj.com.br/images/emoji/twitter/smiley.png?v=6)
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