i18n 国际化动态提示语组件
实现功能如下
- 对异常进行类别划分,区分命名类型及异常类型
- 实现异常可视化管理,用户在盘古开发平台页面可自主编辑异常
- 实现java校验异常的自动入库及自动翻译;
- 实现自定义异常的自动化翻译,支持异常动态拼接
快速上手
1.在工程pom.xml
中添加依赖
html
<!-- 动态提示语组件 -->
<dependency>
<groupId>com.hisense.pangea</groupId>
<artifactId>pangea-common-i18ndyncase</artifactId>
<version>3.0.0</version>
</dependency>
<!-- java校验组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
2.配置环境变量
动态提示语目前提供三项配置:(建议开启enabled、translation)
- enabled:是否开启动态配置,开启后会对验证不合法的参数所提示的消息统一处理,第一次验证的动态提示语会保存到盘古数据库,后续可在国际化提示信息管理页面查看
- initPublic:是否初始化公共空间,开启后项目命名空间和公共命名空间都会进行保存动态提示语文案
- translation:保存时是否自动翻译,开启后保存的动态文案会自动翻译成该项目支持的语言
- errorEnabled:异常信息是否自动进行动态装换,开启后会对盘古自定义异常类(DynCaseException)所提示的信息进行转换
java
pangea:
international:
dynamic-case:
enabled: true
init-public: true
translation: true
error-enabled: true
3.配置Nacos服务发现
保证项目与盘古服务在Nacos同一个命名空间下,动态提示语需要使用盘古国际化服务
java
spring:
cloud:
nacos:
discovery:
namespace: pangea
4.使用示例
- 在代码中使用,创建API
java
@GetMapping("testValidate1")
public Result testValidate1(@Validated @NotNull String name){
return Result.ofSuccess(name);
}
注意:在JDK17中,@NotNull、@Size等验证注解需要导入jakarta包
- 在postman中调用API
请求中需传入对应的系统名称与语言编码,即可动态转化提示语
5.动态提示语展示
开启国际化动态提示语功能后,会自动保存数据到盘古数据库中,后续可在页面上进行修改,更改后即时生效
6.盘古动态提示语测试接口
- 盘古国际化服务提供了测试动态提示语的接口,供用户体验动态提示语功能
- 接口地址:/i18n/test/testValidate
- 请求方式:POST
- 请求头:systemName(系统名称)、default_language(语言编码)、token(用户凭证)
- 请求参数:
参数 | 描述 | 类型(非必选) | 验证规则 | 备注 |
---|---|---|---|---|
name | 名称 | String | 不能为空 | - |
age | 年龄 | String | 长度大于2,小于5 | |
customMessage | 自定义信息 | String | 长度大于3,小于6 |
- 效果展示
7.动态提示语远程调用接口说明
- 新增动态提示语
如用户自定义命名空间&类型,可使用此方式
新增动态提示语
- 接口地址: /i18n/dynCase/addDynCaseForFeign
- 请求格式:POST
- 请求头:systemName(系统名称)
- 传入参数:
参数 | 描述 | 类型(非必选) | 是否必传 | 备注 |
---|---|---|---|---|
namespace | 命名空间 | String | 是 | 后端服务名称,一般为后端服务配置:spring.appliction.name |
type | 类型 | String | 是 | validate、field |
languageKey | 文案key | String | 是 | type为validate,languageKey为验证注解的全限定名; type为field,languageKey为字段属性的全限定名 |
languageCode | 语言编码 | String | 是 | |
displayName | 文案值 | String | 是 | |
isSavePublicDynCase | 是否保存到公共命名空间息 | boolean | 是 | |
isTranslation | 自是否翻译 | boolean | 是 |
- 后端调用示例
java
@Autowired
private MessageClient messageClient;
public void saveDynCase(){
List<LangProjectDynCase> saveList = new ArrayList<>();
LangProjectDynCase langProjectDynCase = new LangProjectDynCase();
langProjectDynCase.setNamespace("testNamespace");
langProjectDynCase.setType("validate");
langProjectDynCase.setLanguageKey("jakarta.validation.constraints.Size.message");
langProjectDynCase.setLanguageCode("zh_CN");
langProjectDynCase.setDisplayName("size 必须介于 {min} 和 {max} 之间");
saveList.add(langProjectDynCase);
Boolean isSavePublicDynCase = false;
Boolean isTranslation = false;
this.messageClient.addDynCaseForFeign(saveList, isSavePublicDynCase, isTranslation);
}
- 查询动态提示语
- 接口地址: /i18n/dynCase/getDynCaseForFeign
- 请求格式:POST
- 请求头:systemName(系统名称)、default_language(语言编码)、token(用户凭证)
- 传入参数:
参数 | 描述 | 类型(非必选) | 是否必传 | 备注 |
---|---|---|---|---|
namespace | 命名空间 | String | 是 | 后端服务名称,一般为后端服务配置:spring.appliction.name |
type | 类型 | String | 是 | validate、field |
languageKey | 文案key | String | 是 |
- 返回参数
参数 | 描述 | 类型(非必选) |
---|---|---|
namespace | 命名空间 | String |
type | 类型 | String |
languageKey | 文案key | String |
languageCode | 语言编码 | String |
languageKey | 文案值 | String |
- 后端调用示例
java
@Autowired
private MessageClient messageClient;
public void selectDynCase(){
List<LangProjectDynCase> queryList = new ArrayList<>();
LangProjectDynCase dynCase = new LangProjectDynCase();
dynCase.setNamespace("testNamespace");
dynCase.setType("validate");
dynCase.setLanguageKey("jakarta.validation.constraints.Size.message");
queryList.add(dynCase);
List<LangProjectDynCase> dynCaseList = messageClient.getDynCaseForFeign(queryList);
System.out.println(JSON.toJSON(dynCaseList));
}
- 接口调用示例
8.盘古自定义动态提示语异常使用
- 支持自定义异常动态翻译:开启异常提示语配置,并使用DynCaseException异常,即可动态转换错误提示信息
- java代码使用示例:
java
@PostMapping("testError")
public Result testError(@RequestBody TestDemoObj testError){
throw new DynCaseException(testError.getCode(), testError.getMsg());
}
- 同时支持动态拼接
- 可传递异常信息参数列表,参数列表会自动拼接到异常提示语的“{}”中,参数列表中的数据不会进行自动翻译
- 使用方式如下:
java
@PostMapping("testError")
public Result testError(@RequestBody TestDemoObj testError){
String code = "testError";
String msg = "测试异常,param1:{}, params2:{}";
List<String> params = List.of("参数1","参数2");
throw new DynCaseException(code, msg, params);
}