让光标恢复原形
作者: ChinEase 来源:汉化教学 时间:2003-07-26 点击:7856
让光标恢复原形
事先声明,你可以直接点击这里看处理方式就可以了,前面的部分或许没有意义 :-) 有些时候你在使用汉化软件的过程中时会发现一些原版中并不存在的界面显示问题,比如拖动窗口面板之间的分隔栏时光标放大 N 倍,打印预览时那个放大镜图标真的放大了 :-)
 |
 |
 |
 |
放大了的放大镜 :)
|
正常的放大镜
|
放大 N 倍的光标
|
正常的光标
|
这些现象在我们经常使用的工具 UE32 和 CUTEFTP 等汉化软件中会出现,我在最近汉化 TEXTPAD 时也发现了这个问题,经过分析找到了原因,其实应该说这不是汉化的失误,而是汉化工具编译的 BUG,经过研究也找到了处理办法,下面简单说说: 因为我们做 VC 类软件汉化时最常用最好用的工具自然是 VC++,经过 VC++ 编译的程序一般最稳定也不容易出错,但 VC++ 汉化程序时有个比较大的 BUG 就是丢失对话框数据(阿涛兄的文章叙述的很清楚了 :);那么这个光标变形的问题可能是 VC++ 做汉化时的另一个 BUG,而且在 VC++ 中很难发现:

|

|
EXESCOPE 中原版 cursor 资源 30980 的显示
|

|
VC++ 中 cursor 资源 30980 的显示(汉化前后均如此)
|
EXESCOPE 中 VC 汉化版 cursor 资源 30980 的显示
|

|

|
BC++ 简版中原版 cursor 资源 30980 的显示
|
BC++ 简版中 VC 汉化版 cursor 资源 30980 的显示
|
呵呵,是不是多少有点晕倒的感觉?正常的 32×32 和 16×16 大小竟然在 EXESCOPE 和 BC++ 中显示错误,而且颜色也不正确;毫无疑问,VC 在保存汉化文件时破坏了光标资源的标识头,而造成其它汉化工具读取时显示错误及运行程序时的难看界面,解决的办法当然是修正标识头或导入正确的光标资源了。 我们仍然用 BC++ 打开原版和汉化版文件,以文本方式分别查看此处的资源,即右键点击 cursor 资源 30980 项目,执行“Edit as Text”,请注意前面几行:
30980 CURSOR { '00 00 02 00 02 00 20 20 00 00 0F 00 0F 00 30 01' '00 00 26 00 00 00 10 10 00 00 08 00 08 00 B0 00' ......
|
|
30980 CURSOR { '00 00 02 00 02 00 28 20 00 00 0F 00 0F 00 30 01' '00 00 26 00 00 00 28 10 00 00 08 00 08 00 B0 00' ......
|
原版 cursor 资源 30980 的文本显示
|
|
VC 汉化版 cursor 资源 30980 的文本显示
|
红色字符是汉化前后不同的内容,记录的应该是光标的大小,20、10 都是 16 进制方式,分别为 10 进制的 32、16,但 4136 和 2088 是怎么出来的我也搞不懂了,尝试修改一下保存再双击 cursor 资源 30980 项目,你会发现现在一切都正常了;而且奇怪的是这时你即使再将 20、10 修改回 28、28,资源方式查看也是正常的。似乎一切进展顺利,我们尝试从第一个光标逐一修改,到 30983 时终于出现问题:修改后你会发现在右栏中的显示区域为 16 进制字符,而不是正常的资源方式;那么剪切掉这个资源从原版再复制一个如何呢?你会发现本应是 32×32 和 16×16 的两个光标只剩一个了,而另一个竟然是 0×0 大小,真衰呀 :o( 从我做的汉化来看,似乎 30977 之后都是标准的 VC 光标资源,而且 30983 之后普遍存在 BC++ 修改错误的问题,那么我们先用 BC++ 解决前面的光标而用其它手段搞定后面的吧,在 BC++ 下修改存盘退出,程序竟然无法正常运行,用老方法使用 PEBBLE32 打开重新存盘依然无法正常运行! 我们再尝试备份 VC 汉化的文件,然后将原版和汉化版同时在 PEBBLE32 内打开,删除掉所有原版的对话框、菜单和字符表资源,将 VC 汉化版中相应的资源复制到原版中(字符表资源的一次删除和复制粘贴操作项目不能太多,否则出错),存盘退出后尝试运行,程序仍然无法正常启动。 我们还可以尝试在 BC++ 下将 cursor 资源 30983 前面的部分手动修改后另存为 RES 或 RC 格式,用资源替换工具导入原版,哈哈,会发生什么情况呢?由于汉化版资源与原版语系不同,所有资源竟然丢失而文件只剩下区区 8K。 那么真的没有办法解决这仅剩的一点点光标问题吗?Ronnier 在汉化 bleem 时给了我们很好的提示,我也认为 reshacker 是个非常不容易出错的解决之道,但操作不免有些不方便,以下是我全部的测试过程: ⑴ 我们不妨假设要汉化 test.exe 这个文件,VC 汉化后的文件命名为 test-vc.exe,需注意的是最好不要修改 cursor 资源的语系,没有必要呀; ⑵ 用 BC++ 打开 test-vc.exe 另存为 test.res,因为我个人认为 RES 格式是兼容性最好的,VC、BC 以及 reshacker 都可以支持; ⑶ 用 BC++ 打开 test.res,用文本方式修改 cursor 资源 30983 前面的部分,需要注意的是,如果资源只有一个 32×32 的光标则只需要修改上表中第一行的 28 即可,包含两个光标则最好两行都改(测试只修改第一个好像也可以 :-),存盘退出; ⑷ 用 reshacker 打开 test-vc.exe 这个文件(保险起见先备份一下),因为不存在语系不同的问题,我们可以使用 Update all Resources 功能将 test.res 的资源全部替换进来,另存为 test-temp.exe 看看运行是否正常,很奇怪的一个现象是替换所有资源后程序运行是没有问题的,但很多地方光标无法显示; ⑸ 我们用 BC++ 打开 test-temp.exe 就会发现手动调整的光标资源全部丢失而且打开会报错,这可真不是好事。重新打开 test.res,删除 cursor 资源 30983 前面的部分,再打开 test.exe 文件,将相应的光标逐一复制粘贴过来(很麻烦,不象 VC 可以批量复制),再存盘重复上一操作运行测试,呵呵…………。 ⑹ 程序运行正常但经过调整后的光标依然很大,同时光标资源显示错位,拖动面板分隔栏时显示错误的光标,我们用 BC++ 对比查看时就会发现,test.res 中的资源是正常的,而替换所有资源后的 test-temp.exe 中光标资源从 30979 到 30802 呈循环显示错误;看来 reshacker 也存在编译文件的错误; ⑺ 通过以上这么多的方式和测试,我能得到的结论就是标准 VC 光标资源是不能轻易动的,也就是从 30977 之后的部分最好不要用 BC++ 来编辑,而 reshacker 的全部替换功能也是不安全操作,所以我们只有老老实实的逐一替换吧:我们再用 reshacker 打开上步的 test-temp.exe,容易让人迷惑的是光标列表项是从 1 向下顺延的,而不是我们在其它工具中见到的 5 位序列,不要管它,直接使用 Replace Cursor 功能,在选择文件时打开 test.exe 这个原始文件(当初不修改 cursor 资源的语系的原因即在此),这时候你就会看到在两个光标列表栏中都是序号相同的资源了 :-) 呵呵,还等什么?从 30977 开始吧,一般情况下到 30988 为止有 12 个光标需要替换,一次只能替换一个,全部替换完毕后另存一个名字吧,这个文件就是你最终的汉化产物了!如果你仍然觉得不安全的话,那么从第 ⑴步后直接跳到第⑺步操作,把 test-vc.exe 中的所有光标逐一替换一遍吧,眼别花了 :-) 罗索了这么多,你会发现前面说的都是废话,而最后的⑴、⑺才真正有价值,而可能可以偷懒的地方就是 30977 前面的部分使用文本方式编辑存为 RES 格式;其实也不全是如此,不同的应用程序如果 BC++ 和 PEBLLE32 及资源替换工具能解决问题的化要比 reshacker 省事,我建议你可以先用前面的方法测试再说,以后作汉化升级时心中自然有数了。光标解决的办法并不复杂,但由于光标文件的格式与光标资源在 32 位程序中的排列格式并不相同,所以我暂时没有办法直接通过十六进制编辑 VC 汉化文件来完成,如果你有什么心得,不妨告诉我~~
相关汉化工具:VC++ 6.0、BC++ 5.02 简版、EXESCOPE 6.0、PEBBLE32 3.1、RESHACKER 2.5.0.1 等 所有汉化工具及涉及文章可在汉化新世纪得到。 ChinEase 补充于 2000-10-02
|