← Back to PRs

#21617: feat(i18n): added korean locale

by Jaejuna open 2026-02-20 05:05 View on GitHub →
app: web-ui size: S
## Summary - Problem: Korean (ko-KR) was listed in `SUPPORTED_LOCALES` and the language selector in the UI, but no translation file existed - Why it matters: Korean is one of the most-requested languages in #3460 - What changed: Added `ko-KR.ts` with full Korean translations; registered `ko-KR` in the `setLocale` dynamic import chain; added `koKR` display name entry to all existing locale files (en, zh-CN, zh-TW, pt-BR) - What did NOT change: No changes to i18n architecture, translation loading mechanism, locale detection logic, or any non-i18n code ## Change Type - [ ] Bug fix - [x] Feature - [ ] Refactor - [ ] Docs - [ ] Security hardening - [ ] Chore/infra ## Scope - [ ] Gateway / orchestration - [ ] Skills / tool execution - [ ] Auth / tokens - [ ] Memory / storage - [ ] Integrations - [ ] API / contracts - [x] UI / DX - [ ] CI/CD / infra ## Linked Issue/PR - Relates to #3460 - Related #18508 ## User-visible / Behavior Changes - Korean (한국어) is now available in the language selector in the Overview tab - Users with `navigator.language` starting with `ko` will now have Korean auto-detected on first visit instead of falling back to English ## Security Impact - New permissions/capabilities? No - Secrets/tokens handling changed? No - New/changed network calls? No - Command/tool execution surface changed? No - Data access scope changed? No ## Repro + Verification ### Environment - OS: macOS Sequoia (Apple Silicon) - Runtime/container: Node.js 22, pnpm - Model/provider: N/A (UI-only changes) - Integration/channel: Control UI - Relevant config: N/A ### Steps 1. Open the Control UI and navigate to the Overview tab 2. Open the language selector and select 한국어 3. Verify all UI labels switch to Korean 4. Reload the page and verify Korean is restored from localStorage ### Expected - All translated strings render in Korean - Language preference persists across reloads ### Actual - Confirmed above behavior ## Evidence - [x] Failing test/log before + passing after - [ ] Trace/log snippets - [x] Screenshot/recording - [ ] Perf numbers (if relevant) - Build passes: `pnpm build` completes successfully (8241ms, 0 errors) ## Human Verification - Verified scenarios: Build passes, all locale files have consistent `koKR` key structure, translation keys match en.ts exactly - Edge cases checked: TypeScript enforces that ko-KR.ts has the same keys as TranslationMap — missing keys would cause a build error, so coverage is complete by construction **Translator note:** Translations were authored by a native Korean speaker working as a localization engineer at Nexon. Technical terms (Gateway, WebSocket, Skills, CLI, Canvas, Tailscale, Cron, etc.) are intentionally kept in English per the convention established in #18508. <img width="1429" height="775" alt="스크린샷 2026-02-20 14 00 08" src="https://github.com/user-attachments/assets/245c381a-7342-4171-94af-8041a5390b46" /> ## Compatibility / Migration - Backward compatible? Yes - Config/env changes? No - Migration needed? No ## Failure Recovery - How to revert: Remove `ko-KR.ts`, revert `koKR` entries from all locale files, remove `ko-KR` branch from `setLocale` - Files to restore: `ui/src/i18n/locales/ko-KR.ts`, `ui/src/i18n/locales/en.ts`, `zh-CN.ts`, `zh-TW.ts`, `pt-BR.ts`, `ui/src/i18n/lib/translate.ts` ## Risks and Mitigations - Risk: Translation accuracy for technical UI strings - Mitigation: Native speaker authorship; technical terms kept in English; community can refine via follow-up PRs <!-- greptile_comment --> <h3>Greptile Summary</h3> Added complete Korean (ko-KR) locale support to the Control UI. Registered `ko-KR` in `SUPPORTED_LOCALES`, added language detection for Korean browser locales, and implemented dynamic import loading. All existing locale files updated with the `koKR` display name entry. - Added complete Korean translation file with 100+ strings covering navigation, tabs, overview, chat, and common UI elements - Technical terms (Gateway, WebSocket, Skills, Cron, etc.) correctly kept in English per established convention - Translation keys match English structure exactly, ensuring type safety - Added language selector dropdown option in Overview tab - Auto-detection works correctly for users with Korean browser locale (`navigator.language.startsWith("ko")`) One typo found in Korean translation that should be corrected before merge. <h3>Confidence Score: 4/5</h3> - This PR is safe to merge after fixing the Korean translation typo - PR follows established i18n patterns correctly, with proper type definitions, locale registration, and dynamic imports. Structure is consistent with existing translations. One typo in Korean text prevents full confidence score, but it's a simple fix. No logical errors or architectural issues. - ui/src/i18n/locales/ko-KR.ts requires a one-word typo fix before merge <sub>Last reviewed commit: 8c4d504</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