jackwener/maka-agent
View on GitHubfeat(desktop): make UI language selection coherent and complete
Open
#1,052 opened on Jul 15, 2026
enhancementgood first issue
Repository metrics
- Stars
- (1 star)
- PR merge metrics
- (PR metrics pending)
Description
Problem
Settings exposes Follow system / 中文 / English, but localization is partial:
personalization.uiLocaleis persisted, while the effective locale is only mirrored through DOM attributes.- Changing those attributes does not provide reactive locale state to the React tree.
- Most desktop and
@maka/uicopy remains inline Chinese. - English therefore produces a mixed-language interface.
Follow systemcurrently falls back to Chinese instead of following the system.
The missing invariant is: one derived locale must drive all user-visible copy and locale-sensitive formatting.
Desired outcome
personalization.uiLocaleremains the only persisted preference.- One derived
zh | enlocale drives React rendering,<html lang>, andIntl. - Explicit language changes apply immediately and survive restart.
Follow systemselects a supported system language after desktop coverage is complete.- Desktop and
@maka/uicopy comes from typed catalogs owned by the presenting layer. - Replaced hard-coded and DOM-reading paths are removed.
Use a small typed TypeScript catalog and React locale context. Do not introduce i18next until more locales, external translators, or a translation platform create that need.
Ownership
@maka/core: locale preference/type and pure resolution policy.@maka/ui: locale provider and shared-component catalog.- Desktop renderer: desktop product catalog and root wiring.
- CLI: unchanged; localization is a separate concern.
The resolved locale is derived and never persisted.
Delivery slices
flowchart LR
I[Issue: coherent desktop localization] --> P1[PR 1<br/>Reactive locale foundation]
P1 --> P2[PR 2<br/>Shell, onboarding, settings]
P1 --> P3[PR 3<br/>Conversation, sessions, tools]
P2 --> P4[PR 4<br/>Remaining coverage and completion gate]
P3 --> P4
P4 --> D[Complete desktop zh/en<br/>Enable Follow system]
PR 2 and PR 3 can proceed in parallel after PR 1.
PR 1: Reactive locale foundation
- Consolidate locale types in
@maka/core. - Add
LocaleProvider/useUiLocale()to@maka/ui. - Wire the persisted preference into desktop React state.
- Keep
<html lang>and test overrides synchronized. - Preserve
auto -> zhtemporarily to avoid broadening mixed-language exposure. - Test runtime switching, persistence, and override precedence.
PR 2: Shell, onboarding, and settings
- Migrate navigation, onboarding, Settings, shared controls, toasts, tooltips, placeholders, and accessibility labels used by this journey.
- Ensure users can find the language setting, switch language, navigate, and switch back without untranslated shell controls.
PR 3: Conversation, sessions, and tools
- Migrate the complete fake-backend conversation journey: empty state, composer, messages, permissions, session states, tool activity, errors, timestamps, counts, and accessibility copy.
- Cover presentation helpers in both locales.
PR 4: Remaining coverage and completion gate
- Migrate all remaining desktop and shared-UI surfaces.
- Remove replaced localization paths and Chinese-only contracts.
- Add CI enforcement against new inline user-visible copy in migrated source.
- Make
Follow systemresolve from supported system languages. - Add representative zh/en E2E and visual coverage.
Completion criteria
- Chinese and English each produce a coherent desktop renderer.
- Runtime switching requires no reload.
Follow systembehaves as labeled.- Catalog shapes match at compile time; missing English copy cannot silently fall back.
<html lang>andIntluse the resolved locale.- There is one persisted preference, one derived locale, and no parallel localization path.
Non-goals
- CLI localization
- Additional locales
- i18next, ICU, remote catalogs, or translation-platform integration
- Translating user content, model output, brands, code, commands, or generated content