zoukankan      html  css  js  c++  java
  • spring boot-10.国际化

    1.在原来spring MVC 中国际化实现步骤

    (1)编写国际化配置文件

    (2)使用ResourceBundleMessageSource管理国际化资源文件

    (3)在页面中取国际化信息

    2.spring boot实现

    spring boot 默认为我们配置了 ResourceBundleMessageSource。org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration 为我们提供了国际化的自动配置。

    @Bean
        public MessageSource messageSource() {
            ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
            if (StringUtils.hasText(this.basename)) {
                messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
                        StringUtils.trimAllWhitespace(this.basename)));
            }
            if (this.encoding != null) {
                messageSource.setDefaultEncoding(this.encoding.name());
            }
            messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);
            messageSource.setCacheSeconds(this.cacheSeconds);
            messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);
            return messageSource;
        }

    其中指定了默认的国际化资源配置文件是类路径下的messages.properties。我们可以在全局配置文件中修改国际化配置文件的名称,例如指定国际化配置文件为类路径下的i18n下的login.properties

    spring.messages.basename=i18n.login

    当然国际化配置文件可以根据国家和语言信息来指定,如果当前浏览器环境 的语言信息没有匹配的国际化配置文件,就读取默认的国际化配置文件。例如编写了三个国际化配置文件,分别为login_en_US.properties,login_zh_CN.properties,login.properties,分别对应英文环境,中文环境,默认环境。

    3.页面输出国际化信息

    jsp:通过fmt:message

    freemaker:<@spring.message code="loginFrom.username"/>

    themleaf:#{message.password}

     4.实现效果

    4.自定义区域信息解析器

    @Bean
            @ConditionalOnMissingBean
            @ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
            public LocaleResolver localeResolver() {
                if (this.mvcProperties
                        .getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
                    return new FixedLocaleResolver(this.mvcProperties.getLocale());
                }
                AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
                localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
                return localeResolver;
            }

    以上是org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration 中关于区域信息解析器的配置,可以看到注解,@ConditionalOnMissingBean是在容器中没有LocaleResolver 时才生效,所有我们可以实现自己的区域信息解析器,并将它添加到容器中。可以通过在全局配置文件中配置spring.mvc来添加,或者在@Configuration配置类中通过@Bean来添加自定义的区域信息解析器。

    (1)实现自己的区域信息解析器

    public class MylocalResolver implements LocaleResolver{
    
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            // TODO Auto-generated method stub
            Locale locale = Locale.getDefault();
            String local =request.getParameter("local");
            System.out.println("====="+local);
            if(!StringUtils.isEmpty(local)) {
                locale = new Locale(local.split("_")[0], local.split("_")[1]);
            }
            return locale;
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
            // TODO Auto-generated method stub
            
        }
    
    }

    (2)添加进容器

    @Configuration
    public class MyMVCcCConfig extends WebMvcConfigurerAdapter{
       
        
        @Bean
        public LocaleResolver localeResolver() {
            return  new MylocalResolver();
        }
    }
  • 相关阅读:
    MySql 常用时间函数
    ORM执行原生SQL语句
    如何获取该变量(对象)是属于什么类型的
    预解析
    全局变量与局部变量
    函数可以作为参数使用,如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数。
    函数的自调用,没有名字,声明的同时直接调用
    return之后的代码不执行
    js冒泡排序
    switch-case case后比较是严格模式
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/9504107.html
Copyright © 2011-2022 走看看