# 一、功能背景

为实现功能配置国际化，eb表单后台配置需要进行国际化接入（含新版压测优化）

# 二、表结构

国际化数据存储表单：ebuilder\_form\_multilangset

| 数据库字段 | **tablefield** | **fieldvalue** | **langid** | **target\_id** |
| --- | --- | --- | --- | --- |
| 列名 | 字段名（一般指数据库字段） | 字段值（当前语境的值） | 当前语境 | 国际化id |
| 示例 | "" | 这是一个示例 | 7(中文) | 757541572865376256 |
| 备注 | eb每个配置都是独立的，所以不用tablefield做区分 |  | 7：中文；8：英文；9：繁体； |  |

**对接多语言以此文档为准（业务对接文档已废弃），新功能不再维护ebdf\_multilangset 中间表**

# 三、功能存储形式

## **1、save ：**

后端新增的多语言配置字段：

### **# 多语言字段格式**：字段名\_lable\_id

### **# 示例：**例如remark字段，新增时需要建两个字段：remark，remark\_lable\_id

## **2、get：获取多语言：**

### **# 实现 ：** com.weaver.ebuilder.form.base.service.MultilangSetService 接口

[图片附件未整合: ../../_assets/949119718691700736/001-f291f05782.png]

### **# 方法**

#### （1）获取单个数据的多语言值

```java
	/**
     * 获取单个数据的多语言值(多语言提供方法)
     *
     * @param original   数据原始值
     * @param tableField 表字段
     * @param employeeId 当前用户id
     * @param tenantKey  当前租户key
     * @param targetId   多语言关联id，对应ebuilder_form_multilangset表target_id
     * @return {@link String}
     */
    default String replaceMultilangsetData(String original,
                                           String tableField,
                                           Long employeeId,
                                           String tenantKey,
                                           Long targetId) {
        return I18nMultilangsetUtil.replaceMultilangsetData(original, MulCommonConstant.EBFORMMODULE, tableField, I18nLanguageUtil.getLangId(employeeId), tenantKey, targetId);
    }
```

#### （2）批量获取多语言值

```java
	/**
     * 批量获取多语言值(多语言提供方法)
     *
     * @param targetId2Original 多语言关联id -> 数据原始值
     * @param tableField        字段名
     * @param employeeId        当前用户id
     * @param tenantKey         当前租户key
     * @return {@link Map<Long, String>}
     */
    default Map<Long, String> getMultilingualForBatch(Map<Long, String> targetId2Original,
                                                      String tableField,
                                                      Long employeeId,
                                                      String tenantKey) {
        return I18nMultilangsetUtil.replaceMultilangsetData(targetId2Original, MulCommonConstant.EBFORMMODULE, tableField, I18nLanguageUtil.getLangId(employeeId), tenantKey);
    }
```

#### （3）判断当前配置是否已经国际化

```java
	/**
     * 当前配置是否已经国际化
     * @param labelId 国际化id
     * @return {@link Boolean}
     */
    default Boolean hasBeenInternationalized(Long labelId){
        return Util.isNotEmpty(labelId) && labelId != -1L;
    }
```
