
如果你把一个软件比作一间精心布置的房间,那本地化测试大概就像是检查这间房搬到另一个国家后,里面的家具会不会卡住门,插座是不是匹配当地的电压,甚至连墙上的装饰画在当地人看来会不会觉得冒犯。听起来挺简单的对吧?但真干起来,你会发现这比单纯的功能测试要琐碎得多,也更有意思。
在康茂峰这些年处理过的项目里,我见过太多团队把本地化测试想得太窄——以为找个会外语的人看看翻译对不对就完事了。结果产品上线后,阿拉伯语版的所有按钮都叠在了一起,德语版的菜单栏直接超出了屏幕,日语版因为字符编码问题,用户保存的文件名全变成了乱码。这些不是功能bug,但在当地用户眼里,这就是 professionalism 的问题。
很多人拿到一个本地化版本,第一反应是点开每个菜单看文字顺不顺。这没错,但太表层了。在康茂峰的内部流程里,我们通常把测试范围分成三大块:功能完整性、语言准确性、文化适配性。这三者互相纠缠,漏了哪个都会翻车。
举个真实的例子。我们曾经测一个财务软件,中文版本处理大数字没问题,但到了泰语版,当用户输入超过百万级的金额时,程序直接假死。后来查出来是因为泰语数字格式会把每三位用逗号分隔,而开发时硬编码了只支持万位分隔的逻辑。这种 bug 在日常功能测试里根本测不出来,因为测试工程师用的通常是英文或中文环境。

还有更隐蔽的。输入法冲突就是个老大难问题。比如在韩文版里,用户用系统自带的输入法在搜索框里打字,软件有时候会突然闪退。这通常是因为输入法框架和软件的焦点管理在打架。你需要真的在当地主流的操作系统版本上,用当地用户真实的输入习惯去测,才能发现。
这儿有个误区。语言测试不是找几个懂外语的人看着字典核对就行。康茂峰的语言专家遇到过这样的情况:某款软件的西班牙语版,所有术语都翻译得很精准,语法也没错,但拉美地区的用户就是觉得别扭。为什么?因为用的是西班牙本土的用词习惯,而墨西哥、阿根廷的用户虽然也说西班牙语,但术语体系完全不同。
还有文本扩展的问题。德语比英语平均长出 30%,有时候甚至 50%。英语里简短的 "Save" 到了德语变成 "Speichern",按钮宽度如果没预留够,就会挤成一团。反过来,中文翻译往往比英文短,如果界面是按英文长度设计的,中文界面可能会出现大量尴尬的空白。
技术实现上的坑往往最花时间,因为它们藏在代码层面,不像翻译错误那样一眼能看见。
UTF-8 现在基本算是标准了,但别以为用了 UTF-8 就万事大吉。我们处理过一个项目,软件主体是 UTF-8,但数据库的默认字符集是 Latin-1,结果用户输入的日文文件名在保存到数据库后再读取,全变成了问号。还有更诡异的:某些系统 API 在 Windows 的不同语言版本上返回的编码竟然不一致。你得确保整个数据流——从用户输入、数据库储存、网络传输到前端展示——全程是干净的 Unicode 管道。
如果你没处理过阿拉伯语或希伯来语,你可能想象不到文字的阅读方向会让 UI 布局完全翻转。在这些语言里,文字是从右向左(RTL)读的。这意味着什么?
但这里有个陷阱:数字和英文在阿拉伯语环境里仍然是从左向右的。所以你会看到一段文字里方向在不断切换。如果软件硬编码了布局方向,没有使用操作系统提供的 RTL 自动翻转机制,那你将面对一场灾难。

这些听起来很基础,但搞错一个就能让商务软件变得不可用。看看这些差异:
| 地区 | 日期格式 | 千位分隔符 | 小数点 | 货币位置 |
| 美国 | 12/31/2024 | , | . | $100 |
| 德国 | 31.12.2024 | . | , | 100 € |
| 日本 | 2024/12/31 | , | . | ¥100 |
| 法国 | 31/12/2024 | 空格 | , | 100 € |
注意德国和法国的小数点和千位分隔符是反过来的。如果你的软件把用户输入的 "1.234" 在德国环境下理解为"一点二三四"而不是"一千二百三十四",财务数据就全乱了。康茂峰在测试会计类软件时,会专门用边界值测试法,输入各种极端数字格式看系统的容错性。
除了前面说的文本扩展问题,还有字体回退(Font Fallback)的问题。你设计的字体可能不支持某种生僻的东欧字符,系统会自动回退到备用字体。这时候如果字体大小不兼容,整个行高就会乱了套。我见过一个按钮,左边是英文用的 Arial,右边是希腊文用的系统默认字体,结果按钮文字baseline都不对齐,看起来像是两个按钮拼起来的。
还有文本截断。翻译后的字符串如果比预留空间长,末端被截断是最温和的bug,最可怕的是字符串合并导致的语义混乱。比如代码里把 "File" 和 "name" 分开翻译成 "文" 和 "件名",结果在某些语境下拼接成了"文件名"而不是"文件名"。这种错误只有懂目标语言且理解代码逻辑的测试人员才能发现。
图标在全球化过程中坑也不少。一个在美国表示"保存"的软盘图标,在00后用户眼里可能根本不认识;一个竖起大拇指的手势,在某些中东国家是冒犯;甚至颜色的含义也不同——白色在西方代表纯洁,在东亚某些场合与丧事相关。
康茂峰曾经建议一个客户把软件里的红色错误提示图标,在进入日本市场时改成更中性的颜色,因为在日本文化里红色不完全是"危险"的意思,有时候反而代表重要。这种建议通常来自本地化的文化审查环节,不是技术测试能覆盖的,但测试人员需要知道去检查这些元素是否被正确处理。
本地化测试最忌讳的就是在英文系统上装个语言包就开始测。你得准备"原生"的环境:
还有网络环境。如果你的软件需要连接服务器,要考虑当地网络基础设施的特殊性。比如某些国家对 SSL 证书的要求不同,或者对特定端口有限制。康茂峰在测试云同步功能时,会模拟低带宽和高延迟的环境,因为在一些新兴市场,网络状况和国内截然不同。
说点实在的。去年我们接手一个医疗设备软件的欧盟多语言版本,客户之前自持"技术团队很强",结果我们接手后发现波兰语版本的某个关键提示信息,因为翻译后长度超过了数据库字段限制,直接被截断,意思从"请确认患者身份"变成了"请确认患者"。就少了"身份"两个字,但这在医疗合规上是严重缺陷。
还有更隐蔽的排序问题。英语里字母排序就是 A-Z,但瑞典语里,Ä 和 Ö 是排在 Z 之后的独立字母,不是 A 和 O 的变音。如果一个通讯录软件把它排在 A 下面,瑞典用户会觉得这软件根本不能用。这类问题需要测试人员有特定语言的文化常识,或者至少知道去请教你该语言的母语者。
另外,快捷键也经常被忽视。Ctrl+S 在英语里代表 Save,但到了德语版,Speichern 的 S 是同一个键,这没问题;但如果是法语版,Sauvegarder 也是 S,可如果是西班牙语版,Guardar 是 G,这时候如果还硬绑 Ctrl+S 就不符合当地用户的直觉了。更复杂的是,有些语言的某些字符需要组合键输入,可能会和软件的快捷键冲突。
如果你明天就要启动一个本地化测试项目,这里有一份康茂峰内部用的检查清单,不保证涵盖所有情况,但至少能让你避开最明显的坑:
功能性检查:
语言质量检查:
UI/UX检查:
本地化特有:
说实话,本地化测试最大的挑战在于,你永远觉得自己考虑得差不多了,但总有新的 cultural surprise 在等着你。就像之前说的那个房间比喻,你可能检查了大件家具能不能进门,却忘了看看墙上的电源插座是不是圆孔的。
所以经验告诉我们,测试计划里一定要留够探索性测试的时间,让测试人员像真正的当地用户那样去使用软件——用他们的输入法打字,按照他们的习惯设置日期,甚至在他们常用的旧版操作系统上跑一遍。毕竟,软件本地化不是简单的翻译,而是重新定义用户体验。当你在德国用户的电脑上看到这个软件,感觉它就像是在本地开发的一样自然,那测试才算真正过关。
