feat(i18n): add Korean (ko) translation#366
Merged
Merged
Conversation
Adds messages/ko.json — full next-intl translation covering all 12 namespaces (LoginPage, Sidebar, Header, ModeToggle, Dashboard, Inbox, Contacts, Pipelines, Broadcasts, Automations, Flows, Settings). Scoped to the language file only, per maintainer guidance on PR ArnasDon#362: no changes to the default locale, component text, or any other file. Verified 1:1 key parity with messages/en.json (1426/1426 leaf keys) and exact preservation of all interpolation variables and HTML-ish tags across every message.
ArnasDon
approved these changes
Jul 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds Korean (
ko) translation support so Korean-speaking users can use wacrm more comfortably in their own language.한국 사람들의 오픈소스 이용에 도움이 되게 하기 위해서 한글화 작업을 하였습니다.
Scope is deliberately limited to the language file only, per the review discussion on #362 (translate frontend to Spanish), where a contributor asked that translation PRs stay strictly limited to language files / i18n keys and avoid touching hardcoded component strings or the default locale. This PR does exactly that: it adds a new locale file and nothing else.
What changed
messages/ko.json(new file) — full next-intl translation covering all 12 existing namespaces (LoginPage,Sidebar,Header,ModeToggle,Dashboard,Inbox,Contacts,Pipelines,Broadcasts,Automations,Flows,Settings)..env.local.example, no default-locale switch, no hardcoded component text, nopackage-lock.jsondrift. This is the only file in the diff (git diff --stat main..HEAD→messages/ko.json | 1696 +++..., 1 file changed).src/i18n/request.ts) selects the single active locale fromNEXT_PUBLIC_APP_LOCALEat runtime (no in-app locale switcher/registry), addingmessages/ko.jsonis a complete, self-contained integration — setNEXT_PUBLIC_APP_LOCALE=koto activate it.{count, plural, =1 {deal} other {deals}}) were simplified to plain{count}interpolation with a Korean counter word (e.g. "딜 {count}건") since Korean has no grammatical plural — a valid ICU MessageFormat approach for this locale. i18next-style_plural-suffixed key pairs (e.g.rowsReady/rowsReady_plural) were kept for key parity withen.json; both members of each pair carry the same (correct) Korean text, since Korean doesn't distinguish singular/plural phrasing.Test plan
messages/en.json: 1426/1426 leaf keys present, 0 missing, 0 extra.<tag>-style placeholders (<bold>,<code>,<strong>, etc.) verified structurally identical betweenen.jsonandko.jsonfor every leaf key (the only intentional differences are the plural-simplification cases described above).npx tsc --noEmit— clean, no errors.npx prettier --check messages/ko.json— passes Prettier formatting.npx vitest run— 629/629 tests passed across 63 files.npm run build— not run to completion in this environment; it requiresNEXT_PUBLIC_SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY(no.env.localconfigured here), so prerendering fails on/forgot-passwordfor reasons unrelated to this change (confirmed the failure is a Supabase-client-initialization error, not a translation/build issue).Related
None — this is a standalone translation addition, scoped per the #362 discussion referenced above.