jsf - 总是使用错误的语言环境

时间:2012-11-24 00:39:09

标签: jsf locale

将Glassfish 3.1.2与Mojarra 2.1.14一起使用。

我在faces-config(共享jar)中有以下配置:

<locale-config>
    <default-locale>en</default-locale>
    <supported-locale>de</supported-locale>
    <supported-locale>en</supported-locale>
</locale-config>
<resource-bundle>
    <base-name>package.messages</base-name>
    <var>msg</var>
</resource-bundle>

msg.properties - localeValue=english
msg_de.properties - localeValue=german

在下面的测试bean构造函数中正确检索默认和支持的语言环境。

无论我做什么,jsf总是选择德语信息,即使默认信息是英语。 我的jvm语言环境是德语。

测试默认区域设置:

从资源包打印值的空白页总是打印德语de值。

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </h:head>
    <h:body>
        #{msg.localeValue}
    </h:body>
</html>

输出:“德语”

测试默认区域设置:

但默认语言环境仍为en,将其保存在会话变量中并将其打印出来:

public class SessionBean
{
    private Locale locale;

    public SessionBean()
    {
        this.locale = FacesContext.getCurrentInstance().getApplication().getDefaultLocale();
    }

    public Locale getLocale()
    {
        return this.locale;
    }
}

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html">
    <f:view locale="#{sessionBean.locale}">
        <h:head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        </h:head>
        <h:body>
            #{sessionUtilsBean.locale} - #{msg.localeValue}
        </h:body>
    </f:view>
</html>

输出:“en - german”而不是“en - english”

编辑:使用当前FacesContext中的#{bean.getViewRootLocale()}检索相同的区域设置“en”。

直接使用“en”:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html">
    <f:view locale="en">
        <h:head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        </h:head>
        <h:body>
            #{msg.localeValue}
        </h:body>
    </f:view>
</html>

输出:“德语”

可能是什么原因?

我搜索了完整的项目,从未以编程方式设置视图区域设置。

修改

当我删除德语属性文件时,使用英语属性文件,站点以英语显示。

编辑2:奇怪的观察

使用像omnifaces of:formatDate这样的el函数以正确的(en)语言检索数据。

1 个答案:

答案 0 :(得分:0)

英文属性文件必须命名为msg_en.properties,遇到同样的问题。