2

将 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>

输出:“德语”

可能是什么原因?

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

编辑:

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

Edit2:奇怪的观察

使用诸如omnifaces 之类的el 函数of:formatDate以正确的(英文)语言检索数据。

4

1 回答 1

0

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

于 2016-07-20T09:50:14.913 回答