Internacionalización JSF 2.0

Tengo una aplicación en la que estoy tratando de establecer una disponibilidad de internacionalización.

Este es mi caras-config.xml:

<application>
    <locale-config>
        <default-locale>lt</default-locale>
        <supported-locale>en</supported-locale>
        <supported-locale>de</supported-locale>
    </locale-config>
    <resource-bundle>
        <base-name>application</base-name>
        <var>msg</var>
    </resource-bundle>
</application>

Tengo tres archivos de propiedades:

application_lt.properties
application_en.properties
application_de.properties

La clase de frijol:

@ManagedBean(name = Beans.LOCALE_BEAN)
@SessionScoped
public class LocaleBean extends BaseBean implements Serializable {

    private String lang;

    public String getLang() {
        return lang;
    }

    public void setLang(String lang) {
        this.lang = lang;
    }
}

La clase de acción:

@ManagedBean(name = "localeAction")
@SessionScoped
public class LocaleAction extends BaseAction implements Serializable {

    public void changeLocale() {
        LocaleBean localeBean = getBean(Beans.LOCALE_BEAN);
        String language = localeBean.getLang();
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(language));
    }

}

Para cambiar la configuración regional, estoy usando commandLink:

<h:commandLink action="#{localeAction.changeLocale}">
    <f:setPropertyActionListener target="#{localeBean.lang}" value="en"/>
    English
</h:commandLink>

<h:commandLink action="#{localeAction.changeLocale}">
    <f:setPropertyActionListener target="#{localeBean.lang}" value="lt"/>
    Lithuanian
</h:commandLink>

Primer problema:

He definido que mi configuración regional predeterminada es "lt": lt. ¿Por qué cuando inicio mi aplicación, los valores de texto se cargan desde application_en.properties y no desde application_lt.properties?

Segundo problema:

Cuando ejecuto la acción CommandLink, la configuración regional cambia según la configuración regional que haya seleccionado. Pero ejecutar la acción fue un clic, el segundo clic en cualquier otro enlace de la aplicación también está bien y cuando hago clic en cualquier enlace de la aplicación por tercera vez, los valores de texto se encuentran en application_en.properties. Parece que la configuración regional cambia de alguna manera...

¿Alguna idea?

preguntado el 03 de mayo de 12 a las 21:05

<f:setPropertyActionListener... no es necesario en JSF 2.0, ya que puede llamar a métodos con argumentos. -

2 Respuestas

He definido que mi configuración regional predeterminada es "lt": lt. ¿Por qué cuando inicio mi aplicación, los valores de texto se cargan desde application_en.properties y no desde application_lt.properties?

Aparentemente porque su navegador se identifica con locale en como lugar preferido por el Accept-Language encabezado de solicitud. JSF lo usará automáticamente porque se encuentra entre los idiomas admitidos. Deberá cambiar el idioma preferido en la configuración del navegador.


Cuando ejecuto la acción CommandLink, la configuración regional cambia según la configuración regional que haya seleccionado. Pero ejecutar la acción fue un clic, el segundo clic en cualquier otro enlace de la aplicación también está bien y cuando hago clic en cualquier enlace de la aplicación por tercera vez, los valores de texto se encuentran en application_en.properties. Parece que la configuración regional cambia de alguna manera.

Aparentemente cambiaste la vista. Su método de acción solo cambia la configuración regional de la vista actual. Debe asegurarse de establecer la configuración regional desde el LocaleBean en la <f:view> de la plantilla maestra o al menos todas las vistas.

<f:view locale="#{localeBean.lang}">

Ver también:

contestado el 23 de mayo de 17 a las 11:05

Sí, tiene usted razón. he puesto el a la plantilla maestra y funcionó. Y para el primer problema, le di a mi variable "lang" un valor "lt" y ahora, cuando la aplicación se inicia, todo funciona como lo necesitaba. ¡Gracias! - Paulius Matulionis

Primer problema Cuando se trata de la configuración regional, JSF lee el encabezado HTTP Accept-Language del navegador del cliente y utiliza la configuración regional preferida. Si no es compatible con la aplicación (configuración de face-config), utiliza la segunda configuración regional preferida del encabezado HTTP, etc. Si ninguna de las configuraciones regionales preferidas por el cliente es compatible con la aplicación, entonces la configuración regional predeterminada de faces-config.xml se usa Como resultado, puede suceder que la configuración regional predeterminada de faces-config.xml simplemente se ignore.

Por lo tanto, parece que el navegador de su cliente puede enviar la configuración regional en inglés en el encabezado HTTP Accept-Language.

Segundo problema. Esto sucede porque la configuración regional predeterminada se establece por solicitud, no por sesión de usuario. Echa un vistazo a esto pregunta para ver cómo superar esto.

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.