·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 非标汉化 >> 处理被多次调用的同一ASCII字串的一个思路/方法    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

处理被多次调用的同一ASCII字串的一个思路/方法

作者: 炎之川 来源:汉化教学 时间:2003-08-09 点击:9437


汉化时,处理被多次调用的同一 ASCII 字串的一个思路/方法

有时候我们在汉化 ASCII 字串时,会遇到某一个 ASCII 字串,它既是软件界面上显示的内容,同时又被当作变量在另外一处使用。这样对汉化来说是非常麻烦的,如果不汉化此 ASCII 字串,则界面上会留下英文,不能完美汉化;而如果将其汉化为中文,软件的某功能可能就丢失了,甚至可能造成软件无法运行。遇到这种情况,我们经常就只能遗憾的留下英文了。

在汉化 IconPackager 的时候,我就遇到了这种问题。拿 ASCII 中的“My Computer”来说,这个 ASCII 同时被3个地方调用:一是图标包预览中的项目(作为关键字,汉化则功能丢失),二是显示于主界面压缩包的四个小预览图标(作为关键字,汉化则功能丢失),三是一个具体的设置项(汉化后可以显示为中文),如图一、二。这三处同时调用同一个 ASCII 字串,而其中两处将其作为关键变量,真是BT的很!所以在上个汉化版中,我只能保留英文。今天在汉化最新版本的时候,花了点时间进行了研究,终于找到了解决的办法,写出来给大家看看,希望在大家遇到同类问题时,能够有些帮助。(当然可能有高手早就这样做了^^)



在阅读及实践之前,请确定你已经了解了偏移量转换器的用法,如果还未了解,请先去汉化新世纪的汉化教学网站(http://hhteach.org/)查看相关的文章(RVA 字串乾坤大挪移--偏移量转换器的简单用法 by 大宇)。


我们知道,对于软件中的每一个 ASCII 字串的实偏移(offset),软件在调用的时候,肯定会有一个特地的调用代码,以上面所说的“My Computer”为例,既然程序有3处调用了这个字串,那么肯定也会有3处有这个调用代码!

在 UltraEdit 中打开主程序,查找“My Computer”这一句 ASCII 字串,如图三,可以知道其偏移地址是 0x255DC。


用“点睛偏移量转换器”载入程序,在“实偏移”中输入“2D55C”,可以得到调用此 ASCII 的代码为“5CD54200”,OK,这就是我们需要的东西。在 UE 中搜索“5CD54200”(注意取消下面的“查找 ASCII”的对钩),结果一共搜索倒了6处!比想像的多是吧:)因为有这几个十六进制数字的地方,未必就是调用之处。所以我们需要通过实践,找出到底哪里才是每一处具体调用的代码。

经过验证,第一处“5CD54200”是图标包预览中的项目(如图四),第四处“5CD54200”是具体的设置项,第二处调用倒是没有找到,可能这处还与其他地方有关系。
(具体如何验证?可以把找到的“5CD54200”改为“5DD54200”,等于是把调用的 ASCII 挪后一位,这样就很方便了)


接下来,我们要做的就是解决这个调用问题。

既然是有多处地方同时调用同一个 ASCII 字串,那么我们能不能让其中的一处调用其他地方的字串,而不调用原来的呢?如果能实现,那么当字串作为不能汉化的变量时,可以正常使用;作为可汉化的具体的项目时,也能正常显示中文!这就是我们简要进行修改的思路。

在程序中找块空的位置(一般在程序的头部或尾部,这两处通常会有大量的 00 可供我们修改使用),将我们汉化后的 ASCII 写进去,如图5,我在 0xDA0 这个地方写入了汉化后的字串“我的电脑”,然后通过点睛偏移量转换器可知此处的调用代码为“A00D4000”。


看到这里,相信大家已经知道接下来要做的了:)

找到第四处调用“5CD54200”的地方,将其改为“A00D4000”,也就是使原来调用 0x255DC 处的“My Computer”,改为调用 0xDA0 的“我的电脑”。接下来,保存修改并测试,OK,完全搞定了!!(如图六)

(解释一下,为什么我不把当作变量使用的地方的调用改到 0xDA0 处,而修改作为普通的 ASCII 调用的地方?这是通过实践得到的,改前者没有效果,只能改后者)


通过这个例子,找到了一个解决某一 ASCII 北同时调用而不能汉化的问题,希望当大家在遇到同类问题的时候,能有所启发和帮助!如果有什么不明白的,请跟贴提出,我会尽量解释并完善文章。
同时也欢迎大家将在汉化过程中得到的心得写出来告诉更多的汉化爱好者:)

P.S.对于这个软件来说,事情远没有那么简单,像上面那样需要修改的有二十几处,还有十处以上的非标准字体要改,我^%%#@#$%^&*_&^

另,本来要写的关于 CreateFontIndirectA 地字体修改文章,先放一放,因为会修改和会讲解是两码事,我自己还没理清思路,不敢保证讲出来后能让大家都理解,何况现在课不少,而宽余时间除了读书以外,还有那么多漫画和动画……嘿嘿……


汉化新世纪成员: 炎之川
2002.9.14

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): ASCII 非标

·上一篇: 我也来谈国旗修改问题 ·下一篇: .NET 程序汉化一例 -- Cookie Crusher 的汉化

· 版权申明: 本文引自《汉化教学》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化教学》[ 作者: 炎之川],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号