-
-
Notifications
You must be signed in to change notification settings - Fork 49
Description
feat: Add app language selection and localized settings surfaces
Problem
Settings and shared list chrome are still hard-coded in English. That makes the app harder to adopt for non-English users and leaves new language-selection work without a complete persistence contract across the renderer and stored settings.
Solution
PR #145 introduces app language selection and localized settings surfaces: a shared i18n runtime, locale catalogs, renderer-wide provider wiring, and persisted appLanguage handling so the selected locale actually survives reloads.
Key design decisions:
- Missing translations fall back to English instead of breaking the UI
- The feature is user-controlled via a clearly labeled language selector in General settings
- Translation wiring is shared across settings tabs and list chrome so future locale expansion stays resource-first
Changes
| Area | What changed |
|---|---|
settings persistence |
appLanguage now round-trips for every shipped locale code |
renderer i18n runtime |
Added locale resolution, translation lookup, interpolation, and provider wiring |
settings surfaces |
Localized Settings tabs plus General, AI, Extensions, Advanced, and Store views |
shared chrome |
Localized list loading / empty / actions strings |
documentation |
Added i18n architecture notes and fallback behavior |
Validation
-
npm run build:mainpasses cleanly -
npm run build:rendererpasses cleanly - Repository / commit / PR guardrails passed
- Verified the
appLanguagesetting round-trips through persisted settings - Spot-checked locale coverage;
de,fr, andessafely fall back to English for missing keys
User Benefit
Users can switch core settings surfaces away from English without relying on extension-side work, and maintainers get a reusable localization foundation for broader app coverage.
Reference
Happy to rebase, tighten scope, or adjust any implementation details if this does not fit the current roadmap. Thanks for the great project! 🙏