Repository navigation
i18n(da): add Danish translations - #3492
Conversation
🦋 Changeset detectedLatest commit: f5a0503 The changes in this PR will be included in the next version bump. This PR includes changesets to release 12 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 |
There was a problem hiding this comment.
This is the right change for what it sets out to do: add Danish as a fully selectable admin UI language. There are no source-code changes, no logic changes, and no API or database implications, so the surface area is intentionally small.
What I checked:
- Read the unified diff (
packages/admin/src/locales/locales.ts, the newpackages/admin/src/locales/da/messages.po, and.changeset/danish-admin-locale.md). - Confirmed AGENTS.md conventions around Lingui catalogs, locale registration, and changesets.
- Verified the locale is inserted alphabetically in
locales.ts, uses the standard BCP-47 codeda, defaults to LTR, and is enabled. - Compared the Danish catalog against the source English catalog: 3,040 msgids, identical set, no extras or omissions. 28 entries intentionally have empty
msgstrvalues and will fall back to English, matching the PR description. - Spot-checked translations containing ICU placeholders/plurals and ran a quick static scan for placeholder mismatches and unbalanced braces — none found.
- Verified the changeset is present, targets
@emdash-cms/admin, and uses apatchbump consistent with a translation-only change.
The PR also notes known surrounding gaps (day-picker calendar strings, relative-time strings, audit-log plugin copy) that are intentionally out of scope, so there is no introduced inconsistency. The code is clean.
One optional follow-up: if react-day-picker/locale exports a Danish locale, wiring da into packages/admin/src/locales/day-picker.ts would close the calendar gap — but that is independent of this change.
Scope checkThis PR changes 13,807 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. |
@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-test
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-loader
@emdash-cms/registry-moderation
@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: |
What does this PR do?
Adds Danish (
da, "Dansk") translations for the admin UI and makes the locale selectable in the language picker.packages/admin/src/locales/locales.ts: adds{ code: "da", label: "Dansk", enabled: true }.packages/admin/src/locales/da/messages.po: 3012 of 3040 strings translated. The 28 empty strings fall back to English on purpose, because I couldn't settle on the right Danish term (for example "records" in the site package import and export flow)..changeset/danish-admin-locale.md: patch changeset for@emdash-cms/admin.Terminology
I, a native Danish speaker, have reviewed every string and previewed the translations in the running admin, side by side with English. However, since this is a lot of text to read through, some mistakes might have slipped through..
Outside this PR (not in the admin catalog):
packages/admin/src/locales/day-picker.tshas nodaentry, so the date picker calendar stays English.packages/admin/src/lib/utils.ts:40-43.packages/plugins/audit-log.9/26/2026, while the editor shows26. sep. 2026.Type of change
Checklist
pnpm typecheckpassespnpm lintpassespnpm testpasses (or targeted tests for my change). The admin tests had 2711 passing and 1 failing. The failing test,tests/published-at-rev.test.tsx"recovers the newer token when the date write conflicts", also fails onmainwithout this change. fix(admin): allow publication-date retry after a conflict #3491 seems to be fixing this.pnpm formathas been runmessages.pochange is the translation itself.AI-generated code disclosure
Screenshots / test output
Menu, collection and taxonomy names (Primary Navigation, Pages, Posts, Categories) come from the demo seed data, not the admin catalog.
1. Login
2. Dashboard (Kontrolpanel)
3. Posts list
4. Post editor with the full side panel
5. Media library (Mediebibliotek)
6. Menu editor
7. Settings (Indstillinger)