当前位置:网站首页 > 技术博客 > 正文

springboot集成testng



本博客介绍一下SpringBoot集成i18n,实现系统语言国际化处理,ok,先创建一个SpringBoot项目,具体的参考我的博客专栏:SpringBoot系列博客专栏链接

环境准备:

  • IntelliJ IDEA
  • Maven

项目集成:

  • Thymeleaf(模板引擎,也可以选jsp或者freemark)
  • SpringBoot2.2.1.RELEASE
  • messages.properties是默认的配置
  • messages_zh_CN.properties是(中文/中国)
  • messages_en_US.properties是(英文/美国)
  • etc.
    在这里插入图片描述
    IDEA工具就提供了很简便的自动配置功能,如图,只要点击新增按钮,手动输入,各配置文件都会自动生成属性
    在这里插入图片描述
    messages.properties:










 
  

messages_zh_CN.properties:

 
  

messages_en_US.properties:

 
  

在项目的application.properties修改默认配置,让SpringBoot的自动配置能读取到resource bundle资源文件

 
  

注意要点:

  • spring.messages.basename必须配置,否则SpringBoot的自动配置将失效
    MessageSourceAutoConfiguration.ResourceBundleCondition 源码:

 
  
  • cache-duration在2.2.1版本,指定的是s为单位,找到SpringBoot的MessageSourceAutoConfiguration自动配置类
    在这里插入图片描述

SpringBoot默认采用AcceptHeaderLocaleResolver类作为默认LocaleResolver,LocaleResolver类的作用就是作为i18n的分析器,获取对应的i18n配置,当然也可以自定义LocaleResolver类

 
  

I18n还是要继承WebMvcConfigurer,注意,2.2.1版本才是实现接口就可以,之前1.+版本是要实现WebMvcConfigurerAdapter适配器类的

 
  

注意要点:

  • 旧版代码可以不加LocaleChangeInterceptor 拦截器,2.2.1版本必须通过拦截器
  • 如下代码,bean的方法名必须为localeResolver,否则会报错
 
  

在这里插入图片描述
DispatcherServlet是Spring一个很重要的分发器类,在DispatcherServlet的一个init方法里找到这个LocaleResolver的init方法
在这里插入图片描述
这个IOC获取的bean类名固定为localeResolver,写例子的时候,我就因为改了bean类名,导致一直报错,跟了源码才知道Bean类名要固定为localeResolver
在这里插入图片描述
抛异常的时候,也是会获取默认的LocaleResolver的













在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
找到资源文件,确认,还是默认为AcceptHeaderLocaleResolver
在这里插入图片描述
配置了locale属性的时候,还是选用AcceptHeaderLocaleResolver作为默认的LocaleResolver







 
  
  • 拦截器拦截的请求参数默认为locale,要使用其它参数,必须通过拦截器设置 ,eg:
    在这里插入图片描述

  • LocalResolver种类有:CookieLocaleResolver(Cookie)、SessionLocaleResolver(会话)、FixedLocaleResolver、AcceptHeaderLocaleResolver(默认)、.etc

本博客的模板引擎采用Thymeleaf的,所以新增项目时候就要加上maven相关依赖,没有的话,自己加上:

 
  

Thymeleaf的i18n支持是采用#符号的

 
  

附录:
logging manual:SpringBoot官方手册
example source:例子代码下载链接




版权声明


相关文章:

  • 神经网络bp算法 python2025-06-07 10:01:00
  • 《java并发编程实战》2025-06-07 10:01:00
  • 同步 异步2025-06-07 10:01:00
  • ipad键盘快捷键怎么调出来2025-06-07 10:01:00
  • 明牛云智能网关2025-06-07 10:01:00
  • java值类型和引用类型的区别2025-06-07 10:01:00
  • mysql数据库的事务2025-06-07 10:01:00
  • webhook作用2025-06-07 10:01:00
  • java实现链表2025-06-07 10:01:00
  • 什么是原生js代码2025-06-07 10:01:00