diff --git a/api/i18n/de.js b/api/i18n/de.js index 0f26b160..9181e8bc 100644 --- a/api/i18n/de.js +++ b/api/i18n/de.js @@ -7,6 +7,7 @@ export default { description: 'Vereinfachte Verwaltung Ihrer Benutzer und Organisationen in einer modernen weborientierten Architektur.' }, common: { + manageNotifications: 'Benachrichtigungen verwalten', home: 'Startseite', logLink: 'Anmelden / Registrieren', logout: 'Abmelden', @@ -29,6 +30,10 @@ export default { id: 'Nutzername', name: 'Name', save: 'Aufzeichnung', + send: 'Senden', + load: 'Hochladen', + active: 'aktiv', + inactive: 'inaktiv', members: 'Mitglieder', orgStorageMembers: 'Mitglieder im sekundären Speicher', role: 'Rolle', @@ -47,6 +52,7 @@ export default { confirmDeleteTitle: 'Löschen {name}', confirmDeleteMsg: 'Sind Sie sicher, dass Sie diese Ressource löschen möchten? Seien Sie vorsichtig, die Daten sind nicht wiederherstellbar.', editTitle: 'Bearbeiten {name}', + seeTitle: '{name} ansehen', loggedAt: 'Letzte Anmeldung', createdAt: 'Erstellt am', createdPhrase: 'Erstellt von {name} am {date}', @@ -59,6 +65,10 @@ export default { back: 'Zurück', next: 'Nächste', password: 'Kennwort', + showPassword: 'Kennwort anzeigen', + hidePassword: 'Kennwort ausblenden', + passwordShown: 'Ihr Kennwort ist sichtbar', + passwordHidden: 'Ihr Kennwort ist ausgeblendet', checkInbox: 'Überprüfen Sie Ihre Mailbox', spamWarning: 'Wenn Sie eine E-Mail nicht erhalten haben, überprüfen Sie, ob sie nicht automatisch als Spam klassifiziert wurde.', validate: 'Validieren Sie', @@ -166,7 +176,7 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, noCreatedOrgsLimit: 'Benutzer können eine beliebige Anzahl von Organisationen erstellen.', createdOrgsLimit: 'Benutzer können {defaultMaxCreatedOrgs} Standardorganisation(en) erstellen.', explainLimit: 'Legen Sie einen Wert fest, um die Anzahl der Organisationen zu begrenzen, die dieser Benutzer erstellen kann. -1 für eine beliebige Anzahl. Löschen Sie das Feld, um zum Standardwert zurückzukehren ({defaultMaxCreatedOrgs}).', - editUserEmailTitle: 'Ändere die E-Mail-Adresse des Benutzers {name}', + editUserEmailTitle: 'E-Mail-Adresse des Benutzers {name} ändern', editUserEmailText: 'Warnung! E-Mail ist ein wichtiger Benutzerschlüssel. Durch das Ändern dieser Informationen laufen Sie Gefahr, eine falsche, nicht funktionierende oder inkonsistente Adresse mit anderen Einträgen einzufügen. Diese Funktion wird nur Administratoren angeboten, um die Blockierung eines Benutzers aufzuheben, auf dessen Postfach nicht mehr zugegriffen werden kann.', drop2FATitle: 'Zwei-Faktor-Authentifizierung deaktivieren', transferTitle: 'Benutzer {name} auf eine andere Website übertragen', @@ -183,26 +193,41 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, }, sites: { createSite: 'Eine neue Website definieren', + loginOnSite: 'Auf der Website anmelden', colorWarnings: 'Kontrastwarnungen' }, + passwordLists: { + help1: 'Sie können Kennwortlisten aus CSV-Dateien hochladen. Diese zu bekannten Kennwörter werden dann abgelehnt, wenn Benutzer versuchen, sie zu verwenden.', + help2: 'Sie finden Kennwortlisten im Internet, zum Beispiel im Projekt {secLists} oder im Projekt {richelieu} für eine französische Liste.', + newFile: 'Neue Kennwortdatei (ein Kennwort pro Zeile)', + subtitle: '{state} - {date} - {count} Kennwörter', + confirmDelete: 'Diese Kennwortliste löschen?' + }, site: { title: 'Website-Konfiguration' } }, + contact: { + title: 'Kontaktieren Sie uns', + from: 'Ihre E-Mail-Adresse', + subject: 'Betreff', + text: 'Ihre Anfrage', + sent: 'Ihre Anfrage wurde gesendet' + }, login: { title: 'Identifizieren Sie sich', emailLabel: 'Deine E-Mail', emailCaption: 'Erfahren Sie mehr über die kennwortlose Authentifizierung', success: 'Sie erhalten eine E-Mail an die angegebene Adresse, die einen Link enthält. Bitte öffnen Sie diesen Link, um Ihre Identifikation zu vervollständigen.', - maildevLink: 'Greifen Sie auf das Entwicklungspostfach zu', + maildevLink: 'Auf das Entwicklungspostfach zugreifen', newPassword: 'Neues Kennwort', - newPassword2: 'Bestätigen Sie das neue Passwort', + newPassword2: 'Bestätigung des neuen Passworts', changePassword: 'Passwort erneuern', changePasswordTooltip: 'Wenn Sie Ihr Passwort vergessen haben oder es ändern müssen, erneuern Sie Ihr Passwort.', newPasswordMsg: 'Geben Sie das neue Passwort zweimal ein.', changePasswordSent: 'Unter {email} wurde eine E-Mail an Sie gesendet. Diese E-Mail enthält einen Link zum Ändern des mit Ihrem Konto verknüpften Passworts.', passwordlessMsg1: 'Es reicht aus, eine E-Mail zu verbinden.', - passwordlessMsg2: 'Senden Sie eine Login-E-Mail.', + passwordlessMsg2: 'Eine Login-E-Mail senden.', passwordlessConfirmed: 'Unter {email} wurde eine E-Mail an Sie gesendet. Diese E-Mail enthält einen Link zur Verbindung mit unserer Plattform.', createUserMsg1: 'Wenn Sie sich noch nicht auf unserer Plattform angemeldet haben, erstellen Sie bitte ein Konto.', createUserMsg2: 'Ein Konto erstellen', @@ -230,7 +255,7 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, recovery2FA: 'Wiederherstellungscode', recovery2FAInfo: 'Achtung! Bewahren Sie den Wiederherstellungscode unten an einem sicheren Ort auf. Ohne ihn können Sie Ihr Konto nicht wiederherstellen, wenn Sie das Gerät verlieren, auf dem Sie gerade die Zwei-Faktor-Authentifizierung eingerichtet haben.', recovery2FACode: 'Wiederherstellungscode: ', - recovery2FADownload: 'Laden Sie eine Datei mit dem Wiederherstellungscode herunter', + recovery2FADownload: 'Eine Datei mit dem Wiederherstellungscode herunterladen', recovery2FAContent: 'Wiederherstellungscode für die Zwei-Faktor-Authentifizierung {name}', plannedDeletion: 'Geplante Löschung', cancelDeletion: 'Löschen des Benutzers abbrechen', @@ -244,14 +269,14 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, appRedirectedMsg: 'Sie können diesen Tab schließen.' }, organization: { - addMember: 'Laden Sie einen Benutzer zum Beitritt zur Organisation ein', + addMember: 'Einen Benutzer zum Beitritt zur Organisation einladen', disableInvite: 'Diese Organisation hat ihre maximale Mitgliederzahl erreicht.', deleteMember: 'Löschen Sie diesen Benutzer aus der Mitgliederliste der Organisation', editMember: 'Ändern Sie die Rolle dieses Benutzers in der Organisation', memberReadOnly: 'Die Mitgliedschaft dieses Benutzers in der Organisation stammt aus einem Identitätsanbieter und kann hier nicht geändert werden.', - confirmEditMemberTitle: 'Bearbeiten {name}', + confirmEditMemberTitle: '{name} bearbeiten', confirmDeleteMemberTitle: 'Ausschließen {name}', - confirmDeleteMemberMsg: 'Wollen Sie diesen Benutzer wirklich von der Mitgliederliste der Organisation streichen {name}?', + confirmDeleteMemberMsg: 'Wollen Sie diesen Benutzer wirklich von der Mitgliederliste der Organisation {org} streichen?', deleteMemberSuccess: 'Der Benutzer {name} wurde aus der Organisation ausgeschlossen.', inviteEmail: 'E-Mail-Adresse des Benutzers', inviteSuccess: 'Eine Einladung wurde an {email} geschickt', @@ -260,8 +285,8 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, departmentLabelTitle: 'Bezeichnung für das Konzept "Abteilung"', departmentLabelHelp: 'Leer lassen, um "{defaultDepartmentLabel}" anzuzeigen. Füllen Sie es aus, um eine andere Bezeichnung wie "Abteilung", "Agentur" usw. zu verwenden.', addDepartment: '{departmentLabel} erstellen', - editDepartment: 'Bearbeiten {departmentLabel}', - deleteDepartment: 'Löschen {departmentLabel}', + editDepartment: '{departmentLabel} bearbeiten', + deleteDepartment: '{departmentLabel} löschen', confirmEditDepartmentTitle: 'Bearbeiten {name}', confirmDeleteDepartmentTitle: '{name} entfernen', confirmDeleteDepartmentMsg: 'Möchten Sie {name} wirklich aus Ihrer Organisation entfernen?', @@ -270,8 +295,8 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, inviteLink: 'Bei Problemen bei der Kommunikation per E-Mail können Sie den untenstehenden Bestätigungslink auf andere Weise senden. Warnung ! Sie riskieren das Einfügen einer falschen oder nicht funktionierenden E-Mail-Adresse in die Benutzerdatenbank. Diese E-Mail-Adresse kann später mehrere Probleme verursachen: Passwortänderung, Senden von Benachrichtigungen usw.', '2FARoles': 'Zwei-Faktor-Authentifizierung.', '2FARolesMsg': 'Machen Sie die Zwei-Faktor-Authentifizierung für Benutzer mit diesen Rollen obligatorisch:', - sendInvitationLink: 'Senden Sie einen anderen Einladungslink', - addPartner: 'Laden Sie eine Partnerorganisation ein', + sendInvitationLink: 'Einen anderen Einladungslink senden', + addPartner: 'Eine Partnerorganisation einladen', deletePartner: 'Löschen Sie diesen Partner', depSortCreation: 'Zuletzt erstellt', depSortAlpha: 'Alphabetische Reihenfolge', @@ -285,15 +310,18 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, msgDifferentUser: 'Diese Einladung, Mitglied einer Organisation zu werden, wurde gut angenommen. Sie können Anmelden mit dem Gastkonto.' }, avatar: { - load: 'Laden Sie ein neues Avatar', + loadUser: 'Ihren Avatar hochladen', + loadOrganization: 'Avatar der Organisation hochladen', + loadDepartment: 'Avatar hochladen ({departmentLabel})', prepare: 'Das Bild vorbereiten' }, me: { + emailNotEditable: 'Diese Adresse kann nicht geändert werden.', noOrganization: 'Sie sind nicht Mitglied einer Organisation.', operations: 'Sensible Operationen', deleteMyself: 'Dieses Konto löschen', - deleteMyselfAlert: 'Wenn Sie Ihr Konto löschen, werden auch die zugehörigen Daten gelöscht und können nicht wiederhergestellt werden.', - deleteMyselfCheck: 'Markieren Sie dieses Kästchen und klicken Sie auf OK, um das Löschen zu bestätigen.', + deleteMyselfAlert: 'Wenn Sie Ihr Benutzerkonto löschen, haben Sie {plannedDeletionDelay} Tage Zeit, um den Vorgang abzubrechen. Danach werden alle zugehörigen Daten gelöscht und können nicht wiederhergestellt werden.', + deleteMyselfCheck: 'Markieren Sie dieses Kästchen und klicken Sie auf OK, um das Löschen des Benutzers {name} und aller seiner Daten zu bestätigen.', accountChanges: 'Kontowechsel verwalten', defaultOrg: 'Aktivieren Sie dieses Konto standardmäßig nach jeder Anmeldung', ignorePersonalAccount: 'Aktivieren Sie dieses Kontrollkästchen, wenn Sie dieses Konto nicht außerhalb eines Organisationskontos verwenden möchten', @@ -317,8 +345,8 @@ Peut valoir 'anonym', 'authentifiziert' oder 'admin'.`, org: 'Sie können diese Einladung im Namen einer Organisation akzeptieren, für die Sie Administrator sind, oder eine neue Organisation erstellen und die Einladung im Namen der Organisation akzeptieren.', createOrg: 'eine neue Organisation erstellen', newOrgName: 'Name der neuen Organisation', - create: 'erstellen', - acceptAs: 'akzeptieren im Namen von {name}' + create: 'Erstellen', + acceptAs: 'Akzeptieren im Namen von {name}' }, changeHost: { msg1: 'Das Konto {email} existiert nicht auf {host}, aber es existiert auf {mainHost}.', @@ -434,7 +462,7 @@ Falls Sie Probleme mit Ihrem Konto haben oder diese Einladung verdächtig finden Sie wurden von einem Administrator der {organization} eingeladen, ihr beizutreten. Um diese Einladung anzunehmen, klicken Sie auf die Schaltfläche unten. Der Link ist 10 Tage lang gültig. Wenn Sie noch kein Konto haben, wird es automatisch erstellt. `, - htmlButton: 'Nehmen Sie die Einladung an', + htmlButton: 'Einladung annehmen', htmlAlternativeLink: 'Wenn die obige Schaltfläche nicht funktioniert, können Sie diesen Link in die Adressleiste Ihres Browsers kopieren:', htmlCaption: 'Wenn Sie ein Problem mit Ihrem Konto haben oder diese Einladung verdächtig finden, kontaktieren Sie uns bitte unter {contact}.' }, @@ -452,7 +480,7 @@ Falls Sie Probleme mit Ihrem Konto haben oder diese Einladung verdächtig finden Sie wurden von einem Administrator der {organization} eingeladen, ihr beizutreten auf {host} um auf {secondaryHost} zuzugreifen. Um diese Einladung anzunehmen, klicken Sie auf die Schaltfläche unten. Der Link ist 10 Tage lang gültig. Wenn Sie noch kein Konto haben, wird es automatisch erstellt. `, - htmlButton: 'Nehmen Sie die Einladung an', + htmlButton: 'Einladung annehmen', htmlAlternativeLink: 'Wenn die obige Schaltfläche nicht funktioniert, können Sie diesen Link in die Adressleiste Ihres Browsers kopieren:', htmlCaption: 'Wenn Sie ein Problem mit Ihrem Konto haben oder diese Einladung verdächtig finden, kontaktieren Sie uns bitte unter {contact}.' }, @@ -483,7 +511,7 @@ Wenn Sie auf ein Problem mit Ihrem Konto stoßen oder Sie diese Nachricht verdä htmlMsg: ` Auf dieser Adresse wurde eine Aktion ausgelöst, die eine Bestätigung per E-Mail verlangt. Um diese Aktion zu bestätigen, klicken Sie auf die Schaltfläche unten. Der Link ist 15 Minuten lang gültig. `, - htmlButton: 'Validieren Sie', + htmlButton: 'Validieren', htmlAlternativeLink: 'Wenn die obige Schaltfläche nicht funktioniert, können Sie diesen Link in die Adressleiste Ihres Browsers kopieren:', htmlCaption: 'Wenn Sie auf ein Problem mit Ihrem Konto stoßen oder diese Nachricht verdächtig finden, kontaktieren Sie uns bitte unter {contact}.' }, diff --git a/api/i18n/en.js b/api/i18n/en.js index bdb6039f..93ae969a 100644 --- a/api/i18n/en.js +++ b/api/i18n/en.js @@ -7,6 +7,7 @@ export default { description: 'Easy users and organizations management for modern Web-oriented architectures.' }, common: { + manageNotifications: 'Manage notifications', home: 'Home', logLink: 'login / sign up', logout: 'logout', @@ -29,6 +30,10 @@ export default { id: 'Identifier', name: 'Name', save: 'Save', + send: 'Send', + load: 'Upload', + active: 'active', + inactive: 'inactive', members: 'Members', orgStorageMembers: 'Members in secondary storage', role: 'Role', @@ -47,6 +52,7 @@ export default { confirmDeleteTitle: 'Delete {name}', confirmDeleteMsg: 'Do you really want to delete this resource ? Data will not be recoverable.', editTitle: 'Edit {name}', + seeTitle: 'View {name}', loggedAt: 'Logged at', createdAt: 'Created on', createdPhrase: 'Created by {name} on {date}', @@ -59,6 +65,10 @@ export default { back: 'Back', next: 'Next', password: 'Password', + showPassword: 'Show password', + hidePassword: 'Hide password', + passwordShown: 'Your password is visible', + passwordHidden: 'Your password is hidden', checkInbox: 'Check your mail box', spamWarning: 'If you didn\'t receive an email, check if it was classified as spam in your mail box.', validate: 'Validate', @@ -183,12 +193,27 @@ Can be 'anonymous', 'authenticated' or 'admin'.`, }, sites: { createSite: 'Define a new site', + loginOnSite: 'Sign in on the site', colorWarnings: 'Contrast warnings' }, + passwordLists: { + help1: 'You can upload password lists from CSV files. Those too well known passwords will then be rejected if users try to use them.', + help2: 'You can find password list files on the internet, for example on the {secLists} project or the {richelieu} project for a French list.', + newFile: 'New password file (one password per line)', + subtitle: '{state} - {date} - {count} passwords', + confirmDelete: 'Delete this password list?' + }, site: { title: 'Site configuration' } }, + contact: { + title: 'Contact us', + from: 'Your email address', + subject: 'Subject', + text: 'Your request', + sent: 'Your request has been sent' + }, login: { title: 'Identify yourself', emailLabel: 'Your email address', @@ -216,8 +241,8 @@ Can be 'anonymous', 'authenticated' or 'admin'.`, adminMode: 'Confirm your identity to switch to admin mode.', adminModePromptTitle: 'Admin mode', adminModePromptMsg: 'Your account is a super-administrator account. Do you want to activate admin mode for this session?', - adminModePromptAccept: 'admin mode', - adminModePromptDecline: 'normal session', + adminModePromptAccept: 'Admin mode', + adminModePromptDecline: 'Normal session', oauth: 'Connect with:', error: 'Error', rememberMe: 'remember me', @@ -285,14 +310,17 @@ Can be 'anonymous', 'authenticated' or 'admin'.`, msgDifferentUser: 'This invitation to become member of an organization has been validated. You can login with the invited account.' }, avatar: { - load: 'load a new avatar', + loadUser: 'Load your avatar', + loadOrganization: 'Load an organization avatar', + loadDepartment: 'Load an avatar ({departmentLabel})', prepare: 'Prepare the image' }, me: { - noOrganization: 'Your are not a member in any organization.', + emailNotEditable: 'This address cannot be changed.', + noOrganization: 'You are not a member of any organization.', operations: 'Sensitive operations', deleteMyself: 'Delete this account', - deleteMyselfAlert: 'If your delete your account you will have a {plannedDeletionDelay} days delay after which all associated data will be deleted and will not be recoverable.', + deleteMyselfAlert: 'If you delete your account you will have a {plannedDeletionDelay} days delay after which all associated data will be deleted and will not be recoverable.', deleteMyselfCheck: 'check and click on OK to confirm the deletion of the user {name} and all its data.', accountChanges: 'Managing account switching', defaultOrg: 'Activate this account by default after each login', @@ -317,8 +345,8 @@ Can be 'anonymous', 'authenticated' or 'admin'.`, org: 'You can accept this invitation on behalf of an organization you administer, or create a new organization and accept the invitation on its behalf.', createOrg: 'create a new organization', newOrgName: 'name of the new organization', - create: 'create', - acceptAs: 'accept on behalf of {name}' + create: 'Create', + acceptAs: 'Accept on behalf of {name}' }, changeHost: { msg1: 'The account {email} does not exist on {host} but exists on {mainHost}.', diff --git a/api/i18n/es.js b/api/i18n/es.js index 0b76e5b1..4cf55ce9 100644 --- a/api/i18n/es.js +++ b/api/i18n/es.js @@ -7,6 +7,7 @@ export default { description: 'Gestión simplificada de sus usuarios y organizaciones en una moderna arquitectura orientada a la web.' }, common: { + manageNotifications: 'Gestionar las notificaciones', home: 'Página inicial', logLink: 'Iniciar sesión / Registrarse', logout: 'Desconectarse', @@ -29,6 +30,10 @@ export default { id: 'Nombre de usuario', name: 'Apellido', save: 'Grabar', + send: 'Enviar', + load: 'Cargar', + active: 'activo', + inactive: 'inactivo', members: 'Miembros', orgStorageMembers: 'Miembros en almacenamiento secundario', role: 'Papel', @@ -47,6 +52,7 @@ export default { confirmDeleteTitle: 'Eliminar {name}', confirmDeleteMsg: '¿Estás seguro de que deseas eliminar este recurso? Tenga en cuenta que los datos no se pueden recuperar.', editTitle: 'Modificar {name}', + seeTitle: 'Ver {name}', loggedAt: 'Último acceso', createdAt: 'Creó el', createdPhrase: 'Creado por {name} el {date}', @@ -59,6 +65,10 @@ export default { back: 'Regreso', next: 'Próximo', password: 'Contraseña', + showPassword: 'Mostrar la contraseña', + hidePassword: 'Ocultar la contraseña', + passwordShown: 'Su contraseña está visible', + passwordHidden: 'Su contraseña está oculta', checkInbox: 'Revisa tu correo', spamWarning: 'Si no ha recibido un correo electrónico, compruebe que no se haya clasificado automáticamente como spam.', validate: 'Validar', @@ -166,7 +176,7 @@ Puede ser 'anonymous', 'authenticated' o 'admin'.`, noCreatedOrgsLimit: 'Los usuarios pueden crear cualquier número de organizaciones.', createdOrgsLimit: 'Los usuarios pueden crear {defaultMaxCreatedOrgs} organizacione(s) predeterminadas.', explainLimit: 'Establezca un valor para limitar la cantidad de organizaciones que este usuario puede crear. -1 para un número no especificado. Vacíe el campo para volver al valor predeterminado ({defaultMaxCreatedOrgs}).', - editUserEmailTitle: 'Cambiar la dirección de correo electrónico del usuario {nombre}', + editUserEmailTitle: 'Cambiar la dirección de correo electrónico del usuario {name}', editUserEmailText: '¡Advertencia! El correo electrónico es una clave de usuario importante, al modificar esta información, corre el riesgo de insertar una dirección incorrecta, no funcional o inconsistente con otras entradas. Esta función solo se presenta a los administradores para desbloquear a un usuario cuyo buzón se vuelve inaccesible.', drop2FATitle: 'Desactivar la autenticación de dos factores', transferTitle: 'Transferir el usuario {name} a otro sitio', @@ -183,12 +193,27 @@ Puede ser 'anonymous', 'authenticated' o 'admin'.`, }, sites: { createSite: 'Definir un nuevo sitio', + loginOnSite: 'Iniciar sesión en el sitio', colorWarnings: 'Advertencias de contraste' }, + passwordLists: { + help1: 'Puede cargar listas de contraseñas a partir de archivos CSV. Esas contraseñas demasiado conocidas serán rechazadas si los usuarios intentan utilizarlas.', + help2: 'Puede encontrar archivos de listas de contraseñas en internet, por ejemplo en el proyecto {secLists} o el proyecto {richelieu} para una lista francesa.', + newFile: 'Nuevo archivo de contraseñas (una contraseña por línea)', + subtitle: '{state} - {date} - {count} contraseñas', + confirmDelete: '¿Eliminar esta lista de contraseñas?' + }, site: { title: 'Configuración del sitio' } }, + contact: { + title: 'Contáctenos', + from: 'Su dirección de correo electrónico', + subject: 'Asunto', + text: 'Su solicitud', + sent: 'Su solicitud ha sido enviada' + }, login: { title: 'Identifícate', emailLabel: 'Tu correo electrónico', @@ -202,7 +227,7 @@ Puede ser 'anonymous', 'authenticated' o 'admin'.`, newPasswordMsg: 'Ingrese la nueva contraseña dos veces.', changePasswordSent: 'Se ha enviado un correo electrónico a la dirección {email}. Este correo electrónico contiene un enlace para cambiar la contraseña asociada con su cuenta.', passwordlessMsg1: 'Para conectar un correo electrónico es suficiente.', - passwordlessMsg2: 'Envíe un correo electrónico de inicio de sesión.', + passwordlessMsg2: 'Enviar un correo electrónico de inicio de sesión.', passwordlessConfirmed: 'Se ha enviado un correo electrónico a la dirección {email}. Este correo electrónico contiene un enlace para conectarse a nuestra plataforma.', createUserMsg1: 'Si aún no ha iniciado sesión en nuestra plataforma, cree una cuenta.', createUserMsg2: 'Crear una cuenta', @@ -216,8 +241,8 @@ Puede ser 'anonymous', 'authenticated' o 'admin'.`, adminMode: 'Confirme su identidad para cambiar al modo de administración.', adminModePromptTitle: 'Modo administración', adminModePromptMsg: 'Su cuenta es una cuenta de superadministrador. ¿Desea activar el modo administración para esta sesión?', - adminModePromptAccept: 'modo administración', - adminModePromptDecline: 'sesión normal', + adminModePromptAccept: 'Modo administración', + adminModePromptDecline: 'Sesión normal', oauth: 'Conectar con:', error: 'Error', rememberMe: 'recordarme', @@ -285,15 +310,18 @@ Puede ser 'anonymous', 'authenticated' o 'admin'.`, msgDifferentUser: 'Esta invitación a ser miembro de una organización ha sido aceptada. Usted puede iniciar sesión con la cuenta de invitado.' }, avatar: { - load: 'cargar un nuevo avatar', - prepare: 'Prepara la imagen' + loadUser: 'Cargar su avatar', + loadOrganization: 'Cargar un avatar de organización', + loadDepartment: 'Cargar un avatar ({departmentLabel})', + prepare: 'Preparar la imagen' }, me: { + emailNotEditable: 'Esta dirección no se puede modificar.', noOrganization: 'No eres miembro de ninguna organización.', operations: 'Operaciones sensibles', deleteMyself: 'Eliminar esta cuenta', - deleteMyselfAlert: 'Si elimina su cuenta, los datos asociados también serán eliminados y no podrán ser recuperados.', - deleteMyselfCheck: 'marque esta casilla y haga clic en OK para confirmar la eliminación.', + deleteMyselfAlert: 'Si elimina su cuenta de usuario, dispondrá de un plazo de {plannedDeletionDelay} días para cancelar la operación, tras lo cual todos los datos asociados serán eliminados y no podrán ser recuperados.', + deleteMyselfCheck: 'marque esta casilla y haga clic en OK para confirmar la eliminación del usuario {name} y de todos sus datos.', accountChanges: 'Gestionar el cambio de cuenta', defaultOrg: 'Activar esta cuenta por defecto después de cada inicio de sesión', ignorePersonalAccount: 'Marque esta casilla si no desea utilizar esta plataforma fuera de una cuenta de organización', @@ -317,8 +345,8 @@ Puede ser 'anonymous', 'authenticated' o 'admin'.`, org: 'Puede aceptar esta invitación en nombre de una organización de la que sea administrador, o bien crear una nueva organización y aceptar la invitación en su nombre.', createOrg: 'crear una nueva organización', newOrgName: 'nombre de la nueva organización', - create: 'crear', - acceptAs: 'aceptar en nombre de {name}' + create: 'Crear', + acceptAs: 'Aceptar en nombre de {name}' }, changeHost: { msg1: 'La cuenta {email} no existe en {host} pero sí existe en {mainHost}.', @@ -397,7 +425,7 @@ Se ha realizado una solicitud de identificación de {host}. Para confirmarlo, co Si tiene un problema con su cuenta o si no ha solicitado iniciar sesión en {host}, no dude en contactarnos en {contact}. `, htmlMsg: 'Se ha realizado una solicitud de identificación desde {host}. Para confirmarlo, haga clic en el botón de abajo. El enlace es válido por 15 minutos.', - htmlButton: 'Conectado a {host}', + htmlButton: 'Conexión a {host}', htmlAlternativeLink: 'Si el botón de arriba no funciona, puede copiar este enlace en la barra de direcciones de su navegador:', htmlCaption: 'Si tiene un problema con su cuenta o no ha solicitado iniciar sesión en {host}, no dudes en contactarnos en {contact}.' }, @@ -435,7 +463,7 @@ Si tiene un problema con su cuenta o encuentra esta invitación sospechosa, no d Un administrador de la organización {organization} lo ha invitado a unirse. Para aceptar esta invitación, haga clic en el botón de abajo. El enlace es válido por 10 días. Si aún no tiene una cuenta, se creará automáticamente. `, - htmlButton: 'Aceptar la invitacion', + htmlButton: 'Aceptar la invitación', htmlAlternativeLink: 'Si el botón de arriba no funciona, puede copiar este enlace en la barra de direcciones de su navegador:', htmlCaption: 'Si tiene un problema con su cuenta o encuentra esta invitación sospechosa, no dude en contactarnos en {contact}.' }, @@ -453,7 +481,7 @@ Si tiene un problema con su cuenta o encuentra esta invitación sospechosa, no d Un administrador de la organización {organization} lo ha invitado a unirse en {host} para acceder a {secondaryHost}. Para aceptar esta invitación, haga clic en el botón de abajo. El enlace es válido por 10 días. Si aún no tiene una cuenta, se creará automáticamente. `, - htmlButton: 'Aceptar la invitacion', + htmlButton: 'Aceptar la invitación', htmlAlternativeLink: 'Si el botón de arriba no funciona, puede copiar este enlace en la barra de direcciones de su navegador:', htmlCaption: 'Si tiene un problema con su cuenta o encuentra esta invitación sospechosa, no dude en contactarnos en {contact}.' }, diff --git a/api/i18n/fr.js b/api/i18n/fr.js index 87c15d1f..5afae6bf 100644 --- a/api/i18n/fr.js +++ b/api/i18n/fr.js @@ -7,6 +7,7 @@ export default { description: 'Gestion simplifiée de vos utilisateurs et vos organisations dans une architecture moderne orientée Web.' }, common: { + manageNotifications: 'Gérer les notifications', home: 'Accueil', logLink: 'Se connecter / s\'inscrire', logout: 'Se déconnecter', @@ -29,6 +30,10 @@ export default { id: 'Identifiant', name: 'Nom', save: 'Enregistrer', + send: 'Envoyer', + load: 'Charger', + active: 'actif', + inactive: 'inactif', members: 'Membres', orgStorageMembers: 'Membres dans le stockage secondaire', role: 'Rôle', @@ -45,8 +50,9 @@ export default { accept: 'Accepter', reject: 'Rejeter', confirmDeleteTitle: 'Supprimer {name}', - confirmDeleteMsg: 'Êtes vous sur de vouloir supprimer cette ressource ? Attention les données ne pourront pas être récupérées.', - editTitle: 'Modifer {name}', + confirmDeleteMsg: 'Êtes-vous sûr de vouloir supprimer cette ressource ? Attention les données ne pourront pas être récupérées.', + editTitle: 'Modifier {name}', + seeTitle: 'Voir {name}', loggedAt: 'Dernier login', createdAt: 'Créé le', createdPhrase: 'Créé par {name} le {date}', @@ -59,7 +65,11 @@ export default { back: 'Retour', next: 'Suivant', password: 'Mot de passe', - checkInbox: 'Vérifiez votre boite mail', + showPassword: 'Afficher le mot de passe', + hidePassword: 'Masquer le mot de passe', + passwordShown: 'Votre mot de passe est visible', + passwordHidden: 'Votre mot de passe est masqué', + checkInbox: 'Vérifiez votre boîte mail', spamWarning: 'Si vous n\'avez pas reçu de mail, vérifiez qu\'il n\'a pas été classé automatiquement en tant que spam.', validate: 'Valider', delete: 'Supprimer', @@ -79,10 +89,10 @@ export default { settings: 'paramètres', emailConfirmed: 'création finalisée', emailNotConfirmed: 'création non finalisée', - noRole: 'aucun role', + noRole: 'aucun rôle', downloadCsv: 'télécharger la liste au format CSV', authMode: 'Mode d\'authentification', - authProviders: 'Fournisseurs d\'identitié', + authProviders: 'Fournisseurs d\'identité', partners: 'Organisations partenaires', contactEmail: 'Email de contact', orgName: 'Nom de l\'organisation', @@ -93,7 +103,7 @@ export default { oauthTokens: 'Jetons OAUTH', plannedDeletion: 'Suppression programmée', plannedDeletionShort: 'Suppr prog', - owner: 'Propriéraire', + owner: 'Propriétaire', passwordLists: 'Mots de passe', adminGlobal: 'Administration générale', adminSite: 'Administration de site', @@ -142,18 +152,18 @@ Le type "mongo" dépend d'un accès à une base de données MongoDB, c'est le mo organizations: 'Uniquement pour storage.type=file. Le chemin du fichier JSON contenant les définitions d\'organisations' }, mongo: { - url: 'Uniquement pour storage.type=mongo. La chaine de connexion complète à la base de données mongodb.' + url: 'Uniquement pour storage.type=mongo. La chaîne de connexion complète à la base de données mongodb.' } }, mails: { transport: 'IMPORTANT. Un objet JSON de configuration du transport mail compatible avec la librairie nodemailer.', - from: '\'IMPORTANT. L\'adresse à renseigner comme expéditeur des mails émis par le service.' + from: 'IMPORTANT. L\'adresse à renseigner comme expéditeur des mails émis par le service.' }, listEntitiesMode: `Permet de restreindre de manière globale l'accès aux listes d'utilisateurs et d'organisations.
Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, defaultLoginRedirect: 'Redirection par défaut après login. Si non spécifié l\'utilisateur sera redirigé vers son profil.', onlyCreateInvited: 'Si vrai les utilisateurs ne seront pas créés au premier email envoyé. Ils doivent être invités dans une organisation.', - tosUrl: 'IMPORTANT. Une URL vers vos conditions générales d\'utilisation. Si ce paramètre n\'est pas défini et ne pointe pas vers une page Web correcte vous risquez de ne pas respecter vos obligations vis à vis de vos utilisateurs.' + tosUrl: 'IMPORTANT. Une URL vers vos conditions générales d\'utilisation. Si ce paramètre n\'est pas défini et ne pointe pas vers une page Web correcte vous risquez de ne pas respecter vos obligations vis-à-vis de vos utilisateurs.' } }, use: { @@ -165,38 +175,53 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, users: { noCreatedOrgsLimit: 'Les utilisateurs peuvent créer un nombre indéfini d\'organisations.', createdOrgsLimit: 'Les utilisateurs peuvent créer {defaultMaxCreatedOrgs} organisation(s) par défaut.', - explainLimit: 'Définissez une valeur pour limiter le nombre d\'organisations que cet utilisateur peut créer. -1 pour un nombre indéterminé. Videz le champs pour retomber sur la valeur par défaut ({defaultMaxCreatedOrgs}).', - editUserEmailTitle: 'Changez l\'adresse email de l\'utilisateur {name}', - editUserEmailText: 'Attention ! L\'email est une clé importante de l\'utilisateur, en modifiant cette information vous courez le risque d\'insérer une adresse erronée, non fonctionnelle ou incohérente avec d\'autres saisies. Cette fonctionnalité est présentée uniquement aux administrateurs pour débloquer un utilisateur dont la boite mail devient inaccessible.', + explainLimit: 'Définissez une valeur pour limiter le nombre d\'organisations que cet utilisateur peut créer. -1 pour un nombre indéterminé. Videz le champ pour retomber sur la valeur par défaut ({defaultMaxCreatedOrgs}).', + editUserEmailTitle: 'Modifier l\'adresse email de l\'utilisateur {name}', + editUserEmailText: 'Attention ! L\'email est une clé importante de l\'utilisateur, en modifiant cette information vous courez le risque d\'insérer une adresse erronée, non fonctionnelle ou incohérente avec d\'autres saisies. Cette fonctionnalité est présentée uniquement aux administrateurs pour débloquer un utilisateur dont la boîte mail devient inaccessible.', drop2FATitle: 'Effacer la configuration d\'authentification 2 facteurs de l\'utilisateur {name}', transferTitle: 'Transférer l\'utilisateur {name} vers un autre site', transferText: 'L\'utilisateur sera rattaché au site sélectionné. Ses identités SSO sont réinitialisées et il conserve ses appartenances aux organisations. Les comptes super-administrateurs ne peuvent pas être transférés.', transferTargetSite: 'Site cible', transferMainSite: 'Site principal', - drop2FAExplain: 'Attention ! Cette opération est réservée au débloquage d\'un utilisateur qui a à la fois perdu son appareil et son code de récupération pour l\'authentification 2 facteurs. Avant de continuer il est fortement recommandé de s\'assurer d\'une manière ou d\'une autre de l\'identité de la personne qui fait la demande (contacter un collègue membre d\'une même organisation par exemple).', + drop2FAExplain: 'Attention ! Cette opération est réservée au déblocage d\'un utilisateur qui a à la fois perdu son appareil et son code de récupération pour l\'authentification 2 facteurs. Avant de continuer il est fortement recommandé de s\'assurer d\'une manière ou d\'une autre de l\'identité de la personne qui fait la demande (contacter un collègue membre d\'une même organisation par exemple).', }, organizations: { - limitOrganizationTitle: 'Modifiez les limites de l\'organisation', + limitOrganizationTitle: 'Modifier les limites de l\'organisation', members: 'membre(s)', nbMembers: 'Nombre maximal de membres (0 pour aucune limite)', fromCache: 'Dernière synchronisation de cette liste avec le fournisseur d\'identités : ' }, sites: { createSite: 'Déclarer un nouveau site', + loginOnSite: 'Se connecter sur le site', colorWarnings: 'Avertissements de contraste', }, + passwordLists: { + help1: 'Vous pouvez charger des listes de mots de passe à partir de fichiers CSV. Ces mots de passe trop connus seront alors rejetés si des utilisateurs tentent de les utiliser.', + help2: 'Vous pouvez trouver des fichiers de listes de mots de passe sur internet, par exemple sur le projet {secLists} ou le projet {richelieu} pour une liste française.', + newFile: 'Nouveau fichier de mots de passe (un mot de passe par ligne)', + subtitle: '{state} - {date} - {count} mots de passe', + confirmDelete: 'Supprimer cette liste de mots de passe ?' + }, site: { title: 'Configuration du site' } }, + contact: { + title: 'Nous contacter', + from: 'Votre adresse email', + subject: 'Sujet', + text: 'Votre demande', + sent: 'Votre demande a été envoyée' + }, login: { - title: 'Identifiez vous', + title: 'Identifiez-vous', emailLabel: 'Adresse mail', emailCaption: 'En savoir plus sur l\'authentification sans mot de passe', success: 'Vous allez recevoir un email à l\'adresse renseignée qui contiendra un lien. Veuillez ouvrir ce lien pour terminer votre identification.', - maildevLink: 'Accédez à la boite mail de développement', + maildevLink: 'Accéder à la boîte mail de développement', newPassword: 'Nouveau mot de passe', - newPassword2: 'Confirmez le nouveau mot de passe', + newPassword2: 'Confirmation du nouveau mot de passe', changePassword: 'Renouveler le mot de passe', changePasswordTooltip: 'En cas d\'oubli de votre mot de passe ou de besoin de modification de celui-ci, renouvelez votre mot de passe.', newPasswordMsg: 'Saisissez 2 fois le nouveau mot de passe.', @@ -207,7 +232,7 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, createUserMsg1: 'Si vous ne vous êtes pas encore connecté à notre plateforme veuillez créer un compte.', createUserMsg2: 'Créer un compte', createUserInvit: 'Créez un compte pour accepter l\'invitation dans l\'organisation {name}', - createUserOrganization: 'Souhaitez vous créer une organisation ?', + createUserOrganization: 'Souhaitez-vous créer une organisation ?', createUserOrganizationHelp: 'Si vous créez une organisation vous pourrez inviter d\'autres utilisateurs à vous rejoindre et à partager vos ressources.', tosMsg: 'Avant de créer votre compte veuillez prendre connaissance de nos conditions générales d\'utilisation.', tosConfirm: 'Je confirme avoir lu les conditions générales d\'utilisation pour ce site.', @@ -216,9 +241,9 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, adminMode: 'Confirmez votre identité pour passer en mode administration.', adminModePromptTitle: 'Mode administration', adminModePromptMsg: 'Votre compte est un compte de super-administrateur. Souhaitez-vous activer le mode administration pour cette session ?', - adminModePromptAccept: 'mode administration', - adminModePromptDecline: 'session normale', - oauth: 'Connectez vous avec :', + adminModePromptAccept: 'Mode administration', + adminModePromptDecline: 'Session normale', + oauth: 'Connectez-vous avec :', error: 'Erreur', rememberMe: 'se souvenir de moi', '2FACode': 'Code à 6 chiffres ou code de récupération', @@ -251,11 +276,11 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, memberReadOnly: 'L\'appartenance de cet utilisateur à l\'organisation est issue d\'un fournisseur d\'identité et ne peut pas être modifiée ici.', confirmEditMemberTitle: 'Modifier {name}', confirmDeleteMemberTitle: 'Exclure {name}', - confirmDeleteMemberMsg: 'Voulez vous vraiment supprimer cet utilisateur de la liste des membres de l\'organisation {org} ?', + confirmDeleteMemberMsg: 'Voulez-vous vraiment supprimer cet utilisateur de la liste des membres de l\'organisation {org} ?', deleteMemberSuccess: 'L\'utilisateur {name} a été exclu de l\'organisation', inviteEmail: 'Adresse mail de l\'utilisateur', inviteSuccess: 'Une invitation a été envoyée à l\'adresse {email}', - invitePartnerSuccess: 'Une invitation a été envoyé à l\'adresse {email}', + invitePartnerSuccess: 'Une invitation a été envoyée à l\'adresse {email}', memberConflict: 'Cet utilisateur est déjà membre', departmentLabelTitle: 'Libellé du concept "département"', departmentLabelHelp: 'Laissez vide pour afficher "{defaultDepartmentLabel}". Renseignez pour utiliser un autre vocabulaire comme "service", "agence", etc.', @@ -264,7 +289,7 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, deleteDepartment: 'Supprimer {departmentLabel}', confirmEditDepartmentTitle: 'Modifier {name}', confirmDeleteDepartmentTitle: 'Supprimer {name}', - confirmDeleteDepartmentMsg: 'Voulez vous vraiment supprimer {name} de votre organisation ?', + confirmDeleteDepartmentMsg: 'Voulez-vous vraiment supprimer {name} de votre organisation ?', deleteDepartmentHasMembers: 'Ce département est affecté à {count} membre(s) de l\'organisation. Vous ne pouvez pas le supprimer avant d\'avoir corrigé cette situation.', departmentIdInvalid: 'L\'identifiant ne doit contenir que des lettres, nombres et espaces.', inviteLink: 'En cas de problème dans la communication par email vous pouvez envoyer le lien de confirmation ci-dessous par un autre moyen. Attention ! Vous risquez d\'insérer dans la base utilisateur une adresse mail erronée ou non fonctionnelle. Cette adresse mail pourra poser de multiples problèmes par la suite : changement de mot de passe, envoi d\'alertes, etc.', @@ -275,7 +300,7 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, deletePartner: 'Supprimer ce partenaire', depSortCreation: 'Derniers créés', depSortAlpha: 'Ordre alphabétique', - deletePartnerWarning: 'Attention les permissions accordées à l\'organisation partenaire ne seront pas modifiées par cette opération. Vous devriez probablement aller les modifier vous même.', + deletePartnerWarning: 'Attention les permissions accordées à l\'organisation partenaire ne seront pas modifiées par cette opération. Vous devriez probablement aller les modifier vous-même.', fromCache: 'Dernière synchronisation de cette liste avec le fournisseur d\'identités : {fromNow}.', roleLabel: 'Libellé du rôle "{role}"' }, @@ -285,15 +310,18 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, msgDifferentUser: 'Cette invitation à être membre d\'une organisation a bien été acceptée. Vous pouvez vous connecter avec le compte invité.' }, avatar: { - load: 'chargez un nouvel avatar', - prepare: 'Préparez l\'image' + loadUser: 'Charger votre avatar', + loadOrganization: 'Charger un avatar d\'organisation', + loadDepartment: 'Charger un avatar ({departmentLabel})', + prepare: 'Préparer l\'image' }, me: { + emailNotEditable: 'Cette adresse ne peut pas être modifiée.', noOrganization: 'Vous n\'êtes membre d\'aucune organisation.', operations: 'Opérations sensibles', deleteMyself: 'Supprimer l\'utilisateur {name}', deleteMyselfAlert: 'Si vous supprimez votre compte utilisateur vous disposerez d\'un délai de {plannedDeletionDelay} jours pour annuler l\'opération, après quoi toutes les données associées seront supprimées et ne pourront plus être récupérées.', - deleteMyselfCheck: 'cochez cette case et cliquez sur OK pour confirmer la suppression de l\'utilisateur {name} et toutes ses données.', + deleteMyselfCheck: 'cochez cette case et cliquez sur OK pour confirmer la suppression de l\'utilisateur {name} et de toutes ses données.', accountChanges: 'Gestion des changements de compte', defaultOrg: 'Activer ce compte par défaut à chaque connexion', ignorePersonalAccount: 'Cochez cette case si vous ne souhaitez jamais utiliser la plateforme en dehors d\'une organisation', @@ -317,13 +345,13 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, org: 'Vous pouvez accepter cette invitation au nom d\'une organisation dont vous êtes administrateur, ou bien créer une nouvelle organisation et accepter l\'invitation en son nom.', createOrg: 'créer une nouvelle organisation', newOrgName: 'nom de la nouvelle organisation', - create: 'créer', - acceptAs: 'accepter au nom de {name}' + create: 'Créer', + acceptAs: 'Accepter au nom de {name}' }, changeHost: { msg1: 'Le compte {email} n\'existe pas sur {host} mais il existe sur {mainHost}.', sso1: 'Solution : utiliser {mainHost} pour se connecter', - sso2: 'La page de login propose un bouton pour se connecter depuis {mainHost} que vous pouvez utiliser. Vous pouvez aussi utiliser ce lien..', + sso2: 'La page de login propose un bouton pour se connecter depuis {mainHost} que vous pouvez utiliser. Vous pouvez aussi utiliser ce lien.', solution1: 'Solution : déplacer le compte vers {host}', solution2: 'Si vous choisissez cette solution vous perdrez la possibilité de vous connecter à {mainHost}.', confirmMigration: 'déplacer le compte vers {host} et perdre l\'accès à {mainHost}' @@ -336,7 +364,7 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, }, errors: { badEmail: 'Adresse mail non renseignée ou malformée.', - badProviderInvitEmail: 'L\'adresse mail que vous venez d\'utiliser pour vous connecter ne correspond pas à celle de l\'invitation que vous avez reçu', + badProviderInvitEmail: 'L\'adresse mail que vous venez d\'utiliser pour vous connecter ne correspond pas à celle de l\'invitation que vous avez reçue', maxCreatedOrgs: 'L\'utilisateur ne peut pas créer plus d\'organisations. Quota atteint.', permissionDenied: 'Permissions insuffisantes.', nonEmptyOrganization: 'Il faut supprimer les autres membres de l\'organisation', @@ -351,7 +379,7 @@ Peut valoir 'anonymous', 'authenticated' ou 'admin'.`, invalidToken: 'Le jeton n\'est pas valide. Il est peut-être périmé.', differentPasswords: 'Les mots de passe sont différents', noPasswordless: 'L\'authentification sans mot de passe n\'est pas acceptée par ce service.', - rateLimitAuth: 'Trop de tentatives dans un bref interval. Veuillez patienter avant d\'essayer de nouveau.', + rateLimitAuth: 'Trop de tentatives dans un bref intervalle. Veuillez patienter avant d\'essayer de nouveau.', invalidInvitationToken: 'Le lien d\'invitation que vous avez reçu est invalide.', expiredInvitationToken: 'Le lien d\'invitation que vous avez reçu est expiré, vous ne pouvez plus accepter cette invitation.', maxNbMembers: 'L\'organisation contient déjà le nombre maximal de membres autorisé par ses quotas.', @@ -495,7 +523,7 @@ Pour annuler cette suppression vous pouvez vous connecter à ce lien {link}. N'hésitez pas à nous contacter à {contact}. `, htmlMsg: 'L\'utilisateur {user} sera définitivement supprimé le {plannedDeletion} avec toutes les données qui lui sont associées. {cause}', - htmlButton: 'Connectez vous pour annuler la suppression', + htmlButton: 'Se connecter pour annuler la suppression', htmlAlternativeLink: 'Si le bouton ci-dessus ne fonctionne pas, vous pouvez copier ce lien dans la barre d\'adresse de votre navigateur :', htmlCaption: 'N\'hésitez pas à nous contacter à {contact}.', causeInactivity: 'Cette opération a été déclenchée automatiquement car ce compte est inactif depuis le {date}.' diff --git a/api/i18n/it.js b/api/i18n/it.js index c2123094..180973a7 100644 --- a/api/i18n/it.js +++ b/api/i18n/it.js @@ -7,6 +7,7 @@ export default { description: "Gestione semplificata dei suoi utenti e delle sue organizzazioni in un'architettura moderna orientata al web." }, common: { + manageNotifications: 'Gestire le notifiche', home: 'Pagina iniziale', logLink: 'Accesso / Registrazione', logout: 'Disconnettiti', @@ -29,6 +30,10 @@ export default { id: 'Login', name: 'Nome', save: 'Registrati a', + send: 'Inviare', + load: 'Caricare', + active: 'attivo', + inactive: 'inattivo', members: 'Membri', orgStorageMembers: 'Membri nello storage secondario', role: 'Ruolo', @@ -47,6 +52,7 @@ export default { confirmDeleteTitle: 'Cancellare {name}', confirmDeleteMsg: 'È sicuro di voler eliminare questa risorsa? Faccia attenzione, i dati non saranno recuperabili.', editTitle: 'Modificare {name}', + seeTitle: 'Visualizza {name}', loggedAt: 'Ultimo login', createdAt: 'Creato su', createdPhrase: 'Creato da {name} il {date}', @@ -59,6 +65,10 @@ export default { back: 'Ritorno', next: 'Avanti', password: 'Password', + showPassword: 'Mostra la password', + hidePassword: 'Nascondi la password', + passwordShown: 'La tua password è visibile', + passwordHidden: 'La tua password è nascosta', checkInbox: 'Controlla la tua casella di posta elettronica', spamWarning: 'Se non ha ricevuto alcuna e-mail, verifichi che non sia stata classificata automaticamente come spam.', validate: 'Convalidare', @@ -166,7 +176,7 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, noCreatedOrgsLimit: 'Gli utenti possono creare un numero qualsiasi di organizzazioni.', createdOrgsLimit: 'Gli utenti possono creare organizzazioni predefinite {defaultMaxCreatedOrgs}.', explainLimit: 'Impostare un valore per limitare il numero di organizzazioni che questo utente può creare. -1 per qualsiasi numero. Cancellare il campo per tornare al valore di default ({defaultMaxCreatedOrgs}).', - editUserEmailTitle: 'Cambia l\'indirizzo email dell\'utente {name}', + editUserEmailTitle: 'Cambiare l\'indirizzo email dell\'utente {name}', editUserEmailText: 'Attenzione! La posta elettronica è una chiave utente importante, modificando queste informazioni si corre il rischio di inserire un indirizzo errato, non funzionante o incoerente con altre voci. Questa funzione viene presentata solo agli amministratori per sbloccare un utente la cui casella di posta diventa inaccessibile.', drop2FATitle: 'Disattivare l\'autenticazione a due fattori', transferTitle: 'Trasferisci l\'utente {name} su un altro sito', @@ -183,18 +193,33 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, }, sites: { createSite: 'Definire un nuovo sito', + loginOnSite: 'Accedere al sito', colorWarnings: 'Avvertenze di contrasto' }, + passwordLists: { + help1: 'È possibile caricare elenchi di password da file CSV. Queste password troppo note verranno rifiutate se gli utenti tentano di utilizzarle.', + help2: 'È possibile trovare file di elenchi di password su internet, ad esempio sul progetto {secLists} o sul progetto {richelieu} per un elenco francese.', + newFile: 'Nuovo file di password (una password per riga)', + subtitle: '{state} - {date} - {count} password', + confirmDelete: 'Eliminare questo elenco di password?' + }, site: { title: 'Configurazione del sito' } }, + contact: { + title: 'Contattaci', + from: 'Il tuo indirizzo email', + subject: 'Oggetto', + text: 'La tua richiesta', + sent: 'La tua richiesta è stata inviata' + }, login: { title: 'Accedi al tuo conto', emailLabel: 'Il suo indirizzo e-mail', emailCaption: 'Per saperne di più sull\'autenticazione senza password', success: "Riceverà un'e-mail all'indirizzo fornito che conterrà un link. La preghiamo di aprire questo link per completare la sua identificazione.", - maildevLink: 'Vai alla mailbox di sviluppo', + maildevLink: 'Accedere alla mailbox di sviluppo', newPassword: 'Nuova password', newPassword2: 'Confermare la nuova password', changePassword: 'Rinnovare la password', @@ -202,35 +227,35 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, newPasswordMsg: 'Inserisca la nuova password due volte.', changePasswordSent: "Le è stata inviata un'e-mail all'indirizzo {email}. Questa e-mail contiene un link per modificare la password associata al suo conto.", passwordlessMsg1: "Tutto ciò di cui ha bisogno è un'e-mail per effettuare il login.", - passwordlessMsg2: "Invii un'e-mail di login.", + passwordlessMsg2: "Inviare un'e-mail di login.", passwordlessConfirmed: "Le è stata inviata un'e-mail all'indirizzo {email}. Questa e-mail contiene un link per accedere alla nostra piattaforma.", createUserMsg1: 'Se non ha ancora effettuato il login alla nostra piattaforma, crei un conto.', - createUserMsg2: 'Crea un account', + createUserMsg2: 'Creare un account', createUserInvit: 'Crea un account per accettare l\'invito nell\'organizzazione {name}', createUserOrganization: 'Vuoi creare un\'organizzazione?', createUserOrganizationHelp: 'Se crei un\'organizzazione potrai invitare altri utenti a unirsi e condividere risorse.', tosMsg: 'Prima di creare il tuo account leggi le nostre condizioni generali di utilizzo.', tosConfirm: "Confermo di aver letto i termini e le condizioni d'uso di questo sito.", - createUserConfirm: 'Crea un account', + createUserConfirm: 'Creare un account', createUserConfirmed: "Le è stata inviata un'e-mail all'indirizzo {email}. Questa e-mail contiene un link per convalidare la creazione del conto.", adminMode: 'Confermi la sua identità per entrare nella modalità di amministrazione.', adminModePromptTitle: 'Modalità amministrazione', adminModePromptMsg: 'Il tuo account è un account di superamministratore. Vuoi attivare la modalità amministrazione per questa sessione?', - adminModePromptAccept: 'modalità amministrazione', - adminModePromptDecline: 'sessione normale', + adminModePromptAccept: 'Modalità amministrazione', + adminModePromptDecline: 'Sessione normale', oauth: 'Effettuare il login con :', error: 'Errore', rememberMe: 'ricordami', '2FACode': 'codice a 6 cifre o codice di recupero', '2FAInfo': 'Inserisci un codice di verifica per continuare. Puoi ottenere questo codice dall\'applicazione di verifica sul tuo telefono. Se perdi il dispositivo, puoi usare il codice di recupero scaricato durante l\'impostazione dell\'autenticazione a due fattori.', - configure2FA: 'Configura l\'autenticazione a due fattori', + configure2FA: 'Configurare l\'autenticazione a due fattori', configure2FAQRCode: 'Codice QR per l\'impostazione dell\'autenticazione a due fattori', configure2FAQRCodeMsg: 'Scansiona questo codice QR con un\'applicazione di autenticazione di tua scelta (come Authy o Google Authenticator) quindi inserisci il codice a 6 cifre offerto da questa applicazione.', configure2FACode: 'codice a 6 cifre', recovery2FA: 'Codice di recupero', recovery2FAInfo: 'Attenzione! Conserva il codice di recupero sottostante in un luogo sicuro. Senza di esso, non sarai in grado di recuperare il tuo account se perdi il dispositivo su cui hai appena impostato l\'autenticazione a due fattori.', recovery2FACode: 'codice di recupero: ', - recovery2FADownload: 'scarica un file contenente il codice di recupero', + recovery2FADownload: 'scaricare un file contenente il codice di recupero', recovery2FAContent: 'Codice di recupero per l\'autenticazione a due fattori {name}', plannedDeletion: 'Cancellazione programmata', cancelDeletion: 'Annulla la cancellazione dell\'utente', @@ -249,7 +274,7 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, deleteMember: "Cancelli questo utente dall'elenco dei soci dell'organizzazione.", editMember: "Cambiare il ruolo di questo utente nell'organizzazione.", memberReadOnly: 'This user\'s membership to the organization comes from an identity provider and cannot be modified here.', - confirmEditMemberTitle: 'Modifica {name}', + confirmEditMemberTitle: 'Modificare {name}', confirmDeleteMemberTitle: 'Escludere {name}', confirmDeleteMemberMsg: "Vuole davvero eliminare questo utente dall'elenco dei soci dell'organizzazione {org}?", deleteMemberSuccess: "L'utente {name} è stato espulso dall'organizzazione`.", @@ -260,9 +285,9 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, departmentLabelTitle: 'Etichetta per il concetto "dipartimento"', departmentLabelHelp: 'Lasciare vuoto per visualizzare "{defaultDepartmentLabel}". Compilare per utilizzare un altro vocabolario come "servizio", "agenzia", ecc.', addDepartment: 'Creare {departmentLabel}', - editDepartment: 'Modifica {departmentLabel}', + editDepartment: 'Modificare {departmentLabel}', deleteDepartment: 'Cancellare {departmentLabel}', - confirmEditDepartmentTitle: 'Modifica {name}', + confirmEditDepartmentTitle: 'Modificare {name}', confirmDeleteDepartmentTitle: 'Cancellare {name}', confirmDeleteDepartmentMsg: 'Vuole davvero eliminare {name} dalla sua organizzazione?', deleteDepartmentHasMembers: 'Questo dipartimento è assegnato a {count} membro(i) dell\'organizzazione. Non è possibile eliminarlo in questo stato.', @@ -270,8 +295,8 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, inviteLink: 'In caso di problemi nella comunicazione via e-mail è possibile inviare il link di conferma sottostante con un altro mezzo. Avvertimento ! Rischi di inserire un indirizzo email errato o non funzionante nel database utenti. Questo indirizzo e-mail può causare più problemi in seguito: cambio di password, invio di avvisi, ecc.', '2FARoles': 'Autenticazione a due fattori.', '2FARolesMsg': 'Rendere obbligatoria l\'autenticazione a due fattori per gli utenti con questi ruoli:', - sendInvitationLink: 'Invia un altro link di invito', - addPartner: 'Invita un\'organizzazione partner', + sendInvitationLink: 'Inviare un altro link di invito', + addPartner: 'Invitare un\'organizzazione partner', deletePartner: 'Elimina questo partner', depSortCreation: 'Ultimo creato', depSortAlpha: 'Ordine alfabetico', @@ -285,15 +310,18 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, msgDifferentUser: 'L\'invito a far parte di un\'organizzazione è stato ben accolto. È possibile Accedi con l\'account dell\'ospite.' }, avatar: { - load: 'carica un nuovo avatar', + loadUser: 'Caricare il tuo avatar', + loadOrganization: 'Caricare un avatar dell\'organizzazione', + loadDepartment: 'Caricare un avatar ({departmentLabel})', prepare: 'Preparare l\'immagine.' }, me: { + emailNotEditable: 'Questo indirizzo non può essere modificato.', noOrganization: 'Lei non è membro di alcuna organizzazione.', operations: 'Operazioni sensibili', deleteMyself: 'Cancella questo account', - deleteMyselfAlert: 'Se si cancella il proprio account, anche i dati associati saranno cancellati e non potranno essere recuperati.', - deleteMyselfCheck: 'marque esta casilla y haga clic en OK para confirmar la eliminación.', + deleteMyselfAlert: 'Se si cancella il proprio account, si dispone di {plannedDeletionDelay} giorni per annullare l\'operazione, dopodiché tutti i dati associati saranno cancellati e non potranno essere recuperati.', + deleteMyselfCheck: 'selezionare questa casella e fare clic su OK per confermare la cancellazione dell\'utente {name} e di tutti i suoi dati.', accountChanges: 'Gestione dello switch di account', defaultOrg: 'Attiva questo account di default dopo ogni login', ignorePersonalAccount: 'Seleziona questa casella se non desideri utilizzare questa piattaforma al di fuori di un account organizzazione', @@ -317,8 +345,8 @@ Può essere 'anonimo', 'autenticato' o 'admin'.`, org: 'Puoi accettare questo invito a nome di un\'organizzazione di cui sei amministratore, oppure creare una nuova organizzazione e accettare l\'invito a suo nome.', createOrg: 'creare una nuova organizzazione', newOrgName: 'nome della nuova organizzazione', - create: 'creare', - acceptAs: 'accetta a nome di {name}' + create: 'Creare', + acceptAs: 'Accetta a nome di {name}' }, changeHost: { msg1: 'L\'account {email} non esiste su {host} ma esiste su {mainHost}.', @@ -435,7 +463,7 @@ Se incontrate problemi con il vostro account o trovate questo invito sospettoso, Siete stati invitati da un amministratore di {organization} a partecipare. Per accettare questo invito clicca il pulsante qui sotto. Il link è valido per 10 giorni. Se non si dispone ancora di un account, questo verrà creato automaticamente. `, - htmlButton: 'Accetta l\'invito', + htmlButton: 'Accettare l\'invito', htmlAlternativeLink: 'Se il pulsante di cui sopra non funziona, è possibile copiare questo link nella barra degli indirizzi del browser:', htmlCaption: 'Se incontrate un problema con il vostro conto o trovate questo invito sospettoso, contattateci a {contact}.' }, @@ -453,7 +481,7 @@ Se incontrate problemi con il vostro account o trovate questo invito sospettoso, Siete stati invitati da un amministratore di {organization} a partecipare su {host} per accedere a {secondaryHost}. Per accettare questo invito clicca il pulsante qui sotto. Il link è valido per 10 giorni. Se non si dispone ancora di un account, questo verrà creato automaticamente. `, - htmlButton: 'Accetta l\'invito', + htmlButton: 'Accettare l\'invito', htmlAlternativeLink: 'Se il pulsante di cui sopra non funziona, è possibile copiare questo link nella barra degli indirizzi del browser:', htmlCaption: 'Se incontrate un problema con il vostro conto o trovate questo invito sospettoso, contattateci a {contact}.' }, @@ -469,7 +497,7 @@ Se incontri un problema con il tuo account o trovi questo invito sospetto, conta htmlMsg: ` Un amministratore dell'organizzazione {organization} ti invita come contatto per l'organizzazione {partner} per unirsi su {host}. Per accettare questo invito, clicca il pulsante qui sotto. Il link è valido per 10 giorni. `, - htmlButton: 'Accetta l\'invito', + htmlButton: 'Accettare l\'invito', htmlAlternativeLink: 'Se il pulsante di cui sopra non funziona, è possibile copiare questo link nella barra degli indirizzi del browser:', htmlCaption: 'Se incontri un problema con il tuo account o trovi questo invito sospetto, contattaci a {contact}.' }, @@ -485,7 +513,7 @@ Se incontrate un problema con il vostro account o se trovate questo messaggio so htmlMsg: ` Su questo indirizzo è stata attivata un'azione che richiede una conferma via e-mail. Per convalidare questa azione cliccare sul pulsante qui sotto. Il link è valido per 15 minuti. `, - htmlButton: 'Convalida', + htmlButton: 'Convalidare', htmlAlternativeLink: 'Se il pulsante di cui sopra non funziona, è possibile copiare questo link nella barra degli indirizzi del browser:', htmlCaption: 'Se incontrate un problema con il vostro account o trovate questo messaggio sospetto, contattateci a {contact}.' }, @@ -499,7 +527,7 @@ Per annullare la cancellazione è possibile accedere qui {link}. Non esitate a contattarci a {contact}. `, htmlMsg: 'L\'utente {user} e tutti i dati ad esso relativi saranno cancellati il {plannedDeletion}. {cause}', - htmlButton: 'Accedi per annullare la cancellazione', + htmlButton: 'Accedere per annullare la cancellazione', htmlAlternativeLink: 'Se il pulsante non funziona, è possibile copiare/incollare questo link nella barra degli indirizzi del browser:', htmlCaption: 'Se si riscontrano problemi con il proprio account o se si ritiene che questo messaggio sia sospetto, non esitate a contattarci a {contact}.', causeInactivity: 'Questa operazione è stata attivata automaticamente perché questo account è inattivo dal {date}.' diff --git a/api/i18n/pt.js b/api/i18n/pt.js index 5d40abe4..dd54c413 100644 --- a/api/i18n/pt.js +++ b/api/i18n/pt.js @@ -7,6 +7,7 @@ export default { description: 'Uma gestão simplificada dos seus utilizadores e organizações numa arquitectura moderna orientada para a web.' }, common: { + manageNotifications: 'Gerir as notificações', home: 'Página inicial', logLink: 'Login / Registo', logout: 'Sair', @@ -29,6 +30,10 @@ export default { id: 'Login', name: 'Nome', save: 'Registe-se', + send: 'Enviar', + load: 'Carregar', + active: 'ativo', + inactive: 'inativo', members: 'Membros', orgStorageMembers: 'Membros no armazenamento secundário', role: 'Papel', @@ -47,6 +52,7 @@ export default { confirmDeleteTitle: 'Apagar {name}', confirmDeleteMsg: 'Tem a certeza de que quer apagar este recurso? Tenha cuidado, os dados não serão recuperáveis.', editTitle: 'Modificar {name}', + seeTitle: 'Ver {name}', loggedAt: 'Último login', createdAt: 'Criado em', createdPhrase: 'Criado por {name} em {date}.', @@ -59,6 +65,10 @@ export default { back: 'Devolver', next: 'Próximo', password: 'Senha', + showPassword: 'Mostrar a senha', + hidePassword: 'Ocultar a senha', + passwordShown: 'A sua senha está visível', + passwordHidden: 'A sua senha está oculta', checkInbox: 'Verifique a sua caixa de correio', spamWarning: 'Se não recebeu nenhum e-mail, verifique se este não foi automaticamente classificado como spam.', validate: 'Validar', @@ -166,7 +176,7 @@ Pode ser 'anónimo', 'autenticado' ou 'administrador'.`, noCreatedOrgsLimit: 'Os utilizadores podem criar qualquer número de organizações.', createdOrgsLimit: 'Os utilizadores podem criar {defaultMaxCreatedOrgs} organização(ões) predefinida(s).', explainLimit: 'Definir um valor para limitar o número de organizações que este utilizador pode criar. -1 para qualquer número. Limpar o campo para voltar ao valor por defeito ({defaultMaxCreatedOrgs}).', - editUserEmailTitle: 'Altere o endereço de e-mail do usuário {name}', + editUserEmailTitle: 'Alterar o endereço de e-mail do usuário {name}', editUserEmailText: 'Aviso! O e-mail é uma chave de usuário importante, ao modificar essas informações você corre o risco de inserir um endereço incorreto, não funcional ou inconsistente com outras entradas. Este recurso é apresentado apenas aos administradores para desbloquear um usuário cuja caixa de correio se torna inacessível.', drop2FATitle: 'Desactivar a autenticação de dois fatores', transferTitle: 'Transferir o usuário {name} para outro site', @@ -183,12 +193,27 @@ Pode ser 'anónimo', 'autenticado' ou 'administrador'.`, }, sites: { createSite: 'Definir um novo site', + loginOnSite: 'Iniciar sessão no site', colorWarnings: 'Avisos de contraste' }, + passwordLists: { + help1: 'Pode carregar listas de palavras-passe a partir de ficheiros CSV. Estas palavras-passe demasiado conhecidas serão rejeitadas se os utilizadores tentarem utilizá-las.', + help2: 'Pode encontrar ficheiros de listas de palavras-passe na internet, por exemplo no projeto {secLists} ou no projeto {richelieu} para uma lista francesa.', + newFile: 'Novo ficheiro de palavras-passe (uma palavra-passe por linha)', + subtitle: '{state} - {date} - {count} palavras-passe', + confirmDelete: 'Eliminar esta lista de palavras-passe?' + }, site: { title: 'Configuração do site' } }, + contact: { + title: 'Contacte-nos', + from: 'O seu endereço de email', + subject: 'Assunto', + text: 'O seu pedido', + sent: 'O seu pedido foi enviado' + }, login: { title: 'Faça o login na sua conta', emailLabel: 'O seu endereço de e-mail', @@ -202,10 +227,10 @@ Pode ser 'anónimo', 'autenticado' ou 'administrador'.`, newPasswordMsg: 'Digite a nova senha duas vezes.', changePasswordSent: 'Foi-lhe enviado um e-mail para {email}. Este e-mail contém um link para alterar a senha associada à sua conta.', passwordlessMsg1: 'Tudo o que você precisa é de um e-mail para fazer o login.', - passwordlessMsg2: 'Envie um e-mail de login.', + passwordlessMsg2: 'Enviar um e-mail de login.', passwordlessConfirmed: 'Foi-lhe enviado um e-mail para {email}. Este e-mail contém um link para fazer login na nossa plataforma.', createUserMsg1: 'Se ainda não entrou na nossa plataforma, por favor crie uma conta.', - createUserMsg2: 'Crie uma conta', + createUserMsg2: 'Criar uma conta', createUserInvit: 'Create an account to accept the invitation in organization {name}', createUserOrganization: 'Do you want to create and organization ?', createUserOrganizationHelp: 'Se criar uma organização, poderá convidar outros utilizadores para se juntarem a si e partilharem recursos.', @@ -216,8 +241,8 @@ Pode ser 'anónimo', 'autenticado' ou 'administrador'.`, adminMode: 'Confirme a sua identidade para entrar no modo de administração.', adminModePromptTitle: 'Modo de administração', adminModePromptMsg: 'A sua conta é uma conta de superadministrador. Deseja ativar o modo de administração para esta sessão?', - adminModePromptAccept: 'modo de administração', - adminModePromptDecline: 'sessão normal', + adminModePromptAccept: 'Modo de administração', + adminModePromptDecline: 'Sessão normal', oauth: 'Faça login com :', error: 'Erro', rememberMe: 'lembrar-me', @@ -285,15 +310,18 @@ Pode ser 'anónimo', 'autenticado' ou 'administrador'.`, msgDifferentUser: 'Este convite para ser membro de uma organização foi bem aceite. Pode login com a conta de convidado.' }, avatar: { - load: 'carregar um novo avatar', + loadUser: 'Carregar o seu avatar', + loadOrganization: 'Carregar um avatar de organização', + loadDepartment: 'Carregar um avatar ({departmentLabel})', prepare: 'Preparar a imagem' }, me: { + emailNotEditable: 'Este endereço não pode ser alterado.', noOrganization: 'Não é membro de nenhuma organização.', operations: 'Operações sensíveis', deleteMyself: 'Apagar esta conta', - deleteMyselfAlert: 'Se apagar a sua conta, os dados associados também serão apagados e não poderão ser recuperados.', - deleteMyselfCheck: 'marque esta caixa e clique em OK para confirmar a eliminação.', + deleteMyselfAlert: 'Se apagar a sua conta, dispõe de um prazo de {plannedDeletionDelay} dias para cancelar a operação, após o qual todos os dados associados serão apagados e não poderão ser recuperados.', + deleteMyselfCheck: 'marque esta caixa e clique em OK para confirmar a eliminação do utilizador {name} e de todos os seus dados.', accountChanges: 'Gerir a alternância de contas', defaultOrg: 'Ativar esta conta por defeito após cada login', ignorePersonalAccount: 'Marque esta caixa se não pretender utilizar esta plataforma fora de uma conta de organização', @@ -317,8 +345,8 @@ Pode ser 'anónimo', 'autenticado' ou 'administrador'.`, org: 'Pode aceitar este convite em nome de uma organização da qual seja administrador, ou criar uma nova organização e aceitar o convite em seu nome.', createOrg: 'criar uma nova organização', newOrgName: 'nome da nova organização', - create: 'criar', - acceptAs: 'aceitar em nome de {name}' + create: 'Criar', + acceptAs: 'Aceitar em nome de {name}' }, changeHost: { msg1: 'A conta {email} não existe em {host} mas existe em {mainHost}.', @@ -399,7 +427,7 @@ Se tiver um problema com a sua conta ou se não tiver solicitado o login em {hos htmlMsg: 'Foi feito um pedido de identificação desde {host}. Para o confirmar clique no botão abaixo. A ligação é válida por 15 minutos.', htmlButton: 'Ligação ao {host}', htmlAlternativeLink: 'Se o botão acima não funcionar, pode copiar esta ligação para a barra de endereço do seu navegador :', - htmlCaption: 'Si vous avez un problème avec votre compte ou si vous n\'avez pas demandé à vous connecter à {host}, n\'hésitez pas à nous contacter à {contact}.' + htmlCaption: 'Se tiver um problema com a sua conta ou se não tiver pedido para iniciar sessão em {host}, não hesite em contactar-nos em {contact}.' }, noCreation: { subject: 'Falha de autenticação no {host}.', diff --git a/api/src/app.ts b/api/src/app.ts index 3969be72..ab732ca6 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -26,6 +26,15 @@ import { getSiteByUrl } from '#services' import { defaultThemeCssHash, getThemeCssHash } from './utils/theme.ts' import { defaultPublicSiteInfoHash, getPublicSiteInfoHash } from './utils/public-site-info.ts' +// the site title is injected as text into the served HTML, it must not be able to break out of its tag. +// it must also survive the micro-template passes that follow: '{' is neutralized so a title cannot +// smuggle a later placeholder (CSP_NONCE is substituted after us), and '$' is doubled because +// microTemplate interpolates through String.replace, where $&, $` and $' are replacement patterns. +const escapeHtml = (value: string) => value + .replace(/&/g, '&').replace(//g, '>') + .replace(/\{/g, '{') + .replace(/\$/g, '$$$$') + const app = express() export default app @@ -117,7 +126,10 @@ if (process.env.NODE_ENV !== 'test') { const site = await getSiteByUrl(siteUrl) return { THEME_CSS_HASH: site ? getThemeCssHash(site) : defaultThemeCssHash, - PUBLIC_SITE_INFO_HASH: site ? getPublicSiteInfoHash(site) : defaultPublicSiteInfoHash + PUBLIC_SITE_INFO_HASH: site ? getPublicSiteInfoHash(site) : defaultPublicSiteInfoHash, + // the SPA sets the definitive title, this one fills the of the served + // document, which the W3C validator requires (RGAA 8.2) + SITE_TITLE: escapeHtml(site?.title || 'Simple Directory') } } })) diff --git a/package-lock.json b/package-lock.json index dca09e7d..8eaf3187 100644 --- a/package-lock.json +++ b/package-lock.json @@ -675,9 +675,9 @@ "license": "MIT" }, "node_modules/@data-fair/lib-common-types": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@data-fair/lib-common-types/-/lib-common-types-1.21.0.tgz", - "integrity": "sha512-LBppiR7ncYLIpDxZLmXHIDvGmUHjqwc3F+qXuVSS4vDpgvCL8RWhT6396DSXMpgbY0I3aKZ8T6LGpPxz8qB4/Q==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@data-fair/lib-common-types/-/lib-common-types-1.22.0.tgz", + "integrity": "sha512-kOJpGqyva32rnWjKz+SqFPukKCEvOLtsxi4pTbEAJo3FJBcgiza4xchmILa0AArg6IDvbrLeRpbsT+x6LGB7RA==", "license": "MIT", "dependencies": { "@data-fair/lib-utils": "^1.6.1", diff --git a/playwright.config.ts b/playwright.config.ts index 765613ca..c85a9bcd 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -51,7 +51,8 @@ export default defineConfig({ name: 'e2e', testMatch: /.*\.e2e\.spec\.ts/, dependencies: ['state-setup'], - use: { ...devices['Desktop Chrome'] }, + // full page loads (incl. superadmin login) can exceed 5s when the whole suite loads the server + use: { ...devices['Desktop Chrome'], navigationTimeout: 15_000 }, }, ], }) diff --git a/tests/features/me.e2e.spec.ts b/tests/features/me.e2e.spec.ts index 0d92c017..cb883e91 100644 --- a/tests/features/me.e2e.spec.ts +++ b/tests/features/me.e2e.spec.ts @@ -1,14 +1,16 @@ import { test, expect } from '../support/e2e-fixtures.ts' test.describe('Account profile page', () => { - test('displays user email (disabled)', async ({ page, appUrl, loginAs }) => { + test('displays user email (read-only)', async ({ page, appUrl, loginAs }) => { await loginAs('testprofile@test.com') await page.goto(appUrl('/me')) const emailField = page.locator('input[name="email"]') await expect(emailField).toBeVisible() await expect(emailField).toHaveValue('testprofile@test.com') - await expect(emailField).toBeDisabled() + // readonly (not disabled) for accessibility: keeps the address readable and focusable + await expect(emailField).toHaveAttribute('readonly', '') + await expect(emailField).not.toBeEditable() }) test('edit first name and last name', async ({ page, appUrl, loginAs }) => { diff --git a/ui/dts/components.d.ts b/ui/dts/components.d.ts index 7f22dd95..ee35a0b2 100644 --- a/ui/dts/components.d.ts +++ b/ui/dts/components.d.ts @@ -32,6 +32,7 @@ declare module 'vue' { OrganizationPartners: typeof import('./../src/components/organization-partners.vue')['default'] OrganizationStorage: typeof import('./../src/components/organization-storage.vue')['default'] PartnerInvitation: typeof import('./../src/components/partner-invitation.vue')['default'] + PasswordReveal: typeof import('./../src/components/password-reveal.vue')['default'] ResendInvitation: typeof import('./../src/components/resend-invitation.vue')['default'] ResendPartnerInvitation: typeof import('./../src/components/resend-partner-invitation.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/ui/index.html b/ui/index.html index dd08f6d1..8bfd940f 100644 --- a/ui/index.html +++ b/ui/index.html @@ -3,6 +3,7 @@ <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>{SITE_TITLE} diff --git a/ui/src/App.vue b/ui/src/App.vue index 80a9b5a2..5f032860 100644 --- a/ui/src/App.vue +++ b/ui/src/App.vue @@ -96,11 +96,6 @@ const appClass = computed(() => { } } -/* Restore button text casing after Vuetify 4 removed default uppercase */ -.v-btn { - text-transform: capitalize; -} - body .v-application .logo-container { height: 100%; padding: 4px; diff --git a/ui/src/components/add-department-menu.vue b/ui/src/components/add-department-menu.vue index fa73430e..b1694b31 100644 --- a/ui/src/components/add-department-menu.vue +++ b/ui/src/components/add-department-menu.vue @@ -4,8 +4,9 @@ :close-on-content-click="false" >