{"body":"","images":null,"summary":"","tdk":{"title":"智能输出自动匹配模板系统多语言模板适配配置","description":"下面给出一套可落地的 **“智能输出自动匹配模板系统 + 多语言模板适配”配置方案**,可用于短信、邮件、Push、站内信、IM 等输出场景。\n\n## 1. 核心目标\n\n输入:\n\n- 业务场景:`order.paid`、`verify.code`、`refund.success`\n- 语言区域:`zh-CN`、`en-US`、`ar-AE`\n- 渠道:`sms`、`email`、`app_push`\n- 用户与业务数据:`user`、`order`、`coupon`\n- 渠道限制:长度、是否 HTML、是否 RTL\n\n输出:\n\n- 自动匹配到的模板\n- 使用的语言及 fallback 结果\n- 本地化渲染后的内容\n- 匹配日志、命中原因、回退原因\n\n---\n\n## 2. 推荐总配置结构\n\n```yaml\ntemplate_system:\n default_locale: zh-CN\n fallback_locale: en\n\n matching:\n strategy: score # rule | score | vector_hybrid\n strict_locale: false\n locale_chain:\n zh-Hans-CN: [zh-Hans, zh, zh-CN, default]\n zh-CN: [zh, default]\n en-US: [en, default]\n en-GB: [en, default]\n ar-AE: [ar, default]\n score_weights:\n locale_exact: 50\n locale_fallback: 25\n scene_exact: 30\n channel_match: 20\n user_segment: 15\n priority: 10\n ab_weight: 5\n tie_breaker: [priority, version, updated_at]\n\n i18n:\n placeholder: '{{var}}'\n missing_var_policy: keep # keep | empty | default | error\n auto_localize:\n date: true\n time: true\n number: true\n currency: true\n timezone: true\n rtl_locales: [ar, he, fa, ur]\n max_length:\n sms: 500\n push: 200\n email_subject: 120\n\n render:\n engine: handlebars # handlebars | freemarker | velocity | icu\n escape_html: true\n trim: true\n fallback_on_missing_template: true\n```\n\n---\n\n## 3. 模板与多语言配置示例\n\n```yaml\ntemplates:\n - code: order_paid_notify\n scene: order.paid\n channels: [sms, email, app_push]\n priority: 100\n status: active\n version: 3\n\n match:\n all:\n - field: order.status\n op: eq\n value: paid\n - field: user.level\n op: in\n value: [vip, svip]\n any: []\n\n variables:\n - name: user.name\n type: string\n required: true\n - name: order.id\n type: string\n required: true\n - name: order.amount\n type: money\n required: true\n format: currency\n\n locales:\n zh-CN:\n subject: '支付成功通知'\n body: '尊敬的{{user.name}},您的订单{{order.id}}已支付成功,金额{{order.amount|currency}}。'\n fallback: zh\n\n zh:\n body: '订单{{order.id}}支付成功,金额{{order.amount|currency}}。'\n\n en-US:\n subject: 'Payment Successful'\n body: 'Dear {{user.name}}, your order {{order.id}} has been paid. Amount: {{order.amount|currency}}.'\n fallback: en\n\n en:\n body: 'Order {{order.id}} paid. Amount: {{order.amount|currency}}.'\n\n ar-AE:\n dir: rtl\n body: 'مرحباً {{user.name}}، تم دفع طلبك {{order.id}}.'\n\n default:\n body: 'Order {{order.id}} paid.'\n```\n\n如果涉及复数、性别、数量,建议使用 ICU:\n\n```yaml\nlocales:\n en-US:\n body: '{count, plural, one {# item} other {# items}} in order {{order.id}}'\n zh-CN:\n body: '订单{{order.id}}包含{{count}}件商品'\n```\n\n---\n\n## 4. 自动匹配流程\n\n1. **参数归一化** \n 标准化 `scene`、`locale`、`channel`、`user_segment`、`data`。\n\n2. **候选过滤** \n 过滤 `status=active`、`scene` 匹配、`channel` 匹配的模板。\n\n3. **规则条件评估** \n 执行 `all` / `any` 条件,例如用户等级、订单金额、地区、渠道。\n\n4. **评分排序** \n ```text\n score =\n locale_exact * 50 +\n channel_match * 20 +\n scene_exact * 30 +\n user_segment * 15 +\n priority * 0.1 +\n ab_weight\n ```\n `locale` 评分建议:\n - 完全匹配:1.0\n - 区域回退:0.8\n - 语言回退:0.5\n - default:0.1\n\n5. **多语言 fallback** \n 按 `zh-Hans-CN -\u003e zh-Hans -\u003e zh -\u003e zh-CN -\u003e default` 查找。\n\n6. **渲染输出** \n 替换变量、本地化日期/金额/时区、处理 RTL、长度截断、HTML 转义。\n\n7. **记录日志** \n 记录命中模板、语言、fallback、评分、失败原因。\n\n---\n\n## 5. 渲染接口示例\n\n请求:\n\n```json\nPOST /api/template/render\n{\n \"scene\": \"order.paid\",\n \"locale\": \"zh-Hans-CN\",\n \"channel\": \"sms\",\n \"user\": {\n \"id\": \"u1\",\n \"level\": \"vip\",\n \"name\": \"张三\"\n },\n \"data\": {\n \"order\": {\n \"id\": \"O123\",\n \"amount\": 199.00,\n \"currency\": \"CNY\"\n }\n },\n \"options\": {\n \"fallback\": true,\n \"strict\": false\n }\n}\n```\n\n响应:\n\n```json\n{\n \"templateCode\": \"order_paid_notify\",\n \"localeUsed\": \"zh-CN\",\n \"fallbackUsed\": true,\n \"content\": \"尊敬的张三,您的订单O123已支付成功,金额¥199.00。\",\n \"matchScore\": 95.5,\n \"renderTimeMs\": 12\n}\n```\n\n---\n\n## 6. 数据库表建议\n\n| 表 | 作用 |\n|---|---|\n| `template` | 模板主信息:code、scene、channel、priority、status、version |\n| `template_i18n` | 多语言内容:template_id、locale、subject、body、dir、fallback |\n| `template_rule` | 匹配条件与评分权重 |\n| `template_variable` | 变量定义、类型、默认值、格式器 |\n| `locale_fallback` | 语言回退链 |\n| `template_render_log` | 渲染日志、命中、回退、失败原因 |\n\n---\n\n## 7. 多语言适配关键点\n\n- 统一占位符,例如 `{{user.name}}`,避免各语言模板变量不一致。\n- 语言回退必须显式配置,不能只靠 default。\n- 金额、日期、数字、时区按 locale 自动格式化。\n- RTL 语言必须设置 `dir: rtl`,并检查排版。\n- 短信、Push 要按语言设置长度限制。\n- 机器翻译可辅助生成,但上线前必须审核。\n- 模板版本化发布,支持灰度、回滚、A/B。\n- 监控指标:匹配命中率、fallback 率、缺失翻译率、渲染失败率、点击率。\n\n如果你需要,我可以继续输出:**完整 YAML 配置、数据库 DDL、Java/Python 实现、前端管理后台字段设计,或直接可运行的匹配+渲染示例代码。**","keyword":"智能输出自动匹配模板系统多语言模板适配配置"},"title":"智能输出自动匹配模板系统多语言模板适配配置"}