spring-boot国际化实现

项目国际化,应该是很多研发同学在工作中需要涉及到的,就结合我最近项目里国际化的工作,做一个简单的总结吧。

一、整体的前后端配合流程

  1. 首先前端会有自己的语言包,对应不同的语言信息,用于前端洁面的渲染(实际上就是code对应不同的语言版本value,可以存储在在服务器上,在获取用户的语言信息后,加载对应的语言资源即可)。这里并不推荐将语言包的映射信息存储在后端的数据库中,因为一旦后端服务器或者数据库出现问题,将会导致前端基本的页面都渲染失败。
  2. 后端维护一份当前登陆用户的语言信息,并且提供一个语言查询接口、一个语言切换接口(供用户手动切换)
  3. 后端技术层面实现一些服务端的国际化(eg: 操作提示、数据字典、邮件模板国际化、excel表头等与前端无关的国际化内容)
  4. 前后端沟通可以通过请求头中添加语言信息,每次http请求都带入语言信息,后端拦截请求头语言参数,做对应的数据处理。

实际上,国际化,就是这么一点点一点点东西,hhhh,也不知道是不是经验浅薄的程序猿,不知国际化的水深的浅薄理解~~~

二、关于后端需要处理的内容

  1. 数据字典
  2. 操作提示(操作成功/success)
  3. 异常信息提示
  4. 一些框架数据校验提示(例如:@NotNull(message = “XXX不可为空”)
  5. EXCEL表头
  6. 邮件模板内容
  7. 手机短信模板
  8. 一些异步的跳过前端的任务

三、后端实现方案

实现思路,你只要找个地方存储语言数据,并通过程序处理返回对于的语言信息即可。

spring boot 本身就很友好的支持国际化。

show my code for you :

在服务中添加国际化配置config

spring boot 指定国际化环境_spring


添加一个工具类LocaleMessageUtils.class

spring boot 指定国际化环境_语言信息_02


添加语言资源包(这里就添加了2个:en_US / zh_CN)

spring boot 指定国际化环境_java_03


注意命名格式 必须是messages_[语言].properties

这里的语言,其实可以从【java.util.Locale】类中找到对应的关系:

比如static public final Locale SIMPLIFIED_CHINESE = createConstant(“zh”, “CN”); 简体中文,则[语言] = zh_CN

其实到这里以后,就已经差不多了,在你需要做同意拦截处理的地方,通过工具类,把在代码中的code,对应获取到不同语言资源包中的数据,再返回出去就可以了。

例如我的使用:
定义了异常的编码:
#error enum code
system.error.enum.code.401=用户认证失败
system.error.enum.code.403=权限不足
system.error.enum.code.405=验证码校验失败
system.error.enum.code.406=编码错误
system.error.enum.code.500=服务器错误
system.error.enum.code.1000=文件处理错误
system.error.enum.code.1001=数据处理错误
system.error.enum.code.1002=线程处理错误
system.error.enum.code.1003=服务降级
system.error.enum.code.1004=索引失败
system.error.enum.code.1005=邮件发送错误
system.error.enum.code.1006=加密错误
system.error.enum.code.1007=签名不通过
system.error.enum.code.1008=不支持的文件格式
system.error.enum.code.1009=get/post不正确
system.error.enum.code.2000=数据格式不正确
system.error.enum.code.2001=数据查询出错!
system.error.enum.code.2002=数据更新出错,请稍等重试!
system.error.enum.code.2003=数据插入出错!
system.error.enum.code.2004=当前用户无权限进行此操作!
system.error.enum.code.2005=参数有误!
system.error.enum.code.2006=数据状态有误!
system.error.enum.code.2007=数据不存在!
system.error.enum.code.2008=数据已经存在!
system.error.enum.code.2009=数据超过上限
system.error.enum.code.2010=数据不正确
system.error.enum.code.2030=用户未登录
system.error.enum.code.3000=第三方接口访问错误

统一拦截异常处,通过code获取对应的信息:

spring boot 指定国际化环境_spring boot 指定国际化环境_04


好了朋友们,我简简单单的总结就到此结束咯~