SpringBoot 国际化配置

代码最少得实现方式,请点这里

一、导包
默认spring boot中有这个包,所以不需要导入。在org.springframework.context包下
二、配置
1、创建国际化配置文件(3个):
mess.properties

mess.user.name=用户名  
mess.user.password=密码  
mess.user.btn=登录  

mess_zh_CN.properties

mess.user.name=用户名  
mess.user.password=密码  
mess.user.btn=登录  

mess_en_US.properties

mess.user.name=UserName  
mess.user.password=Password  
mess.user.btn=Sign In

SpringBoot默认国际化文件为:classpath:message.properties,如果放在其它文件夹中,则需要在application.properties配置属性spring.messages.basename:

#表示放在classpath的i18n文件夹,文件前缀为mess  
spring.messages.basename=i18n.mess  

2、自定义国际化语言解析器(有两种方法,这里显示第一种,第二种在另一篇)


    import java.util.Locale;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
    import javax.servlet.http.HttpSession;  
      
    import org.springframework.web.servlet.LocaleResolver;  
    import org.thymeleaf.util.StringUtils;  
      
    /** 
     * 自定义国际化语言解析器 
     * 
     */  
    public class MyLocaleResolver implements LocaleResolver{  
          
        private static final String I18N_LANGUAGE = "i18n_language";  
        private static final String I18N_LANGUAGE_SESSION = "i18n_language_session";  
      
        @Override  
        public Locale resolveLocale(HttpServletRequest req) {  
            String i18n_language = req.getParameter(I18N_LANGUAGE);  
            Locale locale = Locale.getDefault();  
            if(!StringUtils.isEmpty(i18n_language)) {  
                String[] language = i18n_language.split("_");  
                locale = new Locale(language[0], language[1]);  
                  
                //将国际化语言保存到session  
                HttpSession session = req.getSession();  
                session.setAttribute(I18N_LANGUAGE_SESSION, locale);  
            }else {  
                //如果没有带国际化参数,则判断session有没有保存,有保存,则使用保存的,也就是之前设置的,避免之后的请求不带国际化参数造成语言显示不对  
                HttpSession session = req.getSession();  
                Locale localeInSession = (Locale) session.getAttribute(I18N_LANGUAGE_SESSION);  
                if(localeInSession != null) {  
                    locale = localeInSession;  
                }  
            }  
            return locale;  
        }  
      
        @Override  
        public void setLocale(HttpServletRequest req, HttpServletResponse res, Locale locale) {  
              
        }  
      
    }  

3、把国际化语言解析器放到Spring容器中:

这里创建了一个自定义的配置类:CustomMvcConfig ,继承WebMvcConfigurerAdapter,可以扩展SpringMvc的功能,包括拦截器,转换器等


    import org.springframework.context.annotation.Bean;  
    import org.springframework.context.annotation.Configuration;  
    import org.springframework.web.servlet.LocaleResolver;  
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;  
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;  
      
    import com.lqy.springboot.message.locale.MyLocaleResolver;  
      
    //使用WebMvcConfigurerAdapter可以扩展SpringMvc的功能,包括拦截器,转换器等  
    //@EnableWebMvc //设置@EnableWebMvc为完全接管SpringMvc,但一般不要设置完全接管SpringMvc  
    @Configuration  
    public class CustomMvcConfig extends WebMvcConfigurerAdapter {  
      
        /** 
         * 配置自己的国际化语言解析器 
         * @return 
         */  
        @Bean  
        public LocaleResolver localeResolver() {  
            return new MyLocaleResolver();  
        }  
      
        /** 
         * 配置自己的拦截器 
         */  
        @Override  
        public void addInterceptors(InterceptorRegistry registry) {  
            //super.addInterceptors(registry);  
        }  
          
          
    }  

4、页面显示及切换国际化操作:


      
    <html xmlns:th="http://www.thymeleaf.org">  
    <head>  
    <meta charset="UTF-8">  
    <title>Insert title heretitle>  
    <style type="text/css">  
    .ib{  
        display: inline-block;  
    }  
    .ml20{  
        margin-left: 20px;  
    }  
    .mt20{  
        margin-top: 20px;  
    }  
    style>  
    head>  
    <body>  
        <div>  
            <div>[[#{mess.user.name}]]:<input th:placeholder="#{mess.user.name}"/>div>  
        div>  
        <div>  
            <div>[[#{mess.user.password}]]:<input th:placeholder="#{mess.user.password}"/>div>  
        div>  
        <div>  
            <div><button>[[#{mess.user.btn}]]button>div>  
        div>  
          
        <div class="mt20">  
            <span class="ib"><a th:href="@{/mess(i18n_language=zh_CN)}">中文a>span>  
            <span class="ib ml20"><a th:href="@{/mess(i18n_language=en_US)}">英文a>span>  
        div>  
          
    body>  
    html>  

三、页面展示
SpringBoot 国际化配置_第1张图片
SpringBoot 国际化配置_第2张图片
SpringBoot 国际化配置_第3张图片

你可能感兴趣的:(springboot,spring,boot,locale,国际化)