Background / Problem Statement
Qortal Hub already supports multiple UI languages using i18next, with a visible language selector and a growing set of translated namespaces (core, groups, apps, chat, etc.). Qortal Go (qortal-mobile) includes Fluent (.ftl) resources in the repo, indicating an initial localization effort, but there is currently no clearly exposed language selector or documented behavior for choosing/persisting the UI language.
As a result, the mobile UI is effectively “English-first” from the user’s perspective, and there is no straightforward path for translators to verify how their work appears in Go. Aligning Go with Hub’s language behavior is important for parity across the Trifecta UIs.
Scope (in)
-
Confirm and document the existing Fluent-based i18n setup in qortal-mobile.
-
Introduce a user-facing language selector in Go’s Settings screen.
-
Wire the main app through a Fluent provider/context that:
- Uses a selected locale.
- Falls back to English when a translation is missing.
-
Migrate a core set of screens to use Fluent messages instead of inline English strings:
- Splash / onboarding.
- Login/auth/account selection.
- Main navigation (tabs/drawer).
- Settings section where the selector lives.
Scope (out)
- Full translation coverage of all screens.
- Designing translation workflows or tooling (beyond basic guidelines).
- Changing Hub’s i18n implementation.
Acceptance Criteria
-
From a fresh install, Go starts in a sensible default language (e.g., based on system locale, falling back to English).
-
In Settings, there is a Language section that:
- Lists the same language codes as Hub for supported languages (e.g.,
en, pt, et, fi, ar, etc.).
- Allows the user to change the language.
-
When the user changes language and restarts the app:
- The UI remains in the chosen language (preference is persisted).
-
The following surfaces render translated strings via Fluent:
- Splash/onboarding screen.
- Login/auth/account selection screen(s).
- Main navigation/tab labels.
- The language selector itself (labels + description).
-
When a string is not available in the selected language, the app falls back to English rather than showing broken keys.
Notes / Risks
-
qortal-mobile uses Fluent, while Hub uses i18next + JSON. We should:
- Reuse key naming (namespaces + keys) where practical.
- Accept that actual storage formats differ (.json vs .ftl).
-
Need to decide how to store language preference in a way that works for both:
- Android native app.
- PWA mode via
go.qortal.link (e.g., Capacitor Preferences vs localStorage).
-
Translators will need a short documentation snippet on:
- Where
.ftl files live.
- How keys correspond to Hub’s JSON-based translations.
Background / Problem Statement
Qortal Hub already supports multiple UI languages using i18next, with a visible language selector and a growing set of translated namespaces (core, groups, apps, chat, etc.). Qortal Go (qortal-mobile) includes Fluent (.ftl) resources in the repo, indicating an initial localization effort, but there is currently no clearly exposed language selector or documented behavior for choosing/persisting the UI language.
As a result, the mobile UI is effectively “English-first” from the user’s perspective, and there is no straightforward path for translators to verify how their work appears in Go. Aligning Go with Hub’s language behavior is important for parity across the Trifecta UIs.
Scope (in)
Confirm and document the existing Fluent-based i18n setup in qortal-mobile.
Introduce a user-facing language selector in Go’s Settings screen.
Wire the main app through a Fluent provider/context that:
Migrate a core set of screens to use Fluent messages instead of inline English strings:
Scope (out)
Acceptance Criteria
From a fresh install, Go starts in a sensible default language (e.g., based on system locale, falling back to English).
In Settings, there is a Language section that:
en,pt,et,fi,ar, etc.).When the user changes language and restarts the app:
The following surfaces render translated strings via Fluent:
When a string is not available in the selected language, the app falls back to English rather than showing broken keys.
Notes / Risks
qortal-mobile uses Fluent, while Hub uses i18next + JSON. We should:
Need to decide how to store language preference in a way that works for both:
go.qortal.link(e.g., Capacitor Preferences vs localStorage).Translators will need a short documentation snippet on:
.ftlfiles live.