dns-worker 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +3 -3
  2. package/dist/serverfull.mjs +73 -69
  3. package/dist/serverfull.mjs.map +4 -4
  4. package/package.json +3 -1
  5. package/static/assets/AccountView-p5jSjMAE.js +4 -0
  6. package/static/assets/{AnalyticsView-C_g_jz14.js → AnalyticsView-BywwDzah.js} +2 -2
  7. package/static/assets/AuthView-qoUKd5PS.js +2 -0
  8. package/static/assets/{DestinationMap-jSW7gimP.js → DestinationMap-9Yc54Mdj.js} +1 -1
  9. package/static/assets/FilteringView-Bs3__NpV.js +1 -0
  10. package/static/assets/LogsView-B-U9oaxB.js +5 -0
  11. package/static/assets/{QRCodeCanvas-Cu_-aNyM.js → QRCodeCanvas-DQ-xNuwF.js} +2 -2
  12. package/static/assets/{RulesView-CfVeQv0-.js → RulesView-B2kL1QhI.js} +1 -1
  13. package/static/assets/SettingsView-DTGI6eSd.js +1 -0
  14. package/static/assets/SetupView-DE9MM-32.js +1 -0
  15. package/static/assets/{SwipeableDrawer-BrmEzhuP.js → SwipeableDrawer-B81ANpsc.js} +1 -1
  16. package/static/assets/{TrendChart-Dc5yJndv.js → TrendChart-CCR1W3fC.js} +3 -3
  17. package/static/assets/browser-Dc5iKjY4.js +1 -0
  18. package/static/assets/date-CpvuBM37.js +1 -0
  19. package/static/assets/{de-DE-CA3VPcoz.js → de-DE-kDnumQOF.js} +1 -1
  20. package/static/assets/{es-ES-CHvRWwd-.js → es-ES-CqKS7vHl.js} +1 -1
  21. package/static/assets/{fr-FR-CqGOuepx.js → fr-FR-BRcdpT35.js} +1 -1
  22. package/static/assets/getFlagEmoji-DRubsb7D.js +1 -0
  23. package/static/assets/index-Bheo8y3N.css +2 -0
  24. package/static/assets/index-dXN_pYn1.js +16 -0
  25. package/static/assets/{ja-JP-BJSbUSmh.js → ja-JP-C5jk6SuH.js} +1 -1
  26. package/static/assets/{ko-KR-Chzg6jwO.js → ko-KR-z38NtMFa.js} +1 -1
  27. package/static/assets/{ru-RU-CSyCGGPn.js → ru-RU-Bicx52lz.js} +1 -1
  28. package/static/assets/services-BVnEJBDq.js +1 -0
  29. package/static/assets/vendor-i18next-BKUzkAKP.js +1 -0
  30. package/static/assets/vendor-react-BmoHsW1x.js +11 -0
  31. package/static/assets/{vendor-ui-core-sfZn2C08.js → vendor-ui-core-CY_WyMIf.js} +1 -1
  32. package/static/assets/{vendor-utils-CnB7BG7m.js → vendor-utils-BWSB0jGn.js} +1 -1
  33. package/static/assets/{vi-VN-D7rcA1IX.js → vi-VN-CvS_mTAu.js} +1 -1
  34. package/static/assets/{zh-CN-CSPdaOkF.js → zh-CN-B0nRgJTD.js} +1 -1
  35. package/static/assets/{zh-TW-DETA1X3X.js → zh-TW-lc_SSoVI.js} +1 -1
  36. package/static/index.html +6 -6
  37. package/static/sw.js +1 -1
  38. package/static/assets/AccountView-CGRwz6ae.js +0 -4
  39. package/static/assets/AuthView-BQzmEyvO.js +0 -2
  40. package/static/assets/FilteringView-CQ7sX3Rp.js +0 -1
  41. package/static/assets/LogsView-eLfZMRVo.js +0 -5
  42. package/static/assets/SettingsView-agJiYEt5.js +0 -1
  43. package/static/assets/SetupView-CTgCUAgk.js +0 -1
  44. package/static/assets/browser-DPi2BX_1.js +0 -1
  45. package/static/assets/date-IKj2stuv.js +0 -1
  46. package/static/assets/getFlagEmoji-_Wxhq0lT.js +0 -1
  47. package/static/assets/index-919BqnYI.css +0 -2
  48. package/static/assets/index-CbTjGMTZ.js +0 -16
  49. package/static/assets/services-Cwvmit1q.js +0 -1
  50. package/static/assets/vendor-i18next-cO7FDf_e.js +0 -1
  51. package/static/assets/vendor-react-CHk5ngkq.js +0 -11
@@ -1,4 +1,4 @@
1
- const e={account:`Compte`,logout:`Déconnexion`,selectProfile:`Sélectionner un profil`,add:`Ajouter`,newProfileName:`Nouveau nom du profil...`,profileNameFormatTip:`Note sur le nom du profil : 1 à 30 caractères, ne doit pas dupliquer un nom existant`,profileLimitExceeded:`Limite de profils atteinte (max. {{max}})`,profileNameExists:`Ce nom de profil existe déjà`,profileNameFormatError:`Format de nom du profil incorrect`,create:`Créer`,welcome:`Bienvenue`,createProfileToStart:`Créez un profil pour commencer.`,loading:`Chargement...`,errorNetwork:`Erreur réseau`,confirmDelete:`Voulez-vous vraiment supprimer ce profil ?`,confirmLogout:`Voulez-vous vraiment vous déconnecter ?`,notFound:`404 - Page non trouvée`,notFoundDesc:`La page que vous recherchez n'existe pas ou a été déplacée.`,backToHome:`Retour à l'accueil`,apac:`Asie-Pacifique`,mainlandChina:`Chine continentale`,HongKong:`Hong Kong`,Singapore:`Singapour`,Tokyo:`Tokyo`,NorthAmerica:`Amérique du Nord`,nae:`Est de l'Amérique du Nord`,naw:`Ouest de l'Amérique du Nord`,eu:`Europe`,invalidFormat:`Format de fichier incorrect`,import:`Importer`,importSuccess:`Profil importé avec succès`,importError:`Échec de l'importation. Veuillez vérifier le format et réessayer plus tard`,save:`Enregistrer`,saveSuccess:`Paramètres enregistrés`,close:`Fermer`,cancel:`Annuler`,continue:`Continuer`,back:`Retour`,copy:`Copier`,copied:`Copié`,copyKey:`Copier la nouvelle clé de récupération`,confirm:`Confirmer`,delete:`Supprimer`,rename:`Renommer`,disable:`Désactiver`,confirmDisable:`Confirmer la désactivation`,modeServerfull:`Mode Serverfull`,modeCloudflare:`Mode Cloudflare Worker`},t={setup:`Installation`,rules:`Règles`,stats:`Statistiques`,logs:`Journaux`,filter:`Listes de filtrage`,settings:`Paramètres`},n={light:`Clair`,dark:`Sombre`,system:`Système`},r={login:`Se connecter à DNS Worker`,signup:`Créer un compte pour commencer`,welcomeBack:`Bon retour ! Veuillez saisir vos identifiants`,protectInternet:`Protégez votre premier pas sur Internet`,error:`Erreur`,username:`Nom d'utilisateur`,usernamePlaceholder:`Votre nom d'utilisateur`,password:`Mot de passe`,passwordPlaceholder:`Votre mot de passe`,loginBtn:`Connexion`,signupBtn:`S'inscrire`,totpVerification:`Vérification TOTP`,noAccount:`Pas de compte ? Inscrivez-vous maintenant`,haveAccount:`Déjà un compte ? Retour à la connexion`,formatTipUsername:`Note sur le nom d'utilisateur : 5 à 32 caractères, format Unix (doit commencer par une lettre minuscule ou un trait de soulignement, et ne peut contenir que des lettres minuscules, des chiffres, des traits de soulignement et des tirets)`,formatTipPassword:`Note sur le mot de passe : 12-100 caractères.`,authFailed:`Échec de l'authentification. Veuillez vérifier votre nom d'utilisateur ou mot de passe`,networkError:`Erreur réseau. Veuillez réessayer plus tard`,turnstileRequired:`Veuillez valider le captcha`,turnstileError:`Échec du chargement du captcha. Veuillez vérifier la clé du site ou la configuration du domaine`,verifying:`Vérification de sécurité en cours...`,passwordLeaked:`Ce mot de passe a été compromis. Pour des raisons de sécurité, veuillez utiliser un mot de passe aléatoire ou fort.`,usernameExists:`Ce nom d'utilisateur est déjà enregistré. Veuillez en essayer un autre.`,skip:`Passer`,showPassword:`Afficher le mot de passe`,hidePassword:`Masquer le mot de passe`,geolocationRequired:`Échec de la géolocalisation. Veuillez essayer de vous reconnecter.`,unauthorizedDefault:`Votre session a expiré. Veuillez vous reconnecter.`,unauthorizedGeo:`Changement de position géographique détecté (limite de distance dépassée). Session fermée.`,unauthorizedExpired:`Votre session a expiré. Veuillez vous reconnecter.`,unauthorizedReuse:`Alerte de sécurité : connexion doublée détectée. Session fermée.`,unauthorizedRevoked:`Votre session a été révoquée ou supprimée. Veuillez vous reconnecter.`,sessionLockTitle:`Verrouillage de session inactive`,sessionLockDesc:`Verrouillez l'interface avec un code PIN à 4 chiffres lorsque l'application est inactive pour protéger les sessions actives contre les accès physiques non autorisés.`,enableSessionLock:`Activer le verrouillage de session`,inactivityTimeout:`Délai d'inactivité`,timeout1m:`1 minute`,timeout2m:`2 minutes`,timeout5m:`5 minutes`,timeout15m:`15 minutes`,timeout30m:`30 minutes`,timeout60m:`60 minutes`,changePin:`Modifier le code PIN`,disablePin:`Désactiver le verrouillage de session`,configurePin:`Configurer le code PIN`,newPin:`Nouveau code PIN à 4 chiffres`,pinHelper:`Chiffres uniquement, ex: 1234`,confirmPin:`Confirmer le nouveau code PIN`,verifyIdentity:`Vérifier l'identité`,usePassword:`Utiliser le mot de passe`,use2fa:`Utiliser le code TOTP`,totpCode:`Code TOTP`,currentPassword:`Mot de passe actuel`,disablePinWarning:`La désactivation du code PIN désactivera complètement la fonction de verrouillage de session inactive.`,pinFormatTip:`Le code PIN doit comporter exactement 4 chiffres`,pinMatchTip:`Les codes PIN ne correspondent pas`,passwordRequired:`Mot de passe requis pour la vérification`,sessionLocked:`Session verrouillée pour inactivité`,sessionExpired:`Trop de tentatives échouées. Session terminée.`,pinIncorrect:`Code PIN incorrect`,attemptsRemaining:`{{count}} tentatives restantes`,logoutAndReturn:`Déconnecter la session`,lockNow:`Verrouiller maintenant`,cfErrorWithDetails:`Erreur Cloudflare Edge (Erreur {{code}} : {{desc}}). Le service est temporairement indisponible, veuillez réessayer plus tard. {{rayId}}`,cfErrorCodeOnly:`Erreur Cloudflare Edge (Erreur {{code}}). Le service est temporairement indisponible. {{rayId}}`,cfErrorGeneric:`Erreur Cloudflare Edge, le service est temporairement indisponible. Veuillez réessayer plus tard. {{rayId}}`,htmlErrorGeneric:`Le serveur a renvoyé une réponse inattendue (HTTP {{status}}). Veuillez réessayer plus tard.`,tooManyAttempts:`Trop de requêtes ou de tentatives. Veuillez réessayer plus tard.`,dbQuotaExceeded:`Le quota quotidien de lecture de la base de données a été dépassé. Veuillez attendre la réinitialisation quotidienne.`,noUsersRegistered:`Aucun compte enregistré. Veuillez vous inscrire en tant qu'administrateur.`,registerAdminTitle:`Enregistrer un compte administrateur`,registerAdminDesc:`Aucun compte dans le système. Le premier utilisateur deviendra administrateur système.`,goToRegisterAdmin:`Créer l'admin`,dbNotInitialized:`Base de données non initialisée ou tables manquantes. Veuillez exécuter npm run db:migrate:prod.`,verifyWithPasskey:`Vérifier avec une clé d'accès (Passkey)`,orUseTotp:`Ou utiliser le code de l'authentificateur`,passwordRequiredFirst:`Veuillez d'abord saisir votre mot de passe`,passkeyVerification:`Vérification par clé d'accès`,passkeyPromptDesc:`Vérifiez à l'aide de vos données biométriques enregistrées ou de votre clé de sécurité`,forgotPassword:`Mot de passe oublié ?`,forgotPasswordTitle:`Réinitialiser le mot de passe`,forgotPasswordDesc:`Récupérez votre compte en toute sécurité grâce à l'authentification multifacteur (Passkey ou TOTP).`,noMfaContactAdmin:`Ce compte n'a configuré aucune authentification multifacteur (Passkey ou TOTP). Veuillez contacter un administrateur.`,chooseMfaForReset:`Choisissez une méthode pour vérifier votre identité :`,authViaPasskey:`Vérifier avec Passkey`,authViaPasskeyDesc:`Vérification en un clic par biométrie ou clé de sécurité matérielle`,authViaTotp:`Vérifier avec l'application d'authentification (TOTP)`,authViaTotpDesc:`Saisissez le code à 6 chiffres généré par votre application`,authViaRecoveryKey:`Utiliser une clé de récupération d'urgence`,authViaRecoveryKeyDesc:`Saisissez une clé de récupération à 10 caractères`,verifyAndProceed:`Vérifier et continuer`,setNewPassword:`Définir un nouveau mot de passe`,setNewPasswordDesc:`Identité vérifiée. Veuillez définir un nouveau mot de passe pour votre compte.`,newPassword:`Nouveau mot de passe`,confirmNewPassword:`Confirmer le nouveau mot de passe`,passwordMismatch:`Les mots de passe ne correspondent pas`,saveAndReset:`Enregistrer et réinitialiser`,resetSuccessTitle:`Mot de passe réinitialisé avec succès`,resetSuccessDesc:`Votre mot de passe a été mis à jour et toutes vos sessions actives ont été fermées. Veuillez vous reconnecter.`,goToLogin:`Aller à la connexion`,mfaSetupTitle:`Renforcer la sécurité du compte`,mfaSetupDesc:`La configuration de l'authentification multifacteur (MFA) protège votre compte et active la connexion sans mot de passe.`,mfaRecommended:`Recommandé`,passkeySignupDesc:`Utilisez Touch ID, Face ID ou une clé de sécurité. Rapide et résistant au phishing.`,bindPasskeyNow:`Enregistrer une clé d'accès maintenant`,mfaUniversal:`Universel`,totpSignupDesc:`Utilisez Google Authenticator, 1Password ou toute application TOTP standard.`,setupTotpBtn:`Configurer l'application d'authentification`,skipMfaSetup:`Ignorer pour l'instant`,backToMfaOptions:`Retour aux options`,otherOptions:`Autres options`,next:`Suivant`,mfaVerification:`Authentification multifacteur`,totpPrompt:`Entrez le code dynamique à 6 chiffres de votre application d'authentification`,recoveryPrompt:`Entrez votre clé de récupération à 30 chiffres (5 groupes de 6 chiffres)`,recoveryChecksumError:`Erreur de somme de contrôle : ce groupe n'est pas divisible par 11`,recoveryChecksumErrorDesc:`Erreur de somme de contrôle dans le groupe {{groups}}, veuillez vérifier et réessayer`,backToPasskey:`Retour à la vérification par Passkey`,recoveryKeyRequired:`Veuillez entrer votre clé de récupération`,totpFormatError:`Veuillez entrer un code valide à 6 chiffres`,registrationDisabledTitle:`Inscription désactivée`,registrationDisabledDesc:`L'inscription de nouveaux utilisateurs est actuellement fermée. Veuillez contacter un administrateur pour obtenir un compte.`,backToLogin:`Retour à la connexion`,jwtSecretPreset:`JWT_SECRET par défaut détecté. Veuillez modifier le JWT_SECRET prédéfini dans les variables d'environnement avant le déploiement.`,jwtSecretMissing:`JWT_SECRET manquant. Veuillez configurer une clé sécurisée dans les variables d'environnement avant le déploiement.`,jwtSecretInvalid:`Format JWT_SECRET non valide, veuillez vérifier la configuration.`,keepLoggedIn:`Rester connecté pendant {{days}} jours`,orUseOtherMfa:`ou utiliser une autre méthode`,totpUseRecovery:`Utiliser la clé de récupération`,totpUseApp:`Utiliser l'application d'authentification`,mfaMethodTotp:`Application d'authentification (TOTP)`,invalidTotp:`Code de vérification TOTP invalide.`},i={title:`Guide d'installation`,subtitle:`Configurez vos appareils pour gérer votre sécurité Internet avec DNS Worker.`,regionOptimization:`Optimisation de la région de connexion (Windows)`,otherRegion:`Autres régions`,copied:`Copié dans le presse-papiers`,verifyConnection:`Vérifier la connexion`,verifying:`Vérification...`,connected:`Connecté`,notConnected:`Non connecté`,profileMatch:`Le filtrage est actif pour ce profil.`,profileMismatch:`Vous utilisez Obex, mais l'ID du profil ne correspond pas.`,verifyHint:`Terminez la configuration ci-dessous et cliquez sur le bouton pour vérifier.`,refreshStatus:`Actualiser l'état`,egressIp:`Adresse IP de sortie`,currentLocation:`Localisation actuelle`,edgeServer:`Serveur Edge`,serverLocation:`Emplacement du serveur`,dohUrlTitle:`URL DoH du profil actuel`,accessPointTitle:`URL d'accès DoH`,defaultAccessPointName:`appareil-1`,moreAccessPoints:`Plus de points d'accès ↗`,accessPointName:`Nom du point d'accès`,accessPointToken:`Clé d'accès`,addAccessPoint:`Ajouter un point d'accès`,renameAccessPoint:`Renommer`,rotateToken:`Renouveler la clé`,rotateTokenConfirmDesc:`Le renouvellement de la clé déconnectera immédiatement tous les appareils utilisant l'ancienne clé. Voulez-vous continuer ?`,deleteAccessPoint:`Supprimer`,deleteAccessPointConfirm:`Voulez-vous vraiment supprimer ce point d'accès ?`,manageAccessPoints:`Gérer les points d'accès`,searchAccessPoints:`Rechercher des points d'accès...`,accessPointNameExists:`Ce nom de point d'accès existe déjà`,accessPointCreated:`Point d'accès créé avec succès`,accessPointRenamed:`Point d'accès renommé avec succès`,accessPointDeleted:`Point d'accès supprimé avec succès`,accessPointNameFormatTip:`Note sur le point d'accès : 1 à 30 caractères. Seuls les lettres, chiffres, traits de soulignement et tirets sont autorisés`,accessPointLimitExceeded:`Limite de points d'accès atteinte (max. {{max}})`,tokenRotated:`Clé d'accès renouvelée avec succès`,whatIsDoh:`Qu'est-ce que DoH ?`,dohDesc:`Le DNS over HTTPS (DoH) est un protocole permettant d'effectuer des requêtes DNS via une connexion HTTPS chiffrée.`,dohBenefit1:`Empêche l'interception et la manipulation du trafic DNS par des tiers`,dohBenefit2:`Améliore la sécurité lors de la résolution DNS et de la navigation web`,learnMore:`En savoir plus`,copyUrl:`Copier l'URL`,browsers:`Navigateurs`,browserTitle:`Configuration du navigateur (Chrome/Edge)`,browserSteps:`Paramètres > Confidentialité et sécurité > Sécurité > Utiliser un DNS sécurisé > Personnalisé > Coller l'URL.`,browserTips:`Ou copiez cette adresse dans votre barre d'adresse :`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Les appareils Apple prennent en charge la configuration rapide via des profils de configuration.`,appleWarning:`Les profils ne peuvent pas être installés en "Mode Isolement (Lockdown Mode)". Veuillez vérifier que ce mode est désactivé.`,downloadConfig:`Télécharger le profil de configuration`,appleInstallHint:`Après le téléchargement, accédez à Paramètres > Profil téléchargé pour l'installer`,windows:`MS Windows`,windowsTitle:`Configuration Windows 11`,windowsStep0:`Paramètres > Réseau et Internet`,windowsStep1:`Propriétés > Attribution du serveur DNS > Modifier > Manuel.`,windowsStep2:`Sélectionnez et saisissez les IP DNS :`,windowsStep3:`Activez DoH (modèle manuel) et collez l'URL.`,windowsStep4:`Désactivez le repli vers les connexions non chiffrées.`,android:`Android`,androidTitle:`Android / DNS privé (DoT & DoQ)`,androidDesc:`Prend en charge le 'DNS privé' natif du système (DoT) ou des applications tierces pour DoH.`,androidDotTitle:`DNS privé (DoT / DoQ)`,androidDotDesc:`Paramètres > Réseau et Internet > DNS privé > Nom d'hôte du fournisseur DNS privé (prend également en charge les clients DoQ) :`,androidWildcardHint:`(Certificat générique, redirige vers ce profil)`,androidSingleDomainHint:`(Certificat domaine unique, redirige vers le profil par défaut)`,androidIpNotice:`Accès via IP ou adresse locale. Le DNS privé d'Android n'accepte que les noms de domaine ; veuillez configurer SERVERFULL_DOT_DOMAIN dans .env (ex. dns.example.com).`,androidWarning:`Remarque : Le 'DNS privé' natif d'Android utilise le protocole DoT. En cas de déploiement sur Cloudflare Workers, utilisez des applications comme Intra pour DoH. En mode Serverfull avec TLS configuré, vous pouvez directement utiliser le nom d'hôte DoT ci-dessus.`,dynamicFromDomain:`Dynamique (depuis "{{domain}}")`,dynamicFromDomainV6:`Dynamique IPv6 (depuis "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (proxy DoH Cloudflared)`,linuxDesc:`Exécutez un proxy DNS local léger pour envoyer les requêtes DNS chiffrées par DoH à Obex.`,linuxStep1:`Exécutez le script suivant pour installer cloudflared et créer un service systemd (écoute sur 127.0.0.1:53).`,linuxStep2:`Modifiez le DNS du système pour 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Utilisez ce résolveur pour tous les appareils de votre réseau en le définissant comme serveur DoH du routeur.`,routerosStep1:`À exécuter dans le terminal RouterOS (RouterOS 7) :`,routerosNote:`Les requêtes transmises par le routeur apparaissent dans les journaux comme provenant du routeur, et non des appareils individuels. Configurez les appareils directement si vous avez besoin de journaux par appareil.`,routerosDocs:`Documentation DNS de MikroTik`,accessPointsCardTitle:`Points d'accès`,currentAccessPoint:`Point d'accès actuel`,selectAccessPointToConfigure:`Sélectionner le point d'accès à configurer`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`Prise en charge native de la RFC 9250 (DNS over QUIC) et de la RFC 9460 (HTTP/3 & Encrypted Client Hello), avec établissement 0-RTT et protection contre l'inspection du SNI.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`Compatible avec les clients modernes tels qu'AdGuard, Clash Meta (Mihomo), Sing-box, etc. :`,doqWildcardHint:`(Certificat générique, redirige vers ce profil)`,doqSingleDomainHint:`(Certificat de domaine unique, redirige vers le profil par défaut)`,doqIpNotice:`DoQ requiert un certificat TLS et un nom de domaine valide. Veuillez définir SERVERFULL_DOT_DOMAIN dans .env puis actualiser.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`Les navigateurs modernes (Chrome/Firefox/Safari) négocient automatiquement HTTP/3 et le chiffrement ECH via les enregistrements Alt-Svc et HTTPS RFC 9460 :`,ddrHint:`Intégré avec la section 8 de la RFC 9460 DDR (Discovery of Designated Resolvers), permettant aux clients de négocier et de passer automatiquement à DoQ/DoT et ECH via des requêtes _dns.`,e2eeDesc:`Chiffre les journaux DNS à la périphérie avec votre clé hybride post-quantique (P256-MLKEM768). Le cloud ne peut pas les lire; le déchiffrement se fait localement via votre Passkey.`,detecting:`Détection en cours...`,dotUnavailableCfTitle:`DoT / DoQ indisponible en mode Cloudflare Worker`,dotUnavailableCfDesc:`Actuellement exécuté en mode Cloudflare Worker (Serverless). En raison des limites du runtime edge, l'écoute sur les ports TCP/UDP 853 n'est pas prise en charge. Pour utiliser DoT ou DoQ, déployez en mode Serverfull ; utilisez DoH pour le moment.`},a={title:`Règles personnalisées`,subtitle:`Contrôlez manuellement le comportement de résolution pour des domaines spécifiques (bloquer, autoriser ou rediriger).`,action:`Action`,typeBlock:`Bloquer (BLOCK)`,typeAllow:`Autoriser (ALLOW)`,typeRedirect:`Rediriger (REDIRECT)`,pattern:`Modèle de domaine (Pattern)`,patternPlaceholder:`example.com ou *.test.com`,addRule:`Ajouter la règle`,redirectSettings:`Paramètres de redirection`,aRecord:`Enregistrement A (IPv4)`,aaaaRecord:`Enregistrement AAAA (IPv6)`,cnameRecord:`Enregistrement CNAME`,txtRecord:`Enregistrement TXT`,optional:`(optionnel)`,ipv4Placeholder:`ex. 1.2.3.4`,ipv6Placeholder:`ex. 2001:db8::1`,cnamePlaceholder:`ex. cible.com`,txtPlaceholder:`Saisissez le contenu du texte...`,saveRedirectRule:`Enregistrer et ajouter la règle de redirection`,noRulesTitle:`Aucune règle personnalisée`,noRulesDesc:`Vous n'avez pas encore ajouté de règle manuelle.`,tableAction:`Action`,tablePattern:`Modèle`,tableDetails:`Détails de résolution`,tableOps:`Opérations`,labelBlock:`Bloquer`,labelAllow:`Autoriser`,labelRedirect:`Rediriger`,detailBlock:`Résoudre vers : `,detailAllow:`Transmettre au serveur amont`,patternEmpty:`Le modèle de domaine ne peut pas être vide`,duplicatePattern:`Une règle existe déjà pour ce domaine`,addSuccess:`Règle ajoutée avec succès`,addFailed:`Échec de l'ajout de la règle`,updateSuccess:`Règle mise à jour avec succès`,updateFailed:`Échec de la mise à jour de la règle`,tableCreatedAt:`Date d'ajout`,clickToSort:`Cliquer pour trier`,editRule:`Modifier la règle`,cancel:`Annuler`,saveChanges:`Enregistrer les modifications`,delete:`Supprimer`,close:`Fermer`},o={customRange:`Période personnalisée`,startTime:`Heure de début`,endTime:`Heure de fin`,apply:`Appliquer`,custom:`Personnalisé`,totalQueries:`Requêtes totales`,blocked:`Bloquées`,redirected:`Redirigées`,blockRate:`Taux de blocage`,activeDevices:`Appareils actifs`,activeIPs:`Adresses IP actives`,queryTrend:`Évolution des requêtes`,noRecords:`Aucun enregistrement pour cette période`,topAllowed:`Domaines les plus autorisés (Allowed)`,topBlocked:`Domaines les plus bloqués (Blocked)`,noData:`Aucune donnée`,clientActivity:`Activité des clients`,ipAddress:`Adresse IP`,location:`Localisation`,queries:`Requêtes`,destinationDistribution:`Distribution des destinations de trafic`,requests:`Requêtes`,topIsps:`Principaux FAI`,pressToShowMore:`Cliquer pour afficher plus`,maximize:`Agrandir`,minimize:`Réduire`,loading:`Chargement...`},s={title:`Journaux de requêtes`,subtitle:`Consultez les journaux de résolution DNS et les enregistrements de blocage pour ce profil.`,realtime:`Temps réel`,allStatus:`Tous les états`,onlyPass:`Autorisées`,onlyBlock:`Bloquées`,onlyRedirect:`Redirigées`,searchPlaceholder:`Rechercher des domaines...`,noResults:`Aucun résultat trouvé`,noRecords:`Aucun enregistrement`,noResultsDesc:`Aucun enregistrement de domaine ne correspond à "{{query}}".`,noRecordsDesc:`Aucune requête DNS reçue pendant la période sélectionnée.`,tableTime:`Heure`,tableDomain:`Domaine`,tableAnswer:`Résultat`,tableSource:`Source`,tableType:`Type`,tableStatus:`État`,tableReason:`Raison`,loadedAll:`Tous les {{count}} enregistrements ont été chargés`,realtimeLoadMoreTip:`Désactivez le mode "Temps réel" pour en charger plus`,filterAccessPoint:`Point d'accès`,allAccessPoint:`Tous les points d'accès`,allCountry:`Tous les pays`,filterCountry:`Pays de destination`,allIsp:`Tous les FAI`,filterIsp:`FAI`,timeRange:`Période`,clearFilters:`Effacer les filtres`,details:`Détails de la requête`,detailAccessPoint:`Point d'accès`,basicInfo:`Informations de base`,detailDomain:`Domaine`,detailType:`Type`,detailTime:`Heure`,detailLatency:`Latence`,detailProfile:`Profil utilisé`,detailStatus:`État`,detailUpstream:`Serveur amont`,detailReason:`Raison`,detailNoReason:`Aucune (Autorisé)`,detailECS:`ECS`,resolutionResult:`Résultat de résolution`,noResult:`Aucun résultat`,networkDetails:`Détails réseau`,clientSource:`Client (Source)`,destination:`Destination`,quickActions:`Actions rapides`,actionAllow:`Autoriser`,actionBlock:`Bloquer`,actionRedirect:`Rediriger`,statusPass:`Autorisé`,statusBlock:`Bloqué`,statusRedirect:`Redirigé`,export:`Exporter les journaux`,rewritten:`Réécrit`,logDetails:`Détails du journal`,searchCountry:`Rechercher un pays...`,noMatchingCountries:`Aucun pays correspondant trouvé`,searchIsp:`Rechercher un FAI...`,noMatchingIsps:`Aucun FAI correspondant trouvé`,loadingIsps:`Chargement des FAI...`,loggingDisabledTitle:`Journalisation désactivée`,loggingDisabledDesc:`La conservation des journaux pour ce profil est définie sur 'Désactivé'. Aucun journal n'est enregistré. Pour afficher les journaux, activez la rétention dans les Paramètres.`,detailIsClientEncrypted:`Chiffré côté client`,encryptedLocked:`Oui (Verrouillé)`,encryptedDecrypted:`Oui (Déchiffré localement)`,encryptedYes:`Oui`,notEncrypted:`Non`,encryptedRecord:`[Enregistrement chiffré]`,exportSuccess:`Journaux exportés avec succès`,exportError:`Échec de l'exportation des journaux`},c={title:`Listes de blocage externes`,subtitle:`Abonnez-vous à des listes de blocage de domaines gérées par des tiers (comme AdGuard, etc.).`,formatDisclaimer:`Ce système ne prend en charge que les formats de liste AdGuard basiques et les listes de domaines simples. Seules les règles de blocage de base (ex. ||example.com^) sont prises en compte ; les exceptions "@@", les règles de réécriture "$" et les jokers "*" sont ignorés. Les sous-domaines sont associés automatiquement.`,syncAll:`Synchroniser toutes les listes`,urlPlaceholder:`Saisir l'URL de la liste...`,addSubscription:`Ajouter un abonnement`,supportedFormats:`Formats de listes pris en charge :`,formatAdGuard:`Compatible avec les règles de filtrage ||domain.com^.`,formatHosts:`Compatible avec les fichiers hosts standard (ex. 0.0.0.0 domain.com).`,noListsTitle:`Aucune liste ajoutée`,noListsDesc:`Vous n'êtes pas encore abonné à une liste de blocage externe.`,tableUrl:`URL de la liste`,tableLastSync:`Dernière synchro`,tableStatus:`État`,tableOps:`Opérations`,neverSynced:`Jamais`,enabled:`Actif`,disabled:`Échec de synchro`,statusNormal:`Normal`,statusDisabled:`Désactivée`,statusOutdated:`Obsolète`,statusMissing:`Manquant`,presetOisdBig:`OISD Big (Blocage de publicités et malwares)`,presetOisdNsfw:`OISD NSFW (Blocage de contenus pornographiques/adultes)`,presetAdGuard:`AdGuard AdServers (Serveurs publicitaires)`,presetStevenBlack:`StevenBlack Hosts (Bloqueur tout-en-un)`,syncTaskStarted:`Tâche de synchronisation démarrée`,syncCheckComplete:`Vérification de synchronisation terminée`,syncTaskFailed:`Échec de la synchronisation`,syncing:`Synchronisation...`,syncSuccess:`Synchronisation réussie`,syncError:`Échec de la synchronisation`,syncErrorDesc:`Impossible de télécharger ou d'analyser la liste de blocage. Veuillez vérifier le lien et son accessibilité.`,deleteConfirm:`Confirmer la suppression de l'abonnement ?`,deleteSuccess:`Liste supprimée avec succès`,deleteError:`Échec de la suppression de la liste`,addSuccess:`Liste ajoutée avec succès`,addError:`Échec de l'ajout de la liste`,listEnabled:`Liste active`,listEnabledHint:`Désactivez pour arrêter le filtrage avec cette liste sans la supprimer. Son abonnement et son historique de synchronisation sont conservés.`,listEnabledToast:`Liste activée - reconstruction du filtre`,listDisabledToast:`Liste désactivée - reconstruction du filtre`,checkDomain:`Vérifier un domaine`,checkDomainHint:`Les listes sont stockées sous forme de filtres compacts, leurs entrées ne peuvent donc pas être parcourues. Vous pouvez tester instantanément n'importe quel domaine par rapport à cette liste.`,check:`Vérifier`,checkBlocked:`Bloqué par cette liste`,checkNotBlocked:`Non bloqué par cette liste`,checkViaParent:`(correspond à un domaine parent)`,checkNotSynced:`Cette liste n'a pas encore terminé sa synchronisation, il n'y a donc rien à vérifier.`,checkListDisabled:`Cette liste est actuellement désactivée, elle ne filtre donc rien pour le moment.`,checkProbabilisticRate:`Les filtres sont probabilistes : environ 1 correspondance sur {{odds}} est un faux positif. Ajouter une exception couvre aussi tous ses sous-domaines.`,checkProbabilistic:`Les filtres sont probabilistes, une petite part des correspondances sont donc des faux positifs. Ajouter une exception couvre aussi tous ses sous-domaines.`,checkAllowAction:`Autoriser quand même`,checkAllowed:`Exception ajoutée - ce domaine se résout désormais`,allowRuleAdded:`Exception ajoutée pour {{domain}}`,listDetails:`Détails de la liste`},l={title:`Paramètres du profil`,subtitle:`Gériez votre stratégie de résolution DNS et vos options avancées.`,saveChanges:`Enregistrer toutes les modifications`,saveSuccess:`Paramètres enregistrés avec succès`,saveError:`Échec de l'enregistrement. Veuillez réessayer plus tard`,upstreamTitle:`Serveur amont`,dohUrl:`URL DoH`,dnsIP:`IP DNS`,classicDns:`DNS classique`,httpsOnly:`Prendre en charge HTTPS uniquement`,upstreamDesc:`Toutes les requêtes non bloquées seront envoyées à ce serveur. Prend en charge DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) ou le DNS classique. Le DNS classique est acheminé via TCP.`,defaultPolicyTitle:`Comportement de filtrage par défaut`,onNoMatch:`Si aucune règle ne correspond`,allowAll:`Autoriser toutes les requêtes`,blockAll:`Bloquer toutes les requêtes`,logRetentionTitle:`Rétention des journaux`,retentionDuration:`Durée de rétention`,retentionDesc:`Les journaux sont supprimés automatiquement. `,skipLogOnPass:`Ne pas enregistrer les requêtes autorisées`,skipLogOnPassDesc:`Lorsqu'activé, les requêtes normales autorisées ne sont pas enregistrées. Seules les requêtes bloquées, redirigées ou échouées sont conservées.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`Tous les serveurs DNS en amont ne prennent pas en charge l'ECS. Pour les résolveurs récursifs comme ControlD, l'ECS n'affecte que le routage interne et n'est pas transmis au serveur faisant autorité.`,sendEcs:`Transmettre ECS`,customSubnet:`Sous-réseau personnalisé`,customIpv4:`Sous-réseau IPv4 personnalisé`,customIpv6:`Sous-réseau IPv6 personnalisé`,ipv4Hint:`(ex. 1.2.3.0/24)`,ipv6Hint:`(ex. 2001:db8::/32)`,testToolTitle:`Outil de test de résolution en temps réel`,testDomain:`Domaine de test`,recordType:`Type d'enregistrement`,runTest:`Exécuter le test`,domainPlaceholder:`ex. google.com`,hitRule:`Règle correspondante / Raison`,defaultAllow:`Politique d'autorisation par défaut`,parseLatency:`Temps de résolution`,sourceIp:`Adresse IP source`,answerSection:`Section des réponses (Answer Section)`,noRecordsReturned:`Cette requête n'a renvoyé aucun enregistrement.`,diagnostics:`Informations de diagnostic`,errorDetail:`Détails de l'erreur`,upstreamResponse:`Réponse de l'amont`,presetCloudflareSecurity:`Cloudflare Security (Rapide/Protection malwares et phishing)`,presetCloudflareFamilies:`Cloudflare Families (Rapide/Protection malwares et contenu adulte)`,presetQuad9:`Quad9 (Protection malwares/Pas de journaux/Sans ECS)`,presetQuad9Ecs:`Quad9 ECS (Protection malwares/Pas de journaux/Avec ECS)`,presetControlDFree:`ControlD Free (Protection publicités/trackers/malwares/phishing)`,presetControlDUncensored:`ControlD Uncensored (Contourner la censure)`,presetAdGuard:`AdGuard (Bloqueur publicités et trackers)`,presetAdGuardFamily:`AdGuard Family protection (Publicités/trackers/contenu adulte/recherche sécurisée)`,retention10m:`10 minutes`,retention1h:`1 heure`,retention24h:`24 heures`,retention7d:`7 jours`,retention30d:`30 jours`,retention90d:`90 jours (Maximum)`,blockModeTitle:`Mode de réponse au blocage`,blockModeDesc:`Contenu renvoyé lorsqu'un domaine est bloqué`,default:`Par défaut`,NXDOMAIN:`NXDOMAIN (Le domaine n'existe pas)`,NODATA:`NODATA (Aucune donnée)`,customIP:`IP personnalisée`,export:`Exporter la configuration`,exportSuccess:`Configuration exportée avec succès`,exportError:`Échec de l'exportation. Veuillez réessayer plus tard`,nameUpdateSuccess:`Nom du profil mis à jour`,saving:`Enregistrement en cours...`,echTitle:`Réécrire ECH`,enableEch:`Activer la réécriture ECH`,echDesc:`Pour les domaines gérés par Cloudflare, réécrit automatiquement les paramètres ECH et le SNI de façade lors des requêtes HTTPS (Type 65) / SVCB (Type 64).`,echFrontingTitle:`SNI externe (ECH Fronting)`,echFrontingDesc:`Nom de domaine visible en clair dans le handshake TLS externe`,echFrontingCustomPlaceholder:`Entrez un domaine de fronting personnalisé, ex. crypto.cloudflare.com`,echPreferred:`Recommandé`,whatIsEch:`Qu'est-ce que l'ECH (Encrypted Client Hello) ?`,echHelpDesc:`L'ECH est une extension de confidentialité essentielle de TLS 1.3 qui chiffre intégralement le nom de domaine réel (Inner SNI), n'exposant qu'un domaine de façade (Outer SNI).`,echHelpBenefit1:`Empêche les FAI et les intermédiaires d'intercepter le sous-domaine exact visité`,echHelpBenefit2:`Associé au DoH, élimine les fuites de SNI en clair`,retentionDisabled:`Désactivé (Besoins de confidentialité)`,retentionDisabledDesc:`La journalisation est désactivée. Le système n'enregistrera aucun journal de requêtes DNS et effacera immédiatement les journaux historiques.`,localRetentionTitle:`Stockage et conservation locale`,localRetentionDuration:`Durée de rétention locale`,localRetentionDesc:`Les journaux sont stockés de manière persistante dans la base SQLite locale de votre navigateur (OPFS), permettant des recherches instantanées et réduisant les coûts de stockage dans le cloud. Les journaux locaux expirés sont automatiquement supprimés.`,localRetention30d:`30 jours`,localRetention90d:`90 jours (Recommandé)`,localRetention180d:`180 jours`,localRetention365d:`365 jours (1 an)`,localRetentionUnlimited:`Illimité (Jusqu'au nettoyage manuel)`,localEngineStorage:`Moteur de stockage`,localEngineOpfs:`OPFS persistant`,localEngineMemory:`Mémoire temporaire (Navigation privée)`,localCachedCount:`Journaux en cache local`,localCachedCountUnit:`{{count}} entrées`,clearLocalData:`Vider les journaux locaux`,clearLocalDataConfirm:`Voulez-vous vraiment effacer tous les journaux locaux pour ce profil ? (Les journaux cloud ne sont pas affectés)`,clearLocalDataSuccess:`Journaux locaux effacés avec succès`,clearLocalDataError:`Échec de l'effacement des journaux locaux`,e2eeTitle:`Chiffrement de bout en bout (E2EE)`,e2eeEnabled:`Activé`,e2eeDisabled:`Désactivé`,e2eeDesc:`Chiffre les journaux DNS à la périphérie avec votre clé hybride post-quantique (P256-MLKEM768). Le cloud ne peut pas les lire; le déchiffrement se fait localement via votre Passkey.`,e2eePasskeyRequired:`E2EE nécessite un Passkey (WebAuthn). Veuillez d'abord ajouter un Passkey dans les paramètres du compte.`,e2eeGoToAccount:`Aller aux paramètres du compte`,e2eeEnableSwitch:`Activer le chiffrement E2EE`,e2eeKeyType:`Algorithme de chiffrement`,e2eeDeviceState:`État de cet appareil`,e2eeUnlocked:`Déverrouillé sur cet appareil`,e2eeUnlockButton:`Vérifier le Passkey pour déverrouiller`,e2eeProtectedPasskeys:`Passkeys autorisés`,e2eeDevicesUnit:`appareil(s)`,e2eeEnableSuccess:`Chiffrement E2EE activé avec succès`,e2eeEnableError:`Échec de l'activation du chiffrement E2EE`,e2eeDisableSuccess:`Chiffrement E2EE désactivé`,e2eeDisableError:`Échec de la désactivation du chiffrement E2EE`,e2eeUnlockSuccess:`Clé déverrouillée avec succès sur cet appareil`,e2eeUnlockError:`Échec de la vérification du Passkey`,e2eeDisableConfirm:`Voulez-vous vraiment désactiver E2EE ? Les futurs journaux seront stockés en clair.`,e2eeUnlockPrompt:`Ce profil utilise le chiffrement E2EE. Vérifiez votre Passkey pour afficher les journaux.`,e2eeUnlockNow:`Déverrouiller les journaux`,e2eeUnlockRecovery:`Déverrouiller avec la clé de récupération`,securityTitle:`Sécurité et accès`,rotateKeyTitle:`URL d'accès`,rotateKeyDesc:`Génère une nouvelle URL d'accès pour ce profil. Tous les appareils utilisant l'ancienne URL perdront immédiatement leur connexion à DNS Worker et devront être reconfigurés avec la nouvelle URL.`,rotateKeyBtn:`Faire pivoter l'URL`,copied:`Copié dans le presse-papiers`,nameUpdateFailed:`Échec de la mise à jour`},u=JSON.parse(`{"title":"Paramètres du compte","subtitle":"Gérez vos identifiants de sécurité et les utilisateurs du système.","e2ee":{"title":"Chiffrement de bout en bout (E2EE)","desc":"Sécurise vos données sensibles via un chiffrement enveloppe hybride post-quantique côté client (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) adossé à des Passkeys matériels. Seuls les appareils autorisés peuvent déchiffrer localement.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"Passer à la post-quantique (PQC)","upgradePqcSuccess":"Mise à niveau réussie vers le chiffrement hybride post-quantique (P256-MLKEM768)","upgradePqcError":"Échec de la mise à niveau vers le chiffrement post-quantique","enabled":"Activé","disabled":"Désactivé","passkeyRequired":"Le chiffrement de bout en bout nécessite au moins une clé d'accès matérielle (WebAuthn). Veuillez ajouter une Passkey dans la section MFA ci-dessus.","scopesTitle":"Catégories de données chiffrées","scopesSubtitle":"Choisissez les catégories de données à chiffrer de bout en bout avec votre clé d'accès.","scopeLogsTitle":"Journaux de requêtes DNS","scopeLogsDesc":"Chiffre les domaines, adresses IP clientes, réponses et latences au niveau de l'Edge avant enregistrement dans D1.","scopeRulesTitle":"Règles personnalisées et redirections","scopeRulesDesc":"Règles d'autorisation/blocage et politiques de redirection chiffrées côté client.","scopeClientsTitle":"Métadonnées de clients et d'appareils","scopeClientsDesc":"Alias d'appareils, identifiants de points d'accès et métadonnées de topologie réseau.","statusActive":"Protégé","statusPlanned":"Prévu","profileSelect":"Configurer le profil","keyType":"Algorithme de chiffrement","deviceState":"État actuel de l'appareil","unlocked":"Déverrouillé sur cet appareil","unlockButton":"Vérifier la Passkey pour déverrouiller","protectedPasskeys":"Clés d'accès Passkey autorisées","devicesUnit":"clé(s)","enableSuccess":"Chiffrement de bout en bout activé avec succès","enableError":"Échec de l'activation du chiffrement de bout en bout","disableSuccess":"Chiffrement de bout en bout désactivé","disableError":"Échec de la désactivation du chiffrement de bout en bout","unlockSuccess":"Clé privée déverrouillée avec succès sur cet appareil","unlockError":"Échec de la vérification de la Passkey","disableConfirm":"Voulez-vous vraiment désactiver le chiffrement de bout en bout pour ce profil ? Les futurs journaux seront stockés en clair. (Les anciens journaux chiffrés nécessitent toujours la clé privée)","noKeypairTitle":"Paire de clés de bout en bout non initialisée","noKeypairDesc":"Le chiffrement de bout en bout nécessite la génération d'une paire de clés post-quantiques (P256-MLKEM768) pour votre compte. La clé privée est protégée par chiffrement enveloppe adossé à votre Passkey ou clé de récupération.","initPasskeyBtn":"Vérifier la Passkey existante pour générer la paire de clés","addPasskeyBtn":"Ajouter une Passkey pour prendre en charge le chiffrement matériel","initRecoveryBtn":"Générer la paire de clés avec la clé de récupération","initWithRecoveryTitle":"Générer la paire de clés avec la clé de récupération","initWithRecoveryDesc":"Saisissez votre clé d'urgence actuelle à 30 chiffres. Le système générera localement une paire de clés post-quantiques (P256-MLKEM768). La clé de récupération sera automatiquement renouvelée dès son utilisation.","keypairGenSuccess":"Paire de clés de bout en bout générée avec succès !","keypairGenError":"Échec de la génération de la paire de clés","unlockRecoveryButton":"Déverrouiller avec la clé de récupération","unlockWithRecoveryTitle":"Déverrouiller avec la clé de récupération","unlockWithRecoveryDesc":"Saisissez votre clé d'urgence à 30 chiffres. Remarque : La clé sera automatiquement renouvelée dès qu'elle aura été vérifiée.","recoveryKeyInputLabel":"Clé de récupération","unlockConfirm":"Déverrouiller la clé privée","recoveryUnlockFailed":"Clé de récupération non valide ou échec du déchiffrement","generateKeypairBtn":"Générer la paire de clés","enableSwitch":"Activer le chiffrement de bout en bout des journaux de requêtes","enableSwitchDesc":"Chiffre les noms de domaine, les adresses IP clientes, les réponses et la latence en périphérie avant stockage dans le cloud.","trustBoundaryTitle":"Avis sur les limites de sécurité et de confiance","trustBoundaryDesc":"Tout le trafic de requêtes DNS transite inévitablement par le serveur d'hébergement (nœuds Cloudflare Workers ou serveur autonome) lors de la résolution, où les requêtes sont traitées en mémoire avant d'être écrites sous forme chiffrée. Cette fonctionnalité protège les données au repos dans la base de données cloud (D1) ; elle ne masque pas le trafic réseau en direct au serveur d'hébergement qui traite la requête.","initFailed":"Échec de l'initialisation du chiffrement de bout en bout","lockDevice":"Verrouiller cet appareil","lockSuccess":"Verrouillé, clé privée effacée du stockage local"},"jwtSecretWarningTitle":"Avis de sécurité : Secret JWT faible","jwtSecretWarningDesc":"Le JWT_SECRET actuel comporte moins de 32 caractères, ce qui présente des risques potentiels pour la sécurité. Veuillez configurer la variable d'environnement KEK_v1 avant de renouveler JWT_SECRET afin de garantir que les clés TOTP et de récupération chiffrées par enveloppe restent déchiffrables.","roleAdmin":"Administrateur système","roleUser":"Utilisateur","personalInfo":"Informations personnelles","username":"Nom d'utilisateur","userId":"ID de l'utilisateur","changePassword":"Modifier le mot de passe","currentPassword":"Mot de passe actuel","newPassword":"Nouveau mot de passe","updatePassword":"Mettre à jour le mot de passe","userManagement":"Gestion des utilisateurs (Admins uniquement)","createUser":"Créer un utilisateur","role":"Rôle","createdAt":"Créé le","lastActive":"Dernière activité le","lastResolve":"Dernière résolution le","actions":"Actions","dangerZone":"Zone de danger","clearLogs":"Effacer tous les journaux","clearLogsDesc":"Cela supprimera tous les journaux de requêtes DNS générés sous vos profils. Cette action est irréversible.","clearLogsBtn":"Effacer les journaux maintenant","deleteAccount":"Supprimer le compte","deleteAccountDesc":"Supprimez définitivement votre compte et toutes ses données associées. Vous perdrez l'accès à toutes vos configurations DNS.","deleteAccountBtn":"Supprimer définitivement le compte","createNewUser":"Créer un nouvel utilisateur","initialPassword":"Mot de passe initial","userRole":"Rôle de l'utilisateur","cancel":"Annuler","createNow":"Créer maintenant","formatTipUsername":"Note sur le nom d'utilisateur : 5 à 32 caractères uniquement, format Unix","formatTipPassword":"Note sur le mot de passe : 12-100 caractères.","passwordSuccess":"Mot de passe modifié avec succès","updateFailed":"Échec de la modification","confirmDeleteUser":"Voulez-vous vraiment supprimer cet utilisateur ? Tous les profils lui appartenant seront également supprimés.","confirmClearLogs":"Voulez-vous vraiment supprimer tous les journaux de requêtes de vos profils ? Cette action est irréversible.","clearLogsSuccess":"Journaux supprimés avec succès","confirmDeleteAccount":"AVERTISSEMENT : Voulez-vous vraiment supprimer votre compte ?\\n\\nToutes vos configurations DNS, règles personnalisées et journaux de requêtes seront définitivement supprimés. Cette action ne peut pas être annulée !","inactivityPolicy":"Politique d'inactivité","inactivityDesc":"Pour protéger la vie privée des utilisateurs et économiser des ressources, tous les journaux de requêtes et configurations DNS des comptes sans activité de résolution pendant 30 jours seront automatiquement supprimés. Le compte lui-même sera supprimé après 90 jours sans connexion.","systemSettings":"Paramètres système (Admins uniquement)","adminOnlyView":"Uniquement visible par les administrateurs","featureToggle":"Options des fonctionnalités","enableTurnstileSignup":"Activer le captcha sur la page d'inscription","enableTurnstileLogin":"Activer le captcha sur la page de connexion","totp":{"title":"Application d'authentification (TOTP)","enabled":"Activé","disabled":"Désactivé","setupDesc":"Ajoutez un niveau de sécurité supplémentaire à votre compte. Utilisez Google Authenticator, Authy ou n'importe quelle application compatible TOTP.","setupBtn":"Configurer l'application d'authentification (TOTP)","scanQR":"Scannez ce code QR avec votre application d'authentification :","orEnterManually":"Ou saisissez la clé manuellement :","enterCode":"Saisissez le code de votre application pour confirmer :","enterCodeHint":"Saisissez le code à 6 chiffres pour vérifier la bonne configuration de la clé.","activate":"Activer TOTP","skipPassword":"Connexion sans mot de passe – Demander uniquement le code TOTP lors de la connexion (ignorer la saisie du mot de passe)","disable":"Désactiver l'application d'authentification (TOTP)","disableTitle":"Désactiver l'application d'authentification (TOTP)","disableWarning":"Après avoir désactivé TOTP, si aucune clé d'accès (Passkey) n'est configurée, votre compte ne sera protégé que par un mot de passe.","confirmDisable":"Désactiver TOTP","recoveryKeysTitle":"Veuillez enregistrer vos clés de récupération","recoveryKeysWarning":"Veuillez conserver votre clé de récupération dans un endroit sûr (ex. un gestionnaire de mots de passe). Chaque clé ne peut être utilisée qu'une seule fois.","copyKeys":"Copier toutes les clés","copied":"Copié !","done":"Terminé, j'ai enregistré les clés","activeDesc":"L'application d'authentification (TOTP) est active et génère des codes à 6 chiffres.","invalidCode":"Veuillez saisir un code à 6 chiffres"},"activity":{"title":"Historique d'activité du compte","action":"Événement","time":"Heure","ip":"Adresse IP","session":"Session","empty":"Aucune activité enregistrée.","loadMore":"Charger plus","signup":"Inscription","loginSuccess":"Connexion réussie","loginFail":"Échec de connexion","logout":"Déconnexion","pwChangeSuccess":"Mot de passe modifié","pwChangeFail":"Échec de la modification du mot de passe","totpVerifySuccess":"Vérification TOTP réussie","totpVerifyFail":"Échec de la vérification TOTP","totpSetup":"Authentificateur TOTP configuré","totpRemoved":"Authentificateur TOTP désactivé","recoveryKeyUsed":"Clé de récupération utilisée","sessionRevoked":"Session révoquée","reasons":{"user_active":"Déconnexion active","user_revoke":"Session révoquée","expired":"Session expirée","geolocation_mismatch":"Écart géographique (Accès restreint)","geolocation_missing":"Informations géographiques manquantes","token_reuse":"Réutilisation de tokens (Alerte de sécurité)"},"passkeyRegistered":"Clé d'accès enregistrée","passkeyDeleted":"Clé d'accès supprimée","passkeyVerifySuccess":"Clé d'accès vérifiée","passkeyVerifyFail":"Échec de vérification de clé d'accès","recoveryKeyRotated":"Clé de récupération renouvelée","device":"Appareil"},"sessions":{"title":"Sessions actives","session":"Session","device":"Appareil","ip":"Adresse IP","loginTime":"Heure de connexion","expires":"Expire le","action":"Action","current":"Actuelle","revoke":"Révoquer","revokeFailed":"Échec de la révocation de la session.","empty":"Aucune session active trouvée.","unknownDevice":"Appareil inconnu","revokeOthers":"Révoquer les autres sessions","confirmRevokeOthers":"Révoquer les autres sessions","revokeOthersConfirmText":"Voulez-vous vraiment révoquer toutes les autres sessions actives ? Tous les autres appareils connectés seront déconnectés immédiatement."},"passkey":{"title":"Clés d'accès (Passkeys)","addBtn":"Ajouter une clé d'accès","desc":"Utilisez la biométrie (Touch ID, Face ID, Windows Hello) ou des clés de sécurité (YubiKey) pour une authentification multifacteur rapide et résistante au phishing.","empty":"Aucune clé d'accès ajoutée pour le moment.","addTitle":"Ajouter une clé d'accès","nameLabel":"Nom de la clé d'accès","namePlaceholder":"ex. my_passkey","promptNotice":"Après avoir cliqué sur Continuer, votre navigateur vous invitera à terminer l'enregistrement biométrique ou de la clé de sécurité.","continue":"Continuer","renameTitle":"Renommer la clé d'accès","deleteTitle":"Supprimer la clé d'accès","deleteConfirm":"Êtes-vous sûr de vouloir supprimer la clé d'accès \\"{{name}}\\" ? Vous ne pourrez plus l'utiliser pour l'authentification multifacteur.","defaultName":"Clé d'accès","notSupported":"Votre navigateur ou environnement actuel ne prend pas en charge les clés d'accès (WebAuthn).","regFailed":"Échec de l'enregistrement de la clé d'accès","count":"{{count}} configuré(s)","none":"Non configuré","created":"Créé le","lastUsed":"Dernière utilisation","neverUsed":"Jamais utilisé","updated":"Clé d'accès mise à jour avec succès","registered":"Clé d'accès enregistrée avec succès","deleted":"Clé d'accès supprimée","appNameLabel":"Domaine","appNameHelper":"La clé d'accès sera liée à ce domaine","formatTip":"Note sur le nom de clé d'accès : 1 à 30 caractères, seuls les lettres, chiffres, tirets et traits de soulignement sont autorisés","verifyPrompt":"Authentifiez-vous à l'aide des capteurs biométriques ou d'une clé de sécurité.","changePwNotice":"Une invite d'authentification Passkey apparaîtra lors de l'envoi.","submitNotice":"Une invite d'authentification Passkey apparaîtra lors de l'envoi."},"mfaNone":"Aucun","resetUserPassword":"Réinitialiser le mot de passe","resetPasswordTitle":"Réinitialiser le mot de passe de l'utilisateur","resetPasswordWarning":"Après la réinitialisation, toutes les sessions actives de l'utilisateur seront immédiatement révoquées.","resetPasswordSuccess":"Mot de passe réinitialisé avec succès. Les sessions actives ont été révoquées.","confirmReset":"Confirmer la réinitialisation","mfa":{"title":"Authentification multifacteur (MFA)","enabled":"Configuré","notConfigured":"Non configuré","desc":"Les clés d'accès (Passkeys) et les applications d'authentification (TOTP) servent de méthodes MFA. Configurer au moins l'un d'eux protège votre compte.","passwordlessTitle":"Connexion sans mot de passe","passwordlessDesc":"Une fois activée, la saisie du mot de passe est ignorée et votre identité est vérifiée directement via Passkey ou TOTP.","unconfiguredHint":"Aucune méthode MFA n'est encore configurée. Configurez un Passkey ou une application d'authentification ci-dessous.","password":"Mot de passe","passkey":"Passkey","totp":"TOTP"},"recoveryKey":{"title":"Clé de récupération d'urgence","desc":"Une clé de récupération d'urgence vous permet de récupérer l'accès ou de réinitialiser votre mot de passe si vous perdez tous vos Passkeys ou applications d'authentification. Pour garantir une sécurité zéro connaissance, la clé est stockée sous forme de hachage cryptographique unidirectionnel et ne peut pas être affichée en texte clair. Elle est automatiquement renouvelée dès son utilisation.","configured":"Configurée","notConfigured":"Non configurée","rotateBtn":"Renouveler la clé de récupération","yourKey":"Votre clé de récupération à 30 chiffres","securityTip":"Gardez cette clé secrète. Toute personne y ayant accès peut accéder à votre compte.","rotateConfirm":"Le renouvellement invalidera immédiatement la clé actuelle. La vérification n'est autorisée que via Passkey existante ou clé d'origine. Continuer ?","confirmRotateBtn":"Procéder au renouvellement","rotateVerifyTitle":"Vérifier l'identité pour renouveler la clé","rotateSuccess":"Clé de récupération renouvelée avec succès ! Veuillez la conserver en lieu sûr immédiatement.","oneWayHash":"Hachage cryptographique unidirectionnel","oneWayTooltip":"Protégée par hachage unidirectionnel SHA-256. Le serveur ne stocke aucun texte clair et ne peut pas le déchiffrer.","newKeyGenerated":"Nouvelle clé de récupération à 30 chiffres générée (Sauvegardez maintenant)","oneWayWarning":"Attention : Cette clé n'est affichée QU'UNE SEULE FOIS. Le serveur ne conserve qu'un hachage irréversible, veuillez la copier et la conserver hors ligne en toute sécurité.","autoRotatedTitle":"Clé de récupération renouvelée automatiquement","autoRotatedNotice":"Conformément à la règle d'utilisation unique, votre ancienne clé a été invalidée et une nouvelle clé à 30 chiffres a été générée. Copiez-la et conservez-la hors ligne !","savedAndClose":"Je l'ai sauvegardée et continuer","savedAndContinue":"Je l'ai sauvegardée et accéder au tableau de bord","descOneWay":"La clé de récupération d'urgence est le seul moyen de récupérer l'accès au compte et de déchiffrer les données E2EE en cas de perte de tous les Passkeys ou authentificateurs. Pour garantir la sécurité zéro-connaissance, elle est stockée sous forme de hachage irréversible et ne peut pas être affichée en texte clair sur le Web. Elle ne peut être renouvelée qu'à l'aide de la clé d'origine ou d'un Passkey existant. Elle est automatiquement renouvelée après utilisation.","keyRequired":"La clé de récupération est requise","verifyBtn":"Clé de récupération","verifyPromptLabel":"Clé de récupération d'origine"},"verifyIdentity":"Vérification de sécurité","verifyIdentityDesc":"Pour protéger votre compte, veuillez vérifier votre identité avant de continuer.","usePasskeyInstead":"Authentifier avec Passkey","changePasswordWithPasskey":"Vérifier avec Passkey et modifier","enableRegistration":"Activer l'inscription des utilisateurs","timezone":"Fuseau horaire","timezoneAuto":"Automatique (par défaut du navigateur)","totpCode":"Code de l'authentificateur"}`),d={item1Title:`DNS Worker de protection`,item1Desc:`Un résolveur DNS basé sur Cloudflare Workers & D1, optimisé pour la vitesse et la sécurité.`,item2Title:`Confidentialité DoH`,item2Desc:`Évite l'interception DNS et protège votre confidentialité via des tunnels chiffrés DNS over HTTPS (RFC 8484).`,item3Title:`Réseau Edge mondial`,item3Desc:`Profite du vaste réseau edge de Cloudflare pour obtenir une résolution ultrarapide et des latences minimales.`,item4Title:`Filtrage granulaire`,item4Desc:`Support complet pour les listes de blocage et d'autorisation, les règles AdGuard et la redirection personnalisée d'enregistrements DNS.`,item5Title:`Statistiques en temps réel`,item5Desc:`Visualisez l'état du réseau via des journaux de requêtes détaillés et un tableau de bord complet.`,item6Title:`UI moderne et mode sombre`,item6Desc:`Un tableau de bord à haute densité pour les développeurs et les particuliers, basé sur Blueprint UI de Palantir.`,item7Title:`Infrastructure cloud-native`,item7Desc:`L'architecture serverless garantit une maintenance nulle et une évolutivité illimitée pour votre DNS privé.`,item8Title:`Gérer plusieurs profils`,item8Desc:`Créez et gérez des profils DNS distincts pour différents appareils ou environnements réseau.`,item9Title:`Plusieurs points d'accès`,item9Desc:`Configurez des points d'accès dédiés pour différents appareils afin d'analyser les journaux et les statistiques séparément.`},f={title:`Guide de Configuration et Déploiement d'DNS Worker`,subtitle:`Votre instance n'est pas encore entièrement configurée. Veuillez suivre les étapes ci-dessous pour activer DNS Worker.`,dbStatus:`Liaison de Base de Données D1 (env.DB)`,jwtStatus:`Clé Secrète JWT (env.JWT_SECRET)`,configured:`Configuré`,missing:`Manquant / Non Configuré`,refresh:`Actualiser & Vérifier`,methodCli:`Déploiement CLI`,methodDash:`Déploiement via le Tableau de Bord Cloudflare`,copy:`Copier`,copied:`Copié !`,stepDbTitle:`1. Lier la Base de Données D1`,stepDbDesc:`Créez une base de données D1 et liez-la à votre worker. Dans votre terminal, exécutez :`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Copiez les détails de la base de données D1 générés et collez-les dans votre wrangler.toml sous [[d1_databases]] :`,stepDbCommand2:`[[d1_databases]]
1
+ const e={account:`Compte`,logout:`Déconnexion`,selectProfile:`Sélectionner un profil`,add:`Ajouter`,newProfileName:`Nouveau nom du profil...`,profileNameFormatTip:`Note sur le nom du profil : 1 à 30 caractères, ne doit pas dupliquer un nom existant`,profileLimitExceeded:`Limite de profils atteinte (max. {{max}})`,profileNameExists:`Ce nom de profil existe déjà`,profileNameFormatError:`Format de nom du profil incorrect`,create:`Créer`,welcome:`Bienvenue`,createProfileToStart:`Créez un profil pour commencer.`,loading:`Chargement...`,errorNetwork:`Erreur réseau`,confirmDelete:`Voulez-vous vraiment supprimer ce profil ?`,confirmLogout:`Voulez-vous vraiment vous déconnecter ?`,notFound:`404 - Page non trouvée`,notFoundDesc:`La page que vous recherchez n'existe pas ou a été déplacée.`,backToHome:`Retour à l'accueil`,apac:`Asie-Pacifique`,mainlandChina:`Chine continentale`,HongKong:`Hong Kong`,Singapore:`Singapour`,Tokyo:`Tokyo`,NorthAmerica:`Amérique du Nord`,nae:`Est de l'Amérique du Nord`,naw:`Ouest de l'Amérique du Nord`,eu:`Europe`,invalidFormat:`Format de fichier incorrect`,import:`Importer`,importSuccess:`Profil importé avec succès`,importError:`Échec de l'importation. Veuillez vérifier le format et réessayer plus tard`,save:`Enregistrer`,saveSuccess:`Paramètres enregistrés`,close:`Fermer`,cancel:`Annuler`,continue:`Continuer`,back:`Retour`,copy:`Copier`,copied:`Copié`,copyKey:`Copier la nouvelle clé de récupération`,confirm:`Confirmer`,delete:`Supprimer`,rename:`Renommer`,disable:`Désactiver`,confirmDisable:`Confirmer la désactivation`,modeServerfull:`Mode Serverfull`,modeCloudflare:`Mode Cloudflare Worker`},t={setup:`Installation`,rules:`Règles`,stats:`Statistiques`,logs:`Journaux`,filter:`Listes de filtrage`,settings:`Paramètres`},n={light:`Clair`,dark:`Sombre`,system:`Système`},r={login:`Se connecter à DNS Worker`,signup:`Créer un compte pour commencer`,welcomeBack:`Bon retour ! Veuillez saisir vos identifiants`,protectInternet:`Protégez votre premier pas sur Internet`,error:`Erreur`,username:`Nom d'utilisateur`,usernamePlaceholder:`Votre nom d'utilisateur`,password:`Mot de passe`,passwordPlaceholder:`Votre mot de passe`,loginBtn:`Connexion`,signupBtn:`S'inscrire`,totpVerification:`Vérification TOTP`,noAccount:`Pas de compte ? Inscrivez-vous maintenant`,haveAccount:`Déjà un compte ? Retour à la connexion`,formatTipUsername:`Note sur le nom d'utilisateur : 5 à 32 caractères, format Unix (doit commencer par une lettre minuscule ou un trait de soulignement, et ne peut contenir que des lettres minuscules, des chiffres, des traits de soulignement et des tirets)`,formatTipPassword:`Note sur le mot de passe : 12-100 caractères.`,authFailed:`Échec de l'authentification. Veuillez vérifier votre nom d'utilisateur ou mot de passe`,networkError:`Erreur réseau. Veuillez réessayer plus tard`,turnstileRequired:`Veuillez valider le captcha`,turnstileError:`Échec du chargement du captcha. Veuillez vérifier la clé du site ou la configuration du domaine`,verifying:`Vérification de sécurité en cours...`,passwordLeaked:`Ce mot de passe a été compromis. Pour des raisons de sécurité, veuillez utiliser un mot de passe aléatoire ou fort.`,usernameExists:`Ce nom d'utilisateur est déjà enregistré. Veuillez en essayer un autre.`,skip:`Passer`,showPassword:`Afficher le mot de passe`,hidePassword:`Masquer le mot de passe`,geolocationRequired:`Échec de la géolocalisation. Veuillez essayer de vous reconnecter.`,unauthorizedDefault:`Votre session a expiré. Veuillez vous reconnecter.`,unauthorizedGeo:`Changement de position géographique détecté (limite de distance dépassée). Session fermée.`,unauthorizedExpired:`Votre session a expiré. Veuillez vous reconnecter.`,unauthorizedReuse:`Alerte de sécurité : connexion doublée détectée. Session fermée.`,unauthorizedRevoked:`Votre session a été révoquée ou supprimée. Veuillez vous reconnecter.`,sessionLockTitle:`Verrouillage de session inactive`,sessionLockDesc:`Verrouillez l'interface avec un code PIN à 4 chiffres lorsque l'application est inactive pour protéger les sessions actives contre les accès physiques non autorisés.`,enableSessionLock:`Activer le verrouillage de session`,inactivityTimeout:`Délai d'inactivité`,timeout1m:`1 minute`,timeout2m:`2 minutes`,timeout5m:`5 minutes`,timeout15m:`15 minutes`,timeout30m:`30 minutes`,timeout60m:`60 minutes`,changePin:`Modifier le code PIN`,disablePin:`Désactiver le verrouillage de session`,configurePin:`Configurer le code PIN`,newPin:`Nouveau code PIN à 4 chiffres`,pinHelper:`Chiffres uniquement, ex: 1234`,confirmPin:`Confirmer le nouveau code PIN`,verifyIdentity:`Vérifier l'identité`,usePassword:`Utiliser le mot de passe`,use2fa:`Utiliser le code TOTP`,totpCode:`Code TOTP`,currentPassword:`Mot de passe actuel`,disablePinWarning:`La désactivation du code PIN désactivera complètement la fonction de verrouillage de session inactive.`,pinFormatTip:`Le code PIN doit comporter exactement 4 chiffres`,pinMatchTip:`Les codes PIN ne correspondent pas`,passwordRequired:`Mot de passe requis pour la vérification`,sessionLocked:`Session verrouillée pour inactivité`,sessionExpired:`Trop de tentatives échouées. Session terminée.`,pinIncorrect:`Code PIN incorrect`,attemptsRemaining:`{{count}} tentatives restantes`,logoutAndReturn:`Déconnecter la session`,lockNow:`Verrouiller maintenant`,cfErrorWithDetails:`Erreur Cloudflare Edge (Erreur {{code}} : {{desc}}). Le service est temporairement indisponible, veuillez réessayer plus tard. {{rayId}}`,cfErrorCodeOnly:`Erreur Cloudflare Edge (Erreur {{code}}). Le service est temporairement indisponible. {{rayId}}`,cfErrorGeneric:`Erreur Cloudflare Edge, le service est temporairement indisponible. Veuillez réessayer plus tard. {{rayId}}`,htmlErrorGeneric:`Le serveur a renvoyé une réponse inattendue (HTTP {{status}}). Veuillez réessayer plus tard.`,tooManyAttempts:`Trop de requêtes ou de tentatives. Veuillez réessayer plus tard.`,dbQuotaExceeded:`Le quota quotidien de lecture de la base de données a été dépassé. Veuillez attendre la réinitialisation quotidienne.`,noUsersRegistered:`Aucun compte enregistré. Veuillez vous inscrire en tant qu'administrateur.`,registerAdminTitle:`Enregistrer un compte administrateur`,registerAdminDesc:`Aucun compte dans le système. Le premier utilisateur deviendra administrateur système.`,goToRegisterAdmin:`Créer l'admin`,dbNotInitialized:`Base de données non initialisée ou tables manquantes. Veuillez exécuter npm run db:migrate:prod.`,verifyWithPasskey:`Vérifier avec une clé d'accès (Passkey)`,orUseTotp:`Ou utiliser le code de l'authentificateur`,passwordRequiredFirst:`Veuillez d'abord saisir votre mot de passe`,passkeyVerification:`Vérification par clé d'accès`,passkeyPromptDesc:`Vérifiez à l'aide de vos données biométriques enregistrées ou de votre clé de sécurité`,forgotPassword:`Mot de passe oublié ?`,forgotPasswordTitle:`Réinitialiser le mot de passe`,forgotPasswordDesc:`Récupérez votre compte en toute sécurité grâce à l'authentification multifacteur (Passkey ou TOTP).`,noMfaContactAdmin:`Ce compte n'a configuré aucune authentification multifacteur (Passkey ou TOTP). Veuillez contacter un administrateur.`,chooseMfaForReset:`Choisissez une méthode pour vérifier votre identité :`,authViaPasskey:`Vérifier avec Passkey`,authViaPasskeyDesc:`Vérification en un clic par biométrie ou clé de sécurité matérielle`,authViaTotp:`Vérifier avec l'application d'authentification (TOTP)`,authViaTotpDesc:`Saisissez le code à 6 chiffres généré par votre application`,authViaRecoveryKey:`Utiliser une clé de récupération d'urgence`,authViaRecoveryKeyDesc:`Saisissez une clé de récupération à 10 caractères`,verifyAndProceed:`Vérifier et continuer`,setNewPassword:`Définir un nouveau mot de passe`,setNewPasswordDesc:`Identité vérifiée. Veuillez définir un nouveau mot de passe pour votre compte.`,newPassword:`Nouveau mot de passe`,confirmNewPassword:`Confirmer le nouveau mot de passe`,passwordMismatch:`Les mots de passe ne correspondent pas`,saveAndReset:`Enregistrer et réinitialiser`,resetSuccessTitle:`Mot de passe réinitialisé avec succès`,resetSuccessDesc:`Votre mot de passe a été mis à jour et toutes vos sessions actives ont été fermées. Veuillez vous reconnecter.`,goToLogin:`Aller à la connexion`,mfaSetupTitle:`Renforcer la sécurité du compte`,mfaSetupDesc:`La configuration de l'authentification multifacteur (MFA) protège votre compte et active la connexion sans mot de passe.`,mfaRecommended:`Recommandé`,passkeySignupDesc:`Utilisez Touch ID, Face ID ou une clé de sécurité. Rapide et résistant au phishing.`,bindPasskeyNow:`Enregistrer une clé d'accès maintenant`,mfaUniversal:`Universel`,totpSignupDesc:`Utilisez Google Authenticator, 1Password ou toute application TOTP standard.`,setupTotpBtn:`Configurer l'application d'authentification`,skipMfaSetup:`Ignorer pour l'instant`,backToMfaOptions:`Retour aux options`,otherOptions:`Autres options`,next:`Suivant`,mfaVerification:`Authentification multifacteur`,totpPrompt:`Entrez le code dynamique à 6 chiffres de votre application d'authentification`,recoveryPrompt:`Entrez votre clé de récupération à 30 chiffres (5 groupes de 6 chiffres)`,recoveryChecksumError:`Erreur de somme de contrôle : ce groupe n'est pas divisible par 11`,recoveryChecksumErrorDesc:`Erreur de somme de contrôle dans le groupe {{groups}}, veuillez vérifier et réessayer`,backToPasskey:`Retour à la vérification par Passkey`,recoveryKeyRequired:`Veuillez entrer votre clé de récupération`,totpFormatError:`Veuillez entrer un code valide à 6 chiffres`,registrationDisabledTitle:`Inscription désactivée`,registrationDisabledDesc:`L'inscription de nouveaux utilisateurs est actuellement fermée. Veuillez contacter un administrateur pour obtenir un compte.`,backToLogin:`Retour à la connexion`,jwtSecretPreset:`JWT_SECRET par défaut détecté. Veuillez modifier le JWT_SECRET prédéfini dans les variables d'environnement avant le déploiement.`,jwtSecretMissing:`JWT_SECRET manquant. Veuillez configurer une clé sécurisée dans les variables d'environnement avant le déploiement.`,jwtSecretInvalid:`Format JWT_SECRET non valide, veuillez vérifier la configuration.`,keepLoggedIn:`Rester connecté pendant {{days}} jours`,orUseOtherMfa:`ou utiliser une autre méthode`,totpUseRecovery:`Utiliser la clé de récupération`,totpUseApp:`Utiliser l'application d'authentification`,mfaMethodTotp:`Application d'authentification (TOTP)`,invalidTotp:`Code de vérification TOTP invalide.`},i={title:`Guide d'installation`,subtitle:`Configurez vos appareils pour gérer votre sécurité Internet avec DNS Worker.`,regionOptimization:`Optimisation de la région de connexion (Windows)`,otherRegion:`Autres régions`,copied:`Copié dans le presse-papiers`,verifyConnection:`Vérifier la connexion`,verifying:`Vérification...`,connected:`Connecté`,notConnected:`Non connecté`,profileMatch:`Le filtrage est actif pour ce profil.`,profileMismatch:`Vous utilisez Obex, mais l'ID du profil ne correspond pas.`,verifyHint:`Terminez la configuration ci-dessous et cliquez sur le bouton pour vérifier.`,refreshStatus:`Actualiser l'état`,egressIp:`Adresse IP de sortie`,currentLocation:`Localisation actuelle`,edgeServer:`Serveur Edge`,serverLocation:`Emplacement du serveur`,dohUrlTitle:`URL DoH du profil actuel`,accessPointTitle:`URL d'accès DoH`,defaultAccessPointName:`appareil-1`,moreAccessPoints:`Plus de points d'accès ↗`,accessPointName:`Nom du point d'accès`,accessPointToken:`Clé d'accès`,addAccessPoint:`Ajouter un point d'accès`,renameAccessPoint:`Renommer`,rotateToken:`Renouveler la clé`,rotateTokenConfirmDesc:`Le renouvellement de la clé déconnectera immédiatement tous les appareils utilisant l'ancienne clé. Voulez-vous continuer ?`,deleteAccessPoint:`Supprimer`,deleteAccessPointConfirm:`Voulez-vous vraiment supprimer ce point d'accès ?`,manageAccessPoints:`Gérer les points d'accès`,searchAccessPoints:`Rechercher des points d'accès...`,accessPointNameExists:`Ce nom de point d'accès existe déjà`,accessPointCreated:`Point d'accès créé avec succès`,accessPointRenamed:`Point d'accès renommé avec succès`,accessPointDeleted:`Point d'accès supprimé avec succès`,accessPointNameFormatTip:`Note sur le point d'accès : 1 à 30 caractères. Seuls les lettres, chiffres, traits de soulignement et tirets sont autorisés`,accessPointLimitExceeded:`Limite de points d'accès atteinte (max. {{max}})`,tokenRotated:`Clé d'accès renouvelée avec succès`,whatIsDoh:`Qu'est-ce que DoH ?`,dohDesc:`Le DNS over HTTPS (DoH) est un protocole permettant d'effectuer des requêtes DNS via une connexion HTTPS chiffrée.`,dohBenefit1:`Empêche l'interception et la manipulation du trafic DNS par des tiers`,dohBenefit2:`Améliore la sécurité lors de la résolution DNS et de la navigation web`,learnMore:`En savoir plus`,copyUrl:`Copier l'URL`,browsers:`Navigateurs`,browserTitle:`Configuration du navigateur (Chrome/Edge)`,browserSteps:`Paramètres > Confidentialité et sécurité > Sécurité > Utiliser un DNS sécurisé > Personnalisé > Coller l'URL.`,browserTips:`Ou copiez cette adresse dans votre barre d'adresse :`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Les appareils Apple prennent en charge la configuration rapide via des profils de configuration.`,appleWarning:`Les profils ne peuvent pas être installés en "Mode Isolement (Lockdown Mode)". Veuillez vérifier que ce mode est désactivé.`,downloadConfig:`Télécharger le profil de configuration`,appleInstallHint:`Après le téléchargement, accédez à Paramètres > Profil téléchargé pour l'installer`,windows:`MS Windows`,windowsTitle:`Configuration Windows 11`,windowsStep0:`Paramètres > Réseau et Internet`,windowsStep1:`Propriétés > Attribution du serveur DNS > Modifier > Manuel.`,windowsStep2:`Sélectionnez et saisissez les IP DNS :`,windowsStep3:`Activez DoH (modèle manuel) et collez l'URL.`,windowsStep4:`Désactivez le repli vers les connexions non chiffrées.`,android:`Android`,androidTitle:`Android / DNS privé (DoT & DoQ)`,androidDesc:`Prend en charge le 'DNS privé' natif du système (DoT) ou des applications tierces pour DoH.`,androidDotTitle:`DNS privé (DoT / DoQ)`,androidDotDesc:`Paramètres > Réseau et Internet > DNS privé > Nom d'hôte du fournisseur DNS privé (prend également en charge les clients DoQ) :`,androidWildcardHint:`(Certificat générique, redirige vers ce profil)`,androidSingleDomainHint:`(Certificat domaine unique, redirige vers le profil par défaut)`,androidIpNotice:`Accès via IP ou adresse locale. Le DNS privé d'Android n'accepte que les noms de domaine ; veuillez configurer SERVERFULL_DOT_DOMAIN dans .env (ex. dns.example.com).`,androidWarning:`Remarque : Le 'DNS privé' natif d'Android utilise le protocole DoT. En cas de déploiement sur Cloudflare Workers, utilisez des applications comme Intra pour DoH. En mode Serverfull avec TLS configuré, vous pouvez directement utiliser le nom d'hôte DoT ci-dessus.`,dynamicFromDomain:`Dynamique (depuis "{{domain}}")`,dynamicFromDomainV6:`Dynamique IPv6 (depuis "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (proxy DoH Cloudflared)`,linuxDesc:`Exécutez un proxy DNS local léger pour envoyer les requêtes DNS chiffrées par DoH à Obex.`,linuxStep1:`Exécutez le script suivant pour installer cloudflared et créer un service systemd (écoute sur 127.0.0.1:53).`,linuxStep2:`Modifiez le DNS du système pour 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Utilisez ce résolveur pour tous les appareils de votre réseau en le définissant comme serveur DoH du routeur.`,routerosStep1:`À exécuter dans le terminal RouterOS (RouterOS 7) :`,routerosNote:`Les requêtes transmises par le routeur apparaissent dans les journaux comme provenant du routeur, et non des appareils individuels. Configurez les appareils directement si vous avez besoin de journaux par appareil.`,routerosDocs:`Documentation DNS de MikroTik`,accessPointsCardTitle:`Points d'accès`,currentAccessPoint:`Point d'accès actuel`,selectAccessPointToConfigure:`Sélectionner le point d'accès à configurer`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`Prise en charge native de la RFC 9250 (DNS over QUIC) et de la RFC 9460 (HTTP/3 & Encrypted Client Hello), avec établissement 0-RTT et protection contre l'inspection du SNI.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`Compatible avec les clients modernes tels qu'AdGuard, Clash Meta (Mihomo), Sing-box, etc. :`,doqWildcardHint:`(Certificat générique, redirige vers ce profil)`,doqSingleDomainHint:`(Certificat de domaine unique, redirige vers le profil par défaut)`,doqIpNotice:`DoQ requiert un certificat TLS et un nom de domaine valide. Veuillez définir SERVERFULL_DOT_DOMAIN dans .env puis actualiser.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`Les navigateurs modernes (Chrome/Firefox/Safari) négocient automatiquement HTTP/3 et le chiffrement ECH via les enregistrements Alt-Svc et HTTPS RFC 9460 :`,ddrHint:`Intégré avec la section 8 de la RFC 9460 DDR (Discovery of Designated Resolvers), permettant aux clients de négocier et de passer automatiquement à DoQ/DoT et ECH via des requêtes _dns.`,e2eeDesc:`Chiffre les journaux DNS à la périphérie avec votre clé hybride post-quantique (P256-MLKEM768). Le cloud ne peut pas les lire; le déchiffrement se fait localement via votre Passkey.`,detecting:`Détection en cours...`,dotUnavailableCfTitle:`DoT / DoQ indisponible en mode Cloudflare Worker`,dotUnavailableCfDesc:`Actuellement exécuté en mode Cloudflare Worker (Serverless). En raison des limites du runtime edge, l'écoute sur les ports TCP/UDP 853 n'est pas prise en charge. Pour utiliser DoT ou DoQ, déployez en mode Serverfull ; utilisez DoH pour le moment.`},a={title:`Règles personnalisées`,subtitle:`Contrôlez manuellement le comportement de résolution pour des domaines spécifiques (bloquer, autoriser ou rediriger).`,action:`Action`,typeBlock:`Bloquer (BLOCK)`,typeAllow:`Autoriser (ALLOW)`,typeRedirect:`Rediriger (REDIRECT)`,pattern:`Modèle de domaine (Pattern)`,patternPlaceholder:`example.com ou *.test.com`,addRule:`Ajouter la règle`,redirectSettings:`Paramètres de redirection`,aRecord:`Enregistrement A (IPv4)`,aaaaRecord:`Enregistrement AAAA (IPv6)`,cnameRecord:`Enregistrement CNAME`,txtRecord:`Enregistrement TXT`,optional:`(optionnel)`,ipv4Placeholder:`ex. 1.2.3.4`,ipv6Placeholder:`ex. 2001:db8::1`,cnamePlaceholder:`ex. cible.com`,txtPlaceholder:`Saisissez le contenu du texte...`,saveRedirectRule:`Enregistrer et ajouter la règle de redirection`,noRulesTitle:`Aucune règle personnalisée`,noRulesDesc:`Vous n'avez pas encore ajouté de règle manuelle.`,tableAction:`Action`,tablePattern:`Modèle`,tableDetails:`Détails de résolution`,tableOps:`Opérations`,labelBlock:`Bloquer`,labelAllow:`Autoriser`,labelRedirect:`Rediriger`,detailBlock:`Résoudre vers : `,detailAllow:`Transmettre au serveur amont`,patternEmpty:`Le modèle de domaine ne peut pas être vide`,duplicatePattern:`Une règle existe déjà pour ce domaine`,addSuccess:`Règle ajoutée avec succès`,addFailed:`Échec de l'ajout de la règle`,updateSuccess:`Règle mise à jour avec succès`,updateFailed:`Échec de la mise à jour de la règle`,tableCreatedAt:`Date d'ajout`,clickToSort:`Cliquer pour trier`,editRule:`Modifier la règle`,cancel:`Annuler`,saveChanges:`Enregistrer les modifications`,delete:`Supprimer`,close:`Fermer`},o={customRange:`Période personnalisée`,startTime:`Heure de début`,endTime:`Heure de fin`,apply:`Appliquer`,custom:`Personnalisé`,totalQueries:`Requêtes totales`,blocked:`Bloquées`,redirected:`Redirigées`,blockRate:`Taux de blocage`,activeDevices:`Appareils actifs`,activeIPs:`Adresses IP actives`,queryTrend:`Évolution des requêtes`,noRecords:`Aucun enregistrement pour cette période`,topAllowed:`Domaines les plus autorisés (Allowed)`,topBlocked:`Domaines les plus bloqués (Blocked)`,noData:`Aucune donnée`,clientActivity:`Activité des clients`,ipAddress:`Adresse IP`,location:`Localisation`,queries:`Requêtes`,destinationDistribution:`Distribution des destinations de trafic`,requests:`Requêtes`,topIsps:`Principaux FAI`,pressToShowMore:`Cliquer pour afficher plus`,maximize:`Agrandir`,minimize:`Réduire`,loading:`Chargement...`},s={title:`Journaux de requêtes`,subtitle:`Consultez les journaux de résolution DNS et les enregistrements de blocage pour ce profil.`,realtime:`Temps réel`,allStatus:`Tous les états`,onlyPass:`Autorisées`,onlyBlock:`Bloquées`,onlyRedirect:`Redirigées`,searchPlaceholder:`Rechercher des domaines...`,noResults:`Aucun résultat trouvé`,noRecords:`Aucun enregistrement`,noResultsDesc:`Aucun enregistrement de domaine ne correspond à "{{query}}".`,noRecordsDesc:`Aucune requête DNS reçue pendant la période sélectionnée.`,tableTime:`Heure`,tableDomain:`Domaine`,tableAnswer:`Résultat`,tableSource:`Source`,tableType:`Type`,tableStatus:`État`,tableReason:`Raison`,loadedAll:`Tous les {{count}} enregistrements ont été chargés`,realtimeLoadMoreTip:`Désactivez le mode "Temps réel" pour en charger plus`,filterAccessPoint:`Point d'accès`,allAccessPoint:`Tous les points d'accès`,allCountry:`Tous les pays`,filterCountry:`Pays de destination`,allIsp:`Tous les FAI`,filterIsp:`FAI`,timeRange:`Période`,clearFilters:`Effacer les filtres`,details:`Détails de la requête`,detailAccessPoint:`Point d'accès`,basicInfo:`Informations de base`,detailDomain:`Domaine`,detailType:`Type`,detailTime:`Heure`,detailLatency:`Latence`,detailProfile:`Profil utilisé`,detailStatus:`État`,detailUpstream:`Serveur amont`,detailReason:`Raison`,detailNoReason:`Aucune (Autorisé)`,detailECS:`ECS`,resolutionResult:`Résultat de résolution`,noResult:`Aucun résultat`,networkDetails:`Détails réseau`,clientSource:`Client (Source)`,destination:`Destination`,quickActions:`Actions rapides`,actionAllow:`Autoriser`,actionBlock:`Bloquer`,actionRedirect:`Rediriger`,statusPass:`Autorisé`,statusBlock:`Bloqué`,statusRedirect:`Redirigé`,export:`Exporter les journaux`,rewritten:`Réécrit`,logDetails:`Détails du journal`,searchCountry:`Rechercher un pays...`,noMatchingCountries:`Aucun pays correspondant trouvé`,searchIsp:`Rechercher un FAI...`,noMatchingIsps:`Aucun FAI correspondant trouvé`,loadingIsps:`Chargement des FAI...`,loggingDisabledTitle:`Journalisation désactivée`,loggingDisabledDesc:`La conservation des journaux pour ce profil est définie sur 'Désactivé'. Aucun journal n'est enregistré. Pour afficher les journaux, activez la rétention dans les Paramètres.`,detailIsClientEncrypted:`Chiffré côté client`,encryptedLocked:`Oui (Verrouillé)`,encryptedDecrypted:`Oui (Déchiffré localement)`,encryptedYes:`Oui`,notEncrypted:`Non`,encryptedRecord:`[Enregistrement chiffré]`,exportSuccess:`Journaux exportés avec succès`,exportError:`Échec de l'exportation des journaux`},c={title:`Listes de blocage externes`,subtitle:`Abonnez-vous à des listes de blocage de domaines gérées par des tiers (comme AdGuard, etc.).`,formatDisclaimer:`Ce système ne prend en charge que les formats de liste AdGuard basiques et les listes de domaines simples. Seules les règles de blocage de base (ex. ||example.com^) sont prises en compte ; les exceptions "@@", les règles de réécriture "$" et les jokers "*" sont ignorés. Les sous-domaines sont associés automatiquement.`,syncAll:`Synchroniser toutes les listes`,urlPlaceholder:`Saisir l'URL de la liste...`,addSubscription:`Ajouter un abonnement`,supportedFormats:`Formats de listes pris en charge :`,formatAdGuard:`Compatible avec les règles de filtrage ||domain.com^.`,formatHosts:`Compatible avec les fichiers hosts standard (ex. 0.0.0.0 domain.com).`,noListsTitle:`Aucune liste ajoutée`,noListsDesc:`Vous n'êtes pas encore abonné à une liste de blocage externe.`,tableUrl:`URL de la liste`,tableLastSync:`Dernière synchro`,tableStatus:`État`,tableOps:`Opérations`,neverSynced:`Jamais`,enabled:`Actif`,disabled:`Échec de synchro`,statusNormal:`Normal`,statusDisabled:`Désactivée`,statusOutdated:`Obsolète`,statusMissing:`Manquant`,presetOisdBig:`OISD Big (Blocage de publicités et malwares)`,presetOisdNsfw:`OISD NSFW (Blocage de contenus pornographiques/adultes)`,presetAdGuard:`AdGuard AdServers (Serveurs publicitaires)`,presetStevenBlack:`StevenBlack Hosts (Bloqueur tout-en-un)`,syncTaskStarted:`Tâche de synchronisation démarrée`,syncCheckComplete:`Vérification de synchronisation terminée`,syncTaskFailed:`Échec de la synchronisation`,syncing:`Synchronisation...`,syncSuccess:`Synchronisation réussie`,syncError:`Échec de la synchronisation`,syncErrorDesc:`Impossible de télécharger ou d'analyser la liste de blocage. Veuillez vérifier le lien et son accessibilité.`,deleteConfirm:`Confirmer la suppression de l'abonnement ?`,deleteSuccess:`Liste supprimée avec succès`,deleteError:`Échec de la suppression de la liste`,addSuccess:`Liste ajoutée avec succès`,addError:`Échec de l'ajout de la liste`,listEnabled:`Liste active`,listEnabledHint:`Désactivez pour arrêter le filtrage avec cette liste sans la supprimer. Son abonnement et son historique de synchronisation sont conservés.`,listEnabledToast:`Liste activée - reconstruction du filtre`,listDisabledToast:`Liste désactivée - reconstruction du filtre`,checkDomain:`Vérifier un domaine`,checkDomainHint:`Les listes sont stockées sous forme de filtres compacts, leurs entrées ne peuvent donc pas être parcourues. Vous pouvez tester instantanément n'importe quel domaine par rapport à cette liste.`,check:`Vérifier`,checkBlocked:`Bloqué par cette liste`,checkNotBlocked:`Non bloqué par cette liste`,checkViaParent:`(correspond à un domaine parent)`,checkNotSynced:`Cette liste n'a pas encore terminé sa synchronisation, il n'y a donc rien à vérifier.`,checkListDisabled:`Cette liste est actuellement désactivée, elle ne filtre donc rien pour le moment.`,checkProbabilisticRate:`Les filtres sont probabilistes : environ 1 correspondance sur {{odds}} est un faux positif. Ajouter une exception couvre aussi tous ses sous-domaines.`,checkProbabilistic:`Les filtres sont probabilistes, une petite part des correspondances sont donc des faux positifs. Ajouter une exception couvre aussi tous ses sous-domaines.`,checkAllowAction:`Autoriser quand même`,checkAllowed:`Exception ajoutée - ce domaine se résout désormais`,allowRuleAdded:`Exception ajoutée pour {{domain}}`,listDetails:`Détails de la liste`},l={title:`Paramètres du profil`,subtitle:`Gériez votre stratégie de résolution DNS et vos options avancées.`,saveChanges:`Enregistrer toutes les modifications`,saveSuccess:`Paramètres enregistrés avec succès`,saveError:`Échec de l'enregistrement. Veuillez réessayer plus tard`,upstreamTitle:`Serveur amont`,dohUrl:`URL DoH`,dnsIP:`IP DNS`,classicDns:`DNS classique`,httpsOnly:`Prendre en charge HTTPS uniquement`,upstreamDesc:`Toutes les requêtes non bloquées seront envoyées à ce serveur. Prend en charge DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) ou le DNS classique. Le DNS classique est acheminé via TCP.`,defaultPolicyTitle:`Comportement de filtrage par défaut`,onNoMatch:`Si aucune règle ne correspond`,allowAll:`Autoriser toutes les requêtes`,blockAll:`Bloquer toutes les requêtes`,logRetentionTitle:`Rétention des journaux`,retentionDuration:`Durée de rétention`,retentionDesc:`Les journaux sont supprimés automatiquement. `,skipLogOnPass:`Ne pas enregistrer les requêtes autorisées`,skipLogOnPassDesc:`Lorsqu'activé, les requêtes normales autorisées ne sont pas enregistrées. Seules les requêtes bloquées, redirigées ou échouées sont conservées.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`Tous les serveurs DNS en amont ne prennent pas en charge l'ECS. Pour les résolveurs récursifs comme ControlD, l'ECS n'affecte que le routage interne et n'est pas transmis au serveur faisant autorité.`,sendEcs:`Transmettre ECS`,customSubnet:`Sous-réseau personnalisé`,customIpv4:`Sous-réseau IPv4 personnalisé`,customIpv6:`Sous-réseau IPv6 personnalisé`,ipv4Hint:`(ex. 1.2.3.0/24)`,ipv6Hint:`(ex. 2001:db8::/32)`,testToolTitle:`Outil de test de résolution en temps réel`,testDomain:`Domaine de test`,recordType:`Type d'enregistrement`,runTest:`Exécuter le test`,domainPlaceholder:`ex. google.com`,hitRule:`Règle correspondante / Raison`,defaultAllow:`Politique d'autorisation par défaut`,parseLatency:`Temps de résolution`,sourceIp:`Adresse IP source`,answerSection:`Section des réponses (Answer Section)`,noRecordsReturned:`Cette requête n'a renvoyé aucun enregistrement.`,diagnostics:`Informations de diagnostic`,errorDetail:`Détails de l'erreur`,upstreamResponse:`Réponse de l'amont`,presetCloudflareSecurity:`Cloudflare Security (Rapide/Protection malwares et phishing)`,presetCloudflareFamilies:`Cloudflare Families (Rapide/Protection malwares et contenu adulte)`,presetQuad9:`Quad9 (Protection malwares/Pas de journaux/Sans ECS)`,presetQuad9Ecs:`Quad9 ECS (Protection malwares/Pas de journaux/Avec ECS)`,presetControlDFree:`ControlD Free (Protection publicités/trackers/malwares/phishing)`,presetControlDUncensored:`ControlD Uncensored (Contourner la censure)`,presetAdGuard:`AdGuard (Bloqueur publicités et trackers)`,presetAdGuardFamily:`AdGuard Family protection (Publicités/trackers/contenu adulte/recherche sécurisée)`,retention10m:`10 minutes`,retention1h:`1 heure`,retention24h:`24 heures`,retention7d:`7 jours`,retention30d:`30 jours`,retention90d:`90 jours`,retention180d:`180 jours`,retention360d:`360 jours`,retentionMaxSuffix:`(Maximum)`,daysUnit:`jours`,blockModeTitle:`Mode de réponse au blocage`,blockModeDesc:`Contenu renvoyé lorsqu'un domaine est bloqué`,default:`Par défaut`,NXDOMAIN:`NXDOMAIN (Le domaine n'existe pas)`,NODATA:`NODATA (Aucune donnée)`,customIP:`IP personnalisée`,export:`Exporter la configuration`,exportSuccess:`Configuration exportée avec succès`,exportError:`Échec de l'exportation. Veuillez réessayer plus tard`,nameUpdateSuccess:`Nom du profil mis à jour`,saving:`Enregistrement en cours...`,echTitle:`Réécrire ECH`,enableEch:`Activer la réécriture ECH`,echDesc:`Pour les domaines gérés par Cloudflare, réécrit automatiquement les paramètres ECH et le SNI de façade lors des requêtes HTTPS (Type 65) / SVCB (Type 64).`,echFrontingTitle:`SNI externe (ECH Fronting)`,echFrontingDesc:`Nom de domaine visible en clair dans le handshake TLS externe`,echFrontingCustomPlaceholder:`Entrez un domaine de fronting personnalisé, ex. crypto.cloudflare.com`,echPreferred:`Recommandé`,whatIsEch:`Qu'est-ce que l'ECH (Encrypted Client Hello) ?`,echHelpDesc:`L'ECH est une extension de confidentialité essentielle de TLS 1.3 qui chiffre intégralement le nom de domaine réel (Inner SNI), n'exposant qu'un domaine de façade (Outer SNI).`,echHelpBenefit1:`Empêche les FAI et les intermédiaires d'intercepter le sous-domaine exact visité`,echHelpBenefit2:`Associé au DoH, élimine les fuites de SNI en clair`,retentionDisabled:`Désactivé (Besoins de confidentialité)`,retentionDisabledDesc:`La journalisation est désactivée. Le système n'enregistrera aucun journal de requêtes DNS et effacera immédiatement les journaux historiques.`,localRetentionTitle:`Stockage et conservation locale`,localRetentionDuration:`Durée de rétention locale`,localRetentionDesc:`Les journaux sont stockés de manière persistante dans la base SQLite locale de votre navigateur (OPFS), permettant des recherches instantanées et réduisant les coûts de stockage dans le cloud. Les journaux locaux expirés sont automatiquement supprimés.`,localRetention30d:`30 jours`,localRetention90d:`90 jours (Recommandé)`,localRetention180d:`180 jours`,localRetention365d:`365 jours (1 an)`,localRetentionUnlimited:`Illimité (Jusqu'au nettoyage manuel)`,localEngineStorage:`Moteur de stockage`,localEngineOpfs:`OPFS persistant`,localEngineMemory:`Mémoire temporaire (Navigation privée)`,localCachedCount:`Journaux en cache local`,localCachedCountUnit:`{{count}} entrées`,clearLocalData:`Vider les journaux locaux`,clearLocalDataConfirm:`Voulez-vous vraiment effacer tous les journaux locaux pour ce profil ? (Les journaux cloud ne sont pas affectés)`,clearLocalDataSuccess:`Journaux locaux effacés avec succès`,clearLocalDataError:`Échec de l'effacement des journaux locaux`,e2eeTitle:`Chiffrement de bout en bout (E2EE)`,e2eeEnabled:`Activé`,e2eeDisabled:`Désactivé`,e2eeDesc:`Chiffre les journaux DNS à la périphérie avec votre clé hybride post-quantique (P256-MLKEM768). Le cloud ne peut pas les lire; le déchiffrement se fait localement via votre Passkey.`,e2eePasskeyRequired:`E2EE nécessite un Passkey (WebAuthn). Veuillez d'abord ajouter un Passkey dans les paramètres du compte.`,e2eeGoToAccount:`Aller aux paramètres du compte`,e2eeEnableSwitch:`Activer le chiffrement E2EE`,e2eeKeyType:`Algorithme de chiffrement`,e2eeDeviceState:`État de cet appareil`,e2eeUnlocked:`Déverrouillé sur cet appareil`,e2eeUnlockButton:`Vérifier le Passkey pour déverrouiller`,e2eeProtectedPasskeys:`Passkeys autorisés`,e2eeDevicesUnit:`appareil(s)`,e2eeEnableSuccess:`Chiffrement E2EE activé avec succès`,e2eeEnableError:`Échec de l'activation du chiffrement E2EE`,e2eeDisableSuccess:`Chiffrement E2EE désactivé`,e2eeDisableError:`Échec de la désactivation du chiffrement E2EE`,e2eeUnlockSuccess:`Clé déverrouillée avec succès sur cet appareil`,e2eeUnlockError:`Échec de la vérification du Passkey`,e2eeDisableConfirm:`Voulez-vous vraiment désactiver E2EE ? Les futurs journaux seront stockés en clair.`,e2eeUnlockPrompt:`Ce profil utilise le chiffrement E2EE. Vérifiez votre Passkey pour afficher les journaux.`,e2eeUnlockNow:`Déverrouiller les journaux`,e2eeUnlockRecovery:`Déverrouiller avec la clé de récupération`,securityTitle:`Sécurité et accès`,rotateKeyTitle:`URL d'accès`,rotateKeyDesc:`Génère une nouvelle URL d'accès pour ce profil. Tous les appareils utilisant l'ancienne URL perdront immédiatement leur connexion à DNS Worker et devront être reconfigurés avec la nouvelle URL.`,rotateKeyBtn:`Faire pivoter l'URL`,copied:`Copié dans le presse-papiers`,nameUpdateFailed:`Échec de la mise à jour`},u=JSON.parse(`{"title":"Paramètres du compte","subtitle":"Gérez vos identifiants de sécurité et les utilisateurs du système.","e2ee":{"title":"Chiffrement de bout en bout (E2EE)","desc":"Sécurise vos données sensibles via un chiffrement enveloppe hybride post-quantique côté client (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) adossé à des Passkeys matériels. Seuls les appareils autorisés peuvent déchiffrer localement.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"Passer à la post-quantique (PQC)","upgradePqcSuccess":"Mise à niveau réussie vers le chiffrement hybride post-quantique (P256-MLKEM768)","upgradePqcError":"Échec de la mise à niveau vers le chiffrement post-quantique","enabled":"Activé","disabled":"Désactivé","passkeyRequired":"Le chiffrement de bout en bout nécessite au moins une clé d'accès matérielle (WebAuthn). Veuillez ajouter une Passkey dans la section MFA ci-dessus.","scopesTitle":"Catégories de données chiffrées","scopesSubtitle":"Choisissez les catégories de données à chiffrer de bout en bout avec votre clé d'accès.","scopeLogsTitle":"Journaux de requêtes DNS","scopeLogsDesc":"Chiffre les domaines, adresses IP clientes, réponses et latences au niveau de l'Edge avant enregistrement dans D1.","scopeRulesTitle":"Règles personnalisées et redirections","scopeRulesDesc":"Règles d'autorisation/blocage et politiques de redirection chiffrées côté client.","scopeClientsTitle":"Métadonnées de clients et d'appareils","scopeClientsDesc":"Alias d'appareils, identifiants de points d'accès et métadonnées de topologie réseau.","statusActive":"Protégé","statusPlanned":"Prévu","profileSelect":"Configurer le profil","keyType":"Algorithme de chiffrement","deviceState":"État actuel de l'appareil","unlocked":"Déverrouillé sur cet appareil","unlockButton":"Vérifier la Passkey pour déverrouiller","protectedPasskeys":"Clés d'accès Passkey autorisées","devicesUnit":"clé(s)","enableSuccess":"Chiffrement de bout en bout activé avec succès","enableError":"Échec de l'activation du chiffrement de bout en bout","disableSuccess":"Chiffrement de bout en bout désactivé","disableError":"Échec de la désactivation du chiffrement de bout en bout","unlockSuccess":"Clé privée déverrouillée avec succès sur cet appareil","unlockError":"Échec de la vérification de la Passkey","disableConfirm":"Voulez-vous vraiment désactiver le chiffrement de bout en bout pour ce profil ? Les futurs journaux seront stockés en clair. (Les anciens journaux chiffrés nécessitent toujours la clé privée)","noKeypairTitle":"Paire de clés de bout en bout non initialisée","noKeypairDesc":"Le chiffrement de bout en bout nécessite la génération d'une paire de clés post-quantiques (P256-MLKEM768) pour votre compte. La clé privée est protégée par chiffrement enveloppe adossé à votre Passkey ou clé de récupération.","initPasskeyBtn":"Vérifier la Passkey existante pour générer la paire de clés","addPasskeyBtn":"Ajouter une Passkey pour prendre en charge le chiffrement matériel","initRecoveryBtn":"Générer la paire de clés avec la clé de récupération","initWithRecoveryTitle":"Générer la paire de clés avec la clé de récupération","initWithRecoveryDesc":"Saisissez votre clé d'urgence actuelle à 30 chiffres. Le système générera localement une paire de clés post-quantiques (P256-MLKEM768). La clé de récupération sera automatiquement renouvelée dès son utilisation.","keypairGenSuccess":"Paire de clés de bout en bout générée avec succès !","keypairGenError":"Échec de la génération de la paire de clés","unlockRecoveryButton":"Déverrouiller avec la clé de récupération","unlockWithRecoveryTitle":"Déverrouiller avec la clé de récupération","unlockWithRecoveryDesc":"Saisissez votre clé d'urgence à 30 chiffres. Remarque : La clé sera automatiquement renouvelée dès qu'elle aura été vérifiée.","recoveryKeyInputLabel":"Clé de récupération","unlockConfirm":"Déverrouiller la clé privée","recoveryUnlockFailed":"Clé de récupération non valide ou échec du déchiffrement","generateKeypairBtn":"Générer la paire de clés","enableSwitch":"Activer le chiffrement de bout en bout des journaux de requêtes","enableSwitchDesc":"Chiffre les noms de domaine, les adresses IP clientes, les réponses et la latence en périphérie avant stockage dans le cloud.","trustBoundaryTitle":"Avis sur les limites de sécurité et de confiance","trustBoundaryDesc":"Tout le trafic de requêtes DNS transite inévitablement par le serveur d'hébergement (nœuds Cloudflare Workers ou serveur autonome) lors de la résolution, où les requêtes sont traitées en mémoire avant d'être écrites sous forme chiffrée. Cette fonctionnalité protège les données au repos dans la base de données cloud (D1) ; elle ne masque pas le trafic réseau en direct au serveur d'hébergement qui traite la requête.","initFailed":"Échec de l'initialisation du chiffrement de bout en bout","lockDevice":"Verrouiller cet appareil","lockSuccess":"Verrouillé, clé privée effacée du stockage local","enrollPasskeyBtn":"Associer la clé d'accès actuelle","enrollPasskeySuccess":"Clé d'accès associée avec succès au chiffrement de bout en bout !","enrollPasskeyFailed":"Échec de l'association de la clé d'accès","resetKeypairBtn":"Réinitialiser la paire de clés","confirmResetBtn":"Confirmer la réinitialisation et la régénération","resetKeypairTitle":"Réinitialiser la paire de clés E2EE","resetKeypairDesc":"Si votre clé de secours ne correspond pas ou ne parvient pas à déchiffrer, et qu'aucune clé d'accès n'est enregistrée, la réinitialisation effacera les anciennes clés du serveur et générera une toute nouvelle paire de clés post-quantique (P256-MLKEM768).","resetKeypairPasskeyNotice":"La confirmation invoquera immédiatement votre clé d'accès configurée pour chiffrer et autoriser la nouvelle paire de clés.","resetKeypairRecoveryNotice":"La confirmation vous invitera à saisir votre clé de secours actuelle pour générer et chiffrer la nouvelle paire de clés.","resetAndInitPasskeySuccess":"Paire de clés réinitialisée avec succès et rechiffrée avec votre clé d'accès !","resetSuccessEnterRecovery":"Anciennes clés purgées. Veuillez initialiser une nouvelle paire de clés avec votre clé de secours.","resetFailed":"Échec de la réinitialisation de la paire de clés"},"jwtSecretWarningTitle":"Avis de sécurité : Secret JWT faible","jwtSecretWarningDesc":"Le JWT_SECRET actuel comporte moins de 32 caractères, ce qui présente des risques potentiels pour la sécurité. Veuillez configurer la variable d'environnement KEK_v1 avant de renouveler JWT_SECRET afin de garantir que les clés TOTP et de récupération chiffrées par enveloppe restent déchiffrables.","roleAdmin":"Administrateur système","roleUser":"Utilisateur","personalInfo":"Informations personnelles","username":"Nom d'utilisateur","userId":"ID de l'utilisateur","changePassword":"Modifier le mot de passe","currentPassword":"Mot de passe actuel","newPassword":"Nouveau mot de passe","updatePassword":"Mettre à jour le mot de passe","userManagement":"Gestion des utilisateurs (Admins uniquement)","createUser":"Créer un utilisateur","role":"Rôle","createdAt":"Créé le","lastActive":"Dernière activité le","lastResolve":"Dernière résolution le","actions":"Actions","dangerZone":"Zone de danger","clearLogs":"Effacer tous les journaux","clearLogsDesc":"Cela supprimera tous les journaux de requêtes DNS générés sous vos profils. Cette action est irréversible.","currentDbSize":"Taille actuelle de la base de données","clearLogsBtn":"Effacer les journaux maintenant","deleteAccount":"Supprimer le compte","deleteAccountDesc":"Supprimez définitivement votre compte et toutes ses données associées. Vous perdrez l'accès à toutes vos configurations DNS.","deleteAccountBtn":"Supprimer définitivement le compte","createNewUser":"Créer un nouvel utilisateur","initialPassword":"Mot de passe initial","userRole":"Rôle de l'utilisateur","cancel":"Annuler","createNow":"Créer maintenant","formatTipUsername":"Note sur le nom d'utilisateur : 5 à 32 caractères uniquement, format Unix","formatTipPassword":"Note sur le mot de passe : 12-100 caractères.","passwordSuccess":"Mot de passe modifié avec succès","updateFailed":"Échec de la modification","confirmDeleteUser":"Voulez-vous vraiment supprimer cet utilisateur ? Tous les profils lui appartenant seront également supprimés.","confirmClearLogs":"Voulez-vous vraiment supprimer tous les journaux de requêtes de vos profils ? Cette action est irréversible.","clearLogsSuccess":"Journaux supprimés avec succès","confirmDeleteAccount":"AVERTISSEMENT : Voulez-vous vraiment supprimer votre compte ?\\n\\nToutes vos configurations DNS, règles personnalisées et journaux de requêtes seront définitivement supprimés. Cette action ne peut pas être annulée !","inactivityPolicy":"Politique d'inactivité","inactivityDesc":"Pour protéger la vie privée des utilisateurs et économiser des ressources, tous les journaux de requêtes et configurations DNS des comptes sans activité de résolution pendant 30 jours seront automatiquement supprimés. Le compte lui-même sera supprimé après 90 jours sans connexion.","systemSettings":"Paramètres système (Admins uniquement)","adminOnlyView":"Uniquement visible par les administrateurs","featureToggle":"Options des fonctionnalités","enableTurnstileSignup":"Activer le captcha sur la page d'inscription","enableTurnstileLogin":"Activer le captcha sur la page de connexion","totp":{"title":"Application d'authentification (TOTP)","enabled":"Activé","disabled":"Désactivé","setupDesc":"Ajoutez un niveau de sécurité supplémentaire à votre compte. Utilisez Google Authenticator, Authy ou n'importe quelle application compatible TOTP.","setupBtn":"Configurer l'application d'authentification (TOTP)","scanQR":"Scannez ce code QR avec votre application d'authentification :","orEnterManually":"Ou saisissez la clé manuellement :","enterCode":"Saisissez le code de votre application pour confirmer :","enterCodeHint":"Saisissez le code à 6 chiffres pour vérifier la bonne configuration de la clé.","activate":"Activer TOTP","skipPassword":"Connexion sans mot de passe – Demander uniquement le code TOTP lors de la connexion (ignorer la saisie du mot de passe)","disable":"Désactiver l'application d'authentification (TOTP)","disableTitle":"Désactiver l'application d'authentification (TOTP)","disableWarning":"Après avoir désactivé TOTP, si aucune clé d'accès (Passkey) n'est configurée, votre compte ne sera protégé que par un mot de passe.","confirmDisable":"Désactiver TOTP","recoveryKeysTitle":"Veuillez enregistrer vos clés de récupération","recoveryKeysWarning":"Veuillez conserver votre clé de récupération dans un endroit sûr (ex. un gestionnaire de mots de passe). Chaque clé ne peut être utilisée qu'une seule fois.","copyKeys":"Copier toutes les clés","copied":"Copié !","done":"Terminé, j'ai enregistré les clés","activeDesc":"L'application d'authentification (TOTP) est active et génère des codes à 6 chiffres.","invalidCode":"Veuillez saisir un code à 6 chiffres","testBtn":"Tester le code","testTitle":"Tester l'application d'authentification (TOTP)","testDesc":"Saisissez le code de vérification à 6 chiffres de votre application d'authentification pour vérifier qu'elle est bien synchronisée et génère des codes valides.","testSuccess":"Vérification réussie ! Votre application d'authentification est correctement configurée.","testFailed":"Code de vérification invalide ou horloge désynchronisée","verificationCode":"Code de vérification à 6 chiffres","verifyBtn":"Vérifier maintenant"},"activity":{"title":"Historique d'activité du compte","action":"Événement","time":"Heure","ip":"Adresse IP","session":"Session","empty":"Aucune activité enregistrée.","loadMore":"Charger plus","signup":"Inscription","loginSuccess":"Connexion réussie","loginFail":"Échec de connexion","logout":"Déconnexion","pwChangeSuccess":"Mot de passe modifié","pwChangeFail":"Échec de la modification du mot de passe","totpVerifySuccess":"Vérification TOTP réussie","totpVerifyFail":"Échec de la vérification TOTP","totpSetup":"Authentificateur TOTP configuré","totpRemoved":"Authentificateur TOTP désactivé","recoveryKeyUsed":"Clé de récupération utilisée","sessionRevoked":"Session révoquée","reasons":{"user_active":"Déconnexion active","user_revoke":"Session révoquée","expired":"Session expirée","geolocation_mismatch":"Écart géographique (Accès restreint)","geolocation_missing":"Informations géographiques manquantes","token_reuse":"Réutilisation de tokens (Alerte de sécurité)"},"passkeyRegistered":"Clé d'accès enregistrée","passkeyDeleted":"Clé d'accès supprimée","passkeyVerifySuccess":"Clé d'accès vérifiée","passkeyVerifyFail":"Échec de vérification de clé d'accès","recoveryKeyRotated":"Clé de récupération renouvelée","device":"Appareil"},"sessions":{"title":"Sessions actives","session":"Session","device":"Appareil","ip":"Adresse IP","loginTime":"Heure de connexion","expires":"Expire le","action":"Action","current":"Actuelle","revoke":"Révoquer","revokeFailed":"Échec de la révocation de la session.","empty":"Aucune session active trouvée.","unknownDevice":"Appareil inconnu","revokeOthers":"Révoquer les autres sessions","confirmRevokeOthers":"Révoquer les autres sessions","revokeOthersConfirmText":"Voulez-vous vraiment révoquer toutes les autres sessions actives ? Tous les autres appareils connectés seront déconnectés immédiatement."},"passkey":{"title":"Clés d'accès (Passkeys)","addBtn":"Ajouter une clé d'accès","desc":"Utilisez la biométrie (Touch ID, Face ID, Windows Hello) ou des clés de sécurité (YubiKey) pour une authentification multifacteur rapide et résistante au phishing.","empty":"Aucune clé d'accès ajoutée pour le moment.","addTitle":"Ajouter une clé d'accès","nameLabel":"Nom de la clé d'accès","namePlaceholder":"ex. my_passkey","promptNotice":"Après avoir cliqué sur Continuer, votre navigateur vous invitera à terminer l'enregistrement biométrique ou de la clé de sécurité.","continue":"Continuer","renameTitle":"Renommer la clé d'accès","deleteTitle":"Supprimer la clé d'accès","deleteConfirm":"Êtes-vous sûr de vouloir supprimer la clé d'accès \\"{{name}}\\" ? Vous ne pourrez plus l'utiliser pour l'authentification multifacteur.","defaultName":"Clé d'accès","notSupported":"Votre navigateur ou environnement actuel ne prend pas en charge les clés d'accès (WebAuthn).","regFailed":"Échec de l'enregistrement de la clé d'accès","count":"{{count}} configuré(s)","none":"Non configuré","created":"Créé le","lastUsed":"Dernière utilisation","neverUsed":"Jamais utilisé","updated":"Clé d'accès mise à jour avec succès","registered":"Clé d'accès enregistrée avec succès","deleted":"Clé d'accès supprimée","appNameLabel":"Domaine","appNameHelper":"La clé d'accès sera liée à ce domaine","formatTip":"Note sur le nom de clé d'accès : 1 à 30 caractères, seuls les lettres, chiffres, tirets et traits de soulignement sont autorisés","verifyPrompt":"Authentifiez-vous à l'aide des capteurs biométriques ou d'une clé de sécurité.","changePwNotice":"Une invite d'authentification Passkey apparaîtra lors de l'envoi.","submitNotice":"Une invite d'authentification Passkey apparaîtra lors de l'envoi.","testBtn":"Tester la clé d'accès","testThis":"Tester cette clé d'accès","testSuccess":"Clé d'accès vérifiée avec succès : {{name}}","testCancelled":"Vérification de la clé d'accès annulée","testFailed":"Échec de la vérification de la clé d'accès"},"mfaNone":"Aucun","resetUserPassword":"Réinitialiser le mot de passe","resetPasswordTitle":"Réinitialiser le mot de passe de l'utilisateur","resetPasswordWarning":"Après la réinitialisation, toutes les sessions actives de l'utilisateur seront immédiatement révoquées.","resetPasswordSuccess":"Mot de passe réinitialisé avec succès. Les sessions actives ont été révoquées.","confirmReset":"Confirmer la réinitialisation","mfa":{"title":"Authentification multifacteur (MFA)","enabled":"Configuré","notConfigured":"Non configuré","desc":"Les clés d'accès (Passkeys) et les applications d'authentification (TOTP) servent de méthodes MFA. Configurer au moins l'un d'eux protège votre compte.","passwordlessTitle":"Connexion sans mot de passe","passwordlessDesc":"Une fois activée, la saisie du mot de passe est ignorée et votre identité est vérifiée directement via Passkey ou TOTP.","unconfiguredHint":"Aucune méthode MFA n'est encore configurée. Configurez un Passkey ou une application d'authentification ci-dessous.","password":"Mot de passe","passkey":"Passkey","totp":"TOTP"},"recoveryKey":{"title":"Clé de récupération d'urgence","desc":"Une clé de récupération d'urgence vous permet de récupérer l'accès ou de réinitialiser votre mot de passe si vous perdez tous vos Passkeys ou applications d'authentification. Pour garantir une sécurité zéro connaissance, la clé est stockée sous forme de hachage cryptographique unidirectionnel et ne peut pas être affichée en texte clair. Elle est automatiquement renouvelée dès son utilisation.","configured":"Configurée","notConfigured":"Non configurée","rotateBtn":"Renouveler la clé de récupération","yourKey":"Votre clé de récupération à 30 chiffres","securityTip":"Gardez cette clé secrète. Toute personne y ayant accès peut accéder à votre compte.","rotateConfirm":"Le renouvellement invalidera immédiatement la clé actuelle. La vérification n'est autorisée que via Passkey existante ou clé d'origine. Continuer ?","confirmRotateBtn":"Procéder au renouvellement","rotateVerifyTitle":"Vérifier l'identité pour renouveler la clé","rotateSuccess":"Clé de récupération renouvelée avec succès ! Veuillez la conserver en lieu sûr immédiatement.","oneWayHash":"Hachage cryptographique unidirectionnel","oneWayTooltip":"Protégée par hachage unidirectionnel SHA-256. Le serveur ne stocke aucun texte clair et ne peut pas le déchiffrer.","newKeyGenerated":"Nouvelle clé de récupération à 30 chiffres générée (Sauvegardez maintenant)","oneWayWarning":"Attention : Cette clé n'est affichée QU'UNE SEULE FOIS. Le serveur ne conserve qu'un hachage irréversible, veuillez la copier et la conserver hors ligne en toute sécurité.","autoRotatedTitle":"Clé de récupération renouvelée automatiquement","autoRotatedNotice":"Conformément à la règle d'utilisation unique, votre ancienne clé a été invalidée et une nouvelle clé à 30 chiffres a été générée. Copiez-la et conservez-la hors ligne !","savedAndClose":"Je l'ai sauvegardée et continuer","savedAndContinue":"Je l'ai sauvegardée et accéder au tableau de bord","descOneWay":"La clé de récupération d'urgence est le seul moyen de récupérer l'accès au compte et de déchiffrer les données E2EE en cas de perte de tous les Passkeys ou authentificateurs. Pour garantir la sécurité zéro-connaissance, elle est stockée sous forme de hachage irréversible et ne peut pas être affichée en texte clair sur le Web. Elle ne peut être renouvelée qu'à l'aide de la clé d'origine ou d'un Passkey existant. Elle est automatiquement renouvelée après utilisation.","keyRequired":"La clé de récupération est requise","verifyBtn":"Clé de récupération","verifyPromptLabel":"Clé de récupération d'origine","rotateSuccessE2eeWarning":"Clé de secours renouvelée avec succès ! Remarque : Comme le E2EE était verrouillé et n'a pas pu être déchiffré, les anciennes données nécessitent toujours la clé précédente, ou vous pouvez cliquer sur « Réinitialiser la paire de clés » ci-dessous."},"verifyIdentity":"Vérification de sécurité","verifyIdentityDesc":"Pour protéger votre compte, veuillez vérifier votre identité avant de continuer.","usePasskeyInstead":"Authentifier avec Passkey","changePasswordWithPasskey":"Vérifier avec Passkey et modifier","enableRegistration":"Activer l'inscription des utilisateurs","timezone":"Fuseau horaire","timezoneAuto":"Automatique (par défaut du navigateur)","totpCode":"Code de l'authentificateur"}`),d={item1Title:`DNS Worker de protection`,item1Desc:`Un résolveur DNS basé sur Cloudflare Workers & D1, optimisé pour la vitesse et la sécurité.`,item2Title:`Confidentialité DoH`,item2Desc:`Évite l'interception DNS et protège votre confidentialité via des tunnels chiffrés DNS over HTTPS (RFC 8484).`,item3Title:`Réseau Edge mondial`,item3Desc:`Profite du vaste réseau edge de Cloudflare pour obtenir une résolution ultrarapide et des latences minimales.`,item4Title:`Filtrage granulaire`,item4Desc:`Support complet pour les listes de blocage et d'autorisation, les règles AdGuard et la redirection personnalisée d'enregistrements DNS.`,item5Title:`Statistiques en temps réel`,item5Desc:`Visualisez l'état du réseau via des journaux de requêtes détaillés et un tableau de bord complet.`,item6Title:`UI moderne et mode sombre`,item6Desc:`Un tableau de bord à haute densité pour les développeurs et les particuliers, basé sur Blueprint UI de Palantir.`,item7Title:`Infrastructure cloud-native`,item7Desc:`L'architecture serverless garantit une maintenance nulle et une évolutivité illimitée pour votre DNS privé.`,item8Title:`Gérer plusieurs profils`,item8Desc:`Créez et gérez des profils DNS distincts pour différents appareils ou environnements réseau.`,item9Title:`Plusieurs points d'accès`,item9Desc:`Configurez des points d'accès dédiés pour différents appareils afin d'analyser les journaux et les statistiques séparément.`},f={title:`Guide de Configuration et Déploiement d'DNS Worker`,subtitle:`Votre instance n'est pas encore entièrement configurée. Veuillez suivre les étapes ci-dessous pour activer DNS Worker.`,dbStatus:`Liaison de Base de Données D1 (env.DB)`,jwtStatus:`Clé Secrète JWT (env.JWT_SECRET)`,configured:`Configuré`,missing:`Manquant / Non Configuré`,refresh:`Actualiser & Vérifier`,methodCli:`Déploiement CLI`,methodDash:`Déploiement via le Tableau de Bord Cloudflare`,copy:`Copier`,copied:`Copié !`,stepDbTitle:`1. Lier la Base de Données D1`,stepDbDesc:`Créez une base de données D1 et liez-la à votre worker. Dans votre terminal, exécutez :`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Copiez les détails de la base de données D1 générés et collez-les dans votre wrangler.toml sous [[d1_databases]] :`,stepDbCommand2:`[[d1_databases]]
2
2
  binding = "DB"
3
3
  database_name = "dns_worker_db"
4
4
  database_id = "<VOTRE_D1_DATABASE_ID>"
@@ -0,0 +1 @@
1
+ function e(e){if(!e)return`🌐`;let t=e.toUpperCase().trim();if(t===`UNKNOWN`||t===`UN`||t===`XX`||t===`-`||t===`N/A`)return`🌐`;if(t===`LAN`||t===`LOCAL`||t===`PRIVATE`||t===`PRIVATE NETWORK`)return`🏠`;if(t.length!==2)return`🌐`;let n=t.split(``).map(e=>127397+e.charCodeAt(0));return String.fromCodePoint(...n)}export{e as t};