当前位置: 代码迷 >> 综合 >> SpringBoot 国际化配置,SpringBoot Locale 国际化
  详细解决方案

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

热度:35   发布时间:2023-11-26 22:36:27.0

一、效果所下:



 



 



 

二、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


转载自:https://www.cnblogs.com/fanshuyao/p/8655960.html

  相关解决方案