#22570: feat(i18n): add Korean (ko) locale to Control UI
app: web-ui
size: L
Cluster:
Internationalization Enhancements
## Summary
- Add full Korean (ko) locale to the gateway Control UI
- Auto-detect Korean browsers via `navigator.language`
- Add `languages.ko` entry to all existing locale files (en, zh-CN, zh-TW, pt-BR)
## Translation policy
- Menu/tab names stay in English (Chat, Overview, Channels, etc.)
- Descriptions, hints, and UI labels translated to Korean
- Technical terms (WebSocket, Gateway Token, Tailscale) remain in English
## Changes
| File | Change |
|------|--------|
| `ui/src/i18n/lib/types.ts` | Add `"ko"` to `Locale` union |
| `ui/src/i18n/lib/translate.ts` | `SUPPORTED_LOCALES`, auto-detect, dynamic import |
| `ui/src/i18n/locales/ko.ts` | **New** — complete Korean translation |
| `ui/src/i18n/locales/en.ts` | Add `languages.ko` |
| `ui/src/i18n/locales/zh-CN.ts` | Add `languages.ko` |
| `ui/src/i18n/locales/zh-TW.ts` | Add `languages.ko` |
| `ui/src/i18n/locales/pt-BR.ts` | Add `languages.ko` |
| `ui/src/ui/views/overview.ts` | Add `<option value="ko">` to dropdown |
## Test plan
- [ ] Verify ko.ts key structure matches en.ts exactly
- [ ] Build passes (`vite build` in `ui/`)
- [ ] Language dropdown shows 한국어 option
- [ ] Selecting Korean switches all UI text
- [ ] Korean browser auto-detects locale on first visit
- [ ] Fallback to English works for missing keys
<!-- greptile_comment -->
<h3>Greptile Summary</h3>
Adds complete Korean (ko) locale support to the gateway Control UI. The implementation properly adds `"ko"` to the `Locale` type union, updates the supported locales array, adds auto-detection for Korean browsers via `navigator.language`, and includes the dynamic import for lazy-loading Korean translations. All existing locale files have been updated to include the `languages.ko` entry, and the language dropdown in the Overview view now includes the Korean option.
- Translation structure matches the English baseline exactly with all required keys
- Follows the stated translation policy: menu/tab names remain in English, descriptions/hints/labels are translated
- Technical terms (WebSocket, Gateway Token, Tailscale) preserved in English as specified
- Auto-detection logic correctly identifies `"ko"` prefixed locales
- Lazy-loading implementation follows the existing pattern for other locales
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge with minimal risk
- The changes are purely additive (adding a new locale) with no modifications to existing logic. The Korean translation file follows the exact structure of other locale files, all necessary integration points have been updated (type definition, supported locales array, auto-detection, dynamic import, UI dropdown), and the implementation is consistent with the existing i18n pattern used for other languages.
- No files require special attention
<sub>Last reviewed commit: b5ee1b0</sub>
<!-- greptile_other_comments_section -->
<sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub>
<!-- /greptile_comment -->
Most Similar PRs
#21617: feat(i18n): added korean locale
by Jaejuna · 2026-02-20
92.9%
#22332: i18n: add Korean (ko-KR) locale support
by arusia88 · 2026-02-21
92.6%
#13622: feat(i18n): add complete multi-language support (EN, TR, FR, DE)
by vaur94 · 2026-02-10
81.0%
#22165: feat(i18n): translate hardcoded button labels to all 4 locales
by NikolaVujovic1988 · 2026-02-20
77.7%
#10586: feat: Add Chinese (zh-CN) localization support
by Maxsong-0 · 2026-02-06
77.3%
#21988: feat(i18n): added Thai (th) locale
by samithiwat · 2026-02-20
77.3%
#19689: feat(i18n): added Filipino (fil) locale
by warengonzaga · 2026-02-18
76.9%
#10657: feat(ui): add i18n support with English, Chinese, and Portuguese
by SalimBinYousuf1 · 2026-02-06
76.2%
#8544: feat(i18n): add Japanese translation support with glossary and lang...
by dai · 2026-02-04
74.5%
#9490: Add Internationalization (i18n) Support
by luuman · 2026-02-05
74.4%