本汉化时以SD卡清理工具(英文版本)为依据【附件一是英文版本】
这是我汉化的中文版本(可以下载后对照一下)
-------------------------------
接过第五课的课程往下走,其实这第五课只是一个基础,相信都会使用apktool反编译,编译软件了吧,如果不会和不了解,请仔细观看第五课后在往下阅读。
---------------------------------
*Arsc的汉化问题,以前都是通过直接汉化arsc【称为强制性汉化】,但现在反编译之后是通过修改汉化res\values里的文件来完成的。主要是通过修改values文件夹中string和array文件里的英文来达到汉化的目的(下图的assets忽略不记,一般的里面没有这个的,特殊的才会有)
我们反编译好了之后,在你的反编译目录下存在一个【APK】文件夹,找到--res\values的string和array
- 在res文件夹中,我们可以看到有很多values-***的文件夹,这就是语言包。
- values是英文语言包,values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。除此以外,其它地区的语言包都是精简的对象,可以不过多了解。
- 在values文件夹里,通常有arrays.xml、strings.xml等语言文件,要汉化这些文件,可以用Notepad++ Portable打开(此软件在第一课中)让我们看下SD卡清除工具里面反编译之后 res\values\ string 里面的英文
我们只需要将>*****</string>间的*****内容改成中文就行了。(看下图)
大家感觉,我英语不好怎么办???
告诉你一个小秘密,现在有种东西叫谷歌翻译,嘻嘻!!!!
翻译好了之后就直接保存就行了
在保存的时候一定要注意编码要修改为UTF-8进行保存。
这string和array汉化好了之后编译打包,测试一下,看看有没有没有汉到得,如果有接下来就是XML的汉化
----------------------------------------
汉化解析
- 了解清楚语言包的问题后,大家也就会明白,APKTool的操作步骤其实也很简单,反编译——修改或添加语言包——重新打包而已,但费时的就是在修改、添加语言包这一块,比传统的汉化方法要更费时间,但所带来的好处是传统汉化方法无法相比的。
- 另外,除了res文件夹内有语言包需要汉化外,在res文件夹内的layout和xml文件夹内也会有文件需要汉化
同样是用Notepad++ Portable打开,这些文件里面都是代码语句,需要通过搜索功能找到需要汉化的单词来汉化,所以这里建议大家先把原版的软件装上去,再对照单词,边搜索,边汉化。
只能用这个办法哦!
可以通过notepad++ 来搜索查找未汉化的字符部分,也可以通过下列方式搜索,相关设置如图:
按照上图设置,目录为反编译后获得的apk文件夹,而查找目标为default进行搜索,结果如下图:
通过同样的设置方法将查找目标改为 android:laber=和android:title=和android:text=进行搜索查找汉化(注意:此方法汉化时,并非是所有的字符都要汉化),然后再进行测试,发现程序中已汉化的部分都已成功显示中文,但是在点击桌面的小部件启用和禁用小部件时还是会显示出英文,在这个时候我们已经对xml和arsc进行了汉化,这时就需要到dex里去查找汉化了。
(注意:notepad++ 来搜索查找未汉化的字符部分此教程用的SD卡清除工具不用搜索,上面的图是从通知栏汉化哪里取来的,借鉴借鉴可以,不是每一个都需要这一步)
---------------------------------
3、其它
- 精简语言,这个很简单,只需要将res目录内非values、values-zh-rCN、values-zh-rTW的其它values-***语言包文件夹删除即可。(下图圈住的两个就是,一个是德国的语言包,一个是丹麦的语言包)
嵌入式汉化则是保留这两个文件不变,在res路径下创建values-zh-rCN(简体中文)和values-zh-rTW(繁体中文)文件夹,并把string和array中的英文字符修改成简体中和繁体中文之后分别保持到values-zh-rCN(简体中文)和values-zh-rTW(繁体中文)文件夹中
----------------------------------------
4、注意事项
- 部分情况下,在精简语言后,重新编译打包时,命令窗口会提示public******错误,这是由于values语言包文件夹下的public.xml文件给非values、values-zh-rCN、values-zh-rTW的其它values-***语言包文件里的语言文件定义了字段,但这些语言包都被精简了,定义不了,所以会出错。解决方法有两个:
* 一是按照命令窗口中的提示(有提示public.xml文件的具体哪一行的值没有定义),到相应的语言包里找到那行未定义的代码,复制到values-zh-rCN、values-zh-rTW语言包文件夹内的strings.xml语言文件中。
* 二是按照命令窗口中的提示(有提示public.xml文件的具体哪一行的值没有定义),直接到values语言包文件夹下的public.xml文件中删除没有定义的那几行代码。
(这个需要一个积累的过程,多操作之后就知道怎么解决了)