# [教学] Mac OS 下 App 汉化教程
软件
[教学] Mac OS 下 App 汉化教程
软件
现在 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)
1
2<key>0006h7nh2f</key>
<string>iTunes could not back up the iPad “^FILENAME” because another sync client is already running.</string>
汉化 <string> </string > 容器里的字符串就可以
B)
1
"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 格式化而来的,对于这种需要更高深的反汇编操作,我就无能为力了