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.

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)

  1. Languages → Add: Italiano, code it, locale it_IT, LTR.
  2. Translations → fill the it column (start from an exported JSON if easier).
  3. Done — apps see the new language in Settings on their next configuration refresh.