2

Glassfish3.1.2とMojarra2.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-english」の代わりに「en-german」

編集:現在の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:奇妙な観察

omn​​ifacesのようなel関数を使用するof:formatDateと、正しい(en)言語でデータが取得されます。

4

1 に答える 1