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();
        }
    }
  • 相关阅读:
    写文件
    CI使用数据库
    ajxa方法
    find---查找文件或目录
    diff---比较文件不同
    ifup&&ifdown --- 激活/关闭指定的网络接口。
    ifconfig---配置和显示Linux内核中网络接口
    ssh-agent && 及 ssh-add介绍
    host---域名查询
    tracepath---追踪并显示报文到达目的主机所经过的路由信息。
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/9504107.html
Copyright © 2011-2022 走看看