Skip to content

国际化与剧情本地化

Konado 的国际化服务由自动加载节点 KND_I18n 提供。服务始终启用,并统一负责:

  • Godot UI 翻译资源的注册和语言切换
  • KND_Settings 中语言选项的读取与持久化
  • .ks 本地化剧情文件的查找和加载
  • 语言切换后通知所有对话管理器重新加载剧情

当前语言保存在:

text
display/language

内置语言为 zh_Hanszh_Hantenjakozhzh-CNtczh-TW 等旧值会在读取时转换为规范语言码并重新保存。

切换语言

通常应通过设置系统修改语言:

gdscript
KND_Settings.set_setting("display", "language", "ja")

也可以直接调用服务:

gdscript
KND_I18n.set_locale("ja")

监听切换完成事件:

gdscript
KND_I18n.locale_changed.connect(
	func(locale: String) -> void:
		print("当前语言:", locale)
)

set_locale() 会同步 TranslationServer、持久化设置,并通知已注册的对话管理器。重复设置相同语言不会重复发出切换事件,但仍会修复被其他代码改动的 TranslationServer 状态。

剧情文件命名

假设基础剧情文件是:

text
res://dialogues/chapter.ks

对应语言文件可以命名为:

text
res://dialogues/chapter.zh_Hant.ks
res://dialogues/chapter.en.ks
res://dialogues/chapter.ja.ks

查找顺序为:

  1. 完整语言码,例如 chapter.pt_BR.ks
  2. 基础语言码,例如 chapter.pt.ks
  3. 原始基础文件 chapter.ks

对话管理器切换语言时会优先按稳定的 node_id 恢复当前节点;如果目标语言缺少该 ID,则尝试使用相同索引,最后回退到目标剧情的起始节点。

自定义 UI 翻译

可以在运行时注册额外的 Godot Translation

gdscript
var translation := Translation.new()
translation.locale = "fr_CA"
translation.add_message("开始游戏", "Commencer")

KND_I18n.register_translation(translation)
KND_I18n.set_locale("fr_CA")

不再使用时可以注销:

gdscript
KND_I18n.unregister_translation("fr_CA")

get_available_locales() 会返回所有内置语言和已注册的自定义语言。

手动加载本地化剧情

gdscript
var shot: KND_Shot = KND_I18n.load_localized_script(
	"res://dialogues/chapter.ks",
	"en"
)

加载失败时返回 null 并输出明确错误。传入已经带语言后缀的路径也会先还原到基础文件,再按目标语言重新解析。

Released under BSD3-Clause License.