date.toLocaleDateString(lang, {year:'numeric', month:'short', day:'numeric'})
# lang 取自模板上下文,不要用 process.env.LANG

英文版订单邮件的发货日期显示成「2026年11月15日」,正文其他部分都是英文,看起来像漏翻了一整段。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,日期格式化调用没传 locale,直接用了服务器默认的中文环境,模板语言变量只影响了文案没影响格式化函数。金额和数字分隔符也有同样的问题。

「邮件模板多语言日期」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

处理上按这个顺序:把当前语言作为参数传进格式化函数,日期、金额、数字三处统一走一个工具方法;在模板上下文里带上 lang 字段,别在模板里再判断一次语言;切换语言后各发一封,逐字对比日期和金额的写法。

改完只确认一件事:英文邮件显示 Nov 15, 2026,中文邮件仍显示 2026年11月15日。

作者 9823189