将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)语言检索数据。
答案 0 :(得分:0)
英文属性文件必须命名为msg_en.properties
,遇到同样的问题。