概述
动态翻译不是一个大众型的 Mod,他负责的是针对 Mod 中无法通过 lang/json 语言文件翻译汉化的硬编码部分提供简洁有效的翻译,便于更新和修改,也适用于整合包进行特殊的操作。
动态翻译通过名称映射表来映射所有游戏内被绘制的字符,从而达到替换/翻译的目标。
在进行Mod 本地化 的时候,有时会遇到部分文本的硬编码无法简单国际化的问题,导致国际化工作比较困难。
通常需要进行对源文件的注入进行修改,一方面对源文件造成了破坏性的改动,而且进行更新后又需要重复工作。
这个 Mod 的对象是 Mod 汉化人员,和对应的使用玩家,主要针对部分国际化不完善的 Mod,提供流畅的汉化体验。
同时在一些娱乐向方面,我们需要替换游戏内文本来达到一些特殊效果,这时候也需要对游戏内文本进行修改。
置顶更新内容
对应于原版 1.16.x Mod 版本 1.3.5 beta 以及之后版本更新物品的提示框联网翻译功能;
使用神经翻译在主流 Mod 的英译中集合上进行训练微调,在 Minecraft 相关语料集上达到主流翻译器水平;
感谢 CFPA 提供的语料库和参与翻译的所有译者。
在线 API 使用 CC BY-NC-SA 4.0 协议发布。
现阶段功能处于测试阶段,会对网络访问进行限制(每小时 360 次的访问),作者不保证翻译服务的稳定性,如有疑问请即时反馈。
更新了新的数字匹配,在避免分词的情况下进行包含变动数字的快速匹配替换。
使用方法
悬浮指针在物品上,按住默认键位 Alt 以进行联网翻译。该功能无法对创造模式搜索栏进行翻译,因为它拦截了键盘事件。
DynTranslation 替换的时间节点
DynTranslation 通过映射表文件进行运行时文本替换来达到以上效果。
通过介绍时间节点来避免不必要的问题产生,动态翻译在进行替换时,需要在 Forge 完成初始化时才能锁定配置文件位置。
在初始化完成前无法加载配置文件,同时这样做也是减少 CPU 空转时间,因为在加载时间点会产生大量动态数字,造成翻译队列阻塞,过高的消耗 CPU 资源。
所以在初始化完成前,动态翻译本身不能替换加载界面的文本。
替换方法
通过简单的文本替换,这里采用了 kson 文件作为载体,对映射文件进行读取;
关于映射文件命名如下:
父文件夹:位于模组的 config 文件夹下,并且会创建子文件夹名为 dyntranslation;
子文件命名:所有子文件,必须以形如 dyntranslation_{name}.json 的规范命名,其中 {name} 为所有系统文件可用字符。
替换内容:替换内容以 json 的标准格式为准的 Map 嵌套形式。
例如:
{
//容器(GUI)包名,“*”表示没有在任何容器(GUI)中,大部分在工具提示中;
"*": {
"§f腐肉§r": "§d腐肉§r",
" 盔甲": "",
"§7穿在腿上时:": "§8穿在腿上时"
},
//这里表示字符显示在GuiEnchantment中
"net.minecraft.client.gui.GuiEnchantment": {
"附魔": "附魔"
}
}
性能影响
由于是每帧替换,所以其性能影响和帧数也是成正比的,最后的影响结果是线性的。
其中的 IO 操作和分词耗时操作放在其他线程中,最终的性能影响来自于:
Map 的存取性能;
Map 的大小;
线程的创建销毁时间;
新词汇的产生速度过快导致的队列阻塞。
后两者无法通过人工进行控制,所以我们关注前两者,在 JDK 1.8 的 Map 实现中 HashMap 的性能是最高的,所以通过拷贝的方式防止使用性能较低的线程安全 Map,在实测中新增加的内容打开分词后的平均影响如下图:
平均值为 3099.375,量纲为纳秒,小于毫秒的数量级,可以认为在稀疏操作下的影响可以忽略不记。
备注
具体内容请查看本站 Mod 教程界面。
蓝奏云下载地址:
https://nowandfuture.lanzoui.com/b09fa75kh
此地址由作者提供。