美文网首页
基于Spring的国际化实现

基于Spring的国际化实现

作者: AlanSun2 | 来源:发表于2019-06-06 14:34 被阅读0次

    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

    相关文章

      网友评论

          本文标题:基于Spring的国际化实现

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