Skip to content

feat(desktop): add Korean (ko) locale - #167

Open
moduvoice wants to merge 1 commit into
amicalhq:mainfrom
moduvoice:i18n/add-korean
Open

feat(desktop): add Korean (ko) locale#167
moduvoice wants to merge 1 commit into
amicalhq:mainfrom
moduvoice:i18n/add-korean

Conversation

@moduvoice

@moduvoice moduvoice commented Jul 11, 2026

Copy link
Copy Markdown

Korean (ko) translation PR body template

Motivation

This adds Korean (ko) translation support — to help Korean-speaking users use this
open-source project more comfortably in their own language.

한국 사람들의 오픈소스 이용에 도움이 되게 하기 위해서 한글화 작업을 하였습니다.

Changes

  • Added apps/desktop/src/i18n/locales/ko.json — a full Korean translation with 709 leaf keys: all 708 leaf keys from en.json translated 1:1, plus one additional settings.preferences.language.options.ko self-name entry ("한국어"), mirroring how de/es/ja/zh-TW each list all locale display names.
  • Registered ko in apps/desktop/src/i18n/shared.ts: added the import, added it to the resources map, and added it to the supportedLocales tuple (which resolveLocale uses generically for both exact and base-language matching, so no other logic changes were needed).
  • Added a ko SelectItem to the language switcher in apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx, following the exact same pattern as the existing en/de/es/ja/zh-TW entries.
  • Added a single "ko": "한국어" line to the settings.preferences.language.options block in de.json, es.json, ja.json, and zh-TW.json so the language switcher shows the Korean display name consistently in every locale. No other lines in these four files were touched — each of them already has pre-existing translation gaps versus en.json (5 missing keys in de.json; 19 missing keys each in es.json/ja.json/zh-TW.json), which is out of scope for this PR.

Testing

  • Wrote a script comparing every leaf key of ko.json against en.json: confirmed all 708 en.json keys are present in ko.json with 0 missing and exactly 1 documented extra key (the ko self-name entry) — 709 total. Confirmed 0 {{placeholder}} interpolation-token mismatches, 0 empty-string values, and 0 value-type mismatches (string vs array) between en.json and ko.json.
  • Verified the de/es/ja/zh-TW diffs directly (via git show): each file's diff is exactly one added line ("ko": "한국어"), nothing else changed. Independently confirmed their pre-existing gaps vs. en.json are exactly 5/19/19/19 missing keys respectively (unrelated pre-existing drift, not introduced or fixed by this PR).
  • Read apps/desktop/src/i18n/shared.ts and confirmed ko is correctly wired into resources, supportedLocales, and (transitively, since resolveLocale checks supportedLocales generically) locale resolution/fallback.
  • Read the language switcher in settings/preferences/index.tsx and confirmed the new ko SelectItem matches the existing pattern exactly.
  • Ran pnpm install (with git submodule update --init for the whisper.cpp submodule) and pnpm --filter @amical/types build — both succeeded, including the native whisper.node addon build.
  • Ran tsc --noEmit, eslint, and prettier --check on this branch and, for comparison, on a clean worktree of unmodified upstream main:
    • tsc --noEmit: same single pre-existing error on both (missing type declarations for @amical/whisper-wrapper), unrelated to this change.
    • eslint: identical output on both — 270 warnings, 0 errors, byte-for-byte the same warning list.
    • prettier --check: identical set of 26 flagged files on both, including the pre-existing formatting drift in de.json/ja.json/zh-TW.json (present before this PR); ko.json and es.json are prettier-clean.
  • Manually spot-checked 100+ of the 709 translated strings (including all domain-specific dictation/transcription/AI-model terminology) for accuracy, natural register, and correct Korean particle usage (e.g. 을/를, 이/가 conditional forms around {{variable}} interpolations) — found consistent, natural, formal-register (합니다체) Korean throughout, with proper nouns (Amical, Whisper, Discord) correctly left untranslated and macOS-convention terms (e.g. "손쉬운 사용" for Accessibility) used where appropriate.

Summary by CodeRabbit

  • New Features
    • Added Korean as a selectable app language in Settings.
    • Added Korean translations across the desktop app, including onboarding, menus, settings, notifications, and error messages.
    • Korean language changes follow the existing restart confirmation flow.

Add a full Korean translation (apps/desktop/src/i18n/locales/ko.json),
matching en.json's key structure 1:1 with all interpolation placeholders
preserved. Register ko in the i18next resources/supportedLocales list in
shared.ts and add it to the language switcher on the Preferences page.
Also add the "ko" language-name entry to the existing de/es/ja/zh-TW
locale files so the switcher shows "한국어" consistently everywhere.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ba2542d3-44f3-42cf-adfe-4d6d0e84a55f

📥 Commits

Reviewing files that changed from the base of the PR and between 04aac69 and 183f526.

📒 Files selected for processing (7)
  • apps/desktop/src/i18n/locales/de.json
  • apps/desktop/src/i18n/locales/es.json
  • apps/desktop/src/i18n/locales/ja.json
  • apps/desktop/src/i18n/locales/ko.json
  • apps/desktop/src/i18n/locales/zh-TW.json
  • apps/desktop/src/i18n/shared.ts
  • apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx

📝 Walkthrough

Walkthrough

The desktop app adds a complete Korean translation catalog, registers ko as a supported locale, and adds Korean to the preferences language selector and localized language-option lists.

Changes

Korean locale support

Layer / File(s) Summary
Korean translation catalog
apps/desktop/src/i18n/locales/ko.json
Adds Korean strings across the app shell, onboarding, widget, settings, history, dictation, shortcuts, notes, vocabulary, snippets, and AI Models areas.
Locale registration
apps/desktop/src/i18n/shared.ts
Imports the Korean catalog, adds it to resources, and includes ko in supportedLocales and SupportedLocale.
Preferences language selector
apps/desktop/src/renderer/main/pages/settings/preferences/index.tsx, apps/desktop/src/i18n/locales/{de,es,ja,zh-TW}.json
Adds Korean to the language dropdown and localized language-option maps.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant PreferencesSettingsPage
  participant i18n
  participant koJson
  User->>PreferencesSettingsPage: Select Korean
  PreferencesSettingsPage->>i18n: Resolve ko locale
  i18n->>koJson: Load Korean translations
  koJson-->>i18n: Return translated strings
  i18n-->>PreferencesSettingsPage: Render Korean UI
Loading

Possibly related PRs

  • amicalhq/amical#96: Adds other desktop locales through the same i18n registry and language selector.
  • amicalhq/amical#120: Updates the same locale registration and preferences selector flow for Traditional Chinese.

Suggested reviewers: haritabh-z01, amadeus-x1

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding Korean locale support to the desktop app.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant