Segue abaixo meus arquivos:
messages_pt_BR.properties
label.pt_BR = Brasil
label.en_US = Estados Unidos
messages_en_US.properties
label.pt_BR = Brazil
label.en_US = United States
Idioma
public enum Idioma {
PT_BR("pt_BR"), EN_US("en_US");
private String descricao;
private Idioma(String descricao) {
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
}
IdiomaController
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import br.com.projeto.model.Idioma;
import br.com.projeto.util.ConstantesUtil;
@ManagedBean
@SessionScoped
public class IdiomaController {
private String idioma = FacesContext.getCurrentInstance().getViewRoot()
.getLocale().toString();
private List<Idioma> idiomas;
public String getIdioma() {
return this.idioma;
}
public void setIdioma(String idioma) {
this.idioma = idioma;
}
public List<Idioma> getIdiomas() {
if (idiomas == null) {
idiomas = new ArrayList<Idioma>();
for (Idioma idioma : Idioma.values()) {
idiomas.add(idioma);
}
}
return idiomas;
}
public void setIdiomas(List<Idioma> idiomas) {
this.idiomas = idiomas;
}
public String alterarIdioma(Idioma idioma) {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot viewRoot = context.getViewRoot();
viewRoot.setLocale(new Locale(idioma.getDescricao()));
this.idioma = idioma.getDescricao();
return ConstantesUtil.PAGINA_INICIAL;
}
}
index.xhtml
<c:forEach var="idioma" items="#{idiomaController.idiomas}">
<h:commandLink action="#{idiomaController.alterarIdioma(idioma)}">
<h:graphicImage id="#{idioma.descricao}" value="/resources/imagens/#{idioma.descricao}.png" />
<p:tooltip for="#{idioma.descricao}" value="#{i18n['label.pt_BR']}" />
</h:commandLink>
<p:spacer width="5" />
</c:forEach>
Como faço para no lugar de #{i18n[‘label.pt_BR’]} eu pegar dinamicamente o valor contido em #{idioma.descricao}?
Tentei fazer algo como:
#{i18n['label.' + {idioma.descricao}]}
Mas sem sucesso.
Alguém sabe como resolver isso da melhor forma?