Repository navigation
Proposal: ship Korean as a built-in locale (branch ready) #10687
Replies: 2 comments
|
Thank you for preparing such an extensive and thorough translation work. Having Korean available makes a huge difference for daily productivity. While reviewing your proposal, I noticed that directly modifying LOCALE_IDS and core dictionaries requires rebuilding from source, which makes upstream maintenance tricky and introduces runtime isolation concerns before an official PR is merged. To provide an immediately usable and safe alternative, I packaged these translations using DSH’s official external plugin API (ctx.locale.addLanguage + ctx.locale.register), complete with scoped typography enhancements: Complete Isolation: Packaged cleanly as an independent plugin without touching any core engine files or global environments. It supports instant 1-click install and 100% clean rollback. Full Translation Parity: Reused and verified all 65 client namespaces (~2,910 keys) with zero key/placeholder mismatches. Scoped Typography: Injected an optimized Korean font-family fallback stack (Pretendard Variable, SUIT, Apple SD Gothic Neo, etc.) scoped strictly to html:lang(ko) body. Monospace seats (--ds-font-family-code, terminal) and user-defined custom theme settings remain completely untouched. Graceful Yielding: Built with an initial guard so it automatically steps aside without conflicts if DSH upstream introduces built-in Korean support later on. For anyone who wants to use Korean right away without waiting for core merges or altering local builds, the repository and installation steps are available here: Huge thanks again for kickstarting the localization effort! |
|
Related proposal, may matter for how this one ships: make the UI locale an ordered preference list (e.g. Details and a link list of the other language threads: #11699 |
Uh oh!
There was an error while loading. Please reload this page.
dsh ships two built-in locales (Chinese and English), so a Korean reader has no selectable language: the settings Language row offers only 中文 and English, and browser language matching has nothing to resolve for
ko.I prepared a branch that adds Korean as a third built-in locale and translates the shipped UI. Since CONTRIBUTING says external pull requests are not accepted yet, this post is the public record; the branch is ready to pull in or rebase.
What the branch changes
LOCALE_IDSbecomes['zh', 'ko', 'en']with a 한국어 definition falling back toen, so selection, persistence, browser matching, and<html lang>cover Korean through the existing definition path. The desktop shell resolver (apps/desktop/src/locale.ts) acceptskofor its menus, welcome window, and update dialogs.ctx.locale.register(ns, …)now requires the Korean dictionary: adding the id toBuiltInLocaleIdmakes the existingRecord<BuiltInLocaleId, LocaleDictOf<N>>seat demand it, so a package that adds copy without Korean failstypecheck. Every shipped client namespace, the sharedcommonvocabulary, settings rows, the desktop shell dictionary, and the shared frequency and zoom fragments are translated (~2,900 keys across 66 dictionaries).scripts/locale-dictionary-parity.spec.tsnow requires every shipped locale for each discovered dictionary group with identical keys against thezhsource of truth, covering the inline-array and spread shapes a single type cannot reach..agents/notes/implemented/architecture/2026-10-23-korean-built-in-locale.md) records the decision and rejects the alternative: an external pack throughaddLanguagecannot force coverage, so untranslated keys would silently fall back to English. The language-pack path stays available for languages that will never be complete.Verification
pnpm run typecheck(host/client compilers and aggregates),pnpm run test:gui(10,764 passed),npx vitest run scripts/locale-dictionary-parity.spec.ts,pnpm run verify-client-ui-i18n(1,061 client UI sources),pnpm run build:artifacts+pnpm run build:check,pnpm run verify-md-links, plus a served-bundle check on a built install.Links
master: master...v9bm4pfnz6-hue:feat/korean-locale1091f232fdHappy to rebase, split the change (catalog + gates first, translations after), or turn it into anything that fits the roadmap.
All reactions