Skip to content

i18n 国际化动态提示语组件

实现功能如下

  1. 对异常进行类别划分,区分命名类型及异常类型
  2. 实现异常可视化管理,用户在盘古开发平台页面可自主编辑异常
  3. 实现java校验异常的自动入库及自动翻译;
  4. 实现自定义异常的自动化翻译,支持异常动态拼接

快速上手

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.使用示例

  1. 在代码中使用,创建API
java
@GetMapping("testValidate1")
public Result testValidate1(@Validated @NotNull String name){
    return Result.ofSuccess(name);
}

注意:在JDK17中,@NotNull、@Size等验证注解需要导入jakarta包

  1. 在postman中调用API

请求中需传入对应的系统名称与语言编码,即可动态转化提示语

alt text

5.动态提示语展示

开启国际化动态提示语功能后,会自动保存数据到盘古数据库中,后续可在页面上进行修改,更改后即时生效

alt text

alt text

6.盘古动态提示语测试接口

  • 盘古国际化服务提供了测试动态提示语的接口,供用户体验动态提示语功能
    • 接口地址:/i18n/test/testValidate
    • 请求方式:POST
    • 请求头:systemName(系统名称)、default_language(语言编码)、token(用户凭证)
    • 请求参数:
参数描述类型(非必选)验证规则备注
name名称String不能为空-
age年龄String长度大于2,小于5
customMessage自定义信息String长度大于3,小于6
  • 效果展示

alt text

7.动态提示语远程调用接口说明

  1. 新增动态提示语
  • 如用户自定义命名空间&类型,可使用此方式

  • 新增动态提示语

    • 接口地址: /i18n/dynCase/addDynCaseForFeign
    • 请求格式:POST
    • 请求头:systemName(系统名称)
    • 传入参数:
参数描述类型(非必选)是否必传备注
namespace命名空间String后端服务名称,一般为后端服务配置:spring.appliction.name
type类型Stringvalidate、field
languageKey文案keyStringtype为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);
}
  1. 查询动态提示语
  • 接口地址: /i18n/dynCase/getDynCaseForFeign
  • 请求格式:POST
  • 请求头:systemName(系统名称)、default_language(语言编码)、token(用户凭证)
  • 传入参数:
参数描述类型(非必选)是否必传备注
namespace命名空间String后端服务名称,一般为后端服务配置:spring.appliction.name
type类型Stringvalidate、field
languageKey文案keyString
  • 返回参数
参数描述类型(非必选)
namespace命名空间String
type类型String
languageKey文案keyString
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));
}
  • 接口调用示例 alt text

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);
}