Files
GearBox/.planning/phases/34-i18n-foundation/34-DISCUSSION-LOG.md

3.3 KiB

Phase 34: i18n Foundation - Discussion Log

Audit trail only. Do not use as input to planning, research, or execution agents. Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.

Date: 2026-04-13 Phase: 34-i18n Foundation Areas discussed: Translation scope & boundaries, Library & architecture, Language selection UX, First additional language


Translation Scope & Boundaries

Option Description Selected
UI chrome only Buttons, labels, headings, empty states, errors, navigation
UI chrome + system content UI chrome plus default categories, onboarding text, MCP descriptions
Everything including catalog UI + system + catalog item names/descriptions per locale

User's choice: UI chrome + system content Notes: Catalog data translation deferred — too much content to maintain translations for.


Library & Architecture

Library choice

Option Description Selected
react-i18next Most popular, hook-based, JSON files, namespaces, lazy loading
Lingui Compile-time extraction, smaller runtime, macro-based
You decide Claude picks based on stack fit

User's choice: Claude's discretion

Translation storage

Option Description Selected
JSON files in repo en.json, de.json checked into git. Simple, reviewable in PRs
External translation service Crowdin/Lokalise with web UI for translators
You decide Claude picks

User's choice: JSON in repo. User asked whether this is easy to switch later — confirmed it is. Translation keys are the same regardless of storage; switching to external service is a CI/sync change, not a code rewrite.


Language Selection UX

Option Description Selected
Separate setting Language and currency/market are independent
Tied to market EUR/DE = German, GBP/UK = English
Auto-detect with override Browser locale auto-detect, independent from market, overridable

User's choice: Auto-detect with override, independent from market/currency.


First Additional Language

Language choice

Option Description Selected
German (de) Primary target market, user speaks it natively
French (fr) Tests different grammar family
Both German + French Stress-tests the system

User's choice: German. User noted they can't validate French ("aint speaking french, can only send ai agents to test").

Translation production

Option Description Selected
Manual translation User writes German strings
AI-generated, user reviews Claude generates, user does formal review pass
AI-generated, fix organically Claude generates, user catches issues during normal app usage

User's choice: AI-generated, no dedicated review — fix issues as they're noticed.

Claude's Discretion

  • Library choice (react-i18next vs. Lingui)
  • String key naming convention
  • Dynamic content interpolation patterns
  • Extraction strategy (bulk vs. incremental)

Deferred Ideas

None — discussion stayed within phase scope.