You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Settings exposes Follow system / 中文 / English, but localization is partial:
personalization.uiLocale is 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/ui copy remains inline Chinese.
English therefore produces a mixed-language interface.
Follow system currently 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.uiLocale remains the only persisted preference.
One derived zh | en locale drives React rendering, <html lang>, and Intl.
Explicit language changes apply immediately and survive restart.
Follow system selects a supported system language after desktop coverage is complete.
Desktop and @maka/ui copy 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.
Problem
Settings exposes
Follow system / 中文 / English, but localization is partial:personalization.uiLocaleis persisted, while the effective locale is only mirrored through DOM attributes.@maka/uicopy remains inline Chinese.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.zh | enlocale drives React rendering,<html lang>, andIntl.Follow systemselects a supported system language after desktop coverage is complete.@maka/uicopy comes from typed catalogs owned by the presenting layer.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.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
@maka/core.LocaleProvider/useUiLocale()to@maka/ui.<html lang>and test overrides synchronized.auto -> zhtemporarily to avoid broadening mixed-language exposure.PR 2: Shell, onboarding, and settings
PR 3: Conversation, sessions, and tools
PR 4: Remaining coverage and completion gate
Follow systemresolve from supported system languages.Completion criteria
Follow systembehaves as labeled.<html lang>andIntluse the resolved locale.Non-goals