Internacionalizacion en JSF (Primefaces,properties)
En este blog hablaremos de la intercionalizacion de una pagina web utilizando properties de una manera sencilla pero eficaz, para ello en el ejemplo que realize utilizo jsf junto con el framework primefaces.
Esta es la clase que se utiiza para manejar los eventos mediante un selectOneMenu y donde definimos los lenguajes a utilizar para el cambio
de idioma de la pagina.
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
@ManagedBean(name="idioma")
@SessionScoped
public class LenguageBean implements Serializable{
private static final long serialVersionUID = 1L;
private String localeCode;
private static Map<String,Object> countries;// creamos un map donde esperamos una cadena y un objeto
static{
countries = new LinkedHashMap<String,Object>();
Locale espanol=new Locale("ES");
countries.put("Español", espanol);
countries.put("English", Locale.ENGLISH); // donde English es el valor que aparecera en el selectOnemenu y el objeto en que se convertira o traducira.
}
public Map<String, Object> getCountriesInMap() {
return countries;
}
public String getLocaleCode() {
return localeCode;
}
public void setLocaleCode(String localeCode) {
this.localeCode = localeCode;
}
public void countryLocaleCodeChanged(ValueChangeEvent e){
String newLocaleValue = e.getNewValue().toString();
for (Map.Entry<String, Object> entry : countries.entrySet()) {
if(entry.getValue().toString().equals(newLocaleValue)){
FacesContext.getCurrentInstance()
.getViewRoot().setLocale((Locale)entry.getValue());
}
}
}
}
Dentro del documento xhtml creamos el selectOneMenu como se muestra y posteriormente tambien creamos un label que es el componente
que se traducira.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Manejo de Idiomas</title>
</h:head>
<h:body>
<div id="top" class="top">
<ui:insert name="top">
<h:form>
<!-- <p:selectOneMenu/> nombre del componente de primefaces-->
<p:selectOneMenu value="#{language.localeCode}" onchange="submit()"
valueChangeListener="#{language.countryLocaleCodeChanged}">
<f:selectItems value="#{language.countriesInMap}" />
</p:selectOneMenu>
</h:form>
</ui:insert>
</div>
<div id="content" class="center_content">
<ui:insert name="content">
<h:form id="frm">
<h:outputText value="#{msg.saludo}"/> <!-- archivo que se traducira donde msg es el nombre de la variable que se define en el faces-config y saludo
es la variable que contiene el nombre en español e ingles-->
<!-- por ejemplo si nosotros queremos tradudir el nombre de un CommandButton que se encuentra dentro de un panel solo seria de la siguiente manera-->
<p:panel header="#{msg.nombredelpanel}">
<h:panelgrid columns="2">
<h:outputLabel value="#{msg.nombredellabel}" />
<p:inputtext/>
<p:commandButton value="#{msg.nombredelboton}"/>
</h:panelgrid>
</p:panel>
</h:form>
</ui:insert>
</div>
</h:body>
</html>
Aqui se muestra el archivo de configuracion del faces-config.xml
donde com.prueba.mensajes es la ruta donde se encuentra nuestros properties con el nombre mensajes.
por ejemplo
mensajes.properties // que contiene archivos en español
mensajes_en.properties // archivos en ingles.
y
msg nombre de a variable que se utiliza en el documento xhtml.
<locale-config>
<default-locale>es</default-locale>
<supported-locale>fr</supported-locale>
</locale-config>
<resource-bundle>
<base-name>com.prueba.mensajes</base-name>
<var>msg</var>
</resource-bundle>
</application>
saludos.
gururcitos (-__-<}
- joseguru's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios recientes
hace 1 semana 2 días
hace 1 semana 2 días
hace 1 semana 2 días
hace 25 semanas 5 días
hace 27 semanas 11 horas
hace 33 semanas 5 días
hace 1 año 26 semanas
hace 2 años 38 semanas
hace 2 años 42 semanas
hace 2 años 49 semanas