国际化多语言APP

基本信息

文档信息

| 文档名称 | 多租户APP_权限通配符 | | | | — | — | — | — | | 文档编号 | V2.0 | 文档版本日期 | 2024-01-30 | | APP名称 | 多租户APP | | | | 权限通配符 | | | | | 起草人 | 古宏 黄小杰 范明哲 | 起草日期 | 2022-01-30 | | 复审人 | | 复审日期 | |

版本历史

| 版本 | 日期 | 作者 | 更改参考 | 说明 | | — | — | — | — | — | | V1.0 | 2024-01-30 | 古宏 黄小杰 范明哲 | | 初稿 | | | | | | |

迭代分支

| 名称 | 内容 | | — | — | | 分支 | feat_xxx | | 前端原始分支 | | | 后端原始分支 | |

审批信息

| 签字/日期 | | | — | — | | 审核 | | | 审批 | | | | |

目标和范围

目标

  1. 安装国际化APP后,页面和提示语支持设置多语言

  2. 用户可以页面、提示语内容设置各个语种的译文。

  3. 国际化APP预置简体中文、英语两种语言。

  4. 用户可以设置当前账号的默认语言,平台界面和内容会根据用户选择的语言进行相应的译文映射。

范围

研发范围

  1. UI多语言(按钮、表头、搜索字段等)
  2. 提示语多语言
  3. 菜单多语言
  4. 导入导出多语言包
  5. 日志多语言

影响范围

描述本次优化迭代研发内容范围

前端影响范围

  • xxx组件xxx属性修改
  • xxx功能

    后端影响范围

  • 作用域
  • 用户登录
  • 依赖库

    参考引用与术语

参考引用

列出引用或是参考的文档或是文献。

相关术语

文件中可能会引起混淆的专门术语的定义和缩写词的原文。

例如:

术语 解释
多租户  
功能权限  
数据权限  
API权限  
作用域  
设置器  
区块组件  
大纲  
模型  
节点树  

总体设计介绍

过程产物

| 过程产物类型 | 说明 | | — | — | | 产品需求原型设计(可选) | 根据功能点描述清楚页面结构的设计,可以是产品的设计原型链接。 | | 交互设计(可选) |

  • 页面跳转方式:需包含起始点,终结点,例如触发时机/触发节点/触发元素 | | UI设计稿(可选) |
  • 规定人机界面的内容、界面风格、交互方式等
  • 样式至少包含状态:常态,选中,不可用,异常,悬停 | | 后端APP包 | | | 前端APP包 | |

性能指标(可选)

操作

| 操作 | 响应时间 | | — | — | | 打开一个网站 | xx秒 | | 数据库查询一条记录 (有索引) | xx毫秒 | | 从内存读取1M数据 | xx毫秒 | | Java程序本地方法调用 | xx毫秒 | | First paint | | | First Contentful Paint | | | Time to Interactive | | | Largest Contentful Paint | | | First Meaning Paint | |

吞吐量

指单位时间内系统处理的请求数量,体现系统的整体处理能力。对于网站,可用“请求数/秒”、“页面数/秒”或“访问人数/天”、“处理业务数/小时”等来衡量。重要指标有TPS(每秒处理的事物数)、QPS(每秒查询的请求数)、HPS (每秒HTTP请求数)等

并发量

指系统能够同时处理的请求的数目,这个数字反映了系统的负载性能。对于网站而言,并发数指网站用户同时提交 请求的用户数目

后端详细设计

总体原则:承接概要设计,进一步细化。

语言包实现方案:内存模型 扩展引擎multi_language内存模型,增加autoLog属性; 定义后端视图view.json,实现在线维护多语言包。 导入/导出语言包:直接使用现有导入导出APP。 注意项:需验证内存模型是否支持分布式场景!!!

业务/实例数据多语言方案 导出数据:使用snest-base-file.jar的APP能力实现导入导出语言包Excel文件。 扩展重写原来导入导出方法,导出需要在表头增加时区信息,文件名需要翻译当前语言;根据请求的时区转换时间字段的时间。 导入数据:扩展重写原来导入方法,解析表头是否指定时区,没有则取当前请求时区,转换时间字段的时间。 根据前端方案,调整调用service的数据结构,符合多语言的CRUD

APP开发

APP信息

| 标题 | 内容 | | — | — | | 名称 | 国际化多语言APP | | 版本 | v1.0.0 | | 描述 | 描述 | | 关键词 | 关键词 | | 证书 | 证书 | | 作者 | 作者 |

依赖项

package.json中体现

开发环境依赖

| 依赖 | 版本 | | — | — | | Java | >=1.8 | | SpringBoot | >=2.0.0 |

平台依赖

用于描述平台安装APP时,依赖其他APP

平台依赖 版本
底座 >1.0.0
多租户APP *(所有版本)
第三方依赖

| 依赖 | 版本 | | — | — | | maven | maven 包依赖,包含工具类、开源框架等 |

业务模型结构(必选)–架构师(业务建模)

承接概要设计的元模型对象结构清单。 有枚举值的,需要在字段描述中穷举出来。

sie_multil_language_app multil_language MODEL

/**
 * 多语言模型
 *
 * @author sie
 */
@Model(isLogicDelete = Bool.True)
public class MultiLanguage extends BaseModel<MultiLanguage> {

    @Property(columnName = "appName", displayName = "app名称",displayForModel = true)
    private String appName;

    @Property(columnName = "type", displayName = "类型")
    private String type;


    @Property(columnName = "key", displayName = "格式")
    private String key;


    @Property(columnName = "value", displayName = "译文")
    private String value;
    
    @Property(columnName = "lang", displayName = "语言")
    private String lang;
    
    
}
/**
 * 支持语言模型
 *
 * @author sie
 */
@Model(isLogicDelete = Bool.True)
public class SupportLanguage extends BaseModel<SupportLanguage> {

    
    @Property(columnName = "lang", displayName = "语言")
    private String lang;
    
    @Property(columnName = "lang_code", displayName = "语言编码")
    private String lang_code;
}

类图(可选)–架构师

通过类图展示程序结构。

时序图(可选)–架构师

通过时序图展示程序逻辑关系和调用链路。

时序图需要承接领域示意图与系统边界图那部分的复杂场景。

存在跨系统、跨领域间的通讯一定要有时序图

接口设计(必选)–开发

承接概要设计的接口清单,包括web接口、远程接口、本地接口(跨模块接口),详细说明接口IPO(输入、处理过程、输出)。

如果是HTTP接口,可以通过使用swagger定义导出,然后在“接口描述”上增加处理过程逻辑描述,或者直接在swagger定义时描述接口处理过程逻辑。

例如:

APP-sie_multi_language MODEL-multi_language create接口

create【多语言翻译数据管理】多语言翻译数据新增接口

补充描述:此接口支持批量新增翻译管理数据

接口请求路径示例:

http://10.10.6.172:8060/root/rpc/service/?model=multi_language&service=create

请求参数示例:

{
    "id": "guid",
    "jsonrpc": "2.0",
    "method": "service",
    "params": {
        "args": {
            "useDisplayForModel": true,
            "valuesList": [
                  {
                    "app_name": "base",
                    "sys_source_name": "登录名",
	                "type": "meta",
                    "lang": "zh-CN",
	                "key":"base.rbac_user.displayName",
	                "value": "登录名"
                  },
                  {
                    "app_name": "base",
                    "sys_source_name": "系统异常!",
	                "type": "meta",
                    "lang": "en-US",
	                "key": "base.rbac_user.displayName",
	                "value": "System Error!"
                  } 
                ]
        },
        "context": {
            "uid": "",
            "lang": "zh_CN"
        },
        "model": "multi_language",
        "tag": "master",
        "service": "create",
        "app": "sie-multi-language"
    }
}

返回参数示例:

{
    "id": "guid",
    "jsonrpc": "2.0",
    "result": {
        "data": [
        ],
        "context": {
            "uid": "",
            "lang": "zh_CN",
            "tenantId": "03kkylgjxf51b",
            "token": "cae26ebfc0a54a39b2e0da35633d19b6cd11cb19efe6457ce5c8305f32fe206a59763a247662f8ce17da11ef56f4c86292fe7f1c35a3fc07acb24be88f99e0465a240d1185d3e86c2a578c4c8840a02553932676274d68774f8917fe4727ce9ce6683e2858afb96c345cc7dee0e28fcdf46511bb1878408c5f5995d7341aa54f9fa09d230277c4151d7468de927f77a111757cc7a5bce6ab54173fba5fd7029f2993807d54341a01453a469d0774ffe26d57252385d62c84076bb0136dbedeb1d34b738a8030e37b84f75912c1bec62f7992660ea7d2073f2fb30ad7ae2644206db542fc0b06198bd551a6a2ec0676d2",
            "roles": [
                "rbac_role_implementer_admin"
            ],
            "sgs": [],
            "curSg": null,
            "globalFilter": {},
            "clientId": null
        }
    }
}

接口时序图(可选)

如果接口逻辑复杂,需要详细描述接口的处理过程。

###

定时任务(可选)–开发

承接概要设计的定时任务清单(如果有),详细说明定时任务触发条件、实现逻辑。

例如:

Xx定时任务

| 任务名称 | Xxx | | — | — | | 描述 | | | 调度策略 | 每30分钟一次 | | 实现逻辑 | |

种子数据(可选)–开发

数据初始化

配置

数据字典

字典编码 字典名称 描述 字典项
LANGUAGES 语种 多语言语种 中文简体 (0)中文繁体 (1)英语 (2)
       
       
       
字典编码 字典名称 描述 字典项
       
       
       
       

Redis Key(可选)–开发

| 名称 | 信息 | | — | — | | key名称 | SSO:TOKEN:{登录账号} | | value类型 | string | | value示例,需要对value的字段进行说明:字段的含义:token来源:登录时候生成作用:校验登录 | eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZDA0NTJmMi1iMzU0LTQ0YjctYjZkYS04OTNiYTRkYjQ5OWUiLCJpc3MiOiJzaWUtaW90LWp3dCIsInN1YiI6IntcInBob25lTnVtYmVyXCI6XCIxMzYyNjIzMjEwOFwiLFwibG9naW5Gcm9tXCI6XCJQQ1wiLFwidXNlcm5hbWVcIjpcIjEzNjI2MjMyMTA4XCJ9IiwiaWF0IjoxNzA2MjMwOTMwfQ.Moftm51UDor0inoqD18tWI_LaQlz030LAqS5oRpmEXA |

异常处理(可选)–开发

列出开可能出现的业务异常、系统异常,并且统一编码说明。

异常类型 异常编码 异常提示 说明
       
       
       
       

前端详细设计

APP开发

根据迭代内容选择新建、迭代的模板

新建APP(根据迭代选)

APP使用文档、介绍信息等等

写在README.md中,在应用市场中展示给用户的信息

APP信息

app.json中体现

标题 内容
name APP名
version 版本号
discription 描述
keywords 关键词
license 证书
author 作者

依赖项

package.json中体现

开发环境依赖
依赖 版本
node >=18
pnpm >=8
平台依赖

用于描述平台安装APP时,依赖其他APP

平台依赖 版本
底座 >1.0.0
多租户APP *(所有版本)
第三方依赖

| 依赖 | 版本 | | — | — | | dependencies | npm包依赖,包含平台组件市场的npm包等,第三方依赖 | | devDependencies | 开发依赖 |

迭代的APP(根据迭代选)

当前APP信息

系需要体现此次迭代修改的内容

平台依赖

用于描述平台安装APP时,依赖其他APP 系需要体现此次迭代修改的内容

平台依赖 变更前版本 变更后
底座 >1.0.0 >1.5.0
多租户APP * >2.0.0

组件

xxx组件
对应的产品文档/原型/设计稿

截图说明

组件扩展性
  • 扩展的属性
  • 可扩展的方法
  • 不可扩展的内容注意事项
组件功能

列出组件功能说明

  • 搜索功能
  • 排序功能
  • 清除输入功能

必要的组件属性

属性 描述 类型 默认值
type 节点类型 string -

必要的组件事件

事件 描述 参数 返回值
click 点击事件 name,age {}

SDK开发

SDK描述

版本号

依赖项

开发环境依赖

| 依赖 | 版本 | | — | — | | node | >=18 | | pnpm | >=8 |

第三方依赖

| 依赖 | 版本 | | — | — | | 引擎 | ~v1.0.0 | | 开发时的依赖项 | | | 使用时的依赖项 | | | … | … |

兼容性

向前兼容时需要注意的地方

开发规范

文件结构,接口规范,不支持的写法等

XXXX接口

描述该接口的功能|

入口

| 参数 | 描述 | 类型 | 是否必填 | 默认值 | | — | — | — | — | — | | comp | 组件配置 | object | 是 | - |

出口

| 返回值 | 描述 | 类型 | | — | — | — | | schema | node树 | object |

任务拆分

本次优化迭代内容,工作任务拆分,链接任务拆分基本点