星露谷 DLL 類模組漢化教程
本文默認(rèn)你已非常熟練所有模組的安裝與配置

在星露谷物語模組的領(lǐng)頭人?Pathoschild 的定義中,模組分為 Smapi?MOD 和 XNB MOD,后者就不說了,前者?Smapi MOD 分為 DLL 模組和內(nèi)容包模組。內(nèi)容包就是那些以一些 json、?png 或者其他文件為核心內(nèi)容構(gòu)成的模組。而 DLL 模組則是以 dll 文件為核心內(nèi)容的模組,一般是使用 C# 語言編寫所有又叫做 C# MOD。
當(dāng)然并不是必須用 C# 語言,VB 也是可以的(但是跨平臺(tái)可能會(huì)出問題,1.5.5 版本已經(jīng)換了運(yùn)行庫,VB 也能直接跨平臺(tái)了)。不過這里還是先說清楚,C# 就是 C#,不是 C 和?C++,也不是那些奇奇怪怪的類似于 C,雖然語法都相似,但本質(zhì)是完全不同的。

一直以來幾乎沒有人考慮過漢化那些 dll 模組,畢竟 dll 不像純文本拿個(gè)記事本就能漢化,強(qiáng)行打開后都是一堆亂碼。那么這類 dll 模組就真的沒法漢化嗎,其實(shí)不是的,其實(shí)你離代碼只差工具罷了。
當(dāng)然我知道你不會(huì) C# ,不過沒關(guān)系,我也不會(huì)(是真的)。漢化 DLL 類模組并不需要你一定會(huì)寫 C#,只要沒有英語恐懼癥并且熟悉 Windows 基本操作和概念都可以跟著這篇教程輕松學(xué)會(huì)。

反編譯漢化
先介紹最常用的漢化方式,反編譯,也是最方便最快的方式。
首先要有反編譯的工具,雖然?Pathoschild 在官方維基上提到了 ILSpy(https://github.com/icsharpcode/ILSpy),不過這里不用它,因?yàn)樗墓δ懿荒軡M足我們的需要,而且代碼呈現(xiàn)也不太舒服。
我們選擇另一款功能完備的工具:dnSpy
直接在倉庫下載發(fā)行版即可:https://github.com/dnSpy/dnSpy/releases
雖然好像已經(jīng)不更新了,不過對(duì)于翻譯工作來說也足夠用了

三個(gè)壓縮文件都可以選擇,我這里選擇 dnSpy-netframework.zip
(對(duì)于 1.5.4 版本以及之前版本選這個(gè),我這里的圖就不更新了,以實(shí)際為準(zhǔn))
注意由于 1.5.5 已經(jīng)更換了運(yùn)行庫為 .NET 5,所以對(duì)于 1.5.5 及以上版本的游戲,應(yīng)該選擇?dnSpy-net-win64.zip

啟動(dòng)后界面如圖

左側(cè)是程序集列表(程序集資源管理器),右側(cè)是代碼(當(dāng)然現(xiàn)在還沒有打開任何文件)
首先你要像上圖那樣把關(guān)鍵的程序集添加到列表中,其中包括游戲主文件和Smapi
因?yàn)楹芏嗄=M都要依賴這些文件(也就是程序中的引用)
包括游戲根目錄的這些文件:
Stardew Valley.dll(如果是 1.5.4 以及之前版本是:Stardew Valley.exe)
StardewModdingAPI.dll(如果是 1.5.4 以及之前版本是:StardewModdingAPI.exe)
xTile.dll
在?smapi-internal 文件夾中的這些文件:
0Harmony.dll
Mono.Cecil.dll
MonoMod.Common.dll
Newtonsoft.Json.dll
Smapi.Toolkit.CoreInterfaces.dll
Smapi.Toolkit.dll
TMXTile.dll
這里已經(jīng)更新為 1.5.5 以及之后版本的文件了,1.5.4 以及之前版本自己看實(shí)際情況
這樣就可以滿足絕大部分情況了,其他的如果需要再添加就是

現(xiàn)在才是正題,找到你要進(jìn)行反編譯的 dll 文件,我這里拿?AudioDevices(2838)做演示

把它的 dll 文件像之前一樣添加到程序集列表中
軟件會(huì)自動(dòng)添加它所依賴的通用庫,你可能會(huì)看到突然多了很多程序集,不用管那些
展開你添加的文件,找到 ModEntry 類,如下圖,從這個(gè)文件開始找搜索漢化的文本

比如這個(gè)模組需要漢化的文本只位于這一個(gè)?MakeAudioOptions?方法:

如果你找不到要漢化的文本的話可以使用查找工具

現(xiàn)在要編輯這個(gè)方法,在左側(cè)列表中的方法上右鍵,選擇編輯方法

你可以直接編輯類,不過范圍越大越容易發(fā)生錯(cuò)誤,所以應(yīng)該盡可能精確到方法(但這不是必須的,某些情況需要較為熟練的代碼經(jīng)驗(yàn)來聯(lián)系上下文來確保不會(huì)出錯(cuò))
在新彈出的編輯窗口中,不應(yīng)該出現(xiàn)任何紅色的代碼,下方區(qū)域也不應(yīng)該出現(xiàn)任何錯(cuò)誤輸出

即便你不會(huì) C# ,也盡可能保持 dll?的原語言來反編譯,否則可能會(huì)導(dǎo)致問題,因?yàn)樵诰幾g的時(shí)候開發(fā)環(huán)境會(huì)優(yōu)化代碼,也就是說反編譯出來的代碼并不是跟作者原本所寫的一致,極端情況下可能邏輯完全不一樣。
然后將雙引號(hào)內(nèi)的文本,也就是需要翻譯的文本直接換成目標(biāo)語言的即可
注意不要添加多余的雙引號(hào),這些字符串在默認(rèn)黑色主題下一般是這樣的棕橙色

翻譯完成后,點(diǎn)擊編譯,必須是沒有任何錯(cuò)誤,否則無法編譯成功
如果報(bào)錯(cuò)缺少引用,先退出去加上再重新編輯編譯

現(xiàn)在這些東西還在你的內(nèi)存里,要保存到硬盤里就需要生成新的 dll 文件
在文件菜單中,選擇保存模塊

選擇保存文件的位置,然后點(diǎn)擊確定即可

其他的配置基本上不需要更改,如果需要的話可以自行選擇
現(xiàn)在你已經(jīng)生成了新的已經(jīng)漢化好的 dll 文件,把它替換到模組中。
注意 pdb 文件是調(diào)試數(shù)據(jù)庫,不可以混用,如果你搞混了就直接刪掉,反正運(yùn)行時(shí)也不需要這東西。

然后啟動(dòng)游戲就行了
比如我這里做示范的模組,在啟動(dòng)游戲之后就可以看到已經(jīng)漢化了

注意:不要看見個(gè)字符串就去漢化,有些字符串是用來傳遞值的,如果你改了就會(huì)出問題,所以這就是為什么最好是能看懂代碼

工程生成
很多模組都提供了源碼,只需要下載這些源碼,在 Visual Studio 中漢化好之后生成即可
在生成過程中可能會(huì)因?yàn)榄h(huán)境沒有配置好、找不到個(gè)別引用而造成無法生成
如果作者提供了工程,那么優(yōu)先嘗試工程,如果不行,再嘗試反編譯
繼續(xù)以這個(gè)模組為例,下載開源工程(倉庫)

解壓后得到工程文件

打開 sln 解決方案文件(有關(guān)安裝 Visual Studio 組件的教程,請參閱本文最后的內(nèi)容)
找到 ModEntry.cs 文件

打開后可能會(huì)是像這樣滿天紅,很明顯沒有添加引用

在項(xiàng)目菜單中,選擇添加引用

添加所需要的文件,如果模組本身就有其他 dll 記得也加上
如果你不知道要添加啥就把一開始提到的那些 dll 文件全部加上
那么在全部添加上后還是有一大堆錯(cuò)誤怎么辦呢?
其實(shí)可以嘗試生成一下解決方案,項(xiàng)目依賴的?Pathoschild.Stardew.ModBuildConfig 會(huì)嘗試自動(dòng)補(bǔ)齊所有引用

當(dāng)然如果不行的話我也無能為力了

Pathoschild.Stardew.ModBuildConfig 是所有 dll 模組都依賴的東西
它是?Pathoschild 編寫的庫,如果沒有它,任何 Smapi 模組都不會(huì)實(shí)現(xiàn)


確認(rèn)可以生成成功后再去漢化,避免前功盡棄,不然漢化了一大堆結(jié)果無法生成就悲劇了

漢化完成后,點(diǎn)擊生成菜單,選擇生成解決方案

生成成功后,在文件夾中找到 bin 文件夾(具體位置根據(jù)解決方案的配置可能有所不同)
繼續(xù)打開 Debug 文件夾,可以看到 dll 文件和準(zhǔn)備發(fā)布的壓縮包文件已經(jīng)準(zhǔn)備好了

注意?Pathoschild.Stardew.ModBuildConfig 會(huì)自動(dòng)在生成的時(shí)候把模組安裝到你的游戲中
后面的事不用說了,一樣的

關(guān)于 Visual Studio 組件的安裝
有的人可能不知道 VS 組件安裝的詳細(xì)操作,這里簡要說明一下
VS 不是 VS Code,那只是個(gè)文本編輯器,VS 是集成開發(fā)環(huán)境
請?jiān)谖④浌倬W(wǎng)下載在線安裝程序:https://visualstudio.microsoft.com/zh-hans/vs/
選擇 Community 社區(qū)版是免費(fèi)的
對(duì)于星露谷的工作,在工作負(fù)載中選擇如下內(nèi)容

在單個(gè)組件中至少選擇如下內(nèi)容

注意:1.5.5 以及之后的更新,請使用 Visual Studio 2022
并在可選組件里勾選 .NET 5 運(yùn)行時(shí)

關(guān)于發(fā)布許可
如果原作者不允許二次更改,切記不可將你修改后的文件發(fā)布到任何公開的網(wǎng)站上
如果你需要發(fā)布你的修改,請先向作者申請授權(quán),如果作者已經(jīng)寄了的,請務(wù)必在發(fā)布頁面寫上說明:所有內(nèi)容歸原作者所有

最后自然是不要忘了加入我們
738313040