国际版外卖系统交付中,若把 i18n 发布与支付通道配置绑在同一次上线窗口,任一环节回滚都会拖死另一项。更稳的是多语言配置与支付通道分开测:语言走配置中心版本号;支付走沙箱 intent + 回调幂等。
结论:locale 与 payment profile 解耦
locale_bundle (version L12) payment_profile (country=XX, channel=Y) order-service (language-agnostic)订单服务不依赖 UI 语种;支付 profile 按国家切换,不随换语言包而变。
语言包:版本化发布
{"locale":"ja-JP","bundle_version":"20260927.2","strings":{"checkout.pay":"お支払い"}}客户端If-None-Match: bundle_version拉取;后台改文案 bump 版本,无需重发支付证书。
支付:固定 locale 下沙箱验收
defcreate_intent(order_id:str,payment_profile_id:str)->dict:profile=payment_profiles.get(payment_profile_id)order=order_repo.get(order_id)returnchannel_adapter(profile).create_intent(amount=order.amount,currency=profile.currency,notify_url=profile.notify_url,)验收阶段用locale=en-US或默认语即可测 intent + 回调;语言包可并行换ja-JP只验展示。
分开测的三段
段 1|仅语言:切换 bundle,用户端/商家端文案更新,不下单。
段 2|仅支付:固定默认语,沙箱小额单,验签与paid状态。
段 3|组合:目标语种 + 正式 profile,端到端一单。
导出与 locale
CSV 列名宜走export_locale配置,与 UI 语种可独立。财务日文列名、用户英文界面可同时存在。
常见踩坑
坑 1:支付页字符串硬编码
宜全部走语言包或模板引擎。
坑 2:换语言触发支付 profile 切换
profile 应绑国家/商户,不绑 locale。
坑 3:对账文件仅默认语
export 模板宜可配置。
光合同城边界
光合同城海外版成品支持语言包与支付 profile 解耦;各国通道与税务字段按需定制对接;商务规则由客户在当地确定;系统侧不抽成客户平台订单。
小结
国际版外卖系统多语言与支付分开测,并行推进、独立回滚;端到端组合验收放在两段都绿之后。
商家端与骑手端 locale
商家 App 与骑手 App 宜独立bundle_id,可共用locale_version指针。发布日语包时,三端同时 bump 或允许 stagger,但订单服务无感。
defget_strings(client:str,locale:str)->dict:bundle=locale_repo.get(client,locale)returnbundle.strings对账导出 regression
deftest_export_headers_match_locale(export_locale,sample_order_id):row=export_one(sample_order_id,locale=export_locale)assertrow["header_lang"]==export_localeassertrow["order_id"]==sample_order_id支付 profile 热切换
生产环境切换 profile 宜灰度:新单走新 profile,进行中单仍用创建时绑定的payment_profile_id快照,避免中途换通道导致回调进错 handler。
defcreate_intent(order_id):order=orders.get(order_id)profile_id=order.payment_profile_idorsettings.default_profile...税务字段
各国税务列不同,宜tax_columns按 profile 配置,不写死一国模板为全球默认。税务结论由客户在当地确定。
发布回滚
locale 回滚 = 指回旧 bundle_version;payment 回滚 = 停用新 profile,旧 profile 仍接回调。两维独立回滚,禁止「一键回滚全部」误伤支付。
监控
指标:payment_intent_fail_rate、locale_bundle_fetch_304_rate、export_job_duration。语言发布不应引起支付错误率上升。
小结补述
国际版外卖系统分开测的本质是独立版本线与独立回滚面;组合验收是最后一步,不是唯一一步。
换语言包当天要不要停支付
国际版外卖系统换语言包若触发支付配置重载,试跑期会出现:文案更新了,沙箱支付却报错。分开测的含义是:语言包发布只 bump 语言版本号,支付 profile 不动;支付 profile 切换只改国家与通道,语言版本号不动。两段各自有回滚面,组合验收放在两段都绿之后。
商家端与骑手端可共用语言版本指针,但宜独立拉取入口,避免一端漏更新。对账导出列名可走独立导出语种,与用户界面语种解耦:用户看英文、商家财务看当地语列名,可以同时存在。税务相关列各国不同,由客户在当地确定口径,系统只提供可配置字段。
组合验收前不宜同时变更语言包与支付 profile;若必须同窗口发布,先回滚面分开演练,再合并发布,避免「一键回滚全部」误伤已通沙箱的通道。