-
Notifications
You must be signed in to change notification settings - Fork 419
chore(clerk-js,localizations): Update TaskChooseOrganization copies for create organization screen
#6584
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🦋 Changeset detectedLatest commit: db9f39d The changes in this PR will be included in the next version bump. This PR includes changesets to release 22 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 |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
7d2c802 to
2a1d4ba
Compare
@clerk/agent-toolkit
@clerk/astro
@clerk/backend
@clerk/chrome-extension
@clerk/clerk-js
@clerk/dev-cli
@clerk/elements
@clerk/clerk-expo
@clerk/expo-passkeys
@clerk/express
@clerk/fastify
@clerk/localizations
@clerk/nextjs
@clerk/nuxt
@clerk/clerk-react
@clerk/react-router
@clerk/remix
@clerk/shared
@clerk/tanstack-react-start
@clerk/testing
@clerk/themes
@clerk/types
@clerk/upgrade
@clerk/vue
commit: |
📝 WalkthroughWalkthroughUpdated localization keys and copy for the create-organization UI used in the task flow. CreateOrganizationScreen now uses new i18n keys for name and slug fields. en-US text updated (title, subtitle, submit button -> "Continue"). Many locale files had four new keys added under taskChooseOrganization.createOrganization (mostly undefined placeholders); some locales also gained keys under other createOrganization blocks. Localization types were extended with the new keys. Tests and a Playwright page-object were updated to expect the new copy. A changeset bumps related packages. Estimated code review effort🎯 2 (Simple) | ⏱️ ~10–15 minutes 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
packages/localizations/src/nl-BE.ts (1)
16-16: Locale code mismatch: nl-BE file sets locale to nl-NLThis will select the wrong base locale and formatting rules for Belgian Dutch.
Apply this diff:
- locale: 'nl-NL', + locale: 'nl-BE',packages/localizations/src/ro-RO.ts (1)
186-186: Syntax error in dates.numeric (extra closing brace) and wrong locale tokenThere’s an extra '}' which will break templating. Also, the formatting locale is en-US instead of ro-RO, which likely isn’t intended.
Apply this fix (and align all date formatters to ro-RO):
- numeric: "{{ date | numeric('en-US') }}}", + numeric: "{{ date | numeric('ro-RO') }}",Optionally align the rest for consistency:
- lastDay: "Ieri la {{ date | timeString('en-US') }}", - next6Days: "{{ date | weekday('en-US','long') }} la {{ date | timeString('en-US') }}", - nextDay: "Mâine la {{ date | timeString('en-US') }}", - previous6Days: "Ultimul {{ date | weekday('en-US','long') }} la {{ date | timeString('en-US') }}", - sameDay: "Astăzi la {{ date | timeString('en-US') }}", + lastDay: "Ieri la {{ date | timeString('ro-RO') }}", + next6Days: "{{ date | weekday('ro-RO','long') }} la {{ date | timeString('ro-RO') }}", + nextDay: "Mâine la {{ date | timeString('ro-RO') }}", + previous6Days: "Ultimul {{ date | weekday('ro-RO','long') }} la {{ date | timeString('ro-RO') }}", + sameDay: "Astăzi la {{ date | timeString('ro-RO') }}",packages/localizations/src/es-ES.ts (1)
438-439: Placeholder variable mismatch (‘{{dominio}}’ vs expected ‘{{domain}}’) will render incorrectly.The success message uses a non-existent placeholder name and won’t interpolate.
Apply this fix:
- successMessage: '{{dominio}} ha sido eliminado.', + successMessage: '{{domain}} ha sido eliminado.',
🧹 Nitpick comments (109)
packages/localizations/src/is-IS.ts (5)
78-81: New free-trial cancellation strings left undefined—confirm intended fallback or add translations.The commerce.cancelFreeTrial*, cancelFreeTrial, cancelFreeTrialDescription, cancelFreeTrialTitle were added as undefined. If the product expects a fallback to en-US at runtime, that’s fine; otherwise, Icelandic users may see English or missing strings. Please verify fallback behavior or provide translations.
115-115: keepFreeTrial is undefined—ensure fallback or add translation.Same concern as above for commerce.keepFreeTrial. Verify fallback to en-US or provide an Icelandic string.
152-153: Subscription details: first payment keys are undefined—flagging for completion.New keys commerce.subscriptionDetails.firstPaymentAmount and firstPaymentOn are undefined. If fallback is not guaranteed, add translations to avoid mixed-language UI in the billing screens.
160-161: Subscription details: trial date keys are undefined—flagging for completion.New keys commerce.subscriptionDetails.trialEndsOn and trialStartedOn are undefined. Please confirm fallback or add Icelandic copies to keep the experience consistent.
820-823: Provide Icelandic translations for createOrganization form labels, placeholders, and buttonsIn packages/localizations/src/is-IS.ts, under
taskChooseOrganization.createOrganization, all of these keys are currentlyundefined. To avoid falling back to English or showing missing text, please fill them with the following Icelandic values:Apply this diff in
packages/localizations/src/is-IS.ts:--- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ taskChooseOrganization.createOrganization { - formFieldInputPlaceholder__name: undefined, + formFieldInputPlaceholder__name: 'Nafn samtaka', - formFieldInputPlaceholder__slug: undefined, + formFieldInputPlaceholder__slug: 'min-samtok', - formFieldLabel__name: undefined, + formFieldLabel__name: 'Nafn', - formFieldLabel__slug: undefined, + formFieldLabel__slug: 'Stubbur (e. slug)', - formButtonReset: undefined, + formButtonReset: 'Sleppa', - formButtonSubmit: undefined, + formButtonSubmit: 'Stofna samtök',This will align the Icelandic locale with en-US and existing terminology.
packages/localizations/src/id-ID.ts (4)
78-80: New free-trial cancellation strings are placeholders; track translation follow-upThe newly added commerce.cancelFreeTrial keys are left undefined. That’s acceptable if you intend to rely on en-US fallback, but please add them to your localization backlog to complete id-ID coverage.
If needed, I can propose Indonesian translations consistent with en-US once the exact English copies are finalized.
115-115: keepFreeTrial placeholder is undefined; confirm fallback or provide translationSame note as above. If this is intentionally deferred to fallback, fine; otherwise, let’s add an id-ID string in a follow-up.
160-161: Trial start/end placeholders added; fine to defer, but don’t forget trackingSame as above—undefined here is okay with fallback. Please ensure they’re captured in the localization backlog.
824-827: Add Indonesian translations for Create Organization form fieldsIn
packages/localizations/src/id-ID.tsundercreateOrganization, replace the undefined placeholders and labels so they don’t fall back to English:- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Organisasi saya', + formFieldInputPlaceholder__slug: 'organisasi-saya', + formFieldLabel__name: 'Nama', + formFieldLabel__slug: 'Slug',These keys are referenced by the CreateOrganizationScreen component and already exist in
en-US.ts. Filling them here ensures a consistent Indonesian user experience.packages/localizations/src/he-IL.ts (5)
78-81: Fill free-trial cancellation strings instead of leaving them undefinedSet concrete translations to avoid fallback-to-English and align with the newly added flow.
Apply this diff:
- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'בטל את תקופת הניסיון', + cancelFreeTrialDescription: 'אם תבטל כעת, לא תחויב בסיום תקופת הניסיון ותשמור על גישה עד לתאריך הסיום.', + cancelFreeTrialTitle: 'לבטל את תקופת הניסיון?',
115-115: Add translation for "keep free trial" actionPrevents English fallback in commerce cancellation dialog.
- keepFreeTrial: undefined, + keepFreeTrial: 'השאר את תקופת הניסיון',
152-154: Translate subscriptionDetails: first payment labelsThese labels are shown in billing details; provide clear Hebrew copies.
- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'סכום התשלום הראשון', + firstPaymentOn: 'התשלום הראשון ב־',
160-161: Translate trial period datesAdds localized labels for trial start/end.
- trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'תקופת הניסיון מסתיימת ב־', + trialStartedOn: 'תקופת הניסיון התחילה ב־',
810-814: Translate TaskChooseOrganization form labels/placeholdersThe English base (
en-US.ts) defines these strings undertaskChooseOrganization.createOrganization, but inpackages/localizations/src/he-IL.ts(lines 810–813) they’re stillundefined, so they’ll fall back to English at runtime. Please add Hebrew translations:- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'שם הארגון', + formFieldInputPlaceholder__slug: 'הארגון-שלי', + formFieldLabel__name: 'שם הארגון', + formFieldLabel__slug: 'כתובת URL של הארגון',Let me know if you’d like a hand refining these strings or pairing on any other locale updates.
packages/localizations/src/fa-IR.ts (6)
79-81: Provide Farsi translations for free-trial cancellation strings instead ofundefined.Avoid falling back to en-US to keep UX consistent in fa-IR.
- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'لغو دوره آزمایشی رایگان', + cancelFreeTrialDescription: 'اگر دوره آزمایشی را لغو کنید، دسترسی شما در پایان دوره آزمایشی خاتمه مییابد.', + cancelFreeTrialTitle: 'لغو دوره آزمایشی؟',
120-120: TranslatekeepFreeTrialto avoid English fallback.- keepFreeTrial: undefined, + keepFreeTrial: 'حفظ دوره آزمایشی',
157-158: Add translations for first payment labels in subscription details.- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'مبلغ اولین پرداخت', + firstPaymentOn: 'اولین پرداخت در',
165-166: Add translations for trial start/end fields.- trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'پایان دوره آزمایشی در', + trialStartedOn: 'شروع دوره آزمایشی در',
880-881: Provide translations for organization error messages.These are end-user visible; leaving them undefined will fall back to English.
- organization_not_found_or_unauthorized: undefined, - organization_not_found_or_unauthorized_with_create_organization_disabled: undefined, + organization_not_found_or_unauthorized: 'سازمان پیدا نشد یا به آن دسترسی ندارید.', + organization_not_found_or_unauthorized_with_create_organization_disabled: + 'سازمان پیدا نشد یا به آن دسترسی ندارید و ایجاد سازمان غیرفعال است.',
829-832: Add missing Farsi labels/placeholders for the “Create Organization” formWe’ve confirmed that all four keys already exist in the en-US base under
taskChooseOrganization.createOrganization. To avoid a mixed-locale UI, please supply Farsi values that align with the English examples:• formFieldInputPlaceholder__name: ‘نام سازمان’
• formFieldInputPlaceholder__slug: use the same example slug as en-US ('my-organization')
• formFieldLabel__name: ‘نام سازمان’
• formFieldLabel__slug: ‘اسلاگ’Suggested diff in packages/localizations/src/fa-IR.ts:
taskChooseOrganization: { createOrganization: { - formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'نام سازمان', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: 'نام سازمان', + formFieldLabel__slug: 'اسلاگ', … }packages/localizations/src/da-DK.ts (4)
78-80: Fill in free-trial cancellation strings (avoid shipping undefined).These new keys are currently undefined and will fall back to en-US. If we intend to localize, here are concise, context-appropriate Danish suggestions.
Apply this diff:
- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Annuller gratis prøveperiode', + cancelFreeTrialDescription: 'Er du sikker på, at du vil annullere din gratis prøveperiode? Du beholder adgangen indtil prøveperioden udløber.', + cancelFreeTrialTitle: 'Annuller gratis prøveperiode',
115-115: Add translation for “keep free trial”.If localization is desired, consider:
Apply this diff:
- keepFreeTrial: undefined, + keepFreeTrial: 'Behold gratis prøveperiode',
152-153: Localize first-payment subscription details.Proposed Danish copies:
Apply this diff:
- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Første betalingsbeløb', + firstPaymentOn: 'Første betaling den',
160-161: Localize trial start/end labels.Proposed Danish copies:
Apply this diff:
- trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Prøveperioden slutter den', + trialStartedOn: 'Prøveperioden startede den',packages/localizations/src/en-GB.ts (1)
821-824: Populate create-organization field copy for en-GB to avoid en-US fallback (and match British spelling).These four new keys will drive visible labels/placeholders on the create-organization screen. Providing en-GB strings prevents mixed en-US fallback and keeps “organisation” spelling consistent.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'e.g. Acme Ltd', + formFieldInputPlaceholder__slug: 'acme-ltd', + formFieldLabel__name: 'Organisation name', + formFieldLabel__slug: 'Slug',packages/localizations/src/ms-MY.ts (1)
826-829: Fill in create-organization labels/placeholders for Malay (ms-MY).These surface in the form; proposing concise, natural Malay to avoid en-US fallback.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Nama organisasi', + formFieldInputPlaceholder__slug: 'organisasi-saya', + formFieldLabel__name: 'Nama organisasi', + formFieldLabel__slug: 'Slug',packages/types/src/localization.ts (1)
1234-1237: Add a lightweight test to lock in localization resolution for the new keys.Recommend a unit/snapshot test for CreateOrganizationScreen that asserts:
- It renders en-US copy when locale has values.
- It falls back to en-US when locale keys are undefined.
I can scaffold a test that mounts the component with a mocked localization provider and asserts the rendered labels/placeholders. Want me to draft it?
packages/localizations/src/zh-TW.ts (1)
807-810: Provide Traditional Chinese copy for create-organization fields to avoid fallback.Proposed translations are consistent with existing zh-TW terminology (“組織名稱”, “URL 代稱”).
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: '例如:我的組織', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: '組織名稱', + formFieldLabel__slug: 'URL 代稱',packages/localizations/src/mn-MN.ts (1)
818-821: Add Mongolian strings for create-organization fields.Keeps the form coherent without falling back to en-US.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'жишээ: Байгууллагын нэр', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'Байгууллагын нэр', + formFieldLabel__slug: 'Slug',packages/localizations/src/sr-RS.ts (1)
816-820: Prefill slug label and placeholder (and name label) from existing valuesWe already have suitable values in this locale:
- formFieldLabel__organizationName: 'Naziv'
- formFieldLabel__organizationSlug: 'Slug'
- formFieldInputPlaceholder__organizationSlug: 'moja-org'
Filling these improves UX without waiting on a translation pass.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: undefined, + formFieldInputPlaceholder__slug: 'moja-org', + formFieldLabel__name: 'Naziv', + formFieldLabel__slug: 'Slug',packages/localizations/src/hr-HR.ts (1)
820-824: Prefill name/slug label(s) and slug placeholder from existing equivalentsThis locale already defines:
- formFieldLabel__organizationName: 'Naziv'
- formFieldLabel__organizationSlug: 'Slug'
- formFieldInputPlaceholder__organizationSlug: 'moja-organizacija'
Mapping them here improves consistency.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: undefined, + formFieldInputPlaceholder__slug: 'moja-organizacija', + formFieldLabel__name: 'Naziv', + formFieldLabel__slug: 'Slug',packages/localizations/src/bn-IN.ts (1)
823-827: Fill all four create-organization name/slug fields from existing stringsThis locale already has the exact equivalents:
- formFieldLabel__organizationName: 'নাম'
- formFieldInputPlaceholder__organizationName: 'সংগঠনের নাম'
- formFieldLabel__organizationSlug: 'স্লাগ'
- formFieldInputPlaceholder__organizationSlug: 'my-org'
Setting them here avoids fallback to en-US.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'সংগঠনের নাম', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'নাম', + formFieldLabel__slug: 'স্লাগ',packages/localizations/src/sk-SK.ts (1)
823-827: Populate create-organization name/slug fields from existing locale valuesAvailable equivalents in this file:
- formFieldLabel__organizationName: 'Názov organizácie'
- formFieldInputPlaceholder__organizationName: 'Názov organizácie'
- formFieldLabel__organizationSlug: 'URL adresa'
- formFieldInputPlaceholder__organizationSlug: 'moja-organizacia'
Filling these avoids UI gaps.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Názov organizácie', + formFieldInputPlaceholder__slug: 'moja-organizacia', + formFieldLabel__name: 'Názov organizácie', + formFieldLabel__slug: 'URL adresa',packages/localizations/src/vi-VN.ts (1)
826-829: Populate create-organization name/slug label/placeholders from existing VN stringsThis file already has:
- formFieldLabel__organizationName: 'Tên'
- formFieldInputPlaceholder__organizationName: 'Tên tổ chức'
- formFieldLabel__organizationSlug: 'Slug'
- formFieldInputPlaceholder__organizationSlug: 'my-org'
Filling these prevents fallback and makes the Create Organization task screen fully localized.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Tên tổ chức', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'Tên', + formFieldLabel__slug: 'Slug',packages/localizations/src/nl-BE.ts (1)
818-822: Fill in the new create-organization labels/placeholders under taskChooseOrganizationNew keys are added but left undefined. Either confirm fallback-to-en-US behavior for undefined values or provide localized strings to avoid UI gaps.
Suggested translations aligned with existing terms in this file:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Organisatienaam', + formFieldInputPlaceholder__slug: 'Bijv. mijn-org', + formFieldLabel__name: 'Organisatienaam', + formFieldLabel__slug: 'Slug',packages/localizations/src/pl-PL.ts (1)
823-827: Provide Polish translations for the new create-organization fieldsUndefined values may surface as empty labels if fallback doesn’t apply.
Proposed translations:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Nazwa organizacji', + formFieldInputPlaceholder__slug: 'np. moja-organizacja', + formFieldLabel__name: 'Nazwa organizacji', + formFieldLabel__slug: 'Slug',packages/localizations/src/ro-RO.ts (1)
819-822: Fill the new create-organization labels/placeholdersAvoid undefined at runtime for the name/slug fields in TaskChooseOrganization.
Suggested Romanian translations:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Numele organizației', + formFieldInputPlaceholder__slug: 'ex. org-mea', + formFieldLabel__name: 'Numele organizației', + formFieldLabel__slug: 'Slug',packages/localizations/src/fr-FR.ts (1)
828-832: Add French translations for new create-organization labels/placeholdersUndefined values risk blank labels in the session task Create Organization form.
Proposed FR strings:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: "Nom de l'organisation", + formFieldInputPlaceholder__slug: 'ex. mon-organisation', + formFieldLabel__name: "Nom de l'organisation", + formFieldLabel__slug: 'Slug',packages/localizations/src/ar-SA.ts (1)
816-819: Add Arabic translations for create-organization name/slug fieldsPrevent empty labels/placeholders in the TaskChooseOrganization flow.
Proposed AR strings (RTL-friendly):
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'اسم المنظمة', + formFieldInputPlaceholder__slug: 'مثلاً: شركتي', + formFieldLabel__name: 'اسم المنظمة', + formFieldLabel__slug: 'المعرّف (Slug)',packages/localizations/src/ca-ES.ts (2)
78-81: New commerce free-trial/subscription details keys left undefined — confirm fallback strategyUndefined values will fall back to en-US. If that’s acceptable for now, proceed; otherwise, consider Catalan translations to avoid mixed UI language in commerce flows.
I can propose Catalan strings and add a follow-up PR if you prefer.
Also applies to: 115-115, 152-153, 160-161
817-820: Fill create-organization labels/placeholders for TaskChooseOrganization (suggested ca-ES)Keeps the new screen consistent with the rest of the locale.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'La meva organització', + formFieldInputPlaceholder__slug: 'la-meva-org', + formFieldLabel__name: 'Nom', + formFieldLabel__slug: 'Slug',packages/localizations/src/el-GR.ts (2)
78-81: Commerce free-trial and subscription detail keys added but unset — confirm en-US fallback is acceptableThese are undefined. If fallback is intended, OK; otherwise, Greek translations would prevent English strings appearing in billing surfaces.
I can help populate Greek translations in this PR or a follow-up. Let me know your preference.
Also applies to: 115-115, 152-153, 160-161
820-823: Provide Greek values for create-organization fields under session taskAdds basic Greek for the new labels and placeholders.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Ο οργανισμός μου', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'Όνομα', + formFieldLabel__slug: 'Συντόμευση URL',packages/localizations/src/be-BY.ts (2)
78-81: New commerce keys (free-trial + subscription details) are placeholdersLeaving these undefined will fall back to en-US. If that’s expected for now, fine; otherwise, consider adding be-BY strings to avoid English leakage in commerce UIs.
Happy to propose Belarusian translations and stage a follow-up.
Also applies to: 115-115, 152-153, 160-161
823-826: Set create-organization labels/placeholders for the task screen (suggested be-BY)Prevents fallback and keeps the flow localized.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Мая арганізацыя', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'Назва', + formFieldLabel__slug: 'Slug',packages/localizations/src/hu-HU.ts (2)
78-81: Commerce free-trial and subscription detail strings are undefined — verify fallback vs. localizationUndefined values will use en-US strings. Confirm that’s OK for this release or prefer adding Hungarian now.
I can provide Hungarian translations and include them here or in a follow-up changeset.
Also applies to: 115-115, 152-153, 160-161
817-820: Populate TaskChooseOrganization create-organization fields (suggested hu-HU)Localized labels and placeholders for the updated screen.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Szervezetem', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'Név', + formFieldLabel__slug: 'Slug',packages/localizations/src/cs-CZ.ts (2)
156-158: subscriptionDetails additions are undefined — fill or rely on fallbackNew keys:
- commerce.subscriptionDetails.firstPaymentAmount, firstPaymentOn
- commerce.subscriptionDetails.trialEndsOn, trialStartedOn
Same concern as above. If these are intended to ship in this release, provide Czech strings or confirm fallback to en-US is in place.
Also applies to: 164-166
829-833: TaskChooseOrganization.createOrganization fields are undefined but referenced by UIThe CreateOrganization screen in the session task flow now references:
- taskChooseOrganization.createOrganization.formField(InputPlaceholder|Label)__{name,slug}
Leaving these undefined will likely produce missing labels/placeholders if fallback fails.
Would you like me to propose initial Czech translations or temporarily mirror en-US here to avoid runtime gaps?
packages/localizations/src/pt-BR.ts (2)
829-836: Unify “slug” label with existing terminology in pt-BRElsewhere in this file, organization slug uses “Rótulo do URL” (Line 248). Here it’s “Slug”. For consistency and clarity, align the new key to “Rótulo do URL”.
Apply:
- formFieldLabel__slug: 'Slug', + formFieldLabel__slug: 'Rótulo do URL',
79-81: Commerce free-trial and subscriptionDetails keys added as undefined — confirm fallback or localizeUndefined keys:
- commerce.cancelFreeTrial, cancelFreeTrialDescription, cancelFreeTrialTitle
- commerce.keepFreeTrial
- commerce.subscriptionDetails.firstPaymentAmount, firstPaymentOn
- commerce.subscriptionDetails.trialEndsOn, trialStartedOn
If there’s no guaranteed fallback to en-US at runtime, please add pt-BR strings; otherwise confirm fallback coverage.
Also, consider adding a small test to assert that the four new taskChooseOrganization.createOrganization keys are present for en-US and pt-BR and that non-en locales fall back (not “undefined”) in the CreateOrganization screen.
Also applies to: 121-121, 158-160, 166-168
packages/localizations/src/es-MX.ts (2)
78-80: New commerce keys are undefined — add es-MX strings or verify fallbackUndefined keys:
- commerce.cancelFreeTrial, cancelFreeTrialDescription, cancelFreeTrialTitle
- commerce.keepFreeTrial
- commerce.subscriptionDetails.firstPaymentAmount, firstPaymentOn, trialEndsOn, trialStartedOn
Please provide translations or confirm fallback behavior so users don’t see missing text.
Also applies to: 115-115, 152-154, 160-162
825-829: Provide es-MX translations for Create Organization form fields (used by UI)These new keys are read by the CreateOrganization screen. Suggest filling them now to avoid relying on fallback:
Apply:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Mi organización', + formFieldInputPlaceholder__slug: 'mi-organizacion', + formFieldLabel__name: 'Nombre', + formFieldLabel__slug: 'Apodo',If you prefer different wording (e.g., “Identificador” instead of “Apodo”), I can update accordingly.
packages/localizations/src/ru-RU.ts (3)
78-80: Commerce free-trial strings are undefined — add ru-RU translations or confirm fallbackUndefined:
- commerce.cancelFreeTrial, cancelFreeTrialDescription, cancelFreeTrialTitle
- commerce.keepFreeTrial
Shipping as-is is fine if en-US fallback is guaranteed; otherwise add Russian strings.
Also applies to: 115-115
152-154: subscriptionDetails new keys are undefined — add translations or rely on fallbackUndefined:
- commerce.subscriptionDetails.firstPaymentAmount, firstPaymentOn
- commerce.subscriptionDetails.trialEndsOn, trialStartedOn
Same fallback concern as above.
Also applies to: 160-162
830-834: Create Organization form field keys are undefined but used by UIKeys:
- taskChooseOrganization.createOrganization.formField(InputPlaceholder|Label)__{name,slug}
Please add Russian strings or confirm fallback to en-US is guaranteed so labels/placeholders don’t render blank/undefined.
packages/localizations/src/pt-PT.ts (3)
78-80: Commerce free-trial strings are undefined — add pt-PT translations or confirm fallbackUndefined:
- commerce.cancelFreeTrial, cancelFreeTrialDescription, cancelFreeTrialTitle
- commerce.keepFreeTrial
If fallback to en-US is not applied at runtime, these will surface to users. Please add pt-PT translations or confirm fallback.
Also applies to: 115-115
152-154: subscriptionDetails trial/payment keys are undefined — fill or rely on fallbackUndefined:
- commerce.subscriptionDetails.firstPaymentAmount, firstPaymentOn
- commerce.subscriptionDetails.trialEndsOn, trialStartedOn
Same fallback caveat as above.
Also applies to: 160-161
816-819: Create Organization form field keys are undefined but will be rendered by the UIPlease provide pt-PT translations for:
- taskChooseOrganization.createOrganization.formField(InputPlaceholder|Label)__{name,slug}
Or confirm fallback to en-US is in place to avoid missing copy on the create organization screen.
packages/localizations/src/bg-BG.ts (3)
78-80: Add translations for free-trial cancel/keep actionsThese are user-facing. Suggest localized strings.
- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Откажи безплатния пробен период', + cancelFreeTrialDescription: 'Отказвайки, пробният период ще бъде прекратен незабавно.', + cancelFreeTrialTitle: 'Отказ от безплатния пробен период?', ... - keepFreeTrial: undefined, + keepFreeTrial: 'Запази безплатния пробен период',Also applies to: 115-115
152-154: Populate new subscriptionDetails fieldsFills newly added billing detail labels.
- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Сума на първото плащане', + firstPaymentOn: 'Първо плащане на', ... - trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Пробният период приключва на', + trialStartedOn: 'Пробният период започна на',Also applies to: 160-162
818-821: Add Bulgarian translations for CreateOrganization form fieldsTo prevent falling back to English, populate these keys in
packages/localizations/src/bg-BG.ts(around lines 818–821):• File: packages/localizations/src/bg-BG.ts (lines 818–821)
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Име на организацията', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: 'Име', + formFieldLabel__slug: 'Slug',packages/localizations/src/ja-JP.ts (3)
818-821: Define create-organization labels/placeholders (JP) to prevent fallbackThese are shown on the create organization screen.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: '組織名', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: '組織名', + formFieldLabel__slug: 'スラグURL',
78-80: Provide JP translations for free-trial actions- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: '無料トライアルをキャンセル', + cancelFreeTrialDescription: '無料トライアルをキャンセルすると、トライアル特典は直ちに終了します。', + cancelFreeTrialTitle: '無料トライアルをキャンセルしますか?', ... - keepFreeTrial: undefined, + keepFreeTrial: '無料トライアルを継続',Also applies to: 115-115
152-154: Populate JP subscriptionDetails fields- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: '初回支払額', + firstPaymentOn: '初回支払日', ... - trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'トライアル終了日', + trialStartedOn: 'トライアル開始日',Also applies to: 160-162
packages/localizations/src/kk-KZ.ts (3)
810-813: Translate create-organization field labels/placeholders (KK)Avoids en-US fallback and keeps consistency with existing organizationName/Slug terms.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Менің ұйымым', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: 'Ұйым атауы', + formFieldLabel__slug: 'Slug',
78-80: Add KK translations for free-trial cancel/keep- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Тегін сынақты болдырмау', + cancelFreeTrialDescription: 'Болдырсаңыз, сынақ бірден аяқталады.', + cancelFreeTrialTitle: 'Тегін сынақты болдырмақсыз ба?', ... - keepFreeTrial: undefined, + keepFreeTrial: 'Тегін сынақты сақтау',Also applies to: 115-115
152-154: Populate KK subscriptionDetails fields- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Алғашқы төлем сомасы', + firstPaymentOn: 'Алғашқы төлем күні', ... - trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Сынақ аяқталу күні', + trialStartedOn: 'Сынақ басталған күні',Also applies to: 160-162
packages/localizations/src/fi-FI.ts (3)
819-822: Define create-organization labels/placeholders (FI)These appear on the create org screen during the session task.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Organisaation nimi', + formFieldInputPlaceholder__slug: 'minun-org', + formFieldLabel__name: 'Nimi', + formFieldLabel__slug: 'Slug',
78-80: Translate free-trial actions (FI)- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Peruuta ilmainen kokeilu', + cancelFreeTrialDescription: 'Jos peruutat, kokeilujakso päättyy heti.', + cancelFreeTrialTitle: 'Peruutetaanko ilmainen kokeilu?', ... - keepFreeTrial: undefined, + keepFreeTrial: 'Pidä ilmainen kokeilu',Also applies to: 115-115
152-154: Populate FI subscriptionDetails fields- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Ensimmäisen maksun määrä', + firstPaymentOn: 'Ensimmäinen maksupäivä', ... - trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Kokeilu päättyy', + trialStartedOn: 'Kokeilu alkoi',Also applies to: 160-162
packages/localizations/src/zh-CN.ts (3)
806-809: Set create-organization labels/placeholders (zh-CN)Prevents fallback and aligns with existing organizationName/Slug terminology.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: '我的组织', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: '组织名称', + formFieldLabel__slug: 'URL 简称',
78-80: Translate free-trial cancel/keep (zh-CN)- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: '取消免费试用', + cancelFreeTrialDescription: '取消后,免费试用将立即结束,相关权益将失效。', + cancelFreeTrialTitle: '确认取消免费试用?', ... - keepFreeTrial: undefined, + keepFreeTrial: '保留免费试用',Also applies to: 115-115
152-154: Populate zh-CN subscriptionDetails fields- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: '首次付款金额', + firstPaymentOn: '首次付款日期', ... - trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: '试用结束日期', + trialStartedOn: '试用开始日期',Also applies to: 160-162
packages/localizations/src/uk-UA.ts (2)
152-154: Subscription details keys added but undefined — fill translations and confirm formatting tokens.Please add translations for first payment and trial timing keys. When translating, ensure any placeholders/formatting match en-US (e.g., numbers, dates).
Same script above will confirm these keys exist in en-US and are referenced correctly.
Happy to draft UA translations consistent with the rest of this file.
Also applies to: 160-162
815-819: Create-organization form keys added under taskChooseOrganization — populate to avoid fallback.Keys are correct and match the new UI, but values are undefined. Consider mapping them to the existing organization name/slug wording used elsewhere in this locale to keep consistency on the session task screen.
I can submit a follow-up patch with proposed Ukrainian strings aligned to existing terminology here.
packages/localizations/src/sv-SE.ts (3)
78-81: New commerce free-trial strings are undefined — add translations or confirm fallback.Keys are correct; leaving them undefined will fall back to en-US if configured.
Use the verification script in the uk-UA comment to ensure base/usage alignment.
I can add Swedish translations for these keys if desired.
Also applies to: 115-115
152-154: Undefined subscription details keys — add translations and keep placeholders consistent with en-US.When translating dates/amounts, mirror en-US token usage.
I can draft Swedish translations for these lines.
See the verification script in the uk-UA comment.
Also applies to: 160-162
821-825: Populate create-organization form labels/placeholders to avoid runtime fallback.The keys are correct for the new UI. Suggest reusing the existing Swedish wording for organization name/slug.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Ange organisationsnamn', + formFieldInputPlaceholder__slug: 'min-organisation', + formFieldLabel__name: 'Organisationsnamn', + formFieldLabel__slug: 'Slug',packages/localizations/src/es-ES.ts (3)
78-81: Commerce free-trial keys added but undefined — fill translations or confirm fallback.Key names look right. Please provide es-ES strings to avoid en-US fallback.
Use the verification script in the uk-UA comment to check base/types/UI.
I can propose Spanish (es-ES) translations if helpful.
Also applies to: 115-115
152-154: Undefined subscription details keys — add translations and ensure placeholders match en-US.Maintain consistency for date/amount placeholders when you translate.
I can prepare es-ES translations aligned with the base strings.
See the script in the uk-UA comment.
Also applies to: 160-162
819-823: Populate create-organization name/slug labels and placeholders.These are the strings end-users will see in the session task flow. Reuse existing es-ES wording for organization name/slug to keep consistency.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Ingrese el nombre de la organización', + formFieldInputPlaceholder__slug: 'Ingrese un slug único para la organización', + formFieldLabel__name: 'Nombre de la Organización', + formFieldLabel__slug: 'Slug',packages/localizations/src/es-UY.ts (3)
78-81: Commerce free-trial keys are undefined — translate or accept en-US fallback.Names align with base. Consider adding es-UY strings now to avoid fallback.
I can provide suggested es-UY phrasing if needed.
Use the script shared in the uk-UA comment to confirm base/types/UI coverage.
Also applies to: 115-115
152-154: Undefined subscription details keys — translate and keep placeholders consistent.When localizing, ensure amount/date placeholders match the en-US patterns.
See the script in the uk-UA comment.
I can propose translations adapted to es-UY tone.
Also applies to: 160-162
825-829: Fill create-organization form labels/placeholders to match existing es-UY wording.These keys are used in the session task flow. Map them to the existing organization name/slug wording for consistency.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Nombre de la organización', + formFieldInputPlaceholder__slug: 'mi-org', + formFieldLabel__name: 'Nombre', + formFieldLabel__slug: 'Slug',packages/localizations/src/hi-IN.ts (3)
78-81: Commerce free-trial keys added but undefined — translate to avoid fallback to en-US.Key naming looks correct. Consider adding Hindi translations for cancel/keep free trial now.
I can draft suggested hi-IN translations if you prefer.
Use the verification script in the uk-UA comment to confirm base/types/UI usage.
Also applies to: 115-115
152-154: Undefined subscription details keys — translate and validate placeholders.Ensure the localized strings preserve any variable placeholders used by en-US.
I can help author suitable hi-IN strings for these.
See the script in the uk-UA comment.
Also applies to: 160-162
823-827: Populate create-organization form labels/placeholders to avoid fallback.These keys are referenced by the updated CreateOrganizationScreen. Reuse existing hi-IN wording for organization name/slug for consistency.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'संगठन का नाम', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'नाम', + formFieldLabel__slug: 'स्लग',packages/localizations/src/it-IT.ts (5)
79-81: Fill new free-trial cancellation strings to avoid fallback UI.Provide Italian translations for the newly added keys to prevent falling back to en-US.
- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Annulla periodo di prova', + cancelFreeTrialDescription: "Se annulli la prova gratuita, al termine del periodo di prova perderai l'accesso alle funzionalità premium. Vuoi continuare?", + cancelFreeTrialTitle: 'Annullare la prova gratuita?',
121-121: Provide translation for “keepFreeTrial”.Avoid undefined so users don’t see fallback copy.
- keepFreeTrial: undefined, + keepFreeTrial: 'Mantieni la prova gratuita',
158-160: Translate subscription details fields.These appear in billing UI; fill them for consistency.
- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Importo del primo pagamento', + firstPaymentOn: 'Primo pagamento il',
166-167: Translate trial period details.- trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Fine del periodo di prova il', + trialStartedOn: 'Periodo di prova iniziato il',
826-830: Add create-organization field labels/placeholders (session task flow).These are now referenced by CreateOrganizationScreen; translate to avoid mixed-language UI.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: "Inserisci il nome dell'organizzazione", + formFieldInputPlaceholder__slug: "Inserisci lo slug dell'organizzazione", + formFieldLabel__name: 'Nome organizzazione', + formFieldLabel__slug: 'Slug',.changeset/fuzzy-trains-thank.md (1)
7-7: Polish the changeset summary for clarity.Minor grammatical tweak for readability.
-Update copies for create organization screen on session tasks +Update copy for the “Create organization” screen in session tasksAlso consider checking the boxes in the PR template (tests/build/JSDoc/docs) if applicable before merging.
packages/localizations/src/de-DE.ts (6)
78-81: Add German translations for free-trial cancellation strings.These are user-facing and should not be left undefined.
- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Kostenlose Testphase beenden', + cancelFreeTrialDescription: 'Wenn Sie die kostenlose Testphase beenden, verlieren Sie nach Ablauf des Testzeitraums den Zugriff auf Premiumfunktionen. Möchten Sie fortfahren?', + cancelFreeTrialTitle: 'Kostenlose Testphase beenden?',
99-99: Translate “freeTrialEndsAt” line item title.- title__freeTrialEndsAt: undefined, + title__freeTrialEndsAt: 'Kostenlose Testphase endet am',
118-118: Provide translation for “keepFreeTrial”.- keepFreeTrial: undefined, + keepFreeTrial: 'Kostenlose Testphase beibehalten',
155-156: Translate first payment fields.- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Betrag der ersten Zahlung', + firstPaymentOn: 'Erste Zahlung am',
163-164: Translate trial period fields.- trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Testphase endet am', + trialStartedOn: 'Testphase gestartet am',
829-833: Translate create-organization task form fields.These are now referenced by the UI.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Organisationsname eingeben', + formFieldInputPlaceholder__slug: 'Slug eingeben', + formFieldLabel__name: 'Organisationsname', + formFieldLabel__slug: 'Slug',packages/localizations/src/nb-NO.ts (5)
78-81: Add Norwegian translations for free-trial cancellation strings.- cancelFreeTrial: undefined, - cancelFreeTrialDescription: undefined, - cancelFreeTrialTitle: undefined, + cancelFreeTrial: 'Avslutt gratis prøveperiode', + cancelFreeTrialDescription: 'Hvis du avslutter gratis prøveperioden, mister du tilgang til premiumfunksjoner når perioden utløper. Vil du fortsette?', + cancelFreeTrialTitle: 'Avslutte gratis prøveperiode?',
115-115: Provide translation for “keepFreeTrial”.- keepFreeTrial: undefined, + keepFreeTrial: 'Behold gratis prøveperiode',
152-154: Translate first payment subscription details.- firstPaymentAmount: undefined, - firstPaymentOn: undefined, + firstPaymentAmount: 'Beløp for første betaling', + firstPaymentOn: 'Første betaling den',
160-161: Translate trial period details.- trialEndsOn: undefined, - trialStartedOn: undefined, + trialEndsOn: 'Prøveperioden slutter den', + trialStartedOn: 'Prøveperioden startet den',
817-821: Translate create-organization task form fields.These are referenced by CreateOrganizationScreen.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Skriv inn organisasjonsnavn', + formFieldInputPlaceholder__slug: 'Skriv inn slug', + formFieldLabel__name: 'Organisasjonsnavn', + formFieldLabel__slug: 'Slug',packages/localizations/src/tr-TR.ts (1)
819-822: Create-organization form keys added — matches UI change.The name/slug labels and placeholders under taskChooseOrganization.createOrganization look correct for the updated CreateOrganizationScreen usage.
If desirable, I can help draft Turkish translations for these four strings to avoid undefined fallbacks in screenshots/demos.
packages/localizations/src/th-TH.ts (1)
815-818: TaskChooseOrganization create form keys — aligned and scoped correctly.New name/slug labels and placeholders are correctly placed under taskChooseOrganization.createOrganization.
Would you like a checklist PR comment generated to track filling these four translations across locales?
packages/localizations/src/en-US.ts (1)
815-822: Grammar nit: “Set up your organization”; align slug example with existing placeholder
- Title should use the verb form “Set up” instead of the noun “Setup”.
- Consider aligning the slug example with the existing global placeholder (my-org) for consistency with formFieldInputPlaceholder__organizationSlug above.
Apply this diff:
createOrganization: { formButtonReset: 'Cancel', formButtonSubmit: 'Continue', formFieldInputPlaceholder__name: 'My Organization', - formFieldInputPlaceholder__slug: 'my-organization', + formFieldInputPlaceholder__slug: 'my-org', formFieldLabel__name: 'Name', formFieldLabel__slug: 'Slug', subtitle: 'Enter your organization details to continue', - title: 'Setup your organization', + title: 'Set up your organization', },packages/localizations/src/te-IN.ts (1)
825-828: Fill name/slug labels and placeholders by reusing existing Telugu stringsWe already have consistent translations for organization name/slug elsewhere in this file. Reusing them here improves UX immediately and keeps parity with existing UI text.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'సంస్థ పేరు', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'పేరు', + formFieldLabel__slug: 'స్లగ్',If you want, I can sweep other locales to apply the same safe reuse where applicable and open a follow-up PR.
| label: localizationKeys('taskChooseOrganization.createOrganization.formFieldLabel__name'), | ||
| placeholder: localizationKeys('taskChooseOrganization.createOrganization.formFieldInputPlaceholder__name'), | ||
| }); | ||
| const slugField = useFormControl('slug', '', { | ||
| type: 'text', | ||
| label: localizationKeys('formFieldLabel__organizationSlug'), | ||
| placeholder: localizationKeys('formFieldInputPlaceholder__organizationSlug'), | ||
| label: localizationKeys('taskChooseOrganization.createOrganization.formFieldLabel__slug'), | ||
| placeholder: localizationKeys('taskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug'), | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
LGTM: localization keys correctly migrated to the new taskChooseOrganization path.
- New label/placeholder keys align with the updated localization surface.
- No logic changes; input validation and submission remain intact.
Run this quick check to ensure:
- en-US has the new keys,
- types include them,
- no lingering references to the old keys in SessionTasks.
If you want, I can add a lightweight test that renders this screen with a mock localization to assert label/placeholder usage.
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Check en-US definitions for new keys:"
rg -nP "taskChooseOrganization\.createOrganization\.(formField(Label|InputPlaceholder)__(name|slug))\s*:" packages/localizations/src/en-US.ts -C2 || true
echo
echo "Check type surface includes the new keys:"
rg -nP "taskChooseOrganization.*createOrganization.*formFieldLabel__name" packages/types/src -n -C2 || true
echo
echo "Find any remaining references to old org name/slug keys in SessionTasks:"
rg -nP "formField(Label|InputPlaceholder)__organization(Name|Slug)" packages/clerk-js/src/ui/components/SessionTasks -n -C2 || trueLength of output: 765
Missing localization key definitions in en-US.ts and types
The new keys referenced in CreateOrganizationScreen.tsx aren’t defined in the localization files or the type surface, so they’ll break at runtime and in typing:
• packages/localizations/src/en-US.ts is missing:
taskChooseOrganization.createOrganization.formFieldLabel__nametaskChooseOrganization.createOrganization.formFieldInputPlaceholder__nametaskChooseOrganization.createOrganization.formFieldLabel__slugtaskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug
• packages/types/src (your localization key union) needs to include those same four keys.
Suggested additions:
— packages/localizations/src/en-US.ts
export default {
// …
'taskChooseOrganization.createOrganization.formFieldLabel__name': 'Organization Name',
'taskChooseOrganization.createOrganization.formFieldInputPlaceholder__name': 'Enter organization name',
'taskChooseOrganization.createOrganization.formFieldLabel__slug': 'Organization Slug',
'taskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug': 'Enter organization slug',
// …
}— packages/types/src/index.ts (or wherever LocalizationKeys is defined)
export type LocalizationKeys =
// …
| 'taskChooseOrganization.createOrganization.formFieldLabel__name'
| 'taskChooseOrganization.createOrganization.formFieldInputPlaceholder__name'
| 'taskChooseOrganization.createOrganization.formFieldLabel__slug'
| 'taskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug'
// …Once those are in place, the labels and placeholders will resolve correctly.
🤖 Prompt for AI Agents
In
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx
around lines 31-38, the localization keys referenced for the name and slug
labels/placeholders are missing from the English localization and the
LocalizationKeys type union; add the following four keys to
packages/localizations/src/en-US.ts with appropriate English strings:
taskChooseOrganization.createOrganization.formFieldLabel__name,
taskChooseOrganization.createOrganization.formFieldInputPlaceholder__name,
taskChooseOrganization.createOrganization.formFieldLabel__slug,
taskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug; then
update the localization keys union in packages/types/src (where LocalizationKeys
is defined) to include the exact same four string literal types so TypeScript
recognizes them; finally run the type check/build to ensure the keys resolve
correctly.
| formFieldInputPlaceholder__name: undefined, | ||
| formFieldInputPlaceholder__slug: undefined, | ||
| formFieldLabel__name: undefined, | ||
| formFieldLabel__slug: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Provide Danish labels/placeholders for create-organization fields in the task flow.
These are the keys directly tied to the PR objective. Recommend aligning with existing translations used elsewhere (e.g., organizationName/organizationSlug) for consistency.
Apply this diff:
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Indtast organisationens navn',
+ formFieldInputPlaceholder__slug: 'Indtast slug URL',
+ formFieldLabel__name: 'Navn',
+ formFieldLabel__slug: 'Slug URL',To verify the new keys exist in the base locale and are consumed consistently, run:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate files
EN_FILE="$(fd -t f 'en-US.ts' | head -n1)"
DK_FILE="$(fd -t f 'da-DK.ts' | head -n1)"
if [[ -z "${EN_FILE:-}" || -z "${DK_FILE:-}" ]]; then
echo "Could not locate en-US.ts or da-DK.ts" >&2
exit 1
fi
echo "en-US: $EN_FILE"
echo "da-DK: $DK_FILE"
echo
# Keys to verify across locales
keys=(
'cancelFreeTrial:'
'cancelFreeTrialDescription:'
'cancelFreeTrialTitle:'
'keepFreeTrial:'
'firstPaymentAmount:'
'firstPaymentOn:'
'trialEndsOn:'
'trialStartedOn:'
'formFieldInputPlaceholder__name:'
'formFieldInputPlaceholder__slug:'
'formFieldLabel__name:'
'formFieldLabel__slug:'
)
missing=false
for k in "${keys[@]}"; do
echo "=== Key: $k"
rg -nP "$k" "$EN_FILE" -C1 || { echo "Missing in en-US: $k"; missing=true; }
rg -nP "$k" "$DK_FILE" -n || { echo "Missing in da-DK: $k"; missing=true; }
echo
done
$missing && { echo "One or more keys missing. Please reconcile."; exit 1; } || echo "All keys present in en-US and da-DK."Length of output: 6208
---
🏁 Script executed:
```shell
#!/bin/bash
set -euo pipefail
EN_FILE="packages/localizations/src/en-US.ts"
DK_FILE="packages/localizations/src/da-DK.ts"
echo "=== organizationName in en-US.ts ==="
rg -nP "organizationName:" "$EN_FILE" -C1 || echo "not found"
echo
echo "=== organizationName in da-DK.ts ==="
rg -nP "organizationName:" "$DK_FILE" -C1 || echo "not found"
echo
echo "=== organizationSlug in en-US.ts ==="
rg -nP "organizationSlug:" "$EN_FILE" -C1 || echo "not found"
echo
echo "=== organizationSlug in da-DK.ts ==="
rg -nP "organizationSlug:" "$DK_FILE" -C1 || echo "not found"
echo
echo "=== Context around other 'Slug' translations in da-DK.ts ==="
rg -nP "Slug" "$DK_FILE" -C2 | head -n20
```
Length of output: 3321
---
</details>
**Add Danish translations for create-organization placeholders and labels**
Please update packages/localizations/src/da-DK.ts around lines 816–819 to mirror the existing organizationName/organizationSlug translations:
```diff
@@ packages/localizations/src/da-DK.ts
- formFieldInputPlaceholder__name: undefined,
+ formFieldInputPlaceholder__name: 'Indtast organisationens navn',
- formFieldInputPlaceholder__slug: undefined,
+ formFieldInputPlaceholder__slug: 'Indtast slug URL',
- formFieldLabel__name: undefined,
+ formFieldLabel__name: 'Organisationens navn',
- formFieldLabel__slug: undefined,
+ formFieldLabel__slug: 'Slug URL',
```
• These keys already exist in en-US.ts and da-DK.ts but are currently undefined.
• Aligning with the domain-verification translations ensures consistency.
• Let me know if you’d like any help verifying or adjusting phrasing.
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
formFieldInputPlaceholder__name: 'Indtast organisationens navn',
formFieldInputPlaceholder__slug: 'Indtast slug URL',
formFieldLabel__name: 'Organisationens navn',
formFieldLabel__slug: 'Slug URL',
```
</details>
<!-- suggestion_end -->
<details>
<summary>🤖 Prompt for AI Agents</summary>
```
In packages/localizations/src/da-DK.ts around lines 816 to 819, four keys
(formFieldInputPlaceholder__name, formFieldInputPlaceholder__slug,
formFieldLabel__name, formFieldLabel__slug) are set to undefined; replace the
undefined values with the Danish strings matching the existing
organizationName/organizationSlug translations (use the same phrasing used
elsewhere in this file for organizationName and organizationSlug), i.e. set the
placeholder keys to the Danish placeholder text and the label keys to the Danish
label text so they mirror en-US entries and maintain consistency with
domain-verification translations.
```
</details>
<!-- fingerprinting:phantom:poseidon:chinchilla -->
<!-- This is an auto-generated comment by CodeRabbit -->
| formFieldInputPlaceholder__name: undefined, | ||
| formFieldInputPlaceholder__slug: undefined, | ||
| formFieldLabel__name: undefined, | ||
| formFieldLabel__slug: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Populate create-organization labels/placeholders for the session task (suggested es-CR)
Setting these avoids en-US fallback in the new Create Organization screen.
Apply:
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Mi organización',
+ formFieldInputPlaceholder__slug: 'mi-organizacion',
+ formFieldLabel__name: 'Nombre',
+ formFieldLabel__slug: 'Apodo',To verify usage aligns with the new path:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Check UI references the new taskChooseOrganization.createOrganization keys"
rg -nP "taskChooseOrganization\.createOrganization\.(formField(Label|InputPlaceholder)__(name|slug))" packages/clerk-js -C2Length of output: 2075
Populate es-CR translations for Create Organization form fields
To prevent falling back to en-US in the new Create Organization screen, add the Spanish (Costa Rica) labels and placeholders for the taskChooseOrganization.createOrganization keys. Verified that CreateOrganizationScreen.tsx references all four keys.
File: packages/localizations/src/es-CR.ts (around lines 825–828)
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Mi organización',
+ formFieldInputPlaceholder__slug: 'mi-organizacion',
+ formFieldLabel__name: 'Nombre',
+ formFieldLabel__slug: 'Apodo',📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| formFieldInputPlaceholder__name: undefined, | |
| formFieldInputPlaceholder__slug: undefined, | |
| formFieldLabel__name: undefined, | |
| formFieldLabel__slug: undefined, | |
| formFieldInputPlaceholder__name: 'Mi organización', | |
| formFieldInputPlaceholder__slug: 'mi-organizacion', | |
| formFieldLabel__name: 'Nombre', | |
| formFieldLabel__slug: 'Apodo', |
🤖 Prompt for AI Agents
In packages/localizations/src/es-CR.ts around lines 825–828, the four keys for
taskChooseOrganization.createOrganization are left undefined causing fallback to
en-US; populate them with Spanish (Costa Rica) strings: set formFieldLabel__name
to "Nombre de la organización", formFieldInputPlaceholder__name to "Ingrese el
nombre de la organización", formFieldLabel__slug to "Slug de la organización",
and formFieldInputPlaceholder__slug to "Ingrese el slug de la organización" so
the Create Organization screen uses es-CR translations.
| cancelFreeTrial: undefined, | ||
| cancelFreeTrialDescription: undefined, | ||
| cancelFreeTrialTitle: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
New commerce keys are undefined; confirm fallback or add translations
The following keys are added as placeholders: cancelFreeTrial, cancelFreeTrialDescription, cancelFreeTrialTitle, keepFreeTrial, subscriptionDetails.firstPaymentAmount/On, trialEndsOn/StartedOn. If the runtime does not backfill undefined keys from en-US, these will render blank.
Run this to ensure en-US defines these keys and to confirm the fallback strategy:
Also applies to: 115-115, 152-154, 160-161
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Verify keys exist in en-US
fd -a en-US.ts | while read -r f; do
echo "Checking $f"
rg -n "taskChooseOrganization|formFieldLabel__name|formFieldInputPlaceholder__name|formFieldLabel__slug|formFieldInputPlaceholder__slug|cancelFreeTrial|cancelFreeTrialDescription|cancelFreeTrialTitle|keepFreeTrial|firstPaymentAmount|firstPaymentOn|trialEndsOn|trialStartedOn" "$f" -n -C2
done
# Try to locate localization merge/fallback logic (should not override with undefined)
rg -nP --type=ts -C2 "fallback|merge|local(e|ization)|defaultLocale"Length of output: 268636
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate and display the parseLocalizationResource implementation
echo "Searching for parseLocalizationResource definition..."
rg -nP "parseLocalizationResource" -C5 packages/clerk-js/src/ui/localization/parseLocalization.ts || true
echo
echo "Printing first 200 lines of parseLocalization.ts for context..."
sed -n '1,200p' packages/clerk-js/src/ui/localization/parseLocalization.tsLength of output: 2178
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Display fastDeepMergeAndReplace implementation
echo "Searching for fastDeepMergeAndReplace in shared utils..."
rg -n "fastDeepMergeAndReplace" -C5 packages/shared/src/utils/fastDeepMerge.ts || echo "Not found"
echo
echo "Printing entire fastDeepMerge file for context..."
sed -n '1,200p' packages/shared/src/utils/fastDeepMerge.tsLength of output: 2775
Provide Dutch (nl-BE) translations for the new commerce keys (or remove the undefined placeholders to fall back to English)
The merge logic (fastDeepMergeAndReplace) will override the base en-US values with your explicit undefined, resulting in blank strings at runtime. Either supply Dutch translations or omit the undefined entries so the English defaults are used.
In packages/localizations/src/nl-BE.ts (nl-BE):
• Lines 78-80, 115, 152-154, 160-161
– cancelFreeTrial
– cancelFreeTrialDescription
– cancelFreeTrialTitle
– keepFreeTrial
– subscriptionDetails.firstPaymentAmount
– subscriptionDetails.firstPaymentOn
– subscriptionDetails.trialEndsOn
– subscriptionDetails.trialStartedOn
🤖 Prompt for AI Agents
In packages/localizations/src/nl-BE.ts around lines 78-80 (and also affecting
lines ~115, 152-154, 160-161), there are explicit undefined placeholders for
commerce keys (cancelFreeTrial, cancelFreeTrialDescription,
cancelFreeTrialTitle, keepFreeTrial, subscriptionDetails.firstPaymentAmount,
subscriptionDetails.firstPaymentOn, subscriptionDetails.trialEndsOn,
subscriptionDetails.trialStartedOn) which will overwrite English defaults with
blank values; either remove these undefined entries so the en-US strings are
used as fallback, or replace each undefined with the proper Dutch (nl-BE)
translation for the corresponding key, ensuring string values are provided
rather than undefined.
| firstPaymentAmount: undefined, | ||
| firstPaymentOn: undefined, | ||
| nextPaymentAmount: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
New subscriptionDetails date/amount keys — verify base and usages
These keys match the expanded surface. When localizing later, ensure placeholders mirror en-US (amounts and dates) and use the same formatting helpers. Also verify types and UI now reference these keys.
Run this script to confirm types, en-US base strings, and UI references exist for the new keys:
Also applies to: 160-162
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "1) Types include new taskChooseOrganization.createOrganization keys:"
rg -n -C2 -S $'formField(Label|InputPlaceholder)__name|formField(Label|InputPlaceholder)__slug' packages/types/src
echo
echo "2) en-US has base strings for new create-organization keys:"
rg -n -C2 -S $'taskChooseOrganization\\.createOrganization\\.(formFieldLabel__name|formFieldInputPlaceholder__name|formFieldLabel__slug|formFieldInputPlaceholder__slug)' packages/localizations/src/en-US.ts || true
echo
echo "3) UI references updated keys in CreateOrganization screen:"
rg -n -C3 -S $'taskChooseOrganization\\.createOrganization\\.(formFieldLabel__name|formFieldInputPlaceholder__name|formFieldLabel__slug|formFieldInputPlaceholder__slug)' packages/clerk-js/src
echo
echo "4) en-US/type/UI presence for new subscriptionDetails keys:"
rg -n -C2 -S $'subscriptionDetails\\.(firstPaymentAmount|firstPaymentOn|trialEndsOn|trialStartedOn)' packages/localizations/src/en-US.ts packages/types/src packages/clerk-js/srcLength of output: 5203
Missing base localization entries and type/UI references for new keys
We verified both taskChooseOrganization.createOrganization and commerce.subscriptionDetails additions:
-
Create Organization
• types updated (packages/types/src/localization.ts)
• UI references updated (CreateOrganizationScreen.tsx)
• Missing base strings inpackages/localizations/src/en-US.tsfor:- taskChooseOrganization.createOrganization.formFieldLabel__name
- taskChooseOrganization.createOrganization.formFieldInputPlaceholder__name
- taskChooseOrganization.createOrganization.formFieldLabel__slug
- taskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug
-
Subscription Details
• Keys added inpackages/localizations/src/sr-RS.ts:- firstPaymentAmount
- firstPaymentOn
- nextPaymentAmount
• Missing: - Base strings in
packages/localizations/src/en-US.tsundercommerce.subscriptionDetails - Type definitions in
packages/types/src/localization.ts(firstPaymentAmount,firstPaymentOn,nextPaymentAmount) - UI references in
packages/clerk-js/src/ui/components/SubscriptionDetails/index.tsx(e.g.localizationKeys('commerce.subscriptionDetails.firstPaymentAmount'), etc)
Also applies to lines 160–162. Please add the missing entries and update types/UI accordingly.
🤖 Prompt for AI Agents
In packages/localizations/src/sr-RS.ts around lines 152–154 (and similarly
160–162), new keys for commerce.subscriptionDetails (firstPaymentAmount,
firstPaymentOn, nextPaymentAmount) exist but corresponding base English entries
and type/UI references are missing; add these keys to
packages/localizations/src/en-US.ts under commerce.subscriptionDetails with
appropriate English strings, update the localization type definitions in
packages/types/src/localization.ts to include firstPaymentAmount,
firstPaymentOn, and nextPaymentAmount, and update UI usage in
packages/clerk-js/src/ui/components/SubscriptionDetails/index.tsx to reference
localizationKeys('commerce.subscriptionDetails.firstPaymentAmount'),
localizationKeys('commerce.subscriptionDetails.firstPaymentOn'), and
localizationKeys('commerce.subscriptionDetails.nextPaymentAmount'); also add the
missing taskChooseOrganization.createOrganization keys (formFieldLabel__name,
formFieldInputPlaceholder__name, formFieldLabel__slug,
formFieldInputPlaceholder__slug) to packages/localizations/src/en-US.ts and
ensure types and CreateOrganizationScreen.tsx reference the new keys.
| cancelFreeTrial: undefined, | ||
| cancelFreeTrialDescription: undefined, | ||
| cancelFreeTrialTitle: undefined, | ||
| cancelSubscription: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
New commerce free-trial keys added but left undefined — ensure base and types are in sync and fill translations.
The structure and key names align with the en-US surface, but all values are undefined. This will fall back to en-US at runtime (if fallback is configured) and ship untranslated UI.
Run this to verify the base locale and types surface include these keys and to locate UI references using them:
I can propose Ukrainian translations for these new strings if you want to avoid fallback behavior.
Also applies to: 115-115
🏁 Script executed:
#!/bin/bash
echo "Checking en-US base for new commerce keys…"
fd -a en-US.ts | xargs -I{} rg -nP -C1 'cancelFreeTrial|keepFreeTrial' {}
echo; echo "Checking types surface for new create-organization form keys…"
rg -nP -C2 'formField(InputPlaceholder|Label)__name|formField(InputPlaceholder|Label)__slug' packages/types || true
echo; echo "Checking UI references in CreateOrganizationScreen…"
rg -nP -C2 'formField(InputPlaceholder|Label)__name|formField(InputPlaceholder|Label)__slug' packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization || trueLength of output: 3703
🏁 Script executed:
#!/bin/bash
echo "Checking types surface for new commerce localization keys…"
rg -nP -C1 'cancelFreeTrial|cancelFreeTrialDescription|cancelFreeTrialTitle|cancelSubscription|keepFreeTrial|keepSubscription' packages/types/src/localization.ts || echo "No matches in types"
echo; echo "Checking UI references for commerce localization keys…"
rg -nP -n 'cancelFreeTrial|cancelFreeTrialDescription|cancelFreeTrialTitle|cancelSubscription|keepFreeTrial|keepSubscription' packages || echo "No matches in UI"Length of output: 39748
Fill in Ukrainian translations for new commerce keys
The uk-UA.ts locale has correctly added the new commerce keys but all are undefined, causing a fallback to English at runtime. Please provide Ukrainian translations for these entries to ensure the UI is properly localized.
Points to address:
- File
packages/localizations/src/uk-UA.ts, lines 78–84 and 115–116:
• cancelFreeTrial
• cancelFreeTrialDescription
• cancelFreeTrialTitle
• cancelSubscription
• cancelSubscriptionAccessUntil
• cancelSubscriptionNoCharge
• cancelSubscriptionTitle
• keepFreeTrial
• keepSubscription
Let me know if you’d like help drafting the Ukrainian translations.
🤖 Prompt for AI Agents
In packages/localizations/src/uk-UA.ts around lines 78–84 and 115–116, the new
commerce keys are set to undefined; replace each undefined value with the
appropriate Ukrainian translation for the keys: cancelFreeTrial,
cancelFreeTrialDescription, cancelFreeTrialTitle, cancelSubscription,
cancelSubscriptionAccessUntil, cancelSubscriptionNoCharge,
cancelSubscriptionTitle, keepFreeTrial, and keepSubscription; ensure each value
is a UTF-8 string in Ukrainian that matches the English intent and tone used in
other locale files and save the file so the runtime no longer falls back to
English.
There was a problem hiding this 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
🧹 Nitpick comments (4)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx (4)
25-26: Copy expectations updated — OK; prefer role-based query for the title for robustnessThe assertions are correct for the new copy. For better accessibility alignment and resilience against non-title text collisions, prefer querying the title via role.
- expect(queryByText('Setup your organization')).not.toBeInTheDocument(); + expect(queryByRole('heading', { name: /setup your organization/i })).not.toBeInTheDocument();
45-46: Use role-based query for the titleThis anchors the assertion to the actual heading element and is less brittle than a raw text query.
- expect(getByText('Setup your organization')).toBeInTheDocument(); + expect(getByRole('heading', { name: /setup your organization/i })).toBeInTheDocument();
25-26: Nit: “Setup” vs “Set up”If the product copy isn’t finalized by Content/UX, consider “Set up your organization” (verb) instead of “Setup your organization” (noun). If “Setup” is intentional branding, ignore.
Also applies to: 45-46
66-66: Assert the submit action via role, not textUsing role ensures we’re checking the actionable element and not another text node. Also future-proofs against minor copy tweaks while keeping semantic intent.
- expect(getByText('Continue')).toBeInTheDocument(); + expect(getByRole('button', { name: /continue/i })).toBeInTheDocument();
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx(4 hunks)
🧰 Additional context used
📓 Path-based instructions (14)
packages/clerk-js/src/ui/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/clerk-js-ui.mdc)
packages/clerk-js/src/ui/**/*.{ts,tsx}: Element descriptors should always be camelCase
Use element descriptors in UI components to enable consistent theming and styling via appearance.elements
Element descriptors should generate unique, stable CSS classes for theming
Element descriptors should handle state classes (e.g., cl-loading, cl-active, cl-error, cl-open) automatically based on component state
Do not render hard-coded values; all user-facing strings must be localized using provided localization methods
Use the useLocalizations hook and localizationKeys utility for all text and error messages
Use the styled system (sx prop, theme tokens, responsive values) for custom component styling
Use useCardState for card-level state, useFormState for form-level state, and useLoadingStatus for loading states
Always use handleError utility for API errors and use translateError for localized error messages
Use useFormControl for form field state, implement proper validation, and handle loading and error states in forms
Use localization keys for all form labels and placeholders
Use element descriptors for consistent styling and follow the theme token system
Use the Card and FormContainer patterns for consistent UI structure
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.{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/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.{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/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
packages/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.{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/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.{jsx,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
**/*.{jsx,tsx}: Use error boundaries in React components
Minimize re-renders in React components
**/*.{jsx,tsx}: Always use functional components with hooks instead of class components
Follow PascalCase naming for components:UserProfile,NavigationMenu
Keep components focused on a single responsibility - split large components
Limit component size to 150-200 lines; extract logic into custom hooks
Use composition over inheritance - prefer smaller, composable components
Export components as named exports for better tree-shaking
One component per file with matching filename and component name
Use useState for simple state management
Use useReducer for complex state logic
Implement proper state initialization
Use proper state updates with callbacks
Implement proper state cleanup
Use Context API for theme/authentication
Implement proper state selectors
Use proper state normalization
Implement proper state persistence
Use React.memo for expensive components
Implement proper useCallback for handlers
Use proper useMemo for expensive computations
Implement proper virtualization for lists
Use proper code splitting with React.lazy
Implement proper cleanup in useEffect
Use proper refs for DOM access
Implement proper event listener cleanup
Use proper abort controllers for fetch
Implement proper subscription cleanup
Use proper HTML elements
Implement proper ARIA attributes
Use proper heading hierarchy
Implement proper form labels
Use proper button types
Implement proper focus management
Use proper keyboard shortcuts
Implement proper tab order
Use proper skip links
Implement proper focus traps
Implement proper error boundaries
Use proper error logging
Implement proper error recovery
Use proper error messages
Implement proper error fallbacks
Use proper form validation
Implement proper error states
Use proper error messages
Implement proper form submission
Use proper form reset
Use proper component naming
Implement proper file naming
Use proper prop naming
Implement proper...
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
packages/**/*.{test,spec}.{js,jsx,ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Unit tests should use Jest or Vitest as the test runner.
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
packages/{clerk-js,elements,themes}/**/*.{test,spec}.{js,jsx,ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Visual regression testing should be performed for UI components.
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.{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/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.tsx
📄 CodeRabbit Inference Engine (.cursor/rules/react.mdc)
**/*.tsx: Use proper type definitions for props and state
Leverage TypeScript's type inference where possible
Use proper event types for handlers
Implement proper generic types for reusable components
Use proper type guards for conditional rendering
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.test.{jsx,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/react.mdc)
**/*.test.{jsx,tsx}: Use React Testing Library
Test component behavior, not implementation
Use proper test queries
Implement proper test isolation
Use proper test coverage
Test component interactions
Use proper test data
Implement proper test setup
Use proper test cleanup
Implement proper test assertions
Use proper test structure
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/__tests__/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/typescript.mdc)
**/__tests__/**/*.{ts,tsx}: Create type-safe test builders/factories
Use branded types for test isolation
Implement proper mock types that match interfaces
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*
⚙️ CodeRabbit Configuration File
If there are no tests added or modified as part of the PR, please suggest that tests be added to cover the changes.
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
⏰ 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: Integration Tests (nextjs, chrome, 14)
- GitHub Check: Integration Tests (nextjs, chrome, 15)
🔇 Additional comments (1)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx (1)
155-155: LGTM: “Continue” button assertion via roleGood use of role-based query with a case-insensitive name.
9c5dd7b to
ce40ac4
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
packages/testing/src/playwright/unstable/page-objects/sessionTask.ts (2)
12-20: Scope the “Continue” selector to the form and assert enabled after filling to reduce flakinessAvoid matching an unrelated “Continue” button elsewhere on the page and ensure the button is actionable after inputs are filled.
Apply this diff:
- const createOrganizationButton = page.getByRole('button', { name: /continue/i }); - - await expect(createOrganizationButton).toBeVisible(); - - await page.locator('input[name=name]').fill(fakeOrganization.name); - await page.locator('input[name=slug]').fill(fakeOrganization.slug); - - await createOrganizationButton.click(); + const form = page.locator('form').filter({ has: page.locator('input[name=name]') }); + const createOrganizationButton = form.getByRole('button', { name: /continue/i }); + + await form.locator('input[name=name]').fill(fakeOrganization.name); + await form.locator('input[name=slug]').fill(fakeOrganization.slug); + await expect(createOrganizationButton).toBeEnabled(); + await createOrganizationButton.click();
6-6: Add explicit return type for the exported factory and a brief JSDocKeeps the API surface typed and documented per repo guidelines.
Apply this diff to the function signature:
-export const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedPage }) => { +export const createSessionTaskComponentPageObject = (testArgs: { page: EnhancedPage }): SessionTaskComponentPageObject => {Add the following near the imports:
/** * Factory for the Session Task page-object. * Note: Selector relies on localized button text ("Continue"). Prefer test IDs or stable localization keys if available. */ type SessionTaskComponentPageObject = ReturnType<typeof common> & { resolveForceOrganizationSelectionTask(fakeOrganization: { name: string; slug: string }): Promise<void>; };
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (2)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx(4 hunks)packages/testing/src/playwright/unstable/page-objects/sessionTask.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/tests/TaskChooseOrganization.test.tsx
🧰 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/testing/src/playwright/unstable/page-objects/sessionTask.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/testing/src/playwright/unstable/page-objects/sessionTask.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
packages/**/*.{ts,tsx,d.ts}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
Packages should export TypeScript types alongside runtime code
Files:
packages/testing/src/playwright/unstable/page-objects/sessionTask.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/testing/src/playwright/unstable/page-objects/sessionTask.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/testing/src/playwright/unstable/page-objects/sessionTask.ts
**/*
⚙️ CodeRabbit Configuration File
If there are no tests added or modified as part of the PR, please suggest that tests be added to cover the changes.
Files:
packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
There was a problem hiding this 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
🧹 Nitpick comments (1)
.changeset/fuzzy-trains-thank.md (1)
8-8: Polish wording for clarity and grammar (“copy” is uncountable; refine flow reference).Suggested rephrase:
- “Update copy for the Create Organization screen in the TaskChooseOrganization flow”
Apply this diff:
-Update copies for create organization screen on session tasks +Update copy for the Create Organization screen in the TaskChooseOrganization flow
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
.changeset/fuzzy-trains-thank.md(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
.changeset/**
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Automated releases must use Changesets.
Files:
.changeset/fuzzy-trains-thank.md
🪛 LanguageTool
.changeset/fuzzy-trains-thank.md
[grammar] ~8-~8: There might be a mistake here.
Context: ...lerk/testing': patch --- Update copies for create organization screen on session t...
(QB_NEW_EN)
🔇 Additional comments (1)
.changeset/fuzzy-trains-thank.md (1)
1-6: Changeset frontmatter looks correct (patch bumps for all impacted packages).The packages and bump levels align with the described scope of changes.
9a70ff5 to
fe1d07f
Compare
TaskChooseOrganization copies for create organization screen
fe1d07f to
2f8cde7
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
♻️ Duplicate comments (2)
packages/localizations/src/es-CR.ts (1)
825-828: Populate create-organization field labels/placeholders to avoid en-US fallbackThese four new keys are left undefined; users will see en-US copy in the Create Organization step. Recommend filling them now for es-CR. Keeping “Apodo” for slug aligns with existing es-CR usage (see formFieldLabel__organizationSlug above). Use ASCII in the slug placeholder to match typical slug constraints.
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Mi organización', + formFieldInputPlaceholder__slug: 'mi-organizacion', + formFieldLabel__name: 'Nombre', + formFieldLabel__slug: 'Apodo',#!/bin/bash set -euo pipefail echo "Check UI references to the new createOrganization field keys" rg -nP --type=ts --type=tsx -C2 \ "taskChooseOrganization\.createOrganization\.(formField(Label|InputPlaceholder)__(name|slug))" echo echo "Confirm es-CR now defines all four keys" rg -nP -C1 "formField(InputPlaceholder|Label)__(name|slug)" packages/localizations/src/es-CR.ts echo echo "Confirm the keys exist in the base en-US locale for alignment" rg -nP -n -C1 \ "formFieldInputPlaceholder__name|formFieldInputPlaceholder__slug|formFieldLabel__name|formFieldLabel__slug" \ packages/localizations/src/en-US.tspackages/localizations/src/nl-BE.ts (1)
818-821: Undefined placeholders will wipe en-US fallback; fill values or delete the keys.Same class of issue noted previously for this locale: explicit
undefinedin localized resources overrides base values, causing blank UI strings. Provide Dutch values now or remove the keys to inherit en-US.Preferred quick fix: remove to allow fallback
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined,Alternative: add NL-BE translations
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Voer organisatienaam in', + formFieldInputPlaceholder__slug: 'mijn-org', + formFieldLabel__name: 'Naam', + formFieldLabel__slug: 'Slug',#!/bin/bash set -euo pipefail # 1) Confirm en-US defines these keys for fallback fd -a en-US.ts | while read -r f; do rg -n -C2 "taskChooseOrganization|formFieldLabel__name|formFieldInputPlaceholder__name|formFieldLabel__slug|formFieldInputPlaceholder__slug" "$f" || true done # 2) Surface merge logic to validate undefined-replacement behavior rg -n -C3 "parseLocalizationResource|fastDeepMerge" packages -g '!**/dist/**' -g '!**/build/**' || true
🧹 Nitpick comments (11)
packages/localizations/src/zh-TW.ts (1)
807-810: Add zh-TW translations for the new name/slug fieldsThe four new keys in packages/localizations/src/zh-TW.ts (lines 807–810) are currently
undefined, falling back to en-US:
- formFieldInputPlaceholder__name
- formFieldInputPlaceholder__slug
- formFieldLabel__name
- formFieldLabel__slug
To keep zh-TW UX consistent, you can replace the
undefineds with:--- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ –807,4 +807,4 @@ - formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: '請輸入組織名稱', + formFieldInputPlaceholder__slug: '請輸入 URL 代稱', + formFieldLabel__name: '組織名稱', + formFieldLabel__slug: 'URL 代稱',• If you’d prefer example-based placeholders (to mirror “My Organization” / “my-organization”), let me know and I can adjust these.
• The PR notes the submit button copy switched to “Continue” (en-US usesformButtonSubmit: 'Continue'). In zh-TW,createOrganization.formButtonSubmitis currently “創建組織” – you may want to align this to “繼續” for consistency.packages/localizations/src/es-CR.ts (1)
823-824: Optional: Translate the buttons to avoid fallback (“Continue”/“Reset”)If you want to eliminate en-US fallback on the new step entirely, provide es-CR here too. Suggest “Continuar” (consistent with formButtonPrimary) and “Saltar” (matches existing usage in invitePage).
- formButtonReset: undefined, - formButtonSubmit: undefined, + formButtonReset: 'Saltar', + formButtonSubmit: 'Continuar',packages/localizations/src/fi-FI.ts (3)
819-822: Translate the newly added name/slug labels and placeholdersThese four keys were added but left undefined. Providing Finnish strings keeps the UX consistent and avoids English fallbacks in the create-organization flow.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Esimerkki Oy', + formFieldInputPlaceholder__slug: 'minun-org', + formFieldLabel__name: 'Nimi', + formFieldLabel__slug: 'Slug',
818-818: Localize the submit button to match en-US “Continue”en-US changed this to “Continue.” In Finnish locales elsewhere, “Jatka” is used consistently. Suggest localizing here to avoid fallback.
- formButtonSubmit: undefined, + formButtonSubmit: 'Jatka',
823-825: Add title and subtitle for the updated create-organization copyAlign with the new en-US copy (“Set up your organization” / “Enter your organization details to continue”). Suggested Finnish is semi-formal and consistent with existing tone.
- subtitle: undefined, - title: undefined, + subtitle: 'Syötä organisaatiosi tiedot jatkaaksesi.', + title: 'Määritä organisaatiosi',packages/localizations/src/hr-HR.ts (1)
820-823: Fill the new Create Organization field labels/placeholders (fallbacks are currently English).These four new keys are undefined, so users will see English fallbacks. Recommend adding Croatian translations now for consistency with the rest of this locale.
Proposed translations (aligned with existing terms like "Naziv" and slug examples in this file):
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Moja organizacija', + formFieldInputPlaceholder__slug: 'moja-organizacija', + formFieldLabel__name: 'Naziv', + formFieldLabel__slug: 'Slug',If you prefer different vocabulary for "organization" in this locale, I can adjust accordingly. Also validate that these match the updated en-US intent in packages/localizations/src/en-US.ts.
.changeset/curvy-shoes-create.md (1)
8-8: Tighten up the changeset description grammar.Minor copy edit for clarity.
-Update copies for create organization screen on session tasks +Update copy for the create-organization screen in session taskspackages/localizations/src/bn-IN.ts (1)
823-826: Provide Bengali translations for the new Create Organization fields.Leaving these undefined forces English fallbacks. Add localized strings for a consistent experience.
Suggested values (consistent with existing terminology in this file, e.g., “সংগঠন”):
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'আমার সংগঠন', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: 'নাম', + formFieldLabel__slug: 'স্লাগ',Note: slug placeholders elsewhere in this locale use 'my-org'. Keeping 'my-organization' aligns with the updated en-US for this screen, but creates a small inconsistency. If you want global consistency, we can standardize both to the same pattern.
packages/localizations/src/hi-IN.ts (1)
823-826: Add Hindi translations for the new Create Organization field labels/placeholders.Undefined values will fall back to English; add localized text for this flow.
Recommended translations:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'मेरा संगठन', + formFieldInputPlaceholder__slug: 'my-organization', + formFieldLabel__name: 'नाम', + formFieldLabel__slug: 'स्लग',Slug uses Latin characters intentionally for URL familiarity; if you prefer Devanagari, we can revisit.
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx (2)
25-27: Use the correct role for “Sign out” (link, not button).In this app, “Sign out” is rendered as a link elsewhere in the tests. Make the non-render assertion consistent to avoid false negatives.
- expect(queryByRole('button', { name: /sign out/i })).not.toBeInTheDocument(); + expect(queryByRole('link', { name: /sign out/i })).not.toBeInTheDocument();
62-67: Prefer role-based query for the “Continue” CTA for better resilience.Querying by role and accessible name is more robust than plain text in case layout or surrounding text changes.
- const { getByRole, getByText } = render(<TaskChooseOrganization />, { wrapper }); + const { getByRole, getByText } = render(<TaskChooseOrganization />, { wrapper }); @@ - expect(getByText('Continue')).toBeInTheDocument(); + expect(getByRole('button', { name: /continue/i })).toBeInTheDocument();Optional: consider adding an assertion for the field label/placeholder coming from the new localization keys (e.g., that the “Name” label/placeholder is present), to cover the intent of this PR change.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (54)
.changeset/curvy-shoes-create.md(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx(4 hunks)packages/localizations/src/ar-SA.ts(1 hunks)packages/localizations/src/be-BY.ts(1 hunks)packages/localizations/src/bg-BG.ts(1 hunks)packages/localizations/src/bn-IN.ts(1 hunks)packages/localizations/src/ca-ES.ts(1 hunks)packages/localizations/src/cs-CZ.ts(1 hunks)packages/localizations/src/da-DK.ts(1 hunks)packages/localizations/src/de-DE.ts(1 hunks)packages/localizations/src/el-GR.ts(1 hunks)packages/localizations/src/en-GB.ts(1 hunks)packages/localizations/src/en-US.ts(1 hunks)packages/localizations/src/es-CR.ts(1 hunks)packages/localizations/src/es-ES.ts(1 hunks)packages/localizations/src/es-MX.ts(1 hunks)packages/localizations/src/es-UY.ts(1 hunks)packages/localizations/src/fa-IR.ts(1 hunks)packages/localizations/src/fi-FI.ts(1 hunks)packages/localizations/src/fr-FR.ts(1 hunks)packages/localizations/src/he-IL.ts(1 hunks)packages/localizations/src/hi-IN.ts(1 hunks)packages/localizations/src/hr-HR.ts(1 hunks)packages/localizations/src/hu-HU.ts(1 hunks)packages/localizations/src/id-ID.ts(1 hunks)packages/localizations/src/is-IS.ts(1 hunks)packages/localizations/src/it-IT.ts(1 hunks)packages/localizations/src/ja-JP.ts(1 hunks)packages/localizations/src/kk-KZ.ts(1 hunks)packages/localizations/src/ko-KR.ts(1 hunks)packages/localizations/src/mn-MN.ts(1 hunks)packages/localizations/src/ms-MY.ts(1 hunks)packages/localizations/src/nb-NO.ts(1 hunks)packages/localizations/src/nl-BE.ts(1 hunks)packages/localizations/src/nl-NL.ts(1 hunks)packages/localizations/src/pl-PL.ts(1 hunks)packages/localizations/src/pt-BR.ts(1 hunks)packages/localizations/src/pt-PT.ts(1 hunks)packages/localizations/src/ro-RO.ts(1 hunks)packages/localizations/src/ru-RU.ts(1 hunks)packages/localizations/src/sk-SK.ts(1 hunks)packages/localizations/src/sr-RS.ts(1 hunks)packages/localizations/src/sv-SE.ts(1 hunks)packages/localizations/src/ta-IN.ts(1 hunks)packages/localizations/src/te-IN.ts(1 hunks)packages/localizations/src/th-TH.ts(1 hunks)packages/localizations/src/tr-TR.ts(1 hunks)packages/localizations/src/uk-UA.ts(1 hunks)packages/localizations/src/vi-VN.ts(1 hunks)packages/localizations/src/zh-CN.ts(1 hunks)packages/localizations/src/zh-TW.ts(1 hunks)packages/testing/src/playwright/unstable/page-objects/sessionTask.ts(1 hunks)packages/types/src/localization.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (43)
- packages/localizations/src/ko-KR.ts
- packages/localizations/src/sr-RS.ts
- packages/localizations/src/pt-PT.ts
- packages/localizations/src/es-UY.ts
- packages/localizations/src/zh-CN.ts
- packages/types/src/localization.ts
- packages/localizations/src/ms-MY.ts
- packages/localizations/src/nb-NO.ts
- packages/localizations/src/cs-CZ.ts
- packages/localizations/src/sv-SE.ts
- packages/localizations/src/pl-PL.ts
- packages/localizations/src/ar-SA.ts
- packages/localizations/src/uk-UA.ts
- packages/localizations/src/mn-MN.ts
- packages/localizations/src/te-IN.ts
- packages/localizations/src/es-ES.ts
- packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx
- packages/localizations/src/es-MX.ts
- packages/localizations/src/en-GB.ts
- packages/localizations/src/it-IT.ts
- packages/localizations/src/th-TH.ts
- packages/localizations/src/da-DK.ts
- packages/localizations/src/nl-NL.ts
- packages/localizations/src/vi-VN.ts
- packages/localizations/src/id-ID.ts
- packages/localizations/src/be-BY.ts
- packages/localizations/src/fa-IR.ts
- packages/localizations/src/ja-JP.ts
- packages/localizations/src/tr-TR.ts
- packages/localizations/src/ru-RU.ts
- packages/localizations/src/el-GR.ts
- packages/localizations/src/he-IL.ts
- packages/localizations/src/ca-ES.ts
- packages/localizations/src/fr-FR.ts
- packages/localizations/src/sk-SK.ts
- packages/localizations/src/bg-BG.ts
- packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
- packages/localizations/src/pt-BR.ts
- packages/localizations/src/hu-HU.ts
- packages/localizations/src/ro-RO.ts
- packages/localizations/src/is-IS.ts
- packages/localizations/src/en-US.ts
- packages/localizations/src/ta-IN.ts
🧰 Additional context used
📓 Path-based instructions (17)
**/*.{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.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.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.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/de-DE.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.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.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.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.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.ts
packages/localizations/**/*
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/de-DE.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.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.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.ts
**/*
⚙️ CodeRabbit Configuration File
If there are no tests added or modified as part of the PR, please suggest that tests be added to cover the changes.
Files:
packages/localizations/src/de-DE.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsxpackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.ts
**/localizations/**/*.ts
⚙️ CodeRabbit Configuration File
**/localizations/**/*.ts: Review the changes to localization files with the following guidelines:
- Ensure that no existing translations are accidentally removed unless they are being replaced or fixed. If a string is removed, verify that it is intentional and justified.
- Check that all translations are friendly, formal, or semi-formal. Explicit, offensive, or inappropriate language is not allowed. If you find any potentially offensive language or are unsure, tag the @clerk/sdk-infra team in a separate comment. If you do not intend to tag the team, refer to it as "Clerk SDK Infra team" instead.
- Use the most up-to-date base localization file (https://github.com/clerk/javascript/blob/main/packages/localizations/src/en-US.ts) to validate changes, ensuring consistency and completeness.
- Confirm that new translations are accurate, contextually appropriate, and match the intent of the original English strings.
- Check for formatting issues, such as missing placeholders, incorrect variable usage, or syntax errors.
- Ensure that all keys are unique and that there are no duplicate or conflicting entries.
- If you notice missing translations for new keys, flag them for completion.
Files:
packages/localizations/src/de-DE.tspackages/localizations/src/hr-HR.tspackages/localizations/src/hi-IN.tspackages/localizations/src/zh-TW.tspackages/localizations/src/kk-KZ.tspackages/localizations/src/fi-FI.tspackages/localizations/src/bn-IN.tspackages/localizations/src/es-CR.tspackages/localizations/src/nl-BE.ts
packages/clerk-js/src/ui/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/clerk-js-ui.mdc)
packages/clerk-js/src/ui/**/*.{ts,tsx}: Element descriptors should always be camelCase
Use element descriptors in UI components to enable consistent theming and styling via appearance.elements
Element descriptors should generate unique, stable CSS classes for theming
Element descriptors should handle state classes (e.g., cl-loading, cl-active, cl-error, cl-open) automatically based on component state
Do not render hard-coded values; all user-facing strings must be localized using provided localization methods
Use the useLocalizations hook and localizationKeys utility for all text and error messages
Use the styled system (sx prop, theme tokens, responsive values) for custom component styling
Use useCardState for card-level state, useFormState for form-level state, and useLoadingStatus for loading states
Always use handleError utility for API errors and use translateError for localized error messages
Use useFormControl for form field state, implement proper validation, and handle loading and error states in forms
Use localization keys for all form labels and placeholders
Use element descriptors for consistent styling and follow the theme token system
Use the Card and FormContainer patterns for consistent UI structure
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.{jsx,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
**/*.{jsx,tsx}: Use error boundaries in React components
Minimize re-renders in React components
**/*.{jsx,tsx}: Always use functional components with hooks instead of class components
Follow PascalCase naming for components:UserProfile,NavigationMenu
Keep components focused on a single responsibility - split large components
Limit component size to 150-200 lines; extract logic into custom hooks
Use composition over inheritance - prefer smaller, composable components
Export components as named exports for better tree-shaking
One component per file with matching filename and component name
Use useState for simple state management
Use useReducer for complex state logic
Implement proper state initialization
Use proper state updates with callbacks
Implement proper state cleanup
Use Context API for theme/authentication
Implement proper state selectors
Use proper state normalization
Implement proper state persistence
Use React.memo for expensive components
Implement proper useCallback for handlers
Use proper useMemo for expensive computations
Implement proper virtualization for lists
Use proper code splitting with React.lazy
Implement proper cleanup in useEffect
Use proper refs for DOM access
Implement proper event listener cleanup
Use proper abort controllers for fetch
Implement proper subscription cleanup
Use proper HTML elements
Implement proper ARIA attributes
Use proper heading hierarchy
Implement proper form labels
Use proper button types
Implement proper focus management
Use proper keyboard shortcuts
Implement proper tab order
Use proper skip links
Implement proper focus traps
Implement proper error boundaries
Use proper error logging
Implement proper error recovery
Use proper error messages
Implement proper error fallbacks
Use proper form validation
Implement proper error states
Use proper error messages
Implement proper form submission
Use proper form reset
Use proper component naming
Implement proper file naming
Use proper prop naming
Implement proper...
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
packages/**/*.{test,spec}.{js,jsx,ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Unit tests should use Jest or Vitest as the test runner.
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
packages/{clerk-js,elements,themes}/**/*.{test,spec}.{js,jsx,ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Visual regression testing should be performed for UI components.
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.tsx
📄 CodeRabbit Inference Engine (.cursor/rules/react.mdc)
**/*.tsx: Use proper type definitions for props and state
Leverage TypeScript's type inference where possible
Use proper event types for handlers
Implement proper generic types for reusable components
Use proper type guards for conditional rendering
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/*.test.{jsx,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/react.mdc)
**/*.test.{jsx,tsx}: Use React Testing Library
Test component behavior, not implementation
Use proper test queries
Implement proper test isolation
Use proper test coverage
Test component interactions
Use proper test data
Implement proper test setup
Use proper test cleanup
Implement proper test assertions
Use proper test structure
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
**/__tests__/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/typescript.mdc)
**/__tests__/**/*.{ts,tsx}: Create type-safe test builders/factories
Use branded types for test isolation
Implement proper mock types that match interfaces
Files:
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx
.changeset/**
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Automated releases must use Changesets.
Files:
.changeset/curvy-shoes-create.md
🪛 LanguageTool
.changeset/curvy-shoes-create.md
[grammar] ~8-~8: There might be a mistake here.
Context: ...@clerk/types': patch --- Update copies for create organization screen on session t...
(QB_NEW_EN)
⏰ 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). (5)
- GitHub Check: Integration Tests (nextjs, chrome, 14)
- GitHub Check: Integration Tests (nextjs, chrome, 15)
- GitHub Check: Integration Tests (billing, chrome)
- GitHub Check: Integration Tests (sessions, chrome)
- GitHub Check: Integration Tests (generic, chrome)
🔇 Additional comments (2)
packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx (2)
45-46: LGTM: updated headings and subtitle assertions match the new copy.Assertions now align with “Setup your organization” and “Enter your organization details to continue”.
154-155: LGTM: updated to assert the “Continue” button in the create flow.This matches the new copy and improves selector stability by using role+name.
| formFieldInputPlaceholder__name: undefined, | ||
| formFieldInputPlaceholder__slug: undefined, | ||
| formFieldLabel__name: undefined, | ||
| formFieldLabel__slug: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Do not set new create-organization field keys to undefined (breaks fallback, renders blanks).
Explicit undefined will override the en-US base during deep-merge, yielding empty labels/placeholders in the UI. Either provide German translations or remove these entries so the runtime falls back to en-US.
Preferred quick fix: remove to allow fallback
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,Alternative: add translations now
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Name der Organisation eingeben',
+ formFieldInputPlaceholder__slug: 'my-org',
+ formFieldLabel__name: 'Name',
+ formFieldLabel__slug: 'Slug',🏁 Script executed:
#!/bin/bash
set -euo pipefail
# 1) Confirm en-US has the new keys for fallback
fd -a en-US.ts | while read -r f; do
echo "Checking keys in $f"
rg -n -C2 "taskChooseOrganization|formFieldLabel__name|formFieldInputPlaceholder__name|formFieldLabel__slug|formFieldInputPlaceholder__slug" "$f" || true
done
# 2) Inspect localization merge to verify that explicit `undefined` overrides base strings
rg -n -C3 "parseLocalizationResource|fastDeepMerge" packages -g '!**/dist/**' -g '!**/build/**' || trueLength of output: 16516
Remove undefined create-organization keys in de-DE localization
Explicit undefined entries in the German resource will override the en-US defaults (via fastDeepMergeAndReplace), resulting in blank labels/placeholders in the UI. Either supply valid German strings now or delete these lines so the runtime can fall back to en-US.
• File: packages/localizations/src/de-DE.ts
Lines: 829–832
Preferred quick fix – allow fallback:
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,Alternative – add German translations:
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Name der Organisation eingeben',
+ formFieldInputPlaceholder__slug: 'my-org',
+ formFieldLabel__name: 'Name',
+ formFieldLabel__slug: 'Slug',📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| formFieldInputPlaceholder__name: undefined, | |
| formFieldInputPlaceholder__slug: undefined, | |
| formFieldLabel__name: undefined, | |
| formFieldLabel__slug: undefined, |
🤖 Prompt for AI Agents
In packages/localizations/src/de-DE.ts around lines 829 to 832, the four
create-organization keys are explicitly set to undefined which overrides en-US
defaults and causes blank UI labels; either remove these four entries
(formFieldInputPlaceholder__name, formFieldInputPlaceholder__slug,
formFieldLabel__name, formFieldLabel__slug) so the runtime falls back to en-US,
or replace each undefined with the appropriate German translation strings (e.g.,
placeholders/labels in German) ensuring no undefined values remain.
| formFieldInputPlaceholder__name: undefined, | ||
| formFieldInputPlaceholder__slug: undefined, | ||
| formFieldLabel__name: undefined, | ||
| formFieldLabel__slug: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Avoid undefined on new create-organization keys; fallback will be overridden and UI will be blank.
Provide Kazakh strings or remove these keys to inherit en-US.
Preferred quick fix: remove to allow fallback
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,Alternative: add Kazakh translations
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Ұйым атауын енгізіңіз',
+ formFieldInputPlaceholder__slug: 'my-org',
+ formFieldLabel__name: 'Атауы',
+ formFieldLabel__slug: 'Slug',🏁 Script executed:
#!/bin/bash
set -euo pipefail
# 1) Confirm en-US has the keys present for fallback
fd -a en-US.ts | while read -r f; do
rg -n -C2 "taskChooseOrganization|formFieldLabel__name|formFieldInputPlaceholder__name|formFieldLabel__slug|formFieldInputPlaceholder__slug" "$f" || true
done
# 2) Inspect merge behavior to ensure undefined overrides base (helps decide remove vs translate)
rg -n -C3 "parseLocalizationResource|fastDeepMerge" packages -g '!**/dist/**' -g '!**/build/**' || trueLength of output: 16363
Remove undefined overrides in kk-KZ localization
The four undefined entries in packages/localizations/src/kk-KZ.ts (lines 810–813) will override the en-US defaults and result in blank placeholders/labels. Either remove them to inherit the English fallback or supply proper Kazakh strings.
• File: packages/localizations/src/kk-KZ.ts (lines 810–813)
Preferred quick fix – remove keys to allow fallback:
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,Alternative – add Kazakh translations:
- formFieldInputPlaceholder__name: undefined,
- formFieldInputPlaceholder__slug: undefined,
- formFieldLabel__name: undefined,
- formFieldLabel__slug: undefined,
+ formFieldInputPlaceholder__name: 'Ұйым атауын енгізіңіз',
+ formFieldInputPlaceholder__slug: 'my-org',
+ formFieldLabel__name: 'Атауы',
+ formFieldLabel__slug: 'Slug',📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| formFieldInputPlaceholder__name: undefined, | |
| formFieldInputPlaceholder__slug: undefined, | |
| formFieldLabel__name: undefined, | |
| formFieldLabel__slug: undefined, |
🤖 Prompt for AI Agents
In packages/localizations/src/kk-KZ.ts around lines 810 to 813, four entries
(formFieldInputPlaceholder__name, formFieldInputPlaceholder__slug,
formFieldLabel__name, formFieldLabel__slug) are set to undefined which overrides
the en-US defaults and yields blank UI; remove these four key lines to allow the
English fallback, or replace each undefined with the appropriate Kazakh string
if translations are available.
2f8cde7 to
db9f39d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/localizations/src/ro-RO.ts (1)
186-186: Fix typo: extra closing brace in dates.numeric breaks interpolation.The triple “}}}” will break the templating pipeline.
- numeric: "{{ date | numeric('en-US') }}}", + numeric: "{{ date | numeric('en-US') }}",
♻️ Duplicate comments (1)
packages/localizations/src/da-DK.ts (1)
816-819: Provide Danish placeholders and labels for create-organization fields (align with existing organizationName/organizationSlug translations).These new keys are currently undefined and will fall back to English at runtime. Recommend filling them to match the established phrasing used elsewhere in this locale.
Apply this diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Indtast organisationens navn', + formFieldInputPlaceholder__slug: 'Indtast slug URL', + formFieldLabel__name: 'Organisationens navn', + formFieldLabel__slug: 'Slug URL',To verify consistency with the base locale and ensure these keys exist there as well, you can run:
#!/bin/bash set -euo pipefail EN_FILE="$(fd -t f 'en-US.ts' | head -n1)" DK_FILE="$(fd -t f 'da-DK.ts' | head -n1)" echo "en-US: $EN_FILE" echo "da-DK: $DK_FILE" echo # Ensure taskChooseOrganization.createOrganization block and keys exist in en-US and da-DK rg -nP -C2 $'taskChooseOrganization:\\s*\\{' "$EN_FILE" "$DK_FILE" || true echo for k in \ 'formFieldInputPlaceholder__name:' \ 'formFieldInputPlaceholder__slug:' \ 'formFieldLabel__name:' \ 'formFieldLabel__slug:' do echo "=== Key: $k" rg -nP -C1 "$k" "$EN_FILE" || echo "Missing in en-US: $k" rg -nP -C1 "$k" "$DK_FILE" || echo "Missing in da-DK: $k" echo done
🧹 Nitpick comments (4)
packages/localizations/src/hi-IN.ts (1)
823-826: Add Hindi translations for ‘name’ and ‘slug’ to hi-IN localeThe following four keys in packages/localizations/src/hi-IN.ts (lines 823–826) are undefined, causing an English fallback. Please add Hindi values consistent with existing organizationName/organizationSlug entries:
• formFieldInputPlaceholder__name
• formFieldInputPlaceholder__slug
• formFieldLabel__name
• formFieldLabel__slugSuggested diff:
- formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'संगठन का नाम', + formFieldInputPlaceholder__slug: 'my-org', + formFieldLabel__name: 'नाम', + formFieldLabel__slug: 'स्लग',If you prefer to land these as undefined and backfill later, please file a follow-up issue so we don’t leave this surface partially localized.
.changeset/curvy-shoes-create.md (1)
1-8: Polish changeset summary for clarity/grammarMinor copyedit to read more naturally.
-Update copies for create organization screen on session tasks +Update copy for the create-organization screen in session taskspackages/localizations/src/es-ES.ts (1)
816-825: Provide Spanish translations for new create-organization fields (and align title/subtitle/CTA with en-US)The four newly added keys are left undefined. Suggest filling them plus aligning
formButtonSubmit,title, andsubtitleto match the updated en-US copy for this screen. This keeps the TaskChooseOrganization flow consistent and avoids fallback to English.createOrganization: { formButtonReset: undefined, - formButtonSubmit: undefined, + formButtonSubmit: 'Continuar', - formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, + formFieldInputPlaceholder__name: 'Mi organización', + formFieldInputPlaceholder__slug: 'mi-organizacion', + formFieldLabel__name: 'Nombre', + formFieldLabel__slug: 'Slug', - subtitle: undefined, - title: undefined, + subtitle: 'Introduce los detalles de la organización para continuar.', + title: 'Configura tu organización', },Notes:
- Placeholder for slug intentionally without accent to reflect valid URL slugs.
- Using "Configura" and "Introduce" matches existing es-ES tone elsewhere in this file.
packages/localizations/src/ro-RO.ts (1)
199-200: Revisit ‘matchingPasswords’ error string; it reads like a success message.Having an error message that says “Parolele se potrivesc.” is misleading, especially since the “notMatchingPasswords” key exists correctly below.
If this key is unused, safest is to fallback to base:
- formFieldError__matchingPasswords: 'Parolele se potrivesc.', + formFieldError__matchingPasswords: undefined,Alternatively, if it is used for a positive validation state, consider moving it under a non-error key or renaming in types for clarity.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (54)
.changeset/curvy-shoes-create.md(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx(1 hunks)packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx(4 hunks)packages/localizations/src/ar-SA.ts(1 hunks)packages/localizations/src/be-BY.ts(1 hunks)packages/localizations/src/bg-BG.ts(1 hunks)packages/localizations/src/bn-IN.ts(1 hunks)packages/localizations/src/ca-ES.ts(1 hunks)packages/localizations/src/cs-CZ.ts(1 hunks)packages/localizations/src/da-DK.ts(1 hunks)packages/localizations/src/de-DE.ts(1 hunks)packages/localizations/src/el-GR.ts(1 hunks)packages/localizations/src/en-GB.ts(1 hunks)packages/localizations/src/en-US.ts(1 hunks)packages/localizations/src/es-CR.ts(1 hunks)packages/localizations/src/es-ES.ts(1 hunks)packages/localizations/src/es-MX.ts(1 hunks)packages/localizations/src/es-UY.ts(1 hunks)packages/localizations/src/fa-IR.ts(1 hunks)packages/localizations/src/fi-FI.ts(1 hunks)packages/localizations/src/fr-FR.ts(1 hunks)packages/localizations/src/he-IL.ts(1 hunks)packages/localizations/src/hi-IN.ts(1 hunks)packages/localizations/src/hr-HR.ts(1 hunks)packages/localizations/src/hu-HU.ts(1 hunks)packages/localizations/src/id-ID.ts(1 hunks)packages/localizations/src/is-IS.ts(1 hunks)packages/localizations/src/it-IT.ts(1 hunks)packages/localizations/src/ja-JP.ts(1 hunks)packages/localizations/src/kk-KZ.ts(1 hunks)packages/localizations/src/ko-KR.ts(1 hunks)packages/localizations/src/mn-MN.ts(1 hunks)packages/localizations/src/ms-MY.ts(1 hunks)packages/localizations/src/nb-NO.ts(1 hunks)packages/localizations/src/nl-BE.ts(1 hunks)packages/localizations/src/nl-NL.ts(1 hunks)packages/localizations/src/pl-PL.ts(1 hunks)packages/localizations/src/pt-BR.ts(1 hunks)packages/localizations/src/pt-PT.ts(1 hunks)packages/localizations/src/ro-RO.ts(1 hunks)packages/localizations/src/ru-RU.ts(1 hunks)packages/localizations/src/sk-SK.ts(1 hunks)packages/localizations/src/sr-RS.ts(1 hunks)packages/localizations/src/sv-SE.ts(1 hunks)packages/localizations/src/ta-IN.ts(1 hunks)packages/localizations/src/te-IN.ts(1 hunks)packages/localizations/src/th-TH.ts(1 hunks)packages/localizations/src/tr-TR.ts(1 hunks)packages/localizations/src/uk-UA.ts(1 hunks)packages/localizations/src/vi-VN.ts(1 hunks)packages/localizations/src/zh-CN.ts(1 hunks)packages/localizations/src/zh-TW.ts(1 hunks)packages/testing/src/playwright/unstable/page-objects/sessionTask.ts(1 hunks)packages/types/src/localization.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (49)
- packages/localizations/src/ko-KR.ts
- packages/localizations/src/ru-RU.ts
- packages/localizations/src/ca-ES.ts
- packages/localizations/src/cs-CZ.ts
- packages/localizations/src/ar-SA.ts
- packages/localizations/src/it-IT.ts
- packages/localizations/src/nb-NO.ts
- packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx
- packages/localizations/src/be-BY.ts
- packages/localizations/src/sk-SK.ts
- packages/localizations/src/he-IL.ts
- packages/localizations/src/nl-NL.ts
- packages/localizations/src/hr-HR.ts
- packages/testing/src/playwright/unstable/page-objects/sessionTask.ts
- packages/localizations/src/es-MX.ts
- packages/localizations/src/nl-BE.ts
- packages/localizations/src/ta-IN.ts
- packages/localizations/src/zh-TW.ts
- packages/localizations/src/es-CR.ts
- packages/localizations/src/th-TH.ts
- packages/localizations/src/pt-BR.ts
- packages/localizations/src/sr-RS.ts
- packages/types/src/localization.ts
- packages/localizations/src/fr-FR.ts
- packages/localizations/src/en-GB.ts
- packages/localizations/src/is-IS.ts
- packages/localizations/src/zh-CN.ts
- packages/localizations/src/bn-IN.ts
- packages/localizations/src/kk-KZ.ts
- packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/tests/TaskChooseOrganization.test.tsx
- packages/localizations/src/es-UY.ts
- packages/localizations/src/mn-MN.ts
- packages/localizations/src/sv-SE.ts
- packages/localizations/src/hu-HU.ts
- packages/localizations/src/vi-VN.ts
- packages/localizations/src/fi-FI.ts
- packages/localizations/src/pl-PL.ts
- packages/localizations/src/ms-MY.ts
- packages/localizations/src/id-ID.ts
- packages/localizations/src/pt-PT.ts
- packages/localizations/src/te-IN.ts
- packages/localizations/src/tr-TR.ts
- packages/localizations/src/uk-UA.ts
- packages/localizations/src/el-GR.ts
- packages/localizations/src/en-US.ts
- packages/localizations/src/bg-BG.ts
- packages/localizations/src/ja-JP.ts
- packages/localizations/src/de-DE.ts
- packages/localizations/src/fa-IR.ts
🧰 Additional context used
📓 Path-based instructions (10)
**/*.{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/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.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/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.ts
packages/**/*.{ts,tsx}
📄 CodeRabbit Inference Engine (.cursor/rules/development.mdc)
TypeScript is required for all packages
Files:
packages/localizations/src/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.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/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.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/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.ts
packages/localizations/**/*
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Localization files must be placed in 'packages/localizations/'.
Files:
packages/localizations/src/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.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/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.ts
**/*
⚙️ CodeRabbit Configuration File
If there are no tests added or modified as part of the PR, please suggest that tests be added to cover the changes.
Files:
packages/localizations/src/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.ts
**/localizations/**/*.ts
⚙️ CodeRabbit Configuration File
**/localizations/**/*.ts: Review the changes to localization files with the following guidelines:
- Ensure that no existing translations are accidentally removed unless they are being replaced or fixed. If a string is removed, verify that it is intentional and justified.
- Check that all translations are friendly, formal, or semi-formal. Explicit, offensive, or inappropriate language is not allowed. If you find any potentially offensive language or are unsure, tag the @clerk/sdk-infra team in a separate comment. If you do not intend to tag the team, refer to it as "Clerk SDK Infra team" instead.
- Use the most up-to-date base localization file (https://github.com/clerk/javascript/blob/main/packages/localizations/src/en-US.ts) to validate changes, ensuring consistency and completeness.
- Confirm that new translations are accurate, contextually appropriate, and match the intent of the original English strings.
- Check for formatting issues, such as missing placeholders, incorrect variable usage, or syntax errors.
- Ensure that all keys are unique and that there are no duplicate or conflicting entries.
- If you notice missing translations for new keys, flag them for completion.
Files:
packages/localizations/src/da-DK.tspackages/localizations/src/hi-IN.tspackages/localizations/src/ro-RO.tspackages/localizations/src/es-ES.ts
.changeset/**
📄 CodeRabbit Inference Engine (.cursor/rules/monorepo.mdc)
Automated releases must use Changesets.
Files:
.changeset/curvy-shoes-create.md
🪛 LanguageTool
.changeset/curvy-shoes-create.md
[grammar] ~8-~8: There might be a mistake here.
Context: ...@clerk/types': patch --- Update copies for create organization screen on session t...
(QB_NEW_EN)
| formFieldInputPlaceholder__name: undefined, | ||
| formFieldInputPlaceholder__slug: undefined, | ||
| formFieldLabel__name: undefined, | ||
| formFieldLabel__slug: undefined, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
LGTM on key naming/location; values need completion
The new keys are correctly scoped under taskChooseOrganization.createOrganization and match the types introduced in packages/types/src/localization.ts. Only the values are missing.
Run the following to verify type coverage and en-US baseline values for these keys:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Check that types include the new keys:"
rg -n "formField(InputPlaceholder|Label)__name|formField(InputPlaceholder|Label)__slug" packages/types/src/localization.ts -C3 --type=ts
echo
echo "Show en-US values for the same keys (should be defined):"
rg -n "formField(InputPlaceholder|Label)__name|formField(InputPlaceholder|Label)__slug" packages/localizations/src/en-US.ts -C3 --type=ts
echo
echo "Scan all locales for missing values on the new keys (undefined):"
rg -nP --type=ts "taskChooseOrganization[\s\S]*createOrganization[\s\S]*formField(InputPlaceholder|Label)__(name|slug)\s*:\s*undefined" packages/localizations/src | sed 's/^/undefined: /'
echo
echo "Optional: list locales that already translated them (non-undefined):"
rg -nP --type=ts "taskChooseOrganization[\s\S]*createOrganization[\s\S]*formField(InputPlaceholder|Label)__(name|slug)\s*:\s*'[^']+'" packages/localizations/src | sed 's/^/translated: /'Length of output: 1731
Complete missing translations for new localization keys
The new keys are correctly defined in the types and the en-US locale provides baseline values. Please supply translations for these keys in all non-en locale files—currently they’re left as undefined in es-ES:
• packages/localizations/src/es-ES.ts (lines 819–822):
- formFieldInputPlaceholder__name
- formFieldInputPlaceholder__slug
- formFieldLabel__name
- formFieldLabel__slug
Ensure no locale leaves these values undefined.
🤖 Prompt for AI Agents
In packages/localizations/src/es-ES.ts around lines 819–822, four localization
keys are left undefined; replace them with Spanish translations mirroring the
en-US intent: set formFieldInputPlaceholder__name to "Introduce el nombre" (or
simply "Nombre" if placeholder is short), formFieldInputPlaceholder__slug to
"Introduce el slug" (or "Slug"), formFieldLabel__name to "Nombre" and
formFieldLabel__slug to "Slug"; ensure none remain undefined and follow the same
quoting/formatting style as the surrounding entries.
| formButtonReset: undefined, | ||
| formButtonSubmit: undefined, | ||
| formFieldInputPlaceholder__name: undefined, | ||
| formFieldInputPlaceholder__slug: undefined, | ||
| formFieldLabel__name: undefined, | ||
| formFieldLabel__slug: undefined, | ||
| subtitle: undefined, | ||
| title: undefined, | ||
| }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Fill in Romanian translations for the new create-organization fields (and align title/subtitle/submit).
Leaving these as undefined will fall back to English in UI; since en-US now ships the new copy ("Continue", updated title/subtitle), we should localize them here for consistency.
Apply this diff within the createOrganization block:
- formButtonSubmit: undefined,
+ formButtonSubmit: 'Continuați',
- formFieldInputPlaceholder__name: undefined,
+ formFieldInputPlaceholder__name: 'Introduceți numele organizației',
- formFieldInputPlaceholder__slug: undefined,
+ formFieldInputPlaceholder__slug: 'ex.: acme-co',
- formFieldLabel__name: undefined,
+ formFieldLabel__name: 'Nume',
- formFieldLabel__slug: undefined,
+ formFieldLabel__slug: 'Slug URL',
- subtitle: undefined,
+ subtitle: 'Introduceți detaliile organizației pentru a continua',
- title: undefined,
+ title: 'Configurați-vă organizația',If you prefer more explicit labeling, we can set formFieldLabel__name to “Numele organizației” to mirror the existing organizationName label elsewhere in this file—say the word and I’ll update accordingly.
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Checking new keys exist and values in en-US:"
rg -n "(formFieldLabel__name|formFieldLabel__slug|formFieldInputPlaceholder__name|formFieldInputPlaceholder__slug)\s*:" packages/localizations/src/en-US.ts -n
echo
echo "Current values in ro-RO:"
rg -n "(formFieldLabel__name|formFieldLabel__slug|formFieldInputPlaceholder__name|formFieldInputPlaceholder__slug)\s*:" packages/localizations/src/ro-RO.ts
echo
echo "Sanity check: no placeholder syntax typos (}}}) in ro-RO:"
rg -nP "\}\}\}" packages/localizations/src/ro-RO.ts || trueLength of output: 1140
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== en-US: 'createOrganization' block context ==="
rg -n "createOrganization" -C5 packages/localizations/src/en-US.ts
echo
echo "=== en-US: key values ==="
rg -nE "formButtonReset|formButtonSubmit|subtitle|title" -n packages/localizations/src/en-US.ts
echo
echo "=== ro-RO: 'createOrganization' block context ==="
rg -n "createOrganization" -C5 packages/localizations/src/ro-RO.ts
echo
echo "=== ro-RO: key values ==="
rg -nE "formButtonReset|formButtonSubmit|subtitle|title" -n packages/localizations/src/ro-RO.tsLength of output: 2842
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== en-US: taskChooseOrganization and nested createOrganization (±10 lines) ==="
rg -n "taskChooseOrganization" -C10 packages/localizations/src/en-US.ts
echo
echo "=== ro-RO: taskChooseOrganization and nested createOrganization (±10 lines) ==="
rg -n "taskChooseOrganization" -C10 packages/localizations/src/ro-RO.tsLength of output: 2272
Localize Romanian for createOrganization fields
The taskChooseOrganization.createOrganization block in packages/localizations/src/ro-RO.ts still falls back to English because these keys are undefined. Please provide Romanian translations for consistency with en-US:
Apply this diff in packages/localizations/src/ro-RO.ts:
taskChooseOrganization: {
createOrganization: {
- formButtonReset: undefined,
+ formButtonReset: 'Anulează',
- formButtonSubmit: undefined,
+ formButtonSubmit: 'Continuați',
- formFieldInputPlaceholder__name: undefined,
+ formFieldInputPlaceholder__name: 'Introduceți numele organizației',
- formFieldInputPlaceholder__slug: undefined,
+ formFieldInputPlaceholder__slug: 'ex.: acme-co',
- formFieldLabel__name: undefined,
+ formFieldLabel__name: 'Nume',
- formFieldLabel__slug: undefined,
+ formFieldLabel__slug: 'Slug URL',
- subtitle: undefined,
+ subtitle: 'Introduceți detaliile organizației pentru a continua',
- title: undefined,
+ title: 'Configurați-vă organizația',If you’d prefer a more explicit label for the name field (e.g. "Numele organizației"), let me know and I can update it.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| formButtonReset: undefined, | |
| formButtonSubmit: undefined, | |
| formFieldInputPlaceholder__name: undefined, | |
| formFieldInputPlaceholder__slug: undefined, | |
| formFieldLabel__name: undefined, | |
| formFieldLabel__slug: undefined, | |
| subtitle: undefined, | |
| title: undefined, | |
| }, | |
| taskChooseOrganization: { | |
| createOrganization: { | |
| formButtonReset: 'Anulează', | |
| formButtonSubmit: 'Continuați', | |
| formFieldInputPlaceholder__name: 'Introduceți numele organizației', | |
| formFieldInputPlaceholder__slug: 'ex.: acme-co', | |
| formFieldLabel__name: 'Nume', | |
| formFieldLabel__slug: 'Slug URL', | |
| subtitle: 'Introduceți detaliile organizației pentru a continua', | |
| title: 'Configurați-vă organizația', | |
| }, |
🤖 Prompt for AI Agents
In packages/localizations/src/ro-RO.ts around lines 817 to 825, the keys for
taskChooseOrganization.createOrganization are set to undefined and fall back to
English; replace the following keys with Romanian translations: formButtonReset,
formButtonSubmit, formFieldInputPlaceholder__name,
formFieldInputPlaceholder__slug, formFieldLabel__name, formFieldLabel__slug,
subtitle, and title. Use appropriate Romanian strings (for example:
formButtonReset -> "Resetează", formButtonSubmit -> "Trimite", name label ->
"Nume" or explicitly "Numele organizației" if preferred, slug label -> "Slug",
placeholders -> matching hint text, and translate subtitle and title into
Romanian) and ensure they follow the same key structure and quoting style as
surrounding entries.
Description
Checklist
pnpm testruns as expected.pnpm buildruns as expected.Type of change
Summary by CodeRabbit