JSF 语言环境:浏览器定义的语言似乎被忽略了
Posted
技术标签:
【中文标题】JSF 语言环境:浏览器定义的语言似乎被忽略了【英文标题】:JSF locale: browser defined language seems to be ignored 【发布时间】:2011-05-27 06:45:58 【问题描述】:目前我的团队正在用 java 开发一个 web 2.0 应用程序,我们正在使用 JSF 作为表示层。我们从表示层开始,所以我们还没有添加业务和数据层。
我们使用的技术: - JSF (Mojarra 2.0.3) - Primefaces 2.1(JSF 组件库) - 弹簧安全 3.0.5 - jBoss 5.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>
我创建了 MessageBundle 后缀文件并部署了应用程序。我读到 JSF 使用 3 个标准来选择语言环境: 1) 请求语言环境(Accept-Language 请求标头)与支持的语言环境之间的匹配 2) 在 faces 配置文件中定义的应用程序默认语言环境 3) JVM 默认语言环境
当我尝试在浏览器选项中更改语言时,应用程序不会更改语言环境。即使我只配置默认语言以外的一种语言。我在这里错过了什么吗?当我更改浏览器语言(如果它是受支持的语言)时,这是预期的结果还是实际上应该更改内容?
我非常感谢任何提示或至少是关于我在哪里可以找到答案的指针,因为我已经用谷歌搜索了它,但没有运气。
提前致谢。
【问题讨论】:
【参考方案1】:更改浏览器定义的区域设置后,您需要在浏览器中刷新页面。您还需要意识到<message-bundle>
用于本地化转换/验证消息,而不是用于本地化内容。在那里你应该在faces-config.xml
中使用<resource-bundle>
和/或在Xhtml 中使用<f:loadBundle>
。
【讨论】:
您好,感谢您的帮助。我总是刷新我的页面并清除缓存,因为它实际上可能是由于这两个之一。但是,问题仍然存在。我正在使用除了其他答案,我可以添加以下备注:您需要创建与定义的语言一样多的语言文件。如果您有一个没有_xx
扩展名的com.<company>.<product>.i18n.MessageBundle.properties
,则里面的消息将是现有文件的默认值,而不是非现有文件的默认值。
示例:
messages.properties (containing English)
messages_fr.properties (containing French)
如果您声明“en”语言,则不会显示英文消息! 您必须创建:
messages.properties (containing default values not found in other files)
messages_en.properties (containing English)
messages_fr.properties (containing French)
【讨论】:
【参考方案3】:我最终发现了问题所在。在代码的某个地方有一个语言环境声明,因此,无论我在浏览器中选择哪种语言,呈现的语言总是相同的。一旦我删除了该声明,一切都开始按预期工作。
很抱歉没有早点发布。
我还要感谢大家的提示。尽管答案并不在其中,但我在此过程中学到了很多东西。
【讨论】:
【参考方案4】:你确定你有单独的消息包命名:
com.<company>.<product>.i18n.MessageBundle_es and com.<company>.<product>.i18n.MessageBundle_pt?
【讨论】:
您好,感谢您的提示,但事实上我确实提供了所有本地化版本。我有 com.以上是关于JSF 语言环境:浏览器定义的语言似乎被忽略了的主要内容,如果未能解决你的问题,请参考以下文章
带有缅甸语言环境的 Android Adform 横幅。 “键“height”的值“၅၀”无效,已被忽略