Skip to content

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:

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

For a session-only change, use Godot directly:

gdscript
TranslationServer.set_locale("ja")
print(TranslationServer.get_locale())

Custom nodes can react through Godot's native notification:

gdscript
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:

gdscript
title_label.text = tr("MY_GAME_SETTINGS_TITLE")

Temporary translations can also be registered through Godot at runtime:

gdscript
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:

text
res://dialogues/chapter.ks

Localized variants use locale suffixes:

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

Konado 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:

gdscript
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.

Released under BSD3-Clause License.