将 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
以正确的(英文)语言检索数据。