Files
archived-ackify-ce/webapp/src/locales/de.json
T
Benjamin 9b28f78ce9 feat(admin): add tenant configuration UI with hot-reload support
Add admin settings page allowing runtime configuration of:
- SMTP settings with connection testing
- OIDC/OAuth2 authentication with validation
- S3 storage configuration with connectivity check

Backend includes config service with atomic hot-reload,
encrypted secrets storage, and environment seeding on startup.
2026-01-12 22:46:04 +01:00

955 lines
37 KiB
JSON

{
"app": {
"name": "Ackify"
},
"nav": {
"home": "Startseite",
"myConfirmations": "Meine Bestätigungen",
"myDocuments": "Meine Dokumente",
"admin": "Admin",
"administration": "Administration",
"adminMenu": {
"allDocuments": "Alle Dokumente",
"settings": "Einstellungen",
"webhooks": "Webhooks"
},
"login": "Anmelden",
"logout": "Abmelden",
"mobileMenu": "Mobiles Menü",
"mainNavigation": "Hauptnavigation"
},
"theme": {
"toggle": "Changer de thème"
},
"language": {
"select": "Sélectionner la langue",
"fr": "Français",
"en": "Anglais",
"es": "Espagnol",
"de": "Allemand",
"it": "Italien"
},
"auth": {
"user": {
"connectedAs": "Connecté en tant que"
},
"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"
},
"oauth": {
"title": "Connexion avec OAuth",
"description": "Utilisez votre compte entreprise",
"button": "Continuer avec OAuth",
"error": "Échec de la connexion 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",
"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."
},
"error_invalid_email": "Veuillez entrer une adresse email valide",
"error_send": "Échec de l'envoi du lien magique"
}
},
"home": {
"hero": {
"title": "Confirmation de Lecture",
"subtitle": "Certifiez cryptographiquement que vos documents ont été lus et compris",
"createError": "Impossible de créer le document",
"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."
},
"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"
}
},
"howItWorks": {
"title": "Comment ça fonctionne ?",
"subtitle": "Ackify vous permet de prouver cryptographiquement que vos documents ont été lus",
"step1": {
"title": "1. Accédez au document",
"description": "Entrez l'URL ou la référence du document à confirmer"
},
"step2": {
"title": "2. Lisez le contenu",
"description": "Consultez le document dans le lecteur intégré ou via le lien externe"
},
"step3": {
"title": "3. Confirmez",
"description": "Votre confirmation est enregistrée avec une signature cryptographique Ed25519"
}
},
"features": {
"crypto": {
"title": "Sécurité cryptographique",
"description": "Signatures Ed25519 non répudiables garantissant l'authenticité"
},
"instant": {
"title": "Instantané",
"description": "Confirmation en deux clics avec vérification cryptographique immédiate"
},
"timestamp": {
"title": "Horodatage précis",
"description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité"
}
},
"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"
}
},
"sign": {
"title": "Confirmation de Lecture",
"subtitle": "Certifiez votre lecture avec une confirmation cryptographique Ed25519",
"loading": {
"title": "Chargement du document...",
"description": "Veuillez patienter pendant que nous préparons le document pour la signature."
},
"external": {
"title": "Document externe",
"description": "Veuillez lire le document ci-dessous avant de confirmer votre lecture.",
"openDocument": "Ouvrir le document",
"noUrl": "Aucune URL disponible pour ce document"
},
"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"
},
"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"
},
"noDocument": {
"title": "Aucun document spécifié",
"description": "Pour signer un document, ajoutez le paramètre {code} à l'URL",
"examples": "Exemples :"
},
"success": {
"title": "Lecture confirmée avec succès !",
"description": "Votre confirmation a été enregistrée de manière cryptographique et sécurisée."
},
"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"
},
"documentCreation": {
"restrictedToAdmins": "Seuls les administrateurs peuvent créer des documents."
},
"document": {
"title": "Document à confirmer",
"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"
},
"confirmations": {
"title": "Confirmations existantes",
"count": "{count} confirmation | {count} confirmations",
"recorded": "enregistrée | enregistrées"
},
"empty": {
"title": "Aucune confirmation pour le moment",
"description": "Soyez le premier à confirmer votre lecture de ce document"
},
"howItWorks": {
"title": "Comment ça fonctionne ?",
"subtitle": "Ackify vous permet de prouver cryptographiquement que vous avez lu un document",
"step1": {
"title": "1. Accédez au document",
"description": "Ajoutez {code} à l'adresse de cette page"
},
"step2": {
"title": "2. Authentifiez-vous",
"description": "Connectez-vous via OAuth2 pour confirmer votre identité"
},
"step3": {
"title": "3. Confirmez la lecture",
"description": "Votre confirmation est enregistrée avec une signature Ed25519"
},
"features": {
"crypto": {
"title": "Sécurité cryptographique",
"description": "Signatures Ed25519 non répudiables garantissant l'authenticité"
},
"instant": {
"title": "Instantané",
"description": "Confirmation en deux clics avec vérification cryptographique immédiate"
},
"timestamp": {
"title": "Horodatage précis",
"description": "Chaque confirmation est horodatée et chaînée pour garantir l'intégrité"
}
}
}
},
"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",
"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"
}
},
"signatureList": {
"loading": "Chargement des confirmations...",
"email": "Email",
"date": "Date",
"signature": "Signature",
"confirmation": "Confirmation:",
"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é",
"fields": {
"id": "ID:",
"document": "Document:",
"reader": "Lecteur:",
"date": "Date:",
"source": "Origine:",
"nonce": "Nonce:",
"hash": "Hash:"
}
},
"signatures": {
"title": "Meine Lesebestätigungen",
"subtitle": "Liste aller Dokumente, deren Lektüre Sie kryptografisch bestätigt haben",
"loading": "Chargement de vos confirmations...",
"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"
},
"count": "{count} confirmation | {count} confirmations",
"results": "{count} résultat | {count} résultats",
"document": "Dokument",
"signedAt": "Bestätigt am",
"viewDetails": "Voir les détails",
"deletedDocuments": "Documents supprimés",
"stats": {
"total": "Gesamt",
"totalConfirmations": "Gesamtbestätigungen",
"unique": "Einzigartig",
"uniqueDocuments": "Einzigartige Dokumente",
"last": "Letzte",
"lastConfirmation": "Letzte Bestätigung",
"notAvailable": "N/A"
},
"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."
},
"search": "Suchen...",
"error": {
"title": "Erreur de chargement des confirmations",
"description": "Impossible de charger vos confirmations. Veuillez réessayer."
}
},
"admin": {
"title": "Administration",
"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",
"stats": {
"documents": "Dokumente",
"readers": "Leser",
"active": "Aktiv",
"expected": "Erwartet",
"signed": "Signiert",
"pending": "Ausstehend",
"completion": "Vollständigkeit"
}
},
"documents": {
"title": "Alle Dokumente",
"new": "Neues Dokument erstellen",
"newDescription": "Dokumentreferenz vorbereiten, um Lesebestätigungen zu verfolgen",
"search": "Suchen...",
"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éé",
"createdOn": "Erstellt am",
"by": "Von",
"url": "URL",
"document": "Dokument",
"actions": "Actions",
"view": "Voir",
"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",
"pagination": {
"page": "Page {current}/{total}",
"pageOf": "Page {current} sur {total}"
}
},
"settings": {
"title": "Einstellungen",
"subtitle": "Konfigurieren Sie Ihre Ackify-Instanz",
"manage": "Einstellungen",
"loading": "Einstellungen werden geladen...",
"lastUpdated": "Letzte Aktualisierung: {date}",
"saveSuccess": "Einstellungen erfolgreich gespeichert",
"saveError": "Fehler beim Speichern der Einstellungen",
"testSuccess": "Verbindungstest erfolgreich",
"testError": "Verbindungstest fehlgeschlagen",
"resetSuccess": "Einstellungen aus Umgebung zurückgesetzt",
"resetError": "Fehler beim Zurücksetzen der Einstellungen",
"sections": {
"general": "Allgemein",
"oidc": "OAuth / OIDC",
"magiclink": "Magic Link",
"smtp": "E-Mail (SMTP)",
"storage": "Speicher"
},
"general": {
"title": "Allgemeine Einstellungen",
"description": "Grundkonfiguration Ihrer Ackify-Instanz",
"organisation": "Organisationsname",
"organisationPlaceholder": "Meine Firma",
"organisationHelper": "Wird in E-Mails und Oberfläche angezeigt",
"onlyAdminCanCreate": "Nur Admins können Dokumente erstellen",
"onlyAdminCanCreateHelper": "Wenn aktiviert, können nur Administratoren neue Dokumente erstellen"
},
"oidc": {
"title": "OAuth / OIDC Konfiguration",
"description": "OAuth 2.0 / OpenID Connect Authentifizierung konfigurieren",
"enabled": "OAuth-Authentifizierung aktivieren",
"provider": "Anbieter",
"providerPlaceholder": "Anbieter auswählen",
"providers": {
"google": "Google",
"github": "GitHub",
"gitlab": "GitLab",
"custom": "Benutzerdefiniert"
},
"clientId": "Client-ID",
"clientIdPlaceholder": "Geben Sie Ihre Client-ID ein",
"clientSecret": "Client-Secret",
"clientSecretPlaceholder": "Geben Sie Ihr Client-Secret ein",
"clientSecretHelper": "Leer lassen, um den bestehenden Wert beizubehalten",
"authUrl": "Autorisierungs-URL",
"authUrlPlaceholder": "https://provider.com/oauth/authorize",
"tokenUrl": "Token-URL",
"tokenUrlPlaceholder": "https://provider.com/oauth/token",
"userinfoUrl": "Userinfo-URL",
"userinfoUrlPlaceholder": "https://provider.com/userinfo",
"logoutUrl": "Logout-URL (optional)",
"logoutUrlPlaceholder": "https://provider.com/logout",
"scopes": "Scopes",
"scopesPlaceholder": "openid email profile",
"scopesHelper": "Durch Leerzeichen getrennte Liste von OAuth-Scopes",
"allowedDomain": "Erlaubte Domain (optional)",
"allowedDomainPlaceholder": "@firma.com",
"allowedDomainHelper": "Auf bestimmte E-Mail-Domain beschränken",
"autoLogin": "Auto-Login",
"autoLoginHelper": "Automatisch zu OAuth weiterleiten, wenn Sitzung existiert",
"testConnection": "Verbindung testen"
},
"magiclink": {
"title": "Magic Link Konfiguration",
"description": "Passwortlose E-Mail-Authentifizierung konfigurieren",
"enabled": "Magic Link Authentifizierung aktivieren",
"enabledHelper": "Erfordert konfiguriertes SMTP"
},
"smtp": {
"title": "E-Mail (SMTP) Konfiguration",
"description": "SMTP-Server für E-Mail-Versand konfigurieren",
"host": "SMTP-Host",
"hostPlaceholder": "smtp.beispiel.com",
"port": "Port",
"portPlaceholder": "587",
"username": "Benutzername",
"usernamePlaceholder": "user@beispiel.com",
"password": "Passwort",
"passwordPlaceholder": "Passwort eingeben",
"passwordHelper": "Leer lassen, um den bestehenden Wert beizubehalten",
"tls": "TLS verwenden",
"tlsHelper": "Implizite TLS-Verbindung verwenden",
"starttls": "STARTTLS verwenden",
"starttlsHelper": "Verbindung auf TLS upgraden",
"insecureSkipVerify": "Zertifikatsprüfung überspringen",
"insecureSkipVerifyHelper": "Nicht für Produktion empfohlen",
"timeout": "Timeout",
"timeoutPlaceholder": "10s",
"from": "Absenderadresse",
"fromPlaceholder": "noreply@beispiel.com",
"fromName": "Absendername",
"fromNamePlaceholder": "Ackify",
"subjectPrefix": "Betreff-Präfix (optional)",
"subjectPrefixPlaceholder": "[Ackify]",
"testConnection": "SMTP testen"
},
"storage": {
"title": "Speicherkonfiguration",
"description": "Dokumentenspeicher-Backend konfigurieren",
"type": "Speichertyp",
"types": {
"none": "Deaktiviert",
"local": "Lokales Dateisystem",
"s3": "S3 / MinIO"
},
"maxSizeMb": "Max. Dateigröße (MB)",
"maxSizeMbHelper": "Maximale Upload-Dateigröße in Megabytes",
"localPath": "Lokaler Pfad",
"localPathPlaceholder": "/data/documents",
"localPathHelper": "Verzeichnispfad zum Speichern von Dateien",
"s3Endpoint": "S3-Endpoint",
"s3EndpointPlaceholder": "s3.amazonaws.com oder minio.beispiel.com",
"s3Bucket": "Bucket-Name",
"s3BucketPlaceholder": "ackify-documents",
"s3AccessKey": "Zugriffsschlüssel",
"s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
"s3SecretKey": "Geheimschlüssel",
"s3SecretKeyPlaceholder": "Geheimschlüssel eingeben",
"s3SecretKeyHelper": "Leer lassen, um den bestehenden Wert beizubehalten",
"s3Region": "Region",
"s3RegionPlaceholder": "us-east-1",
"s3UseSsl": "SSL verwenden",
"s3UseSslHelper": "HTTPS für S3-Verbindung verwenden",
"testConnection": "S3-Verbindung testen"
},
"actions": {
"save": "Speichern",
"saving": "Speichern...",
"test": "Testen",
"testing": "Testen...",
"reset": "Aus ENV zurücksetzen",
"resetting": "Zurücksetzen..."
},
"resetConfirm": {
"title": "Einstellungen zurücksetzen?",
"message": "Dies setzt alle Einstellungen auf die Werte aus den Umgebungsvariablen zurück. Alle in der Datenbank gespeicherten Konfigurationen werden überschrieben.",
"confirm": "Zurücksetzen",
"cancel": "Abbrechen"
},
"validation": {
"authRequired": "Mindestens eine Authentifizierungsmethode (OAuth oder Magic Link) muss aktiviert sein",
"magiclinkRequiresSmtp": "Magic Link erfordert konfiguriertes SMTP",
"oidcCustomRequiresUrls": "Benutzerdefinierter OIDC-Anbieter erfordert auth_url, token_url und userinfo_url"
}
},
"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",
"status": {
"enabled": "Actif",
"disabled": "Inactif"
},
"confirmDelete": "Supprimer ce webhook ?",
"empty": "Aucun webhook",
"listTitle": "Liste des webhooks",
"listSubtitle": "Un webhook peut écouter plusieurs événements",
"columns": {
"title": "Name",
"url": "URL",
"events": "Événements",
"status": "Status",
"actions": "Actions"
},
"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."
},
"editTitle": "Éditer le webhook",
"events": {
"documentCreated": "Document créé",
"signatureCreated": "Signature créée",
"documentCompleted": "Document complété",
"reminderSent": "Rappel envoyé",
"reminderFailed": "Rappel échoué"
},
"eventsMap": {
"document.created": "Document créé",
"signature.created": "Signature créée",
"document.completed": "Document complété",
"reminder.sent": "Rappel envoyé",
"reminder.failed": "Rappel échoué"
}
},
"documentDetail": {
"title": "Dokument",
"metadata": "📄 Informations sur le document",
"metadataDescription": "Dokumentmetadaten und Prüfsumme",
"checksum": "Checksum",
"algorithm": "Algorithme",
"titleLabel": "Titel",
"titlePlaceholder": "Sicherheitsrichtlinie 2025",
"urlLabel": "URL",
"urlPlaceholder": "https://example.com/doc.pdf",
"checksumLabel": "Checksum",
"checksumPlaceholder": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"algorithmLabel": "Algorithme",
"descriptionLabel": "Beschreibung",
"descriptionPlaceholder": "Dokumentbeschreibung...",
"signatures": "Confirmations",
"back": "Retour",
"expectedSigners": "Erwartete Unterzeichner",
"addExpectedSigner": "Erwarteten Unterzeichner hinzufügen",
"addSigners": "Erwartete Leser hinzufügen",
"addButton": "Ajouter",
"adding": "Ajout...",
"emailsLabel": "E-Mails (eine pro Zeile)",
"emailsPlaceholder": "Marie Dupont <marie.dupont{'@'}example.com>\njean.martin{'@'}example.com\nSophie Bernard <sophie{'@'}example.com>",
"emailsHelper": "Formats acceptés : \"Nom Prénom <email{'@'}example.com>\" ou \"email{'@'}example.com\"",
"emailLabel": "E-Mail *",
"emailPlaceholder": "email{'@'}example.com",
"nameLabel": "Name",
"namePlaceholder": "Vollständiger Name",
"reader": "Leser",
"readers": "✓ Lecteurs attendus",
"user": "Benutzer",
"status": "Status",
"statusConfirmed": "✓ Confirmé",
"statusPending": "⏳ En attente",
"confirmedOn": "Bestätigt am",
"noExpectedSigners": "Keine erwarteten Leser",
"noSignatures": "Keine Bestätigungen",
"reminders": "📧 Relances par email",
"remindersDescription": "Envoyer des rappels aux lecteurs en attente de confirmation",
"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})",
"allContacted": "✓ Tous les lecteurs attendus ont été contactés ou ont confirmé",
"emailServiceDisabled": "⚠️ Le service d'envoi d'emails est actuellement désactivé. L'historique des rappels reste visible, mais l'envoi de nouveaux rappels n'est pas disponible.",
"unexpectedSignatures": "⚠ Confirmations de lecture complémentaires",
"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) ?",
"confirmSendRemindersTitle": "📧 Envoyer des relances",
"removeSignerTitle": "⚠️ Retirer le lecteur attendu",
"removeSignerMessage": "Retirer {email} de la liste des lecteurs attendus ?",
"metadataWarning": {
"title": "⚠️ Attention : Invalidation des signatures",
"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"
},
"dangerZone": "⚠️ Zone de danger",
"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.",
"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",
"deleteConfirmTitle": "⚠️ Confirmer la suppression",
"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",
"email": "Email",
"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...",
"csvError": {
"email_required": "Email requis",
"invalid_email_format": "Format email invalide",
"max_signers_exceeded": "Limite dépassée"
}
},
"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..."
}
},
"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)",
"poweredBy": "Powered by Ackify",
"missingDocId": "ID de document manquant"
},
"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"
},
"footer": {
"description": "Solution open-source de confirmation cryptographique de lecture de documents avec signatures Ed25519 non répudiables.",
"navigation": {
"title": "Navigation"
},
"resources": {
"title": "Ressources",
"documentation": "Documentation",
"apiReference": "Référence API",
"support": "Support"
},
"legal": {
"title": "Légal",
"terms": "Conditions d'utilisation",
"privacy": "Politique de confidentialité",
"contact": "Contact"
},
"copyright": "Tous droits réservés.",
"license": "Licence AGPL-3.0-or-later",
"madeWith": "Fait avec",
"by": "par",
"links": {
"privacy": "Confidentialité",
"terms": "Conditions",
"contact": "Contact"
}
},
"toast": {
"success": "Succès",
"error": "Erreur",
"info": "Information",
"warning": "Avertissement"
},
"common": {
"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"
},
"documentViewer": {
"loading": "Chargement du document...",
"toolbar": {
"zoomIn": "Zoom avant",
"zoomOut": "Zoom arrière",
"download": "Télécharger",
"openInNewTab": "Ouvrir dans un nouvel onglet",
"page": "Page {current} / {total}"
},
"progress": "{percent}% lu",
"scrollToRead": "Faites défiler pour lire le document",
"readComplete": "Lecture complète",
"pdfViewer": "Lecteur PDF",
"htmlViewer": "Contenu HTML",
"imageAlt": "Document image",
"error": {
"title": "Impossible de charger le document",
"loadFailed": "Le chargement du document a échoué",
"retry": "Réessayer",
"openExternal": "Ouvrir le lien"
},
"unsupported": {
"title": "Format non supporté",
"description": "Ce type de document ne peut pas être affiché dans le lecteur intégré.",
"openExternal": "Ouvrir le document"
}
},
"documentCreateForm": {
"url": {
"label": "Dokument",
"placeholder": "URL, PATH ou ID du document",
"helper": "Accepte les URLs, les chemins de fichiers ou les identifiants simples"
},
"submit": "Créer",
"submitting": "Création...",
"title": {
"label": "Titel",
"placeholder": "Auto-détecté si vide"
},
"readMode": {
"label": "Mode de lecture",
"integrated": "Lecteur intégré",
"external": "Lien externe"
},
"options": {
"title": "Options avancées",
"allowDownload": "Autoriser le téléchargement",
"requireFullRead": "Exiger la lecture complète",
"verifyChecksum": "Vérifier le checksum à chaque lecture"
},
"checksum": {
"label": "Checksum",
"placeholder": "Auto-calculé si vide"
},
"algorithm": {
"label": "Algorithme"
},
"description": {
"label": "Beschreibung",
"placeholder": "Dokumentbeschreibung..."
},
"error": {
"urlRequired": "L'URL du document est requise",
"createFailed": "Échec de la création du document"
}
},
"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",
"stats": {
"total": "Gesamt",
"pending": "Ausstehend",
"completed": "Complétés",
"totalDocuments": "Documents totaux",
"pendingDocuments": "En attente de signatures",
"completedDocuments": "Complétés"
},
"columns": {
"document": "Dokument",
"status": "Status",
"createdAt": "Erstellt am",
"actions": "Actions"
},
"actions": {
"view": "Voir",
"copyLink": "Copier le lien",
"delete": "Supprimer"
},
"empty": {
"title": "Aucun document",
"description": "Créez votre premier document pour commencer à suivre les confirmations de lecture"
},
"deleteConfirm": {
"title": "Supprimer ce document ?",
"message": "Cette action supprimera définitivement le document \"{title}\" et toutes les données associées."
},
"pagination": {
"page": "Page {current}/{total}"
}
},
"documentEdit": {
"title": "Édition du document",
"back": "Retour",
"breadcrumb": {
"myDocuments": "Mes documents"
},
"unauthorized": {
"title": "Accès non autorisé",
"description": "Vous n'avez pas les droits pour accéder à ce document.",
"backToDocuments": "Retour à mes documents"
},
"shareLink": {
"title": "Lien de partage",
"copy": "Copier",
"copied": "Copié !"
},
"stats": {
"expected": "Lecteurs attendus",
"confirmed": "Confirmés",
"pending": "Ausstehend"
},
"metadata": {
"title": "Métadonnées",
"description": "Informations de base du document",
"titleLabel": "Titel",
"titlePlaceholder": "Titre du document",
"urlLabel": "URL",
"urlPlaceholder": "https://exemple.com/document.pdf",
"checksumLabel": "Checksum",
"checksumPlaceholder": "Empreinte du fichier (optionnel)",
"algorithmLabel": "Algorithme",
"descriptionLabel": "Beschreibung",
"descriptionPlaceholder": "Dokumentbeschreibung...",
"createdBy": "Créé par {by} le {date}",
"saving": "Enregistrement..."
},
"metadataSaved": "Métadonnées enregistrées avec succès",
"readers": {
"title": "Lecteurs attendus",
"confirmed": "confirmés",
"add": "Ajouter",
"filterPlaceholder": "Filtrer par email ou nom...",
"reader": "Leser",
"status": "Status",
"confirmedOn": "Bestätigt am",
"statusConfirmed": "Confirmé",
"statusPending": "Ausstehend",
"noReaders": "Keine erwarteten Leser"
},
"signersAdded": "{count} lecteur(s) ajouté(s)",
"signerRemoved": "Lecteur {email} retiré",
"addSigners": {
"title": "Ajouter des lecteurs",
"emailsLabel": "Adresses email",
"emailsPlaceholder": "email{'@'}exemple.com\nNom Prénom <autre{'@'}exemple.com>",
"emailsHelper": "Une adresse email par ligne. Format: email ou Nom <email>",
"adding": "Ajout en cours...",
"add": "Ajouter"
},
"removeSigner": {
"title": "Retirer ce lecteur ?",
"message": "Êtes-vous sûr de vouloir retirer {email} de la liste des lecteurs attendus ?"
},
"reminders": {
"title": "Relances par email",
"description": "Envoyez des rappels aux lecteurs en attente",
"sent": "Rappels envoyés",
"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"
},
"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",
"sendReminders": {
"title": "Confirmer l'envoi"
},
"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."
},
"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"
}
}
}