Context
Part of #2672.
Desktop already resolves UiLocalePreference correctly in the renderer, but post-settings native surfaces do not share one locale authority. Today:
- Runtime Host upgrade prompts are fixed to English
- run-completion notification fallbacks are fixed to Chinese
- the Client settings confirmation is fixed to English
- permission and Computer Use surfaces each resolve or cache locale independently
- the project directory picker also embeds an English title
This makes the selected Desktop language unreliable outside the renderer, especially after changing the preference while the app is running.
Proposed slice
Add one Desktop main-process locale authority backed by the persisted Client settings and Electron's preferred system languages, then route the post-settings native surfaces through it.
Keep copy domain-owned rather than introducing a global translation file:
- Runtime Host upgrade copy stays with the upgrade dialog
- notification fallback copy stays with notification policy
- Client settings and project-picker copy stay with their owning Desktop domains
The pre-settings storage-root repair dialog remains system-locale based. Renderer copy, CLI/TUI locale policy, error-code presentation, and repository enforcement are separate #2672 slices.
Acceptance criteria
- explicit
zh and en preferences control the migrated native surfaces
auto follows Electron's preferred system languages
- a persisted locale change is observed by the next native interaction without restarting Desktop
- upgrade prompts, notification fallbacks, Client settings confirmation, permission UI, Computer Use status UI, and the project picker use the same authority
- no Runtime Host protocol or machine-readable output changes
- focused tests cover explicit locale, automatic fallback, and a mid-session preference change
I plan to implement this slice.
Context
Part of #2672.
Desktop already resolves
UiLocalePreferencecorrectly in the renderer, but post-settings native surfaces do not share one locale authority. Today:This makes the selected Desktop language unreliable outside the renderer, especially after changing the preference while the app is running.
Proposed slice
Add one Desktop main-process locale authority backed by the persisted Client settings and Electron's preferred system languages, then route the post-settings native surfaces through it.
Keep copy domain-owned rather than introducing a global translation file:
The pre-settings storage-root repair dialog remains system-locale based. Renderer copy, CLI/TUI locale policy, error-code presentation, and repository enforcement are separate #2672 slices.
Acceptance criteria
zhandenpreferences control the migrated native surfacesautofollows Electron's preferred system languagesI plan to implement this slice.