2022年4月6日 星期三

殭屍毀滅工程 - 模組翻譯教學 Part.5 自己做語言文本(環境選單篇)

 前言 

這是第三篇 "求人不如求己" 系列,讓你不用看模組作者的臉色也能自己做出語言文本。如果你還沒看過前面兩篇,可以先去看一看:物品篇配方篇。如果之後還有什麼發現,我會再補充上去。

要注意我會在文章裡面省略很多我之前在基礎知識講過的東西,所以你最好是已經先看過了那兩篇基礎知識,否則你可能會看不懂:基礎知識(上集)基礎知識(下集)

以下為本篇章節:
1. 俄羅斯人的心得文
2. 我們開始吧
3. 再做一次&注意事項
4. 另一個範例

 俄羅斯人的心得文 

我在一開始參考了很多有提供語言文本的模組,也摸索不出來那些滑鼠右鍵的環境選單到底是怎麼來的,所以我就用估狗搜尋,然後很幸運找到了一篇俄羅斯人在2014年7月14日於PZ官方論壇分享的心得文:HOW TO TRANSLATE EVERY MOD A-Z,就是這篇心得文解開了我的疑惑,感謝這位叫做mr.TPATATA的作者。

我現在就以一個不會寫程式的人的角度來解釋這些東西:簡單來說,我們在遊戲裡面的那些用滑鼠右鍵產生的環境選單,除了配方文本之外,其他全都是直接寫在特定的Lau檔案裡面。所以理論上來說,你直接在那個特定的Lau檔案裡面找出那個字串,然後直接改成我們要的就可以了。
BUT!人生就是有這麼多的BUT!
但似乎是因為語言編碼的關係,所以對於我們這種非英語系的人來說,直接編輯Lau檔案是不行的,如果強行更改的話,翻譯好的字串會變成亂碼,所以我們需要讓遊戲去別的地方抓取關鍵字串,而這個用來引導遊戲的語法就是getText("")

看到這個getText(""),就終於都說得通了。因為我之前參考的那些有製作語言文檔的模組裡面,確實都可以在Lau檔案裡面看到這個語法。原來如此,這樣我就全部都懂了。



 我們開始吧 

此次跟物品篇一樣,用Eggon's All Doors Are Yours這個模組來示範。這是一個可以把遊戲裡面的門直接拆下來然後裝在別的地方的模組。但是這個作者只有做沙盒設定的語言文本,除此之外全都沒有做。


一開始我們就是在遊戲裡面查看這模組的環境選單,可以知道主要就在這兩個地方:

找出字串
那麼我們第一步要做什麼呢?我們第一步就是先找出關鍵字串被模組作者放在哪裡。依照mr.TPATATA所述,我們只要在一個地方找就可以了,那個地方就是media/lua/client。以本次範例來說,打開client資料夾之後長這樣:

這裡有六個Lua檔案,是要找到眼睛脫窗嗎?!當然不是,我們可以用Notepad++的搜尋功能去快速找出來。怎麼做呢?很簡單,我們先把這六個Lua檔案全部丟到Notepad++打開來,然後用Ctrl+F叫出尋找功能,輸入關鍵字串,並且選擇右邊的 "在所有開啟的文件中尋找"。

這樣就可以馬上找到了,搜尋結果會放在畫面下方,滑鼠移過去點兩下就可以直接跳到找到字串的地方,像這樣:
Notepad++幫我找到了遊戲裡面的 "Install door" 這個字串在EADAY_ContextMenu.lua裡面,所以其他五個檔案就可以關掉了。然後你可以考慮在我們開始修改之前,先備份一下這個Lua檔案,以防萬一。


加上語法導向指定的語言文本
找到字串在哪裡之後,我們就要給它getText(""),像這樣:
我跟你說,你這樣還只是做了一半而已,就好像你只是放了一個告示牌,但是告示牌上面還沒有寫上任何內容。

所以接下來怎麼做呢?依照mr.TPATATA所述,我們要做一個語言文本。mr.TPATATA自嘲自己很懶,所以他自己的做法就是只做一個叫做 "UI_RU.txt" 的語言文本,然後就可以把想要翻譯的字串全部都引導到UI_RU.txt裡面去。因此換句話說,你的語言文本要取什麼英文名稱都可以,可以效仿mr.TPATATA那樣,去正體中文文本那邊拷貝一個UI_CH.txt來用也是可以的,重點就是名稱後面是一個下底線+我們的語言代碼,而且是txt檔案。

我其實對這個沒有特別想法,但其實 "環境選單" 是業界專有名詞,你可以在維基百科看到這個條目,而環境選單的英文就叫做 "Context Menu",所以我就去正體中文文本那邊拷貝了一個ContextMenu_CH.txt來當作我這次要給遊戲讀取的語言文本,然後把不要的項目刪除,像這樣:

現在已經製作好了打算要給遊戲讀取的語言文本了,接下來我們要給Install door這個字串一個ID,這個其實也是可以自己設定,條件就是這個ID名稱只能英文大小寫就行了,此外,這似乎不能有空格,但是你可以改用下底線。說是這樣說,但為了方便辨識,所以絕大多數人的選擇是把想要翻譯的字串直接就做成ID,所以我就給它一個叫做 "Installdoor" 的ID,然後也順便把我要翻譯的文字寫上去,像這樣:

都設定好了之後,我們就直接複製等於前面的那一串,然後切回Lua檔案那邊,把原本的字串替換成我們剛才拷貝的那一串,像這樣:

這樣遊戲就會知道它要去哪裡抓我們翻的句子了,成果長這樣:


 再做一次&注意事項 

順便來翻一下同一個模組另一個環境選單。同樣地,我們去找出那句話放在哪裡。但是因為剛才有找過,所以八九不離十一定也是在同一個Lua檔案裡面,結果就跟我猜測的一樣,而且也在沒幾行的地方同時找到另一句話的位置(紅框處):

既然是放在同一個Lua檔案裡面,那就直接新增在同一個文本裡面好了,所以這是我新增好的模樣:

設定好之後就把Lua檔案也改好:

成果長這樣:
簡而言之,這比物品和配方還要再稍微複雜一些,但只要懂了其中的原理,就不會覺得難:找出字串 --> 製作文本 --> 引導到指定的文本抓取翻譯內容。

不過這裡要注意因為我們這次有修改了Lua檔案,所以未來的哪一天如果你想把你的翻譯另外做成一個獨立模組的時候,就要記得把語言文本連同修改過的Lua檔案一起從模組裡面移走。沒有這個修改過的Lua檔案,你的語言文本就無法生效了,所以要把Lua檔案也一起帶走。



 另一個範例 

希望到目前為止你都有搞懂,那麼接下來我就來給大家示範另一個範例。這個是Eggon's Have I Found This Book???,跟剛才的範例是同一個作者。這個是可以用來輕鬆辨識哪些技能書你拿過了沒有,而實際上可以套用的功能甚至已經不只有技能書,也能套用在錄影帶和CD上面,可以在設定的地方做調整。

老樣子,我們先進去遊戲裡面看模組裡面的東西,主要應該就是這兩個地方需要翻譯了:

老樣子,我們把media/lua/client裡面的Lua檔案全部打開來去找,結果居然找不到:

難道說,用來設定的Lua檔案並不在這個資料夾裡面?那我就把模組裡面其他地方的Lua檔案也跟著打開,然後再找一次,也是沒有!

連這樣也找不到,那就是關鍵字的問題了,看樣子我不應該用整句話去搜尋,我換成只用兩個單字看看,結果就找到了:

從這裡可以看到作者的設定不是單純的一整句話,而是一個句子的格式:
模組作者現在設定的句型是這樣:
"Haven't found this " .. itemName .. " yet." .. EHIFTB.Options.notFoundSuffix

我對這個句型的解讀的是這樣:
"找到過這" .. 物品名稱 .. "還沒有" .. 不重要的東西

我們中文的文法是可以把被我弄成藍色的那兩個字串合併,所以我認為我應該把句型改成這樣:
"還沒有找到過這" .. 物品名稱  .. 不重要的東西

所以我把句型改成這樣:
getText("Tooltip_foundyet") .. itemName .. EHIFTB.Options.notFoundSuffix

然後文本那邊我就翻成這樣:
Tooltip_foundyet = "還沒找到過這本",
(順帶一提,我自己是因為有觀察到TheIndieStone會習慣把這種物品註解集中放在一個叫做Tooltip的語言文本,所以我就去我們正體中文文本那邊拷貝了一份Tooltip_CH.txt來作為目標文本。但其實這裡基本上你想要引導遊戲到什麼名字的文本去讀取翻譯都是可以的。)

改好之後,我們就進去遊戲裡面看:
嗯... ... ...看樣子連那個 "book" 都是模組作者自己另外設定的,那麼我們就去找出book這個字放在哪裡。

同樣把所有Lua檔案打開來搜尋,會搜到不少東西:

看起來很多,但其實你只要回去看一下作者設定的那個句型,就可以知道我們要找的就是itemName = "book" 這一項。

而且因為已經知道這模組不是只有幫忙偵測自己找到過的書,還可以偵測錄影帶和CD,所以我就把同一個檔案裡面所有被設定成itemName的字串全部引導出去:

而且因為我們的中文系統有對各種事物設定了各種量詞(本、卷、張),這種文法是英文沒有的,於是我就在語言文本上面調整成這樣:

我就是這樣處理一個被設定成句型的文本,這就是修改後的成果:

注意事項
原則上這樣就可以了。但如果你有打算把這些翻譯跟別的翻譯放在一起變成屬於自己的翻譯合輯的話,我會強烈建議在文本ID的前面多加一個模組的縮寫名稱,這樣就不太可能會出現跟別的模組重複的文本ID了(也別忘了Lua檔案那邊的也要跟著改)。像這樣:


有關蓋東西的環境選單
我說的就是那個在環境選單選【木工】和【金工】的那些建造選項。如果你要翻譯的模組是這種建造建築物的東西,那麼找字串的方法是一樣的,也都是找到字串之後用getText("")引導出去。只是可能稍微沒有那麼好找就是了,有很高的機會出現超過一個搜尋結果,讓你不知道哪一個才是你要的,但我相信這不會難倒你們。如果有遇到不錯的模組可以拿來示範,我到時候再來補充。



如果你已經搞懂這個了,你也可以看一看這兩篇:

沒有留言 :

張貼留言

矮控的FB粉專已經被駭客搶走,有事可以改去巴哈私信給我(帳號名稱是eva08maicy02)。

關於我自己

我的相片
阿就是不想看到伸手文,所以才把遊戲攻略寫在這~(挖鼻孔)