# 多语言小地球业务对接文档

### 一、功能说明

通过国际化小地球组件自定义功能配置文本多语言，实现配置国际化需求

### 二、功能存储形式

1、多语言信息以中间表形式存储，不影响原表字段存储

- 此形式适用场景：配置表存储信息不做更改，且存在其他地方引用该字段值的情况；
- 存储中间表：ebdf\_multilangset
- 例如：表单信息中的表单名，存储在“ebdf\_obj”表的“obj\_name”字段中，关联此字段的其他功能会直接用到该字段值，所以没法直接存储为json格式，就需要通过中间表来进行存储，满足当前字段可配置多语言

2、多语言信息以JSON格式存储

- 此形式适用场景：无关联功能，单纯存储字段值
- 存储格式：（1）字符串：*"Text1"*；（2）多语言字符串：{"nameAlias":"Text1","nameAliasLabelId":"856610723147399169"}；
- 例如：搜索条件面板中的条件字段，条件字段存储在“ebdf\_list\_filter”的“config\_name\_json”字段中，无关联功能，这种情况可直接用json格式存储；

注：第一种存储方式适用于大部分场景，可根据功能实际开发逻辑选择对应的多语言存储格式

### 三、功能接入

在对应的业务逻辑中引入：

```java
import com.weaver.ebuilder.form.base.utils.multilangset.MutilangSetUtil; 
import org.springframework.beans.factory.annotation.Autowired; 
public class XxxxxxxImpl implements Xxxxxxx{ 
	@Autowired 
	private MutilangSetUtil mutilangSetUtil; 

}
```

1、中间表存储形式功能接入：以下示例仅供参考，需以实际业务场景为准

| 前端入参 | 对象 |
| --- | --- |
| 格式 | 示例：                                                                                                            name: {nameAlias: "测试物理表单2", nameAliasLabelId: "870744386684608513"} |
| 后端接收 | 如果是实体，需要添加一层模型进行转换； |
| 模型字段 | 示例：Object name;[图片附件未整合: ../../_assets/870775082825105409/001-80ec03a08d.png] |
| 实体字段 | 示例：String name;[图片附件未整合: ../../_assets/870775082825105409/002-bd288dc2a1.png] |
| 转换逻辑 | 示例：[图片附件未整合: ../../_assets/870775082825105409/003-a49012fab7.png] |

（1）模型转换到实体阶段，即可对多语言信息进行存储

```java
// 存储方法
/** 
* 通用处理多语言设置 
* @param tableDataId 数据id
* @param nameMap     多语言信息对象
* @param employee    当前用户
* @param tableField  存储字段名（表单名.字段名）；例如：当前是表单名的多语言存储，
*						则存储字段名为"ebdf_obj.obj_name"
*/
com.weaver.ebuilder.form.base.utils.multilangset.MutilangSetUtil#handleMultilingSet
(java.lang.Long, 
java.util.Map<java.lang.String,java.lang.Object>, 
com.weaver.teams.domain.user.SimpleEmployee, 
java.lang.String)
```

（2）多语言信息获取

```java
/** 
*  
* @param name         字段原始值
* @param tableDataid  数据id
* @param tableField   存储字段名
* @param employeeId   当前用户id
* @param tenantKey    当前租户key
* @return 
*/
com.weaver.ebuilder.form.base.utils.multilangset.MutilangSetUtil#getMultilingualName
(java.lang.String,
 java.lang.Long,
 java.lang.String,
 java.lang.Long,
 java.lang.String)
```

2、json存储形式功能接入：

| 前端入参 | json字符串 |
| --- | --- |
| 格式 | configNameJson："{"nameAlias":"单行文本","nameAliasLabelId":"870741655135739904\\"}" |
| 后端接收 | 实体类型接收 |
| 实体字段 | String configNameJson; |

（1）正常的实体存储逻辑

		存储过程不需要走中间表，直接存储json字符串

（2）多语言信息获取

```java
/** 
* Json 对象国际化处理 
* 示例：{"nameAlias":"文本1","nameAliasLabelId":"856610723147399169"} 
* @param mulJsonStr json字符串
* @param employeeId 当前用户id
* @param tenantKey  当前租户key
* @return 替换后的多语言字符串，示例：英文{"nameAlias":"Text1","nameAliasLabelId":"856610723147399169"} 
*/
com.weaver.ebuilder.form.base.utils.multilangset.MutilangSetUtil#getMultilingSetByJson
```
