Spring和JSF集成:国际化和本地化

如果您正在开发针对多种语言的JSF应用程序,那么您可能很熟悉<f:loadBundle>标记。 即使您的应用程序不支持使用消息包的国际化仍然是一个好主意。 在<f:loadBundle>标记下,它从Java java.util.ResourceBundle中读取消息,尽管这可以工作,但Spring开发人员通常更喜欢org.springframework.context.MessageSource接口。

作为<f:loadBundle>的替代方案,我一直在开发一个新的<s:messageSource>组件,该组件可用于公开来自任何Spring MessageSource的消息,并提供其他一些优点。

新组件是<f:loadBundle>的直接替代。

<s:messageSource source="#{messageSource}" var="messages"/>
<p>
  <h:outputText value="#{messages.hello}"/>
</p>

source属性可以是任何解析为MessageSource实例的EL表达式。 如果未指定源,则将使用Spring ApplicationContextvar属性是将用于访问消息的变量的名称。

与标准JSF不同,要加载的消息的密钥将根据要呈现的页面的ID构建。 例如,假设上面的页面来自文件WEB-INF / pages / messages / simple.xhtml ,则用于加载问候消息的键将为pages.messages.simple.hello 。 使用这些复合键可以防止消息键冲突,并使页面标记清晰美观。 如果需要,可以使用prefix属性覆盖此行为。

如果您在XHTML中引用了忘记定义的消息,则将看到警告消息(在开发中),或者将引发异常(在生产中)。

与标准JSF一样,您的消息并包含与<h:outputFormat>一起使用的占位符

pages.message.simple.welcome=Welcome to {1} with {0}
<h:outputFormat value="#{messages.welcome}">
  <f:param value="Spring"/>
  <f:param value="JSF"/>
</h:outputFormat>

<h:outputFormat>标签有点冗长,因此为了方便起见,Spring消息可以用作Map 。 这使您可以更简洁地引用占位符:

<h:outputText value="#{messages.welcome['Spring']['JSF']}"/>

相同的语法允许您将Java对象映射到消息。 默认情况下,对象是通过从类名称构建消息键来映射的。 例如,以下类:

package org.example;
public class ExampleObject {
}

可以在JSF中引用:

<h:outputText value="#{messages[exampleInstance]}"/>

解决以下消息:

org.example.ExampleObject=example

对于枚举对象,消息键包括枚举名称和类:

package org.example;
public enum ExampleObject {
  ONE, //mapped to message key org.example.ExampleObject.ONE
  TWO  //mapped to message key org.example.ExampleObject.TWO
}

对象消息还可以引用应构成消息一部分的属性:

org.example.PersonName=Name is {first} {last}
...

package org.example;
public class PersonName {
  ...
  public String getFirst() {...}
  public String getLast() {...}
}

您还可以通过使用实现org.springframework.springfaces.message.ObjectMessageSource接口的消息源来定义自己的对象消息策略。

如果要检查其中的任何代码,请查看GitHub Project中的org.springframework.springfaces.messageorg.springframework.springfaces.message.ui软件包。

参考: Phil Webb博客博客中来自我们JCG合作伙伴 Phillip Webb的Spring和JavaServer Faces集成:国际化和本地化


翻译自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值