feat: distinct error for unverified email login (#11647)
<!-- Thank you for the PR! Please go through the checklist below and make sure you've completed all the steps. Please review the [CONTRIBUTING.md](https://github.com/payloadcms/payload/blob/main/CONTRIBUTING.md) document in this repository if you haven't already. The following items will ensure that your PR is handled as smoothly as possible: - PR Title must follow conventional commits format. For example, `feat: my new feature`, `fix(plugin-seo): my fix`. - Minimal description explained as if explained to someone not immediately familiar with the code. - Provide before/after screenshots or code diffs if applicable. - Link any related issues/discussions from GitHub or Discord. - Add review comments if necessary to explain to the reviewer the logic behind a change ### What? ### Why? ### How? Fixes # --> ### What? This PR adds a new error to be thrown when logging in while having `verify: true` set but no email has been verified for the user yet. ### Why? To have a more descriptive, actionable error thrown in this case as opposed to the generic "Invalid email or password." This gives users more insight into why the login failed. ### How? Introducing a new error: `UnverifiedEmail` and adjusting the check to be separate from `if (!user) { ... }`. Fixes #11358 Notes: - In terms of account enumeration: this should not be a concern here as the check for throwing this error comes _after_ the check for valid args as well as the find for the user. This means that credentials must be on hand, both an email and password, before seeing this error. - I have an int test written in `/test/auth/int.spec.ts` for this, however whenever I try to commit it I get an error stating that the `eslint@9.14.0` module was not found during `lint-staged`. <details> <summary>Int test</summary> ```ts it('should respond with unverifiedEmail if email is unverified on login', async () => { await payload.create({ collection: publicUsersSlug, data: { email: 'user@example.com', password: 'test', }, }) const response = await restClient.POST(`/${publicUsersSlug}/login`, { body: JSON.stringify({ email: 'user@example.com', password: 'test', }), }) expect(response.status).toBe(403) const responseData = await response.json() expect(responseData.errors[0].message).toBe('Please verify your email before logging in.') }) ``` </details> Demo of toast: 
This commit is contained in:
@@ -9,7 +9,12 @@ import type { PayloadRequest, Where } from '../../types/index.js'
|
||||
import type { User } from '../types.js'
|
||||
|
||||
import { buildAfterOperation } from '../../collections/operations/utils.js'
|
||||
import { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js'
|
||||
import {
|
||||
AuthenticationError,
|
||||
LockedAuth,
|
||||
UnverifiedEmail,
|
||||
ValidationError,
|
||||
} from '../../errors/index.js'
|
||||
import { afterRead } from '../../fields/hooks/afterRead/index.js'
|
||||
import { Forbidden } from '../../index.js'
|
||||
import { killTransaction } from '../../utilities/killTransaction.js'
|
||||
@@ -179,10 +184,14 @@ export const loginOperation = async <TSlug extends CollectionSlug>(
|
||||
where: whereConstraint,
|
||||
})
|
||||
|
||||
if (!user || (args.collection.config.auth.verify && user._verified === false)) {
|
||||
if (!user) {
|
||||
throw new AuthenticationError(req.t, Boolean(canLoginWithUsername && sanitizedUsername))
|
||||
}
|
||||
|
||||
if (args.collection.config.auth.verify && user._verified === false) {
|
||||
throw new UnverifiedEmail({ t: req.t })
|
||||
}
|
||||
|
||||
user.collection = collectionConfig.slug
|
||||
user._strategy = 'local-jwt'
|
||||
|
||||
|
||||
15
packages/payload/src/errors/UnverifiedEmail.ts
Normal file
15
packages/payload/src/errors/UnverifiedEmail.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import type { TFunction } from '@payloadcms/translations'
|
||||
|
||||
import { en } from '@payloadcms/translations/languages/en'
|
||||
import { status as httpStatus } from 'http-status'
|
||||
|
||||
import { APIError } from './APIError.js'
|
||||
|
||||
export class UnverifiedEmail extends APIError {
|
||||
constructor({ t }: { t?: TFunction }) {
|
||||
super(
|
||||
t ? t('error:unverifiedEmail') : en.translations.error.unverifiedEmail,
|
||||
httpStatus.FORBIDDEN,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -20,5 +20,6 @@ export { MissingFile } from './MissingFile.js'
|
||||
export { NotFound } from './NotFound.js'
|
||||
export { QueryError } from './QueryError.js'
|
||||
export { ReservedFieldName } from './ReservedFieldName.js'
|
||||
export { UnverifiedEmail } from './UnverifiedEmail.js'
|
||||
export { ValidationError, ValidationErrorName } from './ValidationError.js'
|
||||
export type { ValidationFieldError } from './ValidationError.js'
|
||||
|
||||
@@ -15,4 +15,5 @@ export type ErrorName =
|
||||
| 'MissingFile'
|
||||
| 'NotFound'
|
||||
| 'QueryError'
|
||||
| 'UnverifiedEmail'
|
||||
| 'ValidationError'
|
||||
|
||||
@@ -81,6 +81,7 @@ export const clientTranslationKeys = createClientTranslationKeys([
|
||||
'error:unauthorizedAdmin',
|
||||
'error:unknown',
|
||||
'error:unspecific',
|
||||
'error:unverifiedEmail',
|
||||
'error:userEmailAlreadyRegistered',
|
||||
'error:usernameAlreadyRegistered',
|
||||
'error:tokenNotProvided',
|
||||
|
||||
@@ -119,6 +119,7 @@ export const arTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'حدث خطأ غير معروف.',
|
||||
unPublishingDocument: 'حدث خطأ أثناء إلغاء نشر هذا المستند.',
|
||||
unspecific: 'حدث خطأ.',
|
||||
unverifiedEmail: 'يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.',
|
||||
userEmailAlreadyRegistered: 'يوجد مستخدم مسجل بالفعل بهذا البريد الإلكتروني.',
|
||||
userLocked: 'تمّ قفل هذا المستخدم نظرًا لوجود عدد كبير من محاولات تسجيل الدّخول الغير ناجحة.',
|
||||
usernameAlreadyRegistered: 'المستخدم بالاسم المعطى مسجل بالفعل.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const azTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Naməlum bir xəta baş verdi.',
|
||||
unPublishingDocument: 'Bu sənədin nəşrini ləğv etmək zamanı problem baş verdi.',
|
||||
unspecific: 'Xəta baş verdi.',
|
||||
unverifiedEmail: 'Zəhmət olmasa, daxil olmadan əvvəl e-poçtunuzu təsdiqləyin.',
|
||||
userEmailAlreadyRegistered: 'Verilən e-poçt ünvanı ilə artıq istifadəçi qeydiyyatdan keçib.',
|
||||
userLocked: 'Bu istifadəçi çoxsaylı uğursuz giriş cəhdləri səbəbindən kilidlənib.',
|
||||
usernameAlreadyRegistered: 'Verilən istifadəçi adı ilə artıq qeydiyyatdan keçmişdir.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const bgTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Неизвестна грешка.',
|
||||
unPublishingDocument: 'Имаше проблем при скриването на този документ.',
|
||||
unspecific: 'Грешка.',
|
||||
unverifiedEmail: 'Моля, потвърдете своя имейл, преди да влезете.',
|
||||
userEmailAlreadyRegistered: 'Потребител с дадения имейл вече е регистриран.',
|
||||
userLocked: 'Този потребител има прекалено много невалидни опити за влизане и е заключен.',
|
||||
usernameAlreadyRegistered: 'Потребител със зададеното потребителско име вече е регистриран.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const caTranslations: DefaultTranslationsObject = {
|
||||
unknown: "S'ha produït un error desconegut.",
|
||||
unPublishingDocument: 'Hi ha hagut un problema mentre es despublicava aquest document.',
|
||||
unspecific: "S'ha produït un error.",
|
||||
unverifiedEmail: 'Si us plau, verifica el teu correu electrònic abans d’iniciar sessió.',
|
||||
userEmailAlreadyRegistered: 'Ja hi ha un usuari registrat amb aquest correu electrònic.',
|
||||
userLocked: "Aquest usuari està bloquejat per massa intents fallits d'inici de sessió.",
|
||||
usernameAlreadyRegistered: "Ja hi ha un usuari registrat amb aquest nom d'usuari.",
|
||||
|
||||
@@ -120,6 +120,7 @@ export const csTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Došlo k neznámé chybě.',
|
||||
unPublishingDocument: 'Při zrušení publikování tohoto dokumentu došlo k chybě.',
|
||||
unspecific: 'Došlo k chybě.',
|
||||
unverifiedEmail: 'Před přihlášením ověřte svůj e-mail.',
|
||||
userEmailAlreadyRegistered: 'Uživatel s daným e-mailem je již zaregistrován.',
|
||||
userLocked: 'Tento uživatel je uzamčen kvůli příliš mnoha neúspěšným pokusům o přihlášení.',
|
||||
usernameAlreadyRegistered: 'Uživatel se zadaným uživatelským jménem je již zaregistrován.',
|
||||
|
||||
@@ -119,6 +119,7 @@ export const daTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'En ukendt fejl er opstået.',
|
||||
unPublishingDocument: 'Der opstod et problem med at ophæve udgivelsen af dette dokument.',
|
||||
unspecific: 'En fejl er opstået.',
|
||||
unverifiedEmail: 'Bekræft venligst din e-mail, før du logger ind.',
|
||||
userEmailAlreadyRegistered: 'Email allerede registreret.',
|
||||
userLocked: 'Denne bruger er låst på grund af for mange fejlede loginforsøg',
|
||||
usernameAlreadyRegistered: 'Brugernavn allerede registeret.',
|
||||
|
||||
@@ -122,6 +122,7 @@ export const deTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Ein unbekannter Fehler ist aufgetreten.',
|
||||
unPublishingDocument: 'Es gab ein Problem, dieses Dokument auf Entwurf zu setzen.',
|
||||
unspecific: 'Ein Fehler ist aufgetreten.',
|
||||
unverifiedEmail: 'Bitte verifizieren Sie Ihre E-Mail, bevor Sie sich anmelden.',
|
||||
userEmailAlreadyRegistered: 'Ein Benutzer mit der angegebenen E-Mail ist bereits registriert.',
|
||||
userLocked:
|
||||
'Dieser Benutzer ist auf Grund zu vieler unerfolgreicher Anmelde-Versuche gesperrt.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const enTranslations = {
|
||||
unknown: 'An unknown error has occurred.',
|
||||
unPublishingDocument: 'There was a problem while un-publishing this document.',
|
||||
unspecific: 'An error has occurred.',
|
||||
unverifiedEmail: 'Please verify your email before logging in.',
|
||||
userEmailAlreadyRegistered: 'A user with the given email is already registered.',
|
||||
userLocked: 'This user is locked due to having too many failed login attempts.',
|
||||
usernameAlreadyRegistered: 'A user with the given username is already registered.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const esTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Ocurrió un error desconocido.',
|
||||
unPublishingDocument: 'Ocurrió un error al despublicar este documento.',
|
||||
unspecific: 'Ocurrió un error.',
|
||||
unverifiedEmail: 'Por favor, verifica tu correo electrónico antes de iniciar sesión.',
|
||||
userEmailAlreadyRegistered:
|
||||
'Ya hay un usuario registrado con el correo electrónico proporcionado.',
|
||||
userLocked:
|
||||
|
||||
@@ -119,6 +119,7 @@ export const etTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Tekkis tundmatu viga.',
|
||||
unPublishingDocument: 'Selle dokumendi avaldamise tühistamisel tekkis probleem.',
|
||||
unspecific: 'Tekkis viga.',
|
||||
unverifiedEmail: 'Palun kinnitage oma e-posti aadress enne sisselogimist.',
|
||||
userEmailAlreadyRegistered: 'Selle e-posti aadressiga kasutaja on juba registreeritud.',
|
||||
userLocked: 'See kasutaja on lukustatud liiga paljude ebaõnnestunud sisselogimiskatsete tõttu.',
|
||||
usernameAlreadyRegistered: 'Selle kasutajanimega kasutaja on juba registreeritud.',
|
||||
|
||||
@@ -118,6 +118,7 @@ export const faTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'یک خطای ناشناخته رخ داد.',
|
||||
unPublishingDocument: 'هنگام لغو انتشار این سند خطایی رخ داد.',
|
||||
unspecific: 'خطایی رخ داد.',
|
||||
unverifiedEmail: 'لطفاً قبل از ورود، ایمیل خود را تأیید کنید.',
|
||||
userEmailAlreadyRegistered: 'کاربری با ایمیل داده شده قبلاً ثبت نام کرده است.',
|
||||
userLocked: 'این کاربر به دلیل تلاش های زیاد برای ورود ناموفق قفل شده است.',
|
||||
usernameAlreadyRegistered: 'کاربری با نام کاربری داده شده قبلا ثبت نام کرده است.',
|
||||
|
||||
@@ -124,6 +124,7 @@ export const frTranslations: DefaultTranslationsObject = {
|
||||
unPublishingDocument:
|
||||
'Un problème est survenu lors de l’annulation de la publication de ce document.',
|
||||
unspecific: 'Une erreur est survenue.',
|
||||
unverifiedEmail: 'Veuillez vérifier votre e-mail avant de vous connecter.',
|
||||
userEmailAlreadyRegistered: "Un utilisateur avec l'email donné est déjà enregistré.",
|
||||
userLocked:
|
||||
'Cet utilisateur est verrouillé en raison d’un trop grand nombre de tentatives de connexion infructueuses.',
|
||||
|
||||
@@ -117,6 +117,7 @@ export const heTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'אירעה שגיאה לא ידועה.',
|
||||
unPublishingDocument: 'אירעה בעיה בביטול הפרסום של מסמך זה.',
|
||||
unspecific: 'אירעה שגיאה.',
|
||||
unverifiedEmail: 'אנא אמת את כתובת האימייל שלך לפני ההתחברות.',
|
||||
userEmailAlreadyRegistered: 'משתמש עם האימייל הנתון כבר רשום.',
|
||||
userLocked: 'המשתמש נעול עקב מספר נסיונות התחברות כושלים.',
|
||||
usernameAlreadyRegistered: 'משתמש עם שם המשתמש שניתן כבר רשום.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const hrTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Došlo je do nepoznate pogreške.',
|
||||
unPublishingDocument: 'Došlo je do problema pri poništavanju objave ovog dokumenta.',
|
||||
unspecific: 'Došlo je do pogreške.',
|
||||
unverifiedEmail: 'Molimo potvrdite svoju e-mail adresu prije prijave.',
|
||||
userEmailAlreadyRegistered: 'Korisnik s navedenom e-mail adresom je već registriran.',
|
||||
userLocked: 'Ovaj korisnik je zaključan zbog previše neuspješnih pokušaja prijave.',
|
||||
usernameAlreadyRegistered: 'Korisnik s navedenim korisničkim imenom već je registriran.',
|
||||
|
||||
@@ -122,6 +122,7 @@ export const huTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Ismeretlen hiba történt.',
|
||||
unPublishingDocument: 'Hiba történt a dokumentum közzétételének visszavonása közben.',
|
||||
unspecific: 'Hiba történt.',
|
||||
unverifiedEmail: 'Kérjük, erősítse meg e-mail címét, mielőtt bejelentkezik.',
|
||||
userEmailAlreadyRegistered: 'A megadott email címmel már regisztráltak egy felhasználót.',
|
||||
userLocked: 'Ez a felhasználó túl sok sikertelen bejelentkezési kísérlet miatt zárolva van.',
|
||||
usernameAlreadyRegistered: 'Egy felhasználó a megadott felhasználónévvel már regisztrált.',
|
||||
|
||||
@@ -124,6 +124,7 @@ export const itTranslations: DefaultTranslationsObject = {
|
||||
unPublishingDocument:
|
||||
"Si è verificato un problema durante l'annullamento della pubblicazione di questo documento.",
|
||||
unspecific: 'Si è verificato un errore.',
|
||||
unverifiedEmail: 'Verifica la tua email prima di accedere.',
|
||||
userEmailAlreadyRegistered: "Un utente con l'email fornita è già registrato.",
|
||||
userLocked: 'Questo utente è bloccato a causa di troppi tentativi di accesso non riusciti.',
|
||||
usernameAlreadyRegistered: 'Un utente con il nome utente fornito è già registrato.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const jaTranslations: DefaultTranslationsObject = {
|
||||
unknown: '不明なエラーが発生しました。',
|
||||
unPublishingDocument: 'このデータを非公開する際に問題が発生しました。',
|
||||
unspecific: 'エラーが発生しました。',
|
||||
unverifiedEmail: 'ログインする前にメールを確認してください。',
|
||||
userEmailAlreadyRegistered: '指定されたメールのユーザーはすでに登録されています。',
|
||||
userLocked: 'このユーザーは、ログイン試行回数が多すぎるため、ロックされています。',
|
||||
usernameAlreadyRegistered: '指定されたユーザーネームのユーザーはすでに登録されています。',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const koTranslations: DefaultTranslationsObject = {
|
||||
unknown: '알 수 없는 오류가 발생했습니다.',
|
||||
unPublishingDocument: '이 문서의 게시 취소 중에 문제가 발생했습니다.',
|
||||
unspecific: '오류가 발생했습니다.',
|
||||
unverifiedEmail: '로그인하기 전에 이메일을 확인하세요.',
|
||||
userEmailAlreadyRegistered: '주어진 이메일로 이미 등록된 사용자가 있습니다.',
|
||||
userLocked: '이 사용자는 로그인 실패 횟수가 너무 많아 잠겼습니다.',
|
||||
usernameAlreadyRegistered: '주어진 사용자 이름을 가진 사용자가 이미 등록되어 있습니다.',
|
||||
|
||||
@@ -122,6 +122,7 @@ export const ltTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Įvyko nežinoma klaida.',
|
||||
unPublishingDocument: 'Šio dokumento nepublikuojant kildavo problema.',
|
||||
unspecific: 'Įvyko klaida.',
|
||||
unverifiedEmail: 'Prieš prisijungdami patvirtinkite savo el. paštą.',
|
||||
userEmailAlreadyRegistered: 'Vartotojas su nurodytu el. paštu jau yra užregistruotas.',
|
||||
userLocked: 'Šis vartotojas užrakintas dėl per daug nepavykusių prisijungimo bandymų.',
|
||||
usernameAlreadyRegistered: 'Vartotojas su nurodytu vartotojo vardu jau užregistruotas.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const myTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'ဘာမှန်းမသိသော error တက်သွားပါသည်။',
|
||||
unPublishingDocument: 'ဖိုင်ကို ပြန်လည့် သိမ်းဆည်းခြင်းမှာ ပြဿနာရှိနေသည်။',
|
||||
unspecific: 'Error တက်နေပါသည်။',
|
||||
unverifiedEmail: 'ထည့်သွင်းမည်မဆိုမီ သင့်အီးမေးလ်ကို အတည်ပြုပါ။',
|
||||
userEmailAlreadyRegistered: 'ပေးထားသော အီးမေးလ်ဖြင့် အသုံးပြုသူ တစ်ဦး ရှိပြီးဖြစ်သည်။',
|
||||
userLocked:
|
||||
'အကောင့်ထဲကို ဝင်ရန် အရမ်းအရမ်းကို ကြိုးပမ်းနေသောကြောင့် အကောင့်အား လော့ခ်ချလိုက်ပါသည်။',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const nbTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'En ukjent feil har oppstått.',
|
||||
unPublishingDocument: 'Det oppstod et problem under avpublisering av dokumentet.',
|
||||
unspecific: 'En feil har oppstått.',
|
||||
unverifiedEmail: 'Vennligst bekreft e-posten din før du logger inn.',
|
||||
userEmailAlreadyRegistered: 'En bruker med den oppgitte e-posten er allerede registrert.',
|
||||
userLocked: 'Denne brukeren er låst på grunn av for mange mislykkede innloggingsforsøk.',
|
||||
usernameAlreadyRegistered: 'En bruker med det gitte brukernavnet er allerede registrert.',
|
||||
|
||||
@@ -122,6 +122,7 @@ export const nlTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Er is een onbekende fout opgetreden.',
|
||||
unPublishingDocument: 'Er was een probleem met het depubliceren van dit document.',
|
||||
unspecific: 'Er is een fout opgetreden.',
|
||||
unverifiedEmail: 'Verifieer uw e-mail voordat u inlogt.',
|
||||
userEmailAlreadyRegistered: 'Een gebruiker met het opgegeven e-mailadres is al geregistreerd.',
|
||||
userLocked: 'Deze gebruiker is vergrendeld wegens te veel mislukte inlogpogingen.',
|
||||
usernameAlreadyRegistered: 'Een gebruiker met de opgegeven gebruikersnaam is al geregistreerd.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const plTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Wystąpił nieznany błąd.',
|
||||
unPublishingDocument: 'Wystąpił problem podczas cofania publikacji tego dokumentu.',
|
||||
unspecific: 'Wystąpił błąd',
|
||||
unverifiedEmail: 'Proszę zweryfikować swój e-mail przed zalogowaniem się.',
|
||||
userEmailAlreadyRegistered: 'Użytkownik o podanym adresie e-mail jest już zarejestrowany.',
|
||||
userLocked: 'Ten użytkownik został zablokowany z powodu zbyt wielu nieudanych prób logowania.',
|
||||
usernameAlreadyRegistered: 'Użytkownik o podanej nazwie użytkownika jest już zarejestrowany.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const ptTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Ocorreu um erro desconhecido.',
|
||||
unPublishingDocument: 'Ocorreu um problema ao despublicar esse documento',
|
||||
unspecific: 'Ocorreu um erro.',
|
||||
unverifiedEmail: 'Por favor, verifique seu e-mail antes de fazer login.',
|
||||
userEmailAlreadyRegistered: 'Um usuário com o email fornecido já está registrado.',
|
||||
userLocked: 'Esse usuário está bloqueado devido a muitas tentativas de login malsucedidas.',
|
||||
usernameAlreadyRegistered: 'Um usuário com o nome de usuário fornecido já está registrado.',
|
||||
|
||||
@@ -122,6 +122,7 @@ export const roTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'S-a produs o eroare necunoscută.',
|
||||
unPublishingDocument: 'A existat o problemă în timpul nepublicării acestui document.',
|
||||
unspecific: 'S-a produs o eroare.',
|
||||
unverifiedEmail: 'Vă rugăm să vă verificați e-mailul înainte de a vă autentifica.',
|
||||
userEmailAlreadyRegistered: 'Un utilizator cu emailul dat este deja înregistrat.',
|
||||
userLocked:
|
||||
'Acest utilizator este blocat din cauza unui număr prea mare de încercări de autentificare eșuate.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const rsTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Дошло је до непознате грешке.',
|
||||
unPublishingDocument: 'Постоји проблем при поништавању објаве овог документа.',
|
||||
unspecific: 'Дошло је до грешке.',
|
||||
unverifiedEmail: 'Молимо вас да верификујете своју е-пошту пре пријаве.',
|
||||
userEmailAlreadyRegistered: 'Корисник са датом имејл адресом је већ регистрован.',
|
||||
userLocked: 'Овај корисник је закључан због превеликог броја неуспешних покушаја пријаве.',
|
||||
usernameAlreadyRegistered: 'Korisnik sa datim korisničkim imenom je već registrovan.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const rsLatinTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Došlo je do nepoznate greške.',
|
||||
unPublishingDocument: 'Postoji problem pri poništavanju objave ovog dokumenta.',
|
||||
unspecific: 'Došlo je do greške.',
|
||||
unverifiedEmail: 'Molimo vas da verifikujete svoju e-poštu pre prijave.',
|
||||
userEmailAlreadyRegistered: 'Korisnik sa datom imejl adresom je već registrovan.',
|
||||
userLocked: 'Ovaj korisnik je zaključan zbog prevelikog broja neuspešnih pokušaja prijave.',
|
||||
usernameAlreadyRegistered: 'Korisnik sa datim korisničkim imenom je već registrovan.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const ruTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Произошла неизвестная ошибка.',
|
||||
unPublishingDocument: 'При отмене публикации этого документа возникла проблема.',
|
||||
unspecific: 'Произошла ошибка.',
|
||||
unverifiedEmail: 'Пожалуйста, подтвердите свою электронную почту перед входом.',
|
||||
userEmailAlreadyRegistered: 'Пользователь с указанным email уже зарегистрирован.',
|
||||
userLocked:
|
||||
'Этот пользователь заблокирован из-за слишком большого количества неудачных попыток входа.',
|
||||
|
||||
@@ -122,6 +122,7 @@ export const skTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Došlo k neznámej chybe.',
|
||||
unPublishingDocument: 'Pri zrušení publikovania tohto dokumentu došlo k chybe.',
|
||||
unspecific: 'Došlo k chybe.',
|
||||
unverifiedEmail: 'Pred prihlásením si overte svoj e-mail.',
|
||||
userEmailAlreadyRegistered: 'Používateľ s daným e-mailom je už zaregistrovaný.',
|
||||
userLocked:
|
||||
'Tento používateľ je uzamknutý kvôli príliš mnohým neúspešným pokusom o prihlásenie.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const slTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Prišlo je do neznane napake.',
|
||||
unPublishingDocument: 'Pri umiku objave tega dokumenta je prišlo do težave.',
|
||||
unspecific: 'Prišlo je do napake.',
|
||||
unverifiedEmail: 'Pred prijavo preverite svoj e-poštni naslov.',
|
||||
userEmailAlreadyRegistered: 'Uporabnik s tem e-poštnim naslovom je že registriran.',
|
||||
userLocked: 'Ta uporabnik je zaklenjen zaradi prevelikega števila neuspešnih poskusov prijave.',
|
||||
usernameAlreadyRegistered: 'Uporabnik s tem uporabniškim imenom je že registriran.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const svTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Ett okänt fel har uppstått.',
|
||||
unPublishingDocument: 'Det uppstod ett problem när det här dokumentet skulle avpubliceras.',
|
||||
unspecific: 'Ett fel har uppstått.',
|
||||
unverifiedEmail: 'Vänligen verifiera din e-post innan du loggar in.',
|
||||
userEmailAlreadyRegistered: 'En användare med den angivna e-postadressen är redan registrerad.',
|
||||
userLocked: 'Den här användaren är låst på grund av för många misslyckade inloggningsförsök.',
|
||||
usernameAlreadyRegistered: 'En användare med det angivna användarnamnet är redan registrerad.',
|
||||
|
||||
@@ -118,6 +118,7 @@ export const thTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'เกิดปัญหาบางอย่างที่ไม่ทราบสาเหตุ',
|
||||
unPublishingDocument: 'เกิดปัญหาระหว่างการยกเลิกการเผยแพร่เอกสารนี้',
|
||||
unspecific: 'เกิดปัญหาบางอย่าง',
|
||||
unverifiedEmail: 'กรุณายืนยันอีเมลของคุณก่อนเข้าสู่ระบบ',
|
||||
userEmailAlreadyRegistered: 'ผู้ใช้ที่มีอีเมลดังกล่าวได้ลงทะเบียนแล้ว',
|
||||
userLocked: 'บัญชีนี้ถูกล็อกเนื่องจากมีการพยายามเข้าสู่ระบบมากเกินไป',
|
||||
usernameAlreadyRegistered: 'ผู้ใช้ที่มีชื่อผู้ใช้ที่ระบุไว้แล้วถูกลงทะเบียนเอาไว้แล้ว',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const trTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Bilinmeyen bir hata oluştu.',
|
||||
unPublishingDocument: 'Geçerli döküman yayından kaldırılırken bir sorun oluştu.',
|
||||
unspecific: 'Bir hata oluştu.',
|
||||
unverifiedEmail: 'Giriş yapmadan önce e-posta adresinizi doğrulayın.',
|
||||
userEmailAlreadyRegistered: 'Verilen e-posta ile zaten kayıtlı bir kullanıcı var.',
|
||||
userLocked:
|
||||
'Hesabınız hatalı giriş denemeleri yüzünden geçici olarak kilitlendi. Lütfen daha sonra tekrar deneyin.',
|
||||
|
||||
@@ -121,6 +121,7 @@ export const ukTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Виникла невідома помилка.',
|
||||
unPublishingDocument: 'Під час скасування публікації даного документа виникла помилка.',
|
||||
unspecific: 'Виникла помилка.',
|
||||
unverifiedEmail: 'Будь ласка, підтвердьте свою електронну пошту перед входом.',
|
||||
userEmailAlreadyRegistered: 'Користувач із вказаною електронною поштою вже зареєстрований.',
|
||||
userLocked: 'Цей користувач заблокований через велику кількість невдалих спроб входу.',
|
||||
usernameAlreadyRegistered: 'Користувач з вказаним іменем користувача вже зареєстрований.',
|
||||
|
||||
@@ -120,6 +120,7 @@ export const viTranslations: DefaultTranslationsObject = {
|
||||
unknown: 'Lỗi - Không xác định (unknown error).',
|
||||
unPublishingDocument: 'Lỗi - Đã xảy ra vấn để khi ẩn bản tài liệu.',
|
||||
unspecific: 'Lỗi - Đã xảy ra (unspecific error).',
|
||||
unverifiedEmail: 'Vui lòng xác minh email trước khi đăng nhập.',
|
||||
userEmailAlreadyRegistered: 'Người dùng với email đã cho đã được đăng ký.',
|
||||
userLocked: 'Lỗi- Tài khoản đã bị khóa do đăng nhập thất bại nhiều lần.',
|
||||
usernameAlreadyRegistered: 'Một người dùng với tên đăng nhập đã cho đã được đăng ký.',
|
||||
|
||||
@@ -115,6 +115,7 @@ export const zhTranslations: DefaultTranslationsObject = {
|
||||
unknown: '发生了一个未知的错误。',
|
||||
unPublishingDocument: '取消发布此文件时出现了问题。',
|
||||
unspecific: '发生了一个错误。',
|
||||
unverifiedEmail: '请在登录前验证您的电子邮件。',
|
||||
userEmailAlreadyRegistered: '给定电子邮件的用户已经注册。',
|
||||
userLocked: '该用户由于有太多次失败的登录尝试而被锁定。',
|
||||
usernameAlreadyRegistered: '已有用户使用了该用户名进行注册。',
|
||||
|
||||
@@ -115,6 +115,7 @@ export const zhTwTranslations: DefaultTranslationsObject = {
|
||||
unknown: '發生了一個未知的錯誤。',
|
||||
unPublishingDocument: '取消發布此文件時出現了問題。',
|
||||
unspecific: '發生了一個錯誤。',
|
||||
unverifiedEmail: '請在登入前驗證您的電子郵件。',
|
||||
userEmailAlreadyRegistered: '給定電子郵件的用戶已經註冊。',
|
||||
userLocked: '該使用者由於有太多次失敗的登錄嘗試而被鎖定。',
|
||||
usernameAlreadyRegistered: '已有使用者使用所提供的用戶名註冊。',
|
||||
|
||||
Reference in New Issue
Block a user