接手第一个反向海淘 项目那周,我以为国际化不过是把按钮翻译一遍。真上手才发现,给海外买家看的独立站,多语言 和 多币种 是两道绕不过去的坎------尺码单位翻错一个,退货单能追着你跑一礼拜。
团队最早想自己撸一套 i18n,中英日韩四种文案散在几十个组件里,改一处漏三处。汇率更折磨人:日元没有小数、欧元符号在前、韩元位数长,前端硬编码那版一上线就被用户截图挂到评论区。
后来我们不再造轮子,直接拿一套面向 跨境电商 的 SaaS系统 当底座。它原本就是给 代购系统 站点用的 跨境电商平台,货源API 接着淘宝和 1688,1688代采、海外仓、集运系统 在后台连成一条线,前端只需把语言和币种这两层渲染干净。
语言和币种我抽成了运行时配置,核心逻辑其实就这么几行,剩下的交给后台推。
const price = base * ratecurrency; // 币种实时换算
i18n.locale = userLang; // zh / ja / en / ko
render(product, { price, lang: userLang });
真正的坑都在细节。日语敬体和简体要分场景,商品详情用敬体、促销文案用简体;汇率不能信前端缓存,得走后台分钟级刷新的实时接口,不然大促当天差价能吃掉一整单利润。我们把这些统一收口到配置中心,前端只读结果,改文案再不用发版。
还有货币符号的展示位置容易踩雷,日元韩元习惯后置、欧元美元前置,我们做了 locale 级别的格式化函数,绝不在前端拼字符串。调试阶段我把四种语言的商品页各点了一百多遍,连文案长度超出换行导致按钮错位这种细节都修掉了,才敢说这条渲染链路是真的稳了,海外客户看到的每一分钱都对得上。
上线那天,一个札幌的客户留言说终于不用猜价格了,我盯着后台那行日文订单笑了很久。国际化从来不是翻译,是让隔着时差的人也觉得,这家店是专门为他开的。