本博客介绍一下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:例子代码下载链接
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/13676.html