Localization (Multi-Language)
Every user-visible string in the app comes from the translation system — nothing is hardcoded. Eight languages ship pre-translated: English, Turkish, German, French, Spanish, Arabic, Portuguese, Russian.
Managing languages
Admin → Languages: add unlimited languages (name, ISO code like it, locale like it_IT, direction). One language is the default — it is the fallback for missing translations and cannot be disabled. RTL languages (Arabic, Hebrew, …) flip the entire app layout automatically.
Managing translations
Admin → Translations — a key × language grid:
- Click into any cell, type, click away → saved automatically.
- Add Key for your own strings (e.g. a navigation label
campaigns). - Empty cells fall back to the default language in the app.
- Export JSON → send to a translator → Import JSON merges the result.
How the app uses it
- The user picks their language in the app's native Settings page (or the device default language is matched on first run).
- Catalogs are fetched from your backend and cached per language — language switching works offline after the first load, and translation fixes you make in the admin reach installed apps without an app update.
Navigation labels
If a navigation item's label matches a translation key, the app shows the translation for the user's language; otherwise the label text is shown as typed. So home displays "Home / Ana Sayfa / الرئيسية…" automatically.
Adding a language end-to-end (example: Italian)
- Languages → Add:
Italiano, codeit, localeit_IT, LTR. - Translations → fill the
itcolumn (start from an exported JSON if easier). - Done — apps see the new language in Settings on their next configuration refresh.