Skip to content

Unify Desktop native surfaces on one locale authority #2685

Description

@me2seeks

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions