目前我的团队正在使用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默认语言环境
当我尝试更改浏览器选项中的语言时,应用程序不会更改区域设置。即使我只配置一种语言而不是默认语言。我在这里错过了什么吗?这是预期的,或者实际上它应该在我更改浏览器语言时更改内容(假设它是受支持的语言)?
我非常感谢任何提示或至少指示我在哪里可以找到答案,因为我已经用谷歌搜索了它没有运气。
提前致谢。
答案 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?