打印本文 打印本文 关闭窗口 关闭窗口
汉化 VB 程序一点心得(转贴)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数771  更新时间:2009/4/23 18:59:02  文章录入:mintao  责任编辑:mintao
汉化 VB 程序一点心得(转贴)  文:李应文   来源:teach.hanzify.org   

以 AYE Text to MP3 v2.1 为例浅谈一下汉化过程及工具的使用

李应文

虽然玩汉化有一年多的历史了,但接触 VB 类程序的汉化还是第一次。鉴于汉化过程中出现了好多的困惑,特将汉化过程简述一下,希望能为和我一样的朋友在汉化 VB 类程序上有所帮助。

第一步,检测一下程序是否被压缩或加密。
用 PE iDentifier v0.91(我习惯用它,其实 FileInfo v3.01 也是不错的选择) 检测到该软件加了 ASPack 2.12 的壳。
用 UnASPack v2.12 脱壳后,再用 freeRes v0.94 处理一下(脱 ASPack 2.12 的壳也可以优先考虑一下 CASPR v1.100 )。
用 PE iDentifier v0.91 再检测一下,可以看到该软件使用 Microsoft Visual Basic 5.0 编译。

第二步,对ASCII 和 Unicode 进行汉化。
用 GetVBRes v0.80 打开程序,程序会自动查找 ASCII 和 Unicode 字符串并以列表的形式呈现给用户(如果你的机子够快的话,可以选择狂风VB语言汉化王 v0.98)。找到需要修改的字符串后双击该行打开字串处理对话框,在这里我们可以对其字串进行翻译。需要说明的是,当汉化后字符串长度少于原字符串的长度时就需要用 00 或 20 添充。究竟该选择哪一种呢,除按钮及一些隐藏提示外建议“用 20 添充”。如图:

修改完成后单击 [更新当前程序资源] 按钮。
单击[运行当前程序按钮] 测试一下。怎么界面中还有许多英文呢,原来这些英文都是 Unicode 字符串,由于 GetVBRes v0.80 本身的局限性找不到这部分资源,我们接下来手动完成。说到这儿也许有朋友要问,为什么不用《狂风VB语言汉化王 v0.98》呢?其实,由于这部分资源的特殊性,它也无法查找到。另外,它提取的有些资源会重复一两次,而且它的加字功能还不够完善。
还有一个问题,就是界面中字符串后出现了许多小正方形(提示: 如果在汉化时选择“使用 00 添充”遇不会出现这种情况)。不要紧,这是由于字体设置不当引起的,呆会儿我们解决。如图:

先修改“Cancel”。用 点睛文本编码查询 v0.90 算出“Cancel”及"取消"的 Unicode 值,用 UltraEdit v10.10b 替换,如图:

我们用同样的方法做好其它的按钮。
注意:此处按钮的修改。它是以 Unicode 的形式存在的,但长度标识是以 ASCII 的长度来计算的(好奇怪也),否则字符会显示不全或暂停功能损坏,修改如图:

至此,字符串资源的汉化已完毕。
第三步,修改字体及字号。
本来想偷个懒,用《狂风VB语言汉化王 v0.98》修改字体,不料竟出现了如图问题,只好手动来完成。

VB的字体块一般有个标准的结构,如图:

第一个字节表示此字体块所属的控件类型。
第三个字节代表“语系”,英文为“00”,简体中文为“86”。
第五个字节用来指示字体的风格。
第六、七字节共同组成一个双字节整数,表示字体的“粗体因素”。值一般为 90 01(规则) 或 BC 02(粗体)。
第八、九、十、十一字节共同组成一个四字节整数,表示字体的大小。9号字是“90 5F 01 00”。
第十二个字节表示字体名的长度,比如字体名是“Verdana”,则此字节就是“07”。
红色区域所表示的是字体名称。

在汉化中,我们所要做的就是将第三字节改为“86”,将第八、九、十、十一字节改为“90 5F 01 00”,至于字体名称是不需要修改的,软件会调用系统默认的字体显示。
接下来就可以用 UltraEdit v10.10b 等十六进制编辑器来查找修改了(可查找“010000009001”或“01000000BC02”)。
那么,为什么“_”变成“0”和“X”变成“r”呢?原来这些按钮不仅仅使用了图像资源,而且使用了字符“_”和“X”,并使用了很特殊的语系“02”。《狂风VB语言汉化王 v0.98》会自动识别语系代码,并将其全部修改为“86”,导致按钮显示出错。对这一部分我们不作修改(共有5处)。
至此,字体的修改已经完成。完成图:

当然,如果你觉得汉化后的控件位置不太好的话,还可以使用 VBEditor 调整一下。如图,静态文本和动态文本框的距离也太大了吧?

如何使用 VBEditor 调整呢?如图:打开程序后,点击窗体“oneForm4”在其属性下拉列表框中依次选择控件“Text1(1) TextBox”和“Text1(0) TextBox”,对其进行修改。如图:

到这一步为止,所有的修改已经完成了。全面测试一下……OK!

因为乱码问题没有将上一个版本界面中的一句话翻译,真的没有办法解决吗?回答是否定的,那么来看一下如何解决吧。

VB 对我来说很生疏,一切还得碰碰运气。用《点睛字串替换器》抓一下,看到下面的代码了吗?

修改说明:
“rtf”是文本格式,修改为“txt”也可以。
“ansi”是一种语系,修改为“default”或“gb2312”都行,当然下一处也得改动。
“charset”是字符集,当然要改为“86”。
“Verdana”一种常见的字体名称,改为“宋体”(此处不同于 VB 程序中的常规调用,不改不行)。
“s”代表字体大小,改为“18”即可。(18——9号字,)
(这段代码很长,我也是根据其字串特点猜到几个,其它的还希望诸位朋友见教。)

修改后便可以正确显示中文了,可别太高兴哦,软件不支持中文朗读的。



讨论:
李应文
常见的语系代码有"00"和"86"
另外,在汉化另一个VB程序中发现有这样两种语系代码:“02”和“EE”
问题:这两种代码是何语系?

paulhou
还有一个88,繁体中文!谁有语系代码表,我也很想了解!

莫名
rtf 中的字符集应改为 charset134,这里是用十进制计的。

打印本文 打印本文 关闭窗口 关闭窗口