mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-02 13:03:08 +00:00
Closes #10828 # Which Problems Are Solved The IDP callback flow was calling retrieveIDPIntent() twice, causing single-use token failures with error: "Intent Token is invalid". This occurred due to Next.js 15's dynamicIO feature triggering double renders # How the Problems Are Solved Completely refactored the IDP callback architecture to ensure single-use tokens are consumed exactly once: - Centralized Business Logic: Moved all IDP callback logic into a single server action (processIDPCallback) that: - Consumes the token once - Handles all 6 business scenarios (login, linking, auto-linking, auto-creation, manual registration, account not found) - Integrates session creation in the same action - Returns `{ redirect?: string; error?: string }` for client-side navigation - Client Component Invocation: Created `IdpProcessHandler` client component that: - Calls the server action from browser context (enables cookie modification) - Prevents double execution with useRef - Handles loading states and error display - Clean Architecture: - Removed 403-line success page with complex logic - Removed component files from `/components/idps/pages/` folder - Moved all UI directly into server pages - Created dedicated result pages with minimal params # Additional Changes - Added translations to all 8 supported languages --------- Co-authored-by: Ramon <mail@conblem.me>
441 lines
18 KiB
JSON
441 lines
18 KiB
JSON
{
|
|
"common": {
|
|
"back": "Indietro",
|
|
"title": "Accedi con Zitadel"
|
|
},
|
|
"accounts": {
|
|
"title": "Account",
|
|
"description": "Seleziona l'account che vuoi utilizzare.",
|
|
"addAnother": "Aggiungi un altro account",
|
|
"noResults": "Nessun account trovato",
|
|
"verified": "verificato",
|
|
"expired": "scaduto"
|
|
},
|
|
"logout": {
|
|
"title": "Esci",
|
|
"description": "Seleziona l'account che desideri uscire",
|
|
"noResults": "Nessun account trovato",
|
|
"clear": "Elimina sessione",
|
|
"verifiedAt": "Ultima attività: {time}",
|
|
"success": {
|
|
"title": "Uscita riuscita",
|
|
"description": "Hai effettuato l'uscita con successo."
|
|
}
|
|
},
|
|
"loginname": {
|
|
"title": "Bentornato!",
|
|
"description": "Inserisci i tuoi dati di accesso.",
|
|
"register": "Registrati come nuovo utente",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"loginname": "Nome di accesso",
|
|
"username": "Nome utente",
|
|
"usernameOrPhoneNumber": "Nome utente o numero di telefono",
|
|
"usernameOrEmail": "Nome utente o e-mail"
|
|
},
|
|
"required": {
|
|
"loginName": "Questo campo è obbligatorio"
|
|
},
|
|
"errors": {
|
|
"internalError": "Si è verificato un errore interno",
|
|
"couldNotGetLoginSettings": "Impossibile ottenere le impostazioni di accesso",
|
|
"couldNotSearchUsers": "Impossibile cercare gli utenti",
|
|
"couldNotGetDomain": "Impossibile ottenere il dominio",
|
|
"couldNotGetHost": "Impossibile ottenere l'host",
|
|
"couldNotStartIDPFlow": "Impossibile avviare il flusso IDP",
|
|
"moreThanOneUserFound": "È stato trovato più di un utente. Fornisci un identificatore univoco.",
|
|
"userNotFound": "Utente non trovato nel sistema",
|
|
"couldNotCreateSession": "Impossibile creare la sessione per l'utente",
|
|
"initialUserNotSupported": "Utente iniziale non supportato",
|
|
"usernamePasswordNotAllowed": "Nome utente e password non consentiti! Contatta l'amministratore per maggiori informazioni.",
|
|
"passkeysNotAllowed": "Passkey non consentite! Contatta l'amministratore per maggiori informazioni.",
|
|
"couldNotFindIdentityProvider": "Impossibile trovare il provider di identità.",
|
|
"userNotActive": "L'utente non è attivo. Contatta l'amministratore per maggiori informazioni."
|
|
}
|
|
},
|
|
"zitadel": {
|
|
"errors": {
|
|
"errorOccured": "Si è verificato un errore",
|
|
"multipleUsersFound": "Trovati più utenti",
|
|
"userNotFound": "Utente non trovato nel sistema"
|
|
}
|
|
},
|
|
"password": {
|
|
"verify": {
|
|
"title": "Password",
|
|
"description": "Inserisci la tua password.",
|
|
"resetPassword": "Reimposta Password",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"password": "Password"
|
|
},
|
|
"required": {
|
|
"password": "Questo campo è obbligatorio"
|
|
},
|
|
"errors": {
|
|
"couldNotVerifyPassword": "Impossibile verificare la password",
|
|
"couldNotResetPassword": "Impossibile reimpostare la password"
|
|
},
|
|
"info": {
|
|
"passwordResetSent": "La password è stata reimpostata. Controlla la tua e-mail"
|
|
}
|
|
},
|
|
"set": {
|
|
"title": "Imposta Password",
|
|
"description": "Imposta la password per il tuo account",
|
|
"codeSent": "Un codice è stato inviato al tuo indirizzo email.",
|
|
"noCodeReceived": "Non hai ricevuto un codice?",
|
|
"resend": "Invia di nuovo",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"code": "Codice",
|
|
"newPassword": "Nuova password",
|
|
"confirmPassword": "Conferma password"
|
|
},
|
|
"required": {
|
|
"code": "Questo campo è obbligatorio",
|
|
"newPassword": "Devi fornire una password!",
|
|
"confirmPassword": "Questo campo è obbligatorio"
|
|
},
|
|
"errors": {
|
|
"couldNotSetPassword": "Impossibile impostare la password",
|
|
"couldNotResetPassword": "Impossibile reimpostare la password",
|
|
"couldNotVerifyPassword": "Impossibile verificare la password"
|
|
}
|
|
},
|
|
"change": {
|
|
"title": "Cambia Password",
|
|
"description": "Imposta la password per il tuo account",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"newPassword": "Nuova password",
|
|
"confirmPassword": "Conferma password"
|
|
},
|
|
"required": {
|
|
"newPassword": "Devi fornire una nuova password!",
|
|
"confirmPassword": "Questo campo è obbligatorio"
|
|
},
|
|
"errors": {
|
|
"couldNotChangePassword": "Impossibile modificare la password",
|
|
"couldNotVerifyPassword": "Impossibile verificare la password",
|
|
"unknownError": "Errore sconosciuto"
|
|
}
|
|
},
|
|
"complexity": {
|
|
"length": "Deve contenere almeno {minLength} caratteri.",
|
|
"hasSymbol": "Deve includere un simbolo.",
|
|
"hasNumber": "Deve includere un numero.",
|
|
"hasUppercase": "Deve includere una lettera maiuscola.",
|
|
"hasLowercase": "Deve includere una lettera minuscola.",
|
|
"equals": "La conferma della password corrisponde.",
|
|
"matches": "Corrisponde",
|
|
"doesNotMatch": "Non corrisponde"
|
|
},
|
|
"errors": {
|
|
"noHostFound": "Nessun host trovato",
|
|
"couldNotSendResetLink": "Impossibile inviare il link per il ripristino della password",
|
|
"couldNotCreateSessionForUser": "Impossibile creare una sessione per l'utente",
|
|
"couldNotVerifyPassword": "Impossibile verificare la password",
|
|
"failedToAuthenticate": "Autenticazione non riuscita. Hai effettuato {failedAttempts} di {maxPasswordAttempts} tentativi di password.{lockoutMessage}",
|
|
"failedToAuthenticateNoLimit": "Autenticazione non riuscita.",
|
|
"accountLockedContactAdmin": " Contatta l'amministratore per sbloccare il tuo account",
|
|
"userNotFound": "Utente non trovato nel sistema",
|
|
"initialUserNotSupported": "Utente iniziale non supportato",
|
|
"userInitialStateNotSupported": "Lo stato iniziale dell'utente non è supportato",
|
|
"codeOrVerificationRequired": "Devi fornire un codice o avere una verifica utente valida",
|
|
"verificationRequired": "È necessario effettuare la verifica utente",
|
|
"couldNotLoadSession": "Impossibile caricare la sessione",
|
|
"couldNotLoadAuthMethods": "Impossibile caricare i metodi di autenticazione",
|
|
"failedPrecondition": "Precondizione non soddisfatta",
|
|
"sessionNotValid": "La sessione non è valida"
|
|
}
|
|
},
|
|
"idp": {
|
|
"title": "Accedi con SSO",
|
|
"description": "Seleziona uno dei seguenti provider per accedere",
|
|
"orSignInWith": "o accedi con",
|
|
"signInWithApple": "Accedi con Apple",
|
|
"signInWithGoogle": "Accedi con Google",
|
|
"signInWithAzureAD": "Accedi con AzureAD",
|
|
"signInWithGithub": "Accedi con GitHub",
|
|
"signInWithGitlab": "Accedi con GitLab",
|
|
"loginError": {
|
|
"title": "Accesso fallito",
|
|
"description": "Si è verificato un errore durante il tentativo di accesso."
|
|
},
|
|
"linkingError": {
|
|
"title": "Collegamento account fallito",
|
|
"description": "Si è verificato un errore durante il tentativo di collegare il tuo account."
|
|
},
|
|
"completeRegister": {
|
|
"title": "Completa la registrazione",
|
|
"description": "Completa la registrazione del tuo account."
|
|
},
|
|
"accountNotFound": {
|
|
"title": "Account non trovato",
|
|
"description": "Non siamo riusciti a trovare un account associato alle tue credenziali del provider di identità.",
|
|
"info": "Nessun account esistente è stato trovato. Accedi con un account esistente o contatta il tuo amministratore per assistenza.",
|
|
"backToLogin": "Torna al login"
|
|
},
|
|
"registrationFailed": {
|
|
"title": "Registrazione non disponibile",
|
|
"description": "Non siamo riusciti a completare il processo di registrazione.",
|
|
"info": "Impossibile determinare l'organizzazione per la registrazione. Contatta il tuo amministratore per assistenza.",
|
|
"backToLogin": "Torna al login"
|
|
},
|
|
"processing": {
|
|
"message": "Elaborazione autenticazione in corso...",
|
|
"noRedirect": "Nessun reindirizzamento o errore ricevuto dal server",
|
|
"unexpectedError": "Si è verificato un errore imprevisto"
|
|
},
|
|
"errors": {
|
|
"missingParameters": "Parametri richiesti mancanti",
|
|
"missingIdpInfo": "Informazioni IDP mancanti",
|
|
"idpNotFound": "Provider di identità non trovato",
|
|
"linkingNotAllowed": "Il collegamento non è consentito per questo provider di identità",
|
|
"linkingFailed": "Collegamento del provider di identità all'account non riuscito",
|
|
"autoLinkingFailed": "Collegamento automatico dell'account non riuscito",
|
|
"userCreationFailed": "Creazione dell'account utente non riuscita",
|
|
"orgResolutionFailed": "Impossibile determinare l'organizzazione per la registrazione",
|
|
"sessionCreationFailed": "Impossibile creare la sessione o determinare il reindirizzamento",
|
|
"unknownError": "Si è verificato un errore sconosciuto"
|
|
}
|
|
},
|
|
"ldap": {
|
|
"title": "Accedi con LDAP",
|
|
"description": "Inserisci le tue credenziali LDAP.",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"username": "Nome utente",
|
|
"password": "Password"
|
|
},
|
|
"required": {
|
|
"username": "Questo campo è obbligatorio",
|
|
"password": "Questo campo è obbligatorio"
|
|
}
|
|
},
|
|
"mfa": {
|
|
"verify": {
|
|
"title": "Verifica la tua identità",
|
|
"description": "Scegli uno dei seguenti fattori.",
|
|
"noResults": "Nessun secondo fattore disponibile per la configurazione."
|
|
},
|
|
"set": {
|
|
"title": "Configura l'autenticazione a 2 fattori",
|
|
"description": "Scegli uno dei seguenti secondi fattori.",
|
|
"skip": "Salta"
|
|
}
|
|
},
|
|
"otp": {
|
|
"verify": {
|
|
"title": "Verifica l'autenticazione a 2 fattori",
|
|
"totpDescription": "Inserisci il codice dalla tua app di autenticazione.",
|
|
"smsDescription": "Inserisci il codice ricevuto via SMS.",
|
|
"emailDescription": "Inserisci il codice ricevuto via email.",
|
|
"noCodeReceived": "Non hai ricevuto un codice?",
|
|
"resendCode": "Invia di nuovo il codice",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"code": "Codice"
|
|
},
|
|
"required": {
|
|
"code": "Questo campo è obbligatorio"
|
|
}
|
|
},
|
|
"set": {
|
|
"title": "Configura l'autenticazione a 2 fattori",
|
|
"totpDescription": "Scansiona il codice QR con la tua app di autenticazione.",
|
|
"smsDescription": "Inserisci il tuo numero di telefono per ricevere un codice via SMS.",
|
|
"emailDescription": "Inserisci il tuo indirizzo email per ricevere un codice via email.",
|
|
"totpRegisterDescription": "Scansiona il codice QR o naviga manualmente all'URL.",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"code": "Codice"
|
|
},
|
|
"required": {
|
|
"code": "Questo campo è obbligatorio"
|
|
}
|
|
}
|
|
},
|
|
"passkey": {
|
|
"verify": {
|
|
"title": "Autenticati con una passkey",
|
|
"description": "Il tuo dispositivo chiederà la tua impronta digitale, il volto o il blocco schermo",
|
|
"usePassword": "Usa password",
|
|
"submit": "Continua"
|
|
},
|
|
"set": {
|
|
"title": "Configura una passkey",
|
|
"description": "Il tuo dispositivo chiederà la tua impronta digitale, il volto o il blocco schermo",
|
|
"info": {
|
|
"description": "Una passkey è un metodo di autenticazione su un dispositivo come la tua impronta digitale, Apple FaceID o simili.",
|
|
"link": "Autenticazione senza password"
|
|
},
|
|
"skip": "Salta",
|
|
"submit": "Continua"
|
|
}
|
|
},
|
|
"u2f": {
|
|
"verify": {
|
|
"title": "Verifica l'autenticazione a 2 fattori",
|
|
"description": "Verifica il tuo account con il tuo dispositivo."
|
|
},
|
|
"set": {
|
|
"title": "Configura l'autenticazione a 2 fattori",
|
|
"description": "Configura un dispositivo come secondo fattore.",
|
|
"submit": "Continua"
|
|
}
|
|
},
|
|
"register": {
|
|
"methods": {
|
|
"passkey": "Passkey",
|
|
"password": "Password"
|
|
},
|
|
"disabled": {
|
|
"title": "Registration disabled",
|
|
"description": "Registrazione disabilitata. Contatta l'amministratore di sistema per assistenza."
|
|
},
|
|
"missingdata": {
|
|
"title": "Registrazione",
|
|
"description": "Inserisci i tuoi dati per registrarti."
|
|
},
|
|
"title": "Registrati",
|
|
"description": "Crea il tuo account ZITADEL.",
|
|
"noMethodAvailableWarning": "Nessun metodo di autenticazione disponibile. Contatta l'amministratore di sistema per assistenza.",
|
|
"selectMethod": "Seleziona il metodo con cui desideri autenticarti",
|
|
"agreeTo": "Per registrarti devi accettare i termini e le condizioni",
|
|
"termsOfService": "Termini di Servizio",
|
|
"privacyPolicy": "Informativa sulla Privacy",
|
|
"submit": "Continua",
|
|
"password": {
|
|
"title": "Imposta Password",
|
|
"description": "Imposta la password per il tuo account",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"password": "Password",
|
|
"confirmPassword": "Conferma password"
|
|
},
|
|
"required": {
|
|
"password": "Devi fornire una password!",
|
|
"confirmPassword": "Questo campo è obbligatorio"
|
|
}
|
|
},
|
|
"labels": {
|
|
"firstname": "Nome",
|
|
"lastname": "Cognome",
|
|
"email": "E-mail"
|
|
},
|
|
"required": {
|
|
"firstname": "Questo campo è obbligatorio",
|
|
"lastname": "Questo campo è obbligatorio",
|
|
"email": "Questo campo è obbligatorio"
|
|
},
|
|
"errors": {
|
|
"couldNotCreateUser": "Impossibile creare l'utente",
|
|
"couldNotCreateSession": "Impossibile creare la sessione",
|
|
"userNotFound": "Utente non trovato nel sistema",
|
|
"couldNotLinkIDP": "Impossibile collegare l'IDP all'utente",
|
|
"couldNotRegisterUser": "Impossibile registrare l'utente"
|
|
}
|
|
},
|
|
"invite": {
|
|
"title": "Invita Utente",
|
|
"description": "Inserisci l'indirizzo email dell'utente che desideri invitare.",
|
|
"info": "L'utente riceverà un'email con ulteriori istruzioni.",
|
|
"notAllowed": "Non hai i permessi per invitare un utente.",
|
|
"submit": "Invita Utente",
|
|
"success": {
|
|
"title": "Invito inviato",
|
|
"description": "L'utente è stato invitato con successo.",
|
|
"verified": "L'utente è stato invitato e ha già verificato la sua email.",
|
|
"notVerifiedYet": "L'utente è stato invitato. Riceverà un'email con ulteriori istruzioni.",
|
|
"submit": "Invita un altro utente"
|
|
}
|
|
},
|
|
"signedin": {
|
|
"title": "Benvenuto {user}!",
|
|
"description": "Sei connesso.",
|
|
"continue": "Continua",
|
|
"error": {
|
|
"title": "Errore",
|
|
"description": "Si è verificato un errore durante il tentativo di accesso."
|
|
}
|
|
},
|
|
"verify": {
|
|
"userIdMissing": "Nessun userId fornito!",
|
|
"successTitle": "Utente verificato",
|
|
"successDescription": "L'utente è stato verificato con successo.",
|
|
"setupAuthenticator": "Configura autenticatore",
|
|
"verify": {
|
|
"title": "Verifica utente",
|
|
"description": "Inserisci il codice fornito nell'email di verifica.",
|
|
"noCodeReceived": "Non hai ricevuto un codice?",
|
|
"resendCode": "Invia di nuovo il codice",
|
|
"codeSent": "Un codice è stato appena inviato al tuo indirizzo email.",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"code": "Codice"
|
|
},
|
|
"required": {
|
|
"code": "Questo campo è obbligatorio"
|
|
}
|
|
},
|
|
"errors": {
|
|
"couldNotResendEmail": "Impossibile reinviare l'email",
|
|
"couldNotVerifyUser": "Impossibile verificare l'utente",
|
|
"couldNotVerifyInvite": "Impossibile verificare l'invito",
|
|
"couldNotVerifyEmail": "Impossibile verificare l'email",
|
|
"couldNotVerify": "Impossibile verificare",
|
|
"couldNotLoadUser": "Impossibile caricare l'utente",
|
|
"couldNotLoadAuthenticators": "Impossibile caricare gli autenticatori possibili",
|
|
"couldNotCreateSession": "Impossibile creare la sessione",
|
|
"noHostFound": "Nessun host trovato",
|
|
"userAlreadyVerified": "L'utente è già verificato!",
|
|
"couldNotResendInvite": "Impossibile reinviare l'invito",
|
|
"inviteSendFailed": "Impossibile inviare l'email di invito",
|
|
"emailSendFailed": "Impossibile inviare l'email di verifica"
|
|
}
|
|
},
|
|
"authenticator": {
|
|
"title": "Seleziona metodo di autenticazione",
|
|
"description": "Seleziona il metodo con cui desideri autenticarti",
|
|
"noMethodsAvailable": "Nessun metodo di autenticazione disponibile",
|
|
"allSetup": "Hai già configurato un autenticatore!",
|
|
"linkWithIDP": "o collega con un Identity Provider"
|
|
},
|
|
"device": {
|
|
"usercode": {
|
|
"title": "Codice dispositivo",
|
|
"description": "Inserisci il codice.",
|
|
"submit": "Continua",
|
|
"labels": {
|
|
"code": "Codice"
|
|
},
|
|
"required": {
|
|
"code": "Questo campo è obbligatorio"
|
|
}
|
|
},
|
|
"request": {
|
|
"title": "{appName} desidera connettersi:",
|
|
"description": "{appName} avrà accesso a:",
|
|
"disclaimer": "Cliccando su Consenti, autorizzi {appName} e Zitadel a utilizzare le tue informazioni in conformità con i rispettivi termini di servizio e politiche sulla privacy. Puoi revocare questo accesso in qualsiasi momento.",
|
|
"submit": "Consenti",
|
|
"deny": "Nega"
|
|
},
|
|
"scope": {
|
|
"openid": "Verifica la tua identità.",
|
|
"email": "Accedi al tuo indirizzo email.",
|
|
"profile": "Accedi alle informazioni complete del tuo profilo.",
|
|
"offline_access": "Consenti l'accesso offline al tuo account."
|
|
}
|
|
},
|
|
"error": {
|
|
"noUserCode": "Nessun codice utente fornito!",
|
|
"noDeviceRequest": "Nessuna richiesta di dispositivo trovata.",
|
|
"unknownContext": "Impossibile ottenere il contesto dell'utente. Assicurati di inserire prima il nome utente o di fornire un loginName come parametro di ricerca.",
|
|
"sessionExpired": "La tua sessione attuale è scaduta. Effettua nuovamente l'accesso.",
|
|
"failedLoading": "Impossibile caricare i dati. Riprova.",
|
|
"tryagain": "Riprova"
|
|
}
|
|
}
|