欢迎光临散文网 会员登陆 & 注册

星露谷 DLL 类模组汉化教程

2021-05-15 20:48 作者:湖边的稻草  | 我要投稿

本文默认你已非常熟练所有模组的安装与配置

在星露谷物语模组的领头人 Pathoschild 的定义中,模组分为 Smapi MOD 和 XNB MOD,后者就不说了,前者 Smapi MOD 分为 DLL 模组和内容包模组。内容包就是那些以一些 json、 png 或者其他文件为核心内容构成的模组。而 DLL 模组则是以 dll 文件为核心内容的模组,一般是使用 C# 语言编写所有又叫做 C# MOD。

当然并不是必须用 C# 语言,VB 也是可以的(但是跨平台可能会出问题,1.5.5 版本已经换了运行库,VB 也能直接跨平台了)。不过这里还是先说清楚,C# 就是 C#,不是 C 和 C++,也不是那些奇奇怪怪的类似于 C,虽然语法都相似,但本质是完全不同的。

一直以来几乎没有人考虑过汉化那些 dll 模组,毕竟 dll 不像纯文本拿个记事本就能汉化,强行打开后都是一堆乱码。那么这类 dll 模组就真的没法汉化吗,其实不是的,其实你离代码只差工具罢了。

当然我知道你不会 C# ,不过没关系,我也不会(是真的)。汉化 DLL 类模组并不需要你一定会写 C#,只要没有英语恐惧症并且熟悉 Windows 基本操作和概念都可以跟着这篇教程轻松学会。

反编译汉化

先介绍最常用的汉化方式,反编译,也是最方便最快的方式。

首先要有反编译的工具,虽然 Pathoschild 在官方维基上提到了 ILSpyhttps://github.com/icsharpcode/ILSpy),不过这里不用它,因为它的功能不能满足我们的需要,而且代码呈现也不太舒服。

我们选择另一款功能完备的工具:dnSpy
直接在仓库下载发行版即可:https://github.com/dnSpy/dnSpy/releases
虽然好像已经不更新了,不过对于翻译工作来说也足够用了

当然下载没速度的话,懂的都懂

三个压缩文件都可以选择,我这里选择 dnSpy-netframework.zip
(对于 1.5.4 版本以及之前版本选这个,我这里的图就不更新了,以实际为准)

注意由于 1.5.5 已经更换了运行库为 .NET 5,所以对于 1.5.5 及以上版本的游戏,应该选择 dnSpy-net-win64.zip

解压后启动软件

启动后界面如图

左侧是程序集列表(程序集资源管理器),右侧是代码(当然现在还没有打开任何文件)
首先你要像上图那样把关键的程序集添加到列表中,其中包括游戏主文件和Smapi
因为很多模组都要依赖这些文件(也就是程序中的引用)

包括游戏根目录的这些文件:

  • 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

这里已经更新为 1.5.5 以及之后版本的文件了,1.5.4 以及之前版本自己看实际情况

这样就可以满足绝大部分情况了,其他的如果需要再添加就是

现在才是正题,找到你要进行反编译的 dll 文件,我这里拿 AudioDevices(2838)做演示

把它的 dll 文件像之前一样添加到程序集列表中
软件会自动添加它所依赖的通用库,你可能会看到突然多了很多程序集,不用管那些

展开你添加的文件,找到 ModEntry 类,如下图,从这个文件开始找搜索汉化的文本

比如这个模组需要汉化的文本只位于这一个 MakeAudioOptions 方法:

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

现在要编辑这个方法,在左侧列表中的方法上右键,选择编辑方法

你可以直接编辑类,不过范围越大越容易发生错误,所以应该尽可能精确到方法(但这不是必须的,某些情况需要较为熟练的代码经验来联系上下文来确保不会出错)

在新弹出的编辑窗口中,不应该出现任何红色的代码,下方区域也不应该出现任何错误输出

即便你不会 C# ,也尽可能保持 dll 的原语言来反编译,否则可能会导致问题,因为在编译的时候开发环境会优化代码,也就是说反编译出来的代码并不是跟作者原本所写的一致,极端情况下可能逻辑完全不一样。

然后将双引号内的文本,也就是需要翻译的文本直接换成目标语言的即可
注意不要添加多余的双引号,这些字符串在默认黑色主题下一般是这样的棕橙色

当然我还在这个模组的其他位置找到了需要汉化的文本

翻译完成后,点击编译,必须是没有任何错误,否则无法编译成功
如果报错缺少引用,先退出去加上再重新编辑编译

现在这些东西还在你的内存里,要保存到硬盘里就需要生成新的 dll 文件
文件菜单中,选择保存模块

选择保存文件的位置,然后点击确定即可

其他的配置基本上不需要更改,如果需要的话可以自行选择

现在你已经生成了新的已经汉化好的 dll 文件,把它替换到模组中。
注意 pdb 文件是调试数据库,不可以混用,如果你搞混了就直接删掉,反正运行时也不需要这东西。

然后启动游戏就行了
比如我这里做示范的模组,在启动游戏之后就可以看到已经汉化了

这是此前已经做好的汉化,我没有用写这篇教程时的文件

注意:不要看见个字符串就去汉化,有些字符串是用来传递值的,如果你改了就会出问题,所以这就是为什么最好是能看懂代码

工程生成

很多模组都提供了源码,只需要下载这些源码,在 Visual Studio 中汉化好之后生成即可
在生成过程中可能会因为环境没有配置好、找不到个别引用而造成无法生成
如果作者提供了工程,那么优先尝试工程,如果不行,再尝试反编译

继续以这个模组为例,下载开源工程(仓库)

解压后得到工程文件

打开 sln 解决方案文件(有关安装 Visual Studio 组件的教程,请参阅本文最后的内容)

找到 ModEntry.cs 文件

如果有其他需要汉化的位置请自行查找

打开后可能会是像这样满天红,很明显没有添加引用

在项目菜单中,选择添加引用

添加所需要的文件,如果模组本身就有其他 dll 记得也加上
如果你不知道要添加啥就把一开始提到的那些 dll 文件全部加上

那么在全部添加上后还是有一大堆错误怎么办呢?
其实可以尝试生成一下解决方案,项目依赖的 Pathoschild.Stardew.ModBuildConfig 会尝试自动补齐所有引用

当然如果不行的话我也无能为力了

Pathoschild.Stardew.ModBuildConfig 是所有 dll 模组都依赖的东西
它是 Pathoschild 编写的库,如果没有它,任何 Smapi 模组都不会实现

不要随意更改这个库的版本,这相当于模组所适配的 Smapi 版本

确认可以生成成功后再去汉化,避免前功尽弃,不然汉化了一大堆结果无法生成就悲剧了

汉化完成后,点击生成菜单,选择生成解决方案

生成成功后,在文件夹中找到 bin 文件夹(具体位置根据解决方案的配置可能有所不同)
继续打开 Debug 文件夹,可以看到 dll 文件和准备发布的压缩包文件已经准备好了

注意 Pathoschild.Stardew.ModBuildConfig 会自动在生成的时候把模组安装到你的游戏中

后面的事不用说了,一样的

关于 Visual Studio 组件的安装

有的人可能不知道 VS 组件安装的详细操作,这里简要说明一下

VS 不是 VS Code,那只是个文本编辑器,VS 是集成开发环境
请在微软官网下载在线安装程序:https://visualstudio.microsoft.com/zh-hans/vs/
选择 Community 社区版是免费的

对于星露谷的工作,在工作负载中选择如下内容

此时右边的可选组件可以都不要

单个组件中至少选择如下内容

注意:1.5.5 以及之后的更新,请使用 Visual Studio 2022
并在可选组件里勾选 .NET 5 运行时

关于发布许可

如果原作者不允许二次更改,切记不可将你修改后的文件发布到任何公开的网站上

如果你需要发布你的修改,请先向作者申请授权,如果作者已经寄了的,请务必在发布页面写上说明:所有内容归原作者所有

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

738313040

星露谷 DLL 类模组汉化教程的评论 (共 条)

分享到微博请遵守国家法律