|
|
本帖最后由 lcsy 于 2020-4-26 15:08 编辑
一,使用的工具
1,dnspy 链接:https://github.com/0xd4d/dnSpy/releases
2,汉化小助手 本人原创工具 链接: PS:易语言编写,某些管家软件可能不太友好.
26号更新小助手
针对正则表达式比较难搞,小助手加入一个暴力提取模式.举例
text("abcde") text("abcdf")
你想提取引号"" 中的内容
前面的文本填写 text("
后面的文本填 ")
暴力提取就可以了
教程针对没有提供外置语言文件的MOD,至于提供语言接口的MOD,直接改Languages下面的文件就行.不再描述
怎么判断 你看到{=xxxxxxxxx}字符串前面带类似这种的就是
,直接在 该MOD\ModuleData\Languages\CN\下建立一个module_strings-CN.xml文件 内容模板如下
<
本次以 PreventEscape1--也就是阻止俘虏逃跑 为例
PreventEscape发布链接:https://www.nexusmods.com/mountandblade2bannerlord/mods/134
二,正文
1,先加载MOD进入游戏,取一个关键词
这里我们关键词取 Base Chance 长点更好,不容易出现重复
1, 打开DNSPY工具
将游戏根目录\Modules\PreventEscape\bin\Win64_Shipping_Client\PreventEscape.dll拖进dnspy窗口里.(如图)
2.找到字符串所在的类文件,正常都是搜索关键词
,方法1 在dnspy右下方的框内搜索
,方法2 依次展开左侧树形列表,在右上角的窗口按ctrl+F搜索关键词
'方法3 点dnspy右上角的 文件---导出到工程 然后使用其它工具搜索定位 比如notepad++ ,sublime等,这种适合大型dll修改,目前骑砍2MOD都比较小,没必要!
已成功定位需要汉化的字符串在 PreventEscapeSubModule-setting下,再随便在里面翻看下,别的关键词是不是都在 如果没有再翻翻别的地方
然后再右上代码窗口内点右键 选择编辑类 会弹出一个新的窗口,
3 复制 新窗口(编辑窗口)里所有的代码,粘贴到一个你找的到的记事本中 ,点击编译
这时点击编译是看看有没有什么报错,如图这就是缺少运行库产生的问题
'解决方法
解决方法:
查看引用 把对应的文件拖进来
前两个在bin\Win64_Shipping_Client\目录里.也就是PreventEscape.dll同级目录
后面的在游戏根目录\bin\Win64_Shipping_Client\下面
简单粗暴点的办法就是把MOD目录下 bin\Win64_Shipping_Client\和游戏根目录下 bin\Win64_Shipping_Client\下在的所有dll都拖进来
无论你用哪种方法,只是在没有修改任何代码的情况下编译没有报错就行
-------------------------------------------------分割线(如果前面的操作没有成功,后面的就不用看了)-----------------------------------------------------------------
我们再回到\PreventEscape\Settings
检查下代码
<
[SettingProperty("Base chance (bandits), %/day", 0f, 1f, false, "Base chance that a prisoner will escape from bandits")]
[SettingProperty("Base chance, %/day", 0f, 1f, false, "Base chance that a prisoner will escape from noble")]
我标出的红字部分正好就是需要汉化的字符串.
如果你只是想试试,直接汉化引号部分的英文字符串(红色标注部分)就行.点编译,然后dnspy左上角文件--保存全部,就完成了
-------------------------------------------------分割线-----------------------------------------------------------------
但是我说过的汉化只需30秒完成,这部分想深入汉化的朋友可以看看
批量提取需要汉化的字符串.提取的字符串没有必要是纯文本.保持文本符号结构就行了.举个例子
text 不能汉化
"text" 可以汉化
单纯的提取text并替换成 文本
那么结果就是
文本
"文本"
如果用"文本"替换"text" ,就不会改变不能汉化的text.
结果如下
text
"文本"
暴力模式
26号更新小助手
针对正则表达式比较难搞,小助手加入一个暴力提取模式.举例
text("abcde") text("abcdf")
你想提取引号"" 中的内容
前面的文本填写 text("
后面的文本填 ")
点 暴力提取就可以了
正则模式
< [SettingProperty("Base chance (bandits), %/day", 0f, 1f, false, "Base chance that a prisoner will escape from bandits")]
[SettingProperty("Base chance, %/day", 0f, 1f, false, "Base chance that a prisoner will escape from noble")]
[SettingProperty("Price change rate, days", 0f, 100f, false, "Captors will ask half as much as [value] days before, and ransomers will agree to pay twice as much.")]
1,正则表达式 SettingProperty(\([\s\S]*?)\)]
分析上面的代码结构 发现其都是以[SettingProperty( 开头 以 )] 结尾 至于为什么不是以[SettingProperty开头 以 ] 结尾.看第三行代码 出现了两个]符号,会导致正则表达式提取错误.必须唯一出现才能正确取出
第三行代码如果以SettingProperty( 开头 以 ] 结尾 提取的结果是这样的 Price change rate, days", 0f, 100f, false, "Captors will ask half as much as [value
第三行代码如果以SettingProperty( 开头 以 )] 结尾 提取的结果是这样的 "Price change rate, days", 0f, 100f, false, "Captors will ask half as much as [value] days before, and ransomers will agree to pay twice as much."
那么哪个正确就很明显了
那么我们想提取字符串的正则表达式就是 SettingProperty(\([\s\S]*?)\)] 正则表达式这块我也不是很精通.有兴趣的朋友自行百度
2.使用汉化小助手提取字符串
如上图,我们复制提取文本到一个记事本或者excel表格里(建议表格)
整理完成后保存,然后回到汉化小助手导入刚才整理好的汉化文本
点击汉化字符串,小助手完成后,会自动弹出一个记事本文档(替代翻译完成.txt)
整个复制这个记事本j里的内容(替代翻译完成.txt)回到dnspy
点击编译
编译完成
然后dnspy 左上角 文件 - 全部保存 - 确定
保留你这个翻译文本,下次用到的时候,只需要打开dnspy复制 打开小助手粘贴 点击提取 点击汉化 复制汉化后的代码 粘贴替换dnspy里的代码.编译 全部保存就行了绝对不会超过30秒.小助手里有一键机翻(有道),还有新旧版本文本字符串变动对比功能.
进游戏看下
没毛病
教程到此结束
|
评分
-
5
查看全部评分
-
|