# Unreal 遊戲翻譯修改教學──如何拆包、修改翻譯、重新打包成 pak 因為前陣子終於掌握了如何拆包 Unreal 遊戲並且重新打包的技術,這項技術能用來把僅有簡體的遊戲翻成繁體,也有可能把無中文的遊戲翻成中文,因此開一篇來紀錄步驟,另一方面也是防止我忘記。 這篇教學目的是讓有一定程度軟體操作基礎,但是對於 Unreal 不熟的人也能完成 Unreal 拆包翻譯而撰寫,文中不會寫 code 但是會操作不少軟體。 因為我之前也是找了很久才終於研究出來,相信也有其他人需要面向不熟 Unreal 的人的教學。 為了方便其他人重現,在此使用 [Last Train Home](https://store.steampowered.com/app/1469610/Last_Train_Home/) 的 Demo 版作為測試對象,因此任何人都可以試著重現。 以下是步驟: 1. 下載必要的軟體 會用到這三樣:[FModel](https://github.com/4sval/FModel/releases)、[UE4LocalizationsTool](https://github.com/amrshaheen61/UE4LocalizationsTool/releases)、[unrealpak](https://github.com/btwOreO/unrealpak) 其中我用的是 FModel v.4.4.3.6、UE4LocalizationsTool v2.7、[unrealpak v.44aea39](https://github.com/btwOreO/unrealpak/tree/44aea39459bbbf582e135079ebcf7e1fd32b13c5)。 unrealpak 沒有 release 只能整包下載,個人建議軟體下載最新版,不過使用新版可能會有部分 UI 和我提供的教學不同,如果新版有什麼問題的話可以試著換成我用的板本,其中 UE4LocalizationsTool 已經封存所以不會更新。 2. 使用 FModel 拆包 a. 用 FModel 開啟 LastTrainHome Demo 開啟 FModel 並且選擇 LastTrainHome Demo,首次開啟你可能會需要手動指定遊戲路徑,在 Directory 選好路徑並且填好 Name 後按下右下的加號,遊戲會加入清單之中,下次只需要從清單中選擇即可。 ![](https://i.imgur.com/CBI34p2.png) ![](https://i.imgur.com/LZ1Z9Ie.png) b. 確認是否加密 觀察左側欄的檔案是否如下圖有紅色圖示,如果有的話代表這個遊戲有加密需要解密,接續 2-c. 的步驟;否則代表不需要解密,接續 2-d. 的步驟。 有加密的 pak 如果雙擊試圖打開,右下的 console 會顯示 [ERR] An encrypted archive has been found. In order to decrypt it, please specify a working AES encryption key。 ![](https://i.imgur.com/e8FQ4vq.png) c. 解密遊戲 遊戲有加密,需要找到對應的 AES encryption key 才能繼續,目前我所知道的是可以去[這個網站](https://cs.rin.ru/forum/viewtopic.php?t=100672)的 Keys 部分嘗試找該遊戲的 key,如果這邊沒有或是 key 不管用的話只能去尋找其他提供來源。 點擊 Directory > AES 開啟 AES 輸入視窗,如下圖輸入我們在網站中取得的 key,我當前用 0xD23CE5798C0848BD763A66A732FA80A221C7F898723ABB6C9846BA6B116F2DBA 是會成功的。 ![](https://i.imgur.com/4PLT2nv.png) d. 尋找 Localization 資料夾 ![](https://i.imgur.com/Fkb9eCc.png) 已解鎖或是未加密的遊戲會長這樣,雙擊這些 pak 會跳到 Folder 分頁,嘗試在 Folder 分頁裡面 Train/Content 資料夾下找到 Localization 資料夾,一直找遍各 pak 直到找到為止。 ![](https://i.imgur.com/OyhlwK9.png) 這邊不保證 Localization 不會分散在不同的 pak,這種情況接下來的步驟就要對多個 pak 進行操作。 e. 對 pak 進行拆包 對於包含 Localization 資料夾的 pak,要將 Localization 資料夾的內容都拆出來;我們對 Localization 右鍵 > Export Folder's Packages Raw Data (.uasset) 執行拆包。 ![](https://i.imgur.com/uCxE0V6.png) 拆完之後資料夾結構應該會如圖:FModel.exe 旁有 Output 資料夾,Output/Exports 下可以找到 Train/Content/Localization 內的檔案。 ![](https://i.imgur.com/ninBoSB.png) 3. 修改翻譯 經過上述步驟後,現在你可以在 Localization 找到遊戲的所有翻譯,一般修改翻譯會需要修改所有 .locres 檔案,這邊我們象徵性的修改一個翻譯以證明這個方法成功就好。遊戲正常的主畫面如下,我們的目標是把畫面中的新旅程改成「新旅程 20240908」。 ![](https://i.imgur.com/mnxN4hU.jpeg) --------------------------------防盜退支符-------------------------------- ![](https://i.imgur.com/qaMccXS.jpeg) --------------------------------防盜退支符-------------------------------- a. 找到圖中路徑的 Game.locres 檔案,拖曳進 UE4LocalizationsTool 開啟,就能看到翻譯。 ![](https://i.imgur.com/DwsIrW0.png) ![](https://i.imgur.com/7tz5XAa.png) b. 點 Tool > Export all text > No names 匯出所有文本到你方便的地方,但是盡量不要放在 Exports 資料夾內。 ![](https://i.imgur.com/wMIeHPL.png) c. 使用任何你想用的翻譯工具對匯出的檔案進行翻譯,如果你想簡轉繁或是修正中國用語為台灣用語,可以使用[繁化姬桌面版](https://zhconvert.org),這邊我們只用文字編輯器找到新旅程並且修改後儲存。 ![](https://i.imgur.com/YJEI0kI.png) d. 回到 UE4LocalizationsTool,點 Tool > Import all text > 選取剛才修改過的檔案,接著被修改過的翻譯會以橘底表示,有看到橘底就表示取代成功了,按下 File > Save 或 Ctrl+S 匯出新的 locres,直接覆蓋原本的 locres 檔。 ![](https://i.imgur.com/DA5zM1f.png) ![](https://i.imgur.com/WHN0CDP.png) 4. 重新打包 改好翻譯後,將 Exports 資料夾整個拖曳到 unrealpak 的 UnrealPak-With-Compression.bat 上進行打包。 ![](https://i.imgur.com/n2uB9qd.png) ![](https://i.imgur.com/PWVsIBO.png) cmd 跑完之後在 Exports 旁可以找到新打包的 Exports.pak 檔案,將這個檔案改名為你當初拆的 pak 檔名加上後綴_p,並且放進我們拆的 pak 同資料夾內。 ![](https://i.imgur.com/qhM0hnI.png) 這邊的例子我會需要改成 pakchunk0-WindowsNoEditor_p.pak,最終資料夾內如圖,_p 檔案是以補丁形式將部分內容取代掉,因此將檔案刪除就能還原,即使遊戲更新你的檔案也不會被覆蓋,不過假如遊戲內有新的字串你會需要重新產生新的 _p.pak。關於補丁你可以參考[這篇](https://buckminsterfullerene02.github.io/dev-guide/Basis/PakPatching.html?highlight=_p#pak-patching),還有另一篇提到了更詳盡的[補丁優先順序](https://www.cnblogs.com/shiroe/p/14809663.html)。 ![](https://i.imgur.com/ecw5o9o.png) 最終我們可以看到遊戲畫面中的新旅程被取代。 ![](https://i.imgur.com/FJXVFnX.jpeg) 本文參考了[Dead by daylight 簡轉繁](https://home.gamer.com.tw/artwork.php?sn=5392762)撰寫,並且將部分我無法重現的部分抽換成其他工具,並且使用免費遊戲作為示範方便他人重現。值得注意的是文中是產生 DeadByDaylight.locres 並且放在特定路徑下,並不是重新產生整個 pak 檔案,這是使用了 Unreal 自帶的外掛翻譯系統,假如遊戲有開啟這個系統的話就能以這種方式加入翻譯,如果不想打包 pak 可以試試這種方法。 本文為原創並且同步發表於[巴哈姆特](https://home.gamer.com.tw/artwork.php?sn=6000031)、[HackMD](https://hackmd.io/@nathan60107/Bk2W6Xo2R),禁止轉載。