用 Microsoft Visual C++ 6.0
用 Microsoft Visual C++ 6.0
一、做出字典档
1. 保留旧的档案
刚拿到一套软体要中文化,先将这套软体安装起来,并且建立一个叫做 old 的资料夹,把需要中文化的 exe 档和 dll 档备份一份到 old 资料夹中,以便日後做 patch 档使用。能够中文化的档案只有 exe 和 dll 这两种档案,但并不是每一个 exe 和 dll 都需要中文化,因为里面不一定有资源可以让我们修改翻译,有些 dll 档是不需要显示讯息和字串的。
2. 筛选要翻译的档案
用 Visual C++ 把每个 exe 和 dll 的 resource 都打开来看一遍,看看哪些是有 Dailog、Menu、String Table 需要我们来中文化的,把那些不需要中文化的档案从 old 资料夹中删除掉。再建立一个叫做 new 的资料夹,把 old 中剩下的档案复制一份到 new 中,以後要修改的就是 new 中的档案了,old 中的就保存好不要去动它。
3. 存成 rc 档
用 Visual C++ 一个一个的把 exe 和 dll 的 resource 打开,先转换 Dailog、Menu、String Table 的语系成为 Chinese ,然後另存成 .rc 的档案 。如果 resource 中有很多 bmp 或 icon 的资源也会一并存出来,所以在存成 rc 档之前,先把那些资源删除掉,剩下要翻译的就好,再另存成 rc,这样也会加快翻译的速度。
4. 用 glossary.pl 产生未翻译字典档
利用 glossary 中的 glossary.pl,和两个原始的英文 rc 档,做出一个尚未翻译的字典档。Glossary 的本意是要利用翻译前和翻译後的 rc 来做字典档,但是我们目前都尚未翻译,所以就先利用两个同样为翻译的 rc,做出未翻译的字典档来慢慢翻译。
5. 用 sortout.pl 将字典档排序
sortout.pl 也是 glossary 中的工具之一,将字典档排序用的,可以帮我们去掉重复的字串,而且依照字母将同样的字放在一起,我们在翻译时也比较不会出现同一个英文字但前後翻译不同的状况 (当你翻译一个七千多行的字典档的时候就知道了)。
如果你有之前翻译过的字典档 (像是中文化旧版时留下的),或着一些标准的字典档 (例如: mfc42.dll 的字典档,很多软体都是用到 mfc42.dll ),在这时也可以将之和新的字典档合并。用纯文字编辑器把这些已有字典档的内容,剪贴到新的字典档的最後面,然後用 sortout.pl 来排序一下新的字典档就可以了!! 它会用後面的来取代前面的翻译 (不过有时好像怪怪的)。
当然,你也可以用小飞侠的 cpatch 软体或是其他会自动帮你抓字串并且自动翻译的软体来产生字典档,反正字典档都是一样的,奇数行是英文,偶数行是中文。我比较相信从 rc 档中抓出来的字串比较完整,而且我喜欢完全自己翻译,可以控制翻译品质,所以我习惯用 glossary.pl 来做字典档。
小正正提供你 mfc42.dll 的字典档,把它抓回去用吧!! 相信对你有很大的帮助的!!
如果用 sortout.pl 来合并字典档时怪怪的,没有取代好,那小正正再教你一招:先用旧的字典档翻译原始的 rc 档,再用这个翻译不完全的 rc 和原始英文 rc 档和 glossary.pl 产生字典档,这样应该就万无一失了,因为需要用到旧的字典档的部份先被翻译过了。
二、翻译原始程式
1. 翻译 rc 档
将字典档翻译好了之後,我们利用 glossary 中的 trans.pl,把刚刚那个英文 rc 档给翻译成中文。如果你是用其他的软体来产生字典档 (例如: cpatch),请先将字典档中的特殊记号去掉 (只剩下英文和中文翻译) 再使用 trans.pl。
2. 将 resource 剪贴回原始程式
用 Visual C++ 打开这个翻译过的 rc 档案和该 rc 档的原始程式 (例如:Fusion.exe 的 rc 档是 Fusion.rc),把翻译过的 rc 中的资源 (Dailog、Menu、String Table) 一一用剪贴复制的方式贴到原始程式的 resource 中,把原来英文的资源删除掉 (同样的资源保留一个中文的就好),并且顺便检查翻译的正确性,Dailog 中有没有字串被挡住,需要调整大小...等等。
在这里,如果你之前没有把 rc 的语系先设成 Chinese 的话,开启 rc 中的资源就会变成乱码,要特别的注意。
3. 回存档案
都弄好、调整好了以後,就把 resource 回存档案中吧!! 千万记得, Visual C++ 要在 Windows NT 下才能回存, Windows 95 或 98 都不可以!! 所以之前的步骤你可以在 Windows 95 上做,但是这个步骤一定得在 Windows NT 做上才行。
4. 测试中文化後的程式
把中文化好的程式复制回原本程式安装的目录,取代原来的档案,执行看看,开始测试是否可以正确的执行程式各项功能,或是哪边有翻译不妥的地方,再回到 Visual C++ 中修改。
如果程式不能正确执行,表示你在 String Table 中修改到了一些系统变数,回去检查看看、猜猜哪些比较像是系统变数,把它恢复成原来的英文字串。然後存档再执行、再测试,你可能需要来回跑好几遍,到一切都完整无误才行。(你总不能把一个程式中文化到坏掉吧!!)
要特别注意有下拉选单的 Dailog,因为这些下拉选单中的内容往往是 ASCII 文字,不是从 String Table 中去取字串 (我称之为程式写的烂,让我们中文化很麻烦)。 Resource 中都是 Unicode 字串,在 Visual C++ 中也无法看到 ASCII 文字,更糟的是,如果你变动了有下拉选单的 Dailog 的任何内容,存档时 Visual C++ 就会把 ASCII 文字都存成 Unicode。这时我们测试程式时,下拉选单中的内容就会不见啦!!
所以小正正的方法是,编辑 resource 时不要去动有下拉选单的 Dailog,让它保有原来的样子,甚至不要去改变它的语系,这样存档时 Visual C++ 就不会去动到它的 ASCII 文字。但这样就没有中文化那个 Dailog 了啊!! 没关系,後面会教你其他的方法来补救。
有些有下拉选单的 Dailog 是可以去编辑修改的,因为该下拉选单的内容并不是 ASCII 文字,它有可能是从 String Table 中去取字串,或是一些系统资讯 (例如:字型),判断原则是,那些下拉选单内容是虽情况变动的。这就要靠你自己聪明的头脑去判断到底那些可以翻译,哪些不行了!!
遇到这类 Dailog 时,你可以将翻译一半的程式先存档备份,然後来做个试验,修改这种 Dailog 看看会不会有问题。如果有问题的话再把备份拿回来就好了。要特别注意的是,万一有问题,你把原始 rc 中的那一个英文 Dialog 剪贴回来可能没有用处,因为剪贴的过程就相当於修改 Dailog,ASCII 文字早就死翘翘了。 (我只说 "可能" 没有用处,有些程式这样剪贴还是有用的。)
三、最後的动作
1. 修改剩下的字串
刚刚不是有一些有下拉选单的 Dailog 还没有中文化吗? 虽然程式可以正确执行,但看起来是在很碍眼。(如果没有,你的运气很好!!) 我们要利用直接从程式中抓 Unicode 字串的中文化软体来翻译这些剩下的东西,不能用 Visual C++ 去编辑 resource。
这类软体有很多,大家看到中文化工具的大多是这种软体 (例如:cpatch)。我习惯用林志全的中文化,一个一个字串来修改,这样或许比较累,但我觉得这样做可以依据每个 Dailog 替字串保留的长度的不同来翻译,可以做到比较完美。
这样的翻译方法就必须考虑到字数的多寡 (中文字不能比英文多) 和 Dailog 中字串显示位置的大小。做出来是比直接编辑 resource 丑一点,不过这也是没办法之中的办法。
2. 制作 patch 档案
都测试翻译修改完成之後,接下来就是要制作 patch 档案。我使用张维钧的 Wpatch 加上 MDIFF 来制作 patch 档案,而且我们之前有保留 old 和 new 这两个资料夹。制作完成後最好自己多测试几次,看看是不是能够正确的 patch 原始档,这时你可能需要移除再重新安装软体来试试。
最主要的就是用 Microsoft Visual C++ 6.0进行调试,比如你的fin2001d如果全部使用有三个问题。1.翻译不准确;2.对话框显示不完全;3.在副f2002中用预设文档时找不到字体,非法操作。这些都需要Microsoft Visual C++ 6.0进行调试。
用 Microsoft Visual C++ 6.0在汉化同一软件的新版本时非常快,24小时足以!