• SpringBoot 国际化配置,SpringBoot Locale 国际化


    SpringBoot 国际化配置,SpringBoot Locale 国际化

    ================================

    ©Copyright 蕃薯耀 2018年3月27日

    http://www.cnblogs.com/fanshuyao/

    附件下载(源码下载)见:http://fanshuyao.iteye.com/blog/2414640

    一、效果所下:



     



     



     

    二、SpringBoot 国际化配置

    1、创建国际化配置文件(3个):

    mess.properties

    Java代码  收藏代码
    1. mess.user.name=用户名  
    2. mess.user.password=密码  
    3. mess.user.btn=登录  

    mess_zh_CN.properties

    Java代码  收藏代码
    1. mess.user.name=用户名  
    2. mess.user.password=密码  
    3. mess.user.btn=登录  

    mess_en_US.properties

    Java代码  收藏代码
    1. mess.user.name=UserName  
    2. mess.user.password=Password  
    3. mess.user.btn=Sign In  

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

    Java代码  收藏代码
    1. #表示放在classpath的i18n文件夹,文件前缀为mess  
    2. spring.messages.basename=i18n.mess  

    2、自定义国际化语言解析器

    Java代码  收藏代码
    1. import java.util.Locale;  
    2.   
    3. import javax.servlet.http.HttpServletRequest;  
    4. import javax.servlet.http.HttpServletResponse;  
    5. import javax.servlet.http.HttpSession;  
    6.   
    7. import org.springframework.web.servlet.LocaleResolver;  
    8. import org.thymeleaf.util.StringUtils;  
    9.   
    10. /** 
    11.  * 自定义国际化语言解析器 
    12.  * 
    13.  */  
    14. public class MyLocaleResolver implements LocaleResolver{  
    15.       
    16.     private static final String I18N_LANGUAGE = "i18n_language";  
    17.     private static final String I18N_LANGUAGE_SESSION = "i18n_language_session";  
    18.   
    19.     @Override  
    20.     public Locale resolveLocale(HttpServletRequest req) {  
    21.         String i18n_language = req.getParameter(I18N_LANGUAGE);  
    22.         Locale locale = Locale.getDefault();  
    23.         if(!StringUtils.isEmpty(i18n_language)) {  
    24.             String[] language = i18n_language.split("_");  
    25.             locale = new Locale(language[0], language[1]);  
    26.               
    27.             //将国际化语言保存到session  
    28.             HttpSession session = req.getSession();  
    29.             session.setAttribute(I18N_LANGUAGE_SESSION, locale);  
    30.         }else {  
    31.             //如果没有带国际化参数,则判断session有没有保存,有保存,则使用保存的,也就是之前设置的,避免之后的请求不带国际化参数造成语言显示不对  
    32.             HttpSession session = req.getSession();  
    33.             Locale localeInSession = (Locale) session.getAttribute(I18N_LANGUAGE_SESSION);  
    34.             if(localeInSession != null) {  
    35.                 locale = localeInSession;  
    36.             }  
    37.         }  
    38.         return locale;  
    39.     }  
    40.   
    41.     @Override  
    42.     public void setLocale(HttpServletRequest req, HttpServletResponse res, Locale locale) {  
    43.           
    44.     }  
    45.   
    46. }  

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

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

    Java代码  收藏代码
    1. import org.springframework.context.annotation.Bean;  
    2. import org.springframework.context.annotation.Configuration;  
    3. import org.springframework.web.servlet.LocaleResolver;  
    4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;  
    5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;  
    6.   
    7. import com.lqy.springboot.message.locale.MyLocaleResolver;  
    8.   
    9. //使用WebMvcConfigurerAdapter可以扩展SpringMvc的功能,包括拦截器,转换器等  
    10. //@EnableWebMvc //设置@EnableWebMvc为完全接管SpringMvc,但一般不要设置完全接管SpringMvc  
    11. @Configuration  
    12. public class CustomMvcConfig extends WebMvcConfigurerAdapter {  
    13.   
    14.     /** 
    15.      * 配置自己的国际化语言解析器 
    16.      * @return 
    17.      */  
    18.     @Bean  
    19.     public LocaleResolver localeResolver() {  
    20.         return new MyLocaleResolver();  
    21.     }  
    22.   
    23.     /** 
    24.      * 配置自己的拦截器 
    25.      */  
    26.     @Override  
    27.     public void addInterceptors(InterceptorRegistry registry) {  
    28.         //super.addInterceptors(registry);  
    29.     }  
    30.       
    31.       
    32. }  

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

    Html代码  收藏代码
    1. <!DOCTYPE html>  
    2. <html xmlns:th="http://www.thymeleaf.org">  
    3. <head>  
    4. <meta charset="UTF-8">  
    5. <title>Insert title here</title>  
    6. <style type="text/css">  
    7. .ib{  
    8.     display: inline-block;  
    9. }  
    10. .ml20{  
    11.     margin-left: 20px;  
    12. }  
    13. .mt20{  
    14.     margin-top: 20px;  
    15. }  
    16. </style>  
    17. </head>  
    18. <body>  
    19.     <div>  
    20.         <div>[[#{mess.user.name}]]:<input th:placeholder="#{mess.user.name}"/></div>  
    21.     </div>  
    22.     <div>  
    23.         <div>[[#{mess.user.password}]]:<input th:placeholder="#{mess.user.password}"/></div>  
    24.     </div>  
    25.     <div>  
    26.         <div><button>[[#{mess.user.btn}]]</button></div>  
    27.     </div>  
    28.       
    29.     <div class="mt20">  
    30.         <span class="ib"><th:href="@{/mess(i18n_language=zh_CN)}">中文</a></span>  
    31.         <span class="ib ml20"><th:href="@{/mess(i18n_language=en_US)}">英文</a></span>  
    32.     </div>  
    33.       
    34. </body>  
    35. </html>  

    (如果你觉得文章对你有帮助,欢迎捐赠,^_^,谢谢!) 

    ================================

    ©Copyright 蕃薯耀 2018年3月27日

    http://www.cnblogs.com/fanshuyao/

  • 相关阅读:
    采用Oracle的dbms_obfuscation_toolkit的加密
    [DeeplearningAI笔记]卷积神经网络4.11一维和三维卷积
    [DeeplearningAI笔记]卷积神经网络4.6-4.10神经网络风格迁移
    [DeeplearningAI笔记]卷积神经网络4.1-4.5 人脸识别/one-shot learning/Siamase网络/Triplet损失/将面部识别转化为二分类问题
    [DeeplearningAI笔记]卷积神经网络3.10候选区域region proposals与R-CNN
    [DeeplearningAI笔记]卷积神经网络3.6-3.9交并比/非极大值抑制/Anchor boxes/YOLO算法
    [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法
    [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强
    [DeeplearningAI笔记]卷积神经网络2.5-2.7 Network in Network/1*1卷积/Inception网络/GoogleNet
    [DeeplearningAI笔记]卷积神经网络2.3-2.4深度残差网络
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/8655960.html
Copyright © 2020-2023  润新知