springboot 使用国际话自定义localeResolver 不生效

55 篇文章 0 订阅
19 篇文章 0 订阅

今天闲着没事,搞一下springboot ,当阅读官方文档i18n 时,闲来没事想搞一下。下面简单步骤:

关键步骤:我们首先想到国际化跟locale 有关,使用springboot 最关键的就是看自动配置,那么我们首先看下webmvc 自动配置类,

国际化关键配置,大概意思就是如果容器中没有LocaleResolver 对象,如果没有该对象就创建一个LocaleResolver 。这点是关键,后面会提到。

配置:

配置关键

我们上面怎么知道配login 基础名,这里啰嗦一下这要看我们messageresource 自动配置类怎么匹配的,知道原理就666了。

大概意思就是如果没有配置基础名则使用默认message ,如果我们配置了基础名则使用我们配置的,这也是springboot 的一个套路。

下面讲一下我遇到的不生效问题,都知道springboot 一个亮点就是无xml 配置,那么我们创建一个国际化解析器来简单识别英文与中文

在我们资源文件中配置该对象

这个我们创建成功页面,然后放置中文和英文切换,

当我们点击中文及english 时进行切换,但是遇到问题了,点击参数链接请求都是ok的,但是就是没用,刚开始以为国际化配置有错误,在这里给个简单的实用方式,打开浏览器设置切换语言设置,此时可以正常切换,那么问题肯定出在了解析上,此时看我们上图LocaleReolver 中,如果没有创建就创建默认的,打断点,重新启动可以知道我们自己写的解析类依然被容器创建,但是当我们请求时并没有走我们的方法,可想而知走的还是默认配置,查看源码@ConditionalOnMissingBean 注解当我们没有时创建,进行debug 模式启动看到

确实没有创建localeResolver ,此时你是否发现问题?不卖关子了,我们在创建对象时方法写错了,所以容器并没有发现有localeResolver ,所以走的是默认配置,下面我们进行更改

重新启动,点击切换ok...................所以遇到问题时当不知道问题出在哪时,排查错误首先把自己确认的问题先验证了,比如这个问题我在处理时首先想到有没有请求成功,,有没有国际化配置错误,然后使用简单验证方法,页面切换本地语言,然后查看源码追踪,问题慢慢找到。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值