不是乱码,更不是火星文——什么是伪本地化(原理及意义)

(这期专栏是下面这期视频前半部分的文字版本(因为有人反映看视频有点累,所以写成文字版))

(我也不是本地化的专业人员,我只是借助一些资料向大家简要介绍一下伪本地化,果出现错误请大家多多包涵,并欢迎来指正)
引入
接触过 Windows 测试版(尤其是Win8)的构建的人,应该对“伪本地化”这一名词并不陌生。
事实上,伪本地化一直是 Windows 进行本地化测试的重要方式之一。


定义
伪本地化(英文:pseudo-localization)是在正式的本地化之前,通过模拟本地化过程帮助发现本地化的潜在问题。它是软件测试中用来测试软件是否符合本地化与国际化的方法之一。
伪本地化的几种方式及对应解决的问题
1. 添加来自其他语言的重音符号,或将这个字母替换为其它语言中与这个字母形态相似的字母
这一方法可以发现并修复某些语言的字符无法正常显示的问题。

如 a 可以替换成 ā á ǎ à ă ä å α ά ,t 可以替换成 ț ţ ť ŧ т ,等等。
以 “Turn off the power(关闭电源)” 为例,
它可以被“翻译”成 Țùŗη ôƒƒ ţђë ρõẃēя

2. 扩展字符串以模拟翻译可能产生的较长字符串
这主要是为了解决“在将源语言翻译成其他语言后,由于字符串过长而导致语段显示不完整”的问题。
以源语言是英语为例,常见情况下:
法语、西班牙语、葡萄牙语、意大利语、阿拉伯语、希伯来语和波兰语文本可以扩展 15% 到 30%;
德语和荷兰语文本可以扩展 35% 或更多;
中文、日文或韩文文本可以收缩 30% 到 55%。

有不同的方法可以扩展字符串。
Windows 中主要采取了在字符串后加 ! 的方法(添加标识符也能达到这一目的,但标识符的主要作用还是标识字符串,这个后面再讲)
具体做法为:一个词组3个 ! ;一个单词1-3个 ! ,或者直接加空格。
如 [Гзƒгēśн ţћĕ рáġ℮ īŋ а ƒêω мīлúтęş. !!! !!! !](Refresh in a page in a few minutes,几分钟后再刷新页面)

而在 Android 中,则采取了在字符串后加 one two three four 等 1-20 的英文基数词(标到了 20 再从 1 开始,不断循环)的方法

也可以采用“将所有元音加倍”的方法,等等

3.添加分隔符
如 [Turn off the power,][Sit back and relax.]
它可以发现并解决字符串分割的问题
注:字符串分割,表现为一个字符串被拆分成两个或多个部分。
这可能会增加翻译的难度,因为翻译人员必须独立地翻译每个部分,而不知道这些部分是相关的。而且,不同的语言可能会要求以不同的顺序组织各个部分或采用完全不同的句子结构。这可能会导致翻译出的句子结构混乱。
在 Windows 中,由字符串分割引起的最为知名的翻译问题是“该内存不能为 read/written”(正确翻译应为“该内存不能被读取/写入”),该语段的英文原文是:The memory could not be %s. (其中%s表示占位符,将被替换为 read 或 written),由于 read/written 在原句中仅表示为占位符,与原句分开了,所以该词无法被翻译。(不只是中文。这一翻译问题在其他语言中也广泛存在)


除此之外,伪本地化还能解决的问题有:
一些字符串在源代码中被硬编码(hard code)
也就是说,一些字符串被直接写进了源代码中,而并非可用于本地化的资源文件中,在本地化过程中这种字符串可能不会被翻译。
而在伪本地化的过程中,如果有单词未被“翻译”,则它们有可能是被直接写进了源代码中。
还有有关从右到左书写的语言的问题等,这里不再一一列举。
而为了更轻松地识别字符串,可以采用添加唯一标识符的做法以标识字符串。
如 [1Dw2L][Čômрµτ℮ř !]
(在 Windows 中这一标识符被称为“Hash ID”,而在 Windows 的伪本地化构建中会包含一个“Hash ID Spy”应用程序,可以查询标识符所对应的字符串等信息。)

意义
通过伪本地化,开发人员可以在真正的本地化开始之前,就可以发现并修复上述问题。
同时,伪本地化可以帮助开发人员了解产品的 UI 在翻译后的外观,而无需实际进行真正的翻译。
开发人员在开发或调试产品时,甚至可以直接将伪语言作为默认语言,这有助于他们将本地化视为优先事项而不是事后考虑,并让他们有机会在设计阶段,或在翻译开始之前解决问题。
正如微软前员工 Michael S. Kaplan 所说 ,
“实际上,我们用伪语言构建了很多Windows,并将它们‘本地化’ 为英语!” 伪本地化就像“一个热心、勤奋但天真的实习本地化人员,他(她)将‘翻译’ 每一个字符串,并且可以找到我们从来没有希望在每种语言中都有相同覆盖率的问题——而且比我们以前任何时候都要快。”
附:伪本地化对应的语言环境
微软为伪本地化设置了三个语言环境:
qps-ploc —— 用于类似英语的语言的伪本地化;
qps-mirr(现为 qps-plocm)—— 用于阿拉伯语等从右往左的书写语言的伪本地化;
qps-asia(现为 qps-ploca) —— 用于东亚语言的伪本地化。
(从 Windows 10 开始,伪语言环境 qps-Latn-x-sh 也可用。)


注:你可能会在 Win8 的伪本地化构建中发现另一种表示伪语言的语言环境名称:ps-PS
但实际上:
该名称不遵循 IETF 标准的规则,该标准已被确立为表示未注册的私人使用标签的最佳方式。
ps-PS可以用于表示普什图语。
(尽管微软内部有人员指出了这一点 ,但 ps-PS 依然作为伪本地化对应的语言环境写进了 Windows 伪本地化构建中的说明文件里……)
而在 Unicode 国际组件中,提供了两个伪语言环境名称:
en-XA(用于类似英语的语言的伪本地化)
en-XB(用于阿拉伯语等从右往左的书写语言的伪本地化)

在下期,我将介绍 Windows 伪本地化的(部分)历史。

附自制伪本地化翻译器:https://suntrise.github.io/pseudo


参考资料:
维基百科 - 伪本地化
https://zh.wikipedia.org/zh-cn/%E4%BC%AA%E7%BF%BB%E8%AF%91
微软 - 伪本地化
https://docs.microsoft.com/zh-cn/globalization/methodology/pseudolocalization
安卓 - 使用伪语言区域测试您的应用
https://developer.android.google.cn/guide/topics/resources/pseudolocales?hl=zh-cn
Shopify - 伪本地化:它是什么以及它为什么重要
https://www.shopify.com/partners/blog/pseudo-localization
什么是伪本地化?
https://www.globalizationpartners.com/2015/04/17/what-is-pseudo-localization/
Michael S. Kaplan 的博客
http://blogs.msdn.com/b/michkap/archive/2011/04/11/10152035.aspx
(网址现已不可用,但存档可见于网页时光机)