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】:

更改浏览器定义的区域设置后,您需要在浏览器中刷新页面。您还需要意识到&lt;message-bundle&gt; 用于本地化转换/验证消息,而不是用于本地化内容。在那里你应该在faces-config.xml 中使用&lt;resource-bundle&gt; 和/或在Xhtml 中使用&lt;f:loadBundle&gt;

【讨论】:

您好,感谢您的帮助。我总是刷新我的页面并清除缓存,因为它实际上可能是由于这两个之一。但是,问题仍然存在。我正在使用 ,但既然您指出了这个细节,我想知道我是否应该使用 。我不想提供本地化内容,只想提供我的错误消息和菜单条目。这符合 的条件,对吗?【参考方案2】:

除了其他答案,我可以添加以下备注:您需要创建与定义的语言一样多的语言文件。如果您有一个没有_xx 扩展名的com.&lt;company&gt;.&lt;product&gt;.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...i18n.MessageBundle_en, com...i18n.MessageBundle_pt 和 com...i18n.MessageBundle_es 但是,如果我读了对,如果其中一个丢失,那么它会回退到默认的,不是这样吗?

以上是关于JSF 语言环境:浏览器定义的语言似乎被忽略了的主要内容,如果未能解决你的问题,请参考以下文章

带有缅甸语言环境的 Android Adform 横幅。 “键“height”的值“၅၀”无效,已被忽略

.gitignore 被 Git 忽略

JSF 中的本地化,如何记住每个会话而不是每个请求/视图选择的语言环境

js-小知识点

iOS:复数和自定义语言环境

忽略 thymeleaf #date.format() 上的语言环境