i18n(cs): add Czech translations for the admin UI - #2258
Conversation
Registers Czech in the canonical locale list with enabled: false and adds the extracted catalog at packages/admin/src/locales/cs/messages.po. The locale stays disabled in the admin UI until translation coverage is sufficient, per docs/contributing/translating.
Translates all 1936 admin UI strings and enables the locale in the language picker. Plural forms use Czech's four ICU categories (one/few/many/other) rather than the two the English source carries.
🦋 Changeset detectedLatest commit: 99c0bd2 The changes in this PR will be included in the next version bump. This PR includes changesets to release 17 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Scope checkThis PR changes 8,867 lines across 3 files. Large PRs are harder to review and more likely to be closed without review. If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs. See CONTRIBUTING.md for contribution guidelines. |
|
All contributors have signed the CLA ✍️ ✅ |
|
I have read the CLA Document and I hereby sign the CLA |
There was a problem hiding this comment.
This PR adds a complete Czech (cs) admin UI translation and enables it in the language picker. The change is well-scoped and follows EmDash's localization conventions.
What I checked:
- Approach: Adding a new locale via
locales.ts+ a newmessages.pocatalog is the idiomatic path for EmDash translations. No unrelated source changes. - Locale registration:
packages/admin/src/locales/locales.tsaddscswithlabel: "Čeština",enabled: true, and nodir(defaults to LTR). It is placed correctly in alphabetical order by English name between Chinese (zh-TW) and Dutch (nl). - Catalog structure: The new
packages/admin/src/locales/cs/messages.pocontains 1,938 translated messages, no fuzzy flags, no gettext-stylemsgid_plural/msgstr[n]entries, and matches the English source's message set exactly. - Structural integrity: All ICU argument placeholders are preserved between source and translation, all XML/HTML tags match, every message has balanced braces, and every ICU
pluralexpression includes the requiredotherarm. - Tooling integration:
lingui.config.ts,lunaria.config.ts, andloadMessages.tsall derive locale lists fromlocales.ts, so Czech is automatically included in extraction, compilation, Lunaria tracking, and runtime loading. Existing locale tests intests/lib/locales.test.tswill exercise Czech catalog loading because they iterateSUPPORTED_LOCALES. - Changeset:
.changeset/czech-locale-cs.mdfollows the established patch-level format for@emdash-cms/admin. - AGENTS.md conventions: No user-facing strings were added, no content-table queries were introduced, no source-code comments added, and the change stays within the i18n scope.
I cannot verify Czech wording quality or plural nuance, and I do not run tooling in this environment, but the technical implementation is clean. One note: the Plural-Forms header uses a simplified Czech formula rather than the full CLDR modulo rule used by some sibling Slavic locales. Because EmDash uses ICU plural messages resolved at runtime via Intl.PluralRules/Lingui, this header does not affect runtime behavior; it is conventional for gettext-style PO metadata.
No findings.
|
Would love to see this merged! |
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-verification
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
|
@KingDoxik thanks! BTW, I think I know you from X because you are using Effect just like us (and apparently also EmDash) 😀 let me know when you need a job Also, hi from Prague |
|
Updated against |
What does this PR do?
Adds Czech (
cs, Čeština) to the EmDash admin UI and enables it in the language picker.The catalog translates all 1,938 current admin messages, including Czech ICU plural forms (
one,few,many, andother). The translations were reviewed for source context, terminology consistency, placeholder integrity, and natural Czech UI wording by a fluent Czech speaker.AI was used for the first translation pass and subsequent review assistance. The PR author remains responsible for the final Czech wording.
No related issue.
Type of change
Checklist
pnpm typecheckpassespnpm lintpassespnpm testpasses (or targeted tests for my change)pnpm formathas been runAI-generated code disclosure
Screenshots / test output
pnpm build— passedpnpm typecheck— passedpnpm lint— passedpnpm --filter @emdash-cms/admin test -- --run tests/lib/locales.test.ts— 104 files and 1,243 tests passed, including catalog loading for every enabled localepnpm run locale:extract— Czech: 1,938 messages, 0 missingpnpm run locale:compile— passedThe root
pnpm testrun reaches an unrelatedregistry-verificationpackaging check that invokes the native pnpm executable through Node on macOS and fails withSyntaxError: Invalid or unexpected token; all package tests before that point and the complete targeted admin suite pass.