Problem
UiLocale will ship ['zh-CN','zh-TW','en'] after #3853. ko/ko-KR system languages fall back to en. There is no type-safe slot for Korean, so catalog entries cannot be added.
Desired outcome
UI_LOCALES includes ko, isUiLocale/isUiLocalePreference accept ko
resolveSystemUiLocale recognizes ko, ko-KR, ko_KR (case-insensitive, ko prefix) and maps auto → ko correctly
uiLocaleToIntlLocale maps ko → ko-KR
- Existing
zh-CN/zh-TW/en behavior unchanged; persisted auto preference preserved
- Tests cover
resolveSystemUiLocale(['ko','ko-KR','en']) and resolveUiLocale('auto', ko); missing ko entry in any UiCatalog<T> fails typecheck
Alternatives or workarounds
Keep English fallback for Korean systems.
Scope
packages/core/src/ui-locale.ts + tests (desktop-locale-authority, e2e-fixture-locale). Reuses #3853 pattern for zh-TW. No catalog content in this slice.
Delivery note (2026-08-27 audit): This slice must not land alone with Partial<Record<UiLocale,T>> widening. Per notes/pr-3853-feature-audit.md — widening would make the already-enabled zh-CN/zh-TW optional as well and force every getter to add undefined fallback/assertion, then require a second global tighten. Instead, keep dictionaries off the enabled union in the domain slices (#3977-#3980) and enable ko atomically (or on a stacked integration branch), as UiCatalog<T> = Record<UiLocale,T> requires all catalogs to carry the key at once. See audit § Global follow-up.
Acceptance criteria
Parent: #3974
Problem
UiLocalewill ship['zh-CN','zh-TW','en']after #3853.ko/ko-KRsystem languages fall back toen. There is no type-safe slot for Korean, so catalog entries cannot be added.Desired outcome
UI_LOCALESincludesko,isUiLocale/isUiLocalePreferenceacceptkoresolveSystemUiLocalerecognizesko,ko-KR,ko_KR(case-insensitive,koprefix) and mapsauto→kocorrectlyuiLocaleToIntlLocalemapsko→ko-KRzh-CN/zh-TW/enbehavior unchanged; persistedautopreference preservedresolveSystemUiLocale(['ko','ko-KR','en'])andresolveUiLocale('auto', ko); missingkoentry in anyUiCatalog<T>fails typecheckAlternatives or workarounds
Keep English fallback for Korean systems.
Scope
packages/core/src/ui-locale.ts+ tests (desktop-locale-authority,e2e-fixture-locale). Reuses #3853 pattern forzh-TW. No catalog content in this slice.Acceptance criteria
resolveSystemUiLocale(['ko-KR']) === 'ko',['en','ko'] === 'en'(order respected)uiLocaleToIntlLocale('ko') === 'ko-KR'npm --workspace @maka/core testgreen with new casesmainalone — it lands together with the catalog slices via atomic vertical or stacked integration branch, keepingUiCatalogstrictParent: #3974