From 8650ed1f81b9502806779ac851982d14c30eff2e Mon Sep 17 00:00:00 2001 From: Daniel Moerner Date: Fri, 14 Aug 2026 11:04:42 -0400 Subject: [PATCH 1/2] fix(ui): render a message for password errors the UI does not map We pushed a new password error from the backend with the intention that it would be passed through to our SDKs. However, password fields have special behavior that override the generic error builder and do not fallback to the apierror from the backend. Two layers to the fix: 1. Specific: handle `form_password_matches_identifier`, and add the `unstable__errors.form_password_matches_identifier` key with an en-US string mirroring the server copy. 2. General: filter to codes present in `mapComplexityErrors` and, when none remain, fall back to `longMessage || message`. This restores the passthrough for any future unrecognized code, and stops an unmapped code arriving alongside a mapped one from contributing a blank list item. Co-Authored-By: Claude Opus 5 (1M context) --- .changeset/great-pots-tickle.md | 7 +++ packages/localizations/src/en-US.ts | 2 + packages/shared/src/types/localization.ts | 1 + .../utils/__tests__/passwordUtils.test.tsx | 59 +++++++++++++++++++ packages/ui/src/utils/passwordUtils.ts | 15 ++++- 5 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 .changeset/great-pots-tickle.md diff --git a/.changeset/great-pots-tickle.md b/.changeset/great-pots-tickle.md new file mode 100644 index 00000000000..f55cc22976f --- /dev/null +++ b/.changeset/great-pots-tickle.md @@ -0,0 +1,7 @@ +--- +'@clerk/localizations': patch +'@clerk/shared': patch +'@clerk/ui': patch +--- + +Display a proper message when a password is rejected for matching one of the account's identifiers. Previously this error rendered as the incomplete sentence "Your password must contain ." on sign-up, reset password, and the user profile password form. The new message is available under the `unstable__errors.form_password_matches_identifier` localization key, and any password error the UI does not recognize now falls back to the message returned by the API instead of an empty sentence. diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index c8573e68e7b..aa0385251de 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -1787,6 +1787,8 @@ export const enUS: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Your password is too short. It must be at least 8 characters long.', + form_password_matches_identifier: + 'Password cannot match your email address, phone number or username. For account safety, please use a different password.', form_password_not_strong_enough: 'Your password is not strong enough.', form_password_or_identifier_incorrect: undefined, form_password_pwned: diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 1944631d919..26b9452fc15 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -2158,6 +2158,7 @@ type UnstableErrors = WithParamName<{ form_password_pwned: LocalizationValue; form_password_pwned__sign_in: LocalizationValue; form_new_password_matches_current: LocalizationValue; + form_password_matches_identifier: LocalizationValue; /** @deprecated Use `form_password_compromised__sign_in` instead */ form_password_untrusted__sign_in: LocalizationValue; form_password_compromised__sign_in: LocalizationValue; diff --git a/packages/ui/src/utils/__tests__/passwordUtils.test.tsx b/packages/ui/src/utils/__tests__/passwordUtils.test.tsx index 4b142e772c5..7c4904ee342 100644 --- a/packages/ui/src/utils/__tests__/passwordUtils.test.tsx +++ b/packages/ui/src/utils/__tests__/passwordUtils.test.tsx @@ -161,6 +161,65 @@ describe('createPasswordError() constructs error that password', () => { ); }); + it('matches one of the account identifiers', async () => { + const { wrapper: Wrapper } = await createFixtures(); + + const wrapperBefore = ({ children }) => ( + + {children} + + ); + + const { result } = renderHook(() => useLocalizations(), { wrapper: wrapperBefore }); + + const res = createPasswordError( + [{ code: 'form_password_matches_identifier', message: 'server message' }], + createLocalizationConfig(result.current.t), + ); + expect(res).toBe( + 'Password cannot match your email address, phone number or username. For account safety, please use a different password.', + ); + }); + + it('falls back to the server message for a code with no complexity mapping', async () => { + const { wrapper: Wrapper } = await createFixtures(); + + const wrapperBefore = ({ children }) => ( + + {children} + + ); + + const { result } = renderHook(() => useLocalizations(), { wrapper: wrapperBefore }); + + const res = createPasswordError( + [{ code: 'form_password_some_future_rule', message: 'Server explains the rule.' }], + createLocalizationConfig(result.current.t), + ); + expect(res).toBe('Server explains the rule.'); + }); + + it('ignores unmapped codes that accompany a mapped one', async () => { + const { wrapper: Wrapper } = await createFixtures(); + + const wrapperBefore = ({ children }) => ( + + {children} + + ); + + const { result } = renderHook(() => useLocalizations(), { wrapper: wrapperBefore }); + + const res = createPasswordError( + [ + { code: 'form_password_no_uppercase', message: '' }, + { code: 'form_password_some_future_rule', message: 'Server explains the rule.' }, + ], + createLocalizationConfig(result.current.t), + ); + expect(res).toBe('Your password must contain an uppercase letter.'); + }); + // // zxcvbn // diff --git a/packages/ui/src/utils/passwordUtils.ts b/packages/ui/src/utils/passwordUtils.ts index 9860a11d82c..7e50696d9f5 100644 --- a/packages/ui/src/utils/passwordUtils.ts +++ b/packages/ui/src/utils/passwordUtils.ts @@ -40,7 +40,8 @@ export const createPasswordError = (errors: ClerkAPIError[], localizationConfig: if ( errors?.[0]?.code === 'form_password_size_in_bytes_exceeded' || errors?.[0]?.code === 'form_password_pwned' || - errors?.[0]?.code === 'form_new_password_matches_current' + errors?.[0]?.code === 'form_new_password_matches_current' || + errors?.[0]?.code === 'form_password_matches_identifier' ) { return `${t(localizationKeys(`unstable__errors.${errors?.[0]?.code}` as any)) || errors?.[0]?.message}`; } @@ -58,8 +59,16 @@ export const createPasswordError = (errors: ClerkAPIError[], localizationConfig: // show min length error first by itself const minLenErrors = errors.filter(e => e.code === 'form_password_length_too_short'); - const message = (minLenErrors.length ? minLenErrors : errors).map((s: any) => { - const localizedKey = (mapComplexityErrors(passwordSettings) as any)[s.code]; + const complexityErrors = mapComplexityErrors(passwordSettings); + const knownErrors = (minLenErrors.length ? minLenErrors : errors).filter(e => e.code in complexityErrors); + + // an unmapped code would otherwise render the prefix with an empty list, eg "Your password must contain ." + if (!knownErrors.length) { + return errors?.[0]?.longMessage || errors?.[0]?.message || ''; + } + + const message = knownErrors.map((s: any) => { + const localizedKey = (complexityErrors as any)[s.code]; if (Array.isArray(localizedKey)) { const [lk, attr, val] = localizedKey; From c8cbf9b01c83526d3b94a22d86115065c4e8d1de Mon Sep 17 00:00:00 2001 From: Daniel Moerner Date: Fri, 14 Aug 2026 11:24:17 -0400 Subject: [PATCH 2/2] fix(ui): use an own-key check and regenerate localizations Address CI and review feedback on the password error fallback: - `e.code in complexityErrors` matched inherited properties, so a code named `toString` or `constructor` would skip the fallback and rebuild the broken sentence. Use `Object.hasOwn`. - Return the error itself rather than a pre-resolved string, so `setError` pipes it through `translateError` and a future unmapped code can still be localized by code before falling back to the API message. This matches `createUsernameError`. - Run `pnpm --filter @clerk/localizations generate` to add the new key to the other locale files, which the "Verify localizations are generated" CI step requires. Co-Authored-By: Claude Opus 5 (1M context) --- packages/localizations/src/ar-SA.ts | 1 + packages/localizations/src/be-BY.ts | 1 + packages/localizations/src/bg-BG.ts | 1 + packages/localizations/src/bn-IN.ts | 1 + packages/localizations/src/ca-ES.ts | 1 + packages/localizations/src/cs-CZ.ts | 1 + packages/localizations/src/da-DK.ts | 1 + packages/localizations/src/de-DE.ts | 1 + packages/localizations/src/el-GR.ts | 1 + packages/localizations/src/en-GB.ts | 1 + packages/localizations/src/es-CR.ts | 1 + packages/localizations/src/es-ES.ts | 1 + packages/localizations/src/es-MX.ts | 1 + packages/localizations/src/es-UY.ts | 1 + packages/localizations/src/fa-IR.ts | 1 + packages/localizations/src/fi-FI.ts | 1 + packages/localizations/src/fr-FR.ts | 1 + packages/localizations/src/he-IL.ts | 1 + packages/localizations/src/hi-IN.ts | 1 + packages/localizations/src/hr-HR.ts | 1 + packages/localizations/src/hu-HU.ts | 1 + packages/localizations/src/id-ID.ts | 1 + packages/localizations/src/is-IS.ts | 1 + packages/localizations/src/it-IT.ts | 1 + packages/localizations/src/ja-JP.ts | 1 + packages/localizations/src/kk-KZ.ts | 1 + packages/localizations/src/ko-KR.ts | 1 + packages/localizations/src/mn-MN.ts | 1 + packages/localizations/src/ms-MY.ts | 1 + packages/localizations/src/nb-NO.ts | 1 + packages/localizations/src/nl-BE.ts | 1 + packages/localizations/src/nl-NL.ts | 1 + packages/localizations/src/pl-PL.ts | 1 + packages/localizations/src/pt-BR.ts | 1 + packages/localizations/src/pt-PT.ts | 1 + packages/localizations/src/ro-RO.ts | 1 + packages/localizations/src/ru-RU.ts | 1 + packages/localizations/src/sk-SK.ts | 1 + packages/localizations/src/sr-RS.ts | 1 + packages/localizations/src/sv-SE.ts | 1 + packages/localizations/src/ta-IN.ts | 1 + packages/localizations/src/te-IN.ts | 1 + packages/localizations/src/th-TH.ts | 1 + packages/localizations/src/tr-TR.ts | 1 + packages/localizations/src/uk-UA.ts | 1 + packages/localizations/src/vi-VN.ts | 1 + packages/localizations/src/zh-CN.ts | 1 + packages/localizations/src/zh-TW.ts | 1 + .../ui/src/utils/__tests__/passwordUtils.test.tsx | 13 +++++++------ packages/ui/src/utils/passwordUtils.ts | 14 ++++++++++---- 50 files changed, 65 insertions(+), 10 deletions(-) diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index 87cf0abf4fe..1a0e9542bce 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -1746,6 +1746,7 @@ export const arSA: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: undefined, + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'كلمة المرور ليست قوية', form_password_or_identifier_incorrect: 'كلمة المرور أو عنوان البريد الإلكتروني غير صحيح. حاول مرة أخرى أو استخدم طريقة أخرى.', diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index ecb1c5a782e..87edd1c7956 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -1757,6 +1757,7 @@ export const beBY: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Невірны пароль.', form_password_length_too_short: 'Пароль занадта кароткі.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Ваш пароль недастаткова надзейны.', form_password_or_identifier_incorrect: 'Пароль або адрас электроннай пошты няправільны. Паспрабуйце яшчэ раз або выкарыстоўвайце іншы метад.', diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index c385d696659..d7c80b74640 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -1750,6 +1750,7 @@ export const bgBG: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Невалидна парола. Моля, опитайте отново.', form_password_length_too_short: 'Паролата е твърде кратка. Моля, въведете поне 8 символа.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Паролата трябва да съдържа поне една главна буква, една цифра и един специален символ.', form_password_or_identifier_incorrect: diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index a12cc09bac1..cdf78289cad 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -1769,6 +1769,7 @@ export const bnIN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'আপনি যে পাসওয়ার্ড লিখেছেন তা ভুল। দয়া করে আবার চেষ্টা করুন।', form_password_length_too_short: 'আপনার পাসওয়ার্ড খুব ছোট। এটি কমপক্ষে ৮ অক্ষর দীর্ঘ হতে হবে।', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'আপনার পাসওয়ার্ড যথেষ্ট শক্তিশালী নয়।', form_password_or_identifier_incorrect: 'পাসওয়ার্ড বা ইমেইল ঠিকানা ভুল। আবার চেষ্টা করুন বা অন্য পদ্ধতি ব্যবহার করুন।', diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 406c6708534..d761a145fb1 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -1760,6 +1760,7 @@ export const caES: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'La contrasenya introduïda és incorrecta.', form_password_length_too_short: 'La teva contrasenya ha de tenir almenys 8 caràcters.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'La teva contrasenya no és prou forta.', form_password_or_identifier_incorrect: "La contrasenya o l'identificador és incorrecte. Torna-ho a intentar o utilitza un altre mètode.", diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 28fb62154f6..3c3b8dc5443 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -1762,6 +1762,7 @@ export const csCZ: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Heslo je nesprávné.', form_password_length_too_short: 'Heslo je příliš krátké.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Vaše heslo není dostatečně silné.', form_password_or_identifier_incorrect: 'Heslo nebo e-mailová adresa je nesprávná. Zkuste to znovu nebo použijte jinou metodu.', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index fbb56087c08..92936019d80 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -1747,6 +1747,7 @@ export const daDK: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Adgangskoden er forkert.', form_password_length_too_short: 'Adgangskoden er for kort.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Adgangskoden er ikke stærk nok.', form_password_or_identifier_incorrect: 'Adgangskoden eller e-mailadressen er forkert. Prøv igen eller brug en anden metode.', diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 695f5af5267..07f932898cf 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -1770,6 +1770,7 @@ export const deDE: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Das eingegebene Passwort ist falsch.', form_password_length_too_short: 'Das Passwort ist zu kurz. Es muss mindestens 8 Zeichen lang sein.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Passwort nicht stark genug.', form_password_or_identifier_incorrect: 'Passwort oder E-Mail-Adresse ist falsch. Versuchen Sie es erneut oder verwenden Sie eine andere Methode.', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 0b1712866c6..02c1d49ec2e 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -1765,6 +1765,7 @@ export const elGR: LocalizationResource = { form_password_incorrect: 'Ο κωδικός πρόσβασης δεν είναι σωστός.', form_password_length_too_short: 'Ο κωδικός πρόσβασής σας πρέπει να αποτελείται από τουλάχιστον {{length}} χαρακτήρες.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Ο κωδικός πρόσβασής σας δεν είναι αρκετά ισχυρός.', form_password_or_identifier_incorrect: 'Ο κωδικός πρόσβασης ή η διεύθυνση email είναι λανθασμένη. Δοκιμάστε ξανά ή χρησιμοποιήστε άλλη μέθοδο.', diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index b5c7c547230..33071fdb142 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -1751,6 +1751,7 @@ export const enGB: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'The password you entered is incorrect. Please try again.', form_password_length_too_short: 'Your password is too short. It must be at least 8 characters long.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Your password is not strong enough.', form_password_or_identifier_incorrect: 'Password or email address is incorrect. Try again, or use another method.', form_password_pwned: diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index e8b906f6ba6..baeb439a0ac 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -1759,6 +1759,7 @@ export const esCR: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Contraseña incorrecta.', form_password_length_too_short: 'La contraseña es muy corta.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'La contraseña no es suficientemente segura.', form_password_or_identifier_incorrect: 'La contraseña o la dirección de correo electrónico es incorrecta. Inténtalo de nuevo o usa otro método.', diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 20840f8ddc6..e4ecf17e7ee 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -1761,6 +1761,7 @@ export const esES: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Contraseña incorrecta.', form_password_length_too_short: 'La contraseña es demasiado corta.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Tu contraseña no es lo suficientemente fuerte.', form_password_or_identifier_incorrect: 'La contraseña o la dirección de correo electrónico es incorrecta. Inténtalo de nuevo o usa otro método.', diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 22d7f3ff9a6..09d0fc1e04e 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -1760,6 +1760,7 @@ export const esMX: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Contraseña incorrecta.', form_password_length_too_short: 'La contraseña es muy corta.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'La contraseña no es suficientemente segura.', form_password_or_identifier_incorrect: 'La contraseña o la dirección de correo electrónico es incorrecta. Inténtalo de nuevo o usa otro método.', diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index fb43c476ae2..6a799bdf3c5 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -1759,6 +1759,7 @@ export const esUY: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'La contraseña ingresada es incorrecta. Por favor, intentá de nuevo.', form_password_length_too_short: 'Tu contraseña es demasiado corta. Debe tener al menos 8 caracteres.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Tu contraseña no es lo suficientemente fuerte.', form_password_or_identifier_incorrect: 'La contraseña o la dirección de correo electrónico es incorrecta. Intentá de nuevo o usá otro método.', diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 15e8fc49a0c..86beba5c4c9 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -1761,6 +1761,7 @@ export const faIR: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'رمز عبور نادرست است.', form_password_length_too_short: 'رمز عبور شما خیلی کوتاه است. باید حداقل ۸ کاراکتر داشته باشد.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'رمز عبور شما به اندازه کافی قوی نیست.', form_password_or_identifier_incorrect: 'رمز عبور یا آدرس ایمیل نادرست است. دوباره تلاش کنید یا از روش دیگری استفاده کنید.', diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 017d408d24b..b1a1b5094d2 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -1771,6 +1771,7 @@ export const fiFI: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Salasanasi on liian lyhyt. Sen on oltava vähintään 8 merkkiä pitkä.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Salasana ei ole riittävän vahva.', form_password_or_identifier_incorrect: 'Salasana tai sähköpostiosoite on väärä. Yritä uudelleen tai käytä toista menetelmää.', diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 27691be75a3..583b57611f8 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -1769,6 +1769,7 @@ export const frFR: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Mot de passe incorrect', form_password_length_too_short: 'Votre mot de passe est trop court.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: "Votre mot de passe n'est pas assez fort.", form_password_or_identifier_incorrect: "Le mot de passe ou l'adresse e-mail est incorrect. Réessayez ou utilisez une autre méthode.", diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 9ec0f0ee6a4..ae7a88af420 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -1738,6 +1738,7 @@ export const heIL: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: undefined, + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'הסיסמה שלך אינה מספיק חזקה.', form_password_or_identifier_incorrect: 'הסיסמה או כתובת האימייל שגויים. נסה שוב או השתמש בשיטה אחרת.', form_password_pwned: 'הסיסמה הזו נמצאה כחלק מהפרטים שנחשפו בהפרת נתונים ולא ניתן להשתמש בה, נסה סיסמה אחרת במקום.', diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 895d43dd318..9d04a365a23 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -1768,6 +1768,7 @@ export const hiIN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'आपके द्वारा दर्ज किया गया पासवर्ड गलत है। कृपया पुनः प्रयास करें।', form_password_length_too_short: 'आपका पासवर्ड बहुत छोटा है। इसमें कम से कम 8 अक्षर होने चाहिए।', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'आपका पासवर्ड पर्याप्त मजबूत नहीं है।', form_password_or_identifier_incorrect: 'पासवर्ड या ईमेल पता गलत है। कृपया पुनः प्रयास करें या किसी अन्य विधि का उपयोग करें।', diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index cb41987a223..34b0d179df7 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -1774,6 +1774,7 @@ export const hrHR: LocalizationResource = { 'Ova lozinka je pronađena kao dio curenja podataka i ne može se koristiti. Molimo resetirajte svoju lozinku.', form_password_incorrect: 'Netočna lozinka. Pokušajte ponovno.', form_password_length_too_short: 'Vaša lozinka je prekratka. Mora sadržavati najmanje 8 znakova.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Vaša lozinka nije dovoljno jaka.', form_password_or_identifier_incorrect: 'Lozinka ili e-mail adresa nisu točne. Pokušajte ponovno ili koristite drugu metodu.', diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 4b878cacc0a..56540481844 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -1774,6 +1774,7 @@ export const huHU: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'A jelszavad túl rövid. Legalább 8 karakter hosszúnak kell lennie.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'A jelszó nem elég erős', form_password_or_identifier_incorrect: 'A jelszó vagy az e-mail cím helytelen. Próbáld újra vagy használj másik módszert.', diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 43870d7df68..a66d1a4b145 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -1757,6 +1757,7 @@ export const idID: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: undefined, + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Kata sandi Anda tidak cukup kuat.', form_password_or_identifier_incorrect: 'Kata sandi atau alamat email salah. Coba lagi atau gunakan metode lain.', form_password_pwned: diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index d67fb9a6344..1fc6b0994ea 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -1773,6 +1773,7 @@ export const isIS: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Lykilorðið þitt er of stutt. Það verður að vera að minnsta kosti 8 stafir.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Lykilorðið þitt er ekki nógu sterkt.', form_password_or_identifier_incorrect: 'Lykilorðið eða netfangið er rangt. Reyndu aftur eða notaðu aðra aðferð.', form_password_pwned: diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index ddd1dac4d91..4c20d26e3c1 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -1759,6 +1759,7 @@ export const itIT: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Password errata.', form_password_length_too_short: 'La password deve avere almeno 8 caratteri.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'La tua password non è abbastanza forte.', form_password_or_identifier_incorrect: "La password o l'indirizzo email è errato. Riprova o usa un altro metodo.", form_password_pwned: 'Questa password è stata trovata in una violazione dei dati. Scegli una password diversa.', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 4cd2e72fb1f..81068f420aa 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -1769,6 +1769,7 @@ export const jaJP: LocalizationResource = { 'このパスワードは侵害された可能性があります。アカウントを保護するため、別のサインイン方法を使用してください。サインイン後にパスワードのリセットが必要になります。', form_password_incorrect: '入力されたパスワードが正しくありません。もう一度お試しください。', form_password_length_too_short: 'パスワードが短すぎます。8文字以上である必要があります。', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'パスワードの強度が不十分です。', form_password_or_identifier_incorrect: 'パスワードまたはメールアドレスが正しくありません。もう一度お試しいただくか、別の方法をご利用ください。', diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 64c74a3deaa..ba47ffd33de 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -1740,6 +1740,7 @@ export const kkKZ: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Құпия сөз қате.', form_password_length_too_short: 'Құпия сөз тым қысқа. Кемінде 8 таңба болуы керек.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Құпия сөз әлсіз.', form_password_or_identifier_incorrect: 'Құпия сөз немесе электрондық пошта мекенжайы дұрыс емес. Қайталап көріңіз немесе басқа әдісті пайдаланыңыз.', diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 09b3d6d3f2e..6fc94c87f5f 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -1745,6 +1745,7 @@ export const koKR: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: '비밀번호가 너무 짧아요. 최소 8자 이상이어야 해요.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: '비밀번호가 충분히 안전하지 않아요.', form_password_or_identifier_incorrect: '비밀번호 또는 이메일 주소가 올바르지 않아요. 다시 시도하거나 다른 방법을 사용해 보세요.', diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 0679505fd7d..ad8fcf996f1 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -1751,6 +1751,7 @@ export const mnMN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Нууц үг буруу байна.', form_password_length_too_short: 'Нууц үгийн урт хэт богино байна.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Таны нууц үг хангалттай хүчтэй биш байна.', form_password_or_identifier_incorrect: 'Нууц үг эсвэл имэйл хаяг буруу байна. Дахин оролдох эсвэл өөр арга ашиглана уу.', diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 72352cf9fdd..092c1db2245 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -1776,6 +1776,7 @@ export const msMY: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Kata laluan yang anda masukkan tidak betul. Sila cuba lagi.', form_password_length_too_short: 'Kata laluan anda terlalu pendek. Ia mesti sekurang-kurangnya 8 aksara panjang.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Kata laluan anda tidak cukup kuat.', form_password_or_identifier_incorrect: 'Kata laluan atau alamat e-mel tidak betul. Cuba lagi atau gunakan kaedah lain.', diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 6e8e999d89e..475ca454fd7 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -1772,6 +1772,7 @@ export const nbNO: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Passordet ditt er for kort. Det må være minst 8 tegn langt.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Passordet ditt er ikke sterkt nok.', form_password_or_identifier_incorrect: 'Passordet eller e-postadressen er feil. Prøv igjen eller bruk en annen metode.', diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index f1010c86951..1f2f19eacea 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -1751,6 +1751,7 @@ export const nlBE: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Het wachtwoord is incorrect.', form_password_length_too_short: 'Het wachtwoord is te kort.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Je wachtwoord is niet sterk genoeg.', form_password_or_identifier_incorrect: 'Het wachtwoord of het e-mailadres is onjuist. Probeer het opnieuw of gebruik een andere methode.', diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 8bb9f45ddd5..00c4e01265b 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -1751,6 +1751,7 @@ export const nlNL: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Het wachtwoord is incorrect.', form_password_length_too_short: 'Het wachtwoord is te kort.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Je wachtwoord is niet sterk genoeg.', form_password_or_identifier_incorrect: 'Het wachtwoord of het e-mailadres is onjuist. Probeer het opnieuw of gebruik een andere methode.', diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 7550b527541..9a0741b215a 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -1755,6 +1755,7 @@ export const plPL: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Wprowadzone hasło jest nieprawidłowe. Spróbuj ponownie.', form_password_length_too_short: 'Twoje hasło jest zbyt krótkie. Musi mieć co najmniej 8 znaków.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Twoje hasło nie jest wystarczająco silne', form_password_or_identifier_incorrect: 'Hasło lub adres e-mail jest nieprawidłowy. Spróbuj ponownie lub użyj innej metody.', diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 970f33f6e3f..9ae09c0eabd 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -1765,6 +1765,7 @@ export const ptBR: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Senha incorreta.', form_password_length_too_short: 'Sua senha é muito curta. Por favor, tente novamente.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Sua senha não é forte o suficiente.', form_password_or_identifier_incorrect: 'A senha ou o endereço de e-mail está incorreto. Tente novamente ou use outro método.', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 67a721abb5f..8e370687ade 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -1771,6 +1771,7 @@ export const ptPT: LocalizationResource = { 'Esta palavra-passe foi comprometida numa violação de dados. Escolha outra para continuar.', form_password_incorrect: 'Palavra-passe incorreta.', form_password_length_too_short: 'A palavra-passe é muito curta.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'A sua palavra-passe não é forte o suficiente.', form_password_or_identifier_incorrect: 'A palavra-passe ou o endereço de e-mail está incorreto. Tente novamente ou utilize outro método.', diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index a408fd960a0..f8cccc3e9f8 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -1766,6 +1766,7 @@ export const roRO: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Parola este prea scurtă. Trebuie să aibă cel puțin 8 caractere.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Parola ta nu este suficient de puternică.', form_password_or_identifier_incorrect: 'Parola sau adresa de e-mail este incorectă. Încearcă din nou sau folosește o altă metodă.', diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 78b56dd203e..32b4035047c 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -1764,6 +1764,7 @@ export const ruRU: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: undefined, + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Ваш пароль недостаточно надежный.', form_password_or_identifier_incorrect: 'Пароль или адрес электронной почты неверен. Попробуйте снова или используйте другой метод.', diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index a3011d7d1ef..dc36b79e866 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -1756,6 +1756,7 @@ export const skSK: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Heslo je nesprávne. Skontrolujte a skúste to znova.', form_password_length_too_short: 'Heslo musí mať aspoň 8 znakov.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Vaše heslo nie je dostatočne silné.', form_password_or_identifier_incorrect: 'Heslo alebo e-mailová adresa je nesprávna. Skúste to znova alebo použite inú metódu.', diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 9d70bf85920..157efee229b 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -1748,6 +1748,7 @@ export const srRS: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Lozinka je netačna.', form_password_length_too_short: 'Lozinka je prekratka.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Tvoja lozinka nije dovoljno jaka.', form_password_or_identifier_incorrect: 'Лозинка или адреса е-поште је нетачна. Покушај поново или користи други метод.', diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 0a4ccda617c..747357f7ef7 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -1753,6 +1753,7 @@ export const svSE: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Lösenordet är felaktigt.', form_password_length_too_short: 'Lösenordet är för kort.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Ditt lösenord är inte tillräckligt starkt.', form_password_or_identifier_incorrect: 'Lösenordet eller e-postadressen är felaktig. Försök igen eller använd en annan metod.', diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 9e6ba45ddfc..58024742b32 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -1776,6 +1776,7 @@ export const taIN: LocalizationResource = { form_password_incorrect: 'நீங்கள் உள்ளிட்ட கடவுச்சொல் தவறானது. மீண்டும் முயற்சிக்கவும்.', form_password_length_too_short: 'உங்கள் கடவுச்சொல் மிகவும் குறுகியது. இது குறைந்தது 8 எழுத்துகள் நீளமாக இருக்க வேண்டும்.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'உங்கள் கடவுச்சொல் போதுமான வலிமை இல்லை.', form_password_or_identifier_incorrect: 'கடவுச்சொல் அல்லது மின்னஞ்சல் முகவரி தவறானது. மீண்டும் முயற்சிக்கவும் அல்லது வேறு முறையைப் பயன்படுத்தவும்.', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index fdfeb14677a..1dcefe67386 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -1773,6 +1773,7 @@ export const teIN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'మీరు నమోదు చేసిన పాస్‌వర్డ్ తప్పు. దయచేసి మళ్ళీ ప్రయత్నించండి.', form_password_length_too_short: 'మీ పాస్‌వర్డ్ చాలా చిన్నది. ఇది కనీసం 8 అక్షరాల పొడవు ఉండాలి.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'మీ పాస్‌వర్డ్ సరిపడా బలంగా లేదు.', form_password_or_identifier_incorrect: 'పాస్‌వర్డ్ లేదా ఇమెయిల్ చిరునామా తప్పు. దయచేసి మళ్ళీ ప్రయత్నించండి లేదా మరొక పద్ధతిని ఉపయోగించండి.', diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 63d7880db15..e67007a7c1e 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -1748,6 +1748,7 @@ export const thTH: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'รหัสผ่านของคุณสั้นเกินไป ต้องมีความยาวอย่างน้อย 8 ตัวอักษร', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'รหัสผ่านของคุณไม่แข็งแกร่งพอ', form_password_or_identifier_incorrect: 'รหัสผ่านหรือที่อยู่อีเมลไม่ถูกต้อง ลองอีกครั้งหรือใช้วิธีอื่น', form_password_pwned: diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index d6635dc546e..b95612c1e19 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -1752,6 +1752,7 @@ export const trTR: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: 'Şifre yanlış.', form_password_length_too_short: 'Şifre çok kısa.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Şifreniz yeterince güçlü değil.', form_password_or_identifier_incorrect: 'Şifre veya e-posta adresi yanlış. Tekrar deneyin veya başka bir yöntem kullanın.', diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 20aad290637..3f982bc72b8 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -1748,6 +1748,7 @@ export const ukUA: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: undefined, + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Ваш пароль недостатньо надійний.', form_password_or_identifier_incorrect: 'Пароль або адреса електронної пошти невірні. Спробуйте ще раз або використайте інший метод.', diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 6d6cab7d74c..d848ef3838f 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -1767,6 +1767,7 @@ export const viVN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: 'Mật khẩu của bạn quá ngắn. Nó phải có ít nhất 8 ký tự.', + form_password_matches_identifier: undefined, form_password_not_strong_enough: 'Mật khẩu của bạn không đủ mạnh.', form_password_or_identifier_incorrect: 'Mật khẩu hoặc địa chỉ email không đúng. Vui lòng thử lại hoặc sử dụng phương thức khác.', diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 7ef502e7a97..dfbf68c8f6b 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -1733,6 +1733,7 @@ export const zhCN: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: undefined, + form_password_matches_identifier: undefined, form_password_not_strong_enough: '您的密码强度不够。', form_password_or_identifier_incorrect: '密码或电子邮件地址不正确。请重试或使用其他方法。', form_password_pwned: '这个密码在数据泄露中被发现,不能使用,请换一个密码试试。', diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 39803eed0ae..6ca3ead8138 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -1737,6 +1737,7 @@ export const zhTW: LocalizationResource = { form_password_compromised__sign_in: undefined, form_password_incorrect: undefined, form_password_length_too_short: '您的密碼太短。長度必須至少為 8 個字元。', + form_password_matches_identifier: undefined, form_password_not_strong_enough: '您的密碼強度不足。', form_password_or_identifier_incorrect: '密碼或電子郵件地址不正確。請重試或使用其他方法。', form_password_pwned: '此密碼已在已知的資料外洩事件中出現,請改用其他密碼。', diff --git a/packages/ui/src/utils/__tests__/passwordUtils.test.tsx b/packages/ui/src/utils/__tests__/passwordUtils.test.tsx index 7c4904ee342..d1e596d93ac 100644 --- a/packages/ui/src/utils/__tests__/passwordUtils.test.tsx +++ b/packages/ui/src/utils/__tests__/passwordUtils.test.tsx @@ -181,7 +181,7 @@ describe('createPasswordError() constructs error that password', () => { ); }); - it('falls back to the server message for a code with no complexity mapping', async () => { + it('returns the error itself for a code with no complexity mapping, so translateError handles it', async () => { const { wrapper: Wrapper } = await createFixtures(); const wrapperBefore = ({ children }) => ( @@ -192,11 +192,12 @@ describe('createPasswordError() constructs error that password', () => { const { result } = renderHook(() => useLocalizations(), { wrapper: wrapperBefore }); - const res = createPasswordError( - [{ code: 'form_password_some_future_rule', message: 'Server explains the rule.' }], - createLocalizationConfig(result.current.t), - ); - expect(res).toBe('Server explains the rule.'); + const error = { code: 'form_password_some_future_rule', message: 'Server explains the rule.' }; + const res = createPasswordError([error], createLocalizationConfig(result.current.t)); + + expect(res).toBe(error); + // setError() pipes the result through translateError, which falls back to the API message + expect(result.current.translateError(res)).toBe('Server explains the rule.'); }); it('ignores unmapped codes that accompany a mapped one', async () => { diff --git a/packages/ui/src/utils/passwordUtils.ts b/packages/ui/src/utils/passwordUtils.ts index 7e50696d9f5..55447f7937d 100644 --- a/packages/ui/src/utils/passwordUtils.ts +++ b/packages/ui/src/utils/passwordUtils.ts @@ -30,7 +30,10 @@ type LocalizationConfigProps = { passwordSettings: Pick; }; -export const createPasswordError = (errors: ClerkAPIError[], localizationConfig: LocalizationConfigProps) => { +export const createPasswordError = ( + errors: ClerkAPIError[], + localizationConfig: LocalizationConfigProps, +): ClerkAPIError | string | undefined => { if (!localizationConfig) { return errors[0].longMessage; } @@ -60,11 +63,14 @@ export const createPasswordError = (errors: ClerkAPIError[], localizationConfig: const minLenErrors = errors.filter(e => e.code === 'form_password_length_too_short'); const complexityErrors = mapComplexityErrors(passwordSettings); - const knownErrors = (minLenErrors.length ? minLenErrors : errors).filter(e => e.code in complexityErrors); + const knownErrors = (minLenErrors.length ? minLenErrors : errors).filter(e => + Object.hasOwn(complexityErrors, e.code), + ); - // an unmapped code would otherwise render the prefix with an empty list, eg "Your password must contain ." + // returning the error lets translateError localize by code before falling back to the API message; + // building the sentence here would render the prefix with an empty list, eg "Your password must contain ." if (!knownErrors.length) { - return errors?.[0]?.longMessage || errors?.[0]?.message || ''; + return errors?.[0]; } const message = knownErrors.map((s: any) => {