Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF语言环境:浏览器定义的语言似乎被忽略_Java_Jsf_Localization_Jboss - Fatal编程技术网

Java JSF语言环境:浏览器定义的语言似乎被忽略

Java JSF语言环境:浏览器定义的语言似乎被忽略,java,jsf,localization,jboss,Java,Jsf,Localization,Jboss,目前,我的团队正在用java开发一个Web2.0应用程序,我们正在使用JSF作为表示层。我们从表示层开始,所以我们还没有添加业务和数据层 我们使用的技术: -JSF(Mojarra 2.0.3) -Primefaces 2.1(JSF组件库) -Spring Security 3.0.5 -JBoss5.1 我被要求向应用程序添加区域设置支持。因此,我将faces-config.xml文件配置如下: <application> <locale-config>

目前,我的团队正在用java开发一个Web2.0应用程序,我们正在使用JSF作为表示层。我们从表示层开始,所以我们还没有添加业务和数据层

我们使用的技术: -JSF(Mojarra 2.0.3) -Primefaces 2.1(JSF组件库) -Spring Security 3.0.5 -JBoss5.1

我被要求向应用程序添加区域设置支持。因此,我将faces-config.xml文件配置如下:

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>pt</supported-locale>
        <supported-locale>en</supported-locale>
        <supported-locale>es</supported-locale>
    </locale-config>
    <message-bundle>
        com.<company>.<product>.i18n.MessageBundle
    </message-bundle>
</application>

EN
pt
EN
锿
com…i18n.MessageBundle
我创建了MessageBundle后缀文件并部署了应用程序。我了解到JSF使用3个标准来选择语言环境: 1) 请求区域设置(接受语言请求标头)与支持的区域设置之间的匹配 2) 在faces配置文件中定义的应用程序默认区域设置 3) JVM默认语言环境

当我尝试更改浏览器选项中的语言时,应用程序不会更改区域设置。即使我只配置了默认语言以外的一种语言。我是不是遗漏了什么?当我更改浏览器语言(如果它是受支持的语言)时,这是预期的还是事实上应该更改内容

我将非常感谢任何提示或至少一个指针,我可以找到答案,因为我已经谷歌搜索它没有运气了


提前感谢。

更改浏览器定义的区域设置后,您需要在浏览器中刷新页面。您还需要认识到,
用于本地化转换/验证消息,而不是本地化内容。您应该在
faces config.xml中使用
和/或在XHTML中使用

您确定有单独的消息包名为:

com.<company>.<product>.i18n.MessageBundle_es and  com.<company>.<product>.i18n.MessageBundle_pt?
com…i18n.MessageBundle\u和com…i18n.MessageBundle\u pt?

除了其他答案之外,我还可以添加以下备注:您需要创建尽可能多的语言文件,正如定义的语言一样。如果您的
com…i18n.MessageBundle.properties
没有
\u xx
扩展名,则其中的消息将是现有文件的默认值,而不是不存在的文件的默认值。 例如:

如果您声明的是“en”语言,则不会显示任何英语消息! 您必须创建:

messages.properties (containing default values not found in other files)
messages_en.properties (containing English)
messages_fr.properties (containing French)

我最终发现了问题所在。代码中的某个地方有一个区域设置声明,因此,无论我在浏览器中选择哪种语言,呈现的语言始终是相同的。一旦我删除了那个声明,一切都开始正常工作了

很抱歉,我没有早点把这个发出去


我还要感谢你们给我的建议。尽管答案不在其中,但一路上我学到了很多。

嗨,谢谢你的提示,但事实上,我确实有所有本地化版本。我有com…i18n.MessageBundle\u en,com…i18n.MessageBundle\u pt和com…i18n.MessageBundle\u但是,如果我读对了,如果其中一个丢失了,那么它将返回默认值,不是吗?嗨,谢谢你的帮助。我总是刷新我的页面并清除缓存,因为它实际上可能是由于这两个原因之一。然而,问题仍然存在。我正在使用,但现在你指出了那个细节,我想知道我是否应该使用。我不想提供本地化内容,只想提供我的错误消息和菜单项。这符合条件吧?
messages.properties (containing default values not found in other files)
messages_en.properties (containing English)
messages_fr.properties (containing French)