Languages
Switch the interface language live with /language, full RTL support on desktop, live translation updates between releases, and a public repo translators can PR.
Overview
Every user-visible string in Empryo goes through one localization catalog - the TUI, the desktop app and headless output alike. English and Arabic ship today (Arabic at 99%, with full right-to-left layout on desktop); the pipeline is built for more.
Switching
| Surface | How |
|---|---|
| TUI | /language - the interface repaints in place |
| Desktop | Settings → Language - the window reloads in the new language |
| Headless / CI | --locale <tag> per run, or EMPRYO_LOCALE in the environment |
The flag beats the config, the config beats the OS locale. Headless runs read cached catalogs only - they never fetch.
Live translations
Between releases, liveTranslations (opt-in) fetches newer catalogs from the public translations repo, validates them through the same security gate every bundled catalog passes, and caches them locally. A bad or hostile catalog never reaches the screen.
Localized commands
localizedCommands (opt-in, off by default) accepts translated slash-command names as aliases of the English ones - /لغة runs /language.
Contributing a language
Translations live in a public repo (proxysoul/Empryo) that translators open PRs against. The English catalog is published there on every release; merged translations flow back into the next build.