Skip to content

chore(localizations): Add missing german translations and improve existing ones#6769

Merged
jacekradko merged 2 commits intoclerk:mainfrom
ubersan:add-more-german-locales
Sep 15, 2025
Merged

chore(localizations): Add missing german translations and improve existing ones#6769
jacekradko merged 2 commits intoclerk:mainfrom
ubersan:add-more-german-locales

Conversation

@ubersan
Copy link
Contributor

@ubersan ubersan commented Sep 13, 2025

Description

Add translations for all currently undefined localization 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 test runs as expected. clerkMiddleware.test.ts tests failed, but not sure why. Doesn't seem to be related to these changes.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other: add translations

Summary by CodeRabbit

  • New Features

    • Completed German (de-DE) localization across the app: billing/subscriptions (tables, empty/Not Found states, trial messaging, totals), API key expiration options, last-used time units, start flows, organization actions, sign-in/sign-up, footer, titles/subtitles/headers, and validation/error texts.
  • Chores

    • Added a release changeset for the German translation patch.

@changeset-bot
Copy link

changeset-bot bot commented Sep 13, 2025

🦋 Changeset detected

Latest commit: a4306d8

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
@clerk/localizations Patch
@clerk/clerk-js Patch
@clerk/chrome-extension Patch
@clerk/clerk-expo Patch

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

@vercel
Copy link

vercel bot commented Sep 13, 2025

Someone is attempting to deploy a commit to the Clerk Production Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 13, 2025

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between 8497d1e and a4306d8.

📒 Files selected for processing (2)
  • .changeset/small-icons-do.md (1 hunks)
  • packages/localizations/src/de-DE.ts (27 hunks)

Walkthrough

Added 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

Cohort / File(s) Summary
Localization: German (de-DE) completions
packages/localizations/src/de-DE.ts
Populated many previously empty translation keys with German strings: API key expiration labels/options, last-used time units, billing/subscriptions UI (headers, tables, empty/ not-found states, trial/cancel texts, totals), start flows, organization actions, error/validation messages, titles/subtitles and template placeholders.
Release metadata: changeset
.changeset/public-islands-sell.md
Added a patch changeset declaring a patch release for @clerk/localizations describing the addition of German translations.
Backend test TSConfig
packages/backend/tsconfig.vitest-temp.json
Added a Vitest-focused TypeScript config enabling strict checks, nodenext resolution, JSON module support and a specific tsBuildInfo file; configuration-only, no code semantics changed.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–25 minutes

Poem

I twitch my nose at phrases new,
German hops in, tidy and true.
Rechnungen, Trials, Schlüssel klar,
Fehler kleiner, strings are where they are.
A happy rabbit’s translation brew 🐇✨

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Pre-merge checks

✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
Title Check ✅ Passed The title is concise, follows a conventional-commit style prefix (chore(localizations)) and accurately summarizes the main change — adding and improving German translations — which aligns with the PR summary and file changes.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between 0006c82 and 84c099f.

📒 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
Avoid any type - prefer unknown when type is uncertain, then narrow with type guards
Use interface for object shapes that might be extended
Use type for unions, primitives, and computed types
Prefer readonly properties for immutable data structures
Use private for internal implementation details
Use protected for inheritance hierarchies
Use public explicitly for clarity in public APIs
Prefer readonly for 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
Use const assertions for literal types: as const
Use satisfies operator 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 ...
No any types without justification
Proper error handling with typed errors
Consistent use of readonly for 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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

📥 Commits

Reviewing files that changed from the base of the PR and between fd0a8a8 and 8497d1e.

📒 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
Avoid any type - prefer unknown when type is uncertain, then narrow with type guards
Use interface for object shapes that might be extended
Use type for unions, primitives, and computed types
Prefer readonly properties for immutable data structures
Use private for internal implementation details
Use protected for inheritance hierarchies
Use public explicitly for clarity in public APIs
Prefer readonly for 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
Use const assertions for literal types: as const
Use satisfies operator 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 ...
No any types without justification
Proper error handling with typed errors
Consistent use of readonly for 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 const and satisfies LocalizationResource. 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
@ubersan ubersan force-pushed the add-more-german-locales branch from 8497d1e to f68f7f6 Compare September 13, 2025 11:48
@ubersan
Copy link
Contributor Author

ubersan commented Sep 13, 2025

👍

@ubersan ubersan changed the title Add more german translations Add all misisng german translations and improve existing ones Sep 13, 2025
@ubersan ubersan changed the title Add all misisng german translations and improve existing ones Add all missing german translations and improve existing ones Sep 13, 2025
@wobsoriano wobsoriano changed the title Add all missing german translations and improve existing ones chore(localizations): Add missing german translations and improve existing ones Sep 14, 2025
@jacekradko jacekradko merged commit 9eac18f into clerk:main Sep 15, 2025
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants