我用JSF 2.0做了一个web应用程序。它支持德语(默认)和英语(由在http-header中发送的语言选择)。
在我的本地服务器(Tomcat 6.0)上,自动语言选择是正确的,如果我将"german"设置为最高优先级,那么应用程序就是德语。英文也一样。
但是现在我把它部署到我的web服务器(Tomcat 6.0后面的Apache web服务器,使用ModJk),现在它只有英文。但是http头仍然是一样的:
Accept-Language: de-de,en-us;q=0.8,de;q=0.5,en;q=0.3
(Fetched from Firebug)
my faces-config.xml中的语言包条目如下:
<application>
<locale-config>
<default-locale>de</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
<resource-bundle>
<base-name>de.citkomm.tbm.locale.Lang</base-name>
<var>lang</var>
</resource-bundle>
</application>
"朗文件。和"Lang_en. properties"。de.citkomm.tbm.locale中的"属性"已正确部署。
这是Apache + ModJk + Tomcat 6.0的问题还是配置错误?有人知道为什么Tomcat选择了错误的语言吗?
提前感谢!
真奇怪…我认为mod_jk不应该影响这一点,因为您验证HTTP头仍然包含正确的Accept-Language
。为了安全检查,如果你在同一个内部网络,那么你可以尝试直接访问Tomcat web应用程序,并跳过Apache web服务器,但我怀疑这是问题所在。
如果您在Tomcat服务器环境中部署了任何公共库,则可能使用了JSF实现的不同版本,可能是具有国际化错误的较早版本。
我在JBoss和Glassfish等应用服务器上看到过这种情况,它们默认情况下预先打包了自己的JSF实现。同样,JBoss/Glassfish类加载器也优先选择了绑定的JSF实现库,而不是WEB-INF/lib
中出现的任何JSF实现。
Tomcat 6默认情况下不这样做,但我仍然怀疑是某种类加载问题。再次检查您在web服务器上的公共库和部署库,并确认那里存在正确的JSF实现。
嗯,我不知道为什么 tomcat使用我的Ubuntu服务器的环境变量,但是它确实使用了。
将LANG从"en_US。"UTF-8"到"de_DE。UTF-8",现在一切都好了。: S
谢谢!