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

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

©Copyright 蕃薯耀 2018年3月27日

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

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

一、效果所下:

二、SpringBoot 国际化配置

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

mess.properties

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

mess_zh_CN.properties

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

mess_en_US.properties

  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:

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

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

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

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

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

  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. import com.lqy.springboot.message.locale.MyLocaleResolver;
  7. //使用WebMvcConfigurerAdapter可以扩展SpringMvc的功能,包括拦截器,转换器等
  8. //@EnableWebMvc //设置@EnableWebMvc为完全接管SpringMvc,但一般不要设置完全接管SpringMvc
  9. @Configuration
  10. public class CustomMvcConfig extends WebMvcConfigurerAdapter {
  11. /**
  12. * 配置自己的国际化语言解析器
  13. * @return
  14. */
  15. @Bean
  16. public LocaleResolver localeResolver() {
  17. return new MyLocaleResolver();
  18. }
  19. /**
  20. * 配置自己的拦截器
  21. */
  22. @Override
  23. public void addInterceptors(InterceptorRegistry registry) {
  24. //super.addInterceptors(registry);
  25. }
  26. }

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

  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. <div class="mt20">
  29. <span class="ib"><a th:href="@{/mess(i18n_language=zh_CN)}">中文</a></span>
  30. <span class="ib ml20"><a th:href="@{/mess(i18n_language=en_US)}">英文</a></span>
  31. </div>
  32. </body>
  33. </html>

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

©Copyright 蕃薯耀 2018年3月27日

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

SpringBoot 国际化配置,SpringBoot Locale 国际化的更多相关文章

  1. SpringBoot Logback配置,SpringBoot日志配置

    SpringBoot Logback配置,SpringBoot日志配置  SpringBoot springProfile属性配置 ================================ © ...

  2. springboot自动配置国际化失效分析

    最近在整理springBoot国际化时,发现国际化没有生效,通过报错提示在 MessageTag -> doEndTag处打断点 最后发现messageSource并不是ResourceBund ...

  3. Springboot:员工管理之国际化(十(3))

    1:IDEA编码设置UTF-8 2:创建国际化文件 i18n\login.properties #默认语言 i18n\login_en_US.properties #英文语言 i18n\login_z ...

  4. SpringBoot学习之验证信息国际化

    以登录为例: 1.controller的登录方法: @RequestMapping("/SSOAuth/login") @ResponseBody public ResponseV ...

  5. springmvc国际化 基于请求的国际化配置

    springmvc国际化 基于请求的国际化配置 基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主. 项目结构图: 说明:properties文件中为国际化资源文件.格式相关 ...

  6. spring MVC 使用 hibernate validator验证框架,国际化配置

    spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...

  7. Spring MVC + Velocity实现国际化配置

    国际化介绍 web开发中,国际化是需要考虑的一个问题,而且这个问题一般是越早敲定越好(不然等到系统大了,翻译是个问题).下面是结合实际项目(Spring MVC+Velocity)对实现国际化的一些总 ...

  8. Spring Security教程(5)---- 国际化配置及UserCache

    这一章是为了给后面的讲解打基础的,主要介绍下国际化的配置及UserCache的配置及使用 国际化配置 <!-- 定义上下文返回的消息的国际化 --> <bean id="m ...

  9. Maven下Flex国际化配置

    之前写了flashbulid.initellij下的flex国际化配置,它们都是在本地打包发布的,那么我们的工程用maven管理了,需要自动发布.这时候如何修改flex的pom文件,来让它build的 ...

随机推荐

  1. springboot中velocity tool中注入bean

    在使用springboo的时候,遇到一个问题,想在tool类中注入一个bean,一直失败,翻了下源码,是因为工具类的初始化方法为反射class调用newInstance方法,详见 http://www ...

  2. android:应用性能优化SparseArray

    HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...

  3. 混沌的艺术--- YChaos通过数学公式生成混沌图像

    艺术真得很难吗?也许如同编程一样容易.我写了一套软件,其功能是通过输入数学方程式,生成艺术图像.一提到数学有人可能会发怵,这里请不要担心,生成混沌的数学公式大都很是简单,基本上只用加.减.乘.除.余. ...

  4. [leetcode]Unique Paths II @ Python

    原题地址:https://oj.leetcode.com/problems/unique-paths-ii/ 题意: Follow up for "Unique Paths": N ...

  5. angularjs使用ui-router切换视图, 自动滚动到顶部

    ui-view Examples for autoscroll: <ui-view autoscroll/> <!-- If autoscroll present with no e ...

  6. Spring MVC实现上传文件报错解决方案

    报错代码: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.sp ...

  7. scala sortBy and sortWith

    sortBy: sortBy[B](f: (A) ⇒ B)(implicit ord: math.Ordering[B]): List[A] 按照应用函数f之后产生的元素进行排序 sorted: so ...

  8. 你真的了解Python吗 ---Python的内存管理

    请看下面的一段代码: origin = {'a':100,'b':[1,2,34,5]} obj_copy ={}; print origin; obj_copy['key1']= origin; o ...

  9. 一道简单的HashMap面试题所想到的...

    前言 看到一个JDK1.7和JDK1.8中关于HashMap的一个面试题: JDK1.7和1.8中HashMap中链表的插入的方式有什么不同? 原以为自己对HashMap的源码理解的还算可以了,应该足 ...

  10. 入门:移动APP中的各种导航

    即使是移动应用界面的原型设计,导航的形式也可以多种多样.尽管尺寸小,又必须紧凑排列大量数据,它们似乎受到了紧密的约束,但依然有着形形色色的选择. 人们曾经一度只会考虑一种形式——流行且广泛使用的垂直导 ...