框架支持国际化语言配置,通过在后端维护好多语言模板,实现动态响应。
首先在工程目录src/main/resources/i18n
下建立文件message_xxx.properties
,默认解析的文件名以message_
开头,其中xxx
代表语言类型,具体叫什么可以自己定义,这里我们以中文简体为例建立message_zh_CN.properties
.
10000=系统出现异常,请稍后重试。
10001=获取不到OFA-TOKEN
10002=获取不到登录人信息
10003=操作成功
10004=WX-TOKEN不能为空
10005=token已经过期,请重新获取
10006=权限不足,请联系管理员授权
10007=token校验不通过
10008=请先进行登录
配置文件以key-value的形式进行配置,具体key可根据自己业务情况定义,不局限于数字,这里列举的是框架通用的一些提示,为避免定义的key跟框架冲突,范围10000-19999为框架自己预留,实际开发请避免使用此区间的key.
我们再建立一个英文的模板, message_en_US.properties
.
10003=success
以此类推,我们可以定义不同语言的模板,如果有多个模块的模块和文件,可通过配置声明,比如:
i18n:
modules: admin,common
filePrefix: message,exception
比如上面的配置,启动时会扫描i18n/admin
和i18n/common
下的以message和exception开头的文件,当不同的文件定义了相同的key时,优先会按照module的配置顺序来取值。
前端可通过携带请求头Accept-Language:en-US
来指定后端需要返回的语言。
Controller层可直接使用addRestData
返回向前端返回对应的提示.
@GetMapping("/test")
@ApiOperation(value = "测试接口")
public RestData test() {
return addRestData(200, "10003");
}
这样根据上面举例定义的模板,当前端指定返回中文时,会返回操作成功
, 指定返回英文时会返回 success
主动抛出框架自定义异常I18nException
时, 也可直接抛出定义的code,框架会根据指定的语言翻译后返回到前端.
throw new I18nException(-1, "10007");
定义表单参数校验时,可将提示的语句改成对应的code, 校验不通过时也会自动翻译。
@Data
@ApiModel
public class AppConfigDto implements Serializable {
@NotBlank(message = "你定义的code")
private String appName;
@NotNull(message = "你定义的code")
private Long menuId;
}
@ApiOperation(value = "新增配置")
@PostMapping("/")
@Transactional
public RestData add(@Valid @RequestBody AppConfigDto configDto) {
// 如果校验不通过,会返回定义的语句
return addRestData();
}
框架本身会自动转换,如果有需要手动处理的地方,可调用I18nUtil
工具类:
// 根据默认的语言获取
I18nUtil.getString("10006");
//根据指定的语言获取
I18nUtil.getString("en_US","10006");
对于需要动态显示文本内容,在定义模板的时候可以使用占位符,例如:
your_key=尊敬的{0},你有{1}条消息还未查看。
这时可以使用工具类进行转换
I18nUtil.getString("your_key", "张三", 10);
返回的信息为:
尊敬的张三,你有10条消息还未查看。