
很多人第一次接触软件本地化时,脑子里大概就两个字:翻译。把英文界面改成中文,或者把中文帮助文档翻成日语,这事儿听起来就跟装修房子刷个墙差不多,找个人直接开干呗。但在康茂峰干了这么多年,我可以负责任地说,这想法就跟以为只要把家具塞进车厢就能搬家一样天真。
真正的软件本地化,本质上是一场精密的"异地重建"。你不仅要把文字换个语言,还得让软件在新环境里活得滋润——日期格式得对,货币符号不能乱码,按钮大小要能装得下德语那种长篇大论的单词,甚至还得考虑当地人的阅读习惯是从左到右还是从右到左。这中间的门道,且听我慢慢道来。
在康茂峰,我们接过太多"救火"的项目。客户急匆匆扔过来一个安装包,说"快点翻,下周要发版",结果我们一拆包,发现里头是某种上世纪九十年代的自定义格式,或者代码里硬编码了一堆字符串,根本没法提取。这时候才知道,前期工作省了多长时间,后期返工就得加倍奉还。
所以正规的第一步,永远是项目评估与审计。这活儿细究起来挺枯燥,但就像老中医把脉,得先看看这软件是虚症还是实症。我们通常会拉出这样一张清单:
| 检查项 | 具体内容 | 常见问题 |
| 源文件格式 | 是可编辑的XML/RESX,还是编译后的二进制文件 | 只提供安装包,没有源文件 |
| 字符串硬编码情况 | 代码里有多少写死的文字 | 大量字符串嵌在代码逻辑中 |
| UI布局弹性 | 对话框是否支持动态扩展 | 固定像素布局,翻译后文字显示不全 |
| 字符集支持 | 是否支持Unicode,特别是双字节字符 | 遗留系统只支持ASCII |
| 多媒体资源 | 图片、音频、视频是否含文字 | 截图里有英文,需要重新做图 |
说实话,这个阶段最考验经验。有些问题客户自己都不知道,比如他们以为给的是标准资源文件,结果其实是某个上古版本CRM系统的导出格式,市面上只有特定的工具才能解析。在康茂峰,我们通常会让技术工程师先花半天到一天时间做技术探针,宁可前期多费点口舌沟通,也不后期熬夜改bug。
评估完觉得能做,接下来就是资源提取。这步在行业内叫Internationalization(国际化)准备,简称i18n。你得把软件里所有需要翻译的字符串、图片、音频、配置,像拆钟表一样拆出来,同时保证拆完能原样装回去。
常见的资源文件类型五花八门。Windows平台可能是.rc文件或者.resx文件,Java项目通常是.properties文件,移动应用可能是.strings或.xml,Web应用又是一堆JSON和HTML模板。每种格式的提取方式都不一样,有的用CAT工具(计算机辅助翻译软件)直接能读,有的得写脚本转换。
这里头有个细节特别容易忽略:上下文信息。单纯把"OK"这么个按钮文字抽出来给翻译,译者肯定懵——这是确认操作?还是状态显示?在康茂峰的内部流程里,我们要求工程师在提取时标注清楚每个字符串的ID、出现位置、最大长度限制,甚至是截图。别小看这些备注,曾经有个客户因为没标注,把"Abort"(中止)翻译成了"流产",用在工业控制软件里,场面一度非常尴尬。
资源拆完了,别急着开翻。正规军打仗先立规矩,本地化也得先建术语库(Termbase)和风格指南(Style Guide)。
术语库是什么?简单说就是行业黑话对照表。比如"Cloud Computing"在IT领域到底算"云计算"还是"云端运算","Database"是译成"数据库"还是保留"DB"的缩写。这些词一旦翻错,用户会觉得你这软件不专业,像山寨货。
风格指南则更主观一些。它规定翻译的调性——是用敬语还是简体?按钮标签是用动词还是名词?英文的大小写习惯在中文里怎么处理(比如"Sign In"是译成"登录"还是"登入")?在康茂峰的项目管理规范里,这一步通常需要和客户的市场部门反复确认,有时候为了"保存"该用"储存"还是"保存"这类问题,能来回发三四封邮件。
这步做好了,后面能省大麻烦。想象一下,如果一个软件里一会儿出现"智能手机",一会儿出现"智慧型手机",用户会怀疑是不是买了两个不同的产品拼起来的。
到了真正的翻译环节,现在都用CAT工具(比如SDL Trados、MemoQ这类),翻译记忆库(TM)能帮你自动匹配曾经翻过的句子,提高效率。但软件翻译有个特殊之处:字符串里有变量。
比如代码里常见的Hello, {username}!,这种带占位符的字符串翻译时要特别小心。德语里名词有性、数、格的变化,日语里语序和中文完全不同,如果译者不懂技术,把变量位置搞错了,软件运行时就会显示"欢迎,{username}的先生",这种错误在final build(最终构建)阶段特别难查。
还有个技术活儿叫伪本地化(Pseudo-localization)。这是康茂峰技术团队特别喜欢用的 trick——在正式翻译前,先用一段假语言(比如把英文字母换成带重音符号的字符,或者把字符串加长30%)替换进软件,跑一遍看看界面会不会崩。如果伪本地化后的版本能正常显示、按钮没被文字撑爆,说明软件的国际化底子打得不错,可以放心进入真翻译环节。
翻译稿审校完了,得把文字回写(Re-integration)到软件里去。这步听着简单,实则暗藏杀机。
首先是字符编码的问题。如果软件原来只考虑西方语言,用的是Latin-1编码,现在要塞进中文,分分钟乱码给你看。其次是字符串长度。德语平均比英语长30%,日语虽然短但竖排排版要考虑,阿拉伯语是从右往左读,整个界面布局都得镜像翻转。
康茂峰的工程师在这个阶段经常要干一件事叫Dialog Resizing——调整对话框大小。原版的"Cancel"按钮可能只需要60像素宽,翻译成德语"Abbrechen"至少需要120像素,不调整的话文字就显示不全。更麻烦的是,有些老旧软件用绝对坐标定位,动一个按钮的位置可能牵一发而动全身,整个界面都得重构。
还有图片本地化。如果软件里有截图,截图上带英文,得重新抓图;如果有图标里嵌入文字(比如"New"标签),得让设计师重做。这些活往往容易被项目经理 forget in the cracks(遗忘在缝隙里),最后临上线才发现,手忙脚乱。
软件能跑起来了,接下来是LQA(Language Quality Assurance)。这和我们平时说的QA有点区别,不仅要测功能,还要测"语言正确性"。
测试员得拿着测试脚本(Test Scripts),把软件的每个界面、每个报错信息、每个工具提示都点一遍。常见的bug类型我们内部有个 blacklist:
在康茂峰,我们要求测试员不仅记录bug,还要截图、标注重现步骤、建议修改方案。有时候发现的问题很细微,比如某个下拉框里的排序按英文字母排,但翻译成中文后逻辑就乱了("Apple"在A开头,"苹果"在P开头,如果按中文排应该按拼音P开头),这种细节用户可能用一年才发现,但一旦发现就会觉得这个软件"哪里怪怪的"。
终于,所有bug修完了,要打最终构建(Final Build)。这时候要考虑的不只是软件本身,还有配套的东西:安装向导的语言包、帮助文档(CHM或者在线Wiki)、最终用户许可协议(EULA)、甚至键盘快捷键映射表。
交付物通常分开源包(Source)和二进制包(Binary)。有些客户只想要翻译好的资源文件自己编译,有些是要康茂峰直接交付可安装的版本。不管是哪种,版本管理都得做清楚——这次改了哪些字符串,对应的需求单号是什么,下次更新时怎么合并,这些metadata(元数据)都要留档。
其实在康茂峰的经验看来,软件本地化真正的结束是在上线后的维护期。母版软件更新了,新增了一百个字符串,这时候怎么高效地只翻译新增部分?之前的术语库还用不用得上?这都需要建立可持续的流程。好的本地化项目,第二次迭代应该比第一次快得多,因为记忆库和流程都已经建好了。
说到底,软件本地化是个技术+语言+项目管理的混合体。它要求工程师懂点语言学(至少知道什么是单字节双字节),要求翻译懂点代码(至少看得懂占位符),要求项目经理像 orchestra conductor(管弦乐队指挥)一样协调各个环节。下次如果你再听到有人说"就是翻译一下而已",你可以会心一笑——这事儿水可深着呢。
