<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
 <title><![CDATA[汉化新世纪]]></title>
 <link><![CDATA[http://teach.hanzify.org.html]]></link>
 <description><![CDATA[汉化新世纪]]></description>
 <copyright><![CDATA[&lt;a href=&quot;http://www.hanzify.org&quot;&gt;&lt;font color=#FFFFFF&gt;汉化新世纪&lt;/font&gt;&lt;/a&gt;]]></copyright>
 <generator><![CDATA[Hanzify.org System by MuWing]]></generator>
 <lastBuildDate><![CDATA[Sun, 21 Mar 2010 15:30:51 +0800]]></lastBuildDate>
 <image>
   <url><![CDATA[http://www.hanzify.org/Main/Template/Images/biaoti1.gif]]></url>
   <title><![CDATA[汉化新世纪]]></title>
   <link><![CDATA[http://teach.hanzify.org.html]]></link>
   <description><![CDATA[汉化新世纪]]></description>
 </image>
<item>
 <title><![CDATA[跟我学汉化－INNO setup 制作安装包]]></title>
 <description><![CDATA[&nbsp;作者：Raindy　网站：www.raindy.org
『Inno Setup 简介』
　　Inno Setup 是一款免费的安装制作工具，简洁而强大，支持 pascal 脚本，既有适合新手的脚本向导，也有适合高手的的脚本编辑器。
　　Inno Setup是一个不可多得的安装制作软件。
　　常见的 INNO setup安装包制作思路：脚本向导(默认)＋修改代码(DIY)

『学习任务』 
　　
　　汉化目标：请将示例软件制成安装包，并根据上图蓝色箭头标示位置美化安装包。
　　 下载示例文件、 下载安装包资源文件
　　
『操作流程』
一.利用脚本向导生成代码
　　1.运行INNO setup主程序Compil32.exe，启动&ldquo;脚本向导&rdquo;，&ldquo;下一步&rdquo;。注意不要选择&ldquo;创建一个新的空脚本文件&rdquo;。
　　

　　2.根据向导，添加软件版本信息，第一行为程序名称，第二行为含有版本号的程序名称：
　　

　　3.设置程序目录，即安装路径，应用程序默认目录是Program Files（在INNO脚本中表示为{pf}），可根据需要选择目录，如字体则安装在系统盘&ldquo;Windows&rdquo;目录下的&ldquo;Fonts&rdquo;文件夹中。
　　

　　4.设置应用程序文件，包括主程序文件及相关文件，INNO脚本向导中的INNO安装程序目录下&ldquo;\Examples\MyProg.exe&rdquo;文件，通过&ldquo;浏览&rdquo;选择目标安装包的主程序，如这里的&ldquo;PDFUnlocker.exe&rdquo;;紧接着添加其他相关程序，可以通过&ldquo;添加目录&rdquo;来操作，注意要包含子目录文件。
　　

　　5.设置菜单名称及图标，默认使用程序名称作为开始菜单文件夹名称，当然可以根据需要修改。如果允许用户在执行安装过程中改变文件夹名称，可钩选相应选项；其他主可执行文件图标，默认是选中&ldquo;允许用户创建桌面快捷方式&rdquo;，如果不允许，可取消选择。
　　

　　6.设置应用程序文档，即信息文件，包括许可文件等，根据个人习惯添加，本人习惯只有添加一个许可文件，即&ldquo;汉化说明.txt&rdquo;文档。
　　

　　7.设置安装程序语言，即安装包的界面语言，INNO汉化版的默认语言为简体中文。如果要制作多语言的安装程序，可以钩选相应语言
　　

　　8.编辑器设置，包括安装包的输出目录、安装包名称、安装包图标等，如图所示：
　　

　　9.完成脚本向导，&ldquo;完成&rdquo;后提示是否编译脚本，确定。
　　　

二、根据需要，修改脚本代码：
　　1.修改安装包左侧位图，其大小一般为164x314px，在INNO脚本的[Setup]段添加如下代码：
&nbsp;

WizardImageFile=Res\WizardImage.bmp


　　注：红色的标记为位图路径，可以用相对路径或绝对路径

　　2.修改安装包右上角位图，其大小一般为55x55px，在INNO脚本的[Setup]段添加如下代码：
WizardSmallImageFile=Res\WizardSmallImage.bmp

　　3.修改安装包左下角的BeveledLabel内容，常见有两种方式：
　　(1)临时性修改　　在INNO脚本的[Messages]段添加如下代码：
&nbsp;

BeveledLabel=软件汉化：高芳銮(Raindy)

　　
　　(2)永久性修改　　用记事本打开INNO目录中的&ldquo;Default.isl&rdquo; 修改&ldquo;BeveledLabel = &rdquo;后的内容：
&nbsp;

BeveledLabel=　　　软件汉化：高芳銮(Raindy)



　　4.修改安装包欢迎标签内容，即WelcomeLabel2 
　　用记事本打开INNO目录中的&ldquo;Default.isl&rdquo; 修改&ldquo;WelcomeLabel2 = &rdquo;后的内容：
&nbsp;

WelcomeLabel2=正在准备安装 [name/ver]...%n%n推荐您在继续安装前关闭所有其它应用程序。%n%n软件汉化：高芳銮(Raindy)%n%n电子邮件：Raindyok@qq.com%n%n


　　注：%n在INNO脚本中为换行符

　　5.安装结束后动行主程序或打开文件等，只需在INNO脚本的[Run]段修改代码：
&nbsp;

&nbsp;
Filename: {app}\PDFUnlocker.exe; Description: 启动 PDF Unlocker; Flags: nowait postinstall shellexec;
Filename: {app}\汉化说明.txt; Description: 查看说明; Flags: nowait postinstall shellexec



『配套视频』　　





『参考安装包』
　　http://www.hanzify.org/article/List&amp;ID=12668]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/696-1263372559.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Wed, 13 Jan 2010 16:49:19 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－特殊汉化之外挂语言文件]]></title>
 <description><![CDATA[&nbsp;作者：Raindy　网站：www.raindy.org
『外挂语言文件』　　Borland 公司开发编写( Borland Delphi、Borland C++ 等)的一些软件，在生成汉化文件时，会伴随生成一个 *.CHS 或 *.CH 的文件，即我们通常说的外挂语言文件，可以实现对界面汉化的效果，但无法达到汉化非标的目的。外挂语言文件的主文件名称必须与主程序的名称一致，否则无法实现汉化。　　Passolo 汉化 Delphi 类程序，生成的外挂语言大小与原程序相近，扩展名为 chs；而由 Sisulizer 生成的外挂语言文件体积小于原程序，扩展名为*.CH，加上 Susulizer 对 Delphi 类程序支持度远高于 Passolo，故推荐优先选择 Sisulizer 制作外挂语言文件。『学习任务』　　汉化目标：请用Sisulier 或 Passolo 制作示例软件的外挂简体中文语言文件。　　 下载示例文件『操作流程』(一)Sisulizer 制作外挂语言文件　　1.运行 Sisulizer，根据向导一一操作，具体详见《5.跟我学汉化－标准资源汉化之Sisulizer篇》，在生成汉化文件前，依次点击菜单栏&ldquo;工程&rdquo;－&ldquo;编辑源&rdquo;－原文件，弹出&ldquo;Delphi源&rdquo;窗口：　　　　2.在&ldquo;输出文件&rdquo;标签下方，钩选中&ldquo;资源 DLL 文件&rdquo;或&ldquo;内嵌资源 DLL 文件&rdquo;之一即可。两者生成的外挂语言文件是一样，只是路径不同。前者在原英文程序同一目录下，后者在原英文程序的下级目录emb文件夹内。　　　　3.&ldquo;构建选定语言文件&rdquo;即可生成外挂语言文件，后略不再赘述。(二)Passolo 制作外挂语言文件　　1.运行 Passolo，根据Passolo汉化三步曲操作， 具体详见《4.跟我学汉化－标准资源汉化之Passolo篇》，Passolo对Delphi类程序，默认生成的目标文件是chs文件，如下图：　　　　2.&ldquo;生成目标文件&rdquo;后，原程序当前目录下生成一个chs的文件，即外挂语言文件，此文件大小与原文件接近。　　『操作流程』



『参考汉化』　　略 ]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/695-1261570093.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Wed, 23 Dec 2009 20:08:13 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－软件资源修复]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『资源修复简介』　　汉化完软件，经常遇到生成的文件无法运行情形，出错的提示，不是缺少 DLL文件，就是无法初始化窗口。　　分析原因可能是脱壳不彻底或跨平台问题没修复，此时需要修复软件资源。　　常见修复资源的方法：　　方法一：FreeRes 强行处理　　先用FreeRes强行处理怀疑有问题的文件，然后再选用相应工具进行汉化，尽管会导致文件增大，但是却相当简单易用。　　方法二：修复导入表　　搜索原程序的IAT地址－&gt;获取输入表信息－&gt;修复目标程序的输入表　　方法一在汉化前处理，方法二在汉化后处理。『学习任务』　　汉化目标：对示例软件进行资源修复，并测试汉化后的文件能否正常运行。　　 下载示例文件 (12.20补充了原英文版程序)　　(特别声明：软件无毒，只因壳的原因，可能个别杀软报毒)『操作流程』(一)FreeRes 强行处理法　　1.释放压缩资源　　运行 FreeRes 程序，打开待处理文件，此时提示&ldquo;载入资源错误，它可能已被压缩，你是否需要释放资源进行分析&rdquo;：　　　　2.建立可编辑资源　　点击&ldquo;是&rdquo;后，FreeRes 开始释放压缩的资源，完毕，在菜单栏&ldquo;功能&rdquo;－&ldquo;建立可编辑资源&rdquo;，完毕，提示成功建立可编辑资源。　　　　3.此时，可将经上述步骤处理后的文件进行汉化，则生成的汉化文件一切正常。(二)修复导入表法　　1.先运行可正常运行的原英文版程序，接着运行修复工具 Import REConstructor，此时在工具界面的进程选项中选择正在运行的英文版程序，如下图：　　　　2.&ldquo;自动查找IAT&rdquo;，查找完毕，弹出信息框，找到可能的原始IAT地址，如下图：　　　　3.&ldquo;获取输入表&rdquo;，界面左上方的显示找到的输入函数，记录栏显示英文版当前输入表的信息，如下图所示：　　　　4.获取到英文版的输入表，我们接着要做的就是修复我们的目标文件，点击&ldquo;修复转储文件&rdquo;，在弹出窗口选择待修正的文件，即汉化后无法运行的程序文件。　　　　5.选定待修正程序后， Import REConstructor 自动修复目标程序的导入表，并生成一个修复后的程序，修复文件名通常带有&ldquo;_&rdquo;符号。　　『配套视频』]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/694-1261485892.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Tue, 22 Dec 2009 20:44:52 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－加壳与脱壳]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『加壳与脱壳』　　植物有壳，动物有壳，软件亦然。　　常见的三种壳：压缩壳、保护壳、捆绑壳。　　壳的用途：(1)保护版权信息－不让别人随便更改作者版权信息；(2)减小程序体积－方便存储、传输、使用；(3)黑客界给木马等软件加壳，主要为躲避杀毒软件。　　常见的加壳工具：　　　　　　常见的脱壳工具：　　　　常用的侦壳工具：PEiD、StudPE、PEscan、ExEinfo PE等　　『学习任务』　　汉化目标：使用合适脱壳机将三款示例软件脱壳。　　 下载示例文件『操作流程』　　1.使用 PEiD 侦壳，可知示例三款软件加壳分别为　　001sample 加壳为 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -&gt; Markus &amp; Laszlo　　002sample 加壳为 PECompact 2.x -&gt; Jeremy Collake　　003sample 加壳为 ASPack 2.12 -&gt; Alexey Solodovnikov　　　　2.对于 UPX 壳，推荐使用&ldquo;UPX静态脱壳机&rdquo;，直接将已加壳程序拖入下图的红色虚线框位置，蓝色虚线框显示脱壳状态：　　　　3.对于 PECompact 2.x 壳，推荐使用&ldquo;RL!dePeCompact 2.x&rdquo;，&ldquo;Browse&rdquo;选择待脱壳文件后，&ldquo;Unpack&rdquo;即可。　　　　4.对于 ASPack 壳，推荐使用Kill 的 ASPack 脱壳机，&ldquo;打开&rdquo;选择文件后，&ldquo;脱壳&rdquo;即可：　　『配套视频』『参考答案』　　 下载示例文件　　(特别声明：软件无毒，只因壳的原因，可能个别杀软报毒)&nbsp;Raindy&nbsp;注：由于时间关系，脚本脱壳演示推后整理发布]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/693-1261485766.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[汉化脱壳]]></category>
 <pubDate><![CDATA[Tue, 22 Dec 2009 20:42:46 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－汉化工具]]></title>
 <description><![CDATA[
作者：Raindy　网站：www.raindy.org

『汉化工具简介』　　软件汉化就是使用专门工具对外文版的软件资源进行读取、翻译、修改、回写等一系列处理，使软件的菜单、对话框、提示等用户界面显示为中文，而程序的内核和功能保持不变的过程，完整的汉化大致要经过侦壳、脱壳、预处理、翻译、编译、测试、修正、发布8个步骤。这里的专门工具就是狭义上的汉化工具，特指标准资源和非标资源汉化工具，如Passolo、Sisulizer、点睛字符替换器等。广义上的汉化工具指汉化流程中用到的各类工具软件，可谓五花八门。　　熟练应用各类的汉化工具是汉化人学习汉化的基本技能之一。汉化工具选用原则大体上如下：　　1).根据使用目的有针对性地选用工具；　　2).最好带字典功能，提高汉化翻译效率；　　3).同类工具软件，由个人使用习惯选择使用。『学习任务』　　实训目标：请将列出下面汉化工具的主要用途及特点(乱序排列)　　(1)Radialix (2)UltraEdit (3)Athena-A (4)Resscope (5)UPXShell　　(6)NSIS (7)StringManager (8)Passlo (9)AutoFontSet (10)Sisulizer　　(11)灵便汉化编辑器 (12)VBLocalize (13)FreeRes (14)PE-scan (15)DictionaryHelper　　(16)ExeinfoPE (17)点睛字符替换器 (18)ResHacker (19)INNO setup (20)Fantasy Editor　　(21)PEiD (22)CodeFusion (23)UniversalExtractor (25)ImportREC　　(26)PatchMaker (27)FixRes (28)GetVBRes (29)CXA (30)ArmaG3ddon『参考答案』　　详见我的Blog：http://www.raindy.org/blog/article.asp?id=65]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/692-1259754723.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Wed, 02 Dec 2009 19:52:03 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－非标升级汉化]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『非标升级汉』　　很多汉化新手，可能会习惯保存标准资源的汉化方案文件(如Passolo的lpu文件、Sisulizer的slp文件)。对于非标的方案文件，则经常会被忽略。当软件更新版本时，又要重新汉化非标，很大程度上都在重复劳动，大大降低了汉化效率。常见的非标汉化工具(如点睛、CXA等)大都可以支持升级更新，利用旧对照文件或字典快速升级非标，只需要汉化有更新的字串，从而省去重复翻译的时间。　　点睛升级汉化的三种方式　　1.点睛程序中的&ldquo;翻译新版本&rdquo;功能(必知)；　　2.灵便汉化编辑器的字典处理功能；　　3.借助 Passolo 的升级汉化；　　CXA 升级汉化的两种方式　　1.CXA 主程序的&ldquo;仿译&rdquo;功能(必知)　　2.借且 Passolo 的升级汉化『学习任务』　　汉化目标：请分别使用&ldquo;点睛&rdquo;和 CXA 对示例软件快速升级汉化非标　　 下载示例文件『操作流程』 Hidden('z802glv6ik')　　点睛升级汉化：　　1.运行点睛，查找ASCII字串，查找完毕，弹出菜单，确定。　　　　2.选择&ldquo;编辑&rdquo;菜单，选择&ldquo;翻译新版本&rdquo;选项，利用旧字典文件来自动更新新提取(生成)对照文件中的翻译。　　　　选择字典文件，即旧版的已翻译的对照文件，也可以直接将字典文件拖到&ldquo;字典文件名&rdquo;中(点睛支持拖放操作)，点睛支持字典文件可以是旧版的对照文件，也可以是根据偏移量方式分侵的 dic 格式字典文件。这里&ldquo;对照文件&rdquo;就是新生成(或新提取)的对照文件。　　　　选择完毕，&ldquo;翻译新版本&rdquo;点睛自动将字典文件中的翻译更新到新生成的对照文件中。　　　　3.返回&ldquo;编辑&rdquo;菜单，选择&ldquo;编辑对照文件&rdquo;选项，检查新版本中需要更新翻译的字串，&ldquo;外部编辑器&rdquo;编译即可，后述操作详见点睛操作，此处略过不赘述。　　　　CXA 升级汉化：　　1.运行CXA，设置相关参数后，如下图所示，&ldquo;确定&rdquo;跳转到步骤2，继续&ldquo;确定&rdquo;　　　　2.跳转到步骤4，点&ldquo;高级编辑&rdquo;，弹出&ldquo;高级使用&rdquo;界面，点击&ldquo;应用式样文件&rdquo;。　　　　　　&ldquo;编辑&rdquo;选项下方，按下&ldquo;照下面已做好的旧文件案&rdquo;后的&ldquo;浏览&rdquo;按钮，选择已完成翻译的旧对照文件(类似于点睛的字典文件)。此时，再点击&ldquo;高级选择&rdquo;下方的&ldquo;读取&rdquo;按钮，CXA自动读取原对照文件中的字串，并弹出提示窗口。　　　　确定完毕，点击&ldquo;仿译&rdquo;(相当于点睛的&ldquo;翻译新版本&rdquo;功能)，CXA 自动将旧对照文件中的翻译更新到新生成的对照文件中。　　全部操作完成后，&ldquo;确定&rdquo;又编辑步骤4，可以&ldquo;编辑翻译文件&rdquo;，将剩余未翻译的字串翻译完，后面操作详细CXA汉化非标流程，这里不再赘述。　　
『配套视频』『参考汉化』　　 下载参考汉化文件 ]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/691-1259754541.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Wed, 02 Dec 2009 19:49:01 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－标准资源升级汉化]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『标准资源升级汉化』　　汉化软件标准资源时，我们通常习惯保存方案文件(或称工程文件)，有时候还将方案文件导出为特别的字典文件，如将 Passolo 的 lpu 方案工程导出为 glo 术语表，以提高字典文件的利用率。当软件发布新版本时，低版本的方案文件，对照字典文件等都可以用来更新升级汉化标准资源。Passolo 和 Sisulizer 都支持旧版本方案文件重用功能。　　Passolo 升级汉化支持两种方式：一种是&ldquo;资源重用&rdquo;，即低版本方案文件的翻译数据传送到新版本翻译列表中；另一种是&ldquo;扫描目标文件(校准)&rdquo;(以下简称校准)，即低版本已汉化的目标文件中读取翻译应用到新版本翻译列表中。　　Sisulizer 升级汉化的主要方式是&ldquo;导入&rdquo;，导入的文件可以是低版本的已汉化文件或低版本的方案文件。　　特别注意的是，当利用低版本已汉化文件资源时，需要新旧两个版本的资源结构一样，否则导入的资源包括翻译字串、控件等都将产生错乱。『 学习任务』　　汉化目标：请分别使用Passolo 和 Sisulizer 利用旧版资源将示例软件升级汉化　　 点击下载示例软件『操作流程』Hidden('ysgocjrh5s')　　1.Passolo 升级汉化　　1).根据 Passolo 汉化三步曲分别设置方案、创建翻译字串列表。　　(1).利用&ldquo;资源重用&rdquo;方式升级汉化标准资源　　点击菜单栏&ldquo;字串列表&rdquo;－&ldquo;资源重用&rdquo;选项，弹出对话框，设置应用对象－&ldquo;翻译列表&rdquo;，在&ldquo;读取数据从&rdquo;后选择低版本方案文件，完成后点击&ldquo;确定&rdquo;，Passolo 自动将已翻译数据传送到新版本中...　　　　　　　　(2)利用&ldquo;校准&rdquo;方式升级汉化标准资源　　点击菜单栏&ldquo;字串列表&rdquo;－&ldquo;扫描目标文件(校准)&rdquo;选项，弹出对话框，&ldquo;校准来源&rdquo;选择已经汉化的低版本文件，其他参数可以根据需要设置，如：是否验证被修改的字串等。　　　　设置完毕，点击&ldquo;确定&rdquo;，Passolo 自动提取已翻译数据并应用到新版本中。　　　　2.Sisulizer 升级汉化　　Sisulizer升级汉化标准资源，主要利用&ldquo;导入&rdquo;功能。　　　　1)导入低版本方案文件－在导入向导中选择低版本方案文件，&ldquo;下一步&rdquo;：　　　　导入方法建议选择&ldquo;先上下文后值&rdquo;，覆盖方法根据翻译情况而定。　　　　　　完毕，Sisulizer 的状态栏会显示导入翻译信息：　　　　2).导入低版本已汉化文件　　在&ldquo;导入向导&rdquo;中选择低版本已汉化文件：　　　　　　导入选项，根据需要设置，当然可以使用默认值。　　　　完毕，Sisulizer 自动扫描低版本已汉化文件中的翻译数据，并导入到新版本中　　
『配套视频』『参考汉化』　　 点击下载示例软件　]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/690-1259754354.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Wed, 02 Dec 2009 19:45:54 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－标准资源汉化之Passolo篇]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『Passolo 简介』　　Passolo 是目前世界上最流行的软件本地化专业工具之一。它支持众多文件格式，包括可执行程序文件、资源文件和基于 XML 的文件。文本可以被翻译为多种语言，包括亚洲语系（Unicode 码）以及书写方式为从右向左的语言，比如希伯来语和阿拉伯语。　　Passolo 包含多种所见即所得（WYSIWYG）编辑器来处理软件的用户界面，包括对话框、菜单、位图、图标和指针编辑器。用户界面的处理非常安全，绝对不会意外删除或者改变现有的元素或结构。　　官方网站：http://www.passolo.com　　使用 Passolo 汉化软件标准资源三步曲：　　1).方案设置　　2).创建翻译字串列表　　3).生成目标文件『学习任务』　　汉化目标：请用 Passolo 汉化示例软件的标准资源。　　 下载示例文件『操作流程』　　1.三步曲之一－方案设置，即设置方案属性，包括源文件、目标语言属性等　　　　(1)&ldquo;添加源文件&rdquo;，Passolo自动选择合适的解析器解析待汉化的程序，如果解析器选择不当，可手动调整，其他源文件属性如下图所示：　　　　(2).&ldquo;添加语言&rdquo;即添加目标语言，简体中文(代码页为936)，字体属性为&ldquo;宋体，9(磅)&rdquo;。注意字符集(Charset)如果不是中文的GB2312，请点&ldquo;选择&rdquo;后在弹出对话框选择Chinese_GB2312字符集，此选项关系着由 Delphi 编写程序的语系问题，标准资源乱码问题可能源自于此。　　　　　　2.三步由之二－创建翻译字串列表，即创建英中对照字串列表，把菜单、对话框等资源中的对照字串一一列出。　　　　(1).在创建翻译字串列表前，可以目标语言栏点鼠标右键&ldquo;字串列表设置&rdquo;，可以修改目标文件的名称和路径。对于Delphi编写的程序，目标文件名后的扩展名为chs，而不是exe，故需要在chs后添加&ldquo;.exe&rdquo;。　　　　(2).在目标语言栏，双击即可创建翻译字串列表，此时弹出是否创建窗口，按下&ldquo;是&rdquo;按钮。　　　　(3).翻译字串。翻译的目标字串长度如长于原始字串时，一般可无视超长问题，直接翻译。　　　　汉化翻译过程中，遇到控件问题，可以随时调整，当选定控件周围出现六个方块点时，即可通过鼠标左键拖动操作。　　　　如果控件调整不当，可以位次通过&ldquo;布局&rdquo;－&ldquo;重置位置&rdquo;－&ldquo;选定的控件&rdquo;操作恢复到原始位置。　　　　对于不需要翻译的字串，可以点鼠标右键，直接点击&ldquo;验证翻译&rdquo;排除不译；对于不确定的翻译字串，可以设置不同状态，是如设为&ldquo;复审&rdquo;状态等。　　　　3.三步曲之三－生成目标文件。全部翻译完成后，可以点击&ldquo;字串列表&rdquo;－&ldquo;生成目标文件&rdquo;弹出&ldquo;生成目标&rdquo;窗口。　　　　　　当生成目标文件完成后，信息窗口会给出相应的提示，通过链接即可汉化生成的目标文件，测试即可。　　
『配套视频』
『参考汉化』　　 下载参考汉化文件 ]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/689-1259754022.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[系统教学]]></category>
 <pubDate><![CDATA[Wed, 02 Dec 2009 19:40:22 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－标准资源汉化之Sisulizer篇]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『Sisulizer 简介』　　Sisulizer 是一款软件本地化工具，能提供对绝大多数应用程序的良好支持，还支持对各种源代码文件、网页的本地化。　　使用 Sisulizer 汉化标准资源三步曲：　　1).扫描(Scan)－根据工程向导添加待汉化程序，Sisulizer自动扫描程序并定位所有的文本；　　2).翻译(Translate)－使用 Sisulizer 的可视化编辑器翻译文本，同时可以调整窗体的字体和控件属性；　　3).构建(Build)－构建选定语言文件，创建本地化版本。　　sisulizer 的官方网址：http://www.sisulizer.com『学习任务』　　汉化目标：使用 Sisulizer 汉化示例软件的标准资源(PS：非标(unicode)已汉化)　　 下载示例文件『操作流程』　　1.运行 Sisulizer，&ldquo;文件&rdquo;－&ldquo;新建&rdquo;弹出工程向导，依次选择&ldquo;本地化一个或多个文件&rdquo;－&ldquo;源文件(即选择待汉化的文件)&rdquo;－&ldquo;文件类型&rdquo;(Sisulizer自动识别，如果识别不正确，请手动选择)－&ldquo;本地化的资源&rdquo;(默认)－&ldquo;Windows 二进制文件&rdquo;(默认)－&ldquo;选择语言&rdquo;(中文,简体)，最后点击&ldquo;完成&rdquo;。　　　　2.三步曲之一－扫描　　步骤1完成后，Sisulizer 自动扫描待汉化的文件，并在窗口左侧上方列出资源；右侧上方为资源预览窗口，可以实时预览窗体和菜单等资源；预览窗口的下方为翻译工作区，文本对照翻译可直接&ldquo;中文,简体&rdquo;栏下方输入；最下方是状态栏，可以实时显示当作汉化操作的提示信息。　　　　3.三步曲之二－翻译　　选择需汉化翻译的资源，在翻译区直接翻译，如本示例软件的&ldquo;对话框&rdquo;资源，在翻译区&ldquo;中文,简体&rdquo;栏输入&ldquo;Calculate&rdquo;的中文翻译&ldquo;计算&rdquo;，依此类推完成翻译。汉化过程中，如有一些控件不足，还可以手动调整(控件周围显示6个黑点时即可调整)。　　　　注意：快捷键翻译成中文需用半角括号，且括号内及前后不需添加空格，如&ldquo;&amp;File&rdquo;的正确翻译法为&ldquo;文件(&amp;F)&rdquo;。　　全部翻译完成后，需要调整窗体的字体，因为Sisulizer默认把窗体的字体属性排除不考虑。&ldquo;工程&rdquo;－&ldquo;编辑源&rdquo;－源文件，弹出&ldquo;Windows 二进制源&rdquo;窗口，在&ldquo;排除类型&rdquo;标签把&ldquo;字体&rdquo;前的钩选去除。　　　　　　返回Sisulizer主界面，此时翻译区多了&ldquo;字体&rdquo;选项，选择窗体的字体标签，在&ldquo;中文,简体&rdquo;栏选择相应的字体名称和大小即可。汉化软件默认规定使用9磅(12像素)的宋体作为参考标准。　　　　当然，如果要将所有的字体都设置为&ldquo;宋体，9磅&rdquo;，可以在前面的&ldquo;Windows 二进制源&rdquo;窗口选择&ldquo;字体&rdquo;标签，在&ldquo;改变&rdquo;下拉列表选择&ldquo;总是&rdquo;，并将&ldquo;被使用的字体&rdquo;编辑修改为&ldquo;宋体，9磅&rdquo;。　　　　4.三步曲之三－构建　　标准资源全部汉化完成，点击菜单&ldquo;工程&rdquo;－&ldquo;构建选定的语言&rdquo;－目标文件　　　　5.生成的目标文件在源文件的zh(zh即简体中文)子目录下，测试即可....
『参考汉化』　　 下载参考汉化文件
『配套视频』
&nbsp;更多汉化视频，请访问www.raindy.org]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/688-1259190155.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[工具使用]]></category>
 <pubDate><![CDATA[Thu, 26 Nov 2009 07:02:35 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－非标汉化之点睛篇]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『非标简介』　　标准资源汉化后，在软件界面或调用信息时显示、但又不出现在上述标准资源中的字串多数属于非标资源。非标资源主要包括 ASCII 字串和 Unicode 字串两大类，其中 VB 字串、 Delphi 字串又是 ASCII 字串中比较特殊的两类字串。　　非标资源无法进行可视化汉化操作，需要专门工具提取后替换回写到程序中。　　非标的主汉化工具有&ldquo;点睛字符替换器&rdquo;(简称&ldquo;点睛&rdquo;)、CXA、Athena-A、StringManager，辅助工具有&ldquo;灵便汉化编辑器&rdquo;、LoveString等，其中&ldquo;点睛字符替换器+灵便汉化编辑器&rdquo;是汉化非的经典组合。『点睛简介』　　点睛字符替换器(OverNimble Localize Plus)主要用于非标准资源的汉化，其主要特点有：支持多种编译程序的字符串及文本格式的字符串等的提取及替换；支持字典处理功能，方便版本升级；支持多语言版。　　灵便汉化编辑器，用于辅助非标汉化，主要特点：支持&ldquo;导出/导入&rdquo;功能；内置字典处理器，方便利用字典升级翻译；可以根据状态分组显示字串便于复查，也可以按编码排序字串。　　Raindy 注：点睛仅限于提取 PE 文件和文本文件，有时候点睛会漏提或提取不到字串，此时可以通过 CXA 弥补不足或UltraEdit来补漏。『学习任务』　　汉化目标：使用&ldquo;点睛＋灵便&rdquo;组合汉化示例软件的非标资源(PS:标准资源已汉化)　　 下载示例文件(软件与CXA的示例软件相同，但汉化结果有所区别)『操作流程』　　1.运行点睛，在&ldquo;选项&rdquo;设置参数，将灵便汉化编辑器的主程序设置为&ldquo;点睛&rdquo;的外部编辑器，建议将ACSCII和Unicode的最大字符数设置大此，其他参数可使用默认值。Raindy　注：灵便主程序名称因版本而异，本版 0.16b1为lxHHED.exe)。　　　　2.点睛默认查找ASCII字串，在下图的&ldquo;...&rdquo;按钮中添加程序文件，对照文件名由点睛字符生成，扩展名的&ldquo;a&rdquo;说明是ASCII字串，点击&ldquo;查找ASCII&rdquo;按钮自动查找程序文件中的ASCII字串。　　　　3.查找结束后，弹出&ldquo;查找结束！&rdquo;对话框，&ldquo;确定&rdquo;。点&ldquo;外部编辑器&rdquo;即可打开灵便汉化编辑器，在字串查看器，可以将不需要翻译的字串状态标记为&ldquo;不译&rdquo;，排除在翻译范围。　　　　　　　　标记完毕，可以在菜单栏&ldquo;查看&rdquo;－&ldquo;按状态分组&rdquo;或直接按F5快捷键，将不同状态的字串区分开来。　　4.翻译字符串，注意翻译字串长度不要超过原始字串长度，灵便右下角给出了字串度长度值，前者为原字串长度，后者为翻译字串长度。　　　　5.翻译完成后，保存文件，返回点睛主界面，选择&ldquo;替换&rdquo;菜单－&ldquo;替换字串&rdquo;，点睛默认选择00填充。如果个人程序00填充出错，可选择&ldquo;多余补空格&rdquo;选项，即使用20填充。　　　　选择完毕，按下&ldquo;替换字串&rdquo;按钮，点睛字符将翻译字串替换掉原始字串并完成回写操作。当替换完成后，会自动弹出&ldquo;替换成功&rdquo;的提示，并自动生成bak的备份文件。如果替换不当，可以通过备份文件重新操作，直接成功！　　　　6.此时，可以测试替换ASCII字串后的程序是否正常，包括程序和界面显示。　　　　7.下图中的&ldquo;移除选定文件&rdquo;后多余位图被自动截断不显示，即第5步中的0x00填充的结果。　　　　可以与 http://www.raindy.org/blog/article.asp?id=61&nbsp;CXA 汉化非标结果作个比较。
『配套视频』
『参考汉化』　　 下载参考汉化文件]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/687-1259049531.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[非标汉化]]></category>
 <pubDate><![CDATA[Tue, 24 Nov 2009 15:58:51 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－初识资源]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『资源简介』　　软件界面上的各种文字、图像、图标等，在编程的时候根据特定的格式分门别类地存放在软件里面，这些特定的格式就叫&ldquo;资源&rdquo;(Resource)。软件资源分为标准资源和非标准资源(简称非标)，标准资源通常可以通过PE类资源查看工具(如：PE Explorer、ResScope 等)可视化查看编辑(VB除外)，而非标目前还无法实现可视化预览。　　特别注意的是VB 程序资源比较特殊，上述分类概念不适用，但汉化人一般把 VB 窗体汉化器等提取的窗体资源称为标准资源，而通过点睛字符替换器提取的 VB 字串、Unicode 字串和 ASCII 字串均称为非标。 　　　　常见的标准资源通常有Bitmap(位图)、Menu(菜单)、Dialog(对话框)、String(字符串)、RCData(RC-数据)、Cursor(光标)、Accelerator(加速器)、Icon(图标)、Version(版本)、Toolbar(工具栏)、Form(窗体)，其中RC-data多见于Delphi程序中，Form多见于VB程序中。　　非标资源主要包括ASCII字串、Unicode字串两大类。标准资源汉化后，在软件界面或调用信息时显示、但又不出现在上述标准资源中的字串多数属于非标资源。『汉化资源分布』　　由于编写软件所使用的编程工具不同，软件中的汉化资源发布位置也不尽相同，常见如下：　　1. VC 类标准资源　　由 Microsoft Visual C++ 编写，汉化资源一般分布于 Menu、Dialog、String 等；　　2.Delphi 类标准资源　　由 Borland Delphi 编写，汉化资源一般分布在 Rcdata 和 String 中；　　3.VB 类标准资源　由 Microsoft Visual Basic 编写，汉化资源一般出现在 Form 窗体中；　　　3.非标资源　 Unicode 字串和ASCII 字串，后者又可细分为 VB 字串、 Delphi 字串和其他 ASCII 字串。非标资源不出现标准资源中，需要专门的工具才能提取到。　　4.语言文件　一类特殊的文件，扩展名随作者定，多数为文本格式，常见的文件类型有 *.ini、*.lng、*.dll，语言文件根据不同软件，分布的位置不定，有的在安装目录根目录下，有的语言文件夹中(如：language、Lang、Lan等)。　　详见本人2006年写的这篇文章：http://teach.hanzify.org/article/581-1145890624『学习任务』　　汉化目标：请列出示例文件中的资源类型及汉化资源分布　　 下载示例文件『参考答案』　　详见本人Blog：http://www.raindy.org/blog/article.asp?id=64]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/686-1258938872.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[特殊汉化]]></category>
 <pubDate><![CDATA[Mon, 23 Nov 2009 09:14:32 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－特殊汉化之位图汉化]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『位图汉化简介』　　位图汉化是一类很特殊的汉化，软件界面中的文字不是文本字串的形式，而是嵌在图像文件中，以位图资源的形式存在，现有的汉化工具无法直接对其进行可视化提取汉化。　　常见的位图汉化有两类，一类是独立资源形式，另一类是内嵌窗体形式，后者多见于 Delphi 编写的程序。『位图汉化思路』　　常见位图汉化方法：将相应的位图文件导出，经图像处理后，再导入软件中替换掉原位图文件。『相关工具』　　1).Reshacker 或 ResScope 用于导出或导入位图文件；　　2).Photoshop 或 Fireworks 用于处理位图文件；　　3).Sisulizer 标准汉化主工具，此处用于内嵌位图文件的替换。 『学习任务』　　汉化目标1：请将示例1中的位图资源145的&ldquo;Click to learn more&rdquo;汉化， 下载示例1文件　　汉化目标2：请将示例2中的RC-data中的TFSPLASH和TFRAYNOTIFY两个窗体内嵌的位图替换掉， 下载示例2文件『操作流程』Hidden('hnjvc9p5rp')　　汉化任务1：------------------------------------------------　　1.在 ResSope中打开示例1的程序文件，在左侧资源栏展开Bitmap位图，选中145标签后，返回&ldquo;文件&rdquo;菜单选择&ldquo;导出资源&rdquo;，以同样名称保存(即：145.bmp)　　　　2.打开处理软件Fireworks(简称FW)或Photoshop(简称PS)，选择&ldquo;选取框&rdquo;工具，在&ldquo;Click to learn more&rdquo;附近选取空白处，此时按下Ctr+Shift+Alt组合键不放，托动选取框向文字部分，直接覆盖完毕，换上文字工具，输入相应文字，最后保存位图。　　　　3.返回 ResScop 界面，选中145位图标签后，在&ldquo;文件&rdquo;菜单中&ldquo;导入资源&rdquo;，选择处理好的位图替换即可，最后保存ResScope。　　注：步骤2的图像处理方法比较适合渐变背景的图像文件，复杂背景则需要更高的图像处理技术。　　汉化任务2：------------------------------------------------　　1.运行主汉化工具 Sisulizer，根据工程向导一一操作完毕，依次点击&ldquo;工程&rdquo;－&ldquo;编辑源&rdquo;－选择源文件后，弹出Delphi源窗口，选择&ldquo;排除类型&rdquo;标签，将已被排除类型中的&ldquo;图片&rdquo;取消选择，确定。　　　　2.返回Sisulizer主界面，按下F5快捷键&ldquo;扫描更改&rdquo;(也可以从&ldquo;工程&rdquo;菜单下点&ldquo;扫描更改&rdquo;)，此时被排除掉的图片全部恢复显示出来。　　　　3.选择待替换的位图文件，点击鼠标右键－&ldquo;翻译&rdquo;－&ldquo;保存原文数据&rdquo;，将位图导出，经图像处理后，同样鼠标右键点击&ldquo;翻译&rdquo;－&ldquo;载入已翻译的数据&rdquo;即可完成替换位图。　　　　4.当然，替换位图也可以这样操作，在目标语言栏，点击&ldquo;...&rdquo;按钮，弹出连接图片对话框，选择已处理好的图片即可。　　
『配套视频』独立位图：　

内嵌位图：

『下载视频』(请用下载工具下载) 下载配套视频1&nbsp;　　 check('Action.asp?action=type1&mainurl=http%3A%2F%2Fwww%2Eraindy%2Eorg%2FHan%2FVideo%2F019BMP2%2Eswf&main=%E4%B8%8B%E8%BD%BD%E9%85%8D%E5%A5%97%E8%A7%86%E9%A2%911','mdown_xqv4vrgfsp','mdown_xqv4vrgfsp'); 下载配套视频2]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/685-1258938737.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[特殊汉化]]></category>
 <pubDate><![CDATA[Mon, 23 Nov 2009 09:12:17 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－Passolo 解析规则应用]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『Passolo 简介』　　Passolo 是目前世界上最流行的软件本地化专业工具之一。它支持众多文件格式，包括可执行程序文件、资源文件和基于 XML 的文件。　　Passolo 之所以强大，主要一个原因是它的解析器，可以自定义解析规则用来解析各种特殊格式的对象。
　　本例示例的 English.lan 文件是软件 Cleanse Uninstaller Pro 的语言文件，其内容格式大致如下：.....　　frmmain-Refresh List　　frmmain-Large Icons　　frmmain-Details　　frmmain-Show info panel　　frmmain-Filter　　frmmain-List View　　frmmain-Delete Entry　　frmmain-Exit....　　　　其中的 - 号后的单词(红色标记)是我们要提取翻译的对象，如：Exit 等，用 Passolo 默认的解析器无法正确解析，故此时需要自定义解析规则来提取目标文字。　　 点击下载示例文件　　『学习任务』　　请写出该示例文件的自定义解析规则　　　　下面我们就来学习一下如何利用 Passolo 自定义解析规则功能来汉化这个特定格式的文件内容。　　『操作流程』　　1.启动 Passolo 主程序，依次从菜单&ldquo;工具&rdquo;－&ldquo;插件&rdquo;－&ldquo;解析器&rdquo;－文本文件解析器－&ldquo;设置&rdquo;，弹出&ldquo;文本解析器规则定义&rdquo;对话框，如下图所示：　　　　　　2.选择&ldquo;自定义规则&rdquo;－&ldquo;添加新规则&rdquo;，规则名称输入 Cleanse Uninstaller_LangFile(*.lan) 后&ldquo;确定&rdquo;返回原对话框，在&ldquo;用于这些文件类型&rdquo;上输入自定义规则应用的文件类型(扩展名)，本例即 lan 。　　　　　　3.创建自定义规则，由于本例中的内容为字串，&ldquo;添加字串标签&rdquo;，设置字串开始为 - ，结尾为行尾(行尾符号为&lt;EOL&gt;)，&ldquo;确定&rdquo;。对于更加复杂的内容，可以使用正则表达式：　　　　　　4.验证自定义规则是否正确，可点击&ldquo;预览&rdquo;按钮，在展开的窗体中加载示例语言文件(English.lan)预览，选中的字串会以黄色突出显示，是否正解解析一目了然。　　　　　　5.保存自定义解析规则，关闭&ldquo;插件&rdquo;对话框，后面参考 Passolo 汉化三步曲汉化翻译，此处略过不再赘述，特别注意的是 Passolo 会自动优先解析自定义规则，如果无法正确选择自定义规则，请手动按如下顺序操作：&ldquo;源文件&rdquo;－&ldquo;属性&rdquo;－&ldquo;选项&rdquo;－&ldquo;来源选项&rdquo;－&ldquo;使用规则&rdquo;手动选择自定义的解析规则。　　　　　　『参考答案』 点击下载此文件check('Action.asp?action=type1&mainurl=attachments%2Fmonth%5F0911%2FHanMe010%5FKey%2Erar&main=%E7%82%B9%E5%87%BB%E4%B8%8B%E8%BD%BD%E6%AD%A4%E6%96%87%E4%BB%B6','mdown_hpkny7ygvj','mdown_hpkny7ygvj');　　『配套视频』

更多《跟我学汉化》系列陆续发布，如果任何问题，请访问Blog给我留言，谢谢！ www.raindy.org&nbsp;



]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/682-1258938606.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[工具使用]]></category>
 <pubDate><![CDATA[Mon, 23 Nov 2009 09:10:06 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－特殊汉化之VBLocalize]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『VB 资源简介』　　现阶段的汉化工具对由 Microsoft Visual Basic (VB)编写的程序无法实现界面可视化编辑。　　VB 软件资源一般都在各窗体(Form)当中，是一类很特殊的资源，我们一般把 VB 窗体汉化器等提取的窗体资源称为标准资源，而点睛字符替换器提取的 VB 字串、Unicode 字符和 ASCII 字符称为非标准资源(简称非标)。 
『VB 汉化工具』　　　　　　-*- 窗体汉化：点睛 VB窗体汉化器 或 GetVBRes 　　　　　　-*- 非标汉化：点睛字体器替换器　　　　　　-*- 推荐工具：VBLocalize(类似于Radialix，既可以汉化标准资源，也可以汉化非标) 　

&nbsp;
　　VBLocalize 是汉化 VB 程序的利器，通过反编译VB程序，有效提取程序资源，并对其编辑，其特性如下：　　1、与 Passolo 类似的界面，并通过建立工程来实现 vb 程序的汉化，使您可以随时进行调整；　　2、可以解析 VB 自身所有控件，并进行对其进行编辑(包括字体的修改，背景颜色的修改，图片的保存和替换等)和导出(包括工程文件和图片文件)；　　3、可导入常用格式字典来翻译字符串，并将所得工程的字典导出，方便以后程序的汉化；　　4.下载地址：http://www.hanzify.org/article/List&amp;ID=597

&nbsp;
『VB 汉化要点』　　VB程序汉化非常重要的一点，就是在翻译的字串长度必须保持平衡状态，即翻译后的字串长度必须等于原始的长度。当翻译后的字串长度小于原始的长度时，可以通过空格填充；当翻译后的字串长度超过原始的长度时，需要添加16进制字节，而适当的位置需要删除相应长度的16进制字节。　　使用&ldquo;点睛 VB窗体汉化器&rdquo;或&ldquo;GetVBRes&rdquo;需要充分考虑平衡问题，而 VBlocalize 则不需要，因为程序会自动处理。 
『 学习任务』　　　　　　汉化目标：使用 VBlocalize 汉化示例文件　　 下载示例文件
『操作流程』　　　　1.运行 VBlocalize ，新建方案，分别设置方案名称、方案路径、源文件及目标文件路径。　　　　　2.VBlocalize自动提取程序中的字符串，左上角的&ldquo;工程&rdquo;窗口显示了程序的资源；左下角的&ldquo;输出&rdquo;窗口则给出了字符串统计信息；右上角为翻译区，显示了所有对照的字符串；右下角为工作区，选择相应字符串后，在工作区下角的&ldquo;文本&rdquo;标签栏即可对待翻译字符串进行一一翻译。　　　　若要修改窗体的属性，如字体属性时，可以点击&ldquo;属性&rdquo;标签，在字体名称后的&ldquo;...&rdquo;按钮选择相应字体：　　　　3.VBLocalize支持&ldquo;自动翻译&rdquo;功能，支持多种多种格式的字典，可以在菜单栏&ldquo;字典&rdquo;添加不同格式的字典。　　　　添加字典完毕，返回选择菜单栏&ldquo;字串列表&rdquo;下的&ldquo;自动翻译&rdquo;功能，即可自动完成翻译，主界面的输出窗口会给出导入翻译信息。字串翻译全部完成后，&ldquo;生成目标文件&rdquo;即可生成汉化文件。　　
　　4.VBlocalize还支持导出字典功能，可以支持包括Passolo术语表、双行对照翻译文本等多种格式的字典文件：
　　『参考文件』 下载参考汉化程序
　　『配套视频』&nbsp;　
更多《跟我学汉化》系列陆续发布，如果任何问题，请访问Blog给我留言，谢谢！ www.raindy.org&nbsp;]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/681-1258938581.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[VB汉化]]></category>
 <pubDate><![CDATA[Mon, 23 Nov 2009 09:09:41 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－非标汉化之 CXA 篇]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『非标简介』　　汉化标准资源后，在软件界面或调用信息时显示，但又不出现在String、Rcdata 等标准资源中的字串多数属于非标资源，非标资源无法进行可视化汉化操作，需要专门工具提取后替换回写到程序中。『CXA 简介』　　CXA 是一款简单易用的字符串抓取替换工具，可以把英文程序中非标准资源的 ASCII 和 Unicode 字符迅速查找出来并经过翻译成可生成中文程序。　　CXA 在功能上，不输于点睛字符器替换器(简称点睛)，点睛限于提取 PE 文件和文本文件，而CXA则不限，两者各有优缺点，通常点睛漏提的字串或无法提取的字串可以通过 CXA 弥补不足。『学习任务』　　汉化目标：使用 CXA 汉化示例软件的非标资源(PS:标准资源已汉化)　　 下载示例文件『操作流程』　　1.运行 CXA，设置 CXA 参数，CXA 默认使用 Windows 自带的记事本为编辑器，可以根据个人习惯设置编辑工具，其他建议使用默认参数：　　　　2.通过&ldquo;浏览&rdquo;载入待汉化的程序，方式根据非标类型选择，本例软件为 VC++ 编写(非VB或Delphi)，为ASCII字串，故&ldquo;方式&rdquo;标签处选择&ldquo;ASCII(全部)&rdquo;，&ldquo;自动翻译&rdquo;强烈建议不要使用，因为容易翻译不该翻译的内容导致非标汉化过度。步骤1设置完毕，&ldquo;确定&rdquo;跳转到到&ldquo;步骤2&rdquo;：　　　　3.点击&ldquo;编辑原始英文文本文件&rdquo;打开 Webtool.exe.asc 文件(提取后未翻译)，根据经验移除一些无用的字串，如图示的文件头等信息即可删除，完毕保存文件，&ldquo;确定&rdquo;转到&ldquo;步骤4 &rdquo;：　　　　　　4.编辑翻译文件 Webtool.exe.tra ，在CXA中以三行显示，第一行为行数标记，第二行为原始字串，第三行为待翻译字串，我们要做的就是翻译第三行的字串，注意字串翻译后的长度不要超过原始长度！　　　　　　5.完整编辑翻译文件后，保存，返回步骤4，进行替换操作，选择填补方式后&ldquo;确定&rdquo;。　　　　注意在 CXA 中填补方式使用0x20填充，即以空格填补翻译后字串小于原始长度留下的空位置，而不推荐使用0x00填充，因为容易造成字串截断损坏导致程序异常。　　CXA 默认使用0x20填充，而点睛默认使用0x00填充，这是两者的不同之一。　　6.提示是否更改程序字体，&ldquo;是&rdquo;，CXA回写翻译字串后自动转换成中文程序，此时，可以&ldquo;把新程序改名为应用程序&rdquo;(即将汉化后的程序名称用原程序名称命名，而同时原程序名称会自动添加.old 标记)　　　　　　此时即可测试汉化程序　　7.下图中的&ldquo;移除选定文件&rdquo;后仍有许多空位置，即第5步中的0x20填充的结果；换成0x00填充，则空位置被自动截断不显示，更为美观。　　在保证程序正常运行的前提下，可以尝试使用0x00填充。　　
『配套视频』『参考汉化』　　 下载参考汉化文件如有问题，请给我留言，谢谢！ www.raindy.org]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/683-1258938559.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[非标汉化]]></category>
 <pubDate><![CDATA[Mon, 23 Nov 2009 09:09:19 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[跟我学汉化－乾坤大挪移]]></title>
 <description><![CDATA[作者：Raindy　网站：www.raindy.org
『非标挪移』　　我们在汉化非标字串过程中，经常遇到翻译后的字串长度必须超过原始字串长度的情形，如：当「OK」必须翻译为「确定」时，长度从原来的2个字节变为4个字节。如果直接翻译，可能导致界面无法正常显示(超长部分显示不出来)或程序无法正常运行。在这种情况下，则需要通过大挪移操作来解决问题。因武侠小说中的&ldquo;乾坤大挪移&rdquo;能将阴阳二气挪移转换于不知不觉之间，非标大挪移操作借之冠名，故汉化人戏称之为&ldquo;乾坤大挪移&rdquo;。　　特别注意的是，VB非标字串如遇长度超出，无需进行挪移操作，只需要保持字节平衡，可以通过UltraEdit&ldquo;16进制插入/删除&rdquo;字节，超长的位置添加字节后直接翻译，而相应地要在适当的位置删除同样字节数以保持平衡。对于 Delphi 非标字串在挪移操作时，需要记得修改原字串前的长度标识符。如果字串后有多余00组位置可用，直接翻译即可，无需挪移，但同时也要修改长度标识符。『挪移工具』　　16进制编辑器(UltralEdit)+偏移量转换器(集成在点睛字符替换器中，用来计算实偏移值对应的代码)。『挪移关键』　　1.获得原字串实偏移值对应的代码(以下称为代码1)。　　2.选择合适位置，直接输入翻译字串，并得到翻译后的字串实偏移值对应的代码(以下称为代码2)；　　3.将代码2替换掉代码1　　注意：合适位置条件－连续00组比较多的空白处，且该00组所在区段必须和原字串的区段一致。『学习任务』　　　　汉化目标：将上图中的「OK:」挪移操作后显示为&ldquo;「进度：」&rdquo;，长度从3个字节变为6个字节。　　 下载示例文件『操作流程』　　1.依次点击&ldquo;点睛字符替换器&rdquo;－&ldquo;工具&rdquo;－&ldquo;偏移量转换器&rdquo;，按下&ldquo;...&rdquo;按钮载入待操作的文件，如下图：　　　　2.打开UE，载入待挪移的程序文件，搜索原字串&ldquo;OK:&rdquo;，原字串非为ASCII字串，故选中&ldquo;查找 ASCII 字串&rdquo;，同时为提高搜索效率，排除杂项，可选中&ldquo;区分大小写&rdquo;。　　　　3.将光标定在原字串的首字母&ldquo;O&rdquo;，记下左下方的实偏移值：1eb3c(注意不含有字母 H)，并将其复制到偏移量转换器，得到对应的代码 3CEB4100(以下简称为代码1)。　　　　　　4.在原字串附近搜索连续的00组的空白位置，直接以翻译目标字串，以同样方式将光标定位在首字的前半部分，即&ldquo;进&rdquo;字的前半部分(因为中文为双字节，故英文的首字母相当于中文首字的前半部)，同是记下左下角的实偏移值21480，并将其复制到偏移量转换器，得到对应代码：80144200(简称为代码2)。　　　　　　5.返回UE，搜索代码1　　　　6.大挪移的操作就是用代码2替换掉代码1，替换完毕，保存文件。UE自动生成备份文件，若挪移不成功，可重新操作过，直到大功造成，可删除备份文件。　　　　7.测试挪移后的文件，大功造成，程序和界面都正常。　　『配套视频』『参考汉化』　　 下载参考汉化文件　　注：本人05年录制的乾坤大挪移视频(http://teach.hanzify.org/article/226-1108656000)原理同上是一样的，如有问题，请访问 www.raindy.org&nbsp;。]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/684-1258938538.html]]></link>
 <author><![CDATA[raindy]]></author>
 <category><![CDATA[非标汉化]]></category>
 <pubDate><![CDATA[Mon, 23 Nov 2009 09:08:58 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[.NET 程序汉化实例]]></title>
 <description><![CDATA[转自本人的博客文章，主要是为新人展示一个较完整的汉化流程，文中采用的 .Net 汉化只是一种折中方案，希望读者勿失望。若想获得更好的浏览效果，请访问本人博客阅读原文 http://3smile.org.ru序言 本文并非高深的技术文章，只是将一个.Net 程序的完整汉化过程做了说明，文中用到的主要工具有 Radialix、SDL Passolo 2009 、DotNet Helper 、Beyond Compare 以及 EditPlus 等，探讨了以上工具的综合运用。示例软件Subtitle Edit 是一个开源免费的字幕处理软件，开发语言为C#，虽然作者提供了源代码下载，但一则可能是系统环境原因，所供源码包本人未能成功编译；另外感觉汉化源代码还不如通过反编译汉化来的方便。Radialix 初步汉化不得不说 Radialix 真得很牛X，尽管其稳定性有待改善，但对汉化人员仍提供了很大的支援。Radialix 可以直接读取 .Net 程序的资源。 新建一个 Subtitle Edit 本地化方案： 

可以勾选&quot;提取非标资源&quot;并在目标设置中选择&quot;创建本地化文件&quot;。 翻译标准资源没有多少技巧。需要说明的是，在 Radialix 中对窗体控件的调整，有时显示的大小与位置并不一定与目标文件的相一致： 

当出现此问题时，可以先选中该控件，并切换到资源标签进行检查： 

这时我们需要做的是，在资源标签内的翻译部分直接修改出预期的数值，而不必考虑工具栏上显示的数值。 利用 Radialix 翻译非标资源，与翻译标准的字符串资源一样，只是非标资源的初始状态为只读，需要进行切换，可利用鼠标右键菜单或快捷键 Ctrl＋K： 

Radialix 还带有 Google 和微软强大的联机翻译引擎，对于软件中的词句，机器翻译给出译文的准确度有时高得惊人： 

但不能简单地利用机器翻译来进行软件汉化，用户肯定会抱怨你的行为，甚至不会再去看你的其他作品。 翻译完毕所有词句，就可以编译生成目标文件，快捷键为 Ctrl+F9。如果用 Radialix 汉化的是其他软件且运气较好，到这一步基本就结束了。但对本例来说这只是个开始，原因是要么你生成目标文件时会报错，要么是所编译出来的文件有功能缺失。看到这里你肯定会抱怨前面岂不是白忙了，不过还是请你耐心往下看，因为本文中 Radialix 只作为辅助工具。接下来我们从 Radialix 中导出翻译词典，采用术语文件格式(*.glo)，为后续工作做准备： 

由于前面我已对每个翻译语句做了复查验证(快捷键 Ctrl+Q)，所以在向导中只导出已验证的翻译即可。剩下的就交给其他软件来处理了。 DotNet Helper 反编译DotNet Helper 是汉化新世纪会员 tracky 开发的支持编译/反编译 .Net 的工具，界面直观操作方便，免去了输入命令行的麻烦。拖放要反编译的程序文件到 DotNet Helper 上： 

本例中编译 Subtitle Edit 的 Framework 的版本就是 2.0 的，且没有加密混淆等问题，所以无需多余设置，直接点击反编译按钮即可。生成的文件很多，但我们主要处理的是扩展名为 .il 的文件。 另外再啰嗦一下，如果你使用的是 XP 以前的系统，至此你应该确定系统已安装了.NET Framework 2.0 以上的版本，否则请去官方下载安装：http://www.microsoft.com/downloads/details.aspx?FamilyID=zh-cnPassolo 处理 .il 文件Passolo 配合强大的资源解析器可以处理各种特殊格式的文件。为了使 Passolo 能够正确提取 .il 文件中的字符串，我们需要对其进行设置。以空白工作空间方式启动 Passolo，点击工具菜单选择插件选项，弹出插件管理对话框，如下图： 

在解析器标签中选择加载文本文件解析器，再点击右侧设置按钮，弹出文本解析器规则定义对话框： 

世纪提供了.Net il 文件的解析规则，但不能解析上图中双行字符串，我们稍作修改即可解决。点击这里下载规则文件进行导入。 设置完毕，现在我们可以在 Passolo 中建立新方案，来正式处理先前反编译出的 .il 文件了。在添加源文件时，如果 Passolo 不能正确调用.Net il 解析规则，就需要手动指定： 

方案创建好，开始着手翻译。我们首先要加载从 Radialix 导出的术语文件(.glo)，在 Passolo 工具菜单下点击术语表选项，弹出术语表对话框： 

添加好术语，Passolo 中的操作比较轻松，只需在对应的翻译行上按快捷键 F8 （可以复选多行同时操作）就可以了。 有一点要说明的是，类似 Passolo 这种智能化的工具，会帮你自动翻译重复项，多数情况下是好事，但在本例中要注意：Subtitle Edit 存在字幕格式转换，一些标记、颜色、字体属性如 Bold 等，是不可翻译的，要根据上下文判断词所在位置，是界面还是字幕格式。最后将翻译好的方案生成目标文件。编译与&ldquo;非标&rdquo;处理 再次回到 DotNet Helper 中，为了方便操作，我们更改扩展名为 .res 的文件，使其与从 Passolo 中生成的目标文件名一致，如：SE.res 和 SE.il。拖放 SE.il 文件到 DotNet Helper 上进行编译，成功编译会闪现一个窗口，若眼力好可以看到单词 successfully： 

编译失败也闪现一个窗口，有着很醒目的 ***** 号： 

遇到错误不怕，编译器会提示错误所在的位置(对应 .il 文件)，上图中出错的原因是我正运行着先前编译好的程序，导致新编译输出的程序文件无法对其覆盖。要查看错误信息，可以先用 DotNet Helper 生成批处理文件，然后在命令行中运行即可。 现在我们来运行编译好的程序检查一下，发现很多按钮字符显示不全；在创建/添加行以及视觉同步面板中有未翻译的字符串：&quot;&lt; &frac12; sec&quot; 和&quot;&amp;&frac12; second back&quot;按钮。为了查明原因，可使用文本编辑器打开 SE.il 文件，这里我用的软件是 EditPlus。为了方便查看，先对其进行设置，点击 EditPlus 工具菜单选择&quot;首选项&quot;，弹出参数选择对话框：

设置完毕就可看到语法高亮显示了。接下来我们查找&quot;&lt; &frac12; sec&quot; 和&quot;&amp;&frac12; second back&quot;字符串，没有结果；继续搜索它们&quot;附近&quot;的字符串，如&quot;&lt; 3 秒&quot;： 

可以看出控件名称与字符串是一一对应的，很明显最下面红色框选的部分就是&quot;&lt; &frac12; sec&quot; ，只要将其替换为&quot;&lt; &frac12; 秒&quot;即可。不过我们最好去修改由 DotNet Helper 反编译出源 .il 文件的相应部分，因为 Passolo 生成新的目标文件时，我们还要重复上面的操作，不如直接将源文件中相应部分更改为 Passolo 可提取的字符串形式，交给 Passolo 处理。[提示一下：更改了源 .il 文件，需在 Passolo 方案中对源文件(英语)和目标文件(中文)进行创建/更新字符串操作，这样才能保证 Passolo 能提取已更改的字符串] 经过上述处理，进行二次编译，我们再来检查一下是否仍有未翻译的&ldquo;非标字符串&rdquo;，果然还有两处：一处是在行间跳转对话框；一处是在导入二进制字幕文件选择语言流的对话框。与先前不同的是这两处都是对话框而非单个的字符串，但是由 Radialix 编译生成的汉化文件，没有此问题。为了知道区别所在，用 DotNet Helper 将 Radialix 编译生成的汉化文件反编译到其他目录，复制其中的 .il 和 .res 文件到由英文原版反编译的目录中。也就是说我们移植了 Radialix 汉化版中 .il 文件与原英文版中的 .resources 和 .xml 文件构成了一个新的 .Net 资源集：

编译上图中的&rdquo;SE &ndash; 汉化版.il&rdquo;，得到的程序依然存在这两处未翻译的对话框。现在可以推测&ldquo;非标字符串&rdquo;不在 .il 文件中，而是在 .resources 文件中。启动 Radialix 创建本地化项目，源文件是 SubtitleCreator.ChooseLanguage.resources，立刻就看到了&ldquo;非标字符串&rdquo;：

翻译完毕，用生成的目标文件替换源文件，再次对 SE.il 文件进行编译，可以看到对话框已翻译了。同样的方式处理 Nikse.SubtitleEdit.Forms.GoToLine.resources 文件。控件调整与测试控件大小与位置的调整数不少，所以放在最后。调整前还必须再次确认程序没有任何功能缺失问题，例如有个独立的单词&ldquo;Dictionaries&rdquo;，我将其翻译为词典，结果导致 Subtitle Edit 的拼写检查功能丢失，出现这种问题要如何排错呢？学过编程的都知道有个二分法，可以借用到这里进行排错：在 Passolo 中对翻译状态列排序，使已翻译的行集中到一起，从上到下选择大概一半已翻译的行，然后按快捷键 Ctrl＋U 取消翻译，不要再做其他任何附加动作，立刻生成目标文件，编译输出可执行文件进行验证，这时就只有两种情况：一种是仍有错误，说明在 Passolo 中所选行没问题，那么我们可以先撤消取消翻译操作，再选择另一半已翻译行的一半重复刚才的操作；另一种是没错误，说明在 Passolo 中所选行包含了不可翻译的部分，那么我们只需在所选行中再选出一半继续进行验证&hellip;&hellip;重复以上操作几次很快就能找到错误所在位置。Radialix 中更方便，只需对容易出错的非标部分进行只读属性列排序，然后选择一半数量的非只读属性行再按快捷键 Ctrl＋K 切换只读属性，后面的验证操作就都一样了。现在开始调整控件的大小与位置。先来看一下 .il 文件中是如何描述的：

上图也是经过处理的，实际数据并未靠得那么近，不过只要注意画红线的部分就容易辨识了。另外以 0x 开头的数据是十六进制的，借助 Win 7 系统自带的计算器可以轻松地进行十进制和十六进制之间的转换。可以分两步调整图中的数值：第一步是粗调，将前面用 Radialix 汉化输出的文件反编译得到的&quot;SE &ndash; 汉化版.il&quot;与 Passolo 生成的目标文件&quot;SE.il&quot;进行比较，只更改数值部分，我们通常借助 Beyond Compare 来完成（现在手上没有&quot;SE &ndash; 汉化版.il&quot;文件，所以只能用&quot;SE.il&quot;与英文源 .il 文件的比较图来充数）；

接下来是精调，对于未达到预期效果的控件，可以用 EditPlus 打开 SE.il 文件进行手动调节。虽然麻烦但还是有参照的：打开先前的 Radialix 本地化方案，选中要参照调整的控件，切换到资源标签，就能看到控件的名称以及位置和大小等数据，这样改起来也相当快。更新维护更新汉化相对来说简单多了，打开先前的 Radialix 本地化方案，更改源文件为新版程序，然后按快捷键 F5 更新资源，我们就可以立刻知道新版程序有哪些变化：

接下来的操作都雷同就不细说了。至此我们完成了一个 .Net 程序的汉化。发布之前还是要尽可能地多测试，避免将重大错误呈现给用户。由于 Subtitle Edit 本为开源免费的绿色软件，所以加壳、打包等不属本文的讨论范围。以上是本人目前掌握的 .Net 程序汉化的一种折中方案，也许将来新版 Radialix 能彻底改变这种复杂的方式，或是诞生新工具给出更好的解决方案。希望朋友们也能分享自己经验，更希望耐心看完本文的你能够有所收获。]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/680-1256123137.html]]></link>
 <author><![CDATA[绿色汉化]]></author>
 <category><![CDATA[特殊汉化]]></category>
 <pubDate><![CDATA[Wed, 21 Oct 2009 19:05:37 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[Noise Ninja 汉化乱码的解决]]></title>
 <description><![CDATA[Noise Ninja 汉化遇到乱码问题。此软件由 QT 开发，以下修改方法可能通用。首先要做的事是找到导致乱码的原因，缩小范围，对症下药。试过修改字体的语系以及要翻译字符串的编码方式等等常见的解决乱码方法，都没有效果。那么只好对字符串的处理过程进行跟踪，看看是在哪个环节上出了问题。由于其需翻译内容全是非标，那么就以程序显示界面上的 &amp;File 这个字符串进行跟踪。用 Ollydbg 载入程序后先查找到 &amp;File 下断，记下字符串所在地址 006852D8。然后用步过 F8 和步入 F7 相互配合进行跟踪。这个过程需要极大的耐心。操作过程中注意寄存器的变化，特别是出现 ASCII &quot;&amp;File&quot; 的时候。原则是先用 F8 步过大体看看，再用 F7 步入进行跟踪。在可疑的地方下断以便跟踪。在经过 004D74A8 CALL NoiseNin.004D58E0 后我们发现，寄存器中的 ASCII &quot;&amp;File&quot; 消失了，这个地址很可疑，进入看看。小心按 F8 步过，发现一个循环对字符串进行了处理，看来十有八九找到地方了。既然我们怀疑这是处理字符串的地方，那么肯定不单单处理 &amp;File 这一个。那么就在这个调用的末尾下断，然后 F9 执行看看寄存器有没有什么变化。如上图中所示，Unicode ,我们的猜想基本已经被证实，而且就是那个循环进行的处理，那么问题就出在这个循环上。为了最终证实，对字符串的处理结果手动修改一下看看运行结果。EAX 中的 Unicode 字符串是由 EBX 传过来的，那么就在地址 004D593F 8BC3 MOV EAX,EBX 下断。重新加载程序，临时禁止 004D593F 断点，启用 00492075断点。按 F9 执行，再启用 004D593F 断点，按 F9 执行。程序被断下来了，在 EBX 上鼠标右击，查看地址的数据。数据中显示的是 Unicode ，但由于英文 UTF-8 和 Unicode 是一样的，在这里我们还需要进行排除。&amp;File Unicode 字节长度是 10 ，那么需要 5 个中文字。就用&ldquo;文文文文文&rdquo;来试试。用编码查询工具查出&ldquo;文文文文文&rdquo;Unicode 编码是 87658765876587658765 ，选择 &amp;File 并编辑二进制。临时禁用所有断点，按 F9 执行。很幸运，就是 Unicode 。但是为什么在程序中直接修改 &amp;File 运行则显示乱码呢？这一次再来跟踪一遍 &amp;File 已经汉化为 文件(&amp;F) 的程序。先运行到 00492075 ,再开启 004D593F 断点并执行到那里。查看 EBX 的数据，看到了吧，问题很明显，Noise Ninja 在这里转码出现了错误。本应该转成CEC4 BCFE 2800 2600 4600 2900 而程序却转成 CE00 C400 BC00 FE00 2800 2600 4600 2900 ，也就是双字节字符转错了。那个转码循环只是在 ASCI 码字符串的每个字节后面插入 00 来转的，英文字母这样转不会出错，但中文就完全不对了。问题找到了，那就来着手解决，要实现正确的转码，需要用到 MultiByteToWideChar 这个函数，先说说此函数各个参数的含义。第一个参数 CodePage ：代码页，简体中文取 3A8 ，也就是 936 。第二个参数 Options ：选项，一般取 0 值。第三个参数 StringToMap ：ANSI 字符串的地址。第四个参数 StringSize ：ANSI 字符串的长度，如果用 -1, 就表示是用 0 作为结束符的字符串。第五个参数 WideCharBuf ：转码后的字符串保存地址。取字符串长度时为 Null 。第六个个参数 WideBufSize ：注意是字符串的长度，也就是一个中文字是 1 ，而不是字符串的字节长度。用于取得字符串长度时为零。在这里我曾经走过弯路，刚开始用的是软件本身提供的长度，后来才发现，软件提供的长度是字节长度，而不是字符长度，导致显示的中文后面有乱码。在修改代码过程中，共用了两次 MultiByteToWideChar ，第一次用它来获得字符串的字符长度，第二次则是转码。由于是在程序代码间隙里找的空间，一个间隙往往不能一次放下所有代码，所以我的代码看上去有好多跳转，但那并不是必须的。因此下面我只写出必要的代码，你可以根据实际情况灵活运用。下图是修改前的代码：下图是修改后的两次调用 MultiByteToWideChar 代码，之所以用 Call 是为了省却维护堆栈平衡的麻烦。使用第一次 MultiByteToWideChar 获得字符串字符长度，其长度值保存到 EAX 中，其中寄存器要根据实际情况来设定，比如说我这里字符串地址是在 EDI ，而你的程序可能是在 EBX ：PUSH 0PUSH 0PUSH -1PUSH EDIPUSH 0PUSH 3A8CALL MultiByteToWideCharRETN第二次使用 MultiByteToWideChar 进行转码，寄存器的使用也是根据实际情况而定，转换后的字符串保存在 EBX：PUSH ESIPUSH EBXPUSH -1PUSH EDIPUSH 0PUSH 3A8CALL MultiByteToWideCharRETN再来看看最后一张图，两个 Call 之间怎么有一个 DEC EAX ，这是因为获得的字符串长度比实际长度长 1 ，所以这里减 1 。看看实际运行效果。文章中错误之处还请指正。
]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/679-1249034295.html]]></link>
 <author><![CDATA[海子]]></author>
 <category><![CDATA[特殊汉化]]></category>
 <pubDate><![CDATA[Fri, 31 Jul 2009 17:58:15 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[MultiByteToWideChar 一例乱码的解决]]></title>
 <description><![CDATA[正在汉化 iZotope Ozone 4 这个软件，但翻译后发现乱码。跟踪了一下，发现字符串经过 MultiByteToWideChar 这个函数后应该是由 ASCII 码转为 UNICODE，英文转换正常，而中文则转换为乱码。看了一下此函数的参数，如下图，栈顶是 CodePage ，也就是代码页，最后入栈：PUSH EBP ，发现其数值并不熟悉。打开注册表搜索 CodePage ，看到了我们熟悉的 GB2312 936 。把所有 MultiByteToWideChar 下断点跟踪了一下，把最后的代码页参数值都改成了 000003A8 。看看实际运行的结果，正常显示中文了。
]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/678-1245165791.html]]></link>
 <author><![CDATA[海子]]></author>
 <category><![CDATA[特殊汉化]]></category>
 <pubDate><![CDATA[Tue, 16 Jun 2009 23:23:11 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[一款软件的乱码处理 - 看二位高手的不同解决方案]]></title>
 <description><![CDATA[问题文件
wanfu的问题：
我汉化了一款VC软件，该软件有标准资源和Uncode和ASCII非标字符，我已修改了所有标准资源中的字体和语系为简体中文，但是修改主程序中的ASCII非标字符为简体中文时，结果在&ldquo;验证&rdquo;的列表框中显示乱码。我试图改为UFT-8和Uncode也没有成功。试图用OllyDBG修改，只找到与字体设置相关的CreateFontW模块，字符设置 CharSet = DEFAULT_CHARSET 应该不用改。
哪位高手可以帮助我？文件在此：&nbsp; &nbsp;LOOMConfig.rar ( 314.42k ) 下载次数: 20
问题所在
cao_cong的答复：
你这个是程序的转码问题。比如你汉化的验证列表框中的第一个&ldquo;添加&ldquo;&lt;%s&gt;&rdquo;标记将改变文档&ldquo;%s&rdquo;的格式和/或结构。&rdquo;，ASCII码是CCEDBCD3A1B03C25733EA1B1B1EABCC7BDABB8C4B1E4CEC4B5B5A1B02573A1B1B5C4B8F1CABDBACD2FBBF2BDE1B9B9A1A3，程序转换成MultiByte，成为CC00ED00BC00D300A100B0003C00250073003E00A100B100B100EA00BC00C700BD00AB00B800C400B100E400CE00C400B500B500A100B00025007300A100B100B500C400B800F100CA00BD00BA00CD002F00BB00F200BD00E100B900B900A100A300，而最后显示的应该是UNICODE，对应你的翻译最后应该显示的是UNICODE编码FB6DA0521C203C00250073003E001D200768B08B065C3965D853876563681C20250073001D2084763C680F5F8C542F001662D37E84670230，可程序没干这事，给你转换成MultiByte它就完事了。所以你英文显示正常，变成中文宽字符时肯定不正常了。貌似除了在程序中写转换字符的补丁代码外没啥更好的方法。贴个效果图：弄起来应该也比较麻烦。我有空的话就帮你搞一下，也对你那个老盖的工具比较感兴趣，想瞅瞅 

附加缩略图 
解决方案
restools的解决方案（1）
汇编不在行，所以打洞放代码的功夫就留待高人来实现了，我的方法很简单，作了个DLL，里面有个函数，然后让软件的处理变成调用我的DLL来处理。我还是喜欢这种方式，因为我不需要在软件中寻找合适位置放置合适代码，而且这需要很强的ASM代码整合能力，一不小心，可能引起异常（这里花的时间绝对不会少）。虽然这不是完美的实现方法，但是对于汉化这样的工程，如果不是为了技术探讨，大可不必做到非常完美，只需要实现效果即可。DLL做出来了，用来参考，可把里面反汇编的代码稍作修改应该可以在原程序上放置实现更完美的效果。
附加文件 &nbsp;LM.rar ( 73.28k ) 下载次数: 25


    
        
            cao_cong的评价（解释了原理和用法）：
            restools 兄这个方法好！比直接在程序中写补丁代码简单多了，学习！我看了你改的主程序，应该是用LordPE添加了你DLL中的导出函数，把一个调用SendMessageW的地方改成调用你的函数。严重学习！
            
        
    

cao_cong的解决方案 
再来一个打过补丁的。本来想用LordPE直接添加程序中没有的函数WideCharToMultiByte和SendMessageA的，看了一下程序中有LoadLibraryA和GetProcAddress这两个函数，想想还是用这两个函数来获取WideCharToMultiByte和SendMessageA函数地址吧。因为调用的都是系统函数，我就不考虑用FreeLibrary来释放了。原本想直接抄restools兄的DLL文件中的代码来补丁的，不过堆栈平衡实在不大好处理，反而耗了我很多时间。最后干脆直接写了。我在程序的最后添加了一个大小为400H的区段用来写代码，主要是在程序中找不到够写代码的空间了。贴上用于OllyDBG的写补丁代码插件NonaWrite的代码，我在里面都加了注释，应该容易理解。在程序中添加一个区段后就可以用OD载入，再用NonaWrite插件把这些代码直接写到程序中保存就行了：


    
        
            变量：;temp1：用来存放用GetProcAddress获取的WideCharToMultiByte函数地址。;偏移：00039639，VA：0043B039;temp2：用来存放用GetProcAddress获取的SendMessageA函数地址。;偏移：0003963E，VA：0043B03E;temp3：用来保存调用SendMessageW时的句柄。;偏移：00039643，VA：0043B043;temp4：用来保存要转换的字串地址。;偏移：00039648，VA：0043B048;temp5：分配200字节用来作为转换字串的缓冲区;偏移：00039660，VA：0043B060;结束偏移：00039860，VA：0043B260;常量：;const1：用来存放字串KERNEL32.dll。;偏移：39600，RVA：00032C70，VA：0043B000;const2：用来存放字串WideCharToMultiByte。;偏移：3960D，VA：0043B00D;const3：用来存放字串USER32.dll。;偏移：39621，VA：0043B021;const4：用来存放字串SendMessageA。;偏移：3962C，VA：0043B02C;其他：;LoadLibraryA：;VA：40105C;GetProcAddress：;VA：401060;原程序中还要在418508处改一下：;0x418508:;call 43B270&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;改成这个;补丁代码：开始地址为0043B270;获取WideCharToMultiByte和SendMessageA函数：0x43B270:pushadmov eax,[esp+24]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;temp3,保存前面修改SendMessageW时的句柄mov dword ptr [0043B043],eaxmov eax,[esp+30]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;temp4,保存要转换的字串地址mov dword ptr [0043B048],eaxcmp dword ptr [0043B039],0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;判断是否已获取了要用的函数jnz 43B2ab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;out1push 0043B000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const1call dword ptr[40105C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用LoadLibraryApush 0043B00D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const2push eaxcall dword ptr[401060]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用GetProcAddressmov dword ptr [0043B039],eax&nbsp;&nbsp; ;保存WideCharToMultiByte函数地址到temp1;out1cmp dword ptr [0043B03E],0jnz 43B2d1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;out2push 0043B021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const3call dword ptr[40105C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用LoadLibraryApush 0043B02C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const4push eaxcall dword ptr[401060]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用GetProcAddressmov dword ptr [0043B03E],eax&nbsp;&nbsp; ;保存SendMessageA函数地址到temp2;out2,开始转换push&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; lpUsedDefaultCharpush&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; lpDefaultCharpush&nbsp;&nbsp;&nbsp;&nbsp;200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; cchMultiBytepush&nbsp;&nbsp;&nbsp;&nbsp;0043B060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; temp5,lpMultiByteStrpush&nbsp;&nbsp;&nbsp;&nbsp;-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; cchWideCharpush&nbsp;&nbsp;&nbsp;&nbsp;dword ptr [0043B048]&nbsp;&nbsp;&nbsp;&nbsp; ; temp4,lpWideCharStrpush&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; dwFlagspush&nbsp;&nbsp;&nbsp;&nbsp;4E4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; CodePagecall&nbsp;&nbsp;&nbsp;&nbsp;dword ptr[0043B039]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用WideCharToMultiBytemov&nbsp;&nbsp;&nbsp;&nbsp;eax,0043B060push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; lParampush&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; wParampush&nbsp;&nbsp;&nbsp;&nbsp;180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Message = LB_ADDSTRINGpush&nbsp;&nbsp;&nbsp;&nbsp;dword ptr [0043B043]&nbsp;&nbsp;&nbsp;&nbsp; ; hWndcall&nbsp;&nbsp;&nbsp;&nbsp;dword ptr[0043B03E]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;调用SendMessageApopadret 10
        
    


&nbsp;附件是修改过的主程序： &nbsp;LOOMConfig.rar ( 72.46k ) 下载次数: 4
&nbsp;restools的解决方案（2）
既然cc兄作了相当完美的解决方案出来，那我就借用一下，再把它处理的完善已点，以下的修改


    
        
            ;变量：;首先，文件没有扩展任何实际大小，所有代码，常量都在文件的空隙中存放，至于变量，大部分使用的是虚的空间。这样做是因为文件实际上是没有足够实际空间的。;先把文件的text段虚拟大小用尽也就是2F00，这不影响原来的程序结构的，据测试，好像改不改都可以用，不过还是按规矩修改了;再把文件的data段虚拟大小用尽也就是3000，这不影响原来的程序结构的，据测试，好像改不改都可以用，不过还是按规矩修改了;开放text的写入功能，使变量可以写入;temp1：用来存放用GetProcAddress获取的WideCharToMultiByte函数地址。 ---把text段虚拟空间扩展到2F000，变量运行时放到虚的位置，就是文件中并不存在的位置;VA：42FE28;temp2：用来存放用GetProcAddress获取的SendMessageA函数地址。---同上;VA：42FE2E;temp3：用来保存调用SendMessageW时的句柄。---同上;VA：42FE34;temp4：用来保存要转换的字串地址。---同上;VA：42FE3A;temp5：分配190字节用来作为转换字串的缓冲区 ---放到 Data 段空闲位置，大部分是虚的，文件没有实位置;VA：432E60 --使用靠在后面扩展的虚拟空间，因为这个段大多数会有数据写入，前面已经分配的虚拟空间不太安全;0x190 就是 400 个字节，对于这个程序，我想应该足够了;常量：;const1：用来存放字串KERNEL32.dll。---------------------------原程序已有该字串，借用，省去空间;VA：42F602;const2：用来存放字串WideCharToMultiByte。---放到 text 段空闲位置 ，文件实位置;VA：42FDE0;const3：用来存放字串USER32.dll。---------------------------原程序已有该字串，借用，省去空间;VA：42F6D4;const4：用来存放字串SendMessageA。---放到 text 段空闲位置 ，文件实位置;VA：42FDF4;其他：;LoadLibraryA：;VA：40105C;GetProcAddress：;VA：401060;原程序中还要在418508处改一下：;0x418508:;call 42FD3E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;改成这个;补丁代码：开始地址为0042FD3E;获取WideCharToMultiByte和SendMessageA函数：0x42FD3E:pushadmov eax,[esp+24]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;temp3,保存前面修改SendMessageW时的句柄， ListBox 句柄mov dword ptr [42FE34],eaxmov eax,[esp+30]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;temp4,保存要转换的字串地址， 错误字符串的地址，准备用来修复mov dword ptr [42FE3A],eaxcmp dword ptr [42FE28],0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;temp1,WideCharToMultiByte判断是否已获取了要用的函数，如果有跳转，不再获取jnz 42FD7C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;out1push 42F602&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const1call dword ptr[40105C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;调用LoadLibraryApush 42FDE0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const2push eaxcall dword ptr[401060]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;调用GetProcAddressmov dword ptr [42FE28],eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保存WideCharToMultiByte函数地址到 temp1;out1cmp dword ptr [42FE2E],0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;temp2,判断是否已获取了要用的函数，如果有跳转，不再获取jnz 43FDA2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;out2push 42F6D4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const3,字串USER32.dllcall dword ptr[40105C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;调用LoadLibraryApush 42FDF4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;const4,字串SendMessageApush eaxcall dword ptr[401060]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;调用GetProcAddressmov dword ptr [42FE2E],eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保存SendMessageA函数地址到temp2;out2,开始转换push&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; lpUsedDefaultCharpush&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; lpDefaultCharpush&nbsp;&nbsp;&nbsp;&nbsp;190&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; cchMultiBytepush&nbsp;&nbsp;&nbsp;&nbsp;432E60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; temp5,lpMultiByteStrpush&nbsp;&nbsp;&nbsp;&nbsp;-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; cchWideCharpush&nbsp;&nbsp;&nbsp;&nbsp;dword ptr [42FE3A]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; temp4,lpWideCharStrpush&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; dwFlagspush&nbsp;&nbsp;&nbsp;&nbsp;4E4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; CodePagecall&nbsp;&nbsp;&nbsp;&nbsp;dword ptr[42FE28]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; temp1,调用WideCharToMultiBytemov&nbsp;&nbsp;&nbsp;&nbsp;eax,432E60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 输出正确的 ANSI 字符串push&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; lParampush&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; wParampush&nbsp;&nbsp;&nbsp;&nbsp;180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Message = LB_ADDSTRINGpush&nbsp;&nbsp;&nbsp;&nbsp;dword ptr [42FE34]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; temp3,hWndcall&nbsp;&nbsp;&nbsp;&nbsp;dword ptr [42FE2E]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 调用SendMessageApopadret 10
        
    


文件没增加一个字节，资源段仍然处在最后位置，可以用资源编辑工具继续编辑而无需担心。附加文件 &nbsp;LOOMConfig.rar ( 72.43k ) 下载次数: 5]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/677-1241915537.html]]></link>
 <author><![CDATA[wanfu]]></author>
 <category><![CDATA[编程知识]]></category>
 <pubDate><![CDATA[Sun, 10 May 2009 08:32:17 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[Radialix.2.06.1.1267 脱壳演示]]></title>
 <description><![CDATA[Radialix&nbsp;是一个来自俄罗斯的本地化工具，官方网站是&nbsp;http://www.radialix.com/?lang=en程序是采用&nbsp;Armadillo&nbsp;的&nbsp;CopyMem-II&nbsp;方式加壳的。应汉化新世纪某位朋友的要求，做了一个脱壳及破解的录像，顺便在这里也发一下。有一点基础的话，按录像操作应该可以搞定这个软件了。发觉做录像太累，下次不搞这个了。以下是里面说明文件中的内容：文件列表：Radialix_Crack_Demo.swf：Radialix&nbsp;2.06.1.1267&nbsp;中&nbsp;rdl.exe&nbsp;脱壳及破解的录像Tools&nbsp;文件夹中内容：1、ArmaDetach.v1.31&nbsp;目录：用来&nbsp;dump&nbsp;Armadillo&nbsp;采用&nbsp;CopyMem-II&nbsp;方式加密程序的工具2、ArmadilloFindProtected18&nbsp;目录：用来检测&nbsp;Armadillo&nbsp;加密方式3、PEMOVE&nbsp;目录：kanxue&nbsp;兄写的用来移动输出表及重定位表的工具4、Plugin&nbsp;目录：用于&nbsp;OllyDBG&nbsp;的插件。HA_skypatch.rar&nbsp;中是我汉化过的&nbsp;SkyPatch&nbsp;补丁脚本插件，根据里面的说明安装即可。ODbgScript.dll&nbsp;是&nbsp;1.65&nbsp;版的&nbsp;OllyDBG&nbsp;脚本插件，直接复制到&nbsp;OllyDBG&nbsp;或&nbsp;OllyICE&nbsp;的&nbsp;plugin&nbsp;目录下即可。5、Script&nbsp;目录：我写的&nbsp;Armadillo&nbsp;脱壳脚本，配合&nbsp;OllyDBG&nbsp;的&nbsp;ODbgScript&nbsp;插件使用6、Code&nbsp;目录：破解&nbsp;Radialix&nbsp;的补丁代码，配合&nbsp;OllyDBG&nbsp;插件&nbsp;SkyPatch&nbsp;使用。其中的&nbsp;Radialix.2.06.00.odp&nbsp;我已改过，可用于&nbsp;Radialix&nbsp;2.06.1.1267&nbsp;中&nbsp;rdl.exe&nbsp;脱壳后的破解，rdlc.2.06.00.odp&nbsp;我没改，这个是用于破解脱壳后的&nbsp;Radialix&nbsp;安装目录中的控制台程序&nbsp;rdlc.exe&nbsp;的，不适用于&nbsp;Radialix&nbsp;2.06.1.1267&nbsp;版本，请自己修改。脱壳破解的方法我都在录像中说明了，这个就当做练习。7、脱壳后的程序调整区段时按顺序保留以下的部分：01&nbsp;.text02&nbsp;.itext03&nbsp;.data04&nbsp;.bss05&nbsp;.idata06&nbsp;.edata07&nbsp;.tls08&nbsp;.rdata09&nbsp;.rsrc其中&nbsp;edata&nbsp;在优化时可以合并到&nbsp;.idata，最后的&nbsp;.rsrc&nbsp;在&nbsp;dump&nbsp;了资源后可以删除，再载入&nbsp;dump&nbsp;后的资源文件。8、其他在破解中所用到的工具，如果没有的话，请到&nbsp;http://www.pediy.com/tools.htm&nbsp;下载。录像下载地址：http://ccdebugger.wt1.7it7.cn/data/Radialix.2.06.1.1267.Crack.Demo.rar]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/676-1241413737.html]]></link>
 <author><![CDATA[CCDebuger]]></author>
 <category><![CDATA[汉化脱壳]]></category>
 <pubDate><![CDATA[Mon, 04 May 2009 13:08:57 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[资源区段的重建]]></title>
 <description><![CDATA[我们知道，汉化软件的标准资源其实就是在对资源区段中的资源进行修改，因此，汉化后软件的资源区段一般情况下其的大小都会有一定的改变。正常程序由于资源段在程序的最后，因此其大小的改变一般不会对程序有影响（自校验除外）。而手工脱壳后的程序，其资源区段不一定在最后面，因此程序汉化后就会出错，具体表现就是程序汉化后无法运行或者运行出错。因此，我们对于手工脱壳后的程序，在汉化前首先要确定其资源表的位置，以确定是否需要对程序在汉化前进行预处理。具体我们可以用 eXeScopy 或ResScope 或 PE Explorer 或者 LordPE 来打开程序来查看程序中各个区段的在程序中的位置和大小。具体操作如下：用 eXeScopy 或 ResScope 或 PE Explorer&nbsp; 或者 LordPE 打开要查看的文件，然后在菜单中选择&ldquo;视图&rdquo;&mdash;&mdash;&ldquo;区段头&rdquo;即可查看各区段的相关信息。现在介绍一下不用 FreeRes 0.94（对有些程序不支持！），而只用 FixRes 和 LordPE 重建区段的方法！软件：Radialix 2 中的 rdlc.exe备注：该文件已经 tracky 脱壳并破解，但是最后的区段为 .tracky，无法汉化，需要将 .rsrc 移到最后，而且该文件无法用 FreeRes 0.94 重建资源区段。工具：FixRes 和 LordPE （看雪学院有下载！）， eXeScope 方法：1、打开 LordPE，在 PE 编辑器中载入 rdlc.exe，显示以下信息，记下文件块对齐中的数据：00000200单击区段，显示一下信息：看到了吧，资源 .rsrc 区段在 .tracky 前面。注意 .tracky 区段中的虚拟偏移地址（VOffset）为 00325000，记下它或者选中该区段，单击右键，选择&ldquo;编辑区段&rdquo;菜单，然后复制备用。
2、打开 FixRes，选择 Dump 选项卡，在 NewRVA（即要将 .rsrc 区段移动到新的虚拟偏移地址）输入 00326000（00325000+1000），在FileAlignment（文件块对齐）输入文件块对齐中的数据：00000200（省略前面的0），然后按 Dump Resource（转储资源）按钮，即在指定目录中生成了一个 rsrc.bin 文件。3、再次打开 LordPE，单击区段，并在窗口的任意位置单击右键，选择&ldquo;从磁盘载入段&rdquo;菜单，将上步生成的 rsrc.bin 载入。
看到新增加了一个 rsrc.bin 区段了吧。保存一下，并记下该区段的虚拟偏移地址（VOffset）为 00326000，以及Vsize（虚拟大小）000CA000 备用。4、退出区段对话框，单击&ldquo;区段&rdquo;按钮下面的&ldquo;目录&rdquo;，出现如下对话框：注意上面对话框中的资源旁边RVA和大小框中的数据，将RVA改成 rsrc.bin 段的虚拟偏移地址00326000，大小改成 rsrc.bin 段的虚拟大小 000CA000（大小一般不用改，因为是从相同大小的资源中Dump出来的）。按保存按钮后，单击&ldquo;..&rdquo;按钮，看看资源是否已经可见，并且选择段内某个数据，看看下面偏移框内是否正确（此框内不显示错误即正确，这个比PETools先进！可以马上知道资源正确与否！）。5、退出目录对话框，回到区段对话框，在 .rsrc 区段上单击右键，选择&ldquo;清除区段&rdquo;。再选中新增区段 rsrc.bin，单击右键，选择&ldquo;编辑区段&rdquo;，将区段名改为&ldquo; .rsrc &rdquo;，退出区段对话框，然后单击保存，并关闭 PE 编辑器。 6、此时的文件还无法运行，需要重建一下。再次打开 LordPE，单击&ldquo;重建 PE&rdquo;按钮，载入修改过区段的 rdlc.exe 重建。7、重建后的 rdlc.exe 文件已可正常运行。为了验证一下，我们用 eXeScope 打开 rdlc.exe 文件，看看里面的资源是否正常。这里一切正常！8、至此，大功告成！可以着手汉化了！]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/675-1241250357.html]]></link>
 <author><![CDATA[wanfu]]></author>
 <category><![CDATA[汉化脱壳]]></category>
 <pubDate><![CDATA[Sat, 02 May 2009 15:45:57 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[视频教程：全民汉化--7 注意事项]]></title>
 <description><![CDATA[作者：pcfinal（黑色开裆裤）web：http://www.pc0317.com/bbs/
注意：视频分辨率为1024X768，推荐是用屏幕分辨率为1024X768或更高分辨率观看，如速度较慢，请使用下载工具下载后观看。
教程目录：
第七章：注意事项&nbsp; 点击原作者网站在线观看 点击本地下载7.1 字体调整7.2 发布7.3 捆绑插件
]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/674-1239187003.html]]></link>
 <author><![CDATA[黑色开裆裤]]></author>
 <category><![CDATA[视频教学]]></category>
 <pubDate><![CDATA[Wed, 08 Apr 2009 18:36:43 +0800]]></pubDate>
</item>
<item>
 <title><![CDATA[视频教程：全民汉化--6.3 简繁转换]]></title>
 <description><![CDATA[作者：pcfinal（黑色开裆裤）web：http://www.pc0317.com/bbs/
注意：视频分辨率为1024X768，推荐是用屏幕分辨率为1024X768或更高分辨率观看，如速度较慢，请使用下载工具下载后观看。
教程目录：
第六章：快速汉化6.1 字典的使用6.2 程序升级6.3 简繁转换&nbsp; 点击原作者网站在线观看 点击本地下载
]]></description>
 <link><![CDATA[http://teach.hanzify.org/article/673-1239186844.html]]></link>
 <author><![CDATA[黑色开裆裤]]></author>
 <category><![CDATA[视频教学]]></category>
 <pubDate><![CDATA[Wed, 08 Apr 2009 18:34:04 +0800]]></pubDate>
</item>
</channel>
</rss>