多语言平台架构设计
设计 国际化(Internationalization,简称i18n),目的是为了更好的提供本地化的服务。
概念
参考语言 Reference,其他语种依据参考语言做翻译
模糊翻译的概念 Fuzzy Translation,参考语言有变动后,其他语言翻译设标志位
输出
app 文件(Android/ios的 xml)
web 文件(json5)
nacos (json)
api (支持CI/CD拉取)
dubbo (模板的渲染)
类型
静态 (android/iso/h5/服务端等)
动态 (服务端)
模型
应用 app(神眸/ cinmoor/ sensforge / open-platform)
模块 module(可选, app/web 端使用:云相册模块、直播模块 )
标识 key 应用下的唯一标识,业务自定义,可以理解为标识code
参考语言 reference 多语言的参考语言、本位语言,翻译是基于此语言做其他新增语言翻译。应用维度
语种标识 [_language_code_]-[_country_code_]
流程
管理员新建应用(app),确定参考语言(reference)
管理员做初始化,导入 key 和对应的 参考语言(支持增量,参考语言覆盖需要确认)
新建多语言版本(继承上个发布版本),新增语种(可选)。
翻译内容输入
直接页面编辑
导出模板之后翻译再导入
大模型翻译
翻译内容输出
导出xml/json/excel文件
导出到nacos中
Api接口输出
dubbo接口按key 模板渲染输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sequenceDiagram actor p as 客户 participant a as saas participant d as 二方 participant n as nacos p->>a: 新建app、设置参考语言 p->>a: 上传初始化(key+参考语言) p->>a: 新建版本 p->>a: 新建语种 p->>p: 执行翻译 p->>a: 上传、编辑翻译 p->>a: 发布 a->>p: 导出文本 p->>d: 导入文件 a->>n: 刷新配置 d->>a: 拉取翻译
版本状态 限制:只能导出最新发布版本。
数据结构 应用 tb_i18n_app
字段
名称
备注
id
主键
app_code
biz_type
业务类型
reference
参考语言
en
remark
manager
管理员
[]
lang
语言种类
语言种类 [“zh-CN”,”en-US”]
module
模块列表
[]
version_count
保留版本数
默认是 2
publish_version
发布版本
latest_version
最新版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE `tb_i18n_app` ( `id` bigint(20) unsigned NOT NULL COMMENT 'id', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', `app_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用标识', `biz_type` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '业务类型', `reference` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参考语种', `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `manager` json NOT NULL COMMENT '管理员', `lang` json DEFAULT NULL COMMENT '语种', `module` json DEFAULT NULL COMMENT '模块', `version_count` int(10) unsigned DEFAULT NULL COMMENT '保留版本', `publish_version` bigint(20) unsigned DEFAULT NULL COMMENT '发布版本', `latest_version` bigint(20) unsigned DEFAULT NULL COMMENT '最新版本', PRIMARY KEY (`id`), UNIQUE KEY `tb_i18n_app_unique` (`app_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
翻译 key
字段
名称
备注
app_id
module
key
大小写敏感
type
text/json
remark
说明
message
错误提示信息
version_id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE `tb_i18n_key` ( `id` bigint(20) unsigned NOT NULL COMMENT 'id', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', `app_id` bigint(20) unsigned NOT NULL COMMENT '应用ID', `module` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模块', `key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'key', `type` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '类型', `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `message` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `version_id` bigint(20) unsigned NOT NULL COMMENT '版本ID', PRIMARY KEY (`id`), UNIQUE KEY `tb_i18n_key_uniq` (`app_id`,`version_id`,`key`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
content
字段
名称
备注
key_id
lang_code
语言
cn/en
content
fuzzy
1. 0
version
1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `tb_i18n_content` ( `id` bigint(20) unsigned NOT NULL COMMENT 'id', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', `key_id` bigint(20) unsigned NOT NULL COMMENT 'keyid', `lang` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '语种', `content` text COLLATE utf8mb4_unicode_ci, `fuzzy` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `tb_i18n_content_key_uniq` (`key_id`,`lang`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
版本
字段
名称
备注
app_id
version
name
remark
status
0-开发中 1-已发布 2-提测
published_by
published_at
archived
归档
直接静态化存储到oss
archived_key
归档key
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE `tb_i18n_version` ( `id` bigint(20) unsigned NOT NULL COMMENT 'id', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime DEFAULT NULL COMMENT '修改时间', `app_id` bigint(20) unsigned NOT NULL COMMENT 'appid', `version` bigint(20) unsigned NOT NULL COMMENT '版本', `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `status` int(10) unsigned DEFAULT NULL COMMENT '状态 0-开发中 1-已发布 2-提测', `published_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `published_at` datetime DEFAULT NULL, `archived` tinyint(3) unsigned DEFAULT NULL COMMENT '是否归档 1-已归档', `archived_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '归档Key', PRIMARY KEY (`id`), UNIQUE KEY `tb_i18n_version_app_id_IDX` (`app_id`,`version`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
发布校验 版本发布前需要做完整的校验逻辑
节奏
框架与静态资源支持
大模型翻译支持
动态实时模板渲染支持
参考 当前成熟商业化产品
https://lokalise.com/
https://poeditor.com/
https://weblate.org/zh-hans/
Language Codeshttps://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
Country Codeshttps://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes