[WinStory #4] Windows 与本地化 - 2. 谈谈硬编码
我在介绍伪本地化时提到过硬编码(hard-code),硬编码指的是“将数据或字符串直接嵌入到程序的源代码中,而不是从外部源获取或在运行时生成它们”。
硬编码的好处是可以缩短开发时间,同时能帮助保护程序。但大多数情况下硬编码将带来很多问题,就拿本地化来说,这可能导致字符串无法被本地化,或者(在我看来这点更恐怖)——被误本地化(即把编程用的字符串本地化了,毕竟本地化人员不一定是程序员)。
比如:一些 Windows 程序将“我的文档(Documents)”路径硬编码为 ProfilePath\My Documents,这些程序可以在英文版 Windows 运行,但在其他语言的 Windows 上,此文件夹通常具有不同的名称。例如,在意大利语版本中,“我的文档”文件夹名为 Documenti,这可能导致该程序无法正常运行。
这里是硬编码问题影响本地化的另一个例子,
在以前的 Windows 版本中,第一次打开 WinHelp 文件时(现在 WinHelp 已被弃用),如果该文件较大,在加载过程中您可能会看到一个用笔在书上写字的动画。
而根据雷蒙德陈的讲述(https://devblogs.microsoft.com/oldnewthing/20100817-00/?p=13133,以下为原文摘录)
Windows Shell 团队向 WinHelp 的作者建议使用 shell 公共动画控件来显示该动画。毕竟是个小动画,满足动画公用控件的要求。但是 WinHelp 的作者拒绝了这个想法。
他先发制人“我不敢相信我必须写这个”(为了达到效果,这个对话被夸大了。)
“你的动画控件是如此庞大和臃肿,相反我可以做得更小更快。……只需几行代码,我就有了一个完整的动画。我所需要的只是三个钢笔图像和一个显示打开到空白页的书的背景位图。这在内存和执行时间方面都比愚笨的动画公共控件更有效。你们这些家伙可以学到一两件关于编程的事情。”
“好吧,好吧,不需要为此争辩。我们只是提出一个建议,仅此而已。”
之后,Windows 95 被送去本地化成多种语言。一些本地化团队告诉我们,似乎某些语言环境需要更改动画。例如,阿拉伯语的 Windows 需要用笔在左侧页面上书写,笔的动作应该是从右到左,页面需要从左到右翻页。而日语团队则希望页面从左向右翻动。
本地化团队联系了 WinHelp 作者。“我们正在尝试更改动画,但我们无法在资源中找到 AVI 文件。您能告诉我们应该如何本地化动画吗?”
不幸的是,WinHelp 的作者不得不告诉本地化团队,笔的运动方向和墨迹的位置都被硬编码到程序中。由于产品已经通过代码锁定,因此无能为力。WinHelp 附带的笔在某些区域设置中移动方向错误。
这个故事的寓意:软件开发不仅仅是为了性能而编程。今天我们学习了本地化。
在下一期中,我将谈及硬编码在其他方面对 Windows 的影响