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

时间:2010-12-17 17:57:07

标签: java jsf localization jboss

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

我们使用的技术: - JSF(Mojarra 2.0.3) - Primefaces 2.1(JSF组件库) - Spring Security 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使用三个标准来选择语言环境: 1)请求区域设置(Accept-Language请求标头)与支持的区域设置之间的匹配 2)faces配置文件中定义的应用程序默认语言环境 3)JVM默认语言环境

当我尝试更改浏览器选项中的语言时,应用程序不会更改区域设置。即使我只配置一种语言而不是默认语言。我在这里错过了什么吗?这是预期的,或者实际上它应该在我更改浏览器语言时更改内容(假设它是受支持的语言)?

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

提前致谢。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

除了其他答案之外,我还可以添加以下注释:您需要创建与定义语言一样多的语言文件。如果您的com.<company>.<product>.i18n.MessageBundle.properties没有_xx扩展名,则内部消息将是现有文件的默认值,但不是现有文件的默认值。 例如:

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)

答案 2 :(得分:1)

我最终发现了问题所在。在代码中的某处有一个语言环境声明,因此,无论我在浏览器中选择哪种语言,所呈现的语言都将始终相同。一旦我删除了该声明,一切都开始按原样运行。

我很抱歉没有尽快发布。

此外,我还要感谢大家的提示。虽然答案不在其中,但我一路上学到了很多东西。

答案 3 :(得分:0)

你确定你有单独的消息包名为:com ... i18n.MessageBundle_es和com ... i18n.MessageBundle_pt?