diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index bf77884..11db600 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -81,6 +81,7 @@ jobs: file: ./Dockerfile platforms: linux/amd64,linux/arm64 push: ${{ inputs.push }} + provenance: false tags: | ${{ steps.meta.outputs.tags }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} diff --git a/docs/press-kit/communique-presse.md b/docs/press-kit/communique-presse.md deleted file mode 100644 index f5fb538..0000000 --- a/docs/press-kit/communique-presse.md +++ /dev/null @@ -1,50 +0,0 @@ -# Communiqué de presse — Novembre 2025 -## Ackify CE : la preuve de lecture open-source, simple et respectueuse de la vie privée - -**Bordeaux (France)** — Avec **Ackify CE**, la confirmation de lecture devient enfin un geste simple, traçable et auto-hébergeable. -Pensée pour les équipes modernes et les environnements sensibles, cette solution open-source permet de **prouver qu’un document a été lu** — sans avoir recours à de lourdes solutions de signature électronique. - ---- - -### Un besoin concret : prouver la lecture, pas signer - -Les entreprises, associations ou institutions doivent souvent s’assurer que leurs collaborateurs ont bien **pris connaissance d’une politique interne, d’une charte ou d’une procédure**. -Jusqu’ici, la plupart des outils disponibles étaient centrés sur la signature légale, complexes à déployer ou couteux et hébergés à l’extérieur. - -**Ackify CE** se concentre sur un besoin beaucoup plus simple : la **preuve de lecture**, horodatée et vérifiable, mais sans tiers de confiance ni dépendance à un service SaaS. -L’outil peut être **hébergé en interne**, connecté à l’annuaire de l’organisation, et intégré directement dans **Outline, Notion, Confluence ou autre service web supportant oEmbed/IFrame**. - ---- - -### Un outil moderne, sécurisé et auto-suffisant - -- **Authentification flexible** : connexion par **Magic Link** (sans mot de passe, via e-mail à durée limitée) ou **OAuth2** (Google, GitHub, GitLab, Microsoft, custom…). -- **Tableau de bord administrateur** : suivi en temps réel des lecteurs attendus, rappels par e-mail et export des preuves. -- **API REST et Webhooks** pour automatiser les notifications et connecter Ackify à d’autres systèmes internes. -- **Installation guidée** en 5 minutes via un simple script Docker — sans configuration manuelle ni dépendances cachées. -- **Sécurité intégrée** : hachage cryptographique (SHA-256 / Ed25519), cookies sécurisés, PKCE, et image Docker distroless de moins de 30 Mo. - -Disponible en **français, anglais, espagnol, allemand et italien**, Ackify CE s’adapte aux environnements internationaux tout en restant totalement auto-hébergeable. - ---- - -### Une alternative éthique et pragmatique - -> « Ackify est né d’un besoin simple : prouver qu’un document a été lu, sans la lourdeur ni les contraintes d’une signature électronique. -> C’est un outil sobre, transparent et respectueux des données. » -> — *Benjamin Touchard, créateur du projet* - -Ackify CE est publié sous **licence AGPL v3**, garantissant son indépendance et son ouverture à la contribution. - ---- - -### Pour aller plus loin - -- **Site officiel :** [https://ackify.eu](https://ackify.eu) -- **Code source :** [https://github.com/btouchard/ackify-ce](https://github.com/btouchard/ackify-ce) -- **Documentation :** incluse dans le dépôt (`/docs/`) -- **Contact presse :** [benjamin@kolapsis.com](mailto:benjamin@kolapsis.com) - ---- - -**Ackify CE** — *la preuve de lecture open-source, sans compromis sur la simplicité ni la vie privée.* diff --git a/docs/press-kit/presentation.md b/docs/press-kit/presentation.md deleted file mode 100644 index 068a634..0000000 --- a/docs/press-kit/presentation.md +++ /dev/null @@ -1,44 +0,0 @@ -# 🚀 Ackify CE — Présentation - -Ackify CE est une plateforme open-source et auto-hébergeable qui permet de prouver la lecture d’un document, sans signature électronique. - -Pensé pour les équipes modernes (Outline, Notion, Confluence…), Ackify apporte une preuve de lecture horodatée et vérifiable, idéale pour les politiques internes, formations ou procédures de conformité. - -## Fonctionnalités principales - -- 🔐 Preuve de lecture vérifiable : une confirmation unique par utilisateur et par document, avec horodatage et hachage cryptographique (SHA-256 / Ed25519). -- ✉️ Authentification flexible : connexion par **Magic Link** (sans mot de passe, e-mail 15 min) ou **OAuth2** (Google, GitHub, GitLab, etc.). -- 🧭 Tableau de bord administrateur : gestion des documents, liste des lecteurs attendus, suivi des confirmations et envois de rappels. -- 🌐 Intégrations : insertion simple dans **Outline, Notion, Confluence ou tout site via iframe et oEmbed**. -- 🔁 **API REST & Webhooks** pour automatiser les notifications et intégrer Ackify à d’autres outils. -- 🧱 Installation guidée en 5 minutes via un script interactif Docker (distroless + PostgreSQL 16). -- 🌍 Interface multilingue (FR, EN, ES, DE, IT). -- 🧑‍💻 Mode “admin-only” (variable ACKIFY_ONLY_ADMIN_CAN_CREATE) pour restreindre la création de documents. - -## Cas d’usage - -- Validation de politiques internes (sécurité, RGPD, conformité). -- Attestation de lecture de formation ou de procédures. -- Suivi de documents sensibles sans recourir à une signature électronique complète. - -## Stack & sécurité - -- Backend : Go + PostgreSQL 16 -- Frontend : Vue 3 + TypeScript + Tailwind -- Architecture : API-first, distroless, healthchecks intégrés -- Sécurité : Ed25519, SHA-256, PKCE, cookies sécurisés, taux de requêtes limités - -## Démarrage rapide 🚀 - -```bash -curl -fsSL https://raw.githubusercontent.com/btouchard/ackify-ce/main/install/install.sh | bash -``` - -Le script installe Ackify, configure le `.env` en mode interactif, génère les secrets. - -## Licence & liens - -- Licence : AGPL v3 -- Code source : https://github.com/btouchard/ackify-ce -- Site officiel : https://www.ackify.eu -- Documentation : /docs/ du dépôt GitHub \ No newline at end of file diff --git a/docs/press-kit/screenshots/1-ackify-dashboard.png b/docs/press-kit/screenshots/1-ackify-dashboard.png deleted file mode 100644 index d5d4abe..0000000 Binary files a/docs/press-kit/screenshots/1-ackify-dashboard.png and /dev/null differ diff --git a/docs/press-kit/screenshots/2-ackify-read-confirmation.png b/docs/press-kit/screenshots/2-ackify-read-confirmation.png deleted file mode 100644 index 0c3bd38..0000000 Binary files a/docs/press-kit/screenshots/2-ackify-read-confirmation.png and /dev/null differ diff --git a/docs/press-kit/screenshots/3-ackify-home.png b/docs/press-kit/screenshots/3-ackify-home.png deleted file mode 100644 index 41d6b76..0000000 Binary files a/docs/press-kit/screenshots/3-ackify-home.png and /dev/null differ diff --git a/docs/press-kit/screenshots/4-ackify-install-script.png b/docs/press-kit/screenshots/4-ackify-install-script.png deleted file mode 100644 index 05ae2a1..0000000 Binary files a/docs/press-kit/screenshots/4-ackify-install-script.png and /dev/null differ diff --git a/docs/press-kit/videos/1 - installation-script.mp4 b/docs/press-kit/videos/1 - installation-script.mp4 deleted file mode 100644 index 564ec47..0000000 Binary files a/docs/press-kit/videos/1 - installation-script.mp4 and /dev/null differ diff --git a/docs/press-kit/videos/2 - usage-embed.mp4 b/docs/press-kit/videos/2 - usage-embed.mp4 deleted file mode 100644 index 8380d61..0000000 Binary files a/docs/press-kit/videos/2 - usage-embed.mp4 and /dev/null differ diff --git a/docs/press-kit/videos/3 - admin-ui.mp4 b/docs/press-kit/videos/3 - admin-ui.mp4 deleted file mode 100644 index d42bfb9..0000000 Binary files a/docs/press-kit/videos/3 - admin-ui.mp4 and /dev/null differ diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json index 815e16d..6ecea67 100644 --- a/webapp/src/locales/de.json +++ b/webapp/src/locales/de.json @@ -19,248 +19,248 @@ "mainNavigation": "Hauptnavigation" }, "theme": { - "toggle": "Changer de thème" + "toggle": "Design wechseln" }, "language": { - "select": "Sélectionner la langue", - "fr": "Français", - "en": "Anglais", - "es": "Espagnol", - "de": "Allemand", - "it": "Italien" + "select": "Sprache auswählen", + "fr": "Französisch", + "en": "Englisch", + "es": "Spanisch", + "de": "Deutsch", + "it": "Italienisch" }, "auth": { "user": { - "connectedAs": "Connecté en tant que" + "connectedAs": "Angemeldet als" }, "choice": { - "title": "Connexion à Ackify", - "subtitle": "Choisissez votre méthode d'authentification préférée", - "privacy": "Votre authentification est sécurisée et chiffrée" + "title": "Bei Ackify anmelden", + "subtitle": "Wählen Sie Ihre bevorzugte Authentifizierungsmethode", + "privacy": "Ihre Authentifizierung ist sicher und verschlüsselt" }, "oauth": { - "title": "Connexion avec OAuth", - "description": "Utilisez votre compte entreprise", - "button": "Continuer avec OAuth", - "error": "Échec de la connexion OAuth" + "title": "Mit OAuth anmelden", + "description": "Verwenden Sie Ihr Firmenkonto", + "button": "Mit OAuth fortfahren", + "error": "OAuth-Anmeldung fehlgeschlagen" }, "magiclink": { - "title": "Connexion par Email", - "description": "Nous vous enverrons un lien magique", - "email_label": "Adresse email", - "email_placeholder": "vous{'@'}exemple.com", - "button": "Envoyer le lien magique", + "title": "Mit E-Mail anmelden", + "description": "Wir senden Ihnen einen Magic Link", + "email_label": "E-Mail-Adresse", + "email_placeholder": "sie{'@'}beispiel.com", + "button": "Magic Link senden", "sent": { - "title": "Consultez vos emails", - "message": "Nous vous avons envoyé un lien magique. Cliquez dessus pour vous connecter.", - "expire": "Le lien expire dans 15 minutes." + "title": "Überprüfen Sie Ihre E-Mail", + "message": "Wir haben Ihnen einen Magic Link gesendet. Klicken Sie darauf, um sich anzumelden.", + "expire": "Der Link läuft in 15 Minuten ab." }, - "error_invalid_email": "Veuillez entrer une adresse email valide", - "error_send": "Échec de l'envoi du lien magique" + "error_invalid_email": "Bitte geben Sie eine gültige E-Mail-Adresse ein", + "error_send": "Senden des Magic Links fehlgeschlagen" }, "error": { - "no_method_available": "Aucune méthode d'authentification n'est configurée. Veuillez contacter l'administrateur." + "no_method_available": "Keine Authentifizierungsmethode konfiguriert. Bitte kontaktieren Sie den Administrator." } }, "home": { "hero": { - "title": "Confirmation de Lecture", - "subtitle": "Certifiez cryptographiquement que vos documents ont été lus et compris", - "createError": "Impossible de créer le document", + "title": "Lesebestätigung", + "subtitle": "Bestätigen Sie kryptografisch, dass Ihre Dokumente gelesen und verstanden wurden", + "createError": "Dokument konnte nicht erstellt werden", "restricted": { - "title": "Création restreinte", - "description": "La création de documents est réservée aux administrateurs. Contactez votre administrateur pour obtenir un lien de document." + "title": "Erstellung eingeschränkt", + "description": "Die Dokumenterstellung ist auf Administratoren beschränkt. Kontaktieren Sie Ihren Administrator, um einen Dokumentlink zu erhalten." }, "form": { - "label": "URL du document", - "placeholder": "URL, chemin ou référence du document", - "hint": "Accepte les URLs, chemins de fichiers ou identifiants simples", - "submit": "Créer", - "submitLogin": "Se connecter" + "label": "Dokument-URL", + "placeholder": "URL, Pfad oder Dokumentreferenz", + "hint": "Akzeptiert URLs, Dateipfade oder einfache Kennungen", + "submit": "Erstellen", + "submitLogin": "Anmelden" } }, "howItWorks": { - "title": "Comment ça fonctionne ?", - "subtitle": "Ackify vous permet de prouver cryptographiquement que vos documents ont été lus", + "title": "Wie funktioniert es?", + "subtitle": "Ackify ermöglicht es Ihnen, kryptografisch zu beweisen, dass Ihre Dokumente gelesen wurden", "step1": { - "title": "1. Accédez au document", - "description": "Entrez l'URL ou la référence du document à confirmer" + "title": "1. Dokument aufrufen", + "description": "Geben Sie die URL oder Referenz des zu bestätigenden Dokuments ein" }, "step2": { - "title": "2. Lisez le contenu", - "description": "Consultez le document dans le lecteur intégré ou via le lien externe" + "title": "2. Inhalt lesen", + "description": "Lesen Sie das Dokument im integrierten Viewer oder über den externen Link" }, "step3": { - "title": "3. Confirmez", - "description": "Votre confirmation est enregistrée avec une signature cryptographique Ed25519" + "title": "3. Bestätigen", + "description": "Ihre Bestätigung wird mit einer kryptografischen Ed25519-Signatur aufgezeichnet" } }, "features": { "crypto": { - "title": "Sécurité cryptographique", - "description": "Signatures Ed25519 non répudiables garantissant l'authenticité" + "title": "Kryptografische Sicherheit", + "description": "Unwiderrufliche Ed25519-Signaturen garantieren Authentizität" }, "instant": { - "title": "Instantané", - "description": "Confirmation en deux clics avec vérification cryptographique immédiate" + "title": "Sofort", + "description": "Bestätigung mit zwei Klicks mit sofortiger kryptografischer Verifizierung" }, "timestamp": { - "title": "Horodatage précis", - "description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité" + "title": "Präziser Zeitstempel", + "description": "Jede Bestätigung wird mit Zeitstempel versehen und verkettet, um Integrität zu gewährleisten" } }, "saas": { - "badge": "Bientôt disponible", - "title": "Besoin de plus ?", - "description": "Gestion d'équipes, API avancée, tableaux de bord, intégrations et support dédié pour les entreprises.", - "button": "Découvrir Ackify Pro", - "note": "Disponible prochainement" + "badge": "Demnächst verfügbar", + "title": "Brauchen Sie mehr?", + "description": "Team-Management, erweiterte API, Dashboards, Integrationen und dedizierter Support für Unternehmen.", + "button": "Ackify Pro entdecken", + "note": "Demnächst verfügbar" } }, "sign": { - "title": "Confirmation de Lecture", - "subtitle": "Certifiez votre lecture avec une confirmation cryptographique Ed25519", + "title": "Lesebestätigung", + "subtitle": "Bestätigen Sie Ihre Lektüre mit einer sicheren und unwiderruflichen Bestätigung", "loading": { - "title": "Chargement du document...", - "description": "Veuillez patienter pendant que nous préparons le document pour la signature." + "title": "Dokument wird geladen...", + "description": "Bitte warten Sie, während wir das Dokument vorbereiten." }, "external": { "title": "Externes Dokument", - "description": "Bitte lesen Sie das Dokument, bevor Sie Ihre Lesung bestätigen.", - "descriptionWithUrl": "Dieses Dokument ist nicht direkt zugänglich. Bitte öffnen Sie es über den unten stehenden Link, lesen Sie es und kehren Sie dann zurück, um Ihre Lesung zu bestätigen.", + "description": "Bitte lesen Sie das Dokument, bevor Sie Ihre Lektüre bestätigen.", + "descriptionWithUrl": "Dieses Dokument ist nicht direkt zugänglich. Bitte öffnen Sie es über den unten stehenden Link, lesen Sie es und kehren Sie dann zurück, um Ihre Lektüre zu bestätigen.", "documentUrl": "Dokument-URL", "openDocument": "Dokument öffnen", "noUrl": "Keine URL für dieses Dokument verfügbar" }, "alreadySigned": { - "title": "Lecture déjà confirmée", - "signedBy": "Confirmé par", - "email": "Email", - "signatureType": "Type de confirmation", - "ed25519": "Ed25519 cryptographique", - "downloadProof": "Télécharger la preuve" + "title": "Lektüre bereits bestätigt", + "signedBy": "Bestätigt von", + "email": "E-Mail", + "signatureType": "Bestätigungstyp", + "ed25519": "Ed25519 kryptografisch", + "downloadProof": "Nachweis herunterladen" }, "confirm": { - "title": "Confirmer votre lecture", - "readRequired": "Veuillez lire l'intégralité du document avant de confirmer.", - "certify": "Je certifie avoir lu et compris le contenu de ce document" + "title": "Bestätigen Sie Ihre Lektüre", + "readRequired": "Bitte lesen Sie das gesamte Dokument, bevor Sie bestätigen.", + "certify": "Ich bestätige, dass ich den Inhalt dieses Dokuments gelesen und verstanden habe" }, "noDocument": { "title": "Kein Dokument angegeben", - "description": "Um ein Dokument zu signieren, fügen Sie den Parameter {code} zur URL hinzu", + "description": "Um die Lektüre eines Dokuments zu bestätigen, fügen Sie den Parameter {code} zur URL hinzu", "examples": "Beispiele:", "orEnterReference": "Oder geben Sie unten Ihre Dokumentreferenz ein" }, "success": { - "title": "Lecture confirmée avec succès !", - "description": "Votre confirmation a été enregistrée de manière cryptographique et sécurisée." + "title": "Lektüre erfolgreich bestätigt!", + "description": "Ihre Bestätigung wurde kryptografisch und sicher aufgezeichnet." }, "error": { - "title": "Une erreur est survenue", - "authRequired": "Vous devez être connecté pour créer un document.", - "loadFailed": "Échec du chargement du document", - "loginButton": "Se connecter" + "title": "Ein Fehler ist aufgetreten", + "authRequired": "Sie müssen angemeldet sein, um ein Dokument zu erstellen.", + "loadFailed": "Laden des Dokuments fehlgeschlagen", + "loginButton": "Anmelden" }, "documentCreation": { - "restrictedToAdmins": "Seuls les administrateurs peuvent créer des documents." + "restrictedToAdmins": "Nur Administratoren können Dokumente erstellen." }, "document": { - "title": "Document à confirmer", + "title": "Zu bestätigendes Dokument", "id": "ID" }, "info": { - "description": "En confirmant la lecture de ce document, vous certifiez avoir pris connaissance de son contenu et acceptez de le valider de manière cryptographique et non répudiable.", - "recorded": "Votre confirmation sera enregistrée avec les informations suivantes :", - "email": "Votre adresse email", - "timestamp": "Horodatage précis de la confirmation", - "signature": "Confirmation cryptographique Ed25519", - "hash": "Hash SHA-256 du contenu" + "description": "Indem Sie die Lektüre dieses Dokuments bestätigen, bestätigen Sie, dass Sie seinen Inhalt zur Kenntnis genommen haben, und akzeptieren, ihn kryptografisch und unwiderruflich zu validieren.", + "recorded": "Ihre Bestätigung wird mit den folgenden Informationen aufgezeichnet:", + "email": "Ihre E-Mail-Adresse", + "timestamp": "Präziser Zeitstempel der Bestätigung", + "signature": "Sicherer kryptografischer Fingerabdruck", + "hash": "SHA-256-Hash des Inhalts" }, "confirmations": { - "title": "Confirmations existantes", - "count": "{count} confirmation | {count} confirmations", - "recorded": "enregistrée | enregistrées" + "title": "Bestehende Bestätigungen", + "count": "{count} Bestätigung | {count} Bestätigungen", + "recorded": "aufgezeichnet" }, "empty": { - "title": "Aucune confirmation pour le moment", - "description": "Soyez le premier à confirmer votre lecture de ce document" + "title": "Noch keine Bestätigungen", + "description": "Seien Sie der Erste, der die Lektüre dieses Dokuments bestätigt" }, "howItWorks": { - "title": "Comment ça fonctionne ?", - "subtitle": "Ackify vous permet de prouver cryptographiquement que vous avez lu un document", + "title": "Wie funktioniert es?", + "subtitle": "Ackify ermöglicht es Ihnen, offiziell zu bestätigen, dass Sie ein Dokument gelesen haben", "step1": { - "title": "1. Accédez au document", - "description": "Ajoutez {code} à l'adresse de cette page" + "title": "1. Dokument aufrufen", + "description": "Fügen Sie {code} zur Adresse dieser Seite hinzu" }, "step2": { - "title": "2. Authentifiez-vous", - "description": "Connectez-vous via OAuth2 pour confirmer votre identité" + "title": "2. Authentifizieren", + "description": "Melden Sie sich über OAuth2 an, um Ihre Identität zu bestätigen" }, "step3": { - "title": "3. Confirmez la lecture", - "description": "Votre confirmation est enregistrée avec une signature Ed25519" + "title": "3. Lektüre bestätigen", + "description": "Ihre Bestätigung wird sicher und überprüfbar aufgezeichnet" }, "features": { "crypto": { - "title": "Sécurité cryptographique", - "description": "Signatures Ed25519 non répudiables garantissant l'authenticité" + "title": "Kryptografische Sicherheit", + "description": "Unwiderrufliche Bestätigungen garantieren Authentizität" }, "instant": { - "title": "Instantané", - "description": "Confirmation en deux clics avec vérification cryptographique immédiate" + "title": "Sofort", + "description": "Bestätigung mit zwei Klicks mit sofortiger kryptografischer Verifizierung" }, "timestamp": { - "title": "Horodatage précis", - "description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité" + "title": "Präziser Zeitstempel", + "description": "Jede Bestätigung wird mit Zeitstempel versehen und verkettet, um Integrität zu gewährleisten" } } } }, "signButton": { - "confirm": "Confirmer ma lecture", - "confirmAction": "Confirmer la lecture", - "alreadySigned": "Déjà confirmé", - "confirmed": "Lecture confirmée", - "mustLogin": "Se connecter pour confirmer", - "signing": "Confirmation en cours...", - "verified": "Vérifié", - "on": "Le", + "confirm": "Meine Lektüre bestätigen", + "confirmAction": "Lektüre bestätigen", + "alreadySigned": "Bereits bestätigt", + "confirmed": "Lektüre bestätigt", + "mustLogin": "Anmelden zum Bestätigen", + "signing": "Bestätigung läuft...", + "verified": "Verifiziert", + "on": "Am", "error": { - "title": "Échec de la confirmation", - "notAuthenticated": "Vous devez être connecté pour confirmer un document.", - "alreadySigned": "Vous avez déjà confirmé ce document.", - "generic": "Une erreur est survenue lors de la confirmation. Veuillez réessayer.", - "missingDocId": "Document ID manquant", - "authFailed": "Impossible de démarrer l'authentification" + "title": "Bestätigung fehlgeschlagen", + "notAuthenticated": "Sie müssen angemeldet sein, um ein Dokument zu bestätigen.", + "alreadySigned": "Sie haben dieses Dokument bereits bestätigt.", + "generic": "Bei der Bestätigung ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", + "missingDocId": "Dokument-ID fehlt", + "authFailed": "Authentifizierung konnte nicht gestartet werden" } }, "signatureList": { - "loading": "Chargement des confirmations...", - "email": "Email", - "date": "Date", - "signature": "Signature", - "confirmation": "Confirmation:", + "loading": "Bestätigungen werden geladen...", + "email": "E-Mail", + "date": "Datum", + "signature": "Signatur", + "confirmation": "Bestätigung:", "hash": "Hash", "nonce": "Nonce", - "verificationStatus": "Statut de vérification", - "verified": "Vérifié", - "confirmed": "Confirmé", - "notVerified": "Non vérifié", - "showDetails": "Afficher les détails", - "hideDetails": "Masquer les détails", - "viewDetails": "Voir détails", - "verificationDetails": "Détails de vérification", - "copy": "Copier", - "copied": "Copié !", - "previousHash": "Hash précédent:", - "empty": "Aucune confirmation trouvée", - "documentDeleted": "Document supprimé", + "verificationStatus": "Verifizierungsstatus", + "verified": "Verifiziert", + "confirmed": "Bestätigt", + "notVerified": "Nicht verifiziert", + "showDetails": "Details anzeigen", + "hideDetails": "Details ausblenden", + "viewDetails": "Details ansehen", + "verificationDetails": "Verifizierungsdetails", + "copy": "Kopieren", + "copied": "Kopiert!", + "previousHash": "Vorheriger Hash:", + "empty": "Keine Bestätigungen gefunden", + "documentDeleted": "Dokument gelöscht", "fields": { "id": "ID:", - "document": "Document:", - "reader": "Lecteur:", - "date": "Date:", - "source": "Origine:", + "document": "Dokument:", + "reader": "Leser:", + "date": "Datum:", + "source": "Quelle:", "nonce": "Nonce:", "hash": "Hash:" } @@ -268,18 +268,18 @@ "signatures": { "title": "Meine Lesebestätigungen", "subtitle": "Liste aller Dokumente, deren Lektüre Sie kryptografisch bestätigt haben", - "loading": "Chargement de vos confirmations...", + "loading": "Ihre Bestätigungen werden geladen...", "empty": { - "title": "Aucune confirmation pour le moment", - "description": "Vous n'avez pas encore confirmé de document. Commencez par confirmer un document pour le voir apparaître ici.", - "alternative": "Vous n'avez pas encore confirmé la lecture de documents" + "title": "Noch keine Bestätigungen", + "description": "Sie haben noch kein Dokument bestätigt. Beginnen Sie mit der Bestätigung eines Dokuments, um es hier erscheinen zu sehen.", + "alternative": "Sie haben noch keine Dokumentlektüre bestätigt" }, - "count": "{count} confirmation | {count} confirmations", - "results": "{count} résultat | {count} résultats", + "count": "{count} Bestätigung | {count} Bestätigungen", + "results": "{count} Ergebnis | {count} Ergebnisse", "document": "Dokument", "signedAt": "Bestätigt am", - "viewDetails": "Voir les détails", - "deletedDocuments": "Documents supprimés", + "viewDetails": "Details ansehen", + "deletedDocuments": "Gelöschte Dokumente", "stats": { "total": "Gesamt", "totalConfirmations": "Gesamtbestätigungen", @@ -292,12 +292,12 @@ "allConfirmations": "Alle meine Bestätigungen", "about": { "title": "Über Bestätigungen", - "description": "Jede Bestätigung wird kryptografisch mit Ed25519 aufgezeichnet und verkettet, um die Integrität zu gewährleisten. Bestätigungen sind unwiderruflich und präzise mit Zeitstempel versehen." + "description": "Jede Bestätigung wird kryptografisch aufgezeichnet und verkettet, um die Integrität zu gewährleisten. Bestätigungen sind unwiderruflich und präzise mit Zeitstempel versehen." }, "search": "Suchen...", "error": { - "title": "Erreur de chargement des confirmations", - "description": "Impossible de charger vos confirmations. Veuillez réessayer." + "title": "Fehler beim Laden der Bestätigungen", + "description": "Ihre Bestätigungen konnten nicht geladen werden. Bitte versuchen Sie es erneut." } }, "admin": { @@ -305,11 +305,11 @@ "subtitle": "Dokumente und erwartete Leser verwalten", "loading": "Daten werden geladen...", "dashboard": { - "title": "Tableau de bord", - "totalDocuments": "Documents totaux", - "totalSignatures": "Confirmations totales", - "recentActivity": "Activité récente", - "backToDashboard": "Retour au tableau de bord", + "title": "Dashboard", + "totalDocuments": "Gesamte Dokumente", + "totalSignatures": "Gesamte Bestätigungen", + "recentActivity": "Aktuelle Aktivität", + "backToDashboard": "Zurück zum Dashboard", "stats": { "documents": "Dokumente", "readers": "Leser", @@ -328,29 +328,29 @@ "searchPlaceholder": "Nach ID, Titel oder URL suchen...", "id": "Dokument-ID", "idLabel": "Dokument", - "idHelper": "Accepte les URLs, les chemins de fichiers ou les identifiants simples", - "idHelperShort": "Accepte les URLs, chemins ou identifiants", - "idPlaceholder": "URL, PATH ou ID du document", - "signatures": "Confirmations", - "created": "Créé", + "idHelper": "Akzeptiert URLs, Dateipfade oder einfache Kennungen", + "idHelperShort": "Akzeptiert URLs, Pfade oder Kennungen", + "idPlaceholder": "URL, Pfad oder Dokument-ID", + "signatures": "Bestätigungen", + "created": "Erstellt", "createdOn": "Erstellt am", "by": "Von", "url": "URL", "document": "Dokument", - "actions": "Actions", - "view": "Voir", + "actions": "Aktionen", + "view": "Ansehen", "manage": "Verwalten", - "edit": "Modifier", - "delete": "Supprimer", - "empty": "Aucun document trouvé", - "noResults": "Aucun résultat", - "noDocuments": "Aucun document", - "tryAnotherSearch": "Essayez une autre recherche", - "willAppear": "Les documents apparaîtront ici une fois créés", - "totalCount": "{count} document au total | {count} documents au total", + "edit": "Bearbeiten", + "delete": "Löschen", + "empty": "Keine Dokumente gefunden", + "noResults": "Keine Ergebnisse", + "noDocuments": "Keine Dokumente", + "tryAnotherSearch": "Versuchen Sie eine andere Suche", + "willAppear": "Dokumente erscheinen hier, sobald sie erstellt wurden", + "totalCount": "{count} Dokument insgesamt | {count} Dokumente insgesamt", "pagination": { - "page": "Page {current}/{total}", - "pageOf": "Page {current} sur {total}" + "page": "Seite {current}/{total}", + "pageOf": "Seite {current} von {total}" } }, "settings": { @@ -501,56 +501,56 @@ }, "webhooks": { "title": "Webhooks", - "subtitle": "Configurer les notifications vers des applications tierces", - "manage": "Gérer les webhooks", - "new": "Nouveau webhook", - "edit": "Éditer", - "delete": "Supprimer", - "enable": "Activer", - "disable": "Désactiver", + "subtitle": "Benachrichtigungen an Drittanbieter-Anwendungen konfigurieren", + "manage": "Webhooks verwalten", + "new": "Neuer Webhook", + "edit": "Bearbeiten", + "delete": "Löschen", + "enable": "Aktivieren", + "disable": "Deaktivieren", "status": { - "enabled": "Actif", - "disabled": "Inactif" + "enabled": "Aktiv", + "disabled": "Inaktiv" }, - "confirmDelete": "Supprimer ce webhook ?", - "empty": "Aucun webhook", - "listTitle": "Liste des webhooks", - "listSubtitle": "Un webhook peut écouter plusieurs événements", + "confirmDelete": "Diesen Webhook löschen?", + "empty": "Keine Webhooks", + "listTitle": "Webhook-Liste", + "listSubtitle": "Ein Webhook kann mehrere Ereignisse abhören", "columns": { "title": "Name", "url": "URL", - "events": "Événements", + "events": "Ereignisse", "status": "Status", - "actions": "Actions" + "actions": "Aktionen" }, "form": { - "title": "Paramètres du webhook", - "subtitle": "Renseignez l'URL, le secret et les événements", - "nameLabel": "Nom du webhook", - "namePlaceholder": "Webhook CRM", - "urlLabel": "URL de destination", - "secretLabel": "Secret HMAC", - "secretPlaceholder": "Saisissez un secret (requis)", - "secretKeep": "Laisser vide pour conserver", - "eventsLabel": "Événements à écouter", - "descriptionLabel": "Description (optionnel)", - "descriptionPlaceholder": "Note interne…", - "validation": "Veuillez compléter le nom, l'URL, le secret et au moins un événement." + "title": "Webhook-Einstellungen", + "subtitle": "URL, Secret und Ereignisse eingeben", + "nameLabel": "Webhook-Name", + "namePlaceholder": "CRM Webhook", + "urlLabel": "Ziel-URL", + "secretLabel": "HMAC-Secret", + "secretPlaceholder": "Secret eingeben (erforderlich)", + "secretKeep": "Leer lassen zum Beibehalten", + "eventsLabel": "Ereignisse zum Abhören", + "descriptionLabel": "Beschreibung (optional)", + "descriptionPlaceholder": "Interne Notiz…", + "validation": "Bitte Name, URL, Secret und mindestens ein Ereignis ausfüllen." }, - "editTitle": "Éditer le webhook", + "editTitle": "Webhook bearbeiten", "events": { - "documentCreated": "Document créé", - "signatureCreated": "Signature créée", - "documentCompleted": "Document complété", - "reminderSent": "Rappel envoyé", - "reminderFailed": "Rappel échoué" + "documentCreated": "Dokument erstellt", + "signatureCreated": "Signatur erstellt", + "documentCompleted": "Dokument abgeschlossen", + "reminderSent": "Erinnerung gesendet", + "reminderFailed": "Erinnerung fehlgeschlagen" }, "eventsMap": { - "document.created": "Document créé", - "signature.created": "Signature créée", - "document.completed": "Document complété", - "reminder.sent": "Rappel envoyé", - "reminder.failed": "Rappel échoué" + "document.created": "Dokument erstellt", + "signature.created": "Signatur erstellt", + "document.completed": "Dokument abgeschlossen", + "reminder.sent": "Erinnerung gesendet", + "reminder.failed": "Erinnerung fehlgeschlagen" } }, "documentDetail": { @@ -558,27 +558,27 @@ "subtitle": "Metadaten und erwartete Leser verwalten", "metadata": "📄 Dokumentinformationen", "metadataDescription": "Dokumentmetadaten und Prüfsumme", - "checksum": "Checksum", - "algorithm": "Algorithme", + "checksum": "Prüfsumme", + "algorithm": "Algorithmus", "titleLabel": "Titel", "titlePlaceholder": "Sicherheitsrichtlinie 2025", "urlLabel": "URL", "urlPlaceholder": "https://example.com/doc.pdf", - "checksumLabel": "Checksum", + "checksumLabel": "Prüfsumme", "checksumPlaceholder": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "algorithmLabel": "Algorithme", + "algorithmLabel": "Algorithmus", "descriptionLabel": "Beschreibung", "descriptionPlaceholder": "Dokumentbeschreibung...", - "signatures": "Confirmations", - "back": "Retour", + "signatures": "Bestätigungen", + "back": "Zurück", "expectedSigners": "Erwartete Unterzeichner", "addExpectedSigner": "Erwarteten Unterzeichner hinzufügen", "addSigners": "Erwartete Leser hinzufügen", - "addButton": "Ajouter", - "adding": "Ajout...", + "addButton": "Hinzufügen", + "adding": "Hinzufügen...", "emailsLabel": "E-Mails (eine pro Zeile)", - "emailsPlaceholder": "Marie Dupont \njean.martin{'@'}example.com\nSophie Bernard ", - "emailsHelper": "Formats acceptés : \"Nom Prénom \" ou \"email{'@'}example.com\"", + "emailsPlaceholder": "Max Mustermann \nerika.musterfrau{'@'}example.com\nAnna Schmidt ", + "emailsHelper": "Akzeptierte Formate: \"Vorname Nachname \" oder \"email{'@'}example.com\"", "emailLabel": "E-Mail *", "emailPlaceholder": "email{'@'}example.com", "nameLabel": "Name", @@ -592,168 +592,168 @@ "confirmedOn": "Bestätigt am", "noExpectedSigners": "Keine erwarteten Leser", "noSignatures": "Keine Bestätigungen", - "reminders": "E-Mail Erinnerungen", - "remindersDescription": "Envoyer des rappels aux lecteurs en attente de confirmation", + "reminders": "E-Mail-Erinnerungen", + "remindersDescription": "Erinnerungen an Leser senden, die auf Bestätigung warten", "remindersSent": "Gesendete Erinnerungen", "toRemind": "Zu erinnern", "lastReminder": "Letzte Erinnerung", "sendReminder": "Erinnerung senden", - "sending": "Envoi...", - "sendReminders": "Envoyer les relances", - "sendToAll": "Envoyer à tous les lecteurs en attente ({count})", - "sendToSelected": "Envoyer uniquement aux sélectionnés ({count})", + "sending": "Senden...", + "sendReminders": "Erinnerungen senden", + "sendToAll": "An alle wartenden Leser senden ({count})", + "sendToSelected": "Nur an Ausgewählte senden ({count})", "allContacted": "Alle erwarteten Leser wurden kontaktiert oder haben bestätigt", "emailServiceDisabled": "Der E-Mail-Dienst ist derzeit deaktiviert. Der Erinnerungsverlauf bleibt sichtbar, aber das Senden neuer Erinnerungen ist nicht verfügbar.", "unexpectedSignatures": "Zusätzliche Lesebestätigungen", - "unexpectedDescription": "Utilisateurs ayant confirmé mais non présents dans la liste des lecteurs attendus", - "createdBy": "Créé par {by} le {date}", - "saving": "Enregistrement...", - "deleting": "Suppression...", - "copiedToClipboard": "Copié dans le presse-papiers", - "metadataSaved": "Métadonnées enregistrées avec succès", - "signersAdded": "{count} lecteur(s) ajouté(s) avec succès", - "signerRemoved": "{email} retiré avec succès", - "remindersSentSuccess": "{count} relance(s) envoyée(s) avec succès", - "remindersSentPartial": "{sent} relance(s) envoyée(s), {failed} échec(s)", - "remindersSentGeneric": "Relances envoyées avec succès", - "confirmSendReminders": "Envoyer des relances à {count} lecteur(s) en attente de confirmation ?", - "confirmSendRemindersSelected": "Envoyer des relances à {count} lecteur(s) sélectionné(s) ?", + "unexpectedDescription": "Benutzer, die bestätigt haben, aber nicht in der Liste der erwarteten Leser sind", + "createdBy": "Erstellt von {by} am {date}", + "saving": "Speichern...", + "deleting": "Löschen...", + "copiedToClipboard": "In Zwischenablage kopiert", + "metadataSaved": "Metadaten erfolgreich gespeichert", + "signersAdded": "{count} Leser erfolgreich hinzugefügt", + "signerRemoved": "{email} erfolgreich entfernt", + "remindersSentSuccess": "{count} Erinnerung(en) erfolgreich gesendet", + "remindersSentPartial": "{sent} Erinnerung(en) gesendet, {failed} fehlgeschlagen", + "remindersSentGeneric": "Erinnerungen erfolgreich gesendet", + "confirmSendReminders": "Erinnerungen an {count} wartende(n) Leser senden?", + "confirmSendRemindersSelected": "Erinnerungen an {count} ausgewählte(n) Leser senden?", "confirmSendRemindersTitle": "Erinnerungen senden", "removeSignerTitle": "Erwarteten Leser entfernen", - "removeSignerMessage": "Retirer {email} de la liste des lecteurs attendus ?", + "removeSignerMessage": "{email} aus der Liste der erwarteten Leser entfernen?", "metadataWarning": { "title": "Achtung: Signaturungültigmachung", - "description": "Vous êtes sur le point de modifier des informations critiques du document (URL, checksum, algorithme ou description).", - "warning": "Cette modification entraînera l'invalidation de toutes les signatures existantes, car elles sont liées cryptographiquement au contenu actuel du document.", - "currentSignatures": "Signatures actuelles qui seront invalidées :", - "confirm": "Je comprends, continuer", - "cancel": "Annuler" + "description": "Sie sind dabei, kritische Dokumentinformationen zu ändern (URL, Prüfsumme, Algorithmus oder Beschreibung).", + "warning": "Diese Änderung macht alle bestehenden Signaturen ungültig, da sie kryptografisch mit dem aktuellen Dokumentinhalt verknüpft sind.", + "currentSignatures": "Aktuelle Signaturen, die ungültig werden:", + "confirm": "Ich verstehe, fortfahren", + "cancel": "Abbrechen" }, "dangerZone": "Gefahrenzone", "dangerZoneDescription": "Irreversible Aktionen für dieses Dokument", "deleteDocument": "Dieses Dokument löschen", - "deleteDocumentDescription": "Cette action supprimera définitivement le document, ses métadonnées, les lecteurs attendus et toutes les confirmations associées.\nCette action est irréversible.", + "deleteDocumentDescription": "Diese Aktion löscht das Dokument, seine Metadaten, die erwarteten Leser und alle zugehörigen Bestätigungen dauerhaft.\nDiese Aktion ist irreversibel.", "deleteWarning": "Diese Aktion ist irreversibel!", - "deleteWillRemove": "La suppression de ce document entraînera la perte définitive de :", - "deleteItem1": "Alle Dokumentmetadaten", - "deleteItem2": "Die Liste der erwarteten Leser", - "deleteItem3": "Alle kryptografischen Bestätigungen", - "deleteItem4": "Der Erinnerungsverlauf", + "deleteWillRemove": "Das Löschen dieses Dokuments führt zum dauerhaften Verlust von:", + "deleteItem1": "Allen Dokumentmetadaten", + "deleteItem2": "Der Liste der erwarteten Leser", + "deleteItem3": "Allen kryptografischen Bestätigungen", + "deleteItem4": "Dem Erinnerungsverlauf", "deleteConfirmTitle": "Löschen bestätigen", - "deleteConfirmButton": "Supprimer définitivement", - "documentId": "Document ID:", - "importCSV": "Import CSV", - "importCSVTitle": "Importer des lecteurs depuis un fichier CSV", - "selectFile": "Sélectionner un fichier CSV", - "csvFormatHelp": "Format accepté : colonnes 'email' et 'name' (ordre libre), séparateur virgule ou point-virgule", - "analyze": "Analyser", + "deleteConfirmButton": "Dauerhaft löschen", + "documentId": "Dokument-ID:", + "importCSV": "CSV importieren", + "importCSVTitle": "Leser aus CSV-Datei importieren", + "selectFile": "CSV-Datei auswählen", + "csvFormatHelp": "Akzeptiertes Format: Spalten 'email' und 'name' (beliebige Reihenfolge), Komma- oder Semikolon-Trenner", + "analyze": "Analysieren", "analyzing": "Analyse...", - "validEntries": "Valides", - "existingEntries": "Déjà présents", - "invalidEntries": "Invalides", - "lineNumber": "Ligne", - "email": "Email", + "validEntries": "Gültig", + "existingEntries": "Bereits vorhanden", + "invalidEntries": "Ungültig", + "lineNumber": "Zeile", + "email": "E-Mail", "name": "Name", - "statusValid": "Valide", - "statusExists": "Existant", - "parseErrors": "Erreurs de parsing", - "content": "Contenu", - "errorReason": "Erreur", - "backToFileSelection": "Retour", - "importing": "Import...", - "importButton": "Importer {count} lecteur(s)", - "csvImportSuccess": "{imported} lecteur(s) importé(s), {skipped} ignoré(s)", - "filterPlaceholder": "Filtrer par nom ou email...", + "statusValid": "Gültig", + "statusExists": "Vorhanden", + "parseErrors": "Parsing-Fehler", + "content": "Inhalt", + "errorReason": "Fehler", + "backToFileSelection": "Zurück", + "importing": "Importieren...", + "importButton": "{count} Leser importieren", + "csvImportSuccess": "{imported} Leser importiert, {skipped} übersprungen", + "filterPlaceholder": "Nach Name oder E-Mail filtern...", "csvError": { - "email_required": "Email requis", - "invalid_email_format": "Format email invalide", - "max_signers_exceeded": "Limite dépassée" + "email_required": "E-Mail erforderlich", + "invalid_email_format": "Ungültiges E-Mail-Format", + "max_signers_exceeded": "Limit überschritten" } }, "documentForm": { - "title": "Référence du document", - "label": "Référence (URL, chemin ou ID)", - "placeholder": "URL, PATH ou RÉFÉRENCE du document à lire (optionnel)", - "submit": "Commencer", - "submitting": "Chargement...", - "creating": "Création en cours..." + "title": "Dokumentreferenz", + "label": "Referenz (URL, Pfad oder ID)", + "placeholder": "URL, Pfad oder Referenz des zu lesenden Dokuments (optional)", + "submit": "Starten", + "submitting": "Laden...", + "creating": "Wird erstellt..." } }, "embed": { - "loading": "Chargement des informations de signature...", - "title": "Signature pour", - "document": "Document:", - "signedBy": "Signé par", - "on": "le", - "verified": "Vérifié", - "viewAll": "Voir toutes les confirmations", - "error": "Impossible de charger les informations de signature", - "sign": "Signer", - "signDocument": "Signer ce document", - "noSignatures": "Aucune signature pour ce document", - "confirmationsCount": "{count} confirmation(s)", + "loading": "Bestätigungsinformationen werden geladen...", + "title": "Bestätigung für", + "document": "Dokument:", + "signedBy": "Bestätigt von", + "on": "am", + "verified": "Verifiziert", + "viewAll": "Alle Bestätigungen anzeigen", + "error": "Bestätigungsinformationen konnten nicht geladen werden", + "sign": "Bestätigen", + "signDocument": "Dieses Dokument bestätigen", + "noSignatures": "Keine Bestätigungen für dieses Dokument", + "confirmationsCount": "{count} Bestätigung(en)", "poweredBy": "Powered by Ackify", - "missingDocId": "ID de document manquant" + "missingDocId": "Dokument-ID fehlt" }, "notFound": { - "title": "Page non trouvée", - "description": "La page que vous recherchez n'existe pas ou a été déplacée.", - "home": "Retour à l'accueil" + "title": "Seite nicht gefunden", + "description": "Die gesuchte Seite existiert nicht oder wurde verschoben.", + "home": "Zurück zur Startseite" }, "footer": { - "description": "Solution open-source de confirmation cryptographique de lecture de documents avec signatures Ed25519 non répudiables.", + "description": "Open-Source-Lösung für kryptografische Bestätigung der Dokumentlektüre mit unwiderruflichen Attestierungen.", "navigation": { "title": "Navigation" }, "resources": { - "title": "Ressources", - "documentation": "Documentation", - "apiReference": "Référence API", + "title": "Ressourcen", + "documentation": "Dokumentation", + "apiReference": "API-Referenz", "support": "Support" }, "legal": { - "title": "Légal", - "terms": "Conditions d'utilisation", - "privacy": "Politique de confidentialité", - "contact": "Contact" + "title": "Rechtliches", + "terms": "Nutzungsbedingungen", + "privacy": "Datenschutzrichtlinie", + "contact": "Kontakt" }, - "copyright": "Tous droits réservés.", - "license": "Licence AGPL-3.0-or-later", - "madeWith": "Fait avec", - "by": "par", + "copyright": "Alle Rechte vorbehalten.", + "license": "AGPL-3.0-or-later Lizenz", + "madeWith": "Erstellt mit", + "by": "von", "links": { - "privacy": "Confidentialité", - "terms": "Conditions", - "contact": "Contact" + "privacy": "Datenschutz", + "terms": "Bedingungen", + "contact": "Kontakt" } }, "toast": { - "success": "Succès", - "error": "Erreur", + "success": "Erfolg", + "error": "Fehler", "info": "Information", - "warning": "Avertissement" + "warning": "Warnung" }, "common": { - "error": "Erreur", - "loading": "Chargement...", - "save": "Enregistrer", - "cancel": "Annuler", - "delete": "Supprimer", - "edit": "Modifier", - "close": "Fermer", - "confirm": "Confirmer", - "yes": "Oui", - "no": "Non", - "search": "Rechercher", - "filter": "Filtrer", - "sort": "Trier", - "actions": "Actions", - "details": "Détails", - "back": "Retour", - "next": "Suivant", - "previous": "Précédent", - "skipToContent": "Aller au contenu principal", - "refresh": "Actualiser" + "error": "Fehler", + "loading": "Laden...", + "save": "Speichern", + "cancel": "Abbrechen", + "delete": "Löschen", + "edit": "Bearbeiten", + "close": "Schließen", + "confirm": "Bestätigen", + "yes": "Ja", + "no": "Nein", + "search": "Suchen", + "filter": "Filtern", + "sort": "Sortieren", + "actions": "Aktionen", + "details": "Details", + "back": "Zurück", + "next": "Weiter", + "previous": "Zurück", + "skipToContent": "Zum Hauptinhalt springen", + "refresh": "Aktualisieren" }, "documentViewer": { "loading": "Dokument wird geladen...", @@ -811,80 +811,80 @@ "submit": "Hochladen", "uploading": "Wird hochgeladen..." }, - "submit": "Créer", - "submitting": "Création...", + "submit": "Erstellen", + "submitting": "Wird erstellt...", "title": { "label": "Titel", - "placeholder": "Auto-détecté si vide" + "placeholder": "Automatisch erkannt, wenn leer" }, "readMode": { - "label": "Mode de lecture", - "integrated": "Lecteur intégré", - "external": "Lien externe" + "label": "Lesemodus", + "integrated": "Integrierter Viewer", + "external": "Externer Link" }, "options": { - "title": "Options avancées", - "allowDownload": "Autoriser le téléchargement", - "requireFullRead": "Exiger la lecture complète", - "verifyChecksum": "Vérifier le checksum à chaque lecture" + "title": "Erweiterte Optionen", + "allowDownload": "Download erlauben", + "requireFullRead": "Vollständiges Lesen erforderlich", + "verifyChecksum": "Prüfsumme bei jedem Lesen verifizieren" }, "checksum": { - "label": "Checksum", - "placeholder": "Auto-calculé si vide" + "label": "Prüfsumme", + "placeholder": "Automatisch berechnet, wenn leer" }, "algorithm": { - "label": "Algorithme" + "label": "Algorithmus" }, "description": { "label": "Beschreibung", "placeholder": "Dokumentbeschreibung..." }, "error": { - "urlRequired": "L'URL du document est requise", - "createFailed": "Échec de la création du document", - "authRequired": "Authentification requise pour créer un document", - "forbidden": "Vous n'avez pas les droits pour créer un document" + "urlRequired": "Dokument-URL ist erforderlich", + "createFailed": "Dokumenterstellung fehlgeschlagen", + "authRequired": "Authentifizierung erforderlich, um ein Dokument zu erstellen", + "forbidden": "Sie haben keine Berechtigung, ein Dokument zu erstellen" } }, "myDocuments": { - "title": "Mes documents", - "subtitle": "Gérer les documents que vous avez créés", - "listTitle": "Liste des documents", - "results": "{count} résultat | {count} résultats", - "searchPlaceholder": "Rechercher par titre ou URL...", - "signatureCount": "signature | signatures", - "totalCount": "{count} document au total | {count} documents au total", - "noResults": "Aucun résultat", - "tryAnotherSearch": "Essayez une autre recherche", + "title": "Meine Dokumente", + "subtitle": "Verwalten Sie die von Ihnen erstellten Dokumente", + "listTitle": "Dokumentliste", + "results": "{count} Ergebnis | {count} Ergebnisse", + "searchPlaceholder": "Nach Titel oder URL suchen...", + "signatureCount": "Signatur | Signaturen", + "totalCount": "{count} Dokument insgesamt | {count} Dokumente insgesamt", + "noResults": "Keine Ergebnisse", + "tryAnotherSearch": "Versuchen Sie eine andere Suche", "stats": { "total": "Gesamt", "pending": "Ausstehend", - "completed": "Complétés", - "totalDocuments": "Documents totaux", - "pendingDocuments": "En attente de signatures", - "completedDocuments": "Complétés" + "completed": "Abgeschlossen", + "totalDocuments": "Gesamte Dokumente", + "pendingConfirmations": "Ausstehende Bestätigungen", + "completedDocuments": "Abgeschlossen" }, "columns": { "document": "Dokument", "status": "Status", "createdAt": "Erstellt am", - "actions": "Actions" + "actions": "Aktionen" }, "actions": { - "view": "Voir", - "copyLink": "Copier le lien", - "delete": "Supprimer" + "view": "Ansehen", + "copyLink": "Link kopieren", + "delete": "Löschen" }, "empty": { - "title": "Aucun document", - "description": "Créez votre premier document pour commencer à suivre les confirmations de lecture" + "title": "Keine Dokumente", + "description": "Erstellen Sie Ihr erstes Dokument, um mit dem Verfolgen von Lesebestätigungen zu beginnen" }, "deleteConfirm": { - "title": "Supprimer ce document ?", - "message": "Cette action supprimera définitivement le document \"{title}\" et toutes les données associées." + "title": "Dieses Dokument löschen?", + "message": "Diese Aktion löscht das Dokument \"{title}\" und alle zugehörigen Daten dauerhaft." }, "pagination": { - "page": "Page {current}/{total}" + "page": "Seite {current}/{total}" } }, "documentEdit": { @@ -892,97 +892,97 @@ "subtitle": "Metadaten und erwartete Leser verwalten", "back": "Zurück", "breadcrumb": { - "myDocuments": "Mes documents" + "myDocuments": "Meine Dokumente" }, "unauthorized": { - "title": "Accès non autorisé", - "description": "Vous n'avez pas les droits pour accéder à ce document.", - "backToDocuments": "Retour à mes documents" + "title": "Unbefugter Zugriff", + "description": "Sie haben keine Berechtigung, auf dieses Dokument zuzugreifen.", + "backToDocuments": "Zurück zu meinen Dokumenten" }, "shareLink": { - "title": "Lien de partage", - "copy": "Copier", - "copied": "Copié !" + "title": "Freigabelink", + "copy": "Kopieren", + "copied": "Kopiert!" }, "stats": { - "expected": "Lecteurs attendus", - "confirmed": "Confirmés", + "expected": "Erwartete Leser", + "confirmed": "Bestätigt", "pending": "Ausstehend" }, "metadata": { - "title": "Métadonnées", - "description": "Informations de base du document", + "title": "Metadaten", + "description": "Grundlegende Dokumentinformationen", "titleLabel": "Titel", - "titlePlaceholder": "Titre du document", + "titlePlaceholder": "Dokumenttitel", "urlLabel": "URL", - "urlPlaceholder": "https://exemple.com/document.pdf", - "checksumLabel": "Checksum", - "checksumPlaceholder": "Empreinte du fichier (optionnel)", - "algorithmLabel": "Algorithme", + "urlPlaceholder": "https://beispiel.com/dokument.pdf", + "checksumLabel": "Prüfsumme", + "checksumPlaceholder": "Datei-Fingerabdruck (optional)", + "algorithmLabel": "Algorithmus", "descriptionLabel": "Beschreibung", "descriptionPlaceholder": "Dokumentbeschreibung...", - "createdBy": "Créé par {by} le {date}", - "saving": "Enregistrement..." + "createdBy": "Erstellt von {by} am {date}", + "saving": "Speichern..." }, - "metadataSaved": "Métadonnées enregistrées avec succès", + "metadataSaved": "Metadaten erfolgreich gespeichert", "readers": { - "title": "Lecteurs attendus", - "confirmed": "confirmés", - "add": "Ajouter", - "filterPlaceholder": "Filtrer par email ou nom...", + "title": "Erwartete Leser", + "confirmed": "bestätigt", + "add": "Hinzufügen", + "filterPlaceholder": "Nach E-Mail oder Name filtern...", "reader": "Leser", "status": "Status", "confirmedOn": "Bestätigt am", - "statusConfirmed": "Confirmé", + "statusConfirmed": "Bestätigt", "statusPending": "Ausstehend", "noReaders": "Keine erwarteten Leser" }, - "signersAdded": "{count} lecteur(s) ajouté(s)", - "signerRemoved": "Lecteur {email} retiré", + "signersAdded": "{count} Leser hinzugefügt", + "signerRemoved": "Leser {email} entfernt", "addSigners": { - "title": "Ajouter des lecteurs", - "emailsLabel": "Adresses email", - "emailsPlaceholder": "email{'@'}exemple.com\nNom Prénom ", - "emailsHelper": "Une adresse email par ligne. Format: email ou Nom ", - "adding": "Ajout en cours...", - "add": "Ajouter" + "title": "Leser hinzufügen", + "emailsLabel": "E-Mail-Adressen", + "emailsPlaceholder": "email{'@'}beispiel.com\nVorname Nachname ", + "emailsHelper": "Eine E-Mail-Adresse pro Zeile. Format: email oder Name ", + "adding": "Wird hinzugefügt...", + "add": "Hinzufügen" }, "removeSigner": { - "title": "Retirer ce lecteur ?", - "message": "Êtes-vous sûr de vouloir retirer {email} de la liste des lecteurs attendus ?" + "title": "Diesen Leser entfernen?", + "message": "Sind Sie sicher, dass Sie {email} aus der Liste der erwarteten Leser entfernen möchten?" }, "reminders": { - "title": "Relances par email", - "description": "Envoyez des rappels aux lecteurs en attente", - "sent": "Rappels envoyés", + "title": "E-Mail-Erinnerungen", + "description": "Erinnerungen an wartende Leser senden", + "sent": "Gesendete Erinnerungen", "toRemind": "Zu erinnern", - "lastSent": "Dernier envoi", - "emailDisabled": "Le service d'envoi d'email n'est pas configuré.", - "sendToAll": "Envoyer à tous les lecteurs en attente ({count})", - "sendToSelected": "Envoyer aux lecteurs sélectionnés ({count})", - "sending": "Envoi en cours...", - "send": "Envoyer les rappels" + "lastSent": "Zuletzt gesendet", + "emailDisabled": "Der E-Mail-Dienst ist nicht konfiguriert.", + "sendToAll": "An alle wartenden Leser senden ({count})", + "sendToSelected": "An ausgewählte Leser senden ({count})", + "sending": "Wird gesendet...", + "send": "Erinnerungen senden" }, - "confirmSendReminders": "Envoyer des rappels à {count} lecteur(s) en attente ?", - "confirmSendRemindersSelected": "Envoyer des rappels à {count} lecteur(s) sélectionné(s) ?", - "remindersSentSuccess": "{count} rappel(s) envoyé(s) avec succès", - "remindersSentPartial": "{sent} rappel(s) envoyé(s), {failed} échec(s)", - "remindersSentGeneric": "Rappels envoyés", + "confirmSendReminders": "Erinnerungen an {count} wartende(n) Leser senden?", + "confirmSendRemindersSelected": "Erinnerungen an {count} ausgewählte(n) Leser senden?", + "remindersSentSuccess": "{count} Erinnerung(en) erfolgreich gesendet", + "remindersSentPartial": "{sent} Erinnerung(en) gesendet, {failed} fehlgeschlagen", + "remindersSentGeneric": "Erinnerungen gesendet", "sendReminders": { - "title": "Confirmer l'envoi" + "title": "Senden bestätigen" }, "danger": { "title": "Gefahrenzone", "description": "Irreversible Aktionen für dieses Dokument", - "deleteDocument": "Supprimer le document", - "deleteDescription": "Cette action supprimera définitivement le document et toutes les données associées." + "deleteDocument": "Dokument löschen", + "deleteDescription": "Diese Aktion löscht das Dokument und alle zugehörigen Daten dauerhaft." }, "deleteConfirm": { - "title": "Supprimer ce document ?", - "warning": "Attention !", - "message": "Cette action est irréversible. Toutes les confirmations, lecteurs attendus et l'historique seront supprimés.", - "deleting": "Suppression...", - "confirm": "Supprimer définitivement" + "title": "Dieses Dokument löschen?", + "warning": "Achtung!", + "message": "Diese Aktion ist irreversibel. Alle Bestätigungen, erwarteten Leser und der Verlauf werden gelöscht.", + "deleting": "Wird gelöscht...", + "confirm": "Dauerhaft löschen" } } } diff --git a/webapp/src/locales/es.json b/webapp/src/locales/es.json index 4ef9ac8..faf1082 100644 --- a/webapp/src/locales/es.json +++ b/webapp/src/locales/es.json @@ -19,248 +19,248 @@ "mainNavigation": "Navegación principal" }, "theme": { - "toggle": "Changer de thème" + "toggle": "Cambiar tema" }, "language": { - "select": "Sélectionner la langue", - "fr": "Français", - "en": "Anglais", - "es": "Espagnol", - "de": "Allemand", - "it": "Italien" + "select": "Seleccionar idioma", + "fr": "Francés", + "en": "Inglés", + "es": "Español", + "de": "Alemán", + "it": "Italiano" }, "auth": { "user": { - "connectedAs": "Connecté en tant que" + "connectedAs": "Conectado como" }, "choice": { - "title": "Connexion à Ackify", - "subtitle": "Choisissez votre méthode d'authentification préférée", - "privacy": "Votre authentification est sécurisée et chiffrée" + "title": "Iniciar sesión en Ackify", + "subtitle": "Elige tu método de autenticación preferido", + "privacy": "Tu autenticación es segura y está cifrada" }, "oauth": { - "title": "Connexion avec OAuth", - "description": "Utilisez votre compte entreprise", - "button": "Continuer avec OAuth", - "error": "Échec de la connexion OAuth" + "title": "Iniciar sesión con OAuth", + "description": "Usa tu cuenta corporativa", + "button": "Continuar con OAuth", + "error": "Error en el inicio de sesión OAuth" }, "magiclink": { - "title": "Connexion par Email", - "description": "Nous vous enverrons un lien magique", - "email_label": "Adresse email", - "email_placeholder": "vous{'@'}exemple.com", - "button": "Envoyer le lien magique", + "title": "Iniciar sesión por Email", + "description": "Te enviaremos un enlace mágico", + "email_label": "Dirección de email", + "email_placeholder": "tu{'@'}ejemplo.com", + "button": "Enviar enlace mágico", "sent": { - "title": "Consultez vos emails", - "message": "Nous vous avons envoyé un lien magique. Cliquez dessus pour vous connecter.", - "expire": "Le lien expire dans 15 minutes." + "title": "Revisa tu email", + "message": "Te hemos enviado un enlace mágico. Haz clic en él para iniciar sesión.", + "expire": "El enlace expira en 15 minutos." }, - "error_invalid_email": "Veuillez entrer une adresse email valide", - "error_send": "Échec de l'envoi du lien magique" + "error_invalid_email": "Por favor, introduce una dirección de email válida", + "error_send": "Error al enviar el enlace mágico" }, "error": { - "no_method_available": "Aucune méthode d'authentification n'est configurée. Veuillez contacter l'administrateur." + "no_method_available": "No hay ningún método de autenticación configurado. Por favor, contacta al administrador." } }, "home": { "hero": { - "title": "Confirmation de Lecture", - "subtitle": "Certifiez cryptographiquement que vos documents ont été lus et compris", - "createError": "Impossible de créer le document", + "title": "Confirmación de Lectura", + "subtitle": "Certifica criptográficamente que tus documentos han sido leídos y comprendidos", + "createError": "No se pudo crear el documento", "restricted": { - "title": "Création restreinte", - "description": "La création de documents est réservée aux administrateurs. Contactez votre administrateur pour obtenir un lien de document." + "title": "Creación restringida", + "description": "La creación de documentos está restringida a los administradores. Contacta a tu administrador para obtener un enlace al documento." }, "form": { - "label": "URL du document", - "placeholder": "URL, chemin ou référence du document", - "hint": "Accepte les URLs, chemins de fichiers ou identifiants simples", - "submit": "Créer", - "submitLogin": "Se connecter" + "label": "URL del documento", + "placeholder": "URL, ruta o referencia del documento", + "hint": "Acepta URLs, rutas de archivos o identificadores simples", + "submit": "Crear", + "submitLogin": "Iniciar sesión" } }, "howItWorks": { - "title": "Comment ça fonctionne ?", - "subtitle": "Ackify vous permet de prouver cryptographiquement que vos documents ont été lus", + "title": "¿Cómo funciona?", + "subtitle": "Ackify te permite probar criptográficamente que tus documentos han sido leídos", "step1": { - "title": "1. Accédez au document", - "description": "Entrez l'URL ou la référence du document à confirmer" + "title": "1. Accede al documento", + "description": "Introduce la URL o referencia del documento a confirmar" }, "step2": { - "title": "2. Lisez le contenu", - "description": "Consultez le document dans le lecteur intégré ou via le lien externe" + "title": "2. Lee el contenido", + "description": "Consulta el documento en el visor integrado o a través del enlace externo" }, "step3": { - "title": "3. Confirmez", - "description": "Votre confirmation est enregistrée avec une signature cryptographique Ed25519" + "title": "3. Confirma", + "description": "Tu confirmación se registra con una firma criptográfica Ed25519" } }, "features": { "crypto": { - "title": "Sécurité cryptographique", - "description": "Signatures Ed25519 non répudiables garantissant l'authenticité" + "title": "Seguridad criptográfica", + "description": "Firmas Ed25519 irrefutables que garantizan la autenticidad" }, "instant": { - "title": "Instantané", - "description": "Confirmation en deux clics avec vérification cryptographique immédiate" + "title": "Instantáneo", + "description": "Confirmación en dos clics con verificación criptográfica inmediata" }, "timestamp": { - "title": "Horodatage précis", - "description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité" + "title": "Marca de tiempo precisa", + "description": "Cada confirmación tiene marca de tiempo y está encadenada para garantizar la integridad" } }, "saas": { - "badge": "Bientôt disponible", - "title": "Besoin de plus ?", - "description": "Gestion d'équipes, API avancée, tableaux de bord, intégrations et support dédié pour les entreprises.", - "button": "Découvrir Ackify Pro", - "note": "Disponible prochainement" + "badge": "Próximamente", + "title": "¿Necesitas más?", + "description": "Gestión de equipos, API avanzada, dashboards, integraciones y soporte dedicado para empresas.", + "button": "Descubre Ackify Pro", + "note": "Disponible próximamente" } }, "sign": { - "title": "Confirmation de Lecture", - "subtitle": "Certifiez votre lecture avec une confirmation cryptographique Ed25519", + "title": "Confirmación de Lectura", + "subtitle": "Certifica tu lectura con una confirmación segura e irrefutable", "loading": { - "title": "Chargement du document...", - "description": "Veuillez patienter pendant que nous préparons le document pour la signature." + "title": "Cargando documento...", + "description": "Por favor, espera mientras preparamos el documento." }, "external": { "title": "Documento externo", - "description": "Por favor, lea el documento antes de confirmar su lectura.", - "descriptionWithUrl": "Este documento no es accesible directamente. Ábralo a través del enlace de abajo, léalo y luego regrese para confirmar su lectura.", + "description": "Por favor, lee el documento antes de confirmar tu lectura.", + "descriptionWithUrl": "Este documento no es accesible directamente. Ábrelo a través del enlace de abajo, léelo y luego regresa para confirmar tu lectura.", "documentUrl": "URL del documento", "openDocument": "Abrir documento", "noUrl": "No hay URL disponible para este documento" }, "alreadySigned": { - "title": "Lecture déjà confirmée", - "signedBy": "Confirmé par", + "title": "Lectura ya confirmada", + "signedBy": "Confirmado por", "email": "Email", - "signatureType": "Type de confirmation", - "ed25519": "Ed25519 cryptographique", - "downloadProof": "Télécharger la preuve" + "signatureType": "Tipo de confirmación", + "ed25519": "Ed25519 criptográfico", + "downloadProof": "Descargar prueba" }, "confirm": { - "title": "Confirmer votre lecture", - "readRequired": "Veuillez lire l'intégralité du document avant de confirmer.", - "certify": "Je certifie avoir lu et compris le contenu de ce document" + "title": "Confirma tu lectura", + "readRequired": "Por favor, lee todo el documento antes de confirmar.", + "certify": "Certifico haber leído y comprendido el contenido de este documento" }, "noDocument": { "title": "Ningún documento especificado", - "description": "Para firmar un documento, añada el parámetro {code} a la URL", + "description": "Para confirmar la lectura de un documento, añade el parámetro {code} a la URL", "examples": "Ejemplos:", - "orEnterReference": "O introduzca su referencia de documento a continuación" + "orEnterReference": "O introduce tu referencia de documento abajo" }, "success": { - "title": "Lecture confirmée avec succès !", - "description": "Votre confirmation a été enregistrée de manière cryptographique et sécurisée." + "title": "¡Lectura confirmada con éxito!", + "description": "Tu confirmación ha sido registrada de manera criptográfica y segura." }, "error": { - "title": "Une erreur est survenue", - "authRequired": "Vous devez être connecté pour créer un document.", - "loadFailed": "Échec du chargement du document", - "loginButton": "Se connecter" + "title": "Se ha producido un error", + "authRequired": "Debes estar conectado para crear un documento.", + "loadFailed": "Error al cargar el documento", + "loginButton": "Iniciar sesión" }, "documentCreation": { - "restrictedToAdmins": "Seuls les administrateurs peuvent créer des documents." + "restrictedToAdmins": "Solo los administradores pueden crear documentos." }, "document": { - "title": "Document à confirmer", + "title": "Documento a confirmar", "id": "ID" }, "info": { - "description": "En confirmant la lecture de ce document, vous certifiez avoir pris connaissance de son contenu et acceptez de le valider de manière cryptographique et non répudiable.", - "recorded": "Votre confirmation sera enregistrée avec les informations suivantes :", - "email": "Votre adresse email", - "timestamp": "Horodatage précis de la confirmation", - "signature": "Confirmation cryptographique Ed25519", - "hash": "Hash SHA-256 du contenu" + "description": "Al confirmar la lectura de este documento, certificas haber tomado conocimiento de su contenido y aceptas validarlo de manera criptográfica e irrefutable.", + "recorded": "Tu confirmación se registrará con la siguiente información:", + "email": "Tu dirección de email", + "timestamp": "Marca de tiempo precisa de la confirmación", + "signature": "Huella criptográfica segura", + "hash": "Hash SHA-256 del contenido" }, "confirmations": { - "title": "Confirmations existantes", - "count": "{count} confirmation | {count} confirmations", - "recorded": "enregistrée | enregistrées" + "title": "Confirmaciones existentes", + "count": "{count} confirmación | {count} confirmaciones", + "recorded": "registrada | registradas" }, "empty": { - "title": "Aucune confirmation pour le moment", - "description": "Soyez le premier à confirmer votre lecture de ce document" + "title": "Sin confirmaciones por el momento", + "description": "Sé el primero en confirmar la lectura de este documento" }, "howItWorks": { - "title": "Comment ça fonctionne ?", - "subtitle": "Ackify vous permet de prouver cryptographiquement que vous avez lu un document", + "title": "¿Cómo funciona?", + "subtitle": "Ackify te permite atestiguar oficialmente que has leído un documento", "step1": { - "title": "1. Accédez au document", - "description": "Ajoutez {code} à l'adresse de cette page" + "title": "1. Accede al documento", + "description": "Añade {code} a la dirección de esta página" }, "step2": { - "title": "2. Authentifiez-vous", - "description": "Connectez-vous via OAuth2 pour confirmer votre identité" + "title": "2. Autentícate", + "description": "Inicia sesión a través de OAuth2 para confirmar tu identidad" }, "step3": { - "title": "3. Confirmez la lecture", - "description": "Votre confirmation est enregistrée avec une signature Ed25519" + "title": "3. Confirma la lectura", + "description": "Tu confirmación se registra de manera segura y verificable" }, "features": { "crypto": { - "title": "Sécurité cryptographique", - "description": "Signatures Ed25519 non répudiables garantissant l'authenticité" + "title": "Seguridad criptográfica", + "description": "Confirmaciones irrefutables que garantizan la autenticidad" }, "instant": { - "title": "Instantané", - "description": "Confirmation en deux clics avec vérification cryptographique immédiate" + "title": "Instantáneo", + "description": "Confirmación en dos clics con verificación criptográfica inmediata" }, "timestamp": { - "title": "Horodatage précis", - "description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité" + "title": "Marca de tiempo precisa", + "description": "Cada confirmación tiene marca de tiempo y está encadenada para garantizar la integridad" } } } }, "signButton": { - "confirm": "Confirmer ma lecture", - "confirmAction": "Confirmer la lecture", - "alreadySigned": "Déjà confirmé", - "confirmed": "Lecture confirmée", - "mustLogin": "Se connecter pour confirmer", - "signing": "Confirmation en cours...", - "verified": "Vérifié", - "on": "Le", + "confirm": "Confirmar mi lectura", + "confirmAction": "Confirmar lectura", + "alreadySigned": "Ya confirmado", + "confirmed": "Lectura confirmada", + "mustLogin": "Iniciar sesión para confirmar", + "signing": "Confirmación en curso...", + "verified": "Verificado", + "on": "El", "error": { - "title": "Échec de la confirmation", - "notAuthenticated": "Vous devez être connecté pour confirmer un document.", - "alreadySigned": "Vous avez déjà confirmé ce document.", - "generic": "Une erreur est survenue lors de la confirmation. Veuillez réessayer.", - "missingDocId": "Document ID manquant", - "authFailed": "Impossible de démarrer l'authentification" + "title": "Confirmación fallida", + "notAuthenticated": "Debes estar conectado para confirmar un documento.", + "alreadySigned": "Ya has confirmado este documento.", + "generic": "Se ha producido un error durante la confirmación. Por favor, inténtalo de nuevo.", + "missingDocId": "ID de documento faltante", + "authFailed": "No se pudo iniciar la autenticación" } }, "signatureList": { - "loading": "Chargement des confirmations...", + "loading": "Cargando confirmaciones...", "email": "Email", - "date": "Date", - "signature": "Signature", - "confirmation": "Confirmation:", + "date": "Fecha", + "signature": "Firma", + "confirmation": "Confirmación:", "hash": "Hash", "nonce": "Nonce", - "verificationStatus": "Statut de vérification", - "verified": "Vérifié", - "confirmed": "Confirmé", - "notVerified": "Non vérifié", - "showDetails": "Afficher les détails", - "hideDetails": "Masquer les détails", - "viewDetails": "Voir détails", - "verificationDetails": "Détails de vérification", - "copy": "Copier", - "copied": "Copié !", - "previousHash": "Hash précédent:", - "empty": "Aucune confirmation trouvée", - "documentDeleted": "Document supprimé", + "verificationStatus": "Estado de verificación", + "verified": "Verificado", + "confirmed": "Confirmado", + "notVerified": "No verificado", + "showDetails": "Mostrar detalles", + "hideDetails": "Ocultar detalles", + "viewDetails": "Ver detalles", + "verificationDetails": "Detalles de verificación", + "copy": "Copiar", + "copied": "¡Copiado!", + "previousHash": "Hash anterior:", + "empty": "No se encontraron confirmaciones", + "documentDeleted": "Documento eliminado", "fields": { "id": "ID:", - "document": "Document:", - "reader": "Lecteur:", - "date": "Date:", - "source": "Origine:", + "document": "Documento:", + "reader": "Lector:", + "date": "Fecha:", + "source": "Origen:", "nonce": "Nonce:", "hash": "Hash:" } @@ -268,18 +268,18 @@ "signatures": { "title": "Mis confirmaciones de lectura", "subtitle": "Lista de todos los documentos cuya lectura has confirmado criptográficamente", - "loading": "Chargement de vos confirmations...", + "loading": "Cargando tus confirmaciones...", "empty": { - "title": "Aucune confirmation pour le moment", - "description": "Vous n'avez pas encore confirmé de document. Commencez par confirmer un document pour le voir apparaître ici.", - "alternative": "Vous n'avez pas encore confirmé la lecture de documents" + "title": "Sin confirmaciones por el momento", + "description": "Aún no has confirmado ningún documento. Empieza confirmando un documento para verlo aparecer aquí.", + "alternative": "Aún no has confirmado la lectura de documentos" }, - "count": "{count} confirmation | {count} confirmations", - "results": "{count} résultat | {count} résultats", + "count": "{count} confirmación | {count} confirmaciones", + "results": "{count} resultado | {count} resultados", "document": "Documento", "signedAt": "Confirmado el", - "viewDetails": "Voir les détails", - "deletedDocuments": "Documents supprimés", + "viewDetails": "Ver detalles", + "deletedDocuments": "Documentos eliminados", "stats": { "total": "Total", "totalConfirmations": "Total confirmaciones", @@ -292,24 +292,24 @@ "allConfirmations": "Todas mis confirmaciones", "about": { "title": "Acerca de las confirmaciones", - "description": "Cada confirmación se registra criptográficamente con Ed25519 y se encadena para garantizar la integridad. Las confirmaciones son irrefutables y tienen una marca de tiempo precisa." + "description": "Cada confirmación se registra criptográficamente y se encadena para garantizar la integridad. Las confirmaciones son irrefutables y tienen una marca de tiempo precisa." }, "search": "Buscar...", "error": { - "title": "Erreur de chargement des confirmations", - "description": "Impossible de charger vos confirmations. Veuillez réessayer." + "title": "Error al cargar las confirmaciones", + "description": "No se pudieron cargar tus confirmaciones. Por favor, inténtalo de nuevo." } }, "admin": { - "title": "Administration", + "title": "Administración", "subtitle": "Gestionar documentos y lectores esperados", "loading": "Cargando datos...", "dashboard": { - "title": "Tableau de bord", - "totalDocuments": "Documents totaux", - "totalSignatures": "Confirmations totales", - "recentActivity": "Activité récente", - "backToDashboard": "Retour au tableau de bord", + "title": "Panel de control", + "totalDocuments": "Documentos totales", + "totalSignatures": "Confirmaciones totales", + "recentActivity": "Actividad reciente", + "backToDashboard": "Volver al panel", "stats": { "documents": "Documentos", "readers": "Lectores", @@ -328,34 +328,34 @@ "searchPlaceholder": "Buscar por ID, título o URL...", "id": "ID del documento", "idLabel": "Documento", - "idHelper": "Accepte les URLs, les chemins de fichiers ou les identifiants simples", - "idHelperShort": "Accepte les URLs, chemins ou identifiants", - "idPlaceholder": "URL, PATH ou ID du document", - "signatures": "Confirmations", - "created": "Créé", + "idHelper": "Acepta URLs, rutas de archivos o identificadores simples", + "idHelperShort": "Acepta URLs, rutas o identificadores", + "idPlaceholder": "URL, ruta o ID del documento", + "signatures": "Confirmaciones", + "created": "Creado", "createdOn": "Creado el", "by": "Por", "url": "URL", "document": "Documento", - "actions": "Actions", - "view": "Voir", + "actions": "Acciones", + "view": "Ver", "manage": "Gestionar", - "edit": "Modifier", - "delete": "Supprimer", - "empty": "Aucun document trouvé", - "noResults": "Aucun résultat", - "noDocuments": "Aucun document", - "tryAnotherSearch": "Essayez une autre recherche", - "willAppear": "Les documents apparaîtront ici une fois créés", - "totalCount": "{count} document au total | {count} documents au total", + "edit": "Editar", + "delete": "Eliminar", + "empty": "No se encontraron documentos", + "noResults": "Sin resultados", + "noDocuments": "Sin documentos", + "tryAnotherSearch": "Prueba otra búsqueda", + "willAppear": "Los documentos aparecerán aquí una vez creados", + "totalCount": "{count} documento en total | {count} documentos en total", "pagination": { - "page": "Page {current}/{total}", - "pageOf": "Page {current} sur {total}" + "page": "Página {current}/{total}", + "pageOf": "Página {current} de {total}" } }, "settings": { "title": "Configuración", - "subtitle": "Configure su instancia de Ackify", + "subtitle": "Configura tu instancia de Ackify", "manage": "Configuración", "loading": "Cargando configuración...", "lastUpdated": "Última actualización: {date}", @@ -374,7 +374,7 @@ }, "general": { "title": "Configuración general", - "description": "Configuración básica de su instancia Ackify", + "description": "Configuración básica de tu instancia Ackify", "organisation": "Nombre de la organización", "organisationPlaceholder": "Mi Empresa", "organisationHelper": "Se muestra en emails e interfaz", @@ -394,9 +394,9 @@ "custom": "Personalizado" }, "clientId": "Client ID", - "clientIdPlaceholder": "Ingrese su client ID", + "clientIdPlaceholder": "Ingresa tu client ID", "clientSecret": "Client Secret", - "clientSecretPlaceholder": "Ingrese su client secret", + "clientSecretPlaceholder": "Ingresa tu client secret", "clientSecretHelper": "Dejar vacío para mantener el valor existente", "authUrl": "URL de autorización", "authUrlPlaceholder": "https://provider.com/oauth/authorize", @@ -432,7 +432,7 @@ "username": "Usuario", "usernamePlaceholder": "user@ejemplo.com", "password": "Contraseña", - "passwordPlaceholder": "Ingrese contraseña", + "passwordPlaceholder": "Ingresa contraseña", "passwordHelper": "Dejar vacío para mantener el valor existente", "tls": "Usar TLS", "tlsHelper": "Usar conexión TLS implícita", @@ -471,7 +471,7 @@ "s3AccessKey": "Clave de acceso", "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE", "s3SecretKey": "Clave secreta", - "s3SecretKeyPlaceholder": "Ingrese clave secreta", + "s3SecretKeyPlaceholder": "Ingresa clave secreta", "s3SecretKeyHelper": "Dejar vacío para mantener el valor existente", "s3Region": "Región", "s3RegionPlaceholder": "us-east-1", @@ -501,56 +501,56 @@ }, "webhooks": { "title": "Webhooks", - "subtitle": "Configurer les notifications vers des applications tierces", - "manage": "Gérer les webhooks", - "new": "Nouveau webhook", - "edit": "Éditer", - "delete": "Supprimer", - "enable": "Activer", - "disable": "Désactiver", + "subtitle": "Configurar notificaciones a aplicaciones de terceros", + "manage": "Gestionar webhooks", + "new": "Nuevo webhook", + "edit": "Editar", + "delete": "Eliminar", + "enable": "Activar", + "disable": "Desactivar", "status": { - "enabled": "Actif", - "disabled": "Inactif" + "enabled": "Activo", + "disabled": "Inactivo" }, - "confirmDelete": "Supprimer ce webhook ?", - "empty": "Aucun webhook", - "listTitle": "Liste des webhooks", - "listSubtitle": "Un webhook peut écouter plusieurs événements", + "confirmDelete": "¿Eliminar este webhook?", + "empty": "Sin webhooks", + "listTitle": "Lista de webhooks", + "listSubtitle": "Un webhook puede escuchar múltiples eventos", "columns": { "title": "Nombre", "url": "URL", - "events": "Événements", + "events": "Eventos", "status": "Estado", - "actions": "Actions" + "actions": "Acciones" }, "form": { - "title": "Paramètres du webhook", - "subtitle": "Renseignez l'URL, le secret et les événements", - "nameLabel": "Nom du webhook", + "title": "Configuración del webhook", + "subtitle": "Ingresa URL, secreto y eventos", + "nameLabel": "Nombre del webhook", "namePlaceholder": "Webhook CRM", - "urlLabel": "URL de destination", - "secretLabel": "Secret HMAC", - "secretPlaceholder": "Saisissez un secret (requis)", - "secretKeep": "Laisser vide pour conserver", - "eventsLabel": "Événements à écouter", - "descriptionLabel": "Description (optionnel)", - "descriptionPlaceholder": "Note interne…", - "validation": "Veuillez compléter le nom, l'URL, le secret et au moins un événement." + "urlLabel": "URL de destino", + "secretLabel": "Secreto HMAC", + "secretPlaceholder": "Ingresa un secreto (requerido)", + "secretKeep": "Dejar vacío para mantener", + "eventsLabel": "Eventos a escuchar", + "descriptionLabel": "Descripción (opcional)", + "descriptionPlaceholder": "Nota interna…", + "validation": "Por favor, completa nombre, URL, secreto y al menos un evento." }, - "editTitle": "Éditer le webhook", + "editTitle": "Editar webhook", "events": { - "documentCreated": "Document créé", - "signatureCreated": "Signature créée", - "documentCompleted": "Document complété", - "reminderSent": "Rappel envoyé", - "reminderFailed": "Rappel échoué" + "documentCreated": "Documento creado", + "signatureCreated": "Firma creada", + "documentCompleted": "Documento completado", + "reminderSent": "Recordatorio enviado", + "reminderFailed": "Recordatorio fallido" }, "eventsMap": { - "document.created": "Document créé", - "signature.created": "Signature créée", - "document.completed": "Document complété", - "reminder.sent": "Rappel envoyé", - "reminder.failed": "Rappel échoué" + "document.created": "Documento creado", + "signature.created": "Firma creada", + "document.completed": "Documento completado", + "reminder.sent": "Recordatorio enviado", + "reminder.failed": "Recordatorio fallido" } }, "documentDetail": { @@ -559,26 +559,26 @@ "metadata": "📄 Información del documento", "metadataDescription": "Metadatos y checksum del documento", "checksum": "Checksum", - "algorithm": "Algorithme", + "algorithm": "Algoritmo", "titleLabel": "Título", "titlePlaceholder": "Política de seguridad 2025", "urlLabel": "URL", "urlPlaceholder": "https://example.com/doc.pdf", "checksumLabel": "Checksum", "checksumPlaceholder": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "algorithmLabel": "Algorithme", + "algorithmLabel": "Algoritmo", "descriptionLabel": "Descripción", "descriptionPlaceholder": "Descripción del documento...", - "signatures": "Confirmations", - "back": "Retour", + "signatures": "Confirmaciones", + "back": "Volver", "expectedSigners": "Firmantes esperados", "addExpectedSigner": "Añadir firmante esperado", "addSigners": "Añadir lectores esperados", - "addButton": "Ajouter", - "adding": "Ajout...", + "addButton": "Añadir", + "adding": "Añadiendo...", "emailsLabel": "Emails (uno por línea)", - "emailsPlaceholder": "Marie Dupont \njean.martin{'@'}example.com\nSophie Bernard ", - "emailsHelper": "Formats acceptés : \"Nom Prénom \" ou \"email{'@'}example.com\"", + "emailsPlaceholder": "María García \njuan.perez{'@'}example.com\nAna López ", + "emailsHelper": "Formatos aceptados: \"Nombre Apellido \" o \"email{'@'}example.com\"", "emailLabel": "Email *", "emailPlaceholder": "email{'@'}example.com", "nameLabel": "Nombre", @@ -593,167 +593,167 @@ "noExpectedSigners": "Ningún lector esperado", "noSignatures": "Ninguna confirmación", "reminders": "Recordatorios por email", - "remindersDescription": "Envoyer des rappels aux lecteurs en attente de confirmation", + "remindersDescription": "Enviar recordatorios a los lectores pendientes de confirmación", "remindersSent": "Recordatorios enviados", "toRemind": "Para recordar", "lastReminder": "Último recordatorio", "sendReminder": "Enviar recordatorio", - "sending": "Envoi...", - "sendReminders": "Envoyer les relances", - "sendToAll": "Envoyer à tous les lecteurs en attente ({count})", - "sendToSelected": "Envoyer uniquement aux sélectionnés ({count})", - "allContacted": "Todos los lectores esperados han sido contactados o confirmados", + "sending": "Enviando...", + "sendReminders": "Enviar recordatorios", + "sendToAll": "Enviar a todos los lectores pendientes ({count})", + "sendToSelected": "Enviar solo a los seleccionados ({count})", + "allContacted": "Todos los lectores esperados han sido contactados o han confirmado", "emailServiceDisabled": "El servicio de email está desactivado. El historial de recordatorios permanece visible, pero el envío de nuevos recordatorios no está disponible.", "unexpectedSignatures": "Confirmaciones de lectura adicionales", - "unexpectedDescription": "Utilisateurs ayant confirmé mais non présents dans la liste des lecteurs attendus", - "createdBy": "Créé par {by} le {date}", - "saving": "Enregistrement...", - "deleting": "Suppression...", - "copiedToClipboard": "Copié dans le presse-papiers", - "metadataSaved": "Métadonnées enregistrées avec succès", - "signersAdded": "{count} lecteur(s) ajouté(s) avec succès", - "signerRemoved": "{email} retiré avec succès", - "remindersSentSuccess": "{count} relance(s) envoyée(s) avec succès", - "remindersSentPartial": "{sent} relance(s) envoyée(s), {failed} échec(s)", - "remindersSentGeneric": "Relances envoyées avec succès", - "confirmSendReminders": "Envoyer des relances à {count} lecteur(s) en attente de confirmation ?", - "confirmSendRemindersSelected": "Envoyer des relances à {count} lecteur(s) sélectionné(s) ?", + "unexpectedDescription": "Usuarios que han confirmado pero no están en la lista de lectores esperados", + "createdBy": "Creado por {by} el {date}", + "saving": "Guardando...", + "deleting": "Eliminando...", + "copiedToClipboard": "Copiado al portapapeles", + "metadataSaved": "Metadatos guardados correctamente", + "signersAdded": "{count} lector(es) añadido(s) correctamente", + "signerRemoved": "{email} eliminado correctamente", + "remindersSentSuccess": "{count} recordatorio(s) enviado(s) correctamente", + "remindersSentPartial": "{sent} recordatorio(s) enviado(s), {failed} fallido(s)", + "remindersSentGeneric": "Recordatorios enviados correctamente", + "confirmSendReminders": "¿Enviar recordatorios a {count} lector(es) pendiente(s) de confirmación?", + "confirmSendRemindersSelected": "¿Enviar recordatorios a {count} lector(es) seleccionado(s)?", "confirmSendRemindersTitle": "Enviar recordatorios", "removeSignerTitle": "Eliminar lector esperado", - "removeSignerMessage": "Retirer {email} de la liste des lecteurs attendus ?", + "removeSignerMessage": "¿Eliminar {email} de la lista de lectores esperados?", "metadataWarning": { "title": "Atención: Invalidación de firmas", - "description": "Vous êtes sur le point de modifier des informations critiques du document (URL, checksum, algorithme ou description).", - "warning": "Cette modification entraînera l'invalidation de toutes les signatures existantes, car elles sont liées cryptographiquement au contenu actuel du document.", - "currentSignatures": "Signatures actuelles qui seront invalidées :", - "confirm": "Je comprends, continuer", - "cancel": "Annuler" + "description": "Estás a punto de modificar información crítica del documento (URL, checksum, algoritmo o descripción).", + "warning": "Esta modificación invalidará todas las firmas existentes, ya que están vinculadas criptográficamente al contenido actual del documento.", + "currentSignatures": "Firmas actuales que serán invalidadas:", + "confirm": "Entiendo, continuar", + "cancel": "Cancelar" }, "dangerZone": "Zona de peligro", "dangerZoneDescription": "Acciones irreversibles sobre este documento", "deleteDocument": "Eliminar este documento", - "deleteDocumentDescription": "Cette action supprimera définitivement le document, ses métadonnées, les lecteurs attendus et toutes les confirmations associées.\nCette action est irréversible.", + "deleteDocumentDescription": "Esta acción eliminará definitivamente el documento, sus metadatos, los lectores esperados y todas las confirmaciones asociadas.\nEsta acción es irreversible.", "deleteWarning": "¡Esta acción es irreversible!", - "deleteWillRemove": "La suppression de ce document entraînera la perte définitive de :", + "deleteWillRemove": "La eliminación de este documento conllevará la pérdida definitiva de:", "deleteItem1": "Todos los metadatos del documento", "deleteItem2": "La lista de lectores esperados", "deleteItem3": "Todas las confirmaciones criptográficas", "deleteItem4": "El historial de recordatorios", "deleteConfirmTitle": "Confirmar eliminación", - "deleteConfirmButton": "Supprimer définitivement", - "documentId": "Document ID:", - "importCSV": "Import CSV", - "importCSVTitle": "Importer des lecteurs depuis un fichier CSV", - "selectFile": "Sélectionner un fichier CSV", - "csvFormatHelp": "Format accepté : colonnes 'email' et 'name' (ordre libre), séparateur virgule ou point-virgule", - "analyze": "Analyser", - "analyzing": "Analyse...", - "validEntries": "Valides", - "existingEntries": "Déjà présents", - "invalidEntries": "Invalides", - "lineNumber": "Ligne", + "deleteConfirmButton": "Eliminar definitivamente", + "documentId": "ID del Documento:", + "importCSV": "Importar CSV", + "importCSVTitle": "Importar lectores desde un archivo CSV", + "selectFile": "Seleccionar un archivo CSV", + "csvFormatHelp": "Formato aceptado: columnas 'email' y 'name' (orden libre), separador coma o punto y coma", + "analyze": "Analizar", + "analyzing": "Analizando...", + "validEntries": "Válidos", + "existingEntries": "Ya presentes", + "invalidEntries": "Inválidos", + "lineNumber": "Línea", "email": "Email", "name": "Nombre", - "statusValid": "Valide", - "statusExists": "Existant", - "parseErrors": "Erreurs de parsing", - "content": "Contenu", - "errorReason": "Erreur", - "backToFileSelection": "Retour", - "importing": "Import...", - "importButton": "Importer {count} lecteur(s)", - "csvImportSuccess": "{imported} lecteur(s) importé(s), {skipped} ignoré(s)", - "filterPlaceholder": "Filtrer par nom ou email...", + "statusValid": "Válido", + "statusExists": "Existente", + "parseErrors": "Errores de parsing", + "content": "Contenido", + "errorReason": "Error", + "backToFileSelection": "Volver", + "importing": "Importando...", + "importButton": "Importar {count} lector(es)", + "csvImportSuccess": "{imported} lector(es) importado(s), {skipped} omitido(s)", + "filterPlaceholder": "Filtrar por nombre o email...", "csvError": { - "email_required": "Email requis", - "invalid_email_format": "Format email invalide", - "max_signers_exceeded": "Limite dépassée" + "email_required": "Email requerido", + "invalid_email_format": "Formato de email inválido", + "max_signers_exceeded": "Límite superado" } }, "documentForm": { - "title": "Référence du document", - "label": "Référence (URL, chemin ou ID)", - "placeholder": "URL, PATH ou RÉFÉRENCE du document à lire (optionnel)", - "submit": "Commencer", - "submitting": "Chargement...", - "creating": "Création en cours..." + "title": "Referencia del documento", + "label": "Referencia (URL, ruta o ID)", + "placeholder": "URL, ruta o referencia del documento a leer (opcional)", + "submit": "Comenzar", + "submitting": "Cargando...", + "creating": "Creando..." } }, "embed": { - "loading": "Chargement des informations de signature...", - "title": "Signature pour", - "document": "Document:", - "signedBy": "Signé par", - "on": "le", - "verified": "Vérifié", - "viewAll": "Voir toutes les confirmations", - "error": "Impossible de charger les informations de signature", - "sign": "Signer", - "signDocument": "Signer ce document", - "noSignatures": "Aucune signature pour ce document", - "confirmationsCount": "{count} confirmation(s)", + "loading": "Cargando información de confirmación...", + "title": "Confirmación para", + "document": "Documento:", + "signedBy": "Confirmado por", + "on": "el", + "verified": "Verificado", + "viewAll": "Ver todas las confirmaciones", + "error": "No se pudo cargar la información de confirmación", + "sign": "Confirmar", + "signDocument": "Confirmar este documento", + "noSignatures": "Sin confirmaciones para este documento", + "confirmationsCount": "{count} confirmación(es)", "poweredBy": "Powered by Ackify", - "missingDocId": "ID de document manquant" + "missingDocId": "ID de documento faltante" }, "notFound": { - "title": "Page non trouvée", - "description": "La page que vous recherchez n'existe pas ou a été déplacée.", - "home": "Retour à l'accueil" + "title": "Página no encontrada", + "description": "La página que buscas no existe o ha sido movida.", + "home": "Volver al inicio" }, "footer": { - "description": "Solution open-source de confirmation cryptographique de lecture de documents avec signatures Ed25519 non répudiables.", + "description": "Solución open-source para confirmación criptográfica de lectura de documentos con atestaciones irrefutables.", "navigation": { - "title": "Navigation" + "title": "Navegación" }, "resources": { - "title": "Ressources", - "documentation": "Documentation", - "apiReference": "Référence API", - "support": "Support" + "title": "Recursos", + "documentation": "Documentación", + "apiReference": "Referencia API", + "support": "Soporte" }, "legal": { - "title": "Légal", - "terms": "Conditions d'utilisation", - "privacy": "Politique de confidentialité", - "contact": "Contact" + "title": "Legal", + "terms": "Términos de uso", + "privacy": "Política de privacidad", + "contact": "Contacto" }, - "copyright": "Tous droits réservés.", - "license": "Licence AGPL-3.0-or-later", - "madeWith": "Fait avec", - "by": "par", + "copyright": "Todos los derechos reservados.", + "license": "Licencia AGPL-3.0-or-later", + "madeWith": "Hecho con", + "by": "por", "links": { - "privacy": "Confidentialité", - "terms": "Conditions", - "contact": "Contact" + "privacy": "Privacidad", + "terms": "Términos", + "contact": "Contacto" } }, "toast": { - "success": "Succès", - "error": "Erreur", - "info": "Information", - "warning": "Avertissement" + "success": "Éxito", + "error": "Error", + "info": "Información", + "warning": "Advertencia" }, "common": { - "error": "Erreur", - "loading": "Chargement...", - "save": "Enregistrer", - "cancel": "Annuler", - "delete": "Supprimer", - "edit": "Modifier", - "close": "Fermer", - "confirm": "Confirmer", - "yes": "Oui", - "no": "Non", - "search": "Rechercher", - "filter": "Filtrer", - "sort": "Trier", - "actions": "Actions", - "details": "Détails", - "back": "Retour", - "next": "Suivant", - "previous": "Précédent", - "skipToContent": "Aller au contenu principal", - "refresh": "Actualiser" + "error": "Error", + "loading": "Cargando...", + "save": "Guardar", + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "close": "Cerrar", + "confirm": "Confirmar", + "yes": "Sí", + "no": "No", + "search": "Buscar", + "filter": "Filtrar", + "sort": "Ordenar", + "actions": "Acciones", + "details": "Detalles", + "back": "Volver", + "next": "Siguiente", + "previous": "Anterior", + "skipToContent": "Ir al contenido principal", + "refresh": "Actualizar" }, "documentViewer": { "loading": "Cargando documento...", @@ -765,7 +765,7 @@ "page": "Página {current} / {total}" }, "progress": "{percent}% leído", - "scrollToRead": "Desplácese para leer el documento", + "scrollToRead": "Desplázate para leer el documento", "readComplete": "Lectura completa", "pdfViewer": "Visor PDF", "htmlViewer": "Contenido HTML", @@ -774,16 +774,16 @@ "valid": "Integridad verificada", "invalid": "Integridad comprometida", "mismatchTitle": "Advertencia: El documento ha sido modificado", - "mismatchDescription": "La suma de verificación del documento no coincide con la registrada. El documento puede haber sido alterado desde su creación.", + "mismatchDescription": "El checksum del documento no coincide con el registrado. El documento puede haber sido alterado desde su creación.", "expected": "Esperado", "actual": "Calculado" }, "pdfFallback": { "title": "Vista previa de PDF no disponible", - "description": "Su navegador no puede mostrar este PDF en línea. Por favor, descárguelo o ábralo en una nueva pestaña." + "description": "Tu navegador no puede mostrar este PDF en línea. Por favor, descárgalo o ábrelo en una nueva pestaña." }, "pdfReadConfirm": { - "message": "Por favor, confirme que ha leído este documento completamente.", + "message": "Por favor, confirma que has leído este documento completamente.", "button": "He leído este documento" }, "error": { @@ -803,88 +803,88 @@ "label": "Documento", "placeholder": "URL, ruta o ID del documento", "helper": "Acepta URLs, rutas de archivos o identificadores simples", - "helperWithUpload": "Acepta URLs, rutas, identificadores o archivos cargados (PDF, imágenes, documentos)", - "placeholderWithUpload": "Referencia, URL o haga clic en el icono para cargar" + "helperWithUpload": "Acepta URLs, rutas, identificadores o archivos subidos (PDF, imágenes, documentos)", + "placeholderWithUpload": "Referencia, URL o haz clic en el icono para subir" }, "upload": { - "button": "Cargar un archivo", - "submit": "Cargar", - "uploading": "Cargando..." + "button": "Subir un archivo", + "submit": "Subir", + "uploading": "Subiendo..." }, - "submit": "Créer", - "submitting": "Création...", + "submit": "Crear", + "submitting": "Creando...", "title": { "label": "Título", - "placeholder": "Auto-détecté si vide" + "placeholder": "Auto-detectado si está vacío" }, "readMode": { - "label": "Mode de lecture", - "integrated": "Lecteur intégré", - "external": "Lien externe" + "label": "Modo de lectura", + "integrated": "Visor integrado", + "external": "Enlace externo" }, "options": { - "title": "Options avancées", - "allowDownload": "Autoriser le téléchargement", - "requireFullRead": "Exiger la lecture complète", - "verifyChecksum": "Vérifier le checksum à chaque lecture" + "title": "Opciones avanzadas", + "allowDownload": "Permitir descarga", + "requireFullRead": "Requerir lectura completa", + "verifyChecksum": "Verificar checksum en cada lectura" }, "checksum": { "label": "Checksum", - "placeholder": "Auto-calculé si vide" + "placeholder": "Auto-calculado si está vacío" }, "algorithm": { - "label": "Algorithme" + "label": "Algoritmo" }, "description": { "label": "Descripción", "placeholder": "Descripción del documento..." }, "error": { - "urlRequired": "L'URL du document est requise", - "createFailed": "Échec de la création du document", - "authRequired": "Authentification requise pour créer un document", - "forbidden": "Vous n'avez pas les droits pour créer un document" + "urlRequired": "La URL del documento es requerida", + "createFailed": "Error al crear el documento", + "authRequired": "Autenticación requerida para crear un documento", + "forbidden": "No tienes permisos para crear un documento" } }, "myDocuments": { - "title": "Mes documents", - "subtitle": "Gérer les documents que vous avez créés", - "listTitle": "Liste des documents", - "results": "{count} résultat | {count} résultats", - "searchPlaceholder": "Rechercher par titre ou URL...", - "signatureCount": "signature | signatures", - "totalCount": "{count} document au total | {count} documents au total", - "noResults": "Aucun résultat", - "tryAnotherSearch": "Essayez une autre recherche", + "title": "Mis documentos", + "subtitle": "Gestiona los documentos que has creado", + "listTitle": "Lista de documentos", + "results": "{count} resultado | {count} resultados", + "searchPlaceholder": "Buscar por título o URL...", + "signatureCount": "firma | firmas", + "totalCount": "{count} documento en total | {count} documentos en total", + "noResults": "Sin resultados", + "tryAnotherSearch": "Prueba otra búsqueda", "stats": { "total": "Total", "pending": "Pendientes", - "completed": "Complétés", - "totalDocuments": "Documents totaux", - "pendingDocuments": "En attente de signatures", - "completedDocuments": "Complétés" + "completed": "Completados", + "totalDocuments": "Documentos totales", + "pendingConfirmations": "Confirmaciones pendientes", + "completedDocuments": "Completados" }, "columns": { "document": "Documento", "status": "Estado", "createdAt": "Creado el", - "actions": "Actions" + "actions": "Acciones" }, "actions": { - "view": "Voir", - "copyLink": "Copier le lien", - "delete": "Supprimer" + "view": "Ver", + "copyLink": "Copiar enlace", + "delete": "Eliminar" }, "empty": { - "title": "Aucun document", - "description": "Créez votre premier document pour commencer à suivre les confirmations de lecture" + "title": "Sin documentos", + "description": "Crea tu primer documento para empezar a seguir las confirmaciones de lectura" }, "deleteConfirm": { - "title": "Supprimer ce document ?", - "message": "Cette action supprimera définitivement le document \"{title}\" et toutes les données associées." + "title": "¿Eliminar este documento?", + "message": "Esta acción eliminará definitivamente el documento \"{title}\" y todos los datos asociados." }, "pagination": { - "page": "Page {current}/{total}" + "page": "Página {current}/{total}" } }, "documentEdit": { @@ -892,97 +892,97 @@ "subtitle": "Gestionar metadatos y lectores esperados", "back": "Volver", "breadcrumb": { - "myDocuments": "Mes documents" + "myDocuments": "Mis documentos" }, "unauthorized": { - "title": "Accès non autorisé", - "description": "Vous n'avez pas les droits pour accéder à ce document.", - "backToDocuments": "Retour à mes documents" + "title": "Acceso no autorizado", + "description": "No tienes permisos para acceder a este documento.", + "backToDocuments": "Volver a mis documentos" }, "shareLink": { - "title": "Lien de partage", - "copy": "Copier", - "copied": "Copié !" + "title": "Enlace de compartir", + "copy": "Copiar", + "copied": "¡Copiado!" }, "stats": { - "expected": "Lecteurs attendus", - "confirmed": "Confirmés", + "expected": "Lectores esperados", + "confirmed": "Confirmados", "pending": "Pendientes" }, "metadata": { - "title": "Métadonnées", - "description": "Informations de base du document", + "title": "Metadatos", + "description": "Información básica del documento", "titleLabel": "Título", - "titlePlaceholder": "Titre du document", + "titlePlaceholder": "Título del documento", "urlLabel": "URL", - "urlPlaceholder": "https://exemple.com/document.pdf", + "urlPlaceholder": "https://ejemplo.com/documento.pdf", "checksumLabel": "Checksum", - "checksumPlaceholder": "Empreinte du fichier (optionnel)", - "algorithmLabel": "Algorithme", + "checksumPlaceholder": "Huella del archivo (opcional)", + "algorithmLabel": "Algoritmo", "descriptionLabel": "Descripción", "descriptionPlaceholder": "Descripción del documento...", - "createdBy": "Créé par {by} le {date}", - "saving": "Enregistrement..." + "createdBy": "Creado por {by} el {date}", + "saving": "Guardando..." }, - "metadataSaved": "Métadonnées enregistrées avec succès", + "metadataSaved": "Metadatos guardados correctamente", "readers": { - "title": "Lecteurs attendus", - "confirmed": "confirmés", - "add": "Ajouter", - "filterPlaceholder": "Filtrer par email ou nom...", + "title": "Lectores esperados", + "confirmed": "confirmados", + "add": "Añadir", + "filterPlaceholder": "Filtrar por email o nombre...", "reader": "Lector", "status": "Estado", "confirmedOn": "Confirmado el", - "statusConfirmed": "Confirmé", - "statusPending": "Pendientes", + "statusConfirmed": "Confirmado", + "statusPending": "Pendiente", "noReaders": "Ningún lector esperado" }, - "signersAdded": "{count} lecteur(s) ajouté(s)", - "signerRemoved": "Lecteur {email} retiré", + "signersAdded": "{count} lector(es) añadido(s)", + "signerRemoved": "Lector {email} eliminado", "addSigners": { - "title": "Ajouter des lecteurs", - "emailsLabel": "Adresses email", - "emailsPlaceholder": "email{'@'}exemple.com\nNom Prénom ", - "emailsHelper": "Une adresse email par ligne. Format: email ou Nom ", - "adding": "Ajout en cours...", - "add": "Ajouter" + "title": "Añadir lectores", + "emailsLabel": "Direcciones de email", + "emailsPlaceholder": "email{'@'}ejemplo.com\nNombre Apellido ", + "emailsHelper": "Una dirección de email por línea. Formato: email o Nombre ", + "adding": "Añadiendo...", + "add": "Añadir" }, "removeSigner": { - "title": "Retirer ce lecteur ?", - "message": "Êtes-vous sûr de vouloir retirer {email} de la liste des lecteurs attendus ?" + "title": "¿Eliminar este lector?", + "message": "¿Estás seguro de que quieres eliminar {email} de la lista de lectores esperados?" }, "reminders": { - "title": "Relances par email", - "description": "Envoyez des rappels aux lecteurs en attente", - "sent": "Rappels envoyés", + "title": "Recordatorios por email", + "description": "Envía recordatorios a los lectores pendientes", + "sent": "Recordatorios enviados", "toRemind": "Para recordar", - "lastSent": "Dernier envoi", - "emailDisabled": "Le service d'envoi d'email n'est pas configuré.", - "sendToAll": "Envoyer à tous les lecteurs en attente ({count})", - "sendToSelected": "Envoyer aux lecteurs sélectionnés ({count})", - "sending": "Envoi en cours...", - "send": "Envoyer les rappels" + "lastSent": "Último envío", + "emailDisabled": "El servicio de envío de email no está configurado.", + "sendToAll": "Enviar a todos los lectores pendientes ({count})", + "sendToSelected": "Enviar a los lectores seleccionados ({count})", + "sending": "Enviando...", + "send": "Enviar recordatorios" }, - "confirmSendReminders": "Envoyer des rappels à {count} lecteur(s) en attente ?", - "confirmSendRemindersSelected": "Envoyer des rappels à {count} lecteur(s) sélectionné(s) ?", - "remindersSentSuccess": "{count} rappel(s) envoyé(s) avec succès", - "remindersSentPartial": "{sent} rappel(s) envoyé(s), {failed} échec(s)", - "remindersSentGeneric": "Rappels envoyés", + "confirmSendReminders": "¿Enviar recordatorios a {count} lector(es) pendiente(s)?", + "confirmSendRemindersSelected": "¿Enviar recordatorios a {count} lector(es) seleccionado(s)?", + "remindersSentSuccess": "{count} recordatorio(s) enviado(s) correctamente", + "remindersSentPartial": "{sent} recordatorio(s) enviado(s), {failed} fallido(s)", + "remindersSentGeneric": "Recordatorios enviados", "sendReminders": { - "title": "Confirmer l'envoi" + "title": "Confirmar envío" }, "danger": { "title": "Zona de peligro", "description": "Acciones irreversibles sobre este documento", - "deleteDocument": "Supprimer le document", - "deleteDescription": "Cette action supprimera définitivement le document et toutes les données associées." + "deleteDocument": "Eliminar documento", + "deleteDescription": "Esta acción eliminará definitivamente el documento y todos los datos asociados." }, "deleteConfirm": { - "title": "Supprimer ce document ?", - "warning": "Attention !", - "message": "Cette action est irréversible. Toutes les confirmations, lecteurs attendus et l'historique seront supprimés.", - "deleting": "Suppression...", - "confirm": "Supprimer définitivement" + "title": "¿Eliminar este documento?", + "warning": "¡Atención!", + "message": "Esta acción es irreversible. Todas las confirmaciones, lectores esperados y el historial serán eliminados.", + "deleting": "Eliminando...", + "confirm": "Eliminar definitivamente" } } } diff --git a/webapp/src/locales/it.json b/webapp/src/locales/it.json index 043b621..9e38ffe 100644 --- a/webapp/src/locales/it.json +++ b/webapp/src/locales/it.json @@ -19,110 +19,110 @@ "mainNavigation": "Navigazione principale" }, "theme": { - "toggle": "Changer de thème" + "toggle": "Cambia tema" }, "language": { - "select": "Sélectionner la langue", - "fr": "Français", - "en": "Anglais", - "es": "Espagnol", - "de": "Allemand", - "it": "Italien" + "select": "Seleziona lingua", + "fr": "Francese", + "en": "Inglese", + "es": "Spagnolo", + "de": "Tedesco", + "it": "Italiano" }, "auth": { "user": { - "connectedAs": "Connecté en tant que" + "connectedAs": "Connesso come" }, "choice": { - "title": "Connexion à Ackify", - "subtitle": "Choisissez votre méthode d'authentification préférée", - "privacy": "Votre authentification est sécurisée et chiffrée" + "title": "Accedi ad Ackify", + "subtitle": "Scegli il tuo metodo di autenticazione preferito", + "privacy": "La tua autenticazione è sicura e crittografata" }, "oauth": { - "title": "Connexion avec OAuth", - "description": "Utilisez votre compte entreprise", - "button": "Continuer avec OAuth", - "error": "Échec de la connexion OAuth" + "title": "Accedi con OAuth", + "description": "Usa il tuo account aziendale", + "button": "Continua con OAuth", + "error": "Accesso OAuth fallito" }, "magiclink": { - "title": "Connexion par Email", - "description": "Nous vous enverrons un lien magique", - "email_label": "Adresse email", - "email_placeholder": "vous{'@'}exemple.com", - "button": "Envoyer le lien magique", + "title": "Accedi con Email", + "description": "Ti invieremo un link magico", + "email_label": "Indirizzo email", + "email_placeholder": "tu{'@'}esempio.com", + "button": "Invia link magico", "sent": { - "title": "Consultez vos emails", - "message": "Nous vous avons envoyé un lien magique. Cliquez dessus pour vous connecter.", - "expire": "Le lien expire dans 15 minutes." + "title": "Controlla la tua email", + "message": "Ti abbiamo inviato un link magico. Cliccaci sopra per accedere.", + "expire": "Il link scade tra 15 minuti." }, - "error_invalid_email": "Veuillez entrer une adresse email valide", - "error_send": "Échec de l'envoi du lien magique" + "error_invalid_email": "Inserisci un indirizzo email valido", + "error_send": "Invio del link magico fallito" }, "error": { - "no_method_available": "Aucune méthode d'authentification n'est configurée. Veuillez contacter l'administrateur." + "no_method_available": "Nessun metodo di autenticazione configurato. Contatta l'amministratore." } }, "home": { "hero": { - "title": "Confirmation de Lecture", - "subtitle": "Certifiez cryptographiquement que vos documents ont été lus et compris", - "createError": "Impossible de créer le document", + "title": "Conferma di Lettura", + "subtitle": "Certifica crittograficamente che i tuoi documenti sono stati letti e compresi", + "createError": "Impossibile creare il documento", "restricted": { - "title": "Création restreinte", - "description": "La création de documents est réservée aux administrateurs. Contactez votre administrateur pour obtenir un lien de document." + "title": "Creazione limitata", + "description": "La creazione di documenti è riservata agli amministratori. Contatta il tuo amministratore per ottenere un link al documento." }, "form": { - "label": "URL du document", - "placeholder": "URL, chemin ou référence du document", - "hint": "Accepte les URLs, chemins de fichiers ou identifiants simples", - "submit": "Créer", - "submitLogin": "Se connecter" + "label": "URL del documento", + "placeholder": "URL, percorso o riferimento del documento", + "hint": "Accetta URL, percorsi di file o identificatori semplici", + "submit": "Crea", + "submitLogin": "Accedi" } }, "howItWorks": { - "title": "Comment ça fonctionne ?", - "subtitle": "Ackify vous permet de prouver cryptographiquement que vos documents ont été lus", + "title": "Come funziona?", + "subtitle": "Ackify ti permette di provare crittograficamente che i tuoi documenti sono stati letti", "step1": { - "title": "1. Accédez au document", - "description": "Entrez l'URL ou la référence du document à confirmer" + "title": "1. Accedi al documento", + "description": "Inserisci l'URL o il riferimento del documento da confermare" }, "step2": { - "title": "2. Lisez le contenu", - "description": "Consultez le document dans le lecteur intégré ou via le lien externe" + "title": "2. Leggi il contenuto", + "description": "Consulta il documento nel visualizzatore integrato o tramite il link esterno" }, "step3": { - "title": "3. Confirmez", - "description": "Votre confirmation est enregistrée avec une signature cryptographique Ed25519" + "title": "3. Conferma", + "description": "La tua conferma viene registrata con una firma crittografica Ed25519" } }, "features": { "crypto": { - "title": "Sécurité cryptographique", - "description": "Signatures Ed25519 non répudiables garantissant l'authenticité" + "title": "Sicurezza crittografica", + "description": "Firme Ed25519 non ripudiabili che garantiscono l'autenticità" }, "instant": { - "title": "Instantané", - "description": "Confirmation en deux clics avec vérification cryptographique immédiate" + "title": "Istantaneo", + "description": "Conferma in due clic con verifica crittografica immediata" }, "timestamp": { - "title": "Horodatage précis", - "description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité" + "title": "Timestamp preciso", + "description": "Ogni conferma è timestampata e concatenata per garantire l'integrità" } }, "saas": { - "badge": "Bientôt disponible", - "title": "Besoin de plus ?", - "description": "Gestion d'équipes, API avancée, tableaux de bord, intégrations et support dédié pour les entreprises.", - "button": "Découvrir Ackify Pro", - "note": "Disponible prochainement" + "badge": "Prossimamente", + "title": "Hai bisogno di più?", + "description": "Gestione team, API avanzata, dashboard, integrazioni e supporto dedicato per le aziende.", + "button": "Scopri Ackify Pro", + "note": "Disponibile prossimamente" } }, "sign": { - "title": "Confirmation de Lecture", - "subtitle": "Certifiez votre lecture avec une confirmation cryptographique Ed25519", + "title": "Conferma di Lettura", + "subtitle": "Certifica la tua lettura con una conferma sicura e non ripudiabile", "loading": { - "title": "Chargement du document...", - "description": "Veuillez patienter pendant que nous préparons le document pour la signature." + "title": "Caricamento documento...", + "description": "Attendere mentre prepariamo il documento." }, "external": { "title": "Documento esterno", @@ -133,133 +133,133 @@ "noUrl": "Nessun URL disponibile per questo documento" }, "alreadySigned": { - "title": "Lecture déjà confirmée", - "signedBy": "Confirmé par", + "title": "Lettura già confermata", + "signedBy": "Confermato da", "email": "Email", - "signatureType": "Type de confirmation", - "ed25519": "Ed25519 cryptographique", - "downloadProof": "Télécharger la preuve" + "signatureType": "Tipo di conferma", + "ed25519": "Ed25519 crittografico", + "downloadProof": "Scarica prova" }, "confirm": { - "title": "Confirmer votre lecture", - "readRequired": "Veuillez lire l'intégralité du document avant de confirmer.", - "certify": "Je certifie avoir lu et compris le contenu de ce document" + "title": "Conferma la tua lettura", + "readRequired": "Per favore leggi l'intero documento prima di confermare.", + "certify": "Certifico di aver letto e compreso il contenuto di questo documento" }, "noDocument": { "title": "Nessun documento specificato", - "description": "Per firmare un documento, aggiungi il parametro {code} all'URL", + "description": "Per confermare la lettura di un documento, aggiungi il parametro {code} all'URL", "examples": "Esempi:", "orEnterReference": "Oppure inserisci il riferimento del documento qui sotto" }, "success": { - "title": "Lecture confirmée avec succès !", - "description": "Votre confirmation a été enregistrée de manière cryptographique et sécurisée." + "title": "Lettura confermata con successo!", + "description": "La tua conferma è stata registrata in modo crittografico e sicuro." }, "error": { - "title": "Une erreur est survenue", - "authRequired": "Vous devez être connecté pour créer un document.", - "loadFailed": "Échec du chargement du document", - "loginButton": "Se connecter" + "title": "Si è verificato un errore", + "authRequired": "Devi essere connesso per creare un documento.", + "loadFailed": "Caricamento documento fallito", + "loginButton": "Accedi" }, "documentCreation": { - "restrictedToAdmins": "Seuls les administrateurs peuvent créer des documents." + "restrictedToAdmins": "Solo gli amministratori possono creare documenti." }, "document": { - "title": "Document à confirmer", + "title": "Documento da confermare", "id": "ID" }, "info": { - "description": "En confirmant la lecture de ce document, vous certifiez avoir pris connaissance de son contenu et acceptez de le valider de manière cryptographique et non répudiable.", - "recorded": "Votre confirmation sera enregistrée avec les informations suivantes :", - "email": "Votre adresse email", - "timestamp": "Horodatage précis de la confirmation", - "signature": "Confirmation cryptographique Ed25519", - "hash": "Hash SHA-256 du contenu" + "description": "Confermando la lettura di questo documento, certifichi di aver preso visione del suo contenuto e accetti di validarlo in modo crittografico e non ripudiabile.", + "recorded": "La tua conferma verrà registrata con le seguenti informazioni:", + "email": "Il tuo indirizzo email", + "timestamp": "Timestamp preciso della conferma", + "signature": "Impronta crittografica sicura", + "hash": "Hash SHA-256 del contenuto" }, "confirmations": { - "title": "Confirmations existantes", - "count": "{count} confirmation | {count} confirmations", - "recorded": "enregistrée | enregistrées" + "title": "Conferme esistenti", + "count": "{count} conferma | {count} conferme", + "recorded": "registrata | registrate" }, "empty": { - "title": "Aucune confirmation pour le moment", - "description": "Soyez le premier à confirmer votre lecture de ce document" + "title": "Nessuna conferma per il momento", + "description": "Sii il primo a confermare la lettura di questo documento" }, "howItWorks": { - "title": "Comment ça fonctionne ?", - "subtitle": "Ackify vous permet de prouver cryptographiquement que vous avez lu un document", + "title": "Come funziona?", + "subtitle": "Ackify ti permette di attestare ufficialmente di aver letto un documento", "step1": { - "title": "1. Accédez au document", - "description": "Ajoutez {code} à l'adresse de cette page" + "title": "1. Accedi al documento", + "description": "Aggiungi {code} all'indirizzo di questa pagina" }, "step2": { - "title": "2. Authentifiez-vous", - "description": "Connectez-vous via OAuth2 pour confirmer votre identité" + "title": "2. Autenticati", + "description": "Accedi tramite OAuth2 per confermare la tua identità" }, "step3": { - "title": "3. Confirmez la lecture", - "description": "Votre confirmation est enregistrée avec une signature Ed25519" + "title": "3. Conferma la lettura", + "description": "La tua conferma viene registrata in modo sicuro e verificabile" }, "features": { "crypto": { - "title": "Sécurité cryptographique", - "description": "Signatures Ed25519 non répudiables garantissant l'authenticité" + "title": "Sicurezza crittografica", + "description": "Conferme non ripudiabili che garantiscono l'autenticità" }, "instant": { - "title": "Instantané", - "description": "Confirmation en deux clics avec vérification cryptographique immédiate" + "title": "Istantaneo", + "description": "Conferma in due clic con verifica crittografica immediata" }, "timestamp": { - "title": "Horodatage précis", - "description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité" + "title": "Timestamp preciso", + "description": "Ogni conferma è timestampata e concatenata per garantire l'integrità" } } } }, "signButton": { - "confirm": "Confirmer ma lecture", - "confirmAction": "Confirmer la lecture", - "alreadySigned": "Déjà confirmé", - "confirmed": "Lecture confirmée", - "mustLogin": "Se connecter pour confirmer", - "signing": "Confirmation en cours...", - "verified": "Vérifié", - "on": "Le", + "confirm": "Conferma la mia lettura", + "confirmAction": "Conferma lettura", + "alreadySigned": "Già confermato", + "confirmed": "Lettura confermata", + "mustLogin": "Accedi per confermare", + "signing": "Conferma in corso...", + "verified": "Verificato", + "on": "Il", "error": { - "title": "Échec de la confirmation", - "notAuthenticated": "Vous devez être connecté pour confirmer un document.", - "alreadySigned": "Vous avez déjà confirmé ce document.", - "generic": "Une erreur est survenue lors de la confirmation. Veuillez réessayer.", - "missingDocId": "Document ID manquant", - "authFailed": "Impossible de démarrer l'authentification" + "title": "Conferma fallita", + "notAuthenticated": "Devi essere connesso per confermare un documento.", + "alreadySigned": "Hai già confermato questo documento.", + "generic": "Si è verificato un errore durante la conferma. Riprova.", + "missingDocId": "ID documento mancante", + "authFailed": "Impossibile avviare l'autenticazione" } }, "signatureList": { - "loading": "Chargement des confirmations...", + "loading": "Caricamento conferme...", "email": "Email", - "date": "Date", - "signature": "Signature", - "confirmation": "Confirmation:", + "date": "Data", + "signature": "Firma", + "confirmation": "Conferma:", "hash": "Hash", "nonce": "Nonce", - "verificationStatus": "Statut de vérification", - "verified": "Vérifié", - "confirmed": "Confirmé", - "notVerified": "Non vérifié", - "showDetails": "Afficher les détails", - "hideDetails": "Masquer les détails", - "viewDetails": "Voir détails", - "verificationDetails": "Détails de vérification", - "copy": "Copier", - "copied": "Copié !", - "previousHash": "Hash précédent:", - "empty": "Aucune confirmation trouvée", - "documentDeleted": "Document supprimé", + "verificationStatus": "Stato verifica", + "verified": "Verificato", + "confirmed": "Confermato", + "notVerified": "Non verificato", + "showDetails": "Mostra dettagli", + "hideDetails": "Nascondi dettagli", + "viewDetails": "Vedi dettagli", + "verificationDetails": "Dettagli verifica", + "copy": "Copia", + "copied": "Copiato!", + "previousHash": "Hash precedente:", + "empty": "Nessuna conferma trovata", + "documentDeleted": "Documento eliminato", "fields": { "id": "ID:", - "document": "Document:", - "reader": "Lecteur:", - "date": "Date:", + "document": "Documento:", + "reader": "Lettore:", + "date": "Data:", "source": "Origine:", "nonce": "Nonce:", "hash": "Hash:" @@ -268,18 +268,18 @@ "signatures": { "title": "Le mie conferme di lettura", "subtitle": "Elenco di tutti i documenti di cui hai confermato la lettura crittograficamente", - "loading": "Chargement de vos confirmations...", + "loading": "Caricamento delle tue conferme...", "empty": { - "title": "Aucune confirmation pour le moment", - "description": "Vous n'avez pas encore confirmé de document. Commencez par confirmer un document pour le voir apparaître ici.", - "alternative": "Vous n'avez pas encore confirmé la lecture de documents" + "title": "Nessuna conferma per il momento", + "description": "Non hai ancora confermato nessun documento. Inizia confermando un documento per vederlo apparire qui.", + "alternative": "Non hai ancora confermato la lettura di documenti" }, - "count": "{count} confirmation | {count} confirmations", - "results": "{count} résultat | {count} résultats", + "count": "{count} conferma | {count} conferme", + "results": "{count} risultato | {count} risultati", "document": "Documento", "signedAt": "Confermato il", - "viewDetails": "Voir les détails", - "deletedDocuments": "Documents supprimés", + "viewDetails": "Vedi dettagli", + "deletedDocuments": "Documenti eliminati", "stats": { "total": "Totale", "totalConfirmations": "Conferme totali", @@ -292,24 +292,24 @@ "allConfirmations": "Tutte le mie conferme", "about": { "title": "Informazioni sulle conferme", - "description": "Ogni conferma viene registrata crittograficamente con Ed25519 e concatenata per garantire l'integrità. Le conferme sono irrevocabili e timestampate in modo preciso." + "description": "Ogni conferma viene registrata crittograficamente e concatenata per garantire l'integrità. Le conferme sono non ripudiabili e timestampate con precisione." }, "search": "Cerca...", "error": { - "title": "Erreur de chargement des confirmations", - "description": "Impossible de charger vos confirmations. Veuillez réessayer." + "title": "Errore nel caricamento delle conferme", + "description": "Impossibile caricare le tue conferme. Riprova." } }, "admin": { - "title": "Administration", + "title": "Amministrazione", "subtitle": "Gestire documenti e lettori previsti", "loading": "Caricamento dati...", "dashboard": { - "title": "Tableau de bord", - "totalDocuments": "Documents totaux", - "totalSignatures": "Confirmations totales", - "recentActivity": "Activité récente", - "backToDashboard": "Retour au tableau de bord", + "title": "Dashboard", + "totalDocuments": "Documenti totali", + "totalSignatures": "Conferme totali", + "recentActivity": "Attività recente", + "backToDashboard": "Torna alla dashboard", "stats": { "documents": "Documenti", "readers": "Lettori", @@ -328,29 +328,29 @@ "searchPlaceholder": "Cerca per ID, titolo o URL...", "id": "ID documento", "idLabel": "Documento", - "idHelper": "Accepte les URLs, les chemins de fichiers ou les identifiants simples", - "idHelperShort": "Accepte les URLs, chemins ou identifiants", - "idPlaceholder": "URL, PATH ou ID du document", - "signatures": "Confirmations", - "created": "Créé", + "idHelper": "Accetta URL, percorsi di file o identificatori semplici", + "idHelperShort": "Accetta URL, percorsi o identificatori", + "idPlaceholder": "URL, percorso o ID del documento", + "signatures": "Conferme", + "created": "Creato", "createdOn": "Creato il", "by": "Da", "url": "URL", "document": "Documento", - "actions": "Actions", - "view": "Voir", + "actions": "Azioni", + "view": "Vedi", "manage": "Gestisci", - "edit": "Modifier", - "delete": "Supprimer", - "empty": "Aucun document trouvé", - "noResults": "Aucun résultat", - "noDocuments": "Aucun document", - "tryAnotherSearch": "Essayez une autre recherche", - "willAppear": "Les documents apparaîtront ici une fois créés", - "totalCount": "{count} document au total | {count} documents au total", + "edit": "Modifica", + "delete": "Elimina", + "empty": "Nessun documento trovato", + "noResults": "Nessun risultato", + "noDocuments": "Nessun documento", + "tryAnotherSearch": "Prova un'altra ricerca", + "willAppear": "I documenti appariranno qui una volta creati", + "totalCount": "{count} documento in totale | {count} documenti in totale", "pagination": { - "page": "Page {current}/{total}", - "pageOf": "Page {current} sur {total}" + "page": "Pagina {current}/{total}", + "pageOf": "Pagina {current} di {total}" } }, "settings": { @@ -501,56 +501,56 @@ }, "webhooks": { "title": "Webhooks", - "subtitle": "Configurer les notifications vers des applications tierces", - "manage": "Gérer les webhooks", - "new": "Nouveau webhook", - "edit": "Éditer", - "delete": "Supprimer", - "enable": "Activer", - "disable": "Désactiver", + "subtitle": "Configura le notifiche verso applicazioni di terze parti", + "manage": "Gestisci webhooks", + "new": "Nuovo webhook", + "edit": "Modifica", + "delete": "Elimina", + "enable": "Abilita", + "disable": "Disabilita", "status": { - "enabled": "Actif", - "disabled": "Inactif" + "enabled": "Attivo", + "disabled": "Inattivo" }, - "confirmDelete": "Supprimer ce webhook ?", - "empty": "Aucun webhook", - "listTitle": "Liste des webhooks", - "listSubtitle": "Un webhook peut écouter plusieurs événements", + "confirmDelete": "Eliminare questo webhook?", + "empty": "Nessun webhook", + "listTitle": "Lista webhooks", + "listSubtitle": "Un webhook può ascoltare più eventi", "columns": { "title": "Nome", "url": "URL", - "events": "Événements", + "events": "Eventi", "status": "Stato", - "actions": "Actions" + "actions": "Azioni" }, "form": { - "title": "Paramètres du webhook", - "subtitle": "Renseignez l'URL, le secret et les événements", - "nameLabel": "Nom du webhook", + "title": "Impostazioni webhook", + "subtitle": "Inserisci URL, secret ed eventi", + "nameLabel": "Nome webhook", "namePlaceholder": "Webhook CRM", - "urlLabel": "URL de destination", + "urlLabel": "URL di destinazione", "secretLabel": "Secret HMAC", - "secretPlaceholder": "Saisissez un secret (requis)", - "secretKeep": "Laisser vide pour conserver", - "eventsLabel": "Événements à écouter", - "descriptionLabel": "Description (optionnel)", - "descriptionPlaceholder": "Note interne…", - "validation": "Veuillez compléter le nom, l'URL, le secret et au moins un événement." + "secretPlaceholder": "Inserisci un secret (richiesto)", + "secretKeep": "Lascia vuoto per mantenere", + "eventsLabel": "Eventi da ascoltare", + "descriptionLabel": "Descrizione (opzionale)", + "descriptionPlaceholder": "Nota interna…", + "validation": "Completa nome, URL, secret e almeno un evento." }, - "editTitle": "Éditer le webhook", + "editTitle": "Modifica webhook", "events": { - "documentCreated": "Document créé", - "signatureCreated": "Signature créée", - "documentCompleted": "Document complété", - "reminderSent": "Rappel envoyé", - "reminderFailed": "Rappel échoué" + "documentCreated": "Documento creato", + "signatureCreated": "Firma creata", + "documentCompleted": "Documento completato", + "reminderSent": "Promemoria inviato", + "reminderFailed": "Promemoria fallito" }, "eventsMap": { - "document.created": "Document créé", - "signature.created": "Signature créée", - "document.completed": "Document complété", - "reminder.sent": "Rappel envoyé", - "reminder.failed": "Rappel échoué" + "document.created": "Documento creato", + "signature.created": "Firma creata", + "document.completed": "Documento completato", + "reminder.sent": "Promemoria inviato", + "reminder.failed": "Promemoria fallito" } }, "documentDetail": { @@ -559,26 +559,26 @@ "metadata": "📄 Informazioni sul documento", "metadataDescription": "Metadati e checksum del documento", "checksum": "Checksum", - "algorithm": "Algorithme", + "algorithm": "Algoritmo", "titleLabel": "Titolo", "titlePlaceholder": "Politica di sicurezza 2025", "urlLabel": "URL", "urlPlaceholder": "https://example.com/doc.pdf", "checksumLabel": "Checksum", "checksumPlaceholder": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "algorithmLabel": "Algorithme", + "algorithmLabel": "Algoritmo", "descriptionLabel": "Descrizione", "descriptionPlaceholder": "Descrizione del documento...", - "signatures": "Confirmations", - "back": "Retour", + "signatures": "Conferme", + "back": "Indietro", "expectedSigners": "Firmatari previsti", "addExpectedSigner": "Aggiungi firmatario previsto", "addSigners": "Aggiungi lettori previsti", - "addButton": "Ajouter", - "adding": "Ajout...", + "addButton": "Aggiungi", + "adding": "Aggiunta...", "emailsLabel": "Email (una per riga)", - "emailsPlaceholder": "Marie Dupont \njean.martin{'@'}example.com\nSophie Bernard ", - "emailsHelper": "Formats acceptés : \"Nom Prénom \" ou \"email{'@'}example.com\"", + "emailsPlaceholder": "Mario Rossi \ngiuseppe.verdi{'@'}example.com\nAnna Bianchi ", + "emailsHelper": "Formati accettati: \"Nome Cognome \" o \"email{'@'}example.com\"", "emailLabel": "Email *", "emailPlaceholder": "email{'@'}example.com", "nameLabel": "Nome", @@ -593,167 +593,167 @@ "noExpectedSigners": "Nessun lettore previsto", "noSignatures": "Nessuna conferma", "reminders": "Promemoria via email", - "remindersDescription": "Envoyer des rappels aux lecteurs en attente de confirmation", + "remindersDescription": "Invia promemoria ai lettori in attesa di conferma", "remindersSent": "Promemoria inviati", "toRemind": "Da ricordare", "lastReminder": "Ultimo promemoria", "sendReminder": "Invia promemoria", - "sending": "Envoi...", - "sendReminders": "Envoyer les relances", - "sendToAll": "Envoyer à tous les lecteurs en attente ({count})", - "sendToSelected": "Envoyer uniquement aux sélectionnés ({count})", + "sending": "Invio...", + "sendReminders": "Invia promemoria", + "sendToAll": "Invia a tutti i lettori in attesa ({count})", + "sendToSelected": "Invia solo ai selezionati ({count})", "allContacted": "Tutti i lettori previsti sono stati contattati o hanno confermato", "emailServiceDisabled": "Il servizio email è disattivato. La cronologia dei promemoria rimane visibile, ma l'invio di nuovi promemoria non è disponibile.", "unexpectedSignatures": "Conferme di lettura aggiuntive", - "unexpectedDescription": "Utilisateurs ayant confirmé mais non présents dans la liste des lecteurs attendus", - "createdBy": "Créé par {by} le {date}", - "saving": "Enregistrement...", - "deleting": "Suppression...", - "copiedToClipboard": "Copié dans le presse-papiers", - "metadataSaved": "Métadonnées enregistrées avec succès", - "signersAdded": "{count} lecteur(s) ajouté(s) avec succès", - "signerRemoved": "{email} retiré avec succès", - "remindersSentSuccess": "{count} relance(s) envoyée(s) avec succès", - "remindersSentPartial": "{sent} relance(s) envoyée(s), {failed} échec(s)", - "remindersSentGeneric": "Relances envoyées avec succès", - "confirmSendReminders": "Envoyer des relances à {count} lecteur(s) en attente de confirmation ?", - "confirmSendRemindersSelected": "Envoyer des relances à {count} lecteur(s) sélectionné(s) ?", + "unexpectedDescription": "Utenti che hanno confermato ma non sono nella lista dei lettori previsti", + "createdBy": "Creato da {by} il {date}", + "saving": "Salvataggio...", + "deleting": "Eliminazione...", + "copiedToClipboard": "Copiato negli appunti", + "metadataSaved": "Metadati salvati con successo", + "signersAdded": "{count} lettore/i aggiunto/i con successo", + "signerRemoved": "{email} rimosso con successo", + "remindersSentSuccess": "{count} promemoria inviato/i con successo", + "remindersSentPartial": "{sent} promemoria inviato/i, {failed} fallito/i", + "remindersSentGeneric": "Promemoria inviati con successo", + "confirmSendReminders": "Inviare promemoria a {count} lettore/i in attesa di conferma?", + "confirmSendRemindersSelected": "Inviare promemoria a {count} lettore/i selezionato/i?", "confirmSendRemindersTitle": "Invia promemoria", "removeSignerTitle": "Rimuovi lettore previsto", - "removeSignerMessage": "Retirer {email} de la liste des lecteurs attendus ?", + "removeSignerMessage": "Rimuovere {email} dalla lista dei lettori previsti?", "metadataWarning": { "title": "Attenzione: Invalidazione delle firme", - "description": "Vous êtes sur le point de modifier des informations critiques du document (URL, checksum, algorithme ou description).", - "warning": "Cette modification entraînera l'invalidation de toutes les signatures existantes, car elles sont liées cryptographiquement au contenu actuel du document.", - "currentSignatures": "Signatures actuelles qui seront invalidées :", - "confirm": "Je comprends, continuer", - "cancel": "Annuler" + "description": "Stai per modificare informazioni critiche del documento (URL, checksum, algoritmo o descrizione).", + "warning": "Questa modifica invaliderà tutte le firme esistenti, poiché sono collegate crittograficamente al contenuto attuale del documento.", + "currentSignatures": "Firme attuali che saranno invalidate:", + "confirm": "Ho capito, continua", + "cancel": "Annulla" }, "dangerZone": "Zona pericolosa", "dangerZoneDescription": "Azioni irreversibili su questo documento", "deleteDocument": "Elimina questo documento", - "deleteDocumentDescription": "Cette action supprimera définitivement le document, ses métadonnées, les lecteurs attendus et toutes les confirmations associées.\nCette action est irréversible.", + "deleteDocumentDescription": "Questa azione eliminerà definitivamente il documento, i suoi metadati, i lettori previsti e tutte le conferme associate.\nQuesta azione è irreversibile.", "deleteWarning": "Questa azione è irreversibile!", - "deleteWillRemove": "La suppression de ce document entraînera la perte définitive de :", + "deleteWillRemove": "L'eliminazione di questo documento comporterà la perdita definitiva di:", "deleteItem1": "Tutti i metadati del documento", "deleteItem2": "L'elenco dei lettori previsti", "deleteItem3": "Tutte le conferme crittografiche", "deleteItem4": "La cronologia dei promemoria", "deleteConfirmTitle": "Conferma eliminazione", - "deleteConfirmButton": "Supprimer définitivement", - "documentId": "Document ID:", - "importCSV": "Import CSV", - "importCSVTitle": "Importer des lecteurs depuis un fichier CSV", - "selectFile": "Sélectionner un fichier CSV", - "csvFormatHelp": "Format accepté : colonnes 'email' et 'name' (ordre libre), séparateur virgule ou point-virgule", - "analyze": "Analyser", - "analyzing": "Analyse...", - "validEntries": "Valides", - "existingEntries": "Déjà présents", - "invalidEntries": "Invalides", - "lineNumber": "Ligne", + "deleteConfirmButton": "Elimina definitivamente", + "documentId": "ID Documento:", + "importCSV": "Importa CSV", + "importCSVTitle": "Importa lettori da un file CSV", + "selectFile": "Seleziona un file CSV", + "csvFormatHelp": "Formato accettato: colonne 'email' e 'name' (ordine libero), separatore virgola o punto e virgola", + "analyze": "Analizza", + "analyzing": "Analisi...", + "validEntries": "Validi", + "existingEntries": "Già presenti", + "invalidEntries": "Non validi", + "lineNumber": "Riga", "email": "Email", "name": "Nome", - "statusValid": "Valide", - "statusExists": "Existant", - "parseErrors": "Erreurs de parsing", - "content": "Contenu", - "errorReason": "Erreur", - "backToFileSelection": "Retour", - "importing": "Import...", - "importButton": "Importer {count} lecteur(s)", - "csvImportSuccess": "{imported} lecteur(s) importé(s), {skipped} ignoré(s)", - "filterPlaceholder": "Filtrer par nom ou email...", + "statusValid": "Valido", + "statusExists": "Esistente", + "parseErrors": "Errori di parsing", + "content": "Contenuto", + "errorReason": "Errore", + "backToFileSelection": "Indietro", + "importing": "Importazione...", + "importButton": "Importa {count} lettore/i", + "csvImportSuccess": "{imported} lettore/i importato/i, {skipped} saltato/i", + "filterPlaceholder": "Filtra per nome o email...", "csvError": { - "email_required": "Email requis", - "invalid_email_format": "Format email invalide", - "max_signers_exceeded": "Limite dépassée" + "email_required": "Email richiesta", + "invalid_email_format": "Formato email non valido", + "max_signers_exceeded": "Limite superato" } }, "documentForm": { - "title": "Référence du document", - "label": "Référence (URL, chemin ou ID)", - "placeholder": "URL, PATH ou RÉFÉRENCE du document à lire (optionnel)", - "submit": "Commencer", - "submitting": "Chargement...", - "creating": "Création en cours..." + "title": "Riferimento del documento", + "label": "Riferimento (URL, percorso o ID)", + "placeholder": "URL, percorso o riferimento del documento da leggere (opzionale)", + "submit": "Inizia", + "submitting": "Caricamento...", + "creating": "Creazione in corso..." } }, "embed": { - "loading": "Chargement des informations de signature...", - "title": "Signature pour", - "document": "Document:", - "signedBy": "Signé par", - "on": "le", - "verified": "Vérifié", - "viewAll": "Voir toutes les confirmations", - "error": "Impossible de charger les informations de signature", - "sign": "Signer", - "signDocument": "Signer ce document", - "noSignatures": "Aucune signature pour ce document", - "confirmationsCount": "{count} confirmation(s)", + "loading": "Caricamento informazioni conferma...", + "title": "Conferma per", + "document": "Documento:", + "signedBy": "Confermato da", + "on": "il", + "verified": "Verificato", + "viewAll": "Vedi tutte le conferme", + "error": "Impossibile caricare le informazioni di conferma", + "sign": "Conferma", + "signDocument": "Conferma questo documento", + "noSignatures": "Nessuna conferma per questo documento", + "confirmationsCount": "{count} conferma/e", "poweredBy": "Powered by Ackify", - "missingDocId": "ID de document manquant" + "missingDocId": "ID documento mancante" }, "notFound": { - "title": "Page non trouvée", - "description": "La page que vous recherchez n'existe pas ou a été déplacée.", - "home": "Retour à l'accueil" + "title": "Pagina non trovata", + "description": "La pagina che stai cercando non esiste o è stata spostata.", + "home": "Torna alla home" }, "footer": { - "description": "Solution open-source de confirmation cryptographique de lecture de documents avec signatures Ed25519 non répudiables.", + "description": "Soluzione open-source per la conferma crittografica della lettura di documenti con attestazioni non ripudiabili.", "navigation": { - "title": "Navigation" + "title": "Navigazione" }, "resources": { - "title": "Ressources", - "documentation": "Documentation", - "apiReference": "Référence API", - "support": "Support" + "title": "Risorse", + "documentation": "Documentazione", + "apiReference": "Riferimento API", + "support": "Supporto" }, "legal": { - "title": "Légal", - "terms": "Conditions d'utilisation", - "privacy": "Politique de confidentialité", - "contact": "Contact" + "title": "Legale", + "terms": "Termini di utilizzo", + "privacy": "Politica sulla privacy", + "contact": "Contatto" }, - "copyright": "Tous droits réservés.", - "license": "Licence AGPL-3.0-or-later", - "madeWith": "Fait avec", - "by": "par", + "copyright": "Tutti i diritti riservati.", + "license": "Licenza AGPL-3.0-or-later", + "madeWith": "Fatto con", + "by": "da", "links": { - "privacy": "Confidentialité", - "terms": "Conditions", - "contact": "Contact" + "privacy": "Privacy", + "terms": "Termini", + "contact": "Contatto" } }, "toast": { - "success": "Succès", - "error": "Erreur", - "info": "Information", - "warning": "Avertissement" + "success": "Successo", + "error": "Errore", + "info": "Informazione", + "warning": "Avviso" }, "common": { - "error": "Erreur", - "loading": "Chargement...", - "save": "Enregistrer", - "cancel": "Annuler", - "delete": "Supprimer", - "edit": "Modifier", - "close": "Fermer", - "confirm": "Confirmer", - "yes": "Oui", - "no": "Non", - "search": "Rechercher", - "filter": "Filtrer", - "sort": "Trier", - "actions": "Actions", - "details": "Détails", - "back": "Retour", - "next": "Suivant", - "previous": "Précédent", - "skipToContent": "Aller au contenu principal", - "refresh": "Actualiser" + "error": "Errore", + "loading": "Caricamento...", + "save": "Salva", + "cancel": "Annulla", + "delete": "Elimina", + "edit": "Modifica", + "close": "Chiudi", + "confirm": "Conferma", + "yes": "Sì", + "no": "No", + "search": "Cerca", + "filter": "Filtra", + "sort": "Ordina", + "actions": "Azioni", + "details": "Dettagli", + "back": "Indietro", + "next": "Avanti", + "previous": "Precedente", + "skipToContent": "Vai al contenuto principale", + "refresh": "Aggiorna" }, "documentViewer": { "loading": "Caricamento documento...", @@ -811,80 +811,80 @@ "submit": "Carica", "uploading": "Caricamento..." }, - "submit": "Créer", - "submitting": "Création...", + "submit": "Crea", + "submitting": "Creazione...", "title": { "label": "Titolo", - "placeholder": "Auto-détecté si vide" + "placeholder": "Auto-rilevato se vuoto" }, "readMode": { - "label": "Mode de lecture", - "integrated": "Lecteur intégré", - "external": "Lien externe" + "label": "Modalità di lettura", + "integrated": "Visualizzatore integrato", + "external": "Link esterno" }, "options": { - "title": "Options avancées", - "allowDownload": "Autoriser le téléchargement", - "requireFullRead": "Exiger la lecture complète", - "verifyChecksum": "Vérifier le checksum à chaque lecture" + "title": "Opzioni avanzate", + "allowDownload": "Consenti download", + "requireFullRead": "Richiedi lettura completa", + "verifyChecksum": "Verifica checksum ad ogni lettura" }, "checksum": { "label": "Checksum", - "placeholder": "Auto-calculé si vide" + "placeholder": "Auto-calcolato se vuoto" }, "algorithm": { - "label": "Algorithme" + "label": "Algoritmo" }, "description": { "label": "Descrizione", "placeholder": "Descrizione del documento..." }, "error": { - "urlRequired": "L'URL du document est requise", - "createFailed": "Échec de la création du document", - "authRequired": "Authentification requise pour créer un document", - "forbidden": "Vous n'avez pas les droits pour créer un document" + "urlRequired": "L'URL del documento è richiesto", + "createFailed": "Creazione del documento fallita", + "authRequired": "Autenticazione richiesta per creare un documento", + "forbidden": "Non hai i permessi per creare un documento" } }, "myDocuments": { - "title": "Mes documents", - "subtitle": "Gérer les documents que vous avez créés", - "listTitle": "Liste des documents", - "results": "{count} résultat | {count} résultats", - "searchPlaceholder": "Rechercher par titre ou URL...", - "signatureCount": "signature | signatures", - "totalCount": "{count} document au total | {count} documents au total", - "noResults": "Aucun résultat", - "tryAnotherSearch": "Essayez une autre recherche", + "title": "I miei documenti", + "subtitle": "Gestisci i documenti che hai creato", + "listTitle": "Lista dei documenti", + "results": "{count} risultato | {count} risultati", + "searchPlaceholder": "Cerca per titolo o URL...", + "signatureCount": "firma | firme", + "totalCount": "{count} documento in totale | {count} documenti in totale", + "noResults": "Nessun risultato", + "tryAnotherSearch": "Prova un'altra ricerca", "stats": { "total": "Totale", "pending": "In attesa", - "completed": "Complétés", - "totalDocuments": "Documents totaux", - "pendingDocuments": "En attente de signatures", - "completedDocuments": "Complétés" + "completed": "Completati", + "totalDocuments": "Documenti totali", + "pendingConfirmations": "Conferme in attesa", + "completedDocuments": "Completati" }, "columns": { "document": "Documento", "status": "Stato", "createdAt": "Creato il", - "actions": "Actions" + "actions": "Azioni" }, "actions": { - "view": "Voir", - "copyLink": "Copier le lien", - "delete": "Supprimer" + "view": "Vedi", + "copyLink": "Copia link", + "delete": "Elimina" }, "empty": { - "title": "Aucun document", - "description": "Créez votre premier document pour commencer à suivre les confirmations de lecture" + "title": "Nessun documento", + "description": "Crea il tuo primo documento per iniziare a tracciare le conferme di lettura" }, "deleteConfirm": { - "title": "Supprimer ce document ?", - "message": "Cette action supprimera définitivement le document \"{title}\" et toutes les données associées." + "title": "Eliminare questo documento?", + "message": "Questa azione eliminerà definitivamente il documento \"{title}\" e tutti i dati associati." }, "pagination": { - "page": "Page {current}/{total}" + "page": "Pagina {current}/{total}" } }, "documentEdit": { @@ -892,97 +892,97 @@ "subtitle": "Gestire metadati e lettori previsti", "back": "Indietro", "breadcrumb": { - "myDocuments": "Mes documents" + "myDocuments": "I miei documenti" }, "unauthorized": { - "title": "Accès non autorisé", - "description": "Vous n'avez pas les droits pour accéder à ce document.", - "backToDocuments": "Retour à mes documents" + "title": "Accesso non autorizzato", + "description": "Non hai i permessi per accedere a questo documento.", + "backToDocuments": "Torna ai miei documenti" }, "shareLink": { - "title": "Lien de partage", - "copy": "Copier", - "copied": "Copié !" + "title": "Link di condivisione", + "copy": "Copia", + "copied": "Copiato!" }, "stats": { - "expected": "Lecteurs attendus", - "confirmed": "Confirmés", + "expected": "Lettori previsti", + "confirmed": "Confermati", "pending": "In attesa" }, "metadata": { - "title": "Métadonnées", - "description": "Informations de base du document", + "title": "Metadati", + "description": "Informazioni di base del documento", "titleLabel": "Titolo", - "titlePlaceholder": "Titre du document", + "titlePlaceholder": "Titolo del documento", "urlLabel": "URL", - "urlPlaceholder": "https://exemple.com/document.pdf", + "urlPlaceholder": "https://esempio.com/documento.pdf", "checksumLabel": "Checksum", - "checksumPlaceholder": "Empreinte du fichier (optionnel)", - "algorithmLabel": "Algorithme", + "checksumPlaceholder": "Impronta del file (opzionale)", + "algorithmLabel": "Algoritmo", "descriptionLabel": "Descrizione", "descriptionPlaceholder": "Descrizione del documento...", - "createdBy": "Créé par {by} le {date}", - "saving": "Enregistrement..." + "createdBy": "Creato da {by} il {date}", + "saving": "Salvataggio..." }, - "metadataSaved": "Métadonnées enregistrées avec succès", + "metadataSaved": "Metadati salvati con successo", "readers": { - "title": "Lecteurs attendus", - "confirmed": "confirmés", - "add": "Ajouter", - "filterPlaceholder": "Filtrer par email ou nom...", + "title": "Lettori previsti", + "confirmed": "confermati", + "add": "Aggiungi", + "filterPlaceholder": "Filtra per email o nome...", "reader": "Lettore", "status": "Stato", "confirmedOn": "Confermato il", - "statusConfirmed": "Confirmé", + "statusConfirmed": "Confermato", "statusPending": "In attesa", "noReaders": "Nessun lettore previsto" }, - "signersAdded": "{count} lecteur(s) ajouté(s)", - "signerRemoved": "Lecteur {email} retiré", + "signersAdded": "{count} lettore/i aggiunto/i", + "signerRemoved": "Lettore {email} rimosso", "addSigners": { - "title": "Ajouter des lecteurs", - "emailsLabel": "Adresses email", - "emailsPlaceholder": "email{'@'}exemple.com\nNom Prénom ", - "emailsHelper": "Une adresse email par ligne. Format: email ou Nom ", - "adding": "Ajout en cours...", - "add": "Ajouter" + "title": "Aggiungi lettori", + "emailsLabel": "Indirizzi email", + "emailsPlaceholder": "email{'@'}esempio.com\nNome Cognome ", + "emailsHelper": "Un indirizzo email per riga. Formato: email o Nome ", + "adding": "Aggiunta in corso...", + "add": "Aggiungi" }, "removeSigner": { - "title": "Retirer ce lecteur ?", - "message": "Êtes-vous sûr de vouloir retirer {email} de la liste des lecteurs attendus ?" + "title": "Rimuovere questo lettore?", + "message": "Sei sicuro di voler rimuovere {email} dalla lista dei lettori previsti?" }, "reminders": { - "title": "Relances par email", - "description": "Envoyez des rappels aux lecteurs en attente", - "sent": "Rappels envoyés", + "title": "Promemoria via email", + "description": "Invia promemoria ai lettori in attesa", + "sent": "Promemoria inviati", "toRemind": "Da ricordare", - "lastSent": "Dernier envoi", - "emailDisabled": "Le service d'envoi d'email n'est pas configuré.", - "sendToAll": "Envoyer à tous les lecteurs en attente ({count})", - "sendToSelected": "Envoyer aux lecteurs sélectionnés ({count})", - "sending": "Envoi en cours...", - "send": "Envoyer les rappels" + "lastSent": "Ultimo invio", + "emailDisabled": "Il servizio email non è configurato.", + "sendToAll": "Invia a tutti i lettori in attesa ({count})", + "sendToSelected": "Invia ai lettori selezionati ({count})", + "sending": "Invio in corso...", + "send": "Invia promemoria" }, - "confirmSendReminders": "Envoyer des rappels à {count} lecteur(s) en attente ?", - "confirmSendRemindersSelected": "Envoyer des rappels à {count} lecteur(s) sélectionné(s) ?", - "remindersSentSuccess": "{count} rappel(s) envoyé(s) avec succès", - "remindersSentPartial": "{sent} rappel(s) envoyé(s), {failed} échec(s)", - "remindersSentGeneric": "Rappels envoyés", + "confirmSendReminders": "Inviare promemoria a {count} lettore/i in attesa?", + "confirmSendRemindersSelected": "Inviare promemoria a {count} lettore/i selezionato/i?", + "remindersSentSuccess": "{count} promemoria inviato/i con successo", + "remindersSentPartial": "{sent} promemoria inviato/i, {failed} fallito/i", + "remindersSentGeneric": "Promemoria inviati", "sendReminders": { - "title": "Confirmer l'envoi" + "title": "Conferma invio" }, "danger": { "title": "Zona di pericolo", "description": "Azioni irreversibili su questo documento", - "deleteDocument": "Supprimer le document", - "deleteDescription": "Cette action supprimera définitivement le document et toutes les données associées." + "deleteDocument": "Elimina documento", + "deleteDescription": "Questa azione eliminerà definitivamente il documento e tutti i dati associati." }, "deleteConfirm": { - "title": "Supprimer ce document ?", - "warning": "Attention !", - "message": "Cette action est irréversible. Toutes les confirmations, lecteurs attendus et l'historique seront supprimés.", - "deleting": "Suppression...", - "confirm": "Supprimer définitivement" + "title": "Eliminare questo documento?", + "warning": "Attenzione!", + "message": "Questa azione è irreversibile. Tutte le conferme, i lettori previsti e la cronologia saranno eliminati.", + "deleting": "Eliminazione...", + "confirm": "Elimina definitivamente" } } }