ChatGPT遊戲漢化

ChatGPT漢化1款Unity製ADV視覺小說

作者 水御

前言

現在ChatGPT在很多東西都能夠派上用場,那麼用在ACGN領域也沒問題吧?於是我就想著把我Steam上面的ADV日文視覺小說「D.M.L.C.!歡鬧炸戀生死鬥」這款遊戲以ChatGPT漢化,這樣我應該就會比較有動力繼續把它看完了。

這時候我還不曉得,我用ChatGPT漢化的時間遠比遊玩時間還要長,花在漢化的額外花費比遊戲本體還要貴……

這篇文預計能對你有甚麼幫助?

  1. 使用ChatGPT漢化流程,了解提取、匯入翻譯文本的方法。
  2. 提供對優化翻譯的一些想法。
  3. 少踩一些我踩過的雷。
  4. 了解OpenAI API大概的行情(使用上需要付費)。
  5. 可以參考一下GPT的程式碼,和我改過的程式碼(文章最後有下載連結)。

總之先跟ChatGPT打聲招呼,依據我的事前調查,像Unity與UE這類遊戲開發引擎有專門處理語言相關的插件,比較容易使用網路上各式開源軟體來進行提取文本、翻譯、匯入資料庫的行為,也讓ChatGPT有機會成功幫助我漢化!

ChatGPT漢化

漢化開始

接著可以開始按照它的提議來依序進行:

  1. 利用AssetStudio將Unity遊戲內部的Asset檔案提取出來,搜尋與文本相關的檔案,並進行輸出。
  2. 利用Chat GPT進行翻譯。
  3. UABEA匯入更新後的文本資料,並更新Resource.assets,完成翻譯。

檢查資源格式

總之先開啟Steam->遊戲設定->管理->瀏覽本機檔案,就可以看到本地的資料夾囉!這時候可以先檢查一下是不是Unity類型的遊戲。

如果資料夾裡面的檔案有疑似Unity名稱相關的檔案,基本上就能夠確認這個遊戲是使用Unity製作的囉!或是進入遊戲畫面時會跑出的「Made with Unity」也是辨別方式之一。
另外MyBackUp是我在進行漢化之前先行將所有資料進行備份用的,之後就可以安心對檔案動手動腳囉!

AssetStudio搜尋及提取文本

再來就是要把遊戲內部的文本檔案給提取出來,如果你直接使用筆記本開啟內部檔案的話,基本上都會是亂碼哦。
所以我們這邊要使用它所建議的工具AssetStudio來幫助我們提取文本。
先到AssetStudio的Github下載軟體:AssetStudio GitHub

從Release頁面下載最新的版本,之後解壓縮檔案,AssetStudio本身是免安裝的,之後只要直接點開AssetStudioGUI.exe就能夠直接使用了。

執行AssetStudioGUI.exe執行程式後點選File->Load folder

選擇遊戲路徑(預設為C:\Program Files (x86)\Steam\steamapps\common\DMLC!):

之後它會跑一段讀取時間,把Unity內部的資源檔案撈出來。
再來我們要找文本檔案:選擇Filter Type->TextAsset,並且將欄位切換到Asset List。

點選任一檔案就可以查看裡面內容了,稍微看一下可以知道,scenario系列基本上就是遊戲的腳本,也是我們要翻譯的重點內容。

接下來就可以將這些檔案通通輸出,然後交給ChatGPT進行翻譯啦!
選取所有檔案後,按下右鍵後,選擇ExportSelected assets進行輸出(總之就先找一個地方儲存吧)。
(註:裡面無法用Ctrl+A進行全選,請善用Shift或Ctrl鍵來進行檔案的多選。)

檔案輸出後,如果想要觀看內容的話可以使用筆記本打開。

Chat GPT進行翻譯

後面直接丟給ChatGPT進行翻譯,會發現它一次只會翻譯有限的行數,原因是因為它只能輸出一定量的內容。

於是ChatGPT就對我推銷了一個東西,叫做OpenAI Platform
簡單講就是可以讓你的應用程式使用OpenAI的功能,實現本地端的ChatGPT,就不會受到輸出限制的問題,可以讓它翻譯整個文件。

使用OpenAI的API有幾道程序需要先準備:

  • 建立Secret Key
  • 儲值金額

先進入到它的頁面,登入帳號後,按下Create new secret key。

輸入Name(主要是讓你自己識別用),Project直接選Default project就可以了,輸入完後就按下Create secret key,完成建立。

後面就會生成一串你個人的key,到時候使用API的時候,會透過這組key找到你的帳號,計算用量及費用。

再來為你的錢包儲值,一次最小需要儲值5美元,這邊就看個人需求。
按下左側的Billing進入你的錢包,按下Add to credit balance進行儲值。
(供參考:我完整漢化這個遊戲大約花費4~5美元左右,另外花5美元進行一些實驗。)

接著只要在程式裡面連結個人的secret key就可以使用OpenAI的API了!
之後就使用ChatGPT給我的翻譯程式,在本地端進行翻譯,大概翻譯10分鐘左右就完成第一個文本翻譯了。

UABEA將翻譯結果匯入資源檔

當你打算匯入翻譯好的scenario01的時候你會發現,遊戲資料夾根本就沒有scenario01這個檔案。
所以在這之前,我們先回到AssetStudio。
對scenario01檔案按下右鍵,並按下Show original File,它便會自動導向它的原生檔案resources.assets,也就是我們要重點處理的資源檔。
(我有嘗試過對其它檔案查找他們的原生檔案,文本類的原生檔皆為resources.assets。)

找到這個原生檔案後,我們就可以來將翻譯後的檔案進行匯入了。
在那之前可以先把AssetStudio關掉,以免造成後面匯入失敗。

再來我們要使用UABEA工具來幫助我們進行匯入的動作,載點:UABEA Github Release

進入網站後,下載uabea-windows.zip進行下載。

UABEA一樣是免安裝的,可以直接執行UABEAvalonia.exe。

開啟UABEA後,選擇剛剛資源檔resources.assets。

按下Ctrl+F進行搜尋,輸入scenario01按下OK找到目標檔案。
(註: 這個搜尋系統需要把字完全打出來,只打”sce”是搜尋不到的,要打完整的”scenario01″)

點選scenario01,再按下Plugins按鈕。

選擇import.txt後,按下OK按鈕。

選擇剛剛翻譯完後生成的scenario01檔案。

按下Crtl+S進行保存後,即完成匯入的動作,後續就可以打開遊戲進行確認啦!
(註:如果儲存的時候有失敗訊息的話,可能是AssetStudio沒有關閉所導致。)

完成結果

直接丟進翻譯後匯入遊戲文本的結果:

  • GPT沒有自動幫文本換行。
  • 人名的顯示不見了。
  • 上標沒有正確處理好,多餘的字符容易影響體驗。

———–以上是ChatGPT教我如何抽換文本以完成翻譯的方法——

翻譯優化

ChatGPT的漢化程度我覺得至少有到90%的程度,再來就得想辦法優化到99%才行了,剩下最後的1%可能還是得靠人工來進行處理,不過也比全部手工要好上百倍啦!
開啟遊戲後還是會發現不少問題,因為只是單純讓GPT對所有日文的部分進行翻譯並匯入文本。
因為我們提取出來的不是單純的文本,而是視覺小說的腳本
其中腳本包含很多東西,包括:

  1. 對話文字內容。
  2. 發話者名稱。
  3. 文本內的特殊tag,如平假名上標(%rbs, %rbe)、顏色標籤(%co1, %co2, %coe)等。
  4. #L、#X、#MesName、#MesSta等帶井字號開頭的腳本控制函式。

如果不先進行預處理的話,可能會對沒必要的文字進行翻譯,或是讓某些tag消失甚至影響翻譯內容或品質。

文字檔分類

  • 遊戲腳本:控制整體遊戲的運行,所有文本、圖片、流程的操控。
  • CSV文件。

再來就開始進行分析,並且處理後交由ChatGPT重新進行翻譯吧。

遊戲腳本

以下是腳本的節錄,經過我的個人分析後,有日文的部分包括:

  • #L: 這個是出現在畫面上方的提示,需要翻譯。
  • #X: 是遊戲定位點,不會出現在畫面上,通常會配合#Jump來使用,不需要翻譯。
  • #Jump: 跳躍場景用的函式,不會出現在畫面上,不需要翻譯。
  • #MesName: 這個是用來放說話者的人名用的,需要翻譯。
  • #MesSta()+#MesEnd(): 這是對話框裡面的文字,這兩個函式是一組出現的,只要把夾在這之間的文本題取出來進行翻譯即可。
  • #Select: 選擇,第一個參數為選項數量,後面的則是對應第n個選項的文字,選擇性翻譯(我選擇略過這項,有時候翻譯有標點符號的句子容易有問題,預處理很麻煩、複雜,且容易出問題)。
  • #Tips: 是遊戲內的紀錄、筆記、說明等項目,第一參數會顯示在跳出的頁面上,後面依序為分類編號、日期編號、Tips ID,選擇性翻譯。(這個部份我也沒翻譯,理由同#Select。)

特殊字符:

  • %co1 %coe: 這是顏色標記,前面的%co+數字是對應顏色的ID,後面的%coe是顏色標記結束。
  • %rbs %rbe: 這是用於漢字的注音上標。

上面的腳本是我改過的,呈現結果如下圖:

腳本檔案預處理+翻譯

#開頭的字串

前面有帶#字號的字串,都先進行拆解後,再給ChatGPT進行翻譯比較保險,因為GPT有機率會將那些符號給去掉。
因此大致邏輯如下,以#L(4/16(月)放課後)為例。
將字串拆解成三個部分”#L(“, “4/16(月)放課後”, “)”,然後將中間的字串進行翻譯。
於是”4/16(月)放課後”->”4/16(一)放學後”,
最後再將前後的字符串接起來,最後就會變成”#L(4/16(一)放學後)”了。


#MesName人名

這部分我選擇用對應表來進行處理,因為有時候翻譯的名字會不一致,而且句子太短它很常會給「這個句子太短」、「看起來像是個人名」這種回應。
先透過「GPT給的函式提取所有人名」->[GPT進行翻譯並建立對應表]->「在翻譯的時候針對#MesName進行對應表人名替換」

#MesSta#MesEnd對話文本

對話是翻譯最重要的部分,對話夾在#MesSta與#MesEnd兩者之間,因此需要把它提取出來,並且把多行的句子組合在一起,再一起進行翻譯。

%co1%coe顏色標籤

顏色的標籤我選擇把它移除,因為留著會影響翻譯的品質。

%rbs%rbe上標標籤

中文不需要平假名上標,雖然有些視覺小說會用上標來標註額外意義,但佔比相當少,留著一樣會有影響翻譯品質的問題。

完成的結果

經過處理並翻譯後的腳本:

遊戲畫面:

結果分析

老實說在一開始我是想要保留顏色和上標的,但我發現這件事情的困難點在於,日文翻譯成中文後的字數並不相同,所以難以直接將標籤插回句子。

ChatGPT有提供一種PlaceHolder的寫法,例如把「%co1 顏色1:これはテスト文字列です。 %coe」設置成一個”__COLOR1__”這樣的代名詞,然後把其他句子翻譯後再還原。
但實際嘗試後我發現會有兩個問題:

  1. PlaceHolder的句子和其他分離的句子必須各自翻譯,因此不會有上下文關係,翻譯的效果很差(還不如直接google翻譯就好)。
  2. ChatGPT有時候會在翻譯的過程中把”__COLOR1__”這種無意義的東西直接刪除,導致還原的程式出錯。

因此這個部分我就捨棄了,畢竟這個顏色或上標其實對我來說沒有這麼重要。
如果真的很在意的話,可以用程式提取有顏色或上標的句子,然後手動修改我覺得也可以,實際上顏色標籤並不多,中文也不需要注音上標。

CSV檔案

用逗點隔開的資料格式,如果不了解CSV檔案的人可以問一下GPT,這裡不贅述哦。
CSV檔案比較容易處理,比較重要的是notedef這個檔案,它記錄這個遊戲裡面的所有Tips資料。


這個部分主要需要處理的有三個部分:

  • 主題:這個部分直接丟進去翻譯即可。
  • 內容:需要特別處理,句子的格式比較特殊,使用@n號來進行分行,並且會在尾部補齊總共7個@n符號。
  • 分類:這個部分有固定的名稱,所以我是用對應表的方式來處理。

CSV檔案使用excel開啟的呈現:

CSV檔案用txt打開的樣子:

遊戲裡面的畫面:

CSV檔案預處理+翻譯

這邊主要針對內容的字串來進行處理。

標題」處理

可以讓GPT直接進行翻譯,但有時候句子太短它會有意見,導致翻譯有問題,翻譯後要再次確認。

分類」處理

先使用GPT翻譯後,使用對應表直接替換:

內容」處理

Tips裡面用@n來表示換行字元(一般程式碼是用’\n’,可以等值理解),這邊使用第一個Tip來進行解說:

告白=爆死!?,津野さんと乙羽から、まさかの愛の@n告白……と思いきや、なんか僕は、@n告白されると爆死するようになっちゃ@nったらしい。なんでだ。@n@n@n@n

如果直接丟進ChatGPT翻譯的話可能會影響品質,而且日文翻譯成中文的長短也不會一樣,所以換行的部分需要另外處理。

處理邏輯:

  1. 把@n全部去掉。
  2. ChatGPT進行翻譯。
  3. 依據每16字一行的長度來插入@n字符,16字是計算畫面上一行有多少字所得來的,漢化和日文的子體的佔格是相同的(每個遊戲可能會有所不同)。
  4. 最後在尾端補齊總計7個@n字符。

這個部分的程式碼我都是讓ChatGPT幫我完成的,以下為核心函式:

最後,要匯入資源檔之前要先確認一件事情,就是檔案的最後一行不能是空白,否則的話會失敗。

完成的結果

總結

越細緻的要求,GPT往往越難完美達成,像是去除顏色、上標的標籤這類細節處理建議都用程式來處理,讓GPT專注在翻譯這塊就好,不然很容易出問題。
如果單純要求翻譯,不考慮語氣的話,使用Google Translate的API說不定會比較好,不會有奇奇怪怪的註解和解說出現,害我修得半死。不過我也沒實際實驗過Google Translate,所以也不清楚會不會有其他問題。

如果是專業翻譯的話,還得考慮潤飾文句、保留文本空白處、適當文長時分行等。文字顏色的部分可能也需要保留,上標的部分可以在需要額外註解的時候補上(可以補充一些文化差異上的註釋)。

UI的部分我不要求,簡單的日文我是看得懂的,所以沒差。
除非是給別人用的情況才會考慮吧,不然的話劇情文本看得懂就足夠了。


時間花費的部分(28小時左右):

  • 學會從使用AssetsStudio、OpenAI platform、UABEA、第一個翻譯檔完成:大約5~6小時。
  • 嘗試優化自動化文句預先處理及實驗:大約7~8小時。
  • 日文名字提取並製作對應表:2小時。
  • CSV檔案翻譯處理:4小時。
  • 手動修改翻譯不足處:6小時。
  • 遊戲測試、確認文本:2小時。

金錢花費(10美元左右):

  • 整體翻譯:4~5美元
  • 一些實驗:1美元
  • 開錯OpenAI模型(用到gpt-4o):4美元
     

題外話

老實說我一開始本來想要漢化「死印」這款遊戲的,但是它並不是由Unity製作的,然後我花費了一個下午的時間讓ChatGPT想辦法,仍然無解,只好作罷。
所以如果遇到的是自製引擎製作的遊戲,使用ChatGPT成功漢化的機率就會很低,這種時候只能期待官方漢化、或是某大神來進行漢化了。
後來我無聊問了GPT關於漢化法律相關的問題,如果把漢化後的資源包進行散佈的話,似乎是會有觸法的問題,但是多數小廠商不會為了這種事情提告就是了。
當然我這篇文章主要還是以GPT實現漢化的流程來進行撰寫的,並沒有打算分享資源包哦(主要是我翻譯的也不完整啦)。

如果ChatGPT本身能夠幫助我做到這件事情的話,幹嘛還要看這篇解說文章

這個自問自答讓我反思一下寫這篇文章的動機以及其價值。
首先呢,這些東西是我在問了ChatGPT很多次之後,嘗試、犯錯、統整後的產物,實際執行的過程會有很多小問題。
然後把這些小問題再拿回去問GPT,大概會有90%能夠解決,剩下的10%就靠我個人工程能力的直感來解決。

那麼沒有這10%能夠漢化嗎?
可以,只不過會辛苦一點,手工的部分會變得更多,花的時間也就更多。

另外,「D.M.L.C.!歡鬧炸戀生死鬥」這款遊戲,官方在半年前就已經公告要出中文翻譯了,所以真的對這款遊戲有興趣的話,就等一段時間吧。

最後感謝各位觀看,歡迎轉載文章,但請附上出處、作者,謝謝各位的觀看。

程式碼連結:Google雲端
巴哈小屋:https://home.gamer.com.tw/homeindex.php?owner=gear14789632

你或許也喜歡

給予評論