Internationalization and Story Localization
Konado uses Godot's TranslationServer as the single authority for the active locale, UI translations, locale fallback, and change notifications. Konado only adds the localized-story overlay and structural validation that Godot cannot provide for KonadoScript files.
The built-in UI ships as native Godot .po translations for Simplified Chinese, Traditional Chinese, English, Japanese, and Korean.
Changing the locale
Use the settings API to change the locale and persist the player's choice:
KonadoSettings.set_setting("display", "language", "ja")For a session-only change, use Godot directly:
TranslationServer.set_locale("ja")
print(TranslationServer.get_locale())Custom nodes can react through Godot's native notification:
func _notification(what: int) -> void:
if what == NOTIFICATION_TRANSLATION_CHANGED:
_refresh_text()Konado dialogue managers receive the same notification and safely replace the current story's localized content.
UI translations
Add .po, .mo, or Godot-imported translation resources under Project Settings → Localization → Translations. Prefer stable, unique message identifiers:
title_label.text = tr("MY_GAME_SETTINGS_TITLE")Temporary translations can also be registered through Godot at runtime:
var translation := Translation.new()
translation.locale = "fr_CA"
translation.add_message("MY_GAME_SETTINGS_TITLE", "Paramètres")
TranslationServer.add_translation(translation)Story file names
Given this default story:
res://dialogues/chapter.ksLocalized variants use locale suffixes:
res://dialogues/chapter.zh_Hans.ks
res://dialogues/chapter.zh_Hant.ks
res://dialogues/chapter.en.ks
res://dialogues/chapter.ja.ksKonado searches the exact locale, Godot's inferred language and script, the base language, and finally the default story. For example, zh_CN can fall back to zh_Hans, then to chapter.ks.
A localized story may change text and presentation parameters such as actors, portraits, backgrounds, cameras, audio, and timing. Instruction types, control flow, and stable instruction IDs must match the default story. The editor reports presentation differences as warnings while structural differences remain errors. Konado validates the complete overlay before applying it, so an invalid variant cannot partially replace or corrupt active playback.
Loading a localized story manually
Normal dialogue playback does this automatically. Custom workflows can use the story adapter; omitting the locale follows TranslationServer:
var shot: KonadoShot = KonadoStoryLocalization.load_localized_script(
"res://dialogues/chapter.ks"
)Konado.NET projects use TranslationServer for locale selection and KonadoApi.StoryLocalizationApi to resolve or load localized stories.