今天闲着没事,搞一下springboot ,当阅读官方文档i18n 时,闲来没事想搞一下。下面简单步骤:
关键步骤:我们首先想到国际化跟locale 有关,使用springboot 最关键的就是看自动配置,那么我们首先看下webmvc 自动配置类,
国际化关键配置,大概意思就是如果容器中没有LocaleResolver 对象,如果没有该对象就创建一个LocaleResolver 。这点是关键,后面会提到。
配置:
配置关键
我们上面怎么知道配login 基础名,这里啰嗦一下这要看我们messageresource 自动配置类怎么匹配的,知道原理就666了。
大概意思就是如果没有配置基础名则使用默认message ,如果我们配置了基础名则使用我们配置的,这也是springboot 的一个套路。
下面讲一下我遇到的不生效问题,都知道springboot 一个亮点就是无xml 配置,那么我们创建一个国际化解析器来简单识别英文与中文
在我们资源文件中配置该对象
这个我们创建成功页面,然后放置中文和英文切换,
当我们点击中文及english 时进行切换,但是遇到问题了,点击参数链接请求都是ok的,但是就是没用,刚开始以为国际化配置有错误,在这里给个简单的实用方式,打开浏览器设置切换语言设置,此时可以正常切换,那么问题肯定出在了解析上,此时看我们上图LocaleReolver 中,如果没有创建就创建默认的,打断点,重新启动可以知道我们自己写的解析类依然被容器创建,但是当我们请求时并没有走我们的方法,可想而知走的还是默认配置,查看源码@ConditionalOnMissingBean 注解当我们没有时创建,进行debug 模式启动看到
确实没有创建localeResolver ,此时你是否发现问题?不卖关子了,我们在创建对象时方法写错了,所以容器并没有发现有localeResolver ,所以走的是默认配置,下面我们进行更改
重新启动,点击切换ok...................所以遇到问题时当不知道问题出在哪时,排查错误首先把自己确认的问题先验证了,比如这个问题我在处理时首先想到有没有请求成功,,有没有国际化配置错误,然后使用简单验证方法,页面切换本地语言,然后查看源码追踪,问题慢慢找到。