feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(localizations, shared, clerk-js): Add missing username form error localization key - #7320

Merged
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key
Nov 26, 2025
Merged

feat(localizations, shared, clerk-js): Add missing username form error localization key#7320
guilherme6191 merged 5 commits into
mainfrom
guilherme/localization-add-username-validation-key

Conversation

@guilherme6191

@guilherme6191guilherme6191 commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Description

https://linear.app/clerk/issue/USER-4094/missing-localization-key-for-username-must-contain-one-non-number

This api error was not included in the localization keys for overriding.

  • Left undefined in en-US since it'll fallback to the english message from the API.
  • Took the chance and added a ptBR translation.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

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

Summary by CodeRabbit

  • New Features

    • Username validation now requires at least one non-numeric character.
  • Localization

    • Added a new username error message key across many locales (English, pt-BR and numerous others) to surface the new message.
  • Chores

    • Bumped package versions to publish the updated localization key.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot

changeset-botBot commented Nov 26, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3bee34a

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

This PR includes changesets to release 22 packages
NameType
@clerk/localizationsPatch
@clerk/clerk-jsPatch
@clerk/sharedPatch
@clerk/clerk-reactPatch
@clerk/chrome-extensionPatch
@clerk/clerk-expoPatch
@clerk/agent-toolkitPatch
@clerk/astroPatch
@clerk/backendPatch
@clerk/elementsPatch
@clerk/expo-passkeysPatch
@clerk/expressPatch
@clerk/fastifyPatch
@clerk/nextjsPatch
@clerk/nuxtPatch
@clerk/react-routerPatch
@clerk/remixPatch
@clerk/tanstack-react-startPatch
@clerk/testingPatch
@clerk/themesPatch
@clerk/typesPatch
@clerk/vuePatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Nov 26, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentPreviewCommentsUpdated (UTC)
clerk-js-sandboxReadyReadyPreviewCommentNov 26, 2025 5:46pm

@coderabbitai

coderabbitaiBot commented Nov 26, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a new username validation error code NEEDS_NON_NUMBER_CHAR, maps it to the localization key unstable__errors.form_username_needs_non_number_char in username utilities, extends localization types, and populates that key across localization resources plus a changeset.

Changes

Cohort / File(s)Summary
Core validation logic
packages/clerk-js/src/ui/utils/usernameUtils.ts
Introduces NEEDS_NON_NUMBER_CHAR error code and maps it in createUsernameError to unstable__errors.form_username_needs_non_number_char.
Type definitions
packages/shared/src/types/localization.ts
Adds form_username_needs_non_number_char: LocalizationValue to UnstableErrors type.
Primary locale entries
packages/localizations/src/en-US.ts, packages/localizations/src/pt-BR.ts
Adds concrete translations for unstable__errors.form_username_needs_non_number_char (English and Portuguese).
Other locale resources
packages/localizations/src/*.ts (e.g., ar-SA.ts, bg-BG.ts, de-DE.ts, fr-FR.ts, ja-JP.ts, zh-CN.ts, ... )
Adds the new form_username_needs_non_number_char key to many locale files (placed under unstable__errors or apiKeys as appropriate), often as translated strings or placeholders.
Changeset
.changeset/nasty-sloths-stare.md
Adds changeset bumping patch versions for affected packages with note about the new localization key.

Sequence Diagram(s)

sequenceDiagram
autonumber
participant UI as UI (username input)
participant Validator as UsernameValidator
participant I18n as LocalizationService
participant User as End user
UI->>Validator: submit username
alt invalid length
Validator-->>UI: error code INVALID_LENGTH
else needs non-number char
Validator-->>UI: error code NEEDS_NON_NUMBER_CHAR
else invalid characters
Validator-->>UI: error code INVALID_CHARACTER
else valid
Validator-->>UI: success
end
Note over UI,I18n: UI maps validator code to i18n key
UI->>I18n: lookup unstable__errors.form_username_needs_non_number_char (or other key)
I18n-->>UI: localized message (or undefined fallback)
UI-->>User: display message / success
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • Pay attention to:
    • packages/clerk-js/src/ui/utils/usernameUtils.ts — confirm correct error-code constant name and no regressions in existing branches.
    • packages/shared/src/types/localization.ts — ensure added type aligns with export shape and build passes.
    • Spot-check a sample of locale files (e.g., en-US.ts, pt-BR.ts, zh-CN.ts) to verify key placement (unstable__errors vs apiKeys) and string correctness.

Poem

🐰
I nudged a tiny key in place,
One non-number saves the race,
Translations bloom from near to far,
Validator nods — names raise the bar,
A crunchy carrot for the chase! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe PR title accurately describes the main change: adding a missing username form error localization key across multiple packages.
Linked Issues check✅ PassedThe PR implementation meets all acceptance criteria from USER-4094: the localization key is available for overrides via the localization system, type definitions have been updated to support the new key, and the key is implemented across all localization files.
Out of Scope Changes check✅ PassedAll changes are directly related to adding the missing localization key. The PR includes the error handling in clerk-js, type definitions in shared, localization entries across all language files, and a changeset file—all aligned with the stated objectives.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch guilherme/localization-add-username-validation-key

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

coderabbitai[bot]

This comment was marked as outdated.

@pkg-pr-new

pkg-pr-newBot commented Nov 26, 2025

Copy link
Copy Markdown

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7320

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7320

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7320

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7320

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7320

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7320

@clerk/elements

npm i https://pkg.pr.new/@clerk/elements@7320

@clerk/clerk-expo

npm i https://pkg.pr.new/@clerk/clerk-expo@7320

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7320

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7320

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7320

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7320

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7320

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7320

@clerk/clerk-react

npm i https://pkg.pr.new/@clerk/clerk-react@7320

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7320

@clerk/remix

npm i https://pkg.pr.new/@clerk/remix@7320

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7320

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7320

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7320

@clerk/themes

npm i https://pkg.pr.new/@clerk/themes@7320

@clerk/types

npm i https://pkg.pr.new/@clerk/types@7320

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7320

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7320

commit: 3bee34a

@guilherme6191guilherme6191 changed the title feat(localization, type, clerk-js): Add missing username form error localization keyfeat(localization, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
@guilherme6191guilherme6191 changed the title feat(localization, shared, clerk-js): Add missing username form error localization keyfeat(localizations, shared, clerk-js): Add missing username form error localization keyNov 26, 2025
coderabbitai[bot]

This comment was marked as outdated.

@tmilewskitmilewski left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

🙃 This looks good! Though can we add the en-US version, and expand it out to the other locale files?

pnpm run generate in the localizations package is your friend here. Cursor should be able to help fill out the undefinedform_username_needs_non_number_char localization keys.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191

Copy link
Copy Markdown
ContributorAuthor

Thanks @tmilewski. Ready again. Lmk if you see anything I might have missed.

coderabbitai[bot]

This comment was marked as resolved.

@guilherme6191
guilherme6191 merged commit 3f99742 into mainNov 26, 2025
106 of 112 checks passed
@guilherme6191
guilherme6191 deleted the guilherme/localization-add-username-validation-key branch November 26, 2025 18:24
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@guilherme6191@tmilewski@clerk-cookie