多语言不是"翻译一下"
在多语言场景里,真正出问题的往往不是翻译质量,而是工程细节:
分词、编码、时区、数字与日期格式、姓名顺序。这些一旦处理错,轻则排序乱,重则业务数据算错。
五个高频坑
一、分词与检索
中文要分词、日文要处理假名与汉字混排、泰文没有词间空格;空格分词的那套直接搬到中文上,
召回会明显变差。做法:按语言选择分词器,并对每种语言单独测召回。
二、Unicode 归一化
"é" 可能是单码点也可能是 "e + 组合音符";不归一化会出现"看着一样但比不出相等"的 bug。
做法:比较与存储前统一 NFC/NFKC;长度统计与截断要按字形而不是码点(否则会截断半个字)。
三、时区
- 存储用 UTC,展示按用户时区;
- 别把"本地时间字符串"直接当时间戳;
- 跨时区的"今天"要明确以哪个时区为准(日报、配额重置最容易出错)。
四、数字与日期格式
- 千分位与小数点在不同地区相反(1.234,56 与 1,234.56);
- 日期写法歧义(03/04/2026 是哪天?)→ 存储用 ISO 8601,展示才本地化;
- 货币不要只存符号,要存币种代码。
五、姓名与地址
- 姓名顺序因语言而异,别假设"名 空格 姓";
- 地址结构各国不同,强行拆成"省/市/区"会丢信息 —— 保留原文 + 可选结构化字段。
测试怎么做
- 每个界面至少测两种文字方向(从左到右 / 从右到左)与长文本换行;
- 用"最长语言"测布局(德语/芬兰语常比英文长 30%+);
- 准备边界样本:组合音符、emoji(含肤色修饰)、零宽字符、泰文与阿拉伯文;
- 对每种语言的检索召回单独出一份指标,不要只看英文。
一个可执行的检查清单
- 存储:统一 NFC + UTC + ISO 日期 + 币种代码;
- 展示:按用户语言/时区本地化,避免硬编码格式;
- 检索:按语言分词,指标分语言统计;
- 布局:为长文本与双向文字留余量;
- 边界样本进自动化测试,防止回归。