在多语言业务场景中,为现有业务实体(Product、Vehicle、RealEstate 等)增加国际化支持,核心矛盾在于:既要保留原有数据模型的稳定性,又要实现按语言动态返回字段值。
本方案采用“主表存事实数据 + 翻译层存语义 + 服务层统一装配”的架构,实现了零侵入式的多语言扩展。
核心理念在于将“业务逻辑”与“语言逻辑”完全剥离:
设计原则:符合开闭原则(OCP),避免了“全表增加多语言列”或“强制大表 JOIN”的性能陷阱。
通过 PostgreSQL 的声明式分区(Declarative Partitioning)实现逻辑统一与物理隔离。
i18n_field_registry:记录 (entity_type, field_key) 白名单。i18n_translation_base:
i18n_product_t、i18n_vehicle_t 等。entity_id、field_key、language_code、translated_value。(entity_id, field_key, language_code, region_code)。(entity_type, entity_id) 优化批量查询。新增独立的 i18n 模块,包含以下核心无状态组件:
组件名称 | 职责描述 |
|---|---|
LocaleFallbackChain | 实现语言回退逻辑(如:zh-CN → en)。 |
TranslationResolver | 核心解析器,批量加载候选翻译并按优先级选值。 |
TranslationHelper | 挂载工具类,负责将翻译值覆盖到 DTO 字段。 |
WriteValidator | 基于注册表白名单校验写入合法性,防止垃圾数据。 |
这是本方案最精妙的“无感封装”环节。系统不再通过 SQL JOIN 强行关联翻译,而是在 DTO 组装完成后,通过 AOP 或 Service 装饰器进行动态覆盖:
entity_type + entity_id + field_key 组合,单次 SQL 批量拉取所有相关的翻译备选记录。zh-HK),按预设回退链(zh-HK → zh-CN → en)在内存中过滤出最优翻译值。效果:原有的 ProductService 代码逻辑一行不改,返回给前端的 JSON 却已根据用户语言完成了动态替换。
在享受灵活性的同时,需注意以下权衡:
本方案最本质的突破在于思维模型的转变:不再将多语言视为数据本身的“固有属性”,而是将其视为一种“观察视角”。
通过以下链路的闭环,实现了业务代码逻辑的“零污染”:
entity_type + entity_id + field_key 仅发起一次高效的批量查询。LocaleFallbackChain 在内存中快速执行回退算法(如 zh-TW → zh-CN → en),避免了多次数据库交互。TranslationApplierService 像“贴纸”一样将翻译值精准覆盖到 DTO 字段。通过**“分区表 + 注册表 + 服务层装饰装配”的组合拳,本方案实现了多语言能力的即插即用**:
架构本质: 它是对核心业务逻辑的横向解耦。 既保证了数据库底层的高性能与强一致性,又赋予了上层应用极高的灵活性。它不仅解决了多语言存储的难题,更提供了一套通用的、可扩展的业务实体增强框架,为系统的全球化运营奠定了坚实的架构底座。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。