基于Spring的国际化实现

2019-06-06  本文已影响0人  AlanSun2

Spring 通过MessageSource接口(策略模式)实现的国际化,主要的实现有AbstractMessageSourceResourceBundleMessageSource

ResourceBundleMessageSource.png

实质上,ResourceBundleMessageSource底层是基于jdk的ResourceBundle类实现的。

ResourceBundleMessageSource使用

  1. 必须要有一个ResourceBundleMessageSource,基于java的配置:
@Configuration
public class MyConfig {

    @Bean
    public MessageSource messageSource(){
        ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource();
        resourceBundleMessageSource.addBasenames("i18n/messages");
        resourceBundleMessageSource.addBasenames("exc");
        resourceBundleMessageSource.setDefaultEncoding("utf-8");
        return resourceBundleMessageSource;
    }
}
classpath.png

以上配置设置了两个basename(其实就是类路径的相对地址),Spring会到i18n文件夹下寻找以messages为开头的文件,我这里设置了三个文件,分别是messages.propertiesmessages_en_US.propertiesmessage_zh_CN.properties,其中en_USzh_CN表示国际化,当表示不同地区时,会获取与地区相对应的内容。Spring还会再类路径下寻找以exc为开头的属性文件。

注意:如果两个或多个basename中都包含相同的内容,比如messages.propertiesexc.properties中都包含message=你好,则Spring遵循谁先声明谁先被加载,不会覆盖。在上个案例中Spring会加载messages.properties中的message

另外,如果你使用了spring-boot,spring-boot会基于自动配置自动注入一个ResourceBundleMessageSource,前提是必须在application.propertiesapplication.yml中配置spring.messages。详情请查看MessageSourceAutoConfiguration

上一篇 下一篇

猜你喜欢

热点阅读