mirror of
https://github.com/btouchard/ackify-ce.git
synced 2026-02-28 10:48:47 -06:00
9b28f78ce9
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.
955 lines
37 KiB
JSON
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"
|
|
}
|
|
}
|
|
}
|