Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/thin-wolves-study.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@clerk/localizations': patch
---

Add `taskChooseOrganization` to all locales.
20 changes: 20 additions & 0 deletions packages/localizations/src/ar-SA.ts
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,26 @@ export const arSA: LocalizationResource = {
},
socialButtonsBlockButton: 'للمتابعة مع {{provider|titleize}}',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
unstable__errors: {
already_a_member_in_organization: undefined,
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/be-BY.ts
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,26 @@ export const beBY: LocalizationResource = {
},
socialButtonsBlockButton: 'Працягнуць з дапамогай {{provider|titleize}}',
socialButtonsBlockButtonManyInView: undefined,
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
unstable__errors: {
already_a_member_in_organization: 'Вы ўжо з’яўляецеся членам гэтай арганізацыі.',
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/bg-BG.ts
Original file line number Diff line number Diff line change
Expand Up @@ -788,6 +788,26 @@ export const bgBG: LocalizationResource = {
},
socialButtonsBlockButton: 'Продължи с {{provider|titleize}}',
socialButtonsBlockButtonManyInView: undefined,
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
unstable__errors: {
already_a_member_in_organization: 'Вие вече сте член на тази организация.',
captcha_invalid: undefined,
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/bn-IN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,26 @@ export const bnIN: LocalizationResource = {
},
socialButtonsBlockButton: '{{provider|titleize}} দিয়ে চালিয়ে যান',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
unstable__errors: {
already_a_member_in_organization: '{{email}} ইতিমধ্যে সংগঠনের একজন সদস্য।',
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/ca-ES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -787,6 +787,26 @@ export const caES: LocalizationResource = {
},
socialButtonsBlockButton: 'Continua amb {{provider|titleize}}',
socialButtonsBlockButtonManyInView: undefined,
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
Comment on lines +790 to +809
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Add translations or confirm fallback; verify structure against en-US; add tests

The new taskChooseOrganization block is added with all values set to undefined. If undefined is intended to fall back to en-US, please confirm. Also verify that the structure exactly matches the en-US base (keys and nesting), and consider adding a test to ensure all locales include these keys going forward.

Run this script to check all locales contain the required keys and no duplicates of taskChooseOrganization:

If desired, I can open a follow-up issue to track providing actual translations for these new keys across locales, or scaffold a test that asserts parity with en-US.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

ROOT="packages/localizations/src"

required_keys=(
'taskChooseOrganization'
'chooseOrganization'
'action__createOrganization'
'action__invitationAccept'
'action__suggestionsAccept'
'subtitle'
'suggestionsAcceptedLabel'
'title'
'createOrganization'
'formButtonReset'
'formButtonSubmit'
'signOut'
'actionLink'
'actionText'
)

echo "Scanning locales under $ROOT..."
fd -e ts . "$ROOT" | sort | while read -r f; do
  missing=()
  for k in "${required_keys[@]}"; do
    if ! rg -N "$k" "$f" >/dev/null; then
      missing+=("$k")
    fi
  done
  count=$(rg -N 'taskChooseOrganization\s*:' "$f" | wc -l | tr -d ' ')
  if (( count > 1 )); then
    echo "DUPLICATE: $f has $count taskChooseOrganization blocks"
  fi
  if (( ${#missing[@]} > 0 )); then
    echo "MISSING in $f: ${missing[*]}"
  fi
done

Length of output: 36407


All locales include the new taskChooseOrganization block – please confirm fallback & add parity tests

  • I ran a scan across packages/localizations/src/*.ts (excluding index.ts) and verified that every locale file has exactly one taskChooseOrganization block with all nested keys present, and no duplicates.
  • Next steps:
    • Confirm that setting these entries to undefined correctly falls back to the en-US strings; otherwise supply the actual translations.
    • Scaffold a CI test (e.g. a deep-key comparison against en-US) to ensure all locales stay in sync for this block going forward.
🤖 Prompt for AI Agents
In packages/localizations/src/ca-ES.ts around lines 790 to 809, the new
taskChooseOrganization block exists but all nested keys are set to undefined;
confirm whether undefined values properly fall back to en-US at runtime and if
not, replace the undefined entries with the correct Catalan translations;
additionally, add a CI parity test (e.g., a deep-key comparison against
packages/localizations/src/en-US.ts) that asserts every locale file contains the
exact same key shape for taskChooseOrganization (no missing or extra keys) to
prevent drift going forward.

unstable__errors: {
already_a_member_in_organization: undefined,
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/cs-CZ.ts
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,26 @@ export const csCZ: LocalizationResource = {
},
socialButtonsBlockButton: 'Pokračovat s {{provider|titleize}}',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
unstable__errors: {
already_a_member_in_organization: '{{email}} je již členem organizace.',
captcha_invalid: undefined,
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/da-DK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,26 @@ export const daDK: LocalizationResource = {
},
socialButtonsBlockButton: 'Forsæt med {{provider|titleize}}',
socialButtonsBlockButtonManyInView: undefined,
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
Comment on lines +789 to +808
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Populate taskChooseOrganization with existing Danish strings to avoid undefined UI labels

Structure matches en-US. However, leaving these keys undefined will surface blank labels until fallbacks kick in. You can reuse already-translated strings in this file (organizationList and createOrganization) to immediately cover the most visible actions and titles.

Apply this minimal, safe prefill based on existing strings in the same file:

   taskChooseOrganization: {
     chooseOrganization: {
-      action__createOrganization: undefined,
-      action__invitationAccept: undefined,
-      action__suggestionsAccept: undefined,
-      subtitle: undefined,
-      suggestionsAcceptedLabel: undefined,
-      title: undefined,
+      action__createOrganization: 'Opret organisation',                // mirrors organizationList.action__createOrganization
+      action__invitationAccept: 'Deltag',                               // mirrors organizationList.action__invitationAccept
+      action__suggestionsAccept: 'Anmod om at deltage',                 // mirrors organizationList.action__suggestionsAccept
+      subtitle: undefined,
+      suggestionsAcceptedLabel: 'Afventer godkendelse',                 // mirrors organizationList.suggestionsAcceptedLabel
+      title: 'Vælg en organisation',                                    // mirrors organizationList.titleWithoutPersonal
     },
     createOrganization: {
-      formButtonReset: undefined,
-      formButtonSubmit: undefined,
+      formButtonReset: 'Spring over',                                   // mirrors createOrganization.invitePage.formButtonReset
+      formButtonSubmit: 'Opret organisation',                           // mirrors createOrganization.formButtonSubmit
       subtitle: undefined,
       title: undefined,
     },
     signOut: {
       actionLink: undefined,
       actionText: undefined,
     },
   },

Run this script to verify parity with en-US and ensure all locales include the expected keys:

Also, since no tests were added, consider adding a lightweight test ensuring every locale defines taskChooseOrganization with the complete shape (at least the keys above).


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "1) Verify en-US contains taskChooseOrganization"
fd -a "en-US.ts" | xargs rg -n "taskChooseOrganization" || { echo "Missing in en-US.ts"; exit 1; }

echo "2) Verify all locales include required subkeys"
fd -a "packages/localizations/src/*.ts" | while read -r f; do
  if rg -q "export const .*: LocalizationResource" "$f"; then
    if ! rg -q "taskChooseOrganization" "$f"; then
      echo "Missing taskChooseOrganization in $f"
      continue
    fi
    for k in \
      "chooseOrganization:.*action__createOrganization" \
      "chooseOrganization:.*action__invitationAccept" \
      "chooseOrganization:.*action__suggestionsAccept" \
      "chooseOrganization:.*subtitle" \
      "chooseOrganization:.*suggestionsAcceptedLabel" \
      "chooseOrganization:.*title" \
      "createOrganization:.*formButtonReset" \
      "createOrganization:.*formButtonSubmit" \
      "createOrganization:.*subtitle" \
      "createOrganization:.*title" \
      "signOut:.*actionLink" \
      "signOut:.*actionText"
    do
      rg -Nq "$k" "$f" || echo "Missing subkey ($k) in $f"
    done
  fi
done

echo "3) Optional: report undefined values for taskChooseOrganization keys (so you can track gaps)"
rg -n "taskChooseOrganization:[\s\S]*?" -A 60 packages/localizations/src/*.ts | rg -n ":\s*undefined\s*,?\s*$" || true

Length of output: 99713


Populate taskChooseOrganization in da-DK.ts to prevent blank UI labels

Leaving these entries undefined will render blank strings until fallback. We can mirror existing Danish translations from organizationList and createOrganization:

In packages/localizations/src/da-DK.ts around lines 789–808:

   taskChooseOrganization: {
     chooseOrganization: {
-      action__createOrganization: undefined,
-      action__invitationAccept: undefined,
-      action__suggestionsAccept: undefined,
-      subtitle: undefined,
-      suggestionsAcceptedLabel: undefined,
-      title: undefined,
+      action__createOrganization: 'Opret organisation',                // from organizationList.action__createOrganization
+      action__invitationAccept: 'Deltag',                               // from organizationList.action__invitationAccept
+      action__suggestionsAccept: 'Anmod om at deltage',                 // from organizationList.action__suggestionsAccept
+      subtitle: undefined,
+      suggestionsAcceptedLabel: 'Afventer godkendelse',                 // from organizationList.suggestionsAcceptedLabel
+      title: 'Vælg en organisation',                                    // from organizationList.titleWithoutPersonal
     },
     createOrganization: {
-      formButtonReset: undefined,
-      formButtonSubmit: undefined,
+      formButtonReset: 'Spring over',                                   // from createOrganization.invitePage.formButtonReset
+      formButtonSubmit: 'Opret organisation',                           // from createOrganization.formButtonSubmit
       subtitle: undefined,
       title: undefined,
     },
   },

• Note: da-DK isn’t the only locale with undefined taskChooseOrganization keys—many others (e.g., zh-TW, zh-CN, vi-VN, tr-TR, uk-UA) also do. Consider adding a lightweight test that enforces a complete taskChooseOrganization shape across all locales.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: 'Opret organisation', // from organizationList.action__createOrganization
action__invitationAccept: 'Deltag', // from organizationList.action__invitationAccept
action__suggestionsAccept: 'Anmod om at deltage', // from organizationList.action__suggestionsAccept
subtitle: undefined,
suggestionsAcceptedLabel: 'Afventer godkendelse', // from organizationList.suggestionsAcceptedLabel
title: 'Vælg en organisation', // from organizationList.titleWithoutPersonal
},
createOrganization: {
formButtonReset: 'Spring over', // from createOrganization.invitePage.formButtonReset
formButtonSubmit: 'Opret organisation', // from createOrganization.formButtonSubmit
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
🤖 Prompt for AI Agents
In packages/localizations/src/da-DK.ts around lines 789 to 808, the
taskChooseOrganization object has many keys set to undefined causing blank UI
labels; replace each undefined with the corresponding Danish strings by
mirroring the existing translations used in organizationList and
createOrganization (fill action__createOrganization, action__invitationAccept,
action__suggestionsAccept, subtitle, suggestionsAcceptedLabel, title,
formButtonReset, formButtonSubmit, signOut.actionLink, signOut.actionText) so no
keys are undefined; also add a unit test that asserts every locale exports a
complete taskChooseOrganization shape to prevent regressions.

unstable__errors: {
already_a_member_in_organization: undefined,
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/de-DE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,26 @@ export const deDE: LocalizationResource = {
},
socialButtonsBlockButton: 'Weiter mit {{provider|titleize}}',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
Comment on lines +802 to +821
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Provide de-DE translations for taskChooseOrganization

Replace placeholders with German translations consistent with the rest of the file (tone and terminology).

Apply this diff:

   taskChooseOrganization: {
     chooseOrganization: {
-      action__createOrganization: undefined,
-      action__invitationAccept: undefined,
-      action__suggestionsAccept: undefined,
-      subtitle: undefined,
-      suggestionsAcceptedLabel: undefined,
-      title: undefined,
+      action__createOrganization: 'Neue Organisation erstellen',
+      action__invitationAccept: 'Beitreten',
+      action__suggestionsAccept: 'Beitritt anfragen',
+      subtitle: 'Einer bestehenden Organisation beitreten oder eine neue erstellen',
+      suggestionsAcceptedLabel: 'Genehmigung ausstehend',
+      title: 'Organisation auswählen',
     },
     createOrganization: {
-      formButtonReset: undefined,
-      formButtonSubmit: undefined,
-      subtitle: undefined,
-      title: undefined,
+      formButtonReset: 'Abbrechen',
+      formButtonSubmit: 'Neue Organisation erstellen',
+      subtitle: 'Erzählen Sie uns etwas über Ihre Organisation',
+      title: 'Organisation einrichten',
     },
     signOut: {
-      actionLink: undefined,
-      actionText: undefined,
+      actionLink: 'Abmelden',
+      actionText: 'Angemeldet als {{identifier}}',
     },
   },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: 'Neue Organisation erstellen',
action__invitationAccept: 'Beitreten',
action__suggestionsAccept: 'Beitritt anfragen',
subtitle: 'Einer bestehenden Organisation beitreten oder eine neue erstellen',
suggestionsAcceptedLabel: 'Genehmigung ausstehend',
title: 'Organisation auswählen',
},
createOrganization: {
formButtonReset: 'Abbrechen',
formButtonSubmit: 'Neue Organisation erstellen',
subtitle: 'Erzählen Sie uns etwas über Ihre Organisation',
title: 'Organisation einrichten',
},
signOut: {
actionLink: 'Abmelden',
actionText: 'Angemeldet als {{identifier}}',
},
},
🤖 Prompt for AI Agents
In packages/localizations/src/de-DE.ts around lines 802 to 821, the
taskChooseOrganization object contains undefined placeholders for several keys;
replace each undefined value with appropriate German translations consistent
with the file's tone and terminology (e.g., provide localized strings for
action__createOrganization, action__invitationAccept, action__suggestionsAccept,
subtitle, suggestionsAcceptedLabel, title, and for
createOrganization.formButtonReset, createOrganization.formButtonSubmit,
createOrganization.subtitle, createOrganization.title, and signOut.actionLink
and signOut.actionText). Ensure grammar and capitalization match surrounding
translations and preserve key names exactly.

unstable__errors: {
already_a_member_in_organization: 'Sie sind bereits Mitglied in dieser Organisation.',
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/el-GR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,26 @@ export const elGR: LocalizationResource = {
},
socialButtonsBlockButton: 'Συνέχεια με {{provider|titleize}}',
socialButtonsBlockButtonManyInView: undefined,
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
Comment on lines +793 to +812
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fill obvious Greek translations from existing keys to avoid undefineds

You can safely reuse existing strings from organizationList and createOrganization to populate the new taskChooseOrganization block. This prevents runtime fallbacks and keeps UX consistent.

Apply this diff:

   taskChooseOrganization: {
     chooseOrganization: {
-      action__createOrganization: undefined,
-      action__invitationAccept: undefined,
-      action__suggestionsAccept: undefined,
-      subtitle: undefined,
-      suggestionsAcceptedLabel: undefined,
-      title: undefined,
+      action__createOrganization: 'Δημιουργία οργανισμού',
+      action__invitationAccept: 'Συμμετοχή',
+      action__suggestionsAccept: 'Αίτηση συμμετοχής',
+      subtitle: 'για να συνεχίσετε στο {{applicationName}}',
+      suggestionsAcceptedLabel: 'Εκκρεμεί έγκριση',
+      title: 'Επιλέξτε οργανισμό',
     },
     createOrganization: {
-      formButtonReset: undefined,
-      formButtonSubmit: undefined,
-      subtitle: undefined,
-      title: undefined,
+      formButtonReset: 'Παράλειψη',
+      formButtonSubmit: 'Δημιουργία οργανισμού',
+      subtitle: undefined,
+      title: 'Δημιουργία Οργανισμού',
     },
     signOut: {
       actionLink: undefined,
       actionText: undefined,
     },
   },

Follow-up: createOrganization.subtitle and signOut.* are still missing in el-GR; please complete or confirm intended fallback.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: 'Δημιουργία οργανισμού',
action__invitationAccept: 'Συμμετοχή',
action__suggestionsAccept: 'Αίτηση συμμετοχής',
subtitle: 'για να συνεχίσετε στο {{applicationName}}',
suggestionsAcceptedLabel: 'Εκκρεμεί έγκριση',
title: 'Επιλέξτε οργανισμό',
},
createOrganization: {
formButtonReset: 'Παράλειψη',
formButtonSubmit: 'Δημιουργία οργανισμού',
subtitle: undefined,
title: 'Δημιουργία Οργανισμού',
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},

unstable__errors: {
already_a_member_in_organization: undefined,
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/en-GB.ts
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,26 @@ export const enGB: LocalizationResource = {
},
socialButtonsBlockButton: 'Continue with {{provider|titleize}}',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
Comment on lines +793 to +812
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Fill taskChooseOrganization with existing en-GB strings instead of leaving placeholders

The block shape is correct, but leaving these as undefined degrades UX for en-GB. You already have accurate, consistent strings in this file — let’s reuse them to ensure a complete English experience.

Apply this diff:

   taskChooseOrganization: {
     chooseOrganization: {
-      action__createOrganization: undefined,
-      action__invitationAccept: undefined,
-      action__suggestionsAccept: undefined,
-      subtitle: undefined,
-      suggestionsAcceptedLabel: undefined,
-      title: undefined,
+      action__createOrganization: 'Create organisation',
+      action__invitationAccept: 'Join',
+      action__suggestionsAccept: 'Request to join',
+      subtitle: 'to continue to {{applicationName}}',
+      suggestionsAcceptedLabel: 'Pending approval',
+      title: 'Choose an account',
     },
     createOrganization: {
-      formButtonReset: undefined,
-      formButtonSubmit: undefined,
-      subtitle: undefined,
-      title: undefined,
+      formButtonReset: 'Skip',
+      formButtonSubmit: 'Create organisation',
+      subtitle: undefined,
+      title: 'Create organisation',
     },
     signOut: {
       actionLink: undefined,
       actionText: undefined,
     },
   },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: 'Create organisation',
action__invitationAccept: 'Join',
action__suggestionsAccept: 'Request to join',
subtitle: 'to continue to {{applicationName}}',
suggestionsAcceptedLabel: 'Pending approval',
title: 'Choose an account',
},
createOrganization: {
formButtonReset: 'Skip',
formButtonSubmit: 'Create organisation',
subtitle: undefined,
title: 'Create organisation',
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
🤖 Prompt for AI Agents
In packages/localizations/src/en-GB.ts around lines 793 to 812, the
taskChooseOrganization block currently sets multiple values to undefined;
replace those undefined values with the existing en-GB strings already used
elsewhere in this file (reuse matching keys such as action__createOrganization,
action__invitationAccept, action__suggestionsAccept, subtitle,
suggestionsAcceptedLabel, title for chooseOrganization; formButtonReset,
formButtonSubmit, subtitle, title for createOrganization; and actionLink,
actionText for signOut) so the block contains the exact English strings used
elsewhere in en-GB rather than undefined placeholders, preserving
punctuation/capitalization and following surrounding style.

💡 Verification agent

🧩 Analysis chain

Add a sanity check to enforce taskChooseOrganization presence across locales

Consider adding a simple check that every locale includes the new group with all three subgroups. This prevents regressions as locales evolve.

Run this script to report locales missing the new group or its subgroups:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Find all locale files
mapfile -t FILES < <(fd -t f -e ts '^packages/localizations/src/')

missing_any=0

for f in "${FILES[@]}"; do
  has_root=$(rg -n "taskChooseOrganization\\s*:" "$f" || true)
  if [[ -z "$has_root" ]]; then
    echo "MISSING taskChooseOrganization in: $f"
    missing_any=1
    continue
  fi

  for subgroup in "chooseOrganization" "createOrganization" "signOut"; do
    if ! rg -U -n -P "taskChooseOrganization\\s*:\\s*\\{[\\s\\S]*?${subgroup}\\s*:" "$f" >/dev/null; then
      echo "MISSING subgroup '${subgroup}' in: $f"
      missing_any=1
    fi
  done
done

if [[ $missing_any -eq 0 ]]; then
  echo "All locales contain taskChooseOrganization with required subgroups."
fi

Length of output: 195


Let’s rerun the check using find instead of fd/mapfile to avoid the /dev/fd issue:


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

missing_any=0

# Iterate over every .ts locale file
while IFS= read -r -d '' f; do
  # Check for the root key
  if ! grep -q "taskChooseOrganization\s*:" "$f"; then
    echo "MISSING taskChooseOrganization in: $f"
    missing_any=1
    continue
  fi

  # Check each required subgroup
  for subgroup in "chooseOrganization" "createOrganization" "signOut"; do
    if ! grep -q "taskChooseOrganization.*${subgroup}" "$f"; then
      echo "MISSING subgroup '${subgroup}' in: $f"
      missing_any=1
    fi
  done
done < <(find packages/localizations/src -type f -name "*.ts" -print0)

if [[ $missing_any -eq 0 ]]; then
  echo "All locales contain taskChooseOrganization with required subgroups."
fi

Length of output: 209


Let’s avoid process-substitution and use a simple pipeline to ensure portability:


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

missing_any=0

find packages/localizations/src -type f -name "*.ts" | while IFS= read -r f; do
  # Check for the root key
  if ! grep -q "taskChooseOrganization\s*:" "$f"; then
    echo "MISSING taskChooseOrganization in: $f"
    missing_any=1
    continue
  fi

  # Check each required subgroup
  for subgroup in chooseOrganization createOrganization signOut; do
    if ! grep -q "taskChooseOrganization.*${subgroup}" "$f"; then
      echo "MISSING subgroup '${subgroup}' in: $f"
      missing_any=1
    fi
  done
done

if [[ $missing_any -eq 0 ]]; then
  echo "All locales contain taskChooseOrganization with required subgroups."
fi

Length of output: 54690


Add a CI sanity check for taskChooseOrganization in all locales

Enforce that every locale file defines taskChooseOrganization with all three sub‐keys (chooseOrganization, createOrganization, signOut) by adding a unit test in the localizations package. For example:

• Create packages/localizations/src/__tests__/locales.spec.ts

import fs from 'fs';
import path from 'path';

const LOCALE_DIR = path.resolve(__dirname, '../');
const REQUIRED_SUBGROUPS = ['chooseOrganization', 'createOrganization', 'signOut'];

describe('taskChooseOrganization keys in locale files', () => {
  const files = fs
    .readdirSync(LOCALE_DIR)
    .filter(f => f.endsWith('.ts') && f !== 'index.ts');

  for (const file of files) {
    test(file, () => {
      // eslint-disable-next-line @typescript-eslint/no-var-requires
      const locale = require(path.join(LOCALE_DIR, file)).default;
      expect(locale.taskChooseOrganization).toBeDefined();
      for (const key of REQUIRED_SUBGROUPS) {
        expect(locale.taskChooseOrganization[key]).toBeDefined();
      }
    });
  }
});

• Ensure your CI (e.g. GitHub Actions) runs npm test in packages/localizations
• This will fail the build if any locale is missing the group or a subgroup

🤖 Prompt for AI Agents
In packages/localizations/src/en-GB.ts around lines 793-812, add a CI sanity
unit test to validate that every locale file defines taskChooseOrganization with
the three required subgroups (chooseOrganization, createOrganization, signOut):
create packages/localizations/src/__tests__/locales.spec.ts which reads all .ts
locale files (excluding index.ts), requires each locale, and asserts
locale.taskChooseOrganization is defined and that each of the REQUIRED_SUBGROUPS
exists; then ensure the repo CI runs npm test for packages/localizations so the
test fails the build if any locale is missing the group or any subgroup.

unstable__errors: {
already_a_member_in_organization: '{{email}} is already a member of the organisation.',
captcha_invalid:
Expand Down
40 changes: 20 additions & 20 deletions packages/localizations/src/en-US.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,6 @@ import type { LocalizationResource } from '@clerk/types';

export const enUS: LocalizationResource = {
locale: 'en-US',
taskChooseOrganization: {
signOut: {
actionLink: 'Sign out',
actionText: 'Signed in as {{identifier}}',
},
createOrganization: {
title: 'Setup your account',
subtitle: 'Tell us a bit about your organization',
formButtonSubmit: 'Create new organization',
formButtonReset: 'Cancel',
},
chooseOrganization: {
title: 'Choose an organization',
subtitle: 'Join an existing organization or create a new one',
suggestionsAcceptedLabel: 'Pending approval',
action__createOrganization: 'Create new organization',
action__suggestionsAccept: 'Request to join',
action__invitationAccept: 'Join',
},
},
apiKeys: {
action__add: 'Add new key',
action__search: 'Search keys',
Expand Down Expand Up @@ -805,6 +785,26 @@ export const enUS: LocalizationResource = {
},
socialButtonsBlockButton: 'Continue with {{provider|titleize}}',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: 'Create new organization',
action__invitationAccept: 'Join',
action__suggestionsAccept: 'Request to join',
subtitle: 'Join an existing organization or create a new one',
suggestionsAcceptedLabel: 'Pending approval',
title: 'Choose an organization',
},
createOrganization: {
formButtonReset: 'Cancel',
formButtonSubmit: 'Create new organization',
subtitle: 'Tell us a bit about your organization',
title: 'Setup your account',
},
signOut: {
actionLink: 'Sign out',
actionText: 'Signed in as {{identifier}}',
},
},
unstable__errors: {
already_a_member_in_organization: '{{email}} is already a member of the organization.',
captcha_invalid: undefined,
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/es-CR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,26 @@ export const esCR: LocalizationResource = {
},
socialButtonsBlockButton: 'Continuar con {{provider|titleize}}',
socialButtonsBlockButtonManyInView: '{{provider|titleize}}',
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
unstable__errors: {
already_a_member_in_organization: '{{email}} ya es miembro de la organización.',
captcha_invalid:
Expand Down
20 changes: 20 additions & 0 deletions packages/localizations/src/es-ES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,26 @@ export const esES: LocalizationResource = {
},
socialButtonsBlockButton: 'Continuar con {{provider|titleize}}',
socialButtonsBlockButtonManyInView: undefined,
taskChooseOrganization: {
chooseOrganization: {
action__createOrganization: undefined,
action__invitationAccept: undefined,
action__suggestionsAccept: undefined,
subtitle: undefined,
suggestionsAcceptedLabel: undefined,
title: undefined,
},
createOrganization: {
formButtonReset: undefined,
formButtonSubmit: undefined,
subtitle: undefined,
title: undefined,
},
signOut: {
actionLink: undefined,
actionText: undefined,
},
},
Comment on lines +792 to +811
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Populate Spanish translations for taskChooseOrganization; currently all keys are undefined

The shape matches the expected subgroups, but every value is undefined. Please add Spanish translations (or confirm a short-term fallback plan) so UI strings don’t render empty or fall back inconsistently.

  • Cross-check keys against en-US to ensure nothing is missing.
  • Align tone with existing locale strings and ensure contextual accuracy.

Given no tests were added, please add a small test/assertion that all locales provide taskChooseOrganization with the expected keys.

I can help prefill using nearby organizationList strings where appropriate and create a test scaffold that validates presence of keys across locales. Want me to proceed?


🏁 Script executed:

#!/bin/bash
echo "----- ES-ES taskChooseOrganization -----"
rg -n "taskChooseOrganization" -A 15 packages/localizations/src/es-ES.ts

echo
echo "----- EN-US taskChooseOrganization -----"
rg -n "taskChooseOrganization" -A 15 packages/localizations/src/en-US.ts

Length of output: 1516


Populate Spanish Translations for taskChooseOrganization
The es-ES.ts file currently defines every key under taskChooseOrganization as undefined, causing blank UI strings. You should mirror the structure from en-US.ts and supply accurate Spanish text.

• File: packages/localizations/src/es-ES.ts (lines 792–811)
• Compare against en-US.ts (lines 788–803) to ensure all six keys in each subgroup are present:

  • chooseOrganization:
    • action__createOrganization
    • action__invitationAccept
    • action__suggestionsAccept
    • subtitle
    • suggestionsAcceptedLabel
    • title
  • createOrganization:
    • formButtonReset
    • formButtonSubmit
    • subtitle
    • title
  • signOut:
    • actionLink
    • actionText

Action Items:

  • Populate each of the above with proper Spanish translations, matching tone and context of nearby strings in es-ES.ts.
  • Add a unit test (or extend the existing localization test suite) to assert that all locales define the full taskChooseOrganization shape so future omissions are caught automatically.

unstable__errors: {
already_a_member_in_organization: '{{email}} ya es miembro de la organización.',
captcha_invalid:
Expand Down
Loading
Loading