【问题标题】:JSF locale: browser defined language seems to be ignoredJSF 语言环境:浏览器定义的语言似乎被忽略了
【发布时间】: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 默认语言环境

当我尝试在浏览器选项中更改语言时,应用程序不会更改语言环境。即使我只配置默认语言以外的一种语言。我在这里错过了什么吗?当我更改浏览器语言(如果它是受支持的语言)时,这是预期的结果还是实际上应该更改内容?

我非常感谢任何提示或至少是关于我在哪里可以找到答案的指针,因为我已经用谷歌搜索了它,但没有运气。

提前致谢。

【问题讨论】:

    标签: java jsf localization jboss


    【解决方案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 但是,如果我读了对,如果其中一个丢失,那么它会回退到默认的,不是这样吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        相关资源
        最近更新 更多