Skip to Content

关于bash翻译技术的一点说明

labrador 的头像
自从放出了中文翻译测试包之后,网友普遍反应质量不过关。因为这段时间因为比较忙,我只管自己埋头做事,没有和大家交代清楚这个中文翻译包的开发流程和局限性,造成了不小的误会。我在这里大概说明一下我的思路。

PuppyLinux所特有的很多工具比如pmount、petget等都是用bash脚本语言所写的。使用bash脚本的好处很多,它体积小、灵活、会使用的人多。但Puppy中大部分的bash脚本都没有考虑国际化的问题,汉化基本有两条路可以走
  • 直接在bash脚本中将英文字符串替换成中文;
  • 使用gettext技术,标记出bash中的可翻译字符串,然后翻译相应生成的po文件。
第一种方案的好处是比较简单,使用也比较广泛,比如e-pup.5d6d.com上的中文e-pup 2.17和日文版的nop 3.01都是采用第一种技术。但它的缺点也很明显,它需要翻译者对bash有一定了解,另外如果官方升级了英文的脚本,很多翻译工作都需要重做,例如中文e-pup 2.17中的翻译工作到了Puppy 4.0后基本就白费了。

我觉得应该利用现成的gettext技术来尽可能节约大家的劳动。于是我决定采用第二种方案。它的基本的流程是:
  1. 标记出bash中的可翻译字符串;
  2. 生成po文件,并用机器自动翻译;
  3. 上传到开发者之家网站上;
  4. 网友下载po文件,用poedit等工具翻译;
  5. 收集大家翻译好的po文件,做出中文翻译包。
这样做克服了直接字符串翻译的一些缺陷,翻译者不需要太多bash知识就能使用,并且还可以有机器自动翻译和poedit等工具辅助。最重要的是,当官方出了新的版本后,重新标记一遍所有的可翻译字符串,然后只需要翻译新的字符串就可以了,过去的翻译成果依然能用,这样下一个版本的汉化工作就要少很多。

目前标记可翻译字符串这个工作完全由我一个人来做。上万行的代码我不可能一行一行的去读,于是我自己写了一个半自动的标记程序辅助我完成这个工作。但这个程序并不完美,常会漏掉一些可翻译字符串,另外某些形式的字符串它也完全没有办法识别。于是我面临这三种选择:
  1. 仔细检查每一个程序,保证正确标记所有可翻译字符串;
  2. 标记所有的有英文的字符串,等以后发现问题再去修改;
  3. 忽略程序无法识别和不确定的字符串,等以后发现问题再去修改。
方法1所需的工作量非常大,因为bash脚本中的字符串很复杂,有些字符串要看了脚本上下文才知道是不是可以翻译的。方法2可能造成程序无法运行,调试所需的工作量很大。方法3调试就比较简单,有未被翻译的字符串在程序中搜寻一下就可以了。

考虑到尽快做出可以给大家翻译的po文件,我选择了最后一种方法。于是便有了开头所说的翻译不完整、质量差的问题。因为从根本上说这个放出来的中文翻译测试版就是为了帮助我找问题的,而不是给大家用的。想想WINE项目开发了15年才出了第一个稳定版本。现在这个项目只是处于初级阶段,目前的测试版有很多问题并不让人惊奇,它离稳定还有很长的路要走,但我认为目前所遇到的技术困难都是可以解决的。

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.