国际化支持


框架支持国际化语言配置,通过在后端维护好多语言模板,实现动态响应。

首先在工程目录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/admini18n/common下的以message和exception开头的文件,当不同的文件定义了相同的key时,优先会按照module的配置顺序来取值。

使用示例

前端可通过携带请求头Accept-Language:en-US来指定后端需要返回的语言。

Controller

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条消息还未查看。