国际版外卖系统在云上发布多语言资源时,常见误区是把语言包和支付证书放在同一套「上线脚本」里执行。语言 JSON 或 PO 文件适合走对象存储 + CDN;支付密钥与 notify 地址属于另一类变更,频率更低、审批更严,宜分 pipeline。
一、静态语言资源放对象存储
菜单、按钮、错误提示等 bundle 打成带版本号的目录,上传到对象存储,开启版本控制。客户端启动或定时拉取 bundle_version,命中缓存则跳过下载。预发 bucket 与生产 bucket 隔离,试跑翻译不污染正式 CDN 路径。
上传前宜做 JSON schema 校验,防止缺 key 导致客户端白屏。大文件可分语言分包,减少用户首次下载体积。
二、CDN 刷新与回滚
发布新 bundle 后,对变更路径做 CDN 刷新;保留上一版本对象,必要时把 latest 指针指回旧版本,无需回滚整个应用镜像。大促或开业前不宜「删旧语言包只留最新」,否则回滚窗口消失。
刷新任务失败要有告警;边缘节点仍服务旧对象时,用户看到的可能是混合语种,客诉难查。宜在监控里对比 origin 版本与边缘抽样版本。
三、与支付变更解耦
支付 profile 变更涉及密钥轮换、回调 URL 防火墙放行,通常要走变更窗口。语言包可日更甚至小时级修正错别字。若共用一次发布,支付失败会导致语言修正也无法上线。运维日历上应有两类事件:i18n 发布、payment 变更。
密钥轮换当天即使不改语言,也应跑 smoke test 支付;反之,只改语言的日子不要动支付密钥,避免财务误以为通道又变了。
四、数据库与配置中心
订单库不存 UI 文案,只存 locale 代码与 bundle 版本号快照(便于客诉追溯)。payment profile id 存在订单扩展字段,便于对账。配置中心分 group:i18n/* 与 payment/*,权限也可分开,减少误改生产密钥。
读多写少的 bundle 元数据可放配置中心,大段文案仍放 OSS,避免配置中心体积膨胀。
五、私有化与混合部署
客户要求数据不出境时,语言包仍可走境内 CDN 加速,源站落在客户 VPC 内对象存储。支付 notify 入口需在同样 VPC 或经专线可达,避免「语言资源境内、回调境外」的跨区超时。导出任务与订单库宜同区域,降低延迟。
混合云场景下,语言 CDN 与订单库网络策略要文档化,否则新运维接手易误关安全组。
六、监控指标
关注 bundle 下载失败率、CDN 4xx、客户端版本滞后比例。支付 notify 延迟与 i18n 无关,但应分 dashboard,避免语言发布当晚误把支付告警当成翻译问题。
客户端版本滞后超过阈值时,可提示用户「请重启 App 获取最新菜单」,减少旧 bundle 客诉。
七、光合同城交付建议
海外版支持语言包与支付分开验收;源码与部署文档宜写明 bucket 结构、版本号规则与回滚步骤。通道与税务按国别定制;商务规则由客户确定;系统侧不抽成客户平台订单。
交付验收增加一项:运维在客户账号独立完成一次 bundle 发布与回滚,不依赖供应商远程。
八、小结
云上发语言,重点是版本化、可回滚、与支付 pipeline 分离;开业周的语言修正不应捆绑支付证书变更。两类 pipeline 各留 runbook,新人也能按步骤操作。
对象存储生命周期规则别误删仍被 latest 指针引用的旧 bundle;支付侧证书过期提醒与 i18n 发布提醒分收件人,避免财务收到「菜单 JSON 已上传」这类无关通知。开业大促前冻结 payment 变更窗口,只允许多语言热修,可显著降低「促销当天支付挂了」的风险。