请选择 进入手机版 | 继续访问电脑版
收藏本站
查看: 2195|回复: 6

[开发手记] pyfa汉化

[复制链接]

该用户从未签到

发表于 2014-9-18 18:32:42 | 显示全部楼层 |阅读模式
本帖最后由 wwaa 于 2014-9-19 11:07 编辑

好吧,今天EVE又更新了,已经AFK了一年多,虽然仍然还在做pyfa的汉化,但是更新进度明显越来越不给力了,在这里发一下汉化的所有过程吧。

首先pyfa是个基于python语言开发的工具,因此必须下载对应的python开发环境,列表如下(其实打开pyfa,在About对话框里面有写):
python: 2.7.2 ——基础环境
wxPython: 2.8.11.0 ——python图形开发包
SQLAlchemy: 0.7.3 ——SQL开发API
再到以下页面下载pyfa源代码:
https://github.com/DarkFenX/Pyfa/releases 找到压缩包里面带src字眼的就是了
可执行文件包最好也一并下载,我一般是下载写着...win.zip的那个免安装版
安装完以上几个东西,把源码包解压缩出来,双击pyfa.py,应该就能运行起来
另外还需要一些辅助软件:
matplotlib for python 2.7 ——图表显示控件(仅在pyfa伤害图表中使用到)
SQLiteAdmin或者SQLiteSpy——用于打开eve.db文件
Dragon Unpacker 5——用于从EVE客户端提取pickle文件
notepad或者其他任意一个可以编辑xml文件的工具
至于python的那些形形色色的开发工具,一个都不需要,其实主要是我不会用
最后下载网盘中的PyfaWorks压缩包
链接: http://pan.baidu.com/s/1jGxGMTg 密码: 5sw2
这个PyfaWorks包里面包含了我在整个pyfa汉化过程工作中所完成的所有内容,包括汉化笔记、汉化工具源代码、pickle数据提取工具源码、汉化数据文件、打包和发布程序所需各种环境等等

接下来是汉化过程

该用户从未签到

 楼主| 发表于 2014-9-18 23:47:50 | 显示全部楼层
本帖最后由 wwaa 于 2014-9-19 11:02 编辑

pyfa的汉化非常繁琐,因为python编译后的文件并不是bin模式也不是exe模式的文件,而是用中间代码的形式存放目标文件,直接在目标文件中查找关键字然后进行替换的方法我曾经尝试过,结果发现完全无法操作。不过还好有源码,所以只能直接从源码入手,而汉化所需的关键字遍布源码和数据库表中,只能针对各个类别的汉化所需数据逐步汉化,我写了一个.net小程序用于完成这个步骤,以便于使一些可以重复的工作不用手工完成,但即使如此,每次更新后所出现的新内容仍然会带来不小的工作量,有时候还需要进行编码完善汉化工具。
工具界面如下图所示,汉化过程已经经过简化,在准备好汉化数据库后,依次点击按钮,就可以完成汉化


按钮大体上分成两组,第一排三个按钮用于生成汉化数据库文件,下面的是用汉化数据库文件对pyfa的源码、数据库文件中的汉化关键字进行替换,以完成汉化过程。
其中Finalize按钮较为特殊,不仅仅用于替换汉化文本,也可以用于替换代码,替换的代码一部分是国服本地化改造需要,一部分是BUG修正,还有一些是按照玩家需求添加的原版所没有的小功能,例如槽位分色、采矿量显示等等。

两个最主要的汉化数据库文件,我用xml方式存放,可以直接打开查看:
EnglishToChineseDB.xml中存放物品、技能和MarketGroup等汉化文本对照表
ContextTranslationDB.xml中存放从pyfa中提取的所有字符串,以及双语对照表、finalize上下文等汉化所需内容

汉化工具每个按钮的功能简要介绍如下(标注为已否决的是以前用到的功能,现在已经废弃不用):
FetchDB: 从eve.db中提取typeName和description字段到EnglishToChineseDB.xml中(将删除所有item)
TransNewDB: 根据compare_newdb.xml更新EnglishToChineseDB.xml中的cnname和cndesc字段(compare_newdb.xml生成方式见下面)
TransPickle: 根据compare.xml更新EnglishToChineseDB.xml中的cnname和cndesc字段
TransItem按钮:对照EnglishToChineseDB中的item信息更新eve.db的invtypes表,同时将invtypes中的英文名字写回DB中的enname中
TransGroup按钮:对照EnglishToChineseDB中的marketGroups信息更新eve.db的invmarketgroups表
TransInvGroup: 对照ContextTranslationDB中的invgroups信息更新eve.db的invgroups表
已否决:GetStrings:遍历pyfa-core中的所有字符串并存入ContextTranslationDB.xml
已否决:TransStrings: 根据EnglishToChineseDB.xml中的item对照信息更新ContextTranslationDB.xml中的contexttransdb信息
已否决:PutStrings: 根据ContextTranslationDB.xml的contexts表更新所有pyo文件。
TransStrings: 将所有TransDB中的item的中英对照写入ContextTranslationDB,已有的话替换,没有的就添加在最后
TransPY: 遍历文件夹,查找所有.py文件中的strings,然后根据ContextTranslationDB对strings进行转换
TransDGM: 根据ContextTranslationDB.xml的dgmattribs内容更新dgmattribs表,同时也更新eveunits表

由于未做后台多线程处理,点击按钮后在完成前对话框会停止响应,根据各个按钮功能的不同所需要花费的时间各不相同。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-9-19 10:29:12 | 显示全部楼层
本帖最后由 wwaa 于 2014-9-19 11:05 编辑

安装完成基础环境,并下载我提供的全部工具源码包PyfaWorks后,解压缩,建议和我一样解压到D:\PyfaWorks目录下,后面提到的目录都会以这个目录为基准
汉化工具在DBConverter目录下,可以用VS2010打开查看修改源码和编译,如果想直接运行,需要.net Framework 4.0环境,请自行下载。
D:\PyfaWorks\DBConverter\bin\Debug\src 目录:下载的pyfa源码解压缩到这个目录下,其中的eve.db需要复制到translate目录
D:\PyfaWorks\DBConverter\bin\Debug\srco 编译发布pyfa时需要用到此目录
D:\PyfaWorks\DBConverter\bin\Debug\translate 存放需要汉化的eve.db文件、汉化xml文件等
D:\PyfaWorks\pyfa-cn 可执行程序目录,发布时用该目录打包
D:\PyfaWorks\pickle 从客户端提取并生成用于汉化的中英文本对照文件

好了,环境准备好,开始进行汉化
一、提取汉化数据
接下来打开Dragon Unpacker 5(如果报错或不正常,请使用XP兼容模式),打开EVE客户端中的
resLocalization.stuff 文件,找到localization_en-us.pickle 和 localization_zh.pickle,解压缩到D:\PyfaWorks\pickle
再打开resLocalizationFSD.stuff 文件,找到localization_fsd_en-us.pickle 和 localization_fsd_zh.pickle,解压缩到D:\PyfaWorks\pickle
运行extract_pickle.py,生成compare.xml,再运行extract_pickle_fsd.py,生成compare_fsd.xml,把这两个文件复制到D:\PyfaWorks\DBConverter\bin\Debug\translate

二、用汉化工具进行汉化
运行D:\PyfaWorks\DBConverter\bin\Debug\DBConverter.exe,界面和功能介绍前面已经提到过不再敷述
依次点击汉化工具上面的按钮,耐心等待运行完成

三、测试
执行COPY&PAUSE.bat,会先把translate目录中的eve.db复制过来,然后运行pyfa.py
如果一切正常,就会成功启动pyfa图形界面,出错的话会在弹出来的dos窗口中显示错误信息
检查汉化结果,测试基本功能是否正常

四、打包
把D:\PyfaWorks\DBConverter\bin\Debug\src 目录下的eos、gui、service目录,以及config.py文件复制到D:\PyfaWorks\DBConverter\bin\Debug\srco
然后顺序执行srco目录下的3个bat文件,完成py文件源码的编译
用WinRar或360压缩打开D:\PyfaWorks\pyfa-cn\pyfa-core.lib,没错这是个压缩归档文件,也就是说是个没有压缩的zip文件
把D:\PyfaWorks\DBConverter\bin\Debug\srco中编译好的三个目录以及config.pyo文件拖进去,覆盖更新其中的内容
执行pyfa.exe,如果成功会启动pyfa图形界面,出错的话会生成一个.log文件,其中会有错误信息提示
打包完成
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-9-19 12:03:59 | 显示全部楼层
本帖最后由 wwaa 于 2014-9-19 12:11 编辑

到此为止可以算是完成了一次汉化版本更新的过程,但是pyfa本身并不是静态的,随着游戏的更新,以及pyfa自身功能的不断完善,会出现很多新的需要汉化的内容,这时候就需要更新我们的汉化过程
这部分内容涉及比较专业的编程知识,只能通过个人经验来完成,主要的工作分为两部分,一是找到需要汉化的内容,二是确定汉化方式并对汉化数据xml文件进行更新,在后面的内容中我可能会举一些例子来进行说明
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2015-4-11 21:56
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-9-28 23:15:05 | 显示全部楼层
    支持一下,我这两天想研究研究这个,刚才用dragon unpacker 5就不知道那俩pickle文件为啥解出来大小都是0。。。

    继续研究……

    点评

    5.6版不好用,重新找了个5.2版的就好了  详情 回复 发表于 2014-9-29 02:16
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-4-11 21:56
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-9-29 02:16:26 | 显示全部楼层
    夜空下的猫 发表于 2014-9-28 23:15
    支持一下,我这两天想研究研究这个,刚才用dragon unpacker 5就不知道那俩pickle文件为啥解出来大小都是0。 ...

    5.6版不好用,重新找了个5.2版的就好了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-4-5 21:43:06 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|EVE China Tools ( 浙ICP备10043928号  

    GMT+8, 2017-10-18 17:14 , Processed in 0.111321 second(s), 32 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc. Design Singcere!

    快速回复 返回顶部 返回列表