chore(localizations): Add missing german translations and improve existing ones#6769
Conversation
🦋 Changeset detectedLatest commit: a4306d8 The changes in this PR will be included in the next version bump. This PR includes changesets to release 4 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 |
|
Someone is attempting to deploy a commit to the Clerk Production Team on Vercel. A member of the Team first needs to authorize it. |
|
Warning Rate limit exceeded@ubersan has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 6 minutes and 55 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (2)
WalkthroughAdded comprehensive German translations to the de-DE localization file, plus a patch changeset for the localizations package and a Vitest-specific backend TypeScript config; no runtime logic changes. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20–25 minutes Poem
✨ Finishing touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment Pre-merge checks✅ Passed checks (3 passed)
|
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (5)
packages/localizations/src/de-DE.ts (5)
188-194: Fix German prepositions in relative date strings.“bei” is incorrect here; use “am … um …”. Also adjust “Letzte” → “Letzten”.
Apply:
- next6Days: "{{ date | weekday('de-DE','long') }} bei {{ date | timeString('de-DE') }}", - previous6Days: "Letzte {{ date | weekday('de-DE','long') }} um {{ date | timeString('de-DE') }}", + next6Days: "Am {{ date | weekday('de-DE','long') }} um {{ date | timeString('de-DE') }}", + previous6Days: "Letzten {{ date | weekday('de-DE','long') }} um {{ date | timeString('de-DE') }}",
403-403: Typo: capitalize “Ihre”.Formal address must be capitalized.
- description: 'Verwalten Sie ihre Organisation.', + description: 'Verwalten Sie Ihre Organisation.',
647-650: Grammar fixes: dative adjective and verb agreement.
- “ursprünglichem Tab” → “ursprünglichen Tab”.
- “Änderungen … wirkt” → “Änderungen … wirken”.
- subtitle: 'Kehren Sie zum ursprünglichem Tab zurück, um fortzufahren', + subtitle: 'Kehren Sie zum ursprünglichen Tab zurück, um fortzufahren',- calloutInfoLabel: 'Änderungen des Anmeldemodus wirkt sich nur auf neue Benutzer aus.', + calloutInfoLabel: 'Änderungen des Anmeldemodus wirken sich nur auf neue Benutzer aus.',Also applies to: 475-476
493-493: Unify “E‑Mail” spelling.Use “E‑Mail” consistently (DIN 5008). Several places use “E-mail”.
- subtitle: 'Die Domain {{domainName}} muss per E-mail verifiziert werden.', + subtitle: 'Die Domain {{domainName}} muss per E-Mail verifiziert werden.',- actionLink__use_email: 'E-mail nutzen', - actionLink__use_email_username: 'E-mail oder Benutzernamen nutzen', + actionLink__use_email: 'E‑Mail verwenden', + actionLink__use_email_username: 'E‑Mail oder Benutzernamen verwenden',- messageLine1: 'Die E-mail-Domain {{domain}} wird entfernt.', + messageLine1: 'Die E‑Mail-Domain {{domain}} wird entfernt.',Also applies to: 709-713, 447-447
687-694: Standardize de-DE to the formal address ("Sie/Ihr").packages/localizations/src/de-DE.ts — replace informal strings with formal equivalents:
- title: 'Schau auf dein Telefon', + title: 'Schauen Sie auf Ihr Telefon',- title: 'Schau auf dein Telefon', + title: 'Schauen Sie auf Ihr Telefon',- title: 'Erstelle deinen Account', - titleCombined: 'Erstelle deinen Account', + title: 'Erstellen Sie Ihr Konto', + titleCombined: 'Erstellen Sie Ihr Konto',Search the file for remaining informal tokens (du/dein/Dein/dir/dich) and convert them to Sie/Ihr where appropriate.
🧹 Nitpick comments (10)
packages/localizations/src/de-DE.ts (10)
256-256: Use “Abmelden” instead of “Ausloggen”.Rest of the UI prefers “An-/Abmelden”. Unify wording.
- action__signOut: 'Ausloggen', + action__signOut: 'Abmelden',- action__signOut: 'Ausloggen', + action__signOut: 'Abmelden',Also applies to: 960-961
199-201: Use “Datenschutz” for privacy and keep legal terms consistent.German UIs typically use “Datenschutz”. Legal consent below already says “Datenschutzerklärung”.
- footerPageLink__privacy: 'Privatsphäre', + footerPageLink__privacy: 'Datenschutz',Also applies to: 777-781
364-367: Header wording: “Trat bei” sounds odd.Prefer “Beitrittsdatum” for a column header.
- tableHeader__joined: 'Trat bei', + tableHeader__joined: 'Beitrittsdatum',
483-485: “Gefahr” → “Achtung”.“Achtung” matches the rest of the product (“dangerSection.title”) and sounds natural.
- headerTitle__danger: 'Gefahr', + headerTitle__danger: 'Achtung',
506-507: Unify wording for pending suggestion state.Use the same phrase everywhere; above it’s “Genehmigung ausstehend”.
- suggestionsAcceptedLabel: 'Annahme ausstehend', + suggestionsAcceptedLabel: 'Genehmigung ausstehend',Also applies to: 273-273
1069-1069: “Verifizierungs-Schlüssel” → “Bestätigungscode”.Hyphenated form is uncommon; the UI elsewhere uses “Bestätigungscode”.
- formTitle: 'Verifizierungs-Schlüssel', + formTitle: 'Bestätigungscode',- verifyTitle: 'Verifizierungs-Schlüssel', + verifyTitle: 'Bestätigungscode',Also applies to: 1148-1149
171-175: Improve phrasing of “switch to … with price”.German reads more naturally as “Zu … wechseln – {{currency}}{{price}}/…”.
- switchToAnnualWithAnnualPrice: 'Auf jährlich wechseln {{currency}}{{price}} / Jahr', + switchToAnnualWithAnnualPrice: 'Zu jährlich wechseln – {{currency}}{{price}}/Jahr', - switchToMonthlyWithPrice: 'Auf monatlich wechseln {{currency}}{{price}} / Monat', + switchToMonthlyWithPrice: 'Zu monatlich wechseln – {{currency}}{{price}}/Monat',Also applies to: 173-174
196-197: Alt phone code provider link: minor style tweak (optional).“stattdessen per SMS” reads a bit smoother before “senden”.
- footerActionLink__alternativePhoneCodeProvider: 'Code stattdessen per SMS senden', + footerActionLink__alternativePhoneCodeProvider: 'Code per SMS senden (stattdessen)',
271-274: Subtitle preposition.“um fortzufahren zu …” → “um mit … fortzufahren”.
- subtitle: 'um fortzufahren zu {{applicationName}}', + subtitle: 'um mit {{applicationName}} fortzufahren',
228-255: Username wording consistency.Use “Benutzername” everywhere (currently label uses “Nutzername”).
- formFieldLabel__username: 'Nutzername', + formFieldLabel__username: 'Benutzername',
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/de-DE.ts(14 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/de-DE.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/de-DE.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/de-DE.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/de-DE.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/de-DE.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/de-DE.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/de-DE.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: semgrep-cloud-platform/scan
- GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (5)
packages/localizations/src/de-DE.ts (5)
20-33: API key timestamps and “last used” strings look correct.Placeholders and date filters are intact and follow the expected token format.
Also applies to: 36-41
286-291: Billing tables and empty states look good.Headers/empty states are idiomatic and consistent.
Also applies to: 317-326, 328-335, 985-990, 1016-1025, 1027-1034
78-82: Free-trial additions look solid.Terminology and placeholders are consistent. Nice coverage of trial flows.
Also applies to: 101-114, 150-166
171-179: Payment/plan phrasing LGTM.Currency placeholders are positioned correctly; nothing blocking.
Also applies to: 177-178
204-205: Keep translation — key used as success (no change).
packages/clerk-js/src/ui/hooks/usePassword.ts:98 calls confirmPasswordField.setSuccess(t(localizationKeys('formFieldError__matchingPasswords'))), so "Passwörter stimmen überein." is appropriate; do not change it to the negative form.Likely an incorrect or invalid review comment.
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
packages/localizations/src/de-DE.ts (4)
689-689: Unify formality (Sie) and prefer “anmelden” over “einloggen”.Several strings mix casual “du” with formal “Sie” and use “einloggen” inconsistently. Suggested fixes:
- title: 'Schau auf dein Telefon', + title: 'Überprüfen Sie Ihr Telefon', - title: 'Schau auf dein Telefon', + title: 'Überprüfen Sie Ihr Telefon', - title: 'In {{applicationName}} mit {{provider}} einloggen', + title: 'Bei {{applicationName}} mit {{provider}} anmelden', - title: 'In {{applicationName}} einloggen', + title: 'Bei {{applicationName}} anmelden', - title: 'Anmeldung...', + title: 'Anmelden...', - subtitleCombined: 'weiter zu {{applicationName}}', - title: 'Erstelle deinen Account', - titleCombined: 'Erstelle deinen Account', + subtitleCombined: 'Weiter zu {{applicationName}}', + title: 'Konto erstellen', + titleCombined: 'Konto erstellen', - successMessage__update: 'Dein Passwort wurde aktualisiert.', + successMessage__update: 'Ihr Passwort wurde aktualisiert.',Also applies to: 695-695, 721-721, 724-724, 635-635, 816-819, 1175-1175
449-449: Fix “E-Mail” spelling and hyphenation.Standardize to “E‑Mail” and “E‑Mail‑Adresse”.
- messageLine1: 'Die E-mail-Domain {{domain}} wird entfernt.', + messageLine1: 'Die E-Mail-Domain {{domain}} wird entfernt.', - subtitle: 'Die Domain {{domainName}} muss per E-mail verifiziert werden.', + subtitle: 'Die Domain {{domainName}} muss per E-Mail verifiziert werden.', - actionLink__use_email: 'E-mail nutzen', - actionLink__use_email_username: 'E-mail oder Benutzernamen nutzen', + actionLink__use_email: 'E-Mail verwenden', + actionLink__use_email_username: 'E-Mail oder Benutzername verwenden', - verifyTitle: 'E-Mail Adresse verifizieren', + verifyTitle: 'E-Mail-Adresse verifizieren',Also applies to: 494-494, 709-710, 1093-1093
476-476: Grammar: plural verb agreement and preposition.- calloutInfoLabel: 'Änderungen des Anmeldemodus wirkt sich nur auf neue Benutzer aus.', + calloutInfoLabel: 'Änderungen am Anmeldemodus wirken sich nur auf neue Benutzer aus.',
913-913: Lowercase “andere” mid-sentence.- phone_number_exists: 'Diese Telefonnummer ist bereits vergeben. Bitte wählen Sie eine Andere.', + phone_number_exists: 'Diese Telefonnummer ist bereits vergeben. Bitte wählen Sie eine andere.',
🧹 Nitpick comments (6)
packages/localizations/src/de-DE.ts (6)
320-322: Improve statement captions’ German syntax.Use a genitive compound for period + “Plan”.
- itemCaption__paidForPlan: 'Bezahlt für {{plan}} {{period}} Plan', + itemCaption__paidForPlan: 'Bezahlt für den {{period}}-Plan {{plan}}', - itemCaption__subscribedAndPaidForPlan: 'Abonniert und bezahlt für {{plan}} {{period}} Plan', + itemCaption__subscribedAndPaidForPlan: 'Abonniert und bezahlt für den {{period}}-Plan {{plan}}',Also applies to: 1018-1021
108-108: Tighten billing phrasing.- pastDueNotice: 'Ihr vorheriges Abonnement war überfällig, ohne Zahlung.', + pastDueNotice: 'Ihr vorheriges Abonnement war im Zahlungsverzug ohne Zahlungseingang.', - totalDueAfterTrial: 'Gesamtbetrag fällig nach Testende in {{days}} Tagen', + totalDueAfterTrial: 'Gesamtbetrag fällig nach Ablauf der Testversion in {{days}} Tagen',Also applies to: 114-115
723-724: Consistency: capitalize leading words and align titles.Minor polish to keep title case consistent.
- subtitleCombined: 'Willkommen zurück! Bitte melden Sie sich an, um fortzufahren', + subtitleCombined: 'Willkommen zurück! Bitte melden Sie sich an, um fortzufahren.', - title: 'Überprüfen Sie {{provider}}', + title: 'Überprüfen Sie {{provider}}', # (no change to text; ensure capitalization/punctuation by Prettier)Run Prettier to normalize punctuation.
Also applies to: 721-721, 607-607
59-62: Check “Überfällig” badge and label consistency.You added:
- badge__pastDuePlan: 'Überfällig'
- commerce.pastDue: 'Überfällig'
Ensure both map to the same state and don’t duplicate user-facing labels in different contexts (badge vs. list). If they differ, consider “Zahlungsverzug” for status vs. “Überfällig” for badge.
Also applies to: 127-128
484-486: Punctuation: add missing periods for full sentences.For multi-sentence subtitles/titles, consider ending with a period for consistency (German UI copy varies; your file mixes both). Run Prettier + content pass if desired.
Also applies to: 312-316, 1011-1015
723-724: Optional: align “Weiter zu …” phrasing.In some places you use “Weiter zu …”, elsewhere “weiter zu …”. Prefer consistent capitalization at sentence start.
Also applies to: 816-819, 1315-1323
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/localizations/src/de-DE.ts(21 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
**/*.{js,jsx,ts,tsx}: All code must pass ESLint checks with the project's configuration
Follow established naming conventions (PascalCase for components, camelCase for variables)
Maintain comprehensive JSDoc comments for public APIs
Use dynamic imports for optional features
All public APIs must be documented with JSDoc
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Profile and optimize critical paths
Validate all inputs and sanitize outputs
Implement proper logging with different levels
Files:
packages/localizations/src/de-DE.ts
**/*.{js,jsx,ts,tsx,json,css,scss,md,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use Prettier for consistent code formatting
Files:
packages/localizations/src/de-DE.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/de-DE.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/localizations/src/de-DE.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development.mdc)
Use proper TypeScript error types
**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoidanytype - preferunknownwhen type is uncertain, then narrow with type guards
Useinterfacefor object shapes that might be extended
Usetypefor unions, primitives, and computed types
Preferreadonlyproperties for immutable data structures
Useprivatefor internal implementation details
Useprotectedfor inheritance hierarchies
Usepublicexplicitly for clarity in public APIs
Preferreadonlyfor properties that shouldn't change after construction
Prefer composition and interfaces over deep inheritance chains
Use mixins for shared behavior across unrelated classes
Implement dependency injection for loose coupling
Let TypeScript infer when types are obvious
Useconst assertionsfor literal types:as const
Usesatisfiesoperator for type checking without widening
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Use type-only imports:import type { ... } from ...
Noanytypes without justification
Proper error handling with typed errors
Consistent use ofreadonlyfor immutable data
Proper generic constraints
No unused type parameters
Proper use of utility types instead of manual type construction
Type-only imports where possible
Proper tree-shaking friendly exports
No circular dependencies
Efficient type computations (avoid deep recursion)
Files:
packages/localizations/src/de-DE.ts
packages/localizations/**/*
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/de-DE.ts
**/*.{js,ts,tsx,jsx}
📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)
Support multiple Clerk environment variables (CLERK_, NEXT_PUBLIC_CLERK_, etc.) for configuration.
Files:
packages/localizations/src/de-DE.ts
🔇 Additional comments (5)
packages/localizations/src/de-DE.ts (5)
1011-1015: Section headers: keep parallelism.Both userProfile and organizationProfile billing “start” sections now use:
- Zahlungen, Pläne, Abrechnungen, Abonnements
Looks good; verify routes/tabs match these exact labels to avoid a11y/snapshot drift.
Also applies to: 312-316
19-35: Placeholders look correct; keep helper locale ‘de-DE’.The date helpers and relative time placeholders for API keys are well-formed and localized. No action.
Also applies to: 37-43
1-11: Meta: file compiles and type contracts are preserved.Export remains
as constand satisfiesLocalizationResource. Nice.Also applies to: 13-15
205-206: Verify meaning of formFieldError__matchingPasswords.'Passwörter stimmen überein.' under an error key is likely incorrect.
Proposed replacement if intent is "new password must differ from current":
- formFieldError__matchingPasswords: 'Passwörter stimmen überein.', + formFieldError__matchingPasswords: 'Das neue Passwort darf nicht mit dem aktuellen übereinstimmen.',If instead this key is for confirmation mismatch, remove/convert it (or make it informational) and keep only formFieldError__notMatchingPasswords as the error — confirm usage before changing.
1-1325: Formalize German strings: use "Sie"/"Ihr", replace "einloggen" → "anmelden", and verify "E‑Mail" spelling
- Tone: Replace informal "du/dein" → formal "Sie/Ihr". Affected examples: packages/localizations/src/de-DE.ts — lines 688, 694 ("Schau auf dein Telefon"); 817–818 ("Erstelle deinen Account").
- Terminology: Replace "einloggen" → "anmelden" for consistency. Affected examples: lines 720, 724, 806–807.
- Verification: E‑mail check in the provided script failed with a regex error; re-run a corrected search for "E-Mail" / "E-Mail-Adresse" across packages/localizations/src/de-DE.ts to confirm consistent spelling/hyphenation.
Add patch changeset Ausloggen -> Abmelden Add some coderabbit suggestions Add some nitpicks and fix grammar Remove files Changeset
8497d1e to
f68f7f6
Compare
|
👍 |
Description
Add translations for all currently
undefinedlocalization keys and improve the existing ones (fix grammar, more consistent style). I'm a native german speaker and all proposed translations should make sense :)Checklist
pnpm testruns as expected.clerkMiddleware.test.tstests failed, but not sure why. Doesn't seem to be related to these changes.pnpm buildruns as expected.Type of change
Summary by CodeRabbit
New Features
Chores