Skip to content

feat(web): i18n — multi-language support for the web UI #3484

@NilsR0711

Description

@NilsR0711

Summary

The web UI currently has all user-facing strings hardcoded in English. There is no internationalization (i18n) framework in place. This issue proposes adding multi-language support so the UI can be used in other languages.

Current state

  • All strings are inline in React components (buttons, labels, headings, tooltips, error messages, onboarding steps, etc.)
  • No i18n library installed (next-intl, react-i18next, etc.)
  • No locale files or translation keys exist
  • localeCompare is used in a few places for sorting, but there is no locale-aware UI rendering

Proposal

1 — Integrate an i18n framework

Add next-intl (idiomatic for Next.js) or react-i18next and set up:

  • A messages/ directory with per-locale JSON files (e.g. en.json, de.json)
  • A locale provider at the app root
  • A useTranslations() hook (or equivalent) for accessing translated strings

2 — Extract all hardcoded strings

Replace inline English strings across all components with translation keys:

// before
<Button>Create new project</Button>

// after
<Button>{t('projects.createNew')}</Button>

Key areas to cover:

  • Sidebar, navigation, tab strip
  • Projects view & onboarding
  • Dashboard & metrics
  • Chat mode & terminal UI
  • Settings & configuration
  • Error messages & toasts
  • Tooltips & placeholders

3 — Initial language support

Start with:

  • English (en) — default, already exists as inline strings
  • German (de) — second language

Additional languages can be contributed via PR once the framework is in place.

4 — Language switcher

Add a language selector in the settings or sidebar:

  • Persisted in localStorage
  • Falls back to browser locale (navigator.language)
  • Default: English

Suggested implementation order

  1. Install i18n framework + configure locale provider
  2. Create en.json with all extracted strings
  3. Replace hardcoded strings with t() calls (can be done incrementally per component area)
  4. Add de.json translation
  5. Add language switcher UI

Scope / non-goals

  • Not translating CLI output or terminal content — only the web UI chrome
  • Not translating user-generated content (project names, chat messages, etc.)
  • Not RTL layout support (can be a follow-up if needed)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions