Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Strings catalog

story/strings.json (+ strings_<locale>.json): flat key → string map for UI and keyed dialogue.

{
  "game.title": "My Novel",
  "screen.common.next": "Next",
  "choice.yes": "Yes"
}

Usually you need

IdeaHow
Literal still worksMost fields accept plain text / label without a catalog
Shared copySet text_key / label_key / title_key / display_name_key — no sibling text / label needed
Standalone fallbackKeep a literal next to a key only when you want a fallback if the key is missing
LocaleOverlay strings_<locale>.json

Some keys live only in the catalog: panel nav labels, notification.* toasts, and other runtime show_key strings. They do not need a matching *_key in your JSON.

Shape

FormMeaning
Object of string valuesCatalog
Key with dotsConventional namespaces (game., screen., choice.) — not enforced

Missing keys fall back per Translations. check reports a keyed field with no literal and no catalog entry (i18n.missing_key). Used by screens, choices, notifications, window title, character display_name_key, and more.

Translations · Flow tags (literals in script stay in the script file).