天天看点

完美解决springboot国际化错误:??login.tip_zh_ CN??

搜索这个错误的小伙伴,想来都是看了某spring boot视频吧!

具体错误如下图:

完美解决springboot国际化错误:??login.tip_zh_ CN??

好了,贴上我的项目环境:

springboot:2.2.6

thymeleaf:根据springboot自动选择的版本

Java:1.8

直接上解决办法:

错误情况1:确保国际化文件夹存放在resources下面,如图

完美解决springboot国际化错误:??login.tip_zh_ CN??

i18n是我的国际化文件,不是存放在resources文件夹里面的resources里面;

application.properties写上spring.messages.basename=i18n.login

错误情况2:确保application.properties配置了spring.messages.basename,且配置正确

我的项目结构:

完美解决springboot国际化错误:??login.tip_zh_ CN??

我的application.properties文件配置内容spring.messages.basename=i18n.login

错误情况3:将spring.messages.basename=i18n.login改成spring.messages.basename=i18n/login

当然,我使用的这个spring boot版本,这两种写法都可以识别

ps:看见有人说,html里面取值不用加login,即

可写为

自己试了一下,两种写法都没有问题,但是inline方式取值的话还是要加上login.的,不然是会出错的。

如果以上的方法解决了你的问题,那么我很高兴。

接下来看看这个问题出现的原因是什么:

其实就是配置文件中spring.messages.basename配置有误,这个有误呢,包括路径错误,拼写错误(il8n和i18n,我竟然犯了这个错),或者说路径分割符错误,总之就是,他根据你的配置,并没有找到你的文件。当然,要是你注释掉这行配置,也会报同样的错误。

既然知道是什么原因造成的,那么我们做如下几个实验:

分别将i18n放入public、resources、static、templates文件夹里面

完美解决springboot国际化错误:??login.tip_zh_ CN??

然后呢,我们在配置文件里面配置好spring.messages.basename,路径则为public.i18n.login或者其它相应的位置等,然后我们再运行我们的项目,发现都成功了。总而言之,我们将国际化文件放在classpath路径下或它下面的文件夹中,然后再配置好spring.messages.basename,都是可以成功找到的,因为springboot他就是拼接classpath路径和你设置的路径,然后找到相应的文件。(ps:classpath是指哪里呢,maven初始化的项目,它指的是resources,就是包含public、static等文件的那个文件夹,其它详细的建议百度或者看官方文档)。

接下来看看为什么我们在路径中使用.或者/都能成功呢?瞅瞅源码哈!

完美解决springboot国际化错误:??login.tip_zh_ CN??

截取的源码的一部分,其实这里就是将路径中的.给换成了/,这也就是为什么.和/都可以成功的原因。

各位小伙伴们,可能springboot版本不同,他们的实现或者错误都有差别,大家具体情况具体分析哈!如果博文存在错误,请指出,感谢!