任务语言文件

任务语言文件

将FTB任务文本存储在按语言划分的语言文件中,而不是直接内嵌在章节文件里,这样同一个整合包可以支持多种语言,并能跟随玩家的游戏语言切换。

任务语言文件

任务文本应存放于语言文件中,而非混杂在你的任务数据里。

在 Minecraft 1.20.1 中,FTB Quests 将每个标题、副标题和描述直接内联存储在 config/ftbquests/quests/chapters/*.snbt 文件中。这意味着整合包同一时间只能使用一种语言—— 要发布翻译版本,你必须保留整个任务文件夹的第二个副本并自行切换,且每次结构变更都必须在两个副本中重复操作。

较新版本的 FTB Quests 通过将文本移至各语言对应的文件中解决了此问题。本模组将该布局带回 1.20.1,使用相同的文件名、相同的键格式和相同的文件夹结构——因此,在此处编写的语言文件可被新版 FTB Quests 读取,反之亦然。


变更内容

之前 —— 文本和结构混杂在一起:

chapters/mining.snbt
    quests: [{
        id: "44A5523F7A909209"
        title: "Punch a Tree"
        description: ["No tools, no house, no plan."]
        x: 0.0d  y: 0.0d
        ...
    }]

之后 —— 结构保留在章节文件中,文本放入语言文件:

config/ftbquests/quests/
├── chapters/            ← 仅含结构
├── reward_tables/
├── chapter_groups.snbt
├── data.snbt
└── lang/
    ├── en_us.snbt
    ├── ru_ru.snbt
    └── zh_cn.snbt
lang/en_us.snbt
    quest.44A5523F7A909209.title: "Punch a Tree"
    quest.44A5523F7A909209.quest_desc: ["No tools, no house, no plan."]

lang/ru_ru.snbt
    quest.44A5523F7A909209.title: "Ударь дерево"
    quest.44A5523F7A909209.quest_desc: ["Ни инструментов, ни дома, ни плана."]

玩家将以其自身游戏语言查看任务书,并在切换语言时实时更新。若某个槽位没有对应语言的翻译,则会回退到整合包默认语言,因此未完成的翻译会优雅降级,而不会留下空白。


为何你可能需要它

  • 在一个整合包中发布多种语言。 无需再维护并行的任务文件夹副本。
  • 翻译者只需接触一个文件。 他们永远不会打开章节文件,因此无法破坏你的任务结构、依赖关系或布局。
  • 差异对比不再难以阅读。 章节文件仅在任务实际改变时才会变更;文本改动只会体现在语言文件中。版本控制再次变得可用。
  • 你的成果可以随你一同前进。 语言文件采用新版 FTB Quests 已使用的格式,因此未来的版本迁移并不意味着需要重做翻译。

环境要求

Minecraft 1.20.1
加载器 Forge 47.x 或 Fabric Loader 0.15+
FTB Quests 2001.4.x
FTB Library 2001.2.x
Architectury API 9.2+
Fabric API 仅在 Fabric 上需要

客户端和服务端均需安装。FTB Quests 的版本范围是刻意锁定的:本模组深入 FTB Quests 内部,因此未经测试的版本会拒绝加载,以免损坏整合包。


转换现有整合包

放入模组并启动游戏即可。所有内联的标题、副标题和描述都会被移动到语言文件中,章节文件会被重写,移除这些文本。无需手动执行任何操作。

在你的任何文件被重写之前,原始文件会首先被自动复制到 config/ftbquests/quests-backup-<时间戳>/ 目录。 请保留该文件夹,直到你对结果满意为止。

有一点需要提前设置:如果你整合包中的现有文本并非英语,请在首次启动前将以下行添加到 config/ftbquests/quests/data.snbt 文件中,否则它将被归入 en_us 语言:

fallback_locale: "ru_ru"

如需立即转换而不等待下一次自动保存,请运行 /ftbqlang save。


之后编辑任务

游戏内编辑器的工作方式与之前完全相同。当你重命名任务时,新文本会进入你游戏语言对应的语言文件,章节文件保持整洁。复制任务时也会一并复制其文本。

要为非游戏当前设置的语言编写翻译:

/ftbqlang editlocale de_de    … 此后你的编辑将保存为德语
/ftbqlang editlocale -        … 恢复为你的游戏语言

命令

均为服务端命令,权限等级 2。

命令 功能
/ftbqlang info 显示整合包语言及各语言的条目数量
/ftbqlang reload 从磁盘重新读取语言文件并推送给所有玩家
/ftbqlang save 立即保存任务并写入语言文件
/ftbqlang cleanup 列出其任务已不存在的条目
/ftbqlang cleanup true 移除这些条目
/ftbqlang prefill <locale> 将整合包语言复制到 <locale>,作为翻译者的起点
/ftbqlang fallback <locale> 设置整合包自身的语言
/ftbqlang editlocale <locale> 以 <locale> 语言保存你的任务编辑

兼容性

FTB Quests 自身的网络格式保持不变。任务对象在网络上仍然以整合包语言携带其文本,每个客户端的语言设置会在其基础上应用。语言数据若出现问题,只会表现为显示语言错误,绝不会出现空白的任务书。

只有当模组能够证明其已在存储中拥有该文本时,才会从章节文件中剥离该文本。任何未被其识别的文本都会保留原样,因此保存时不会有任何内容被静默丢失。


已知限制

  • 仅支持 Minecraft 1.20.1。
  • 编辑语言的切换是通过命令而非任务编辑器中的下拉菜单进行的,且编辑器中也没有“缺少翻译”的高亮提示。
  • 已在单人游戏和集成服务器上测试。多远程客户端同时使用不同语言的专用服务器场景尚未进行实际测试。

许可证与鸣谢

这是一个非官方附加模组。它并非由 Feed The Beast Ltd. 制作、认可或与其有关联。“FTB”和“FTB Quests”均为其各自所有者的财产,此处提及仅为指明本模组扩展的是哪个模组。

本模组不包含任何 FTB 源代码。所复用的是文件格式——文件夹布局、键格式和各槽位名称——因为精确复现它正是本模组的全部意义:语言文件必须能被其他版本的 FTB Quests 读取。该格式是根据真实语言文件推敲得出并独立实现的。

本模组自身代码采用 MIT 许可证。FTB Quests 需单独安装。