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:奇妙な観察
omnifacesのようなel関数を使用するof:formatDate
と、正しい(en)言語でデータが取得されます。