Skip to content

Basic language selector & Fluent-based i18n infrastructure (Qortal Go) #7

Description

@QuickMythril

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions