惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
J
Java Code Geeks
小众软件
小众软件
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
腾讯CDC
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
量子位
M
MIT News - Artificial intelligence
Last Week in AI
Last Week in AI
L
LangChain Blog

博客园 - 升鲜宝生鲜供应链系统

升鲜宝生鲜配送供应链系统 vs_车辆管理模块开发文档 PRD(一)---升鲜宝生鲜配送供应链管理系统 升鲜宝供应链管理系统Spring Boot 4.0 项目源代码结构及数据库字典模块命名与表字段命名开发约束规范(一)---升鲜宝生鲜配送供应链管理系统 升鲜宝 B2B 订货商城线性 --- |----- 原型图(一)---升鲜宝生鲜配送供应链管理系统源代码服务 升鲜宝云商品库功能设计与数据库表结构详细文档(一)---升鲜宝生鲜配送供应链管理系统源代码服务 升鲜宝PAD生产加工系统:销售单客户预订明细分割增强版 猪肉分割加工轻量版 · PAD端操作效果图与开发说明(二)---升鲜宝生鲜配送供应链管理系统源代码服务 升鲜宝PAD生产加工系统 猪肉分割加工轻量版功能模块方案与页面效果图(一)---升鲜宝生鲜配送供应链管理系统 升鲜宝B2B订货商城后端开发文档(一)---升鲜宝生鲜配送供应链管理系统 【研究与学习】快驴商品模块功能分析与数据库表结构设计文档(一)---升鲜宝生鲜配送供应链管理系统源代码服务(标准版、专业版) 【研究与学习】悦厚系统商品模块功能设计与数据字典文档(一)---升鲜宝生鲜配送供应链管理系统 【研究与学习】易订货商品模块设计分析文档字段级数据字典 + 表关系 + 单位换算 + 价格/库存/促销链路(一)---升鲜宝生鲜配送供应链管理系统 【研究与学习收银系统】(一)菜某秘后台 SaaS 租户运营控制、费用管理系统数据字典及功能设计方案详细文档 升鲜宝云仓供应链管理系统功能详细设计方案 PRD(二)---升鲜宝生鲜配送供应链管理系统 升鲜宝云仓供应链管理系统方案(一)---升鲜宝供应链管理系统 统一字段权限组件功能设计方案(一)---升鲜宝生鲜配送供应链管理系统 升鲜宝供应链管理系统生成图片、生成 PDF、生成分享码通用组件功能设计文档(一)---升鲜宝生鲜配送供应链管理系统源代码(Spring Boot Vue3 Uniapp ) 升鲜宝后端 API 与手机端 API 开发说明(一)---升鲜宝生鲜配送供应链管理系统重构版 「我的中心」设置模块 功能设计与开发文档(一)--- 升鲜宝生鲜配送供应链管理系统重构说明 通用明细列表控件设计与开发文档(一)---升鲜宝生鲜配送供应链管理软件重构方案 管理类软件通用高级查询组件(一)---升鲜宝生鲜配送供应链管理软件重构方案 升鲜宝商品模块重构版接口清单 (二)+ 页面原型字段设计 升鲜宝供应链商品模块设计(一) 数据字典及功能开发详细说明 升鲜宝日志功能模块设计说明(一)---生鲜配送供应链管理系统源代码 升鲜宝多语言数据库设计演进对比文档 升鲜宝通用自定义列导入导出功能的通用设计方案(一)---升鲜宝生鲜配送供应链管理系统源代码 升鲜宝高性能多语言解决方案(二)---升鲜宝生鲜配送供应链管理系统 升鲜宝高性能多语言解决方案(一)---升鲜宝生鲜配送供应链管理系统 企业微信CRM模块功能设计(三)—— 升鲜宝生鲜配送供应链管理系统源代码 企业微信CRM模块功能设计(二)—— 升鲜宝生鲜配送供应链管理系统源代码 企业微信CRM模块功能设计(一)—— 升鲜宝生鲜配送供应链管理系统源代码 升鲜宝社区团购商城软件设计功能文档(含完整功能设计、业务流程图、数据字典、DDL 口径与后台权限设计)--生鲜配送供应链管理系统源码
升鲜宝静态文本国际化完整 SQL 说明
升鲜宝生鲜供应链系统 · 2026-04-19 · via 博客园 - 升鲜宝生鲜供应链系统

升鲜宝静态文本国际化完整 SQL 说明

方案定案

升鲜宝静态文本国际化采用“资源包表 + 资源定义表 + 翻译明细表 + 发布表”的四表架构,按平台、模块、页面组织静态文本资源;运行时统一通过页面资源包加载与缓存分发,不再使用旧式单表 key-value 实时查询模型。

一、四张表的职责

1. sys_i18n_bundle

资源包表。
一个页面或一个场景对应一个 bundle,例如:

  • admin.crm.customer_form
  • customer.oms.order_submit
  • pda.wms.stockin_scan

2. sys_i18n_resource

资源定义表。
定义一个 bundle 里有哪些静态文本项,例如:

  • admin.crm.customer_form.label.customer_name
  • admin.crm.customer_form.placeholder.phone

3. sys_i18n_resource_text

翻译明细表。
保存某个资源在某种语言下的显示文本,例如:

  • resource_id=xxx + language_code=en_US -> Customer Name

4. sys_i18n_bundle_publish

发布表。
用于记录某个 bundle 在某个语言下的发布版本,方便 Redis / Caffeine 缓存版本失效。

二、推荐资源编码规范

统一建议:

{platform}.{module}.{page}.{componentType}.{componentName}

示例:

  • admin.crm.customer_form.label.customer_name
  • admin.crm.customer_form.placeholder.phone
  • customer.oms.order_submit.button.submit
  • pda.wms.stockin_scan.placeholder.barcode

三、运行时读取方式

运行时不要逐条查单个 key,统一按 bundle 读取。

页面初始化时

按:

  • platformCode
  • moduleCode
  • pageCode
  • languageCode

一次性加载该页面的全部静态文本。

缓存 Key 建议

Redis:

i18n:bundle:{bundleCode}:{languageCode}:v{publishVersion}

例如:

  • i18n:bundle:admin.crm.customer_form:zh_CN:v12
  • i18n:bundle:pda.wms.stockin_scan:en_US:v7

值建议直接缓存为 JSON Map:

{
  "admin.crm.customer_form.label.customer_name": "客户名称",
  "admin.crm.customer_form.placeholder.phone": "请输入手机号",
  "admin.crm.customer_form.button.save": "保存"
}

四、回退规则

统一建议放在服务层做,不在 SQL 里循环查:

  1. 当前语言翻译
  2. 默认语言翻译
  3. default_text
  4. resource_code

五、适用范围

本方案只适用于:

  • 页面标题
  • 表单标签
  • 列头
  • placeholder
  • tooltip
  • tab 标题
  • dialog 标题
  • 空状态文案
  • 固定说明文案
  • 非权限型普通按钮文案

不用于:

  • 菜单 / RBAC 按钮名称
  • 消息模板
  • 业务主数据
  • 动态业务字段翻译

六、SQL 文件内容

附带的 SQL 已经包含:

  • 四张表完整 DDL
  • 外键与索引
  • 一组示例 bundle / resource / text / publish 初始化数据
  • 常用查询 SQL 注释示例

可直接作为研发初版落库脚本。

`-- =========================================================
-- 升鲜宝静态文本国际化完整 SQL
-- 方案:资源包表 + 资源定义表 + 翻译明细表 + 发布表
-- 说明:
-- 1. 本方案只服务“静态文本”国际化
-- 2. 不包含菜单/RBAC 按钮名称、消息模板、业务主数据翻译
-- 3. 运行时按页面资源包(bundle)加载,不再按单个 key-value 实时查询
-- 4. 字符集统一 utf8mb4 / utf8mb4_general_ci
-- =========================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- =========================================================
-- 1. 资源包表
-- =========================================================
DROP TABLE IF EXISTS sys_i18n_bundle;

CREATE TABLE sys_i18n_bundle (
id bigint NOT NULL COMMENT '主键id',
bundle_code varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '资源包编码,唯一',
bundle_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '资源包名称',
platform_code varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '端:admin/customer/purchase/supplier/picking/delivery/pda',
module_code varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模块编码,如crm/wms/oms',
page_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '页面编码,如customer_form/order_submit',
scene_type varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'page' COMMENT '场景类型:page/dialog/component',
default_language_code varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'zh_CN' COMMENT '默认语言',
version_no bigint NOT NULL DEFAULT '1' COMMENT '当前版本号',
enabled int NOT NULL DEFAULT '1' COMMENT '状态 0禁用 1正常',
del_flag int NOT NULL DEFAULT '0' COMMENT '删除标记 0正常 1删除',
sort_code int NOT NULL DEFAULT '1' COMMENT '排序码',
create_date bigint DEFAULT NULL COMMENT '创建时间',
creator bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
update_date bigint DEFAULT NULL COMMENT '修改时间',
updater bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
remark varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id) USING BTREE,
UNIQUE KEY uk_bundle_code (bundle_code) USING BTREE,
KEY idx_platform_module_page (platform_code,module_code,page_code) USING BTREE,
KEY idx_scene_type (scene_type) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='静态文本资源包表';

-- =========================================================
-- 2. 资源定义表
-- =========================================================
DROP TABLE IF EXISTS sys_i18n_resource;

CREATE TABLE sys_i18n_resource (
id bigint NOT NULL COMMENT '主键id',
bundle_id bigint NOT NULL COMMENT '资源包id=sys_i18n_bundle.id',
resource_code varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '资源编码,全局唯一',
resource_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '资源名称',
component_type varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '组件类型:label/column/placeholder/tab/dialog/button/tooltip/empty',
component_name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '组件名/字段名',
default_text varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '默认文本',
max_length int DEFAULT '200' COMMENT '最大建议长度',
sort_code int NOT NULL DEFAULT '1' COMMENT '排序码',
enabled int NOT NULL DEFAULT '1' COMMENT '状态 0禁用 1正常',
del_flag int NOT NULL DEFAULT '0' COMMENT '删除标记 0正常 1删除',
create_date bigint DEFAULT NULL COMMENT '创建时间',
creator bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
update_date bigint DEFAULT NULL COMMENT '修改时间',
updater bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
remark varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id) USING BTREE,
UNIQUE KEY uk_resource_code (resource_code) USING BTREE,
KEY idx_bundle_id (bundle_id) USING BTREE,
KEY idx_component (component_type,component_name) USING BTREE,
CONSTRAINT fk_sys_i18n_resource_bundle FOREIGN KEY (bundle_id) REFERENCES sys_i18n_bundle (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='静态文本资源定义表';

-- =========================================================
-- 3. 翻译明细表
-- =========================================================
DROP TABLE IF EXISTS sys_i18n_resource_text;

CREATE TABLE sys_i18n_resource_text (
id bigint NOT NULL COMMENT '主键id',
resource_id bigint NOT NULL COMMENT '资源id=sys_i18n_resource.id',
language_code varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '语言编码,如zh_CN/en_US/ja_JP',
text_value varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '翻译文本',
version_no bigint NOT NULL DEFAULT '1' COMMENT '资源文本版本号',
enabled int NOT NULL DEFAULT '1' COMMENT '状态 0禁用 1正常',
del_flag int NOT NULL DEFAULT '0' COMMENT '删除标记 0正常 1删除',
create_date bigint DEFAULT NULL COMMENT '创建时间',
creator bigint NOT NULL DEFAULT '0' COMMENT '创建人id',
update_date bigint DEFAULT NULL COMMENT '修改时间',
updater bigint NOT NULL DEFAULT '0' COMMENT '修改人id',
remark varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id) USING BTREE,
UNIQUE KEY uk_resource_lang (resource_id,language_code) USING BTREE,
KEY idx_lang_resource (language_code,resource_id) USING BTREE,
CONSTRAINT fk_sys_i18n_resource_text_resource FOREIGN KEY (resource_id) REFERENCES sys_i18n_resource (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='静态文本翻译明细表';

-- =========================================================
-- 4. 发布表
-- =========================================================
DROP TABLE IF EXISTS sys_i18n_bundle_publish;

CREATE TABLE sys_i18n_bundle_publish (
id bigint NOT NULL COMMENT '主键id',
bundle_id bigint NOT NULL COMMENT '资源包id=sys_i18n_bundle.id',
language_code varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '语言编码',
publish_version bigint NOT NULL DEFAULT '1' COMMENT '发布版本号',
publish_time bigint DEFAULT NULL COMMENT '发布时间',
publish_user_id bigint NOT NULL DEFAULT '0' COMMENT '发布人',
enabled int NOT NULL DEFAULT '1' COMMENT '状态 0禁用 1正常',
del_flag int NOT NULL DEFAULT '0' COMMENT '删除标记 0正常 1删除',
PRIMARY KEY (id) USING BTREE,
UNIQUE KEY uk_bundle_lang_publish (bundle_id,language_code) USING BTREE,
KEY idx_bundle_lang (bundle_id,language_code) USING BTREE,
CONSTRAINT fk_sys_i18n_bundle_publish_bundle FOREIGN KEY (bundle_id) REFERENCES sys_i18n_bundle (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='静态文本资源包发布表';

-- =========================================================
-- 5. 初始化示例数据
-- =========================================================

-- 资源包:后台 CRM 客户表单
INSERT INTO sys_i18n_bundle
(id,bundle_code,bundle_name,platform_code,module_code,page_code,scene_type,default_language_code,version_no,enabled,del_flag,sort_code,create_date,creator,update_date,updater,remark)
VALUES
(100000000000000001,'admin.crm.customer_form','后台-CRM-客户表单','admin','crm','customer_form','page','zh_CN',1,1,0,1,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'后台CRM客户表单静态文本资源包');

-- 资源定义
INSERT INTO sys_i18n_resource
(id,bundle_id,resource_code,resource_name,component_type,component_name,default_text,max_length,sort_code,enabled,del_flag,create_date,creator,update_date,updater,remark)
VALUES
(100000000000100001,100000000000000001,'admin.crm.customer_form.label.customer_name','客户名称标签','label','customer_name','客户名称',50,1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'客户名称标签'),
(100000000000100002,100000000000000001,'admin.crm.customer_form.placeholder.phone','手机号占位符','placeholder','phone','请输入手机号',50,2,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'手机号占位符'),
(100000000000100003,100000000000000001,'admin.crm.customer_form.button.save','保存按钮','button','save','保存',20,3,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'保存按钮');

-- 中文翻译
INSERT INTO sys_i18n_resource_text
(id,resource_id,language_code,text_value,version_no,enabled,del_flag,create_date,creator,update_date,updater,remark)
VALUES
(100000000000200001,100000000000100001,'zh_CN','客户名称',1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'中文'),
(100000000000200002,100000000000100002,'zh_CN','请输入手机号',1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'中文'),
(100000000000200003,100000000000100003,'zh_CN','保存',1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'中文');

-- 英文翻译
INSERT INTO sys_i18n_resource_text
(id,resource_id,language_code,text_value,version_no,enabled,del_flag,create_date,creator,update_date,updater,remark)
VALUES
(100000000000200004,100000000000100001,'en_US','Customer Name',1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'英文'),
(100000000000200005,100000000000100002,'en_US','Please enter phone number',1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'英文'),
(100000000000200006,100000000000100003,'en_US','Save',1,1,0,UNIX_TIMESTAMP()1000,0,UNIX_TIMESTAMP()1000,0,'英文');

-- 发布记录
INSERT INTO sys_i18n_bundle_publish
(id,bundle_id,language_code,publish_version,publish_time,publish_user_id,enabled,del_flag)
VALUES
(100000000000300001,100000000000000001,'zh_CN',1,UNIX_TIMESTAMP()1000,0,1,0),
(100000000000300002,100000000000000001,'en_US',1,UNIX_TIMESTAMP()
1000,0,1,0);

-- =========================================================
-- 6. 常用查询 SQL
-- =========================================================

-- 6.1 按页面加载静态文本资源包
-- 入参:platformCode / moduleCode / pageCode / languageCode
/*
SELECT
b.bundle_code,
b.version_no,
r.resource_code,
COALESCE(t.text_value, r.default_text) AS text_value
FROM sys_i18n_bundle b
INNER JOIN sys_i18n_resource r
ON r.bundle_id = b.id
AND r.del_flag = 0
AND r.enabled = 1
LEFT JOIN sys_i18n_resource_text t
ON t.resource_id = r.id
AND t.language_code = #{languageCode}
AND t.del_flag = 0
AND t.enabled = 1
WHERE b.platform_code = #{platformCode}
AND b.module_code = #{moduleCode}
AND b.page_code = #{pageCode}
AND b.del_flag = 0
AND b.enabled = 1
ORDER BY r.sort_code ASC, r.id ASC;
*/

-- 6.2 按 bundle_code 加载资源包
/*
SELECT
r.resource_code,
COALESCE(t.text_value, r.default_text) AS text_value
FROM sys_i18n_bundle b
INNER JOIN sys_i18n_resource r
ON r.bundle_id = b.id
AND r.del_flag = 0
AND r.enabled = 1
LEFT JOIN sys_i18n_resource_text t
ON t.resource_id = r.id
AND t.language_code = #{languageCode}
AND t.del_flag = 0
AND t.enabled = 1
WHERE b.bundle_code = #{bundleCode}
AND b.del_flag = 0
AND b.enabled = 1
ORDER BY r.sort_code ASC, r.id ASC;
*/

-- 6.3 资源维护页:查看 bundle 下全部资源及各语言
/*
SELECT
b.bundle_code,
r.resource_code,
r.resource_name,
r.component_type,
r.component_name,
r.default_text,
t.language_code,
t.text_value
FROM sys_i18n_bundle b
INNER JOIN sys_i18n_resource r
ON r.bundle_id = b.id
AND r.del_flag = 0
LEFT JOIN sys_i18n_resource_text t
ON t.resource_id = r.id
AND t.del_flag = 0
WHERE b.bundle_code = #{bundleCode}
AND b.del_flag = 0
ORDER BY r.sort_code ASC, r.id ASC, t.language_code ASC;
*/

-- 6.4 缺失翻译检查:找默认语言已存在、目标语言不存在的资源
/*
SELECT
b.bundle_code,
r.resource_code,
r.default_text
FROM sys_i18n_bundle b
INNER JOIN sys_i18n_resource r
ON r.bundle_id = b.id
AND r.del_flag = 0
LEFT JOIN sys_i18n_resource_text target
ON target.resource_id = r.id
AND target.language_code = #{targetLanguageCode}
AND target.del_flag = 0
AND target.enabled = 1
WHERE b.del_flag = 0
AND b.enabled = 1
AND r.enabled = 1
AND target.id IS NULL
ORDER BY b.bundle_code ASC, r.sort_code ASC, r.id ASC;
*/

SET FOREIGN_KEY_CHECKS = 1;
`