pzx521521 发表于 2018-7-2 16:09

小白记第一次汉化

本帖最后由 pzx521521 于 2018-7-2 18:06 编辑

# Start
原贴地址如下:
https://www.52pojie.cn/thread-760194-1-1.html
感觉很简单,主要是闲... 就看看尝试这自己做一下
#####因为exe有壳,不会脱,就没汉化exe, 选择和老版本一样只汉化效果列表,替换dll即可.
#####dll地址如下
链接: https://pan.baidu.com/s/1ozTRR4UGtxMWjBrTC_Pdyw 密码: gig8
# Step1
尝试直接修改资源文件.
看下exe,使用eXeScope , 有目录结构,但是发现资源加密了, 打不开里面的任何东西
使用exeinfope查壳
壳的信息如下:
```
EP signature ( EB08 ) with Packer ID via "TAGG" - Unknown Packer-Protector , 6 sections - CRC is Set --> PE Header manipulated/tampered <- [ Win Vista ] ,
Overlay : 76A8C2... Nothing discovered
```
不觉明历, 百度说是se壳, 论坛里面好像有怎么脱壳的.好像比较麻烦,先放下.
有熟悉的人可以联系我一下~
# Step2
重新看eXeScope , 目录结构 并没有看到类似资源文件的东西,看了下exe大小, 才3M. 估计没有资源文件, 找目录,发现common_res.dll.
都res了果断这个,拖入eXeScope. 发现是这个没毛病.
看了下text里面有配置好的文本的xml
![](http://chuantu.biz/t6/337/1530517502x-1376440246.png)
估计是官方已经考虑到了语言问题, 或者也方便自己资源配置吧
翻译一下就好了
# Step3
导出xml后
懒得一个一个翻译
写了一个很简单的自动翻译
原理设计是用google的翻译
http://translate.google.cn/translate_a/single?client=gtx&sl=en&tl=zh-CN&dt=t&q=要翻译的文字
代码放最下面
搞定后保存 重新编译dll
这里有个注意点, 复制的时候用utf-8,否则会乱码
# Code
delphi 代码如下:
```
unit ufrmGoogleTrans;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, msxml, StdCtrls, ActiveX, ComObj, uSimpleXml;

type
TGoogleTrans = class(TForm)
    procedure FormClick(Sender: TObject);
private
    function XMLHTTPRequest(str: string): string;
    procedure ChangeNode(aNode: TXmlNode);
    procedure ChangeNodeSingle(aNode: TXmlNode);
    { Private declarations }
public
    { Public declarations }
end;

var
GoogleTrans: TGoogleTrans;

implementation
{$R *.dfm}

function TGoogleTrans.XMLHTTPRequest(str: string): string;
var
req: IXMLHTTPRequest;
url: WideString; //要访问的url
params : string; //要提交的数据
begin
url := 'http://translate.google.cn/translate_a/single?client=gtx&sl=en&tl=zh-CN&dt=t&q='+str;
req := CoXMLHTTP.Create;
req.open('GET', url, False, EmptyParam, EmptyParam);
req.send(EmptyParam);
result := req.responseText;
//[[["",]
result := copy(result,1,pos(',',result)-2);
result := copy(result,5,Length(result)-4);
end;

procedure TGoogleTrans.ChangeNode(aNode: TXmlNode);
var
I: Integer;
aChildNode: TXmlNode;
begin
ChangeNodeSingle(aNode);
if aNode.NodeCount > 0 then
    for I := 0 to aNode.NodeCount -1 do
      ChangeNode(aNode.Nodes);
end;

procedure TGoogleTrans.ChangeNodeSingle(aNode: TXmlNode);
var
sName: string;
begin
sName := aNode.ReadAttributeString('name','');
Self.Caption := '正在翻译...'+ sName;
Application.ProcessMessages;
if Trim(sName) <> '' then
    sName := XMLHTTPRequest(sName);
aNode.WriteAttributeString('name', sName, '');
end;

procedure TGoogleTrans.FormClick(Sender: TObject);
var
xml: TSimpleXml;
aNode: TXmlNode;
sPath: string;
begin
xml:= TSimpleXml.Create;
try
    sPath :='C:\Users\Administrator\Desktop\新建 文本文档.txt';
    xml.LoadFromFile(sPath);
    aNode := xml.Root;
    ChangeNode(aNode);
    xml.SaveToFile(sPath+'.trans');
    Self.Caption := 'finish...';
    Application.ProcessMessages;
finally
    xml.Free;
end;
end;
```

pzx521521 发表于 2018-7-4 15:13

vip3233 发表于 2018-7-4 14:57
那位老师能来继续完善汉化完整界面,想选择个最佳答案,400LTB不够可在加一些的呢,感谢楼主另外开贴,更希 ...

exe被加壳了.个人水平有限,真搞不定这个壳......   sorry...

vip3233 发表于 2018-7-4 15:40

pzx521521 发表于 2018-7-4 15:13
exe被加壳了.个人水平有限,真搞不定这个壳......   sorry...

谢谢老师,向你学习了

wuyy 发表于 2018-7-2 16:25

支持一下{:300_965:}

anym0us 发表于 2018-7-2 16:25

厉害了~~~~~~~

zl9801 发表于 2018-7-2 16:32

谢谢分享

hualong1009 发表于 2018-7-2 17:49

学习了,

look911 发表于 2018-7-2 18:11

不错不错 我比楼主还小白

萌萌哒黛娜 发表于 2018-7-2 18:26

谢谢分享

hxj081 发表于 2018-7-2 18:28

支持一下

一切杰有可能 发表于 2018-7-2 19:10

我很赞同!

uu66 发表于 2018-7-2 19:24

厉害了~~~~~~~
页: [1] 2 3 4 5 6 7 8
查看完整版本: 小白记第一次汉化