Skip to content

Internationalization (i18n)

Rezeptor supports German and English in the launcher; additional languages can be added modularly.

Launcher (GUI)

Path Role
launcher/locales/de.json German strings
launcher/locales/en.json English strings (fallback)
launcher/locales/manifest.json List of available locales
launcher/i18n/ t(key), set_locale(), loader

Fallback chain: active locale → en → key name.

Settings: Rezeptor → Settings → Language. On first start: system $LANG (de* → de, otherwise en).

Add a new language

  1. Create launcher/locales/fr.json (keys like in en.json).
  2. Add an entry to launcher/locales/manifest.json:
    {"id": "fr", "name": "Français"}
    
  3. Restart Rezeptor — the language appears in settings.

Keys are hierarchical: menu.launch, tab.overview, update.btn_auto, error.E_TRUST_MANIFEST, …

Recipe descriptions

Per recipe under recipes/<id>/:

  • info.de.txt — German
  • info.en.txt — English

The launcher picks info.{locale}.txt, then info.en.txt, then info.de.txt.

After changes: ./scripts/recipe-manifest.sh.

Developer documentation

Docs are split by locale under docs/:

Folder Language
docs/de/ German
docs/en/ English

Same filenames in both folders (README.md, RECIPE-AUTHORING.md, …).
Keep links relative within the same folder — e.g. [RECIPE-AUTHORING.md](RECIPE-AUTHORING.md), not ../de/….

MkDocs site: DE/EN language switcher (mkdocs-static-i18n, folder structure).

Home: index.md

Shell scripts

Source of truth: core/i18n.sh loads core/locales/de.lang / en.lang (install pipeline).
scripts/locales/ is a mirror copy — keep both trees in sync when editing.
Launcher and shell do not share files — same key idea, different formats (JSON vs. .lang).

Error codes (launcher)

launcher/log_context.py defines stable codes, e.g.:

Code Meaning
E_TRUST_MANIFEST Manifest hash mismatch
E_UPDATE_APPLY Auto-update failed
E_UPDATE_ROLLBACK Rollback failed
E_LAUNCH_NO_PROCESS App not running after start
E_SCRIPT_FAILED Hook script exit ≠ 0

Displayed via t("error.<CODE>") + technical detail in activity/log.