七、smali文件中文本的處理 相信跟著前幾章操作過的讀者可以發現,有相當一部分遊戲的漢化方法和軟件是類似的,只要會使用apktool反編譯apk文件,然後修改xml文件裡面的文字就能完成漢化工作。這類遊戲很適合新手來嘗試,類似於怒鳥那樣的遊戲漢化起來就相對複雜,最好積累了足夠經驗後再進行。 這章我們會用一個簡單的遊戲來說明下遊戲漢化的過程,大部分的操作和第二章裡的軟件漢化是類似的,主要是想用通過其說明下classes.dex文件中(反編譯後為若干smali文件)文本的處理方法和注意事項。 首先可以在http://android.d.cn/game/84.html下載到我們要漢化的遊戲:迪斯尼找茬。然後和第二章中一樣,用apktool對apk文件進行反編譯。 查看後發現,strings.xml文件中只有一個"Find It Disney",這是遊戲在手機裡顯示的名字。其他的文本,例如菜單項的內容都不在這裡。 對於這樣的文本我們有兩種處理辦法: 我們先用第一種方法,大部分的文本在layout文件夾下的xml文件裡,例如mainmenu.xml中是菜單裡的文字。(僅截取部分) 翻譯後: 都翻譯修改完之後,我們可以注意到,文本儲存的形式都是android:text="???"這個樣子,因而可以在emeditor中使用"android:text="作為關鍵字來搜索檢查一下。 其中E:\apktool\t是用apktool反編譯時設定的目錄。 檢查後沒有遺漏後,和軟件一樣再用apktool編譯,並簽名打包,安裝到手機進行測試。 測試的時候我們發現,菜單界面仍然有英文: 說明這部分文本被我們遺漏了,但是xml文件裡並沒有這句話("Sound:Off"在mainmenu.xml裡面有,但修改後並沒有顯示)。 另外一些提示框裡的文字(比如退出確認)也還是英文,一般這樣的文本是被存儲在了classes.dex文件中。 classes.dex文件存儲著apk應用裡主要的代碼,有時會有少部分文本被以代碼的形式存儲在裡面(也有時很多),利用apktool的反編譯功能使得我們也能對其進行修改。 前面說過,classes.dex被反編譯成smali文件,這實際是文本文件,可以用文字編輯工具打開。一般來說反編譯出來的smali文件很多,一個一個查看並不現實,因此我們只能用搜索的辦法,或者直接搜索需要的句子: 或者搜索關鍵字: 這是因為在smali文件中,文本(字符串)大多以const-string類型保存,因此搜索"const-string"就能找到它們。 我們將MainMenu.smali文件裡的"Sound: On"和"Sound: Off"修改掉,再次編譯看下效果。(注意編碼要設定為UTF-8無簽名) 同樣的方法,我們修改其他的遺漏文本,這需要我們盡可能的玩通遊戲來查看是否有遺漏。 這裡要特別提醒,當使用搜索"const-string"的方法在smali文件裡尋找文本時,最好能把要修改的句子事先在遊戲裡確認一下,我們可以看到,搜索出來的結果非常多,有些看似應該翻譯的句子實際是遊戲代碼的一部分,一旦修改很可能會導致運行出錯,因此一定要特別小心,盡可能少改動,並多做測試。 想做的更仔細一點的話,可以再修改下遊戲裡面的圖片(png格式),這樣一個遊戲的漢化就完成了。 via: 當樂漢化教程 |
2011-06-01
當樂漢化教程:七、smali文件中文本的處理
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言