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