美文网首页
spring之消息国际化

spring之消息国际化

作者: xzz4632 | 来源:发表于2019-06-20 20:00 被阅读0次

MessageSource

由于ApplicationContext继承了MessageSource接口, 所以容器也具备了相应的功能.

所谓国际化, 就是根据不同的国家或地区, 用与之相对应的语言来输出消息.即在中国则输出汉字描述的信息, 在英国, 则输出英文描述的消息.

MessageSource接口中定义的方法
  • String getMessage(String code, Object[] args, String default, Locale loc): 从MessageSource中获取消息,如果没有找到, 则使用默认值.传入的任何参数都将被标准库提供的MessageFormat的相应的值替换.
  • String getMessage(String code, Object[] args, Locale loc): 与前者一样,不同的是它没有提供默认址,如果没有找到相应的值, 会抛出NoSuchMessageException.
  • String getMessage(MessageSourceResolvable resolvable, Locale loc): 前面方法中的所有属性都将被封装在MessageSourceResolvalbe类中.

实现方式

a. 声明MessageSource bean
<beans>
    <bean id="messageSource"
            class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>format</value>
                <value>exceptions</value>
                <value>windows</value>
            </list>
        </property>
    </bean>
</beans>

MessageSource配置说明:

  • basenames接收的是一个可变的String数组
  • basenames接收的值要包含相应文件的路径, 如文件定义在resource/message目录下, 则如上面的format文件则应定义为message/format.
  • Spring还提供了ResourceBundleMessageSource(示例中的比其更灵活)和StaticMessageSource(常用于编程式).
b. 创建相应的properties文件

文件名要根据不同的地区添加相应的后缀, 如format文件, 对应中国(china), 则为format_zh_CN, 对应英国(english), 则为format_en.
文件中的key即为getMessage方法中的code参数. 在value中可用{index}(从0开始)引用getMessage方法中的args参数.

c. 使用

在用到的类中注入MessageSource, 调用其getMessage方法获取相应文件中定义的code对应的value.

相关文章

网友评论

      本文标题:spring之消息国际化

      本文链接:https://www.haomeiwen.com/subject/kfxjqctx.html