骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 3900|回复: 0

[版主推荐] 《骑马与砍杀2》自动翻译工具,找不到翻译就让程序替我翻~

[复制链接]

3

主题

2

回帖

22

积分

随仆

Rank: 1

UID
3695691
第纳尔
94
精华
0
互助
2
荣誉
1
贡献
0
魅力
100
注册时间
2024-9-13
鲜花(0) 鸡蛋(0)
发表于 2024-10-15 06:59:53 | 显示全部楼层 |阅读模式
本帖最后由 Marowak 于 2024-10-15 09:25 编辑

banner.png
Node.js 的实用终端工具集,致力于让《Mount & Blade II: Bannerlord》模组创作者能够更轻松地进行国际化工作。

程序永久免费永久开源,仅在 骑砍中文站 作为正式发布,GithubNPM 用于作为版本管理和下载渠道,其他渠道皆为盗版,使用后产生问题与作者本人无关。
开源社区尊重每一位用户的绝对隐私,所有网络请求均对第三方匿名,第三方不会采集到使用程序过程中除网络请求(含IP)以外的任何信息,程序没有任何非必要的请求,程序不会收集任何信息,程序在网络请求使用到的域名列表:
  • api.nexusmod.com
  • translate.google.com
  • edge.microsoft.com
  • api.cognitive.microsofttranslator.com

免责声明:文章详细描述了可能发生情况、触发情况条件和规避措施,程序使用者操作失误导致的损失不应由作者承担。程序仅供个人使用,不得用于违法行为或商业用途,否则产生的后果一律与作者本人无关。

代码开源
  • 代码仓库:https://github.com/gengark/bannerlord-mod-translations (联通网络需要科学上网)
  • 发包平台:https://www.npmjs.com/package/bannerlord-helper (需要科学上网)

所见即所得
  • 检测源文件修复和插入翻译接口
      <Item id="item_1" name="一刀9999">...</Item>
      => <Item id="item_1" name="{=hP57Caab}一刀9999">...</Item>
      <Item id="item_2" name="{=hP57Caab}我是 mod 作者失误写重复的翻译标识">...</Item>
      => <Item id="item_2" name="{=KbakhGqB}我是 mod 作者失误写重复的翻译标识">...</Item>
      

插入翻译接口GIF

插入翻译接口GIF

  • 检索所有可翻译文件生成翻译模板
      <Item id="item_1" name="{=hP57Caab}一刀9999">...</Item>
      => <string id="hP57Caab" text="一刀9999" />
       generator.gif
  • 将模板翻译成另一种语言 将一种语言翻译成另一种语言
      <string id="hP57Caab" text="yi dao 9999" />         // Languages
      => <string id="hP57Caab" text="一刀9999" />      // Languages/CNs
      <string id="hP57Caab" text="一刀9999" />           // Languages/CNs
      => <string id="hP57Caab" text="yi dao 9999" />  // Languages
      

翻译模组GIF

翻译模组GIF

  • 直接翻译并创建一个外挂式翻译 mod
      <Item id="item_1" name="yi dao 9999">...</Item>                                                                                                               // Sandbox
      => <xsl:template match="Item[@id='item_1']/@name"><xsl:attribute name="name">一刀9999</xsl:attribute></xsl:template> // Sandbox CNs
      

生成外挂式翻译GIF

生成外挂式翻译GIF


安装方法

如果安装过 Node 可以直接跳过 1、2 步。

  • 下载 Node (25.3MB)https://nodejs.org/zh-cn/download/prebuilt-installer
  • 运行安装包
  • 打开 cmd/powershell/shell/bash 或任意终端,输入 npm i -g bannerlord-helper 并回车 (17.2MB)(安装后文件会在 Node 安装目录的 node_modules 文件夹中,可随时通过 npm rm -g bannerlord-helper 删除)
  • 输入 bh -h 查看是否安装成功


具体安装步骤可以查看 Github 上的 中文文档 https://github.com/gengark/bannerlord-helper/blob/master/README.zh-CN.md。
如遇错误或不明白的地方可以随时评论,或查看文档有详细说明。
(下文的格式可能会有点问题,中文站的富文本编辑器有一点点格式化错误,我已经尽最大努力调整了,另外由于工作编辑文档和白皮书的习惯,而且我不太活跃在论坛,这篇文章我编辑了 3 小时以上,如果有什么快速的技巧欢迎在评论区告诉我,当然如果有什么错误和疑问也可以随时在评论区指出)

使用方法
同样在任意终端输入下文的英文行并回车,然后使用键盘的 上/下 来选择你想操作的 mod,也可以直接输入模组名字来过滤搜索 mod(和在中文站的输入框中搜索 mod 一样的操作)
选择 mod 后程序就会根据你输入的指令执行并在该文件夹中修改或生成文件。

*程序经过大量测试,但如果你可能找不到该模组的下载地址或有改动本地文件(比如已经进行了一些翻译工作)怕被程序覆盖,可以事先备份好模组的 ModuleData 目录,来避免不必要的损失。

命令行基本知识

如果你熟悉终端,完全可以跳过此节。

如果你没接触过终端,这个例子可以帮你快速了解命令行,你可以理解你在终端这个聊天窗给你的电脑发了一条微信,让它替你完成某个行为,就像 “小爱同学,关掉客厅的吸顶灯”。

$ bh <指令> [选项] [选项值]
相当于
$ 小爱同学 <关掉> [客厅的] [吸顶灯]

我们快速的看一个简单的例子:

$ bh translate --to="cns"
  • bh 是程序的快捷方式,也就是 “小爱同学”
  • translate 是指令,也就是 “关掉”
  • --to 是选项,相当于 “客厅的”
  • cns 是选项 --to 的值,相当于 “吸顶灯”

命令行太长了,我想再简单点

程序为指令提供了很多别名
$ bh trans --to="cns"
  • trans 是 translate 的别名

程序为选项提供了很多缩写

$ bh trans -t="cns"
  • -t 就是 --to 的缩写

还能更简单吗?我们在使用多个选项时,只要保持正确顺序:[选项1] [选项1的值] [选项2] [选项2的值],就可以省略 等于号 和 双引号:
$ bh trans -f en -t cns

但是如果选项值包含空格或者是多个单词组成的短语时,“双引号” 就是必须的:
$ bh trans -t "I am 拉盖娅's secret boyfriend"

现在,我们知道如何给电脑发微信后,我们的电脑可以自己干活了。

功能一览

插入和修复翻译接口
根据 “文件名、ID、文本内容” 通过算法生成翻译接口。即使作者更新 mod,只要作者没改这三个内容,我们仍然可以使用之前生成好的翻译模板和汉化文件,再通过 ident 指令为新的 mod 生成一遍,然后用 gen 指令为新增的文本生成一份模板即可。
这意味着即使 mod 作者没有给任何翻译接口,之后也不打算给,我们之前做过的汉化努力永远不会白费。




    • 支持 xml 和 xslt 文件
  • 如果源文件缺少或存在重复接口,则会修改源文件,反之不会。
  • 生成算法使用 hash 的散列值算法 sha1,和官方 mod 的标准一样保留最后 8 位字符

示例:
* 查看使用说明:
$ bh ident -h
* 插入和修复翻译接口:
$ bh ident
* 在选择本地 mod 时,将它们的名称翻译成中英双语显示(可用中文搜索 mod):
$ bh ident -l cns

生成翻译模板
检测可翻译项自动生成到 ModuleData/Languages 文件夹(如果该文件夹中有文件,说明 mod 作者已经给了翻译模板)。




    • 支持 xml 和 xslt 文件
    • 生成的文件名采用官方的标准格式 “std_原文件名_xml.xml"
    • 当目标语言是生成英文翻译模板时,不生成 language_data.xml 文件
    • 使用 --force 参数可以强制使用生成文件替换掉全部旧的文件
  • 如果生成的目录中包含 language_data.xml 或同名文件,它不会改变原有的文本项和 language_data 对文件的引用,而是将新的内容插入到文件中(比如 mod 更新了新的物品)。
  • 如果你是中文 mod 制作者,想让全世界更多的玩家体验你的 mod,也可以用这个功能自动生成中文翻译模板,再使用 trans 指令将其翻译成英文翻译模板。
  • 如果 mod 制作者没有给翻译接口无法生成翻译模板,则可以使用 ident 命令自动插入翻译接口。
  • 如果目标语言是英文,生成到 ModuleData/Languages 文件夹中,如果是其他语言比如简体中文,则生成到 ModuleData/Languages/CNs 中。

示例:
* 查看使用说明:
$ bh gen -h
* 检索可翻译文件并生成英文翻译模板:
$ bh gen
* 检索可翻译文件并生成英文翻译模板:
$ bh gen -t cns
* 在选择本地 mod 时,将它们的名称翻译成中英双语显示(可用中文搜索 mod):
$ bh ident -l cns
* 强制替换已存在的英文翻译模板:
$ bh ident --force

自动翻译文件
通过翻译模板将 mod 自动翻译到指定语言。




    • 支持 xml 和 xslt 文件
    • 支持为汉化文本添加前缀
    • 生成的文件名采用官方 mod 的标准格式 “std_原文件名_xml-目标语言后缀.xml"
    • 使用 --force 参数可以强制使用生成文件替换掉全部旧的文件
  • 如果 mod 文件夹中已经存在了翻译模板文件,可以使用这个功能将它们全部翻译成目标语言并创建这些文件到对应的文件夹,比如翻译成简体中文会将翻译好的文本创建到 ModuleData/Languages/CNs 文件夹,繁体中文就是 ModuleData/Languages/CNt。
  • 如果 mod 文件夹中不存在翻译模板,则可以使用 gen 指令来自动生成它们。

示例:
* 查看使用说明:
$ bh trans -h
* 将英文 mod 翻译成简体中文:
$ bh trans -t cns
* 在翻译文本前添加公共前缀("Sword" => "[RoT]剑"):
$ bh trans -t cns -p [RoT]
* 在选择本地 mod 时,将它们的名称翻译成中英双语显示(可用中文搜索 mod):
$ bh trans -l cns
* 强制替换已存在的汉化文件:
$ bh trans -t cns --force

生成外挂式翻译 mod
通过翻译模板创建一个外挂式翻译 mod,比如将 Sandbox 翻译成简体中文,就会在骑砍霸主的 Modules 文件夹中创建一个 Sandbox CNs 文件夹。




    • 支持 xml 和 xslt 文件
    • 支持为汉化文本添加前缀
    • 生成的文件名同源文件
    • 使用 --force 参数可以强制使用生成文件替换掉全部旧的文件
  • 如果 mod 制作者没有给翻译模板(ModuleData/Languages 文件夹中没有 xml 文件),需要先使用 gen 指令生成。
  • 如果你是中文 mod 制作者,想让全世界更多的玩家体验你的 mod,也可以用这个功能自动生成中文翻译模板,再使用下文中的自动翻译功能翻译成英文翻译模板。
  • 如果 mod 制作者没有给翻译接口无法生成翻译模板,则可以使用 ident 命令自动插入翻译接口。

示例:
* 查看使用说明:
$ bh ext -h
* 为英文 mod 创建一个外挂式简体中文翻译 mod(Sandbox => Sandbox CNs):
$ bh ext -t cns
* 在翻译文本前添加公共前缀(Sword => [RoT]剑):
$ bh ext -t cns -p [RoT]
* 在选择本地 mod 时,将它们的名称翻译成中英双语显示(可用中文搜索 mod):
$ bh ext -l cns
* 强制替换已存在的汉化文件:
$ bh ext -t cns --force

性能测试
这里拿内置模组 Sandbox 的全部文件进行测试,

  • 填充和修复翻译接口:43 个文件中检测出 947 缺少或重复的标识项,修复和填充耗时 0.31s
  • 生成翻译模板:43 个文件中检测出包含 3382 行可翻译的文本项,并输出 25 个英文翻译模板文件,耗时 0.21s
  • 翻译模板成中文:25 个翻译模板中翻译了 3382 行文本,微软翻译耗时 5.59s
  • 创建和翻译成外挂式模组:25 个翻译模板中翻译了 3382 行文本,微软翻译耗时 4.36s


特别鸣谢
如果你觉得这个项目有帮助到你,请在 Github 上为我们点一个免费的 Star,每当程序更新了新的功能,它就会出现在你的主页~
如果 NodeJS 也是你熟悉的语言,欢迎联系我的邮箱 97z4moon@gmail.com 或通过 Github 的 Pull Request 共建项目~
(强烈推荐给想从事互联网行业的学生,本人从事这个行业5年,在企业面试中担任多次面试官,参与 Github 开源项目和在 NPM 分发包,在简历上是一个非常有说服力的 Highlight,不仅是应届生,即使社招也是一个加分项)





常见问题

Q: 速度由什么决定?
A: 由文件数量和可翻译项数量影响,翻译功能还受网络速度影响。

Q: 支持哪些翻译?
A: 微软、谷歌和DeepLX。

Q: 翻译引擎的实测效果?
A: 微软速度快,谷歌质量好,DeepLX 只有源语言为英文时支持性较好,源语言为其他语言时容易报错(原因主要来自 mod 文本包含很多变量如 {HERO_NAME},程序做了变量保护以防止这些变量被翻译或丢失,但 DeepL 显然没有其他翻译引擎更具兼容性)。
    速度:微软 > 谷歌 > DeepLX;
    质量:DeepLX ≈ 谷歌 > 微软。

Q: 翻译引擎有哪些网络限制?
A: 微软限制大陆网络单文件文本内容不能超过 5000 字符;
    谷歌则直接禁止大陆网络需要科学上网;

Q: 翻译引擎有 token 限制吗?
A: 只有 DeepLX 有限制,微软和谷歌都是免费的匿名翻译。

Q: 翻译引擎短时间内使用次数过多会被封禁 IP 吗?
A: 谷歌翻译如果半小时内翻译 1000+ 文件,IP 可能会 Google Cloud 的 translate 域名被封禁 12 小时,如果你用了科学上网,切换节点可继续翻译。
    微软翻译的封禁策略较为宽松,以谷歌同样的频率访问目前也没有遇到 IP 封禁。
    DeepLX 对匿名的免费用户开放 token 较少,可以在终端的环境变量中设置 token 来无限制使用(Github 页面有详细教程)。

评分

参与人数 1荣誉 +1 第纳尔 +100 互助 +2 魅力 +100 收起 理由
别杀鸡 + 1 + 100 + 2 + 100 您的帖子很有价值!

查看全部评分

您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-12-22 01:48 , Processed in 0.123194 second(s), 21 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表