授人以鱼不如授人以渔。
汉化的方法写在这里了,有空的同学自己去试试~

不想动手的同学,也可以下载一个现成的中文语言包:
来自 @xxgt1992 :https://keylol.com/t195714-1-1

--

语言文件

Deathtrap 的语言文件在这个位置

...\steamapps\common\Deathtrap\Strings

打开文件夹之后你可以看到各个语言为命名的文件夹。
最外面的那个 Files.N2PK 是默认英文。

但是你也看到了,他们都是 Files.N2PK, 普通的方式根本无法打开。
所以,需要进行解包:

N2PK 解包工具

很幸运,
@mome-borogove 大佬分享了一个解包程序 N2PK Unpacker

它使用 python 语言编写,如果你电脑没有,需要到 python 官网 安装就可以使用了
不会解压的同学,我也传了一份已经解包好的英文原版在上面。

如何使用

将 unpack-n2pk.py 保存到本地,比如 D 盘。
然后把你准备解压的 Files.N2PK 也放到这里。

然后在文件夹窗口里 按住 Shift + 鼠标右键, 在此处打开 Powershell 窗口 (S)

会弹出一个蓝色窗口的 Windows PowerShell 控制台,在里面输入这句:

python unpack-n2pk.py Files.N2PK  output

后面那个 output 是指定解压到哪个文件夹的参数

或者可以用一个批处理程序来自动输出:
在记事本粘贴,然后另存为 unpack.bat 放在同一个文件夹下。

@echo off
cmd /C "python unpack-n2pk.py Files.N2PK new"
del Files.N2PK
exit

如何翻译

解压出来的文件就是这几个xml文件:

  lang.xml
  lang_artifacts.xml
  lang_editor.xml
  lang_news.xml
  lang_quest.xml
  lang_skills.xml
  lang_soldiers.xml
  lang_traps.xml

然后直接用文本编辑器就可以编辑了。

文件结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Root>
    <LanguageName>
            <eng>English</eng>
    </LanguageName>
    <Languages>eng</Languages>
    <Campaign> 
            ... 
    </Campaign>
</Root>

由于我不想直接替换英文的文件,想着,能不能直接在语言设置里添加一个中文选项?

于是,我打开 Strings 目录,新建了一个 Chinese 文件夹,接着把解压出来的几个xml文件放进去。

如果要添加语言,注意文件里是有个标签区分的。
比如 English, German, ...

所以,这就明白了:
把标签换成 CN 试试 CN
然后后面的都是用CN

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Root>
	<LanguageName>
		<CN>简体中文</CN>
	</LanguageName>

	<Languages>CN</Languages>

	<Campaign>
		<GUI>
			<main>

				<exit>
					<CN>返回标题</CN>
				</exit>

				<single>
					<CN>单人模式</CN>
				</single>

			...

再次重启游戏,打开设置。
嗷!!终于出现了!

[previewimg=21709827;sizeFull,floatLeft;language.png][/previewimg]

既然修改有效,后面的都是体力活了~

自动换行

毕竟是个老游戏,开发团队那时候估计也没想过要做本地化。所有UI都是根据英文来设计的。

包括对话框的自动换行,游戏引擎判断换行的方式有2种:
分别是:单词, 字母。
单词:hello world 这是2个单词。自动换行就变成 hello \n world
字母:比如一行只能显示 4 个字母,强制换行就会变成 hell- \n o worl- \n d

注意到了吗,强制换行的话,前面一行的末尾会自动加一个 - 符号。

所以很不幸,如果你直接把文本翻译成中文,一行超过 15 个中文字符,就会自动在后面添加 - 的符号。然后强制换行。

如果你能忍受后面的 - 符号,倒还好。反正我看着有点别扭。

于是想自动换行的话,只能手动插入空格。
如果空格的下一行超出长度,就会自动到下一行,如果一行放不下,就加- 强制换行。

还有一种不加空格的办法。
就是用 \n 来换行。这个就需要翻译的人计算好一行显示多少个字了~

总结:

  1. 一行最多 15 个中文字符,如果里面包含了数字、英文,符号,实际长度会更短。
    超过会强制换行。(有个-)

  2. 约定:
    如果你要翻译,系统内置的数字,变量,符号之类的, 最好加使用空格隔开。
    中文标点符号,。 也可以在后面加一个空格,这样会自然换行。

...

字体配置

其实我觉得原版英文的字体很好看,但是直接修改文本的话,原有的字体肯定是没有中文字符的。所以,还得修改一下字体文件。

\steamapps\common\Deathtrap\Cfg\Fonts\FontMap.cfg

这个修改起来比较简单,换字体名字就可以了。
当然,这个文件也可以指定语言的。
比如 FontMap_CN.cfg
这样就只有语言标签为 CN 才会应用这字体

FONTNAME_GENERAL=Philosopher
FONTPATH_GENERAL=UI/Fonts/Philosopher-Regular.ttf

FONTNAME_TITLES=Philosopher
FONTPATH_TITLES=UI/Fonts/Philosopher-Regular.ttf

FONTNAME_POPUPS=Philosopher
FONTPATH_POPUPS=UI/Fonts/Philosopher-Regular.ttf

FONTNAME_TEXT=Philosopher
FONTPATH_TEXT=UI/Fonts/Philosopher-Regular.ttf

FONTNAME_DEBUG=Arial
FONTPATH_DEBUG=UI/Fonts/ARIAL.TTF

FONTNAME_SUBTITLE=Covington Bold
FONTPATH_SUBTITLE=UI/Fonts/Coving03.TTF 
FONTARGB_SUBTITLE=255;255;255;255 
FONTSIZE_SUBTITLE=18


FONTFILENAME0=./UI/Fonts/Philosopher-Regular.ttf
FONTFILENAME1=./UI/Fonts/TGL_0-1451Eng.ttf

然后把想替换的字体放到这个目录,就可以了~

\steamapps\common\Deathtrap\UI\Fonts

例如。我使用了魔兽世界玩家@暗影无花 制作的一款字体——
啊...这款字体没有名字。
就是把两款字体(包豪斯中文+方正粗活意英文数字)合成在一起变成——合成字体!
虽然我也不知道包豪斯中文到底是哪款中文字体,反正看的还顺眼就是了。

简单替换一下,变成这样

CAN_USE_UPPERCASE=0

FONTNAME_GENERAL=Font Creator Program
FONTPATH_GENERAL=UI/Fonts/wow.ttf

FONTNAME_TITLES=Font Creator Program
FONTPATH_TITLES=UI/Fonts/wow.ttf

FONTNAME_POPUPS=Font Creator Program
FONTPATH_POPUPS=UI/Fonts/wow.ttf

FONTNAME_TEXT=Font Creator Program
FONTPATH_TEXT=UI/Fonts/wow.ttf

FONTNAME_DEBUG=Font Creator Program
FONTPATH_DEBUG=UI/Fonts/wow.ttf

FONTNAME_SUBTITLE=Font Creator Program
FONTPATH_SUBTITLE=UI/Fonts/wow.ttf
FONTARGB_SUBTITLE=255;255;255;255 
FONTSIZE_SUBTITLE=18


FONTFILENAME0=./UI/Fonts/wow.ttf
FONTFILENAME1=./UI/Fonts/wow.ttf

--

会遇到的问题:

  1. 翻译之后,部分变量会因为文本长度问题而无法读取。

最明显的例子就是。道具表 lang_artifacts.xml 里面,
对异常状态的敌人造成额外伤害,这个标签ID太长了:AllSkillDamagePercentOnFrozenEnemies
导致在游戏中无法读取,变回引用的地址: "Soldiers.AllSkillDamagePercentOnFrozenEnemies.DES" 似乎只有翻译成中文会出现这情况,其他语言显示是正常的。

也许也是解包的问题导致?总之,原因不明。
也是因为这个问题,我不想继续再重新汉化这系列游戏了。。太蠢了。