Skip to content

feat(i18n): add Korean (ko) translation#366

Merged
ArnasDon merged 1 commit into
ArnasDon:mainfrom
moduvoice:i18n/add-korean
Jul 17, 2026
Merged

feat(i18n): add Korean (ko) translation#366
ArnasDon merged 1 commit into
ArnasDon:mainfrom
moduvoice:i18n/add-korean

Conversation

@moduvoice

Copy link
Copy Markdown
Contributor

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

  • Adds 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).
  • No other files touched: no changes to .env.local.example, no default-locale switch, no hardcoded component text, no package-lock.json drift. This is the only file in the diff (git diff --stat main..HEADmessages/ko.json | 1696 +++..., 1 file changed).
  • Since this repo's next-intl setup (src/i18n/request.ts) selects the single active locale from NEXT_PUBLIC_APP_LOCALE at runtime (no in-app locale switcher/registry), adding messages/ko.json is a complete, self-contained integration — set NEXT_PUBLIC_APP_LOCALE=ko to activate it.
  • ICU plural blocks (e.g. {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 with en.json; both members of each pair carry the same (correct) Korean text, since Korean doesn't distinguish singular/plural phrasing.

Test plan

  • Key parity verified programmatically against messages/en.json: 1426/1426 leaf keys present, 0 missing, 0 extra.
  • All ICU interpolation variables and <tag>-style placeholders (<bold>, <code>, <strong>, etc.) verified structurally identical between en.json and ko.json for 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.
  • Spot-checked 60+ translated strings across all namespaces (login, dashboard, contacts, pipelines/deals, broadcasts, automations, flows, settings) for accuracy, correct CRM terminology, and consistent polite register (합니다/습니다 style) — reads naturally, no literal/awkward machine-translation artifacts found.
  • npm run build — not run to completion in this environment; it requires NEXT_PUBLIC_SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY (no .env.local configured here), so prerendering fails on /forgot-password for 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.

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.
@moduvoice
moduvoice requested a review from ArnasDon as a code owner July 11, 2026 17:13
@ArnasDon
ArnasDon merged commit 27b0acf into ArnasDon:main Jul 17, 2026
1 check passed
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.

2 participants