Java JSF2.0:部署到另一台服务器后选择了错误的语言

Java JSF2.0:部署到另一台服务器后选择了错误的语言,java,apache,jsf,tomcat,Java,Apache,Jsf,Tomcat,我用JSF2.0制作了一个web应用程序。它支持德语(默认)和英语,这是由语言选择的,在http头中发送 在我的本地服务器(Tomcat 6.0)上,自动语言选择是正确的,如果我的最高优先级是“德语”,那么应用程序就是德语。英语也一样 但是现在我将它部署到了我的Web服务器上(Tomcat6.0在Apache Web服务器后面,使用ModJk),现在它只使用英语。但http头仍然是相同的: Accept-Language: de-de,en-us;q=0.8,de;q=0.5,en;q

我用JSF2.0制作了一个web应用程序。它支持德语(默认)和英语,这是由语言选择的,在http头中发送

在我的本地服务器(Tomcat 6.0)上,自动语言选择是正确的,如果我的最高优先级是“德语”,那么应用程序就是德语。英语也一样

但是现在我将它部署到了我的Web服务器上(Tomcat6.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>

判定元件
EN
de.citkomm.tbm.locale.Lang
朗
de.citkomm.tbm.locale中的文件“Lang.properties”和“Lang_en.properties”已正确部署

这是Apache+ModJk+Tomcat6.0的问题还是配置错误?有人知道为什么Tomcat选择了错误的语言吗


提前谢谢

真奇怪。。。我认为mod_jk不应该影响这一点,因为您要验证HTTP头仍然包含正确的
Accept语言。如果您在同一个内部网络上,那么您可以尝试直接访问Tomcat web应用程序并跳过Apache web服务器,但是我怀疑这是问题所在

如果您在Tomcat服务器环境中部署了任何公共库,那么可能正在使用不同版本的JSF实现,可能是有国际化bug的早期版本

我在JBoss和Glassfish等应用服务器上看到过这种情况,默认情况下,这些应用服务器都预先打包了自己的JSF实现。类似地,JBoss/Glassfish类加载器优先选择捆绑的JSF实现库,而不是出现在
WEB-INF/lib
中的任何JSF实现


然而,Tomcat6在默认情况下不会这样做,但我仍然怀疑存在某种类加载问题。仔细检查web服务器上的公共库和已部署库,并验证是否存在正确的JSF实现。

这很奇怪。。。我认为mod_jk不应该影响这一点,因为您要验证HTTP头仍然包含正确的
Accept语言。如果您在同一个内部网络上,那么您可以尝试直接访问Tomcat web应用程序并跳过Apache web服务器,但是我怀疑这是问题所在

如果您在Tomcat服务器环境中部署了任何公共库,那么可能正在使用不同版本的JSF实现,可能是有国际化bug的早期版本

我在JBoss和Glassfish等应用服务器上看到过这种情况,默认情况下,这些应用服务器都预先打包了自己的JSF实现。类似地,JBoss/Glassfish类加载器优先选择捆绑的JSF实现库,而不是出现在
WEB-INF/lib
中的任何JSF实现

然而,Tomcat6在默认情况下不会这样做,但我仍然怀疑存在某种类加载问题。仔细检查您的公共库和web服务器上部署的库,并验证是否存在正确的JSF实现。

好吧,我不知道tomcat为什么使用我的Ubuntu服务器的环境变量,但确实如此

将LANG从“en_US.UTF-8”改为“de_de.UTF-8”,现在一切都好了:

无论如何谢谢你

我不知道tomcat为什么使用我的Ubuntu服务器的环境变量,但它确实使用了

将LANG从“en_US.UTF-8”改为“de_de.UTF-8”,现在一切都好了:


无论如何谢谢你

您必须在服务器端而不是客户端调试请求头。HTTPD或modjk在转发到Tomcat之前可能已经剥离/更改了它。您必须在服务器端而不是客户端调试请求头。HTTPD或modjk在转发给Tomcat之前可能已经剥离/更改了它。