国际化与剧情本地化
Konado 的国际化服务由自动加载节点 KND_I18n 提供。服务始终启用,并统一负责:
- Godot UI 翻译资源的注册和语言切换
KND_Settings中语言选项的读取与持久化.ks本地化剧情文件的查找和加载- 语言切换后通知所有对话管理器重新加载剧情
当前语言保存在:
text
display/language内置语言为 zh_Hans、zh_Hant、en、ja 和 ko。zh、zh-CN、tc、zh-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查找顺序为:
- 完整语言码,例如
chapter.pt_BR.ks - 基础语言码,例如
chapter.pt.ks - 原始基础文件
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 并输出明确错误。传入已经带语言后缀的路径也会先还原到基础文件,再按目标语言重新解析。