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¶
- Create
launcher/locales/fr.json(keys like inen.json). - Add an entry to
launcher/locales/manifest.json: - 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— Germaninfo.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.