本帖最后由 doubley2000 于 2015-2-3 11:27 编辑
现在Mac OS的使用者渐多,但Mac平台的软件汉化远没Win 下红火,仅有的教程也是10年前的,其中的软件随着Mac系统不再兼容PowerPC而不能使用了,所以劣者写此拙文以供诸君参考,希望有更多的人能自己动手汉化软件。
一.首先工欲善其事,必先利其器,先准备一些必要工具(不提供破解啥的) 1.Xcode Apple商店下载 主要用于可视化编辑nib 2.NibUnlocker http://www.charlessoft.com 用于将不可编译的nib文件转成可xib,再用Xcode编译后生成可编译nib 3.BBEdit http://www.barebones.com 用于编辑nib和处理文档 4.UltraEdit http://www.ultraedit.com 用于16进制文件处理,配合Hopper Disassembler使用 5.Hopper Disassembler http://hopperapp.com 用于反汇编 6.Rezilla 用于编译PowerPC时代的rsrc文件 7.其他 如果你是个完美主义者,那可能还要准备一些图像处理,网页制作软件来处理图标及Help文件,当然也可以用iLocalize(其实用处不大)来帮助汉化
二.有了工具,就要准备工作的对象了,右击任意一款App,选择“显示内容”,看Resources下找的到诸如en.lproj 的文件夹不。如果有,那么可汉化程度比较大且较简单;如果无,可汉化程度比较小且较困难,即使汉化了,也同样不支持多语言。对于Resources下找的到lproj 的,只要把Resources下及子目录(比如Help文件下也会有proj )里含有的英语proj 拷贝一份,汉化其中的内容后改名为zh_CN.lproj即可(可汉化内容一般包括nib、strings);对于Resources下找不到lproj 的,在其中加一个zh_CN.lpro(空的就可以,只是为了调用系统对话框时能显示中文),汉化Resources下的可汉化文件即可,极少数还必须编译MacOS下的二进制文件。
三.汉化过程(以矢量软件sketch为例) 1.nib nib文件用Xcode里的Interface Builder就可以编辑,但现在已经基本找不到可直接编辑的nib文件了,如果一个nib右击无“显示内容”选择项,就不可以直接编辑,这样你需选择用“NibUnlocker”打开,生成一份xib文件这样就可以用Interface Builder编译了,完成后导出nib文件,这个nib是可编译的,里面含有designable.nib和keyedobjects.nib;如果有些nib文件即不可以用Interface Builder编辑也不可以用“NibUnlocker”打开的(比如老格式的含有classes.nib、info.nib、objects.xib的那种),用BBEdit直接修改里面的xib,汉化<string> </string>容器里的字符串就可以,当然单文件的nib文件也可以这样处理。 比如sketch欢迎界面的"Welcome to Sketch"字符,可以生成可编译nib在Xcode 里改,也可已直接在BBEdit里查找"Welcome to Sketch"修改。
2.strings文件可以用各种文本编译器编译,一般有如下两种形式。 A) <key>0006h7nh2f</key> <string>iTunes could not back up the iPad “^FILENAME” because another sync client is already running.</string> 汉化<string> </string>容器里的字符串就可以 B) "LOADING_SU_PKGS" = "Loading Software Update Packages…"; 汉化" "里的字符串就可以,注意引号格式并不要漏掉分号 3.rsrc、rsr 用Rezilla可以打开编译,不过现在基本没有这种资源了,不再赘述了 4.MacOS下的二进制文件 对于一些你改遍了strings文件,仍然有英文的界面的情况,那这些字符就可能在二进制文件里。 sketch,这款软件不支持多语言,而且资源并不都在nib和strings里,这样把这个App拖到Hopper Disassembler的程序窗口,然后查找要汉化的字符,比如工具栏的"Insert" strings位置 0X2D59B2 指针位置 0X30D160
调用处
这样用UE打开Mac下的sketch的二进制文件, 先跳转到0X2D59B2,将 49 6E 73 65 72 74 改为 D2 63 65 51 00 00 ("Insert" 改为 "插入") 再跳转到0X30D160,将 00 00 00 00 00 00 00 00 C8 07 00 00 00 00 00 00 改为 00 00 00 00 00 00 00 00 D0 07 00 00 00 00 00 00 (cstring 改为 ustring) 将 B2 59 2D 00 01 00 00 00 06 00 00 00 00 00 00 00 改为 B2 59 2D 00 01 00 00 00 02 00 00 00 00 00 00 00 (6个字符数 改为 2个字符数) 原因呢cstring一次读入一个字节,ustring一次读入两个字节(先读取低位,再读取高位,63D25165是“插入”的Unicode代码) 结果如图
对于像“New”翻译成“新建”之类字节不够的情况,有可能要向前或后借位,需要修改地址B2 59 2D 00 01 00 00 00 5如果二进制文件都改了,还是有英文的界面呢?就像sketch里面的工具栏的一些工具名称它们是由程序里的classname格式化而来的,对于这种需要更高深的反汇编操作,我就无能为力了。
|