今天到OSD Lyric在launchpad上设的翻译点看了看,发现除了自己弄的中文翻译外,多了俄文、法文和西班牙文翻译,其中俄文翻译更是完成了100%(虽然只有区区几条词条)。这让我再一次感到了launchpad协作模式的强大:你永远不知道什么时候会受到别人的帮助。
之前因为对有些软件的翻译不爽,也曾经上launchpad去给别的软件贡献过几条翻译。当时就觉得,launchpad的协同翻译是一个很好的体验(尽管网速实在是有点……)。玩过windows汉化的人应该知道,在windows下翻译软件的感觉并不好。首先,windows下的软件界面字符串有好几种保存方式:标准的Windows资源、Borland系的资源、代码内嵌(这个是最恶心的)……标准形式的还好,处理代码内嵌的字符串有时无异于hack。由此诞生了许多软件,处理不同情况下的字符串资源。然后通过人力+词典的方式汉化后再导入回原软件。正是由于这种方式,使得无法自动导出待翻译的词条。其次,windows没有很好的界面本地化支持(.NET平台似乎改变了这一点),如果软件作者要支持语言包,需要自己来编写相关代码,这使得很多软件都没有多语言界面支持。一款软件被汉化后往往就失去了原来的语言,也无法与其他语言集成在一起。更重要的是,由于没有一个统一的表示翻译串的格式,无法像launchpad这样多人多软件协同翻译。第三,自己汉化了一款软件,要被纳入官方翻译也需要大量的沟通,甚至不被接受。因为有些软件压根就没打算推出多语言版本,而汉化一款软件往往是修改了软件本身的。
而且在Linux下,这些问题都不见了,或者说就没存在过。因为Linux下有一个很好的国际化/本地化工具:GNU Gettext。它将翻译抽象成了pot(模板)-po(翻译文件)-mo(软件使用的二进制文件)的体系。软件字符串资源的更新,可以自动更新到pot文件中,然后翻译人员可以用pot来更新他们的po文件,翻译也只需要翻译po文件就好了。如果软件升级了,用pot更新一下po,原来的翻译都还在,有改动的字符串也会标记上原来的字符串作为参考,极大地减少了重复工作量。最后从po文件生成mo文件,随软件打包发布即可。由于有了gettext的存在,Linux下的软件大多会利用它进行本地化,也就是说,从一开始就已经准备将软件给本地化了的。而翻译人员,只要有po文件就可以了,管你软件是怎么用这些字符串的呢。翻译好了,提交给开发者,开发者高兴了:嘿,又有人给我翻译了,打包,好,又多支持一种语言。而对于用户来说,更是方便了:不需要下载什么汉化版——人家软件包里把汉化日化俄化全带齐了;不需要选择语言——gettext会根据系统的语言设定自动选择对应语言的翻译包。Windows下的问题这里一个都没有。
Linux和Windows下的这些差异表面上看起来是机制的差异,其实是两者的理念的差异。在Linux世界(应该说,Unix世界),社区协作是司空见惯了的,Linux的发展更是离不开社区,因此Linux下的软件很多都有着协同开发的传统,大型项目尤其如此。吸引了全世界的人员,自然会面对本地化的问题,因此本地化一开始就是很多软件考虑的选项(当然,很久很久以前不是这样)。协同开发,自然是连翻译也算上的,在Linux下软件受到别人贡献翻译和文档是很正常的事情,任何人都可以为自己喜欢的软件作出贡献。而Windows下的大多是专有软件,因此开发者不会首先想到服务非自己母语的用户,也不会期待有人免费给自己做翻译,而且自己做国际化支持也是一件挺麻烦的事情。也就是说,其实这是社区开发vs专有开发的问题,是自由软件vs专有软件的问题。
GNU Gettext已经做得很好了,但是launchpad又更上了一步:它把翻译的工作也彻底协同化了。没有launchpad之前,可以这样来翻译一个软件:从源码包里取出pot和po文件,更新对应语言的po文件,翻译后用email等方式提交给开发者。这是一个人的翻译,可能不同的版本贡献翻译的人不同,但是在翻译好提交给开发者并被开发者之前,其他人是看不到最新版本的。而在launchpad上,翻译是在网络完成,翻译者知道最新的翻译是什么,还有哪些没翻译。这样你一条,我一条,协同工作就变得能了。开发者要出新版本了,把launchpad上的翻译导出成po文件就OK了。代码中的字符串有更新,不必等到发布源码包,翻译者也不需要用svn什么的更新pot文件,直接把最新的pot上传,开发和翻译就可以同步进行了。不只是这一点,launchpad可以记录不同翻译者对同一字符串的翻译作为比较,更酷的是,它还可以用在launchpad上别的软件的相同字符串来作为建议,这进一步促进了协同工作——你的翻译不止用在一个软件上,还帮助了其他软件的翻译,毕竟很多基本的功能字符串(文件、打开、保存……)是一样的。
launchpad的这种方式,使得一个软件可以由多个人共同翻译,一个人也可以翻译多个软件。它为软件翻译提供了一个很好的统一平台。给OSD Lyrics翻译的几位外国友人可能并不是OSD Lyrics的用户,但是这并不妨碍他们翻译OSD Lyrics。还是那句话:你永远不知道什么时候会受到别人的帮助。