springboot 国际化_springboot 国际化

最近在做项目的时候,产品有一个需求是支持国际化的, 我们的项目是前后端分离的。前端可以用第三方的插件来改变, 但是后端提示信息也要同步。这个需求也就只能在MVC 的response的返回试图解析的时候拦截,把里面的message 替换掉, 在用国际化的类从配置文件中取值再返回。 整体的思路差不多就是这样的。 

1, 首先创建一个springboot 的web项目 

0b95a468810f397d2253f1a47fcf19c5.png

在resource目录下面创建I18N 的目录, 里面有三个文件,按照一定的命名规范。 前面是语言,后面是国家。

这个具体的我们可以打印出来

94f6608ebd28603f0d34c89e471dc89b.png

基本上所有的国家都有。

在返回之前拦截 我们要自定义ResponseBodyAdvice 。

e70017d8e6320326b2df2d2d7a05c9f7.png

写一个类实现一下, supports  默认就是true 才往下走。

我们见名知意,下面的方法就是在写入response 之前做拦截的。

注意这个方法的作用必须当@ResponseBody 注解和@RestController 存在才生效。

我们先定义返回的实体

259de253f244bc46475d94077f43e168.png

984f98e953ed715bd1fe2c47e1eddfe8.png

这里面的message 就是国际化配置文件里面的key

c844e98e9f989c106e8bf400f32ec9dd.png

876e1855c0baa3cb0c38585137a5b274.png

a689fc5aaf36be30f9ae1f374c862177.png

不同的文件value不一样。

我们在细看befeoreBodyWrite 这个方法, 先从header 里面获取语言信息, 也就是前端选择语言的时候传入。

在用REsourceBundle 这个类根据不同的locale 加载不同的文件。

再根据返回的object 里面message 的值作为key ,查询到value 在重新set .message  就行。 

这里我们写一个测试类试一下

af617202db3e8044de10f3b101c3d281.png

启动服务,postman  掉一下试试。

日语提示:

787c58ccebc346f5c2c886bb43e9b15d.png

英语提示:

3ff841beb6786e182256fceee95b8cb5.png

中文提示:

47b2d7da6d99d09df9457df193b324c8.png

完美。喜欢,点赞。转发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值