美文网首页
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