i18n(hi): add Hindi (हिन्दी) translations - #2301
Conversation
Adds the Hindi locale catalog with full coverage of admin UI strings, following the same pattern as the Indonesian locale contribution. Co-authored-by: Cursor <cursoragent@cursor.com>
🦋 Changeset detectedLatest commit: 33de59c 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,865 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. |
|
I have read the CLA Document and I hereby sign the CLA You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot. |
There was a problem hiding this comment.
This PR follows the established translation-only pattern: it adds a complete Hindi PO catalog, enables hi in locales.ts, and includes a patch changeset for @emdash-cms/admin. The approach is sound and fits EmDash’s i18n architecture — there are no code behavior changes outside the admin locale list, so SQL, authorization, content-table filters, and logged-out route queries are all unaffected.
I spot-checked the new catalog against the English source: all ICU tags and placeholders are preserved, plural/select argument names match, and there are no fuzzy or obsolete entries. There are no new tests (correctly marked N/A for a translation), and the changeset package/version bump is appropriate.
The one concrete issue is that four translated strings drop the leading whitespace that exists in their source msgid. These spaces are functional — the strings are concatenated immediately after values or other text — so omitting them produces visible spacing regressions such as slug-अतिथि, filename(चयनित), etc. Fixing those four msgstr lines is the only blocker before I’d be happy to approve.
|
|
||
| #: packages/admin/src/routes/bylines.tsx:446 | ||
| msgid " - Guest" | ||
| msgstr "- अतिथि" |
There was a problem hiding this comment.
[needs fixing] The msgid is " - Guest" with a leading space, but the translation msgstr "- अतिथि" drops it. The calling code concatenates this directly after item.slug (packages/admin/src/routes/bylines.tsx:446), so the slug will abut the hyphen in Hindi (e.g. my-slug-अतिथि). Preserve the leading space from the source string.
| msgstr "- अतिथि" | |
| msgstr " - अतिथि" |
|
|
||
| #: packages/admin/src/routes/bylines.tsx:446 | ||
| msgid " - Linked" | ||
| msgstr "- जुड़ा हुआ" |
There was a problem hiding this comment.
[needs fixing] The source " - Linked" includes a leading space for the same inline concatenation as " - Guest" (packages/admin/src/routes/bylines.tsx:446). The translation should keep that space so the slug does not run into the hyphen.
| msgstr "- जुड़ा हुआ" | |
| msgstr " - जुड़ा हुआ" |
|
|
||
| #: packages/admin/src/components/MenuEditor.tsx:521 | ||
| msgid " (opens in new window)" | ||
| msgstr "(नई विंडो में खुलता है)" |
There was a problem hiding this comment.
[needs fixing] The source " (opens in new window)" begins with a space because it is rendered right after a menu label (packages/admin/src/components/MenuEditor.tsx:521). The current translation will appear attached to the preceding text; keep the leading space for consistent spacing.
| msgstr "(नई विंडो में खुलता है)" | |
| msgstr " (नई विंडो में खुलता है)" |
| #: packages/admin/src/components/MediaPickerModal.tsx:867 | ||
| #: packages/admin/src/components/MediaPickerModal.tsx:950 | ||
| msgid " (selected)" | ||
| msgstr "(चयनित)" |
There was a problem hiding this comment.
[needs fixing] This string is interpolated into an aria-label as ${item.filename}${selected ? t (selected) : ""} (packages/admin/src/components/MediaPickerModal.tsx:867,950). Dropping the leading space produces filename(चयनित) for screen-reader users. Restore the leading space.
| msgstr "(चयनित)" | |
| msgstr " (चयनित)" |
What does this PR do?
Adds Hindi (हिन्दी /
hi) translations for the EmDash admin UI.All 1,938 translatable strings are translated with ICU placeholders preserved, plural forms validated, and consistent Hindi terminology (e.g. पुनर्निर्देश for redirects, कूड़ेदान for trash, फ़ील्ड for schema fields). The locale is enabled in the admin UI.
Follows the same pattern as #872 (Indonesian).
Type of change
Checklist
pnpm typecheckpassespnpm lintpassespnpm testpasses (or targeted tests for my change)pnpm formathas been runAI-generated code disclosure
Test output
Notes
hi) is LTR — nodirproperty needed{0},{email}, etc.) preserved unchangedone/otherwith Hindi inner textMade with Cursor