软件汉化之路
2014-09-26邱元阳
邱元阳
编者按:也许与计算机的发展史有关,我们耳熟能详的软件原版为英文的数量众多,如果英语水平欠缺,想顺利地使用这些软件便成了国人的难题。因此,软件汉化随之流行。在此,主持人和嘉宾将分两期就软件汉化之路进行阐释,以期能够为大家使用软件带来一些便利。
从计算机诞生之日开始,美国就主导了其发展,自然没有考虑让它支持中文的输入和输出,早期的操作系统和编程环境也一样是英文的天下。为了便于中国人使用电脑,前辈们付出了不懈的努力。早期的汉字输入法、汉卡、汉字操作系统、汉字库等形式铭记下了这些扩大计算机应用范围的历史。
时至今日,汉字甚至多国文字在计算机上显示和支持早已不在话下,然而在软件上却仍然有很多纯英文的产品,给英文不好的使用者带来了诸多不便。
虽然操作系统已经出了各种不同的语言版本,但是应用软件开发者却不一定会照顾到每个国家的语言。除了一些非常常用的软件和重要的行业软件具有不同的语言版本或者语言包,很多我们要用到的软件都还是英文版。
在国产软件之外,仍有很多我们需要用到的英文软件,为方便国人使用它们,一些编程爱好者们对它们进了“汉化”处理,使它们变成中文的工作界面,这就是软件汉化。
● 软件汉化原理
软件汉化也称为语言本地化,其目的就是为了使操作界面和提示变成中文方式,从而方便使用。根据软件界面显示方法的不同,实现汉化的方法也有所不同。
一些较小的工具软件,或者原本没打算提供多语言支持的软件,其中的显示信息是直接写在程序中的,或者是调用封装在程序中的资源。这类软件的汉化就需要对程序进行修改,不过一般不是修改程序代码,而只是修改相应的字串和资源。
如果软件支持语言包,但是其中没有中文语言包,那么汉化起来就容易多了,不需要修改程序,直接添加或修改语言包就行了。根据其他语言包进行翻译整理,可以制作出中文语言包,将中文语言包依据规则添加到相应文件夹,或者替换掉其他某种用不上的语言包即可。以这种方式汉化的软件,与中文版基本一样。有些软件本来是有中文语言包的,但是出于种种原因,中文语言包可能推出较迟,汉化爱好者就会推出自己的语言包供人使用。这种语言包在制作时,不仅可以做成中文的,还可以同时保留英文,实现双语界面。比如Maya2012,在没有推出中文版之前,就有中英双语补丁流行,软件菜单是双语菜单,方便对照采用原版的教程进行练习。
还有一种是机器翻译的汉化方式,也比较常用,如晴窗中文大侠。这种方法是通过工具软件,将运行中的外文软件界面在内存中进行翻译,并重新显示软件界面。这类软件往往还带有常用软件的汉化字典包,加载之后可以比较完美地显示中文界面,而不是简单地显示机器翻译的结果。
在DOS时代,软件常常不是模块化的,除了个别软件有双语切换功能外,一般都不具备语言包,外文软件的汉化就比较困难。因为没有程序源码,要对程序进行修改,常常要通过十六进制编辑器甚至磁盘编辑器来进行。大名鼎鼎的PC-Tools,其磁盘编辑功能就常常被用来进行可执行文件的修改和汉化,不过其工作过程非常麻烦,翻译工作量大,字串还不能超过原来的长度,还必须能够准确地找到字串位置进行替换,不能把变量当成字串进行替换,否则易造成程序出错,不能运行。这种方法需要一定的经验,才能保证汉化的成功率。DOS程序的汉化,还必须有中文环境的支持才能正常显示中文界面,否则会出现乱码。困为汉化过程只是字串翻译和替换,不可能进行直接写屏操作,在没有中文字库的西文环境下并不能显示汉字。
磁盘编辑的操作比较底层,在Windows时代,使用十六进制编辑器也能对可执行文件中的字串进行修改,而且往往是很有效的。十六进制编辑器可以以ASSIC码的方式显示和编辑文件,在编辑存盘时不会附加任何其他信息,实现脱离原文件生成环境而修改文件,因此它不仅可以修改文本文件,也可以修改各种数据文件和程序文件,甚至能对内存状态进行编辑修改。较常用的十六进制编辑器有UltraEdit32、Winhex等。
Windows下的PE可执行文件,还可以通过资源编辑器或PE浏览器类的工具软件进行修改,这也成为软件汉化的一种方法,比之十六进制编辑器要轻松,也准确得多,在软件汉化爱好者中被普遍使用。
随着软件汉化需求的增多,越来越多的爱好者加入软件汉化队伍,这也催生了专业的软件汉化工具。利用专门的工具,可以实现傻瓜式的汉化,大大降低了汉化门槛。但是汉化工具并不是翻译软件,只是一种字串和资源替换的工具,要完美地进行软件汉化,仍需要操作者具有一定的相关知识和基础。
● 软件汉化工具
工欲善其事,必先利其器。一款合适的工具软件是进行汉化工作的前提。由于要汉化的软件可能是各种各样的,因而要用到的汉化工具也不相同。下面简要介绍几种常用的汉化工具。
1.eXeScope
eXeScope是款功能强大的exe程序修改器,能修改exe程序中的字体、菜单位置、对话框排序、字符串、图片资源等,支持.exe、.dll和.ocx文件,常常用作软件汉化工具,可直接修改VC++及Delphi编写的程序。
2.PE Explorer
PE Explorer是功能强悍的可视化软件汉化工具,也是常用的反编译工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等。另外,还具备W32DASM的反编译能力和PEditor的PE文件头编辑功能,能够容易地分析源代码,修复损坏了的资源,还能任意修改程序内置的资源、信息,可以处理的文件格式包括EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR等32位可执行程序。
3.Athena-A
Athena-A是通过字典来快速更新新版软件中的非标准字符串资源的汉化工具,具有挪移字符串的功能,还有字典提取、字典编辑功能,从而减轻繁重的非标准字符串资源翻译的工作量。由于其设计理念是通过字典来查找新版本中的字符串,因此无法实现新版本中新添字符串的翻译,也由于非标准字符串资源的复杂性,还需要在完成翻译后再耐心进行测试。endprint
Athena-A中附带的Athena-R小工具用于更新新版本软件的标准资源。一个软件升级为新版本时,特别是升级变化不大时,其标准资源的变化也不会很大,这时可以利用这个小工具快速更新标准资源。
4.Radialix
Radialix是比较强大的软件本地化工具,支持以VC++、Delphi、.net等语言编写的软件,以及INI格式文本文件的本地化,具有非标资源的本地化功能,可以设置更多的资源属性。
5.Passolo
Passolo是目前世界上最流行的软件本地化专业工具之一,具有所见即所得的汉化编辑方式,支持所有主流编程语言编译的程序,能有针对性地汉化软件界面的对话框、菜单等文字信息,还能修改软件图标和图片。
汉化工作的一大难题就是汉化字典比较稀缺,Passolo支持谷歌和微软的在线翻译功能,并且自带翻译宏。Passolo的模糊匹配技术,可以将已确定的汉化词组进行智能匹配,通常一个单词对应多个含义,能加速翻译工作。
6.ATC3D
Auto Translate Chinese 3D是一款软件自动汉化工具,简称ATC3D。它可以把任何英文版本的软件汉化成中文版本,平均汉化率达70%以上,而且是绿色软件,无需安装,相当方便,值得收藏。
7.Restorator
Restorator是一个非常好的汉化工具,可以汉化各种语言编的程序,对Delphi和C语言编译的程序的汉化结果尤为优秀。它的功能很强大,除了一般的编辑操作外,还可以采用拖放操作来完成资源的导入导出,可以利用“资源补丁”创建不受版权限制的补丁程序,支持对系统程序的修改,批量修改资源的语言设置。
8.UltraEdit
UltraEdit是一个功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代记事本。它内建英文单词检查、C++及VB指令突显,可同时编辑多个文件,有HTML标签颜色显示、搜寻替换以及无限制的还原功能。一般用其来修改EXE或DLL文件,当然也能用来汉化软件。
9.CrystalTile2
CrystalTile2是游戏汉化界相当知名的字库汉化工具,不仅是游戏汉化工具,也是游戏字库编辑器,可以生成、查看以及编辑点阵字库,还能编辑修改游戏位图,支持压缩、解压Huffman数据,自带的十六进制编辑器功能也非常强大,相比winhex拥有更多的功能。
新版CrystalTile2开放nds编辑器,用户可随意加载nds模块编辑器。
10.晴窗中文大侠
晴窗中文大侠是面向个人用户的一套专业汉化软件,采用专业词库对照翻译模式,即一套目标软件就有一个和目标软件相对应的专业字典包,保证了翻译后的准确。由于使用界面动态翻译技术,即完全是在目标软件工作运行时,动态完成翻译工作,只是对目标软件在有文字输出时才做翻译处理,不会影响目标软件原有的运行速度。并且所使用的字典搜索引擎经过完全优化处理,不会影响目标软件原来的任何运行功能。软件本身并不能更改目标软件的内核和设置,完全独立于目标软件存在,对目标软件非常安全,因此称之为“安全汉化”。
软件运行时可以随时在中文与英文两种界面状态下进行切换,增加了用户使用的灵活性。同时给用户提供了一个字典编辑器,用户可以根据自己的习惯对翻译的内容进行修改和增补。
晴窗中文大侠基本支持所有CG专业软件,几乎囊括了国内市场上常用的关于平面设计、三维动画、影视编辑等软件,是个人使用和学习英文图形图像软件不可多得的好帮手。
● 软件汉化过程
有了上面的工具软件,我们就可以开始软件汉化工作了。但是别急,在选择工具之前,我们还有不少工作要做,整个汉化过程也并不轻松。
1.软件脱壳
很多程序为了打包多个文件、瘦身、防止修改等,可能会对原来的程序进行加壳处理。加壳后的程序仍是可执行文件,具有与原程序相同的功能,但是文件结构和大小均已发生变化,不再有原编译环境生成的文件的特点,因此普通的可执行文件修改工具就无法直接对它们进行修改。
对于加壳后的程序,需要先进行加壳检测,了解是用什么工具进行加壳处理的,然后再用相应的脱壳工具进行脱壳,还原为原来的可执行文件,再进行汉化处理。有的程序可能用不同加壳工具进行过多次加壳,需要不断脱壳,还原为最初的程序文件。
PEiD可以探测大多数的PE文件封包器、加密器和编译器,是最常用的功能强大的查壳工具,几乎可以侦测出所有的壳,其数量已超过470种。PE Detective、PE-Scan、FI等也是常用的查壳工具。
流行的脱壳工具有UPX、unAspack、Procdump、PEdump32等,可脱去目前大多数压缩加壳软件的壳。如果工具脱壳不成功,就需要手动脱壳了,一般借助TRW2000、TR、SoftICE等调试工具,对脱壳者的汇编语言水平的软件调试能力有一定要求。
现在越来越多的软件经过压缩和加壳处理,给汉化带来许多不便,汉化爱好者也不得不学习掌握查壳脱壳技能。同样,汉化之后的软件,也可以再次加壳。
2.资源检测
汉化过程主要是针对资源文件的,由于各种编译环境使用的标准资源类型是不同的,就需要判断程序是什么开发工具生成的,了解它们对应的资源类型。
前面提到的查壳工具PEiD、FI等也可以用来检测程序资源类型,查看程序是用什么编程语言开发的,这样便于有的放矢。VC、MASM生成的程序其标准资源主要在Menu、Dialog、String里面,Delphi、C++Builder等(Borland公司的编译环境)生成的程序其标准资源主要在Rcdata和String里,而VB开发的程序其标准资源则是在Form中。endprint
程序中不在标准资源中的Unicode字串或ASCII字串,则属于非标准资源,需要用其他工具来汉化。如果程序未能脱壳,可以用freeRes工具释放出标准资源进行不完整汉化。
对于脱壳后的程序,有时还需要使用FixRes或freeRes等工具来重建资源,使程序的资源段位于最后,方便汉化。如果想对程序进行优化,可以在汉化完成后用LordPE来进行,不要在汉化前进行优化,否则可能会造成汉化后的程序运行出错。
3.工具选择
针对上一步中不同的资源类型,选择相应的汉化工具进行处理。
对于Delphi、C++Builder编译的程序,可以用Passolo、Multilizer来汉化,或者采用外挂语言包来汉化标准资源。Borland公司的编译器默认支持语言包,编译后的程序会自动检测是否有语言文件。即使是没有脱壳的程序,只要用 freeRes释放标准资源汉化后生成语言包放到原程序目录下,就可以显示中文,实现不完整汉化。
VB程序的汉化难度较大,可用汉化工具有VB窗体汉化器、GetVBRes、VBLocalize等,没有可以可视化调整汉化后界面的工具。
VC和汇编得到的程序,常常可以用各种工具汉化,甚至只用eXeScope、ResScope、ResHacker等资源修改工具就能实现汉化。
4.字串汉化
下面就是进行真正的汉化工作了。其实质就是在工具软件中进行文字翻译的过程。
以eXeScope为例,打开要汉化的可执行文件,左边的资源栏目里会出现该文件的全部资源,这些资源就是我们要修改的内容。从资源中选择和展开菜单,右边就有该菜单的全部内容了,将各个菜单的名字都改成汉字就可以了,如将“File”改成“文件”。注意“&”及其后的字母不要修改,它是菜单对应的快捷键。同样,从左边资源中展开对话框,右边就可以看到各个具体的标签与控件名称,将这些英文名称改成汉字就可以了,而且还可以进行可视化修改。
可以想象,手工进行这样的翻译工作不仅需要较高的外语水平,也是一种高强度的脑力和体力劳动。比较省事的方法就是使用字典,一般的汉化工具都支持字典导入和导出。没有字典的情况下,也可以利用汉化工具的字串导出导入功能,将导出的英文字串进行机器翻译再人工修改校对,最后再导入回去。
上面说到的,都是标准资源,而非标资源的汉化就麻烦多了,需要使用另外的工具,如点睛字符串替换器、CXA、枫叶字符替换器等,把需要汉化的非标准字串提取出来,汉化完后再导入。非标资源汉化要小心谨慎,汉化不当就可能致使程序出错。
5.测试调整
为避免汉化出错而前功尽弃,在汉化过程中要多存盘,勤测试,程序运行没有问题再继续汉化。
由于中英文长度和外观的不同,汉化的对话框可能会出现文字显示不全、字体难看、按钮过大或过小等情况,这就需要不断地测试调整。有些汉化工具可以设置对话框和按钮字体,有的却不能设置。手工调整字体需要查找程序中设置字体的函数来进行修改。非标准资源中的字串字体可以用工具AutoFontSet来修改。
除VB的汉化工具外,大多数汉化工具都能进行可视化的界面调整,使汉化后的程序在布局上比较美观。
● 移动应用汉化
随着智能手机、平板电脑等移动终端设备的普及,越来越多的APP开始走进人们的生活。这些丰富的移动应用中,不乏优秀的外文软件,因而移动应用的汉化需求也越来越多。
下面以最常见的移动操作系统安卓(Android)为例,简要介绍移动APP的汉化过程。
1.准备
先准备好如下软件:AndroidResEdit(arsc/xml汉化、签名工具)、汉化狂人(arsc/xml汉化工具)、Notepad++Portable(dex汉化、文本编辑工具)、APKTool(编译/反编译工具)、Undex(dex解包/打包工具)、WinRAR(apk压缩/解压缩工具)及Java(apk编译平台)。
2.解压
Android应用程序的扩展名为.apk,这实际上是一个压缩包,可以用RAR等压缩工具打开或解压。APK文件解压后,一般都会有META-INF和res文件夹,以及classes.dex、resources.arsc、AndroidManifest.xml文件。其中的classes.dex可用Undex继续解压出classes文件夹。resources.arsc是编译后的资源文件,classes.dex是Java源码编译后的代码文件,这两个文件里都有单词、语句需要汉化。AndroidManifest.xml文件里包含了软件名称、版本、权限、引用的库文件等信息,一般不需要汉化。res文件夹里存放的大部分是软件所需的资源及布局文件,部分需要汉化的单词、语句会在其中的*.xml文件里。META-INF文件夹里存放的是证书文件,软件修改后需要将里面*.RSA、*.SF、*.MF三个证书文件删除再重新签名,否则软件无法安装。
所以,一般我们要汉化的是resources.arsc、classes.dex和res文件夹里的*.xml文件。部分.html、.txt文件中可能也会有需要汉化的单词,可以直接用Notepad++Portable文本编辑工具修改。如果在.png等图片文件中有英文,则需要用图像处理软件修改。
为了方便打包,可以不解压,直接在RAR中打开APK文件,要汉化的文件拖出去汉化,汉化完成再拖进来。
3.汉化
先用汉化狂人打开resources.arsc进行汉化,可以通过搜索栏搜索要汉化的单词、语句。双击要汉化的单词、语句即可在弹出的对话框中填写中文,完成后点击“OK”即可。注意不要将文件路径汉化,用同样的方法,汉化*.xml文件。endprint
汉化后的文件拖回APK安装包中,此时可以先签名,用手机安装运行,看看汉化是否完整。若所有英文已经汉化完成,就可以结束汉化工作,否则,还需要对classes.dex进行汉化。
用文本编辑工具Notepad++ Portable,对解包出的classes文件夹里的文件进行汉化,可以有目的地搜索汉化。完成后用Undex重新打包,再拖进APK安装包内签名,用手机安装测试。
如果仍有汉化不完整处,用Notepad++Portable进一步搜索.txt和.html文件,继续汉化。若汉化后出现乱码,可以尝试将文本格式更改为utf-8格式。
从以上过程可以看出来,Android应用程序的汉化似乎比Windows的更为麻烦,不过还好,一款革命性的Android程序汉化工具APKTool出现了!
APKTool可以反编译APK安装包,直接修改或添加语言包,减少汉化出错概率,不仅可以对软件进行汉化,还可以精简软件语言和去除广告。
用APKTool的d命令反编译PAK文件到一个文件夹中,查看其中res目录下的文件,可以看到很多values开头的文件夹,这就是语言包。其中values是英文语言包,values-zh是中国地区语言包(values-zh-rCN是简体中文语言包,values-zh-rTW是繁体中文语言包),其他地区的语言包则可以精简掉。
在values文件夹里,通常有arrays.xml、strings.xml等语言文件,里面有很多
除语言包外,在res文件夹内的layout和xml文件夹内有时也会有文件需要汉化,配合搜索功能,同样处理就行。
汉化完成后,再用APKTool的b命令重新编译打包成PAK文件(到dist目录中找),签名,安装测试。
注意:APKTool是命令行方式工作,且需要Java环境支持。
4.签名
前面在汉化完成打包后,安装测试前,都提到了签名过程,这是因为Android程序是需要签名的,只不过平时我们从电子市场下载来的软件都是已经签好名的,可以直接安装。当软件安装包被我们汉化修改过后,原来的签名文件就不能用了,需要重新签名,软件才能正常安装。
先删除META-INF文件夹内的*.RSA、*.SF、*.MF三个原证书文件,下载一个Android签名工具,如AndroidResEdit(自带签名包),运行后,点击“签名”—“签名apk文件”,选择需要签名的apk安装包后点击“立即签名”即可。
此后,我们汉化后的软件才能正常安装运行。
● 软件汉化与破解
需要注意的是,汉化版并不等于中文版。中文版是软件本身的语言本地化结果,不同语言界面不影响软件功能,而汉化版是第三方来进行的语言本地化工作,与原来的软件无关,原开发者不会对由此造成的后果负责。有些软件本身支持语言包,只是缺少中文语言包,汉化者只需要完成中文语言包的编辑和添加工作即可,不会造成软件侵权。但对不支持语言包的软件,汉化者则可使用资源编辑器或一些专用的汉化工具来修改程序的资源文件,最终使软件的界面中文化,这个过程有可能造成侵权。这也是造成汉化软件尴尬地位的原因之一。
当汉化者对软件进行修改时,除了汉化必须的字串和资源修改之外,他还有可能对程序代码进行修改,从而改变程序的功能。例如,嵌入广告,绕过正版检测,精简软件功能,解除软件限制,甚至修正原版Bug等,这就是所谓的“特别版”。如果对共享软件或商业软件进行相应修改,让它不经授权就能使用完整的功能,这种版本的软件就是“破解版”了。“特别版”往往也是“破解版”,虽然方便了广大用户,但是它们侵犯了原版软件的正当权益,从知识产权保护的角度考虑,不提倡使用。
语言包方式的汉化不影响软件版权,除非软件是禁止复制使用的。但未经授权修改程序的汉化却会侵权。不过因为它从正面推动和普及了软件的使用,只要不涉及破解,一般不会被追究。前面讨论汉化的工具和方法,只是从技术层面进行描述和研究,并非主张和推荐,读者可以自己进行学习和实验,但不能推广这样的作品。
为了尊重原软件的作者和版权,有些汉化软件可能会完整保留原来未经修改的程序,而将自己汉化的结果文件(往往是主程序文件)附加在原来软件的安装包中,由用户选择使用。这个汉化后的文件称为“汉化补丁”,用它替换和覆盖指定的程序文件后,软件即成为中文界面。有些软件的汉化补丁可能比较复杂,涉及多个文件,其安装方式也可能不是手工替换而是自动安装。
对应的,如果软件在汉化的同时还经过了破解,那么就会有一个“破解补丁”,其用法与汉化补丁相同,甚至可能同时也是汉化补丁。
在汉化的同时,汉化者可能还会考虑到软件安装与使用的便捷性,进行适当修改,让软件无需安装即可运行,这就是常见的“绿色版”。绿色版不一定都是汉化版,也可能原本就是中文版,只是修改后重新进行打包,使程序可以直接解压使用。有的绿色版并未对程序进行修改,只是增加了一个注册表文件,即所谓的“绿化补丁”,导入系统,以满足程序读写注册表的要求。
需要说明的是,汉化版的软件如果是修改程序得到的,可能会导致程序运行不稳定或产生错误,毕竟它已经不是原版。
不可否认,汉化软件方便了很多国人,一些常用的汉化软件大受欢迎。然而因为涉及程序的修改,软件汉化也备受争议。不管是否应该推崇,毕竟汉化者的努力为我们提供了极大的便利,也成为软件世界里一道独具特色的风景线。