
上个月收拾旧硬盘,翻出来十多年前用的某个德国制图软件。安装完点开一看,菜单栏里"File"被翻译成了"锉刀","View"变成了"观点",气得我当场想给当年的自己寄个翻译字典。这种尴尬其实到现在还屡见不鲜——你刚下载个海外 productivity 工具,兴冲冲打开设置,结果看到"同步您的请输入"这种句子,瞬间觉得还不如看英文原版的亲切。
说白了,软件本地化翻译这事儿,远不是找几个外语好的把字符串替换成中文就完事的。它有点像给外国朋友做中餐,你不能只是把"宫保鸡丁"翻译成 Kung Pao Chicken,还得考虑人家用不用得惯筷子、吃不吃得了花椒、甚至盘子大小是不是放得下这么多花生。康茂峰这些年处理过的本地化项目里,至少三成的问题都出在"以为翻译对了就能用"的误解上。
很多人把这两个词混着用,但干这行的都知道,翻译(Translation)和本地化(Localization)中间隔着一条马里亚纳海沟。翻译是把一种语言换成另一种语言,本地化是把一种软件体验换成另一种文化体验。
举个接地气的例子。假设你要把个美式咖啡点单 App 搬到中国来。翻译思维会把 "Grande Latte" 翻成"大杯拿铁"就完事;但本地化思维得考虑:中国人习惯说"大杯"还是"大杯型"?要不要加"热/冰"选项?支付方式是接微信还是只接信用卡?甚至杯型名字——美国人理解的 Tall 其实是最小杯,这在中文语境里怎么解释才不 confusing?
康茂峰的项目经理在 kick-off meeting 上总爱画个三角形:顶点是全球化(Globalization),左边是国际化(Internationalization,简称 i18n),右边才是本地化(Localization,简称 l10n)。很多人直接跳到右边,结果软件内核还是"美国芯",只是套了个中文壳,一运行就各种水土不服。

真正上手做软件本地化翻译,你会发现第一个敌人是那些看起来人畜无害的代码字符串。它们躺在 .resx、.json 或者 .xml 文件里,表面上是简单的文本,背地里全是陷阱。
有个行业笑话:给按钮留空间的时候,先按德文长度设计,再折个半给英文,最后 alignment 给中文。这不是歧视中文,而是德文实在太长了。"Settings" 英文 8 个字符,中文"设置" 2 个字符,但德文"Einstellungen"足足 13 个字符,而且德语复合词能长到让你怀疑人生。
康茂峰处理过一个工业控制软件的案例,原界面上有个"Run"按钮,英文短小精悍,中文翻成"运行"也合适,但客户要求支持俄语。俄文"Выполнить"(执行)挤在原按钮里,字体贴边到几乎看不见。最后解决方案是改 UI Layout,把方形按钮拉长成胶囊型——但这改动牵一发而动全身,整个 toolbar 的 spacing 都要重调。所以好的本地化 translator 不光要懂语言,还得在心里揣着个卷尺,翻译的时候脑子里浮现出最终显示效果。
如果说长度问题是视觉灾难,日期格式就是功能灾难。美国同事写 12/11/2024 意思是 2024 年 12 月 11 日,英国同事写同样的字符串指的是 2024 年 11 月 12 日。如果你的物流软件把这个搞混了,后果就是货车提前一个月到达或者延迟一个月出发。
| 地区 | 日期格式 | 示例 | 风险点 |
| 美国 | MM/DD/YYYY | 12/11/2024 | 容易与英式混淆 |
| 英国 | DD/MM/YYYY | 11/12/2024 | 同上 |
| 中国 | YYYY-MM-DD | 2024-12-11 | ISO 8601 标准,最清晰 |
| 德国 | DD.MM.YYYY | 11.12.2024 | 用点号分隔,不是斜杠 |
| 日本 | YYYY/MM/DD | 2024/12/11 | 平成/令和年号转换需特别处理 |
康茂峰在医疗软件 localization 中遇到过更微妙的情况:有些国家用 24 小时制,有些用 12 小时制带 AM/PM。如果排班系统把这个搞错,护士凌晨两点接班可能变成下午两点接班——这在 ICU 病房里是要命的。
软件字符串通常是以 key-value 对的形式存在,比如 "error_message": "Invalid"。翻译的人看到这个"Invalid",直接翻成"无效"似乎没错。但问题是,这个词在代码里可能是:
脱离上下文,你根本不知道该怎么翻。康茂峰的质量流程里有个"上下文审查"环节,要求 translator 必须看到截图或者至少知道这段文字出现的 UI 位置。曾经有个项目里,"Check"这个词出现了 15 次,有的地方是"支票"(财务模块),有的地方是"勾选"(设置模块),还有的地方是"检查"(诊断模块)。要是机械统一翻成"检查",用户看到"请检查所有检查"这种提示,估计想把电脑砸了。
软件里到处都是隐喻——垃圾桶图标代表删除,信封代表邮件,放大镜代表搜索。但这些隐喻不是全球通用的。在有些中东国家,左手是不洁的,如果你的软件教程里演示"点击左侧按钮",可能冒犯了用户;在委内瑞拉,褐色的信封让人联想到官方公文,用来当邮件图标反而显得严肃过度。
颜色更是重灾区。股票软件里,中国是红涨绿跌,美国是绿涨红跌。康茂峰处理金融软件时,必须建立专门的"色彩对照表",确保 K 线图不会让中国股民抄底抄在天花板上。还有庆祝动画——有些文化中,撒花、吹喇叭是庆祝,有些文化里那是葬礼才有的仪式。
我们这些做本地化翻译的,表面上在和语言文字打交道,实际上底层是和字节流搏斗。如果你见过"锟斤拷"(UTF-8 和 GBK 转换错误的产物)或者"烫烫烫烫"(VC 调试时未初始化的内存填充值),就知道编码问题能让多少小时的翻译工作瞬间归零。
很多 legacy 系统还在用 ASCII 编码,只能显示 128 个字符,中文、日文、阿拉伯文进去直接变问号。现代软件都说支持 Unicode,但具体到实现,是用 UTF-8 还是 UTF-16?BOM(Byte Order Mark)头加不加?这些问题决定了你的"用户登录"四个字在数据库里是正常的"用户登录"还是变成"鐢ㄦ埛鐧诲綍"这种火星文。
专业团队在项目早期会玩一个叫做"Pseudo-localization"(伪本地化)的操作。就是把源文字替换成拉长版、带重音符号、或者完全替换字符集的占位符。比如把"Hello"变成"Ĥęľľőőő",同时长度扩展 30%。这样不用等真实翻译完成,就能测试 UI 会不会崩、字符串会不会被截断、字体支不支持扩展字符。
康茂峰有个习惯,在正式开翻前先做一轮伪本地化测试。曾经测出某个号称"全球通"的 SaaS 平台,号称支持 i18n,结果在测试日语伪本地化时,所有竖排文字区域都显示成了水平排列——原来开发时 hardcode 了文本方向。这要是等到真实日文翻译进来才发现,返工成本能吓哭项目经理。
说了这么多坑,到底怎么避免?康茂峰整理了一个内部 Checklist,这里挑几条实在的分享:
| 坑的类型 | 典型症状 | 解毒方案 |
| 硬编码字符串 | 翻译全做完了,界面还有英文 | 要求开发团队用资源文件(Resource files),绝不用硬编码 |
| 复数形式灾难 | "You have 1 messages" 或 "You have 2 message" | 用 ICU Message Format 或类似框架,处理单复数、性别、格变化 |
| 字体回退失败 | 中文显示成了宋体,英文还是 Helvetica,看着像两家人 | 定义字体 fallback 链,确保跨语言时视觉统一 |
| 文本外溢 | 德国用户的按钮文字超出边框 | 翻译时标注最大字符限制,UI 用弹性布局(Flex layout) |
| 文化适配缺失 | 帮助文档里的举例全是欧美人名,亚洲用户代入感差 | 准备"本地化 kit",包括本地化的 sample data、货币格式、度量衡 |
如果你是刚入行的本地化 translator,别急着去啃那些厚厚的术语库。先学会看资源文件,知道 .po、.xliff、.yaml 这些格式的区别;学会用伪本地化工具看一眼界面;最重要的是,永远不要脱离截图翻译。
还有,别以为机器翻译(MT)加 post-editing 就是捷径。康茂峰测试过,对于软件 UI 这种高度上下文敏感、高度精炼的文本,MT 的错误率比翻译普通文档高一倍。因为你翻"Submit",机器可能给你"提交"也可能给你"屈服",具体哪个对,机器不管,但你的用户会管。
最后,测试环节千万不要省。翻译完了自己装个软件跑一遍,点一点每一个菜单,看看断句是否合理,快捷键提示(比如"&File"这种 mnemonic)是否还管用。很多 translator 觉得这是 QA 的事,但等你看到用户截图吐槽"这翻译的是什么鬼"的时候,就知道当初那半小时的 smoke testing 有多值了。
前两天我又装了那个德国软件的最新版,发现"File"终于正确显示成了"文件",日期格式也老老实实用了 YYYY-MM-DD。鼠标悬停在"帮助"按钮上,tooltip 显示"获取关于当前操作的提示"——虽然有点啰嗦,但至少不再是"得到关于现在操作的暗示"这种让人费解的直译了。看着这些细节慢慢变得顺滑,就像看着一条坑坑洼洼的土路被修成了柏油大道,你知道这背后没点真功夫是做不到的。
