dns-worker 1.0.2-3.3
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.
- package/LICENSE +662 -0
- package/README.md +294 -0
- package/dist/serverfull.mjs +11777 -0
- package/migrations/0000_init.sql +80 -0
- package/migrations/0001_move_lists_to_d1.sql +12 -0
- package/migrations/0002_activity_tracking.sql +7 -0
- package/migrations/0003_fix_profiles_cascade.sql +21 -0
- package/migrations/0004_system_settings.sql +12 -0
- package/migrations/0005_add_bloom_storage.sql +3 -0
- package/migrations/0006_cleanup_profiles_table.sql +18 -0
- package/migrations/0007_user_activity_and_totp.sql +37 -0
- package/migrations/0008_add_profile_key.sql +8 -0
- package/migrations/0009_add_profile_blooms.sql +5 -0
- package/migrations/0010_session_device_info.sql +3 -0
- package/migrations/0011_session_created_at.sql +2 -0
- package/migrations/0012_profile_bloom_chunks.sql +9 -0
- package/migrations/0013_add_session_revoked_to_activity_log.sql +29 -0
- package/migrations/0014_add_session_geo.sql +3 -0
- package/migrations/0015_add_signup_to_activity_log.sql +30 -0
- package/migrations/0016_add_session_rotation_counter.sql +2 -0
- package/migrations/0017_add_access_points.sql +31 -0
- package/migrations/0018_add_list_updated_at.sql +2 -0
- package/migrations/0019_add_list_sync_error.sql +2 -0
- package/migrations/0020_add_session_last_active.sql +5 -0
- package/migrations/0021_add_user_timezone.sql +2 -0
- package/migrations/0022_add_user_locale.sql +2 -0
- package/migrations/0023_add_user_password_version.sql +2 -0
- package/migrations/0024_session_pin_and_pause.sql +37 -0
- package/migrations/0025_add_secret_table.sql +10 -0
- package/migrations/0026_session_lock_config.sql +2 -0
- package/migrations/0027_add_session_id_to_activity_log.sql +2 -0
- package/migrations/0028_rename_session_id_to_session_id_hash.sql +2 -0
- package/migrations/0029_profile_blooms_staging.sql +12 -0
- package/migrations/0030_add_list_blooms.sql +7 -0
- package/migrations/0031_list_blooms_chunks.sql +13 -0
- package/migrations/0032_profile_blooms_cascade.sql +40 -0
- package/migrations/0033_remove_system_secrets.sql +2 -0
- package/migrations/0034_remove_list_entries.sql +2 -0
- package/migrations/0035_add_envelope_encryption_columns.sql +5 -0
- package/migrations/0036_add_cf_proxy_cidrs_setting.sql +7 -0
- package/migrations/0037_optimize_logs_composite_indexes.sql +25 -0
- package/migrations/0038_optimize_logs_table_and_indexes.sql +49 -0
- package/migrations/0039_add_lists_profile_id_index.sql +5 -0
- package/migrations/0040_reduce_logs_indexes_write_cost.sql +9 -0
- package/migrations/0041_create_log_hourly_rollups.sql +21 -0
- package/migrations/0042_add_rule_created_at.sql +3 -0
- package/migrations/0043_create_client_hourly_rollups.sql +26 -0
- package/migrations/0044_create_destination_hourly_rollups.sql +29 -0
- package/migrations/0045_transform_logs_without_rowid.sql +38 -0
- package/migrations/0046_add_passkeys.sql +19 -0
- package/migrations/0047_add_passkey_actions_to_activity_log.sql +35 -0
- package/migrations/0048_add_recovery_key_rotated_to_activity_log.sql +35 -0
- package/migrations/0049_optimize_rollups_and_add_domain_rollups.sql +26 -0
- package/migrations/0050_add_dest_columns_to_logs.sql +6 -0
- package/migrations/0051_add_registration_enabled_setting.sql +2 -0
- package/package.json +71 -0
- package/static/assets/AccountView-BvRvODjN.js +4 -0
- package/static/assets/AnalyticsView-DQ7hDChh.js +2 -0
- package/static/assets/AuthView-Bwv6hbdi.js +2 -0
- package/static/assets/DestinationMap-BEQNbcb-.js +1 -0
- package/static/assets/FilteringView-BWD3e-DS.js +1 -0
- package/static/assets/LogsView-kQy7qTGd.js +5 -0
- package/static/assets/QRCodeCanvas-X07w5x_G.js +2 -0
- package/static/assets/RulesView-3d5hga0L.js +1 -0
- package/static/assets/SettingsView-B9D0kPUF.js +1 -0
- package/static/assets/SetupView-D7d-Gsdr.js +1 -0
- package/static/assets/SwipeableDrawer-B-MfxTWM.js +1 -0
- package/static/assets/TrendChart-B20w7SzD.js +53 -0
- package/static/assets/allPaths-BEI3QvIM.js +1 -0
- package/static/assets/allPathsLoader-DM2JAMeC.js +1 -0
- package/static/assets/browser-icErLjuM.js +1 -0
- package/static/assets/date-C4b8kvr-.js +1 -0
- package/static/assets/de-DE-CXKS_pep.js +10 -0
- package/static/assets/es-ES-B2e3ea35.js +10 -0
- package/static/assets/formatCountryName-CSBD8pP8.js +1 -0
- package/static/assets/fr-FR-1qQHEpoW.js +10 -0
- package/static/assets/getFlagEmoji-_Wxhq0lT.js +1 -0
- package/static/assets/index-7FKlsF79.js +16 -0
- package/static/assets/index-DdQuGqR5.css +2 -0
- package/static/assets/ja-JP-CCVeJXwX.js +10 -0
- package/static/assets/ko-KR-bQ1okpC2.js +10 -0
- package/static/assets/obex_cat_eye_logo-256-CgYNvUIC.webp +0 -0
- package/static/assets/paths-CfqdBnl8.js +1 -0
- package/static/assets/paths-cc-gUzxh.js +1 -0
- package/static/assets/rolldown-runtime-C4Xdq4VV.js +1 -0
- package/static/assets/ru-RU-DeRsms_o.js +10 -0
- package/static/assets/services-fIMx5oSx.js +1 -0
- package/static/assets/splitPathsBySizeLoader-BgBwSA38.js +1 -0
- package/static/assets/vendor-i18next-cO7FDf_e.js +1 -0
- package/static/assets/vendor-icons-16-BgwRBCeU.js +1 -0
- package/static/assets/vendor-icons-20-X5NPN60g.js +1 -0
- package/static/assets/vendor-icons-other-Bme3ywH9.js +2 -0
- package/static/assets/vendor-react-Kt98jRfM.js +11 -0
- package/static/assets/vendor-ui-core-BpucEp_q.js +1 -0
- package/static/assets/vendor-utils-CfYGGC23.js +9 -0
- package/static/assets/vi-VN-BcXfqmzH.js +10 -0
- package/static/assets/zh-CN-D8YK7j27.js +12 -0
- package/static/assets/zh-TW-C2_-uaZk.js +12 -0
- package/static/favicon.webp +0 -0
- package/static/index.html +27 -0
- package/static/manifest.webmanifest +1 -0
- package/static/registerSW.js +1 -0
- package/static/sw.js +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as e}from"./vendor-icons-other-Bme3ywH9.js";import{n as t}from"./vendor-icons-16-BgwRBCeU.js";import{t as n}from"./vendor-icons-20-X5NPN60g.js";export{e as getIconPaths};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./vendor-icons-other-Bme3ywH9.js";export{e as allPathsLoader};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{gt as e}from"./vendor-utils-CfYGGC23.js";export default e();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,T as t,w as n}from"./index-7FKlsF79.js";export{n as setSystemLocale,t as setSystemTimeZone};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const e={account:`Konto`,logout:`Abmelden`,selectProfile:`Profil auswählen`,add:`Hinzufügen`,newProfileName:`Neuer Profilname...`,profileNameFormatTip:`Hinweis zum Profilnamen: 1-30 Zeichen. Muss sich von bestehenden Namen unterscheiden`,profileLimitExceeded:`Maximale Anzahl an Profilen erreicht (max. {{max}})`,profileNameExists:`Dieser Profilname existiert bereits`,profileNameFormatError:`Ungültiges Profilnamensformat`,create:`Erstellen`,welcome:`Willkommen`,createProfileToStart:`Erstellen Sie ein Profil, um zu beginnen.`,loading:`Wird geladen...`,errorNetwork:`Netzwerkfehler`,confirmDelete:`Sind Sie sicher, dass Sie dieses Profil löschen möchten?`,confirmLogout:`Sind Sie sicher, dass Sie sich abmelden möchten?`,notFound:`404 - Seite nicht gefunden`,notFoundDesc:`Die von Ihnen gesuchte Seite existiert nicht oder wurde verschoben.`,backToHome:`Zurück zur Startseite`,apac:`Asien-Pazifik`,mainlandChina:`Festlandchina`,HongKong:`Hongkong`,Singapore:`Singapur`,Tokyo:`Tokio`,NorthAmerica:`Nordamerika`,nae:`Nordamerika-Ost`,naw:`Nordamerika-West`,eu:`Europa`,invalidFormat:`Ungültiges Dateiformat`,import:`Importieren`,importSuccess:`Profil erfolgreich importiert`,importError:`Profilimport fehlgeschlagen. Bitte überprüfen Sie das Format und versuchen Sie es später noch einmal`,save:`Speichern`,saveSuccess:`Einstellungen gespeichert`},t={setup:`Installation`,rules:`Regeln`,stats:`Statistiken`,logs:`Protokolle`,filter:`Filterlisten`,settings:`Einstellungen`},n={light:`Hell`,dark:`Dunkel`,system:`System`},r={login:`Bei DNS Worker anmelden`,signup:`Konto erstellen, um zu beginnen`,welcomeBack:`Willkommen zurück! Bitte geben Sie Ihre Anmeldedaten ein`,protectInternet:`Schützen Sie Ihren ersten Schritt ins Internet`,error:`Fehler`,username:`Benutzername`,usernamePlaceholder:`Ihr Benutzername`,password:`Passwort`,passwordPlaceholder:`Ihr Passwort`,loginBtn:`Anmelden`,signupBtn:`Registrieren`,totpVerification:`2FA/TOTP-Verifizierung`,noAccount:`Kein Konto? Jetzt registrieren`,haveAccount:`Bereits ein Konto? Zurück zur Anmeldung`,formatTipUsername:`Hinweis zum Benutzernamen: 5 bis 32 Zeichen, Unix-Format (muss mit einem Kleinbuchstaben oder Unterstrich beginnen und darf nur Kleinbuchstaben, Zahlen, Unterstriche und Bindestriche enthalten)`,formatTipPassword:`Hinweis zum Passwort: 12-100 Zeichen.`,authFailed:`Authentifizierung fehlgeschlagen. Bitte überprüfen Sie Ihren Benutzernamen oder Ihr Passwort`,networkError:`Netzwerkfehler. Bitte versuchen Sie es später noch einmal`,turnstileRequired:`Bitte lösen Sie das Captcha`,turnstileError:`Captcha-Dienst konnte nicht geladen werden. Bitte überprüfen Sie den Site-Key oder die Domain-Konfiguration`,verifying:`Sicherheitsprüfung wird durchgeführt...`,passwordLeaked:`Dieses Passwort wurde kompromittiert. Verwenden Sie ein zufälliges/starkes Passwort für Ihre Sicherheit.`,usernameExists:`Dieser Benutzername ist bereits registriert. Bitte versuchen Sie einen anderen.`,skip:`Überspringen`,showPassword:`Passwort anzeigen`,hidePassword:`Passwort ausblenden`,geolocationRequired:`Geolokalisierung fehlgeschlagen. Bitte versuchen Sie es erneut.`,unauthorizedDefault:`Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.`,unauthorizedGeo:`Standortänderung erkannt (Entfernungslimit überschritten). Sitzung wurde beendet.`,unauthorizedExpired:`Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.`,unauthorizedReuse:`Sicherheitsalarm: Mehrfachanmeldung erkannt. Sitzung beendet.`,unauthorizedRevoked:`Ihre Sitzung wurde widerrufen oder gelöscht. Bitte melden Sie sich erneut an.`,sessionLockTitle:`Inaktivitätssperre`,sessionLockDesc:`Sperren Sie die Benutzeroberfläche bei Inaktivität mit einer 4-stelligen PIN, um aktive Sitzungen vor unbefugtem physischen Zugriff zu schützen.`,enableSessionLock:`Inaktivitätssperre aktivieren`,inactivityTimeout:`Inaktivitäts-Timeout`,timeout1m:`1 Minute`,timeout2m:`2 Minuten`,timeout5m:`5 Minuten`,timeout15m:`15 Minuten`,timeout30m:`30 Minuten`,timeout60m:`60 Minuten`,changePin:`PIN ändern`,disablePin:`Inaktivitätssperre deaktivieren`,configurePin:`PIN einrichten`,newPin:`Neue 4-stellige PIN`,pinHelper:`Nur Ziffern, z. B. 1234`,confirmPin:`Neue PIN bestätigen`,verifyIdentity:`Identität verifizieren`,usePassword:`Passwort verwenden`,use2fa:`TOTP-Code verwenden`,totpCode:`TOTP-Code`,currentPassword:`Aktuelles Passwort`,disablePinWarning:`Durch das Deaktivieren der PIN wird die automatische Inaktivitätssperre vollständig abgeschaltet.`,pinFormatTip:`Die PIN muss genau 4 Ziffern lang sein`,pinMatchTip:`Die PINs stimmen nicht überein`,passwordRequired:`Passwort zur Verifizierung erforderlich`,sessionLocked:`Sitzung wegen Inaktivität gesperrt`,sessionExpired:`Zu viele Fehlversuche. Sitzung beendet.`,pinIncorrect:`Falsche PIN`,attemptsRemaining:`{{count}} verbleibende Versuche`,logoutAndReturn:`Sitzung abmelden`,lockNow:`Jetzt sperren`,cfErrorWithDetails:`Cloudflare-Edge-Fehler (Fehler {{code}}: {{desc}}). Der Dienst ist vorübergehend nicht verfügbar, bitte versuchen Sie es später erneut. {{rayId}}`,cfErrorCodeOnly:`Cloudflare-Edge-Fehler (Fehler {{code}}). Der Dienst ist vorübergehend nicht verfügbar. {{rayId}}`,cfErrorGeneric:`Cloudflare-Edge-Fehler. Der Dienst ist vorübergehend nicht verfügbar, bitte versuchen Sie es später erneut. {{rayId}}`,htmlErrorGeneric:`Der Server hat eine unerwartete Antwort zurückgegeben (HTTP {{status}}). Bitte versuchen Sie es später erneut.`,tooManyAttempts:`Zu viele Anfragen oder Versuche. Bitte versuchen Sie es später erneut.`,dbQuotaExceeded:`Das tägliche Lesekontingent der Datenbank wurde überschritten. Bitte warten Sie auf den täglichen Reset.`,noUsersRegistered:`Noch keine Konten registriert. Bitte registrieren Sie sich als Administrator.`,registerAdminTitle:`Administratorkonto registrieren`,registerAdminDesc:`Keine Konten im System. Der erste Benutzer wird Systemadministrator.`,goToRegisterAdmin:`Admin registrieren`,dbNotInitialized:`Datenbank nicht initialisiert oder Tabellen fehlen. Bitte führen Sie npm run db:migrate:prod aus.`,verifyWithPasskey:`Mit Passkey bestätigen`,orUseTotp:`Oder Authentifikator-Code verwenden`,passwordRequiredFirst:`Bitte geben Sie zuerst Ihr Passwort ein`,passkeyVerification:`Passkey-Verifizierung`,passkeyPromptDesc:`Verifizieren Sie mit Ihrer registrierten Biometrie oder Ihrem Sicherheitsschlüssel`,forgotPassword:`Passwort vergessen?`,forgotPasswordTitle:`Passwort zurücksetzen`,forgotPasswordDesc:`Stellen Sie Ihr Konto sicher über Multi-Faktor-Authentifizierung (Passkey oder TOTP) wieder her.`,noMfaContactAdmin:`Für dieses Konto ist keine Multi-Faktor-Authentifizierung (Passkey oder TOTP) eingerichtet. Bitte wenden Sie sich an einen Administrator, um Ihr Passwort zurückzusetzen.`,chooseMfaForReset:`Wählen Sie eine Methode zur Identitätsprüfung:`,authViaPasskey:`Mit Passkey verifizieren`,authViaPasskeyDesc:`Ein-Klick-Verifizierung über Biometrie oder Hardware-Sicherheitsschlüssel`,authViaTotp:`Mit Authentifikator-App (TOTP) verifizieren`,authViaTotpDesc:`Geben Sie den 6-stelligen Code aus Ihrer Authentifikator-App ein`,authViaRecoveryKey:`Notfall-Wiederherstellungsschlüssel verwenden`,authViaRecoveryKeyDesc:`Geben Sie einen 10-stelligen Notfall-Wiederherstellungsschlüssel ein`,verifyAndProceed:`Verifizieren und fortfahren`,setNewPassword:`Neues Passwort festlegen`,setNewPasswordDesc:`Identität bestätigt. Bitte legen Sie ein neues Passwort für Ihr Konto fest.`,newPassword:`Neues Passwort`,confirmNewPassword:`Neues Passwort bestätigen`,passwordMismatch:`Die Passwörter stimmen nicht überein`,saveAndReset:`Speichern und zurücksetzen`,resetSuccessTitle:`Passwort erfolgreich zurückgesetzt`,resetSuccessDesc:`Ihr Passwort wurde aktualisiert und alle bestehenden Sitzungen wurden beendet. Bitte melden Sie sich mit Ihrem neuen Passwort an.`,goToLogin:`Zur Anmeldung`,mfaSetupTitle:`Kontosicherheit erhöhen`,mfaSetupDesc:`Die Einrichtung der Multi-Faktor-Authentifizierung (MFA) schützt Ihr Konto und ermöglicht passwortlose Anmeldung sowie Kontowiederherstellung.`,mfaRecommended:`Empfohlen`,passkeySignupDesc:`Verwenden Sie Touch ID, Face ID oder Sicherheitsschlüssel. Schnell und phishing-resistent.`,bindPasskeyNow:`Jetzt Passkey registrieren`,mfaUniversal:`Universell`,totpSignupDesc:`Verwenden Sie Google Authenticator, 1Password oder eine andere TOTP-App.`,setupTotpBtn:`Authentifikator-App einrichten`,skipMfaSetup:`Vorläufig überspringen`,backToMfaOptions:`Zurück zur Auswahl`,otherOptions:`Andere Optionen`,next:`Weiter`,mfaVerification:`Multi-Faktor-Authentifizierung`,totpPrompt:`Geben Sie den 6-stelligen dynamischen Code aus Ihrer Authentifikator-App ein`,recoveryPrompt:`Geben Sie Ihren 30-stelligen Wiederherstellungsschlüssel ein (5 Gruppen mit je 6 Ziffern)`,recoveryChecksumError:`Prüfsummenfehler: Diese Gruppe ist nicht durch 11 teilbar`,recoveryChecksumErrorDesc:`Prüfsummenfehler in Gruppe {{groups}}, bitte überprüfen und erneut versuchen`,backToPasskey:`Zurück zur Passkey-Verifizierung`,recoveryKeyRequired:`Bitte geben Sie Ihren Wiederherstellungsschlüssel ein`,totpFormatError:`Bitte geben Sie einen gültigen 6-stelligen Code ein`,registrationDisabledTitle:`Registrierung deaktiviert`,registrationDisabledDesc:`Die Registrierung neuer Benutzer ist derzeit deaktiviert. Bitte wenden Sie sich an den Systemadministrator.`,backToLogin:`Zurück zur Anmeldung`,jwtSecretPreset:`Standard-JWT_SECRET erkannt. Bitte ändern Sie das voreingestellte JWT_SECRET in den Umgebungsvariablen vor der Bereitstellung.`,jwtSecretMissing:`JWT_SECRET fehlt. Bitte konfigurieren Sie einen sicheren Schlüssel in den Umgebungsvariablen vor der Bereitstellung.`,jwtSecretInvalid:`Ungültiges JWT_SECRET-Format, bitte überprüfen Sie die Konfiguration.`},i={title:`Installationsanleitung`,subtitle:`Konfigurieren Sie Ihre Geräte, um Ihre Internet-Sicherheit mit DNS Worker zu verwalten.`,regionOptimization:`Optimierung der Verbindungsregion (Windows)`,otherRegion:`Andere Regionen`,copied:`In die Zwischenablage kopiert`,verifyConnection:`Verbindung überprüfen`,verifying:`Wird überprüft...`,connected:`Verbunden`,notConnected:`Nicht verbunden`,profileMatch:`Die Filterung ist für dieses Profil aktiv.`,profileMismatch:`Sie verwenden Obex, aber die Profil-ID stimmt nicht überein.`,verifyHint:`Klicken Sie nach Abschluss der folgenden Konfiguration auf die Schaltfläche, um die Verbindung zu überprüfen.`,refreshStatus:`Status aktualisieren`,egressIp:`Ausgehende IP-Adresse`,currentLocation:`Aktueller Standort`,edgeServer:`Edge-Server`,dohUrlTitle:`DoH-URL des aktuellen Profils`,accessPointTitle:`DoH-Zugangs-URL`,defaultAccessPointName:`Gerät-1`,moreAccessPoints:`Mehr Zugangspunkte ↗`,accessPointName:`Name des Zugangspunkts`,accessPointToken:`Zugriffsschlüssel`,addAccessPoint:`Zugangspunkt hinzufügen`,renameAccessPoint:`Umbenennen`,rotateToken:`Schlüssel rotieren`,rotateTokenConfirmDesc:`Die Rotation des Schlüssels trennt sofort alle Geräte, die den alten Schlüssel verwenden. Möchten Sie fortfahren?`,deleteAccessPoint:`Löschen`,deleteAccessPointConfirm:`Sind Sie sicher, dass Sie diesen Zugangspunkt löschen möchten?`,manageAccessPoints:`Zugangspunkte verwalten`,searchAccessPoints:`Zugangspunkte suchen...`,accessPointNameExists:`Name des Zugangspunkts existiert bereits`,accessPointCreated:`Zugangspunkt erfolgreich erstellt`,accessPointRenamed:`Zugangspunkt erfolgreich umbenannt`,accessPointDeleted:`Zugangspunkt erfolgreich gelöscht`,accessPointNameFormatTip:`Hinweis zum Zugangspunktnamen: 1-30 Zeichen. Nur Buchstaben, Zahlen, Unterstriche und Bindestriche sind erlaubt`,accessPointLimitExceeded:`Maximale Anzahl an Zugangspunkten erreicht (max. {{max}})`,tokenRotated:`Zugriffsschlüssel erfolgreich rotiert`,whatIsDoh:`Was ist DoH?`,dohDesc:`DNS over HTTPS (DoH) ist ein Protokoll zur Durchführung von DNS-Abfragen über eine verschlüsselte HTTPS-Verbindung.`,dohBenefit1:`Verhindert Manipulation und Abfangen von DNS-Verkehr durch Dritte`,dohBenefit2:`Erhöht die Sicherheit bei der DNS-Auflösung und beim Surfen im Internet`,learnMore:`Mehr erfahren`,copyUrl:`URL kopieren`,browsers:`Browser`,browserTitle:`Browser-Konfiguration (Chrome/Edge)`,browserSteps:`Einstellungen > Datenschutz und Sicherheit > Sicherheit > Sicheres DNS verwenden > Benutzerdefiniert > URL einfügen.`,browserTips:`Oder kopieren Sie diese Adresse in Ihre Adressleiste:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Apple-Geräte unterstützen die schnelle Konfiguration über Konfigurationsprofile.`,appleWarning:`Profile können nicht im "Blockierungsmodus (Lockdown Mode)" installiert werden. Bitte stellen Sie sicher, dass dieser deaktiviert ist.`,downloadConfig:`Konfigurationsprofil herunterladen`,appleInstallHint:`Gehen Sie nach dem Download zu "Einstellungen" > "Profil geladen", um das Profil zu installieren`,windows:`MS Windows`,windowsTitle:`Windows 11 Konfiguration [Region: {{region}}]`,windowsStep0:`Einstellungen > Netzwerk und Internet`,windowsStep1:`Eigenschaften > DNS-Serverzuweisung > Bearbeiten > Manuell.`,windowsStep2:`Wählen und tragen Sie die DNS-IPs ein:`,windowsStep3:`Aktivieren Sie DoH (Manuelle Vorlage) und fügen Sie die URL ein.`,windowsStep4:`Deaktivieren Sie das Fallback auf unverschlüsselte Verbindungen.`,android:`Android`,androidTitle:`Android 9+`,androidDesc:`Unterstützt natives 'Privates DNS' (DoT) des Systems oder Drittanbieter-Apps für DoH.`,androidDotTitle:`Privates DNS (DoT - Serverfull-Modus)`,androidDotDesc:`Einstellungen > Netzwerk & Internet > Privates DNS > Hostname des privaten DNS-Anbieters:`,androidWarning:`Hinweis: Das native 'Privates DNS' von Android verwendet das DoT-Protokoll. Bei Bereitstellung auf Cloudflare Workers verwenden Sie Apps wie Intra für DoH. Im Serverfull-Modus mit konfiguriertem TLS können Sie direkt den obigen DoT-Hostnamen verwenden.`,dynamicFromDomain:`Dynamisch (von "{{domain}}")`,dynamicFromDomainV6:`Dynamisch IPv6 (von "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (Cloudflared DoH-Proxy)`,linuxDesc:`Führen Sie einen lokalen DNS-Proxy aus, um DNS-Anfragen verschlüsselt über DoH an Obex weiterzuleiten.`,linuxStep1:`Führen Sie das folgende Skript aus, um cloudflared zu installieren und einen systemd-Dienst zu erstellen (hört auf 127.0.0.1:53).`,linuxStep2:`Ändern Sie die System-DNS-Adresse auf 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Verwenden Sie diesen Resolver für alle Geräte in Ihrem Netzwerk, indem Sie ihn als DoH-Server des Routers festlegen.`,routerosStep1:`Im RouterOS-Terminal ausführen (RouterOS 7):`,routerosNote:`Vom Router weitergeleitete Anfragen erscheinen in den Protokollen als der Router, nicht als einzelne Geräte. Richten Sie Geräte direkt ein, wenn Sie Protokolle pro Gerät benötigen.`,routerosDocs:`MikroTik-DNS-Dokumentation`,accessPointsCardTitle:`Zugangspunkte`,currentAccessPoint:`Aktueller Zugangspunkt`,selectAccessPointToConfigure:`Zugangspunkt zum Konfigurieren auswählen`},a={title:`Benutzerdefinierte Regeln`,subtitle:`Steuern Sie manuell die Auflösung bestimmter Domains (blockieren, zulassen oder umleiten).`,action:`Aktion`,typeBlock:`Blockieren (BLOCK)`,typeAllow:`Zulassen (ALLOW)`,typeRedirect:`Umleiten (REDIRECT)`,pattern:`Domain-Muster (Pattern)`,patternPlaceholder:`example.com oder *.test.com`,addRule:`Regel hinzufügen`,redirectSettings:`Umleitungseinstellungen`,aRecord:`A-Eintrag (IPv4)`,aaaaRecord:`AAAA-Eintrag (IPv6)`,cnameRecord:`CNAME-Eintrag`,txtRecord:`TXT-Eintrag`,optional:`(optional)`,ipv4Placeholder:`z. B. 1.2.3.4`,ipv6Placeholder:`z. B. 2001:db8::1`,cnamePlaceholder:`z. B. ziel.com`,txtPlaceholder:`Geben Sie den Textinhalt ein...`,saveRedirectRule:`Umleitungsregel speichern und hinzufügen`,noRulesTitle:`Keine benutzerdefinierten Regeln`,noRulesDesc:`Sie haben noch keine manuellen Regeln hinzugefügt.`,tableAction:`Aktion`,tablePattern:`Muster`,tableDetails:`Auflösungsdetails`,tableOps:`Aktion`,labelBlock:`Blockieren`,labelAllow:`Zulassen`,labelRedirect:`Umleiten`,detailBlock:`Auflösen nach: `,detailAllow:`An Upstream-Server weiterleiten`,patternEmpty:`Domain-Muster darf nicht leer sein`,duplicatePattern:`Es existiert bereits eine Regel für diese Domain`,addSuccess:`Regel erfolgreich hinzugefügt`,addFailed:`Regel konnte nicht hinzugefügt werden`,updateSuccess:`Regel erfolgreich aktualisiert`,updateFailed:`Regel konnte nicht aktualisiert werden`,tableCreatedAt:`Hinzugefügt am`,clickToSort:`Klicken zum Sortieren`},o={customRange:`Benutzerdefinierter Zeitraum`,startTime:`Startzeit`,endTime:`Endzeit`,apply:`Anwenden`,custom:`Benutzerdefiniert`,totalQueries:`Anfragen insgesamt`,blocked:`Blockiert`,redirected:`Umgeleitet`,blockRate:`Blockierungsrate`,activeDevices:`Aktive Geräte`,activeIPs:`Aktive IP-Adressen`,queryTrend:`Abfragetrend`,noRecords:`Keine Datensätze in diesem Zeitraum`,topAllowed:`Häufen zugelassene Domains (Allowed)`,topBlocked:`Häufig blockierte Domains (Blocked)`,noData:`Keine Daten`,clientActivity:`Client-Aktivität`,ipAddress:`IP-Adresse`,location:`Standort`,queries:`Anfragen`,destinationDistribution:`Verteilung der Datenziele`,requests:`Anfragen`,topIsps:`Haupt-ISPs`,pressToShowMore:`Klicken, um mehr anzuzeigen`,maximize:`Vergrößern`,minimize:`Verkleinern`},s={title:`Abfrageprotokolle`,subtitle:`Überprüfen Sie die DNS-Auflösungsprotokolle und Blockierungsdatensätze für dieses Profil.`,realtime:`Echtzeit`,allStatus:`Alle Status`,onlyPass:`Zugelassen`,onlyBlock:`Blockiert`,onlyRedirect:`Umgeleitet`,searchPlaceholder:`Domains suchen...`,noResults:`Keine Ergebnisse gefunden`,noRecords:`Keine Protokolle vorhanden`,noResultsDesc:`Keine Domain-Datensätze gefunden, die "{{query}}" entsprechen.`,noRecordsDesc:`Keine DNS-Anfragen im ausgewählten Zeitraum empfangen.`,tableTime:`Zeit`,tableDomain:`Domain`,tableAnswer:`Ergebnis`,tableSource:`Quelle`,tableType:`Typ`,tableStatus:`Status`,tableReason:`Grund`,loadedAll:`Alle {{count}} Datensätze geladen`,realtimeLoadMoreTip:`Deaktivieren Sie den Echtzeitmodus, um mehr zu laden`,filterAccessPoint:`Zugangspunkt`,allAccessPoint:`Alle Zugangspunkte`,allCountry:`Alle Länder`,filterCountry:`Zielland`,allIsp:`Alle ISPs`,filterIsp:`ISP`,timeRange:`Zeitbereich`,clearFilters:`Filter löschen`,details:`Details zur Abfrage`,detailAccessPoint:`Zugangspunkt`,basicInfo:`Basisinformationen`,detailDomain:`Domain`,detailType:`Typ`,detailTime:`Zeit`,detailLatency:`Latenz`,detailProfile:`Verwendetes Profil`,detailStatus:`Status`,detailUpstream:`Upstream-Server`,detailReason:`Grund`,detailNoReason:`Keine (Zugelassen)`,detailECS:`ECS`,resolutionResult:`Auflösungsergebnis`,noResult:`Kein Ergebnis`,networkDetails:`Netzwerkdetails`,clientSource:`Client (Quelle)`,destination:`Ziel (Auflösungsadresse)`,quickActions:`Schnellaktionen`,actionAllow:`Zulassen`,actionBlock:`Blockieren`,actionRedirect:`Umleiten`,statusPass:`Zugelassen`,statusBlock:`Blockiert`,statusRedirect:`Umgeleitet`,export:`Protokolle exportieren`,rewritten:`Umgeschrieben`,logDetails:`Protokolldetails`,searchCountry:`Länder suchen...`,noMatchingCountries:`Keine passenden Länder gefunden`,searchIsp:`ISP suchen...`,noMatchingIsps:`Keine passenden ISPs gefunden`,loadingIsps:`ISPs werden geladen...`,loggingDisabledTitle:`Protokollierung deaktiviert`,loggingDisabledDesc:`Die Protokollaufbewahrung für dieses Profil ist auf „Deaktiviert“ gesetzt. Es werden keine Protokolle aufgezeichnet. Aktivieren Sie die Protokollaufbewahrung in den Einstellungen, um Protokolle anzuzeigen.`},c={title:`Externe Blockierlisten`,subtitle:`Abonnieren Sie von Drittanbietern gepflegte Domain-Sperrlisten (wie AdGuard usw.).`,formatDisclaimer:`Dieses System unterstützt nur grundlegende AdGuard-Formate und reine Domain-Listen. Nur grundlegende Blockierungsregeln (z. B. ||example.com^) werden unterstützt; "@@"-Ausnahmen, "$"-Umschreibungen und "*"-Wildcards werden ignoriert. Subdomains werden automatisch zugeordnet.`,syncAll:`Alle Listen synchronisieren`,urlPlaceholder:`Listen-URL eingeben...`,addSubscription:`Abonnement hinzufügen`,supportedFormats:`Unterstützte Listenformate:`,formatAdGuard:`Kompatibel mit ||domain.com^ Filterregeln.`,formatHosts:`Kompatibel mit standardmäßigen hosts-Dateien (z. B. 0.0.0.0 domain.com).`,noListsTitle:`Keine Listen hinzugefügt`,noListsDesc:`Sie haben noch keine externen Blockierlisten abonniert.`,tableUrl:`Listen-URL`,tableLastSync:`Letzte Synchronisierung`,tableStatus:`Status`,tableOps:`Aktion`,neverSynced:`Nie`,enabled:`Aktiv`,disabled:`Synchronisierung fehlgeschlagen`,statusNormal:`Normal`,statusDisabled:`Deaktiviert`,statusOutdated:`Veraltet`,statusMissing:`Fehlend`,presetOisdBig:`OISD Big (Werbung/Malware-Blockierung)`,presetOisdNsfw:`OISD NSFW (Pornografie/Erwachseneninhalte)`,presetAdGuard:`AdGuard AdServers (Werbeserver)`,presetStevenBlack:`StevenBlack Hosts (All-in-One-Blocker)`,syncTaskStarted:`Synchronisierungsaufgabe gestartet`,syncCheckComplete:`Synchronisierungsprüfung abgeschlossen`,syncTaskFailed:`Synchronisierung fehlgeschlagen`,syncing:`Wird synchronisiert...`,syncSuccess:`Synchronisierung erfolgreich`,syncError:`Synchronisierung fehlgeschlagen`,syncErrorDesc:`Die Blockierliste konnte nicht heruntergeladen oder analysiert werden. Bitte überprüfen Sie den Link und die Erreichbarkeit.`,deleteConfirm:`Abonnement wirklich löschen?`,deleteSuccess:`Liste erfolgreich gelöscht`,deleteError:`Liste konnte nicht gelöscht werden`,addSuccess:`Liste erfolgreich hinzugefügt`,addError:`Liste konnte nicht hinzugefügt werden`,listEnabled:`Liste aktiv`,listEnabledHint:`Deaktivieren, um die Filterung mit dieser Liste zu stoppen, ohne sie zu löschen. Abonnement und Synchronisierungsverlauf bleiben erhalten.`,listEnabledToast:`Liste aktiviert - Filter wird neu erstellt`,listDisabledToast:`Liste deaktiviert - Filter wird neu erstellt`,checkDomain:`Domain prüfen`,checkDomainHint:`Listen werden als kompakte Filter gespeichert, ihre Einträge können daher nicht durchsucht werden. Sie können jede Domain sofort gegen diese Liste testen.`,check:`Prüfen`,checkBlocked:`Von dieser Liste blockiert`,checkNotBlocked:`Nicht von dieser Liste blockiert`,checkViaParent:`(Treffer über eine übergeordnete Domain)`,checkNotSynced:`Diese Liste ist noch nicht fertig synchronisiert, es gibt daher nichts zu prüfen.`,checkListDisabled:`Diese Liste ist derzeit deaktiviert und filtert daher gerade nichts.`,checkProbabilisticRate:`Filter sind probabilistisch: etwa 1 von {{odds}} Treffern ist ein Fehlalarm. Eine Ausnahme deckt auch alle Subdomains ab.`,checkProbabilistic:`Filter sind probabilistisch, ein kleiner Teil der Treffer ist daher ein Fehlalarm. Eine Ausnahme deckt auch alle Subdomains ab.`,checkAllowAction:`Trotzdem zulassen`,checkAllowed:`Ausnahme hinzugefügt - diese Domain wird jetzt aufgelöst`,allowRuleAdded:`Ausnahme für {{domain}} hinzugefügt`},l={title:`Profileinstellungen`,subtitle:`Verwalten Sie Ihre DNS-Auflösungsstrategie und erweiterte Optionen.`,saveChanges:`Alle Änderungen speichern`,saveSuccess:`Einstellungen erfolgreich gespeichert`,saveError:`Speichern der Einstellungen fehlgeschlagen. Bitte versuchen Sie es später noch einmal`,upstreamTitle:`Upstream-Server`,dohUrl:`DoH-URL`,dnsIP:`DNS-IP`,classicDns:`Klassisches DNS`,httpsOnly:`Nur HTTPS unterstützen`,upstreamDesc:`Alle nicht blockierten Anfragen werden an diesen Server weitergeleitet. Unterstützt DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) oder klassisches DNS. Klassisches DNS wird über TCP weitergeleitet.`,defaultPolicyTitle:`Standard-Filterverhalten`,onNoMatch:`Wenn keine Regel zutrifft`,allowAll:`Alle Abfragen zulassen`,blockAll:`Alle Abfragen blockieren`,logRetentionTitle:`Protokollaufbewahrung`,retentionDuration:`Aufbewahrungsdauer`,retentionDesc:`Protokolle werden automatisch bereinigt. `,skipLogOnPass:`Erlaubte Abfragen nicht protokollieren`,skipLogOnPassDesc:`Wenn aktiviert, werden normal erlaubte Abfragen nicht protokolliert. Nur blockierte, umgeleitete oder fehlgeschlagene Abfragen werden gespeichert.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`Nicht alle vorgelagerten DNS-Server unterstützen ECS. Bei rekursiven Resolvern wie ControlD beeinflusst ECS nur das interne Routing und wird nicht an den autoritativen Server weitergegeben.`,sendEcs:`ECS mitsenden`,customSubnet:`Benutzerdefiniertes Subnetz`,customIpv4:`Benutzerdefiniertes IPv4-Subnetz`,customIpv6:`Benutzerdefiniertes IPv6-Subnetz`,ipv4Hint:`(z. B. 1.2.3.0/24)`,ipv6Hint:`(z. B. 2001:db8::/32)`,testToolTitle:`Echtzeit-Auflösungstest-Tool`,testDomain:`Test-Domain`,recordType:`Eintragstyp`,runTest:`Test ausführen`,domainPlaceholder:`z. B. google.com`,hitRule:`Getroffene Regel / Grund`,defaultAllow:`Standard-Zulassungsrichtlinie`,parseLatency:`Auflösungslatenz`,sourceIp:`Quell-IP-Adresse`,answerSection:`Antwortbereich (Answer Section)`,noRecordsReturned:`Diese Abfrage hat keine Datensätze zurückgegeben.`,diagnostics:`Diagnoseinformationen`,errorDetail:`Fehlerdetails`,upstreamResponse:`Upstream-Antwort`,presetCloudflareSecurity:`Cloudflare Security (Schnell/Schutz vor Schadsoftware/Phishing)`,presetCloudflareFamilies:`Cloudflare Families (Schnell/Schutz vor Schadsoftware/Erwachseneninhalten)`,presetQuad9:`Quad9 (Schutz vor Schadsoftware/Keine Protokolle/Ohne ECS)`,presetQuad9Ecs:`Quad9 ECS (Schutz vor Schadsoftware/Keine Protokolle/Mit ECS)`,presetControlDFree:`ControlD Free (Schutz vor Werbung/Trackern/Schadsoftware/Phishing)`,presetControlDUncensored:`ControlD Uncensored (Gegen Zensur)`,presetAdGuard:`AdGuard (Werbe- und Tracker-Blocker)`,presetAdGuardFamily:`AdGuard Family protection (Werbung/Tracker/Erwachseneninhalte/Sichere Suche)`,retention10m:`10 Minuten`,retention1h:`1 Stunde`,retention24h:`24 Stunden`,retention7d:`7 Tage`,retention30d:`30 Tage`,retention90d:`90 Tage (Maximum)`,blockModeTitle:`Blockierungs-Antwortmodus`,blockModeDesc:`Rückgabeinhalt bei Blockierung einer Domain`,default:`Standard`,NXDOMAIN:`NXDOMAIN (Domain existiert nicht)`,NODATA:`NODATA (Keine Daten)`,customIP:`Benutzerdefinierte IP`,export:`Konfiguration exportieren`,exportSuccess:`Konfiguration erfolgreich exportiert`,exportError:`Konfigurationsexport fehlgeschlagen. Bitte versuchen Sie es später noch einmal`,nameUpdateSuccess:`Profilname aktualisiert`,saving:`Speichern...`,echTitle:`ECH umschreiben`,enableEch:`ECH-Umschreibung aktivieren`,echDesc:`Für über Cloudflare geleitete Domains werden ECH-Parameter und äußere SNI bei HTTPS- (Typ 65) / SVCB- (Typ 64) Abfragen automatisch umgeschrieben, um die Privatsphäre zu schützen.`,echFrontingTitle:`Äußerer SNI (ECH Fronting)`,echFrontingDesc:`Im Klartext sichtbarer Domainname im äußeren TLS-Handshake`,echFrontingCustomPlaceholder:`Benutzerdefinierte Fronting-Domain eingeben, z.B. crypto.cloudflare.com`,echPreferred:`Empfohlen`,whatIsEch:`Was ist ECH (Encrypted Client Hello)?`,echHelpDesc:`ECH ist eine wichtige TLS 1.3-Datenschutzerweiterung, die die eigentliche Domain (Inner SNI) vollständig verschlüsselt und nach außen nur eine Tarn-Domain (Outer SNI) anzeigt.`,echHelpBenefit1:`Verhindert, dass ISPs und Dritte die aufgerufene Domain oder Subdomain mitlesen`,echHelpBenefit2:`Eliminiert zusammen mit DoH das Risiko von Klartext-SNI-Blockaden`,retentionDisabled:`Deaktiviert (Datenschutz erforderlich)`,retentionDisabledDesc:`Protokollierung ist deaktiviert. Das System zeichnet keine DNS-Abfrageprotokolle auf und löscht historische Protokolle sofort.`},u=JSON.parse(`{"title":"Kontoeinstellungen","subtitle":"Verwalten Sie Ihre Sicherheitsanmeldedaten und Systembenutzer.","jwtSecretWarningTitle":"Sicherheitshinweis: Schwaches JWT-Secret","jwtSecretWarningDesc":"Das aktuelle JWT_SECRET ist kürzer als 32 Zeichen, was potenzielle Sicherheitsrisiken birgt. Bitte konfigurieren Sie die Umgebungsvariable KEK_v1, bevor Sie JWT_SECRET rotieren, um sicherzustellen, dass vorhandene Umschlag-verschlüsselte TOTP- und Wiederherstellungsschlüssel entschlüsselbar bleiben.","roleAdmin":"Systemadministrator","roleUser":"Benutzer","personalInfo":"Persönliche Informationen","username":"Benutzername","userId":"Benutzer-ID","changePassword":"Kennwort ändern","currentPassword":"Aktuelles Kennwort","newPassword":"Neues Kennwort","updatePassword":"Kennwort aktualisieren","userManagement":"Benutzerverwaltung (nur Admins)","createUser":"Benutzer erstellen","role":"Rolle","createdAt":"Erstellt am","lastActive":"Zuletzt aktiv am","lastResolve":"Letzte DNS-Auflösung am","actions":"Aktionen","dangerZone":"Gefahrenbereich","clearLogs":"Alle Protokolle löschen","clearLogsDesc":"Dadurch werden alle DNS-Abfrageprotokolle gelöscht, die unter Ihren Profilen generiert wurden. Diese Aktion ist unumkehrbar.","clearLogsBtn":"Protokolle jetzt löschen","deleteAccount":"Konto löschen","deleteAccountDesc":"Löschen Sie Ihr Konto und alle damit verbundenen Daten dauerhaft. Sie verlieren den Zugriff auf alle Ihre DNS-Konfigurationen.","deleteAccountBtn":"Konto dauerhaft löschen","createNewUser":"Neuen Benutzer erstellen","initialPassword":"Initiales Passwort","userRole":"Benutzerrolle","cancel":"Abbrechen","createNow":"Jetzt erstellen","formatTipUsername":"Hinweis zum Benutzernamen: Nur 5 bis 32 Zeichen, Unix-Benutzername-Format","formatTipPassword":"Hinweis zum Passwort: 12-100 Zeichen.","passwordSuccess":"Passwort erfolgreich geändert","updateFailed":"Aktualisierung fehlgeschlagen","confirmDeleteUser":"Sind Sie sicher, dass Sie diesen Benutzer löschen möchten? Alle dem Benutzer gehörenden Profile werden ebenfalls entfernt.","confirmClearLogs":"Sind Sie sicher, dass Sie alle Abfrageprotokolle unter Ihren Profilen löschen möchten? Dies kann nicht rückgängig gemacht werden.","clearLogsSuccess":"Protokolle erfolgreich gelöscht","confirmDeleteAccount":"WARNUNG: Sind Sie sicher, dass Sie Ihr Konto löschen möchten?\\n\\nAlle Ihre DNS-Konfigurationen, benutzerdefinierten Regeln und Abfrageprotokolle werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden!","inactivityPolicy":"Inaktivitätsrichtlinie","inactivityDesc":"Zum Schutz der Privatsphäre und zur Ressourcenschonung werden alle Abfrageprotokolle und DNS-Konfigurationen von Konten, die seit 30 Tagen keine DNS-Auflösung durchgeführt haben, automatisch gelöscht. Das Konto selbst wird nach 90 Tagen ohne Anmeldung gelöscht.","systemSettings":"Systemeinstellungen (nur Admins)","adminOnlyView":"Nur für Administratoren sichtbar","featureToggle":"Funktionsschalter","enableTurnstileSignup":"Captcha auf Registrierungsseite aktivieren","enableTurnstileLogin":"Captcha auf Anmeldeseite aktivieren","totp":{"title":"Authentifikator-App (TOTP)","enabled":"Aktiviert","disabled":"Deaktiviert","setupDesc":"Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu. Verwenden Sie Google Authenticator, Authy oder eine andere TOTP-kompatible App.","setupBtn":"Authentifikator-App (TOTP) einrichten","scanQR":"Scannen Sie diesen QR-Code mit Ihrer Authentifikator-App:","orEnterManually":"Oder geben Sie den Schlüssel manuell ein:","enterCode":"Geben Sie den Code aus Ihrer App zur Bestätigung ein:","enterCodeHint":"Geben Sie den 6-stelligen Code ein, um die korrekte Einrichtung des Schlüssels zu bestätigen.","activate":"TOTP aktivieren","skipPassword":"Passwortloses Anmelden – Nur TOTP-Code bei der Anmeldung anfordern (Passworteingabe überspringen)","disable":"Authentifikator-App (TOTP) deaktivieren","disableTitle":"Authentifikator-App (TOTP) deaktivieren","disableWarning":"Nach dem Deaktivieren von TOTP wird Ihr Konto, sofern keine Passkeys eingerichtet sind, nur noch durch ein Passwort geschützt.","confirmDisable":"TOTP deaktivieren","recoveryKeysTitle":"Bitte speichern Sie Ihre Wiederherstellungsschlüssel","recoveryKeysWarning":"Bitte bewahren Sie den Wiederherstellungsschlüssel an einem sicheren Ort auf (z. B. Passwort-Manager). Jeder Schlüssel kann nur einmal verwendet werden.","copyKeys":"Alle Schlüssel kopieren","copied":"Kopiert!","done":"Fertig, ich habe die Schlüssel gespeichert","activeDesc":"Die Authentifikator-App (TOTP) ist aktiv und generiert 6-stellige Bestätigungscodes."},"activity":{"title":"Aktivitätsprotokoll des Kontos","action":"Ereignis","time":"Zeit","ip":"IP-Adresse","session":"Sitzung","empty":"Keine Aktivitäten aufgezeichnet.","loadMore":"Mehr laden","signup":"Registrieren","loginSuccess":"Anmeldung erfolgreich","loginFail":"Anmeldung fehlgeschlagen","logout":"Abmelden","pwChangeSuccess":"Passwort geändert","pwChangeFail":"Passwortänderung fehlgeschlagen","totpVerifySuccess":"TOTP-Verifizierung erfolgreich","totpVerifyFail":"TOTP-Verifizierung fehlgeschlagen","totpSetup":"TOTP-Authentifikator eingerichtet","totpRemoved":"TOTP-Authentifikator entfernt","recoveryKeyUsed":"Wiederherstellungsschlüssel verwendet","sessionRevoked":"Sitzung widerrufen","reasons":{"user_active":"Aktive Abmeldung","user_revoke":"Sitzung widerrufen","expired":"Sitzung abgelaufen","geolocation_mismatch":"Geografische Abweichung (Zugriffsbeschränkung)","geolocation_missing":"Fehlende geografische Informationen","token_reuse":"Wiederverwendung von Tokens (Sicherheitswarnung)"},"passkeyRegistered":"Passkey registriert","passkeyDeleted":"Passkey gelöscht","passkeyVerifySuccess":"Passkey verifiziert","passkeyVerifyFail":"Passkey-Verifizierung fehlgeschlagen","recoveryKeyRotated":"Wiederherstellungsschlüssel erneuert"},"sessions":{"title":"Aktive Sitzungen","session":"Sitzung","device":"Gerät","ip":"IP-Adresse","loginTime":"Anmeldezeit","expires":"Gültig bis","action":"Aktion","current":"Aktuell","revoke":"Widerrufen","revokeFailed":"Sitzung konnte nicht widerrufen werden.","empty":"Keine aktiven Sitzungen gefunden.","unknownDevice":"Unbekanntes Gerät","revokeOthers":"Andere Sitzungen widerrufen","confirmRevokeOthers":"Andere Sitzungen widerrufen","revokeOthersConfirmText":"Möchten Sie wirklich alle anderen aktiven Sitzungen widerrufen? Alle anderen angemeldeten Geräte werden sofort abgemeldet."},"passkey":{"title":"Passkeys","addBtn":"Passkey hinzufügen","desc":"Verwenden Sie Biometrie (Touch ID, Face ID, Windows Hello) oder Sicherheitsschlüssel (YubiKey) für schnelle, phishing-resistente MFA.","empty":"Noch keine Passkeys hinzugefügt.","addTitle":"Passkey hinzufügen","nameLabel":"Passkey-Name","namePlaceholder":"z. B. my_passkey","promptNotice":"Nach dem Klick auf Weiter fordert Ihr Browser Sie auf, die Registrierung per Biometrie oder Sicherheitsschlüssel abzuschließen.","continue":"Weiter","renameTitle":"Passkey umbenennen","deleteTitle":"Passkey löschen","deleteConfirm":"Sind Sie sicher, dass Sie den Passkey \\"{{name}}\\" löschen möchten? Sie können ihn danach nicht mehr zur Authentifizierung verwenden.","defaultName":"Passkey","notSupported":"Ihr Browser oder Ihre aktuelle Umgebung unterstützt keine Passkeys (WebAuthn).","regFailed":"Passkey-Registrierung fehlgeschlagen","count":"{{count}} konfiguriert","none":"Nicht konfiguriert","created":"Erstellt","lastUsed":"Zuletzt verwendet","neverUsed":"Noch nie verwendet","updated":"Passkey erfolgreich aktualisiert","registered":"Passkey erfolgreich registriert","deleted":"Passkey gelöscht","appNameLabel":"Domain","appNameHelper":"Der Passkey wird an diese Domain gebunden","formatTip":"Hinweis zum Passkey-Namen: 1-30 Zeichen, nur Buchstaben, Zahlen, Unterstriche und Bindestriche erlaubt","verifyPrompt":"Bestätigen Sie mit Biometrie (Touch ID, Face ID, Windows Hello) oder Sicherheitsschlüssel.","changePwNotice":"Beim Absenden werden Sie zur Bestätigung über Passkey aufgefordert.","submitNotice":"Beim Absenden werden Sie zur Bestätigung über Passkey aufgefordert."},"mfaNone":"Keine","resetUserPassword":"Passwort zurücksetzen","resetPasswordTitle":"Benutzerpasswort zurücksetzen","resetPasswordWarning":"Nach dem Zurücksetzen werden alle aktiven Sitzungen dieses Benutzers sofort beendet.","resetPasswordSuccess":"Passwort erfolgreich zurückgesetzt. Alle aktiven Sitzungen wurden beendet.","confirmReset":"Zurücksetzen bestätigen","mfa":{"title":"Multi-Faktor-Authentifizierung (MFA)","enabled":"Konfiguriert","notConfigured":"Nicht konfiguriert","desc":"Passkeys und Authentifikator-Apps (TOTP) dienen als MFA-Methoden. Die Konfiguration mindestens eines Faktors schützt Ihr Konto und ermöglicht passwortlose Anmeldung.","passwordlessTitle":"Passwortlose Anmeldung","passwordlessDesc":"Bei Aktivierung wird die Passworteingabe übersprungen und Ihre Identität direkt per Passkey oder TOTP geprüft.","unconfiguredHint":"Noch keine MFA konfiguriert. Richten Sie unten einen Passkey oder eine Authentifikator-App ein."},"recoveryKey":{"title":"Notfall-Wiederherstellungsschlüssel","desc":"Mit einem Notfall-Wiederherstellungsschlüssel können Sie wieder Zugriff erhalten oder Ihr Passwort zurücksetzen, wenn Sie alle Passkeys oder Authentifikator-Apps verlieren.","configured":"Konfiguriert","notConfigured":"Nicht konfiguriert","kekProtected":"KEK-verschlüsselt","kekTooltip":"Geschützt durch AES-256-GCM-Umschlagverschlüsselung (Envelope Encryption) mit KEK.","viewBtn":"Schlüssel anzeigen","rotateBtn":"Schlüssel erneuern","yourKey":"Ihr 30-stelliger Wiederherstellungsschlüssel","securityTip":"Halten Sie diesen Schlüssel geheim. Jeder mit Zugriff darauf kann auf Ihr Konto zugreifen.","rotateConfirm":"Das Erneuern des Schlüssels macht den aktuellen Schlüssel sofort ungültig. Fortfahren?","confirmRotateBtn":"Erneuern bestätigen","viewVerifyTitle":"Identität bestätigen, um Schlüssel anzuzeigen","rotateVerifyTitle":"Identität bestätigen, um Schlüssel zu erneuern","rotateSuccess":"Wiederherstellungsschlüssel erfolgreich erneuert! Bitte sofort sicher aufbewahren.","legacyNotice":"Ihr Wiederherstellungsschlüssel ist als Einweg-Hash gespeichert und kann nicht entschlüsselt werden. Bitte erneuern Sie ihn."},"verifyIdentity":"Sicherheitsbestätigung","verifyIdentityDesc":"Um Ihr Konto zu schützen, bestätigen Sie bitte Ihre Identität.","usePasskeyInstead":"Mit Passkey bestätigen","changePasswordWithPasskey":"Mit Passkey bestätigen & ändern","enableRegistration":"Benutzerregistrierung aktivieren"}`),d={item1Title:`Obex Schutz-DNS`,item1Desc:`Ein DNS-Resolver auf Basis von Cloudflare Workers & D1, optimiert für Geschwindigkeit und Sicherheit.`,item2Title:`DoH-Privatsphäre`,item2Desc:`Verhindert DNS-Abfangen und schützt Ihre Privatsphäre durch verschlüsselte DNS over HTTPS (RFC 8484) Tunnel.`,item3Title:`Globales Edge-Netzwerk`,item3Desc:`Nutzt das riesige Edge-Netzwerk von Cloudflare für extrem schnelle Auflösung und minimale Latenzzeiten.`,item4Title:`Granulare Filterung`,item4Desc:`Volle Unterstützung für Sperr- und Zulassungslisten, AdGuard-Regeln sowie benutzerdefinierte DNS-Eintrags-Umleitungen.`,item5Title:`Echtzeit-Statistiken`,item5Desc:`Visualisieren Sie den Netzwerkstatus durch detaillierte Abfrageprotokolle und ein umfassendes Dashboard.`,item6Title:`Moderne UI & Darkmode`,item6Desc:`Ein hochdichtes Dashboard für Entwickler und Heimanwender, entwickelt auf Basis von Palantir's Blueprint UI.`,item7Title:`Cloud-native Infrastruktur`,item7Desc:`Die serverlose Architektur garantiert Wartungsfreiheit und unbegrenzte Skalierbarkeit für Ihr privates DNS.`,item8Title:`Mehrere Profile verwalten`,item8Desc:`Erstellen und verwalten Sie separate DNS-Profile für verschiedene Geräte oder Netzwerkumgebungen.`,item9Title:`Mehrere Zugangspunkte`,item9Desc:`Konfigurieren Sie dedizierte Zugangspunkte für verschiedene Geräte, um Protokolle und Statistiken getrennt zu analysieren.`},f={title:`DNS Worker Einrichtungs- und Bereitstellungshandbuch`,subtitle:`Ihre Instanz ist noch nicht vollständig konfiguriert. Bitte führen Sie die folgenden Schritte aus, um DNS Worker zu aktivieren.`,dbStatus:`D1-Datenbankbindung (env.DB)`,jwtStatus:`JWT-Geheimschlüssel (env.JWT_SECRET)`,configured:`Konfiguriert`,missing:`Fehlt / Nicht konfiguriert`,refresh:`Aktualisieren & Überprüfen`,methodCli:`CLI-Bereitstellung`,methodDash:`Cloudflare Dashboard-Bereitstellung`,copy:`Kopieren`,copied:`Kopiert!`,stepDbTitle:`1. D1-Datenbank binden`,stepDbDesc:`Erstellen Sie eine D1-Datenbank und binden Sie diese an Ihren Worker. Führen Sie im Terminal Folgendes aus:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Kopieren Sie die ausgegebenen Details und fügen Sie diese in Ihre wrangler.toml unter [[d1_databases]] ein:`,stepDbCommand2:`[[d1_databases]]
|
|
2
|
+
binding = "DB"
|
|
3
|
+
database_name = "dns_worker_db"
|
|
4
|
+
database_id = "<IHRE_D1_DATABASE_ID>"
|
|
5
|
+
migrations_dir = "migrations"`,stepDbDashDesc:`1. Gehen Sie zu Cloudflare Dashboard -> Workers & Pages -> D1 -> Datenbank erstellen -> Nennen Sie sie 'dns_worker_db'.
|
|
6
|
+
2. Gehen Sie zu Ihrem Worker -> Einstellungen -> Variablen -> D1-Datenbankbindungen -> Bindung hinzufügen.
|
|
7
|
+
3. Setzen Sie den Bindungsnamen auf 'DB' und wählen Sie 'dns_worker_db' als D1-Datenbank aus. Speichern.
|
|
8
|
+
4. Gehen Sie zu Ihrer D1-Datenbank -> Konsole, kopieren Sie das SQL-Tabellenschema-Skript aus dem Migrationsordner und führen Sie es aus.`,stepJwtTitle:`2. JWT-Geheimschlüssel festlegen`,stepJwtDesc:`DNS Worker erfordert ein JWT-Geheimnis zum Signieren von Sitzungstoken. Konfigurieren Sie es als Cloudflare Secret:`,stepJwtCommand1:`wrangler secret put JWT_SECRET`,stepJwtDashDesc:`1. Gehen Sie zu Ihrem Worker -> Einstellungen -> Variablen -> Umgebungsvariablen -> Variable hinzufügen.
|
|
9
|
+
2. Setzen Sie den Namen auf 'JWT_SECRET', wählen Sie den Typ 'Secret' und geben Sie eine sichere Zufallszeichenkette ein.
|
|
10
|
+
3. Speichern und bereitstellen.`,stepJwtDesc2:`Cloudflare Dashboard`,stepJwtCommand2:`https://dash.cloudflare.com/`,stepDeployTitle:`3. Bereitstellen & Migrationen anwenden`,stepDeployDesc:`Führen Sie den Bereitstellungsbefehl aus, um das Frontend zu kompilieren, D1-Datenbankmigrationen automatisch anzuwenden und live zu gehen:`,stepDeployCommand:`npm run deploy`,stepDeployDashDesc:`Wenn Sie alle Konfigurationen über das Cloudflare-Dashboard abgeschlossen haben, gehen Sie zur Registerkarte 'Bereitstellungen' Ihres Workers und klicken Sie auf 'Bereitstellen' oder 'Neu bereitstellen'.`,jwtGeneratorTitle:`Sicherer JWT_SECRET-Generator`,jwtGeneratorDesc:`Verwenden Sie diesen kryptografisch sicheren Schlüsselgenerator, um ein zufälliges 64-stelliges alphanumerisches Geheimnis für env.JWT_SECRET zu generieren.`,regenerate:`Neu generieren`};var p={common:e,nav:t,theme:n,auth:r,setup:i,rules:a,analytics:o,logs:s,filtering:c,settings:l,account:u,intro:d,deploymentGuide:f};export{u as account,o as analytics,r as auth,e as common,p as default,f as deploymentGuide,c as filtering,d as intro,s as logs,t as nav,a as rules,l as settings,i as setup,n as theme};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const e={account:`Cuenta`,logout:`Cerrar sesión`,selectProfile:`Seleccionar perfil`,add:`Añadir`,newProfileName:`Nuevo nombre de perfil...`,profileNameFormatTip:`Indicación sobre el nombre de perfil: 1-30 caracteres, no debe duplicar nombres existentes`,profileLimitExceeded:`Límite de perfiles alcanzado (máx. {{max}})`,profileNameExists:`Este nombre de perfil ya existe`,profileNameFormatError:`Formato de nombre de perfil no válido`,create:`Crear`,welcome:`Bienvenido`,createProfileToStart:`Crea un perfil para comenzar.`,loading:`Cargando...`,errorNetwork:`Error de red`,confirmDelete:`¿Estás seguro de que quieres eliminar este perfil?`,confirmLogout:`¿Estás seguro de que quieres cerrar sesión?`,notFound:`404 - Página no encontrada`,notFoundDesc:`La página que buscas no existe o ha sido trasladada.`,backToHome:`Volver al inicio`,apac:`Asia-Pacífico`,mainlandChina:`China continental`,HongKong:`Hong Kong`,Singapore:`Singapur`,Tokyo:`Tokio`,NorthAmerica:`Norteamérica`,nae:`Este de Norteamérica`,naw:`Oeste de Norteamérica`,eu:`Europa`,invalidFormat:`Formato de archivo no válido`,import:`Importar`,importSuccess:`Perfil importado con éxito`,importError:`Error al importar perfil. Por favor, comprueba el formato e inténtalo de nuevo más tarde`,save:`Guardar`,saveSuccess:`Configuración guardada`},t={setup:`Instalación`,rules:`Reglas`,stats:`Estadísticas`,logs:`Registros`,filter:`Listas de filtro`,settings:`Ajustes`},n={light:`Claro`,dark:`Oscuro`,system:`Sistema`},r={login:`Iniciar sesión en DNS Worker`,signup:`Crear una cuenta para empezar`,welcomeBack:`¡Bienvenido de nuevo! Introduce tus credenciales`,protectInternet:`Protege tu primer paso en internet`,error:`Error`,username:`Nombre de usuario`,usernamePlaceholder:`Tu nombre de usuario`,password:`Contraseña`,passwordPlaceholder:`Tu contraseña`,loginBtn:`Iniciar sesión`,signupBtn:`Registrarse`,totpVerification:`Verificación TOTP`,noAccount:`¿No tienes una cuenta? Regístrate ahora`,haveAccount:`¿Ya tienes una cuenta? Volver al inicio de sesión`,formatTipUsername:`Indicación sobre el nombre de usuario: 5 a 32 caracteres, formato Unix (debe empezar con letra minúscula o guion bajo, y solo puede contener letras minúsculas, números, guiones bajos y guiones medios)`,formatTipPassword:`Indicación sobre la contraseña: 12-100 caracteres.`,authFailed:`Autenticación fallida. Por favor, comprueba tu nombre de usuario o contraseña`,networkError:`Error de red. Por favor, inténtalo de nuevo más tarde`,turnstileRequired:`Por favor, completa el captcha`,turnstileError:`Error al cargar el servicio de captcha. Comprueba la clave del sitio o la configuración del dominio`,verifying:`Realizando comprobación de seguridad...`,passwordLeaked:`Esta contraseña ha sido filtrada. Para la seguridad de tu cuenta, por favor utiliza una contraseña aleatoria/fuerte.`,usernameExists:`Este nombre de usuario ya está registrado. Por favor, prueba con otro.`,skip:`Omitir`,showPassword:`Mostrar contraseña`,hidePassword:`Ocultar contraseña`,geolocationRequired:`Error de geolocalización. Por favor, intente ingresar de nuevo.`,unauthorizedDefault:`Tu sesión ha caducado. Por favor, inicia sesión de nuevo.`,unauthorizedGeo:`Cambio de ubicación detectado (límite de distancia superado). Sesión cerrada.`,unauthorizedExpired:`Tu sesión ha caducado. Por favor, inicia sesión de nuevo.`,unauthorizedReuse:`Alerta de seguridad: inicio de sesión duplicado detectado. Sesión cerrada.`,unauthorizedRevoked:`Tu sesión ha sido revocada o eliminada. Por favor, inicia sesión de nuevo.`,sessionLockTitle:`Bloqueo de sesión por inactividad`,sessionLockDesc:`Bloquea la interfaz con un PIN de 4 dígitos cuando la aplicación está inactiva para proteger las sesiones activas del acceso físico no autorizado.`,enableSessionLock:`Activar bloqueo de sesión`,inactivityTimeout:`Tiempo de inactividad`,timeout1m:`1 minuto`,timeout2m:`2 minutos`,timeout5m:`5 minutos`,timeout15m:`15 minutos`,timeout30m:`30 minutos`,timeout60m:`60 minutos`,changePin:`Cambiar PIN`,disablePin:`Desactivar bloqueo de sesión`,configurePin:`Configurar PIN`,newPin:`Nuevo PIN de 4 dígitos`,pinHelper:`Solo dígitos, ej. 1234`,confirmPin:`Confirmar nuevo PIN`,verifyIdentity:`Verificar identidad`,usePassword:`Usar contraseña`,use2fa:`Usar código TOTP`,totpCode:`Código TOTP`,currentPassword:`Contraseña actual`,disablePinWarning:`Desactivar el PIN desactivará por completo la función de bloqueo de sesión por inactividad.`,pinFormatTip:`El PIN debe tener exactamente 4 dígitos`,pinMatchTip:`Los PIN no coinciden`,passwordRequired:`Se requiere contraseña para la verificación`,sessionLocked:`Sesión bloqueada por inactividad`,sessionExpired:`Demasiados intentos fallidos. Sesión terminada.`,pinIncorrect:`PIN incorrecto`,attemptsRemaining:`{{count}} intentos restantes`,logoutAndReturn:`Cerrar sesión`,lockNow:`Bloquear ahora`,cfErrorWithDetails:`Error de Cloudflare Edge (Error {{code}}: {{desc}}). El servicio no está disponible temporalmente, inténtelo de nuevo más tarde. {{rayId}}`,cfErrorCodeOnly:`Error de Cloudflare Edge (Error {{code}}). El servicio no está disponible temporalmente. {{rayId}}`,cfErrorGeneric:`Error de Cloudflare Edge, servicio no disponible temporalmente. Inténtelo de nuevo más tarde. {{rayId}}`,htmlErrorGeneric:`El servidor devolvió una respuesta inesperada (HTTP {{status}}). Inténtelo de nuevo más tarde.`,tooManyAttempts:`Demasiadas solicitudes o intentos. Por favor, inténtelo de nuevo más tarde.`,dbQuotaExceeded:`Se ha superado la cuota diaria de lectura de la base de datos. Espere al reinicio diario.`,noUsersRegistered:`No hay cuentas registradas. Por favor, regístrese como administrador.`,registerAdminTitle:`Registrar cuenta de administrador`,registerAdminDesc:`No hay cuentas en el sistema. El primer usuario será el administrador del sistema.`,goToRegisterAdmin:`Registrar admin`,dbNotInitialized:`La base de datos no está inicializada o faltan tablas. Ejecute npm run db:migrate:prod en la terminal.`,verifyWithPasskey:`Verificar con Passkey`,orUseTotp:`O usar código de autenticador`,passwordRequiredFirst:`Por favor, introduzca su contraseña primero`,passkeyVerification:`Verificación con Passkey`,passkeyPromptDesc:`Verifique usando sus datos biométricos registrados o clave de seguridad`,forgotPassword:`¿Olvidó su contraseña?`,forgotPasswordTitle:`Restablecer contraseña`,forgotPasswordDesc:`Recupere su cuenta de forma segura mediante autenticación multifactor (Passkey o TOTP).`,noMfaContactAdmin:`Esta cuenta no tiene configurada autenticación multifactor (Passkey o TOTP). Comuníquese con un administrador para restablecer su contraseña.`,chooseMfaForReset:`Elija un método de autenticación para verificar su identidad:`,authViaPasskey:`Verificar con Passkey`,authViaPasskeyDesc:`Verificación en un clic mediante biometría o llave de seguridad de hardware`,authViaTotp:`Verificar con aplicación de autenticación (TOTP)`,authViaTotpDesc:`Ingrese el código dinámico de 6 dígitos de su aplicación`,authViaRecoveryKey:`Usar clave de recuperación de emergencia`,authViaRecoveryKeyDesc:`Ingrese una clave de recuperación de 10 caracteres`,verifyAndProceed:`Verificar y continuar`,setNewPassword:`Establecer nueva contraseña`,setNewPasswordDesc:`Identidad verificada. Por favor, introduzca una nueva contraseña para su cuenta.`,newPassword:`Nueva contraseña`,confirmNewPassword:`Confirmar nueva contraseña`,passwordMismatch:`Las nuevas contraseñas no coinciden`,saveAndReset:`Guardar y restablecer`,resetSuccessTitle:`Contraseña restablecida con éxito`,resetSuccessDesc:`Su contraseña ha sido actualizada y todas las sesiones anteriores se han cerrado. Inicie sesión con su nueva contraseña.`,goToLogin:`Ir a iniciar sesión`,mfaSetupTitle:`Mejore la seguridad de su cuenta`,mfaSetupDesc:`Configurar la autenticación multifactor (MFA) protege su cuenta y desbloquea el inicio de sesión sin contraseña y la recuperación de cuenta.`,mfaRecommended:`Recomendado`,passkeySignupDesc:`Use Touch ID, Face ID o llaves de seguridad. Rápido y resistente al phishing.`,bindPasskeyNow:`Registrar Passkey ahora`,mfaUniversal:`Universal`,totpSignupDesc:`Use Google Authenticator, 1Password o cualquier app compatible con TOTP.`,setupTotpBtn:`Configurar aplicación de autenticación`,skipMfaSetup:`Omitir por ahora`,backToMfaOptions:`Volver a las opciones`,otherOptions:`Otras opciones`,next:`Siguiente`,mfaVerification:`Autenticación multifactor`,totpPrompt:`Introduce el código dinámico de 6 dígitos de tu aplicación de autenticación`,recoveryPrompt:`Introduce tu clave de recuperación de 30 dígitos (5 grupos de 6 dígitos)`,recoveryChecksumError:`Error de suma de control: este grupo no es divisible por 11`,recoveryChecksumErrorDesc:`Error de suma de control en el grupo {{groups}}, compruébalo e inténtalo de nuevo`,backToPasskey:`Volver a la verificación con Passkey`,recoveryKeyRequired:`Por favor, introduce tu clave de recuperación`,totpFormatError:`Por favor, introduce un código válido de 6 dígitos`,registrationDisabledTitle:`Registro deshabilitado`,registrationDisabledDesc:`El registro de nuevos usuarios está actualmente cerrado. Póngase en contacto con el administrador para obtener una cuenta.`,backToLogin:`Volver al inicio de sesión`,jwtSecretPreset:`Se detectó el JWT_SECRET predeterminado. Modifique el JWT_SECRET preestablecido en las variables de entorno antes de implementar.`,jwtSecretMissing:`Falta JWT_SECRET. Configure una clave segura en las variables de entorno antes de implementar.`,jwtSecretInvalid:`Formato de JWT_SECRET no válido, compruebe la configuración.`},i={title:`Guía de instalación`,subtitle:`Configura tus dispositivos para gestionar la seguridad de tu internet con DNS Worker.`,regionOptimization:`Optimización de región de conexión (Windows)`,otherRegion:`Otras regiones`,copied:`Copiado al portapapeles`,verifyConnection:`Verificar conexión`,verifying:`Verificando...`,connected:`Conectado`,notConnected:`No conectado`,profileMatch:`Estás filtrando a través de este perfil.`,profileMismatch:`Estás usando Obex, pero el ID de perfil no coincide.`,verifyHint:`Completa la siguiente configuración y haz clic en el botón para verificar.`,refreshStatus:`Actualizar estado`,egressIp:`Dirección IP de salida`,currentLocation:`Ubicación actual`,edgeServer:`Servidor Edge`,dohUrlTitle:`URL de DoH del perfil actual`,accessPointTitle:`URL de acceso DoH`,defaultAccessPointName:`dispositivo-1`,moreAccessPoints:`Más puntos de acceso ↗`,accessPointName:`Nombre del punto de acceso`,accessPointToken:`Clave de acceso`,addAccessPoint:`Añadir punto de acceso`,renameAccessPoint:`Renombrar`,rotateToken:`Rotar clave`,rotateTokenConfirmDesc:`Rotar la clave desconectará inmediatamente todos los dispositivos que usen la clave antigua. ¿Seguro que quieres continuar?`,deleteAccessPoint:`Eliminar`,deleteAccessPointConfirm:`¿Estás seguro de que quieres eliminar este punto de acceso?`,manageAccessPoints:`Gestionar puntos de acceso`,searchAccessPoints:`Buscar puntos de acceso...`,accessPointNameExists:`El nombre del punto de acceso ya existe`,accessPointCreated:`Punto de acceso creado con éxito`,accessPointRenamed:`Punto de acceso renombrado con éxito`,accessPointDeleted:`Punto de acceso eliminado con éxito`,accessPointNameFormatTip:`Indicación sobre el punto de acceso: 1-30 caracteres. Solo se permiten letras, números, guiones bajos y guiones medios`,accessPointLimitExceeded:`Límite de puntos de acceso alcanzado (máx. {{max}})`,tokenRotated:`Clave de acceso rotada con éxito`,whatIsDoh:`¿Qué es DoH?`,dohDesc:`DNS over HTTPS (DoH) es un protocolo para realizar consultas de DNS a través de una conexión HTTPS cifrada.`,dohBenefit1:`Evita la manipulación y la interceptación del tráfico DNS por parte de terceros`,dohBenefit2:`Aumenta la seguridad en la resolución de nombres DNS y al navegar por internet`,learnMore:`Saber más`,copyUrl:`Copiar URL`,browsers:`Navegadores`,browserTitle:`Configuración del navegador (Chrome/Edge)`,browserSteps:`Configuración > Privacidad y seguridad > Seguridad > Usar DNS seguro > Personalizado > Pegar URL.`,browserTips:`O copia esta dirección en tu barra de direcciones:`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Los dispositivos Apple admiten la configuración rápida mediante perfiles de configuración.`,appleWarning:`Los perfiles no se pueden instalar en el "Modo de aislamiento (Lockdown Mode)". Comprueba que no esté activo antes de instalar.`,downloadConfig:`Descargar perfil de configuración`,appleInstallHint:`Después de la descarga, ve a Ajustes > Perfil descargado para realizar la instalación`,windows:`MS Windows`,windowsTitle:`Configuración de Windows 11 [Región: {{region}}]`,windowsStep0:`Configuración > Red e Internet`,windowsStep1:`Propiedades > Asignación de servidor DNS > Editar > Manual.`,windowsStep2:`Selecciona e introduce las IP de DNS:`,windowsStep3:`Activa DoH (plantilla manual) y pega la URL.`,windowsStep4:`Desactiva el fallback a texto plano.`,android:`Android`,androidTitle:`Android 9+`,androidDesc:`Admite 'DNS privado' nativo del sistema (DoT) o aplicaciones de terceros para DoH.`,androidDotTitle:`DNS privado (DoT - Modo Serverfull)`,androidDotDesc:`Ajustes > Redes e Internet > DNS privado > Nombre de host del proveedor de DNS privado:`,androidWarning:`Nota: El 'DNS privado' nativo de Android utiliza el protocolo DoT. Cuando se implementa en Cloudflare Workers, use aplicaciones como Intra para DoH. En modo Serverfull con TLS configurado, puede usar directamente el nombre de host DoT anterior.`,dynamicFromDomain:`Dinámico (desde "{{domain}}")`,dynamicFromDomainV6:`Dinámico IPv6 (desde "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (proxy DoH Cloudflared)`,linuxDesc:`Ejecuta un proxy DNS local ligero para enviar las consultas DNS cifradas mediante DoH a Obex.`,linuxStep1:`Ejecuta el siguiente script para instalar cloudflared y crear un servicio systemd (escucha en 127.0.0.1:53).`,linuxStep2:`Cambia el DNS del sistema a 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Usa este resolvedor en todos los dispositivos de tu red configurándolo como servidor DoH del router.`,routerosStep1:`Ejecuta en la terminal de RouterOS (RouterOS 7):`,routerosNote:`Las consultas reenviadas por el router aparecen en los registros como el router, no como dispositivos individuales. Configura los dispositivos directamente si necesitas registros por dispositivo.`,routerosDocs:`Documentación de DNS de MikroTik`,accessPointsCardTitle:`Puntos de acceso`,currentAccessPoint:`Punto de acceso actual`,selectAccessPointToConfigure:`Seleccionar punto de acceso para configurar`},a={title:`Reglas personalizadas`,subtitle:`Controla manualmente el comportamiento de resolución de dominios específicos (bloquear, permitir o redirigir).`,action:`Acción`,typeBlock:`Bloquear (BLOCK)`,typeAllow:`Permitir (ALLOW)`,typeRedirect:`Redirigir (REDIRECT)`,pattern:`Patrón de dominio (Pattern)`,patternPlaceholder:`example.com o *.test.com`,addRule:`Añadir regla`,redirectSettings:`Ajustes de redirección`,aRecord:`Registro A (IPv4)`,aaaaRecord:`Registro AAAA (IPv6)`,cnameRecord:`Registro CNAME`,txtRecord:`Registro TXT`,optional:`(opcional)`,ipv4Placeholder:`p. ej., 1.2.3.4`,ipv6Placeholder:`p. ej., 2001:db8::1`,cnamePlaceholder:`p. ej., destino.com`,txtPlaceholder:`Introduce el contenido del texto...`,saveRedirectRule:`Guardar y añadir regla de redirección`,noRulesTitle:`Sin reglas personalizadas`,noRulesDesc:`Aún no has añadido ninguna regla manual.`,tableAction:`Acción`,tablePattern:`Patrón`,tableDetails:`Detalles de resolución`,tableOps:`Operaciones`,labelBlock:`Bloquear`,labelAllow:`Permitir`,labelRedirect:`Redirigir`,detailBlock:`Redirigir a: `,detailAllow:`Enviar al servidor upstream`,patternEmpty:`El patrón de dominio no puede estar vacío`,duplicatePattern:`Ya existe una regla para este dominio`,addSuccess:`Regla añadida con éxito`,addFailed:`Error al añadir la regla`,updateSuccess:`Regla actualizada con éxito`,updateFailed:`Error al actualizar la regla`,tableCreatedAt:`Fecha de adición`,clickToSort:`Haga clic para ordenar`},o={customRange:`Periodo personalizado`,startTime:`Hora de inicio`,endTime:`Hora de fin`,apply:`Aplicar`,custom:`Personalizado`,totalQueries:`Consultas totales`,blocked:`Bloqueado`,redirected:`Redirigido`,blockRate:`Tasa de bloqueo`,activeDevices:`Dispositivos activos`,activeIPs:`Direcciones IP activas`,queryTrend:`Tendencia de consultas`,noRecords:`Sin registros en este periodo`,topAllowed:`Dominios más permitidos (Allowed)`,topBlocked:`Dominios más bloqueados (Blocked)`,noData:`Sin datos`,clientActivity:`Actividad de los clientes`,ipAddress:`Dirección IP`,location:`Ubicación`,queries:`Consultas`,destinationDistribution:`Distribución de destinos de tráfico`,requests:`Peticiones`,topIsps:`Proveedores principales`,pressToShowMore:`Haz clic para mostrar más`,maximize:`Maximizar`,minimize:`Minimizar`},s={title:`Registro de consultas`,subtitle:`Consulta los registros de resolución DNS y de bloqueo para este perfil.`,realtime:`Tiempo real`,allStatus:`Todos los estados`,onlyPass:`Permitidos`,onlyBlock:`Bloqueados`,onlyRedirect:`Redirigidos`,searchPlaceholder:`Buscar dominios...`,noResults:`No se han encontrado resultados`,noRecords:`Sin registros`,noResultsDesc:`No se encontraron registros de dominio que coincidan con "{{query}}".`,noRecordsDesc:`No se recibieron consultas DNS en el periodo seleccionado.`,tableTime:`Hora`,tableDomain:`Dominio`,tableAnswer:`Resultado`,tableSource:`Origen`,tableType:`Tipo`,tableStatus:`Estado`,tableReason:`Causa`,loadedAll:`Se han cargado los {{count}} registros`,realtimeLoadMoreTip:`Desactiva el modo de "Tiempo real" para cargar más`,filterAccessPoint:`Punto de acceso`,allAccessPoint:`Todos los puntos de acceso`,allCountry:`Todos los países`,filterCountry:`País de destino`,allIsp:`Todos los ISPs`,filterIsp:`ISP`,timeRange:`Rango de tiempo`,clearFilters:`Limpiar filtros`,details:`Detalles de consulta`,detailAccessPoint:`Punto de acceso`,basicInfo:`Información básica`,detailDomain:`Dominio`,detailType:`Tipo`,detailTime:`Hora`,detailLatency:`Latencia`,detailProfile:`Perfil utilizado`,detailStatus:`Estado`,detailUpstream:`Servidor upstream`,detailReason:`Causa`,detailNoReason:`Ninguna (Permitido)`,detailECS:`ECS`,resolutionResult:`Resultado de la resolución`,noResult:`Sin resultados`,networkDetails:`Detalles de red`,clientSource:`Cliente (Origen)`,destination:`Destino (Dirección resuelta)`,quickActions:`Acciones rápidas`,actionAllow:`Permitir`,actionBlock:`Bloquear`,actionRedirect:`Redirigir`,statusPass:`Permitido`,statusBlock:`Bloqueado`,statusRedirect:`Redirigido`,export:`Exportar registros`,rewritten:`Reescrito`,logDetails:`Detalles del registro`,searchCountry:`Buscar países...`,noMatchingCountries:`No se encontraron países coincidentes`,searchIsp:`Buscar ISP...`,noMatchingIsps:`No se encontraron ISPs coincidentes`,loadingIsps:`Cargando ISPs...`,loggingDisabledTitle:`Registro desactivado`,loggingDisabledDesc:`La retención de registros para este perfil está configurada como 'Desactivado'. No se registran consultas. Para ver registros, habilite la retención en Configuración.`},c={title:`Listas de bloqueo externas`,subtitle:`Suscríbete a listas de bloqueo de dominios mantenidas por terceros (como AdGuard, etc.).`,formatDisclaimer:`Este sistema solo admite formatos limitados de listas AdGuard y listas de dominios puros. Solo se admiten reglas de bloqueo básicas (p. ej., ||example.com^); se ignorarán las exclusiones "@@", las reglas de reescritura "$" y los comodines "*". Los subdominios se asocian de forma automática.`,syncAll:`Sincronizar todas las listas`,urlPlaceholder:`Introduce la URL de la lista...`,addSubscription:`Añadir suscripción`,supportedFormats:`Formatos de lista admitidos:`,formatAdGuard:`Compatible con reglas de filtro ||domain.com^.`,formatHosts:`Compatible con archivos hosts estándar (p. ej., 0.0.0.0 domain.com).`,noListsTitle:`No se han añadido listas`,noListsDesc:`Aún no te has suscrito a ninguna lista de bloqueo externa.`,tableUrl:`URL de la lista`,tableLastSync:`Última sincronización`,tableStatus:`Estado`,tableOps:`Operaciones`,neverSynced:`Nunca`,enabled:`Activo`,disabled:`Sincronización fallida`,statusNormal:`Normal`,statusDisabled:`Desactivada`,statusOutdated:`Obsoleto`,statusMissing:`Faltante`,presetOisdBig:`OISD Big (Bloqueo de publicidad/malware)`,presetOisdNsfw:`OISD NSFW (Bloqueo de pornografía/contenido adulto)`,presetAdGuard:`AdGuard AdServers (Servidores de anuncios)`,presetStevenBlack:`StevenBlack Hosts (Bloqueador todo en uno)`,syncTaskStarted:`Tarea de sincronización iniciada`,syncCheckComplete:`Comprobación de sincronización completada`,syncTaskFailed:`Sincronización fallida`,syncing:`Sincronizando...`,syncSuccess:`Sincronización completada con éxito`,syncError:`Sincronización fallida`,syncErrorDesc:`No se pudo descargar o analizar la lista de bloqueo. Comprueba el enlace y su accesibilidad.`,deleteConfirm:`¿Quieres eliminar esta suscripción?`,deleteSuccess:`Lista eliminada con éxito`,deleteError:`Error al eliminar la lista`,addSuccess:`Lista añadida con éxito`,addError:`Error al añadir la lista`,listEnabled:`Lista activa`,listEnabledHint:`Desactívala para dejar de filtrar con esta lista sin eliminarla. Se conservan su suscripción e historial de sincronización.`,listEnabledToast:`Lista activada - reconstruyendo el filtro`,listDisabledToast:`Lista desactivada - reconstruyendo el filtro`,checkDomain:`Comprobar un dominio`,checkDomainHint:`Las listas se almacenan como filtros compactos, por lo que sus entradas no se pueden examinar. Puedes probar cualquier dominio contra esta lista al instante.`,check:`Comprobar`,checkBlocked:`Bloqueado por esta lista`,checkNotBlocked:`No bloqueado por esta lista`,checkViaParent:`(coincide con un dominio superior)`,checkNotSynced:`Esta lista aún no ha terminado de sincronizarse, así que no hay nada que comprobar.`,checkListDisabled:`Esta lista está actualmente desactivada, por lo que no está filtrando nada ahora mismo.`,checkProbabilisticRate:`Los filtros son probabilísticos: aproximadamente 1 de cada {{odds}} coincidencias es un falso positivo. Añadir una excepción también cubre todos sus subdominios.`,checkProbabilistic:`Los filtros son probabilísticos, por lo que una pequeña parte de las coincidencias son falsos positivos. Añadir una excepción también cubre todos sus subdominios.`,checkAllowAction:`Permitir de todos modos`,checkAllowed:`Excepción añadida - este dominio ahora se resuelve`,allowRuleAdded:`Excepción añadida para {{domain}}`},l={title:`Ajustes de perfil`,subtitle:`Gestiona tu estrategia de resolución DNS y opciones avanzadas.`,saveChanges:`Guardar todos los cambios`,saveSuccess:`Configuración guardada con éxito`,saveError:`Error al guardar la configuración, por favor inténtalo de nuevo más tarde`,upstreamTitle:`Servidor upstream`,dohUrl:`URL de DoH`,dnsIP:`IP de DNS`,classicDns:`DNS clásico`,httpsOnly:`Admitir solo HTTPS`,upstreamDesc:`Todas las consultas no bloqueadas se reenviarán a este servidor. Admite DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) o DNS clásico. El DNS clásico se reenvía a través de TCP.`,defaultPolicyTitle:`Comportamiento de filtrado predeterminado`,onNoMatch:`Cuando no coincide ninguna regla`,allowAll:`Permitir todas las consultas`,blockAll:`Bloquear todas las consultas`,logRetentionTitle:`Retención de registros`,retentionDuration:`Periodo de retención`,retentionDesc:`Los registros se eliminan automáticamente. `,skipLogOnPass:`No registrar consultas permitidas`,skipLogOnPassDesc:`Cuando está activado, no se registran las consultas permitidas. Solo se guardan las consultas bloqueadas, redirigidas o fallidas.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`No todos los servidores DNS admiten ECS. En resolvers recursivos como ControlD, ECS solo afecta el enrutamiento interno y no se reenvía al servidor autoritativo.`,sendEcs:`Enviar ECS`,customSubnet:`Subred personalizada`,customIpv4:`Subred IPv4 personalizada`,customIpv6:`Subred IPv6 personalizada`,ipv4Hint:`(p. ej., 1.2.3.0/24)`,ipv6Hint:`(p. ej., 2001:db8::/32)`,testToolTitle:`Herramienta de prueba de resolución en tiempo real`,testDomain:`Dominio de prueba`,recordType:`Tipo de registro`,runTest:`Ejecutar prueba`,domainPlaceholder:`p. ej., google.com`,hitRule:`Regla coincidente / Causa`,defaultAllow:`Política de autorización predeterminada`,parseLatency:`Latencia de resolución`,sourceIp:`Dirección IP de origen`,answerSection:`Sección de respuestas (Answer Section)`,noRecordsReturned:`Esta consulta no devolvió ningún registro.`,diagnostics:`Información de diagnóstico`,errorDetail:`Detalles del error`,upstreamResponse:`Respuesta del upstream`,presetCloudflareSecurity:`Cloudflare Security (Rápido/Protección frente a malware/phishing)`,presetCloudflareFamilies:`Cloudflare Families (Rápido/Protección frente a malware/contenido adulto)`,presetQuad9:`Quad9 (Protección frente a malware/Sin registros/Sin ECS)`,presetQuad9Ecs:`Quad9 ECS (Protección frente a malware/Sin registros/Con ECS)`,presetControlDFree:`ControlD Free (Protección frente a publicidad/trackers/malware/phishing)`,presetControlDUncensored:`ControlD Uncensored (Evitar censura)`,presetAdGuard:`AdGuard (Bloqueador de publicidad y trackers)`,presetAdGuardFamily:`AdGuard Family protection (Publicidad/trackers/contenido adulto/búsqueda segura)`,retention10m:`10 minutos`,retention1h:`1 hora`,retention24h:`24 horas`,retention7d:`7 días`,retention30d:`30 días`,retention90d:`90 días (Máximo)`,blockModeTitle:`Modo de respuesta de bloqueo`,blockModeDesc:`Contenido devuelto cuando un dominio es bloqueado`,default:`Predeterminado`,NXDOMAIN:`NXDOMAIN (El dominio no existe)`,NODATA:`NODATA (Sin datos)`,customIP:`IP personalizada`,export:`Exportar configuración`,exportSuccess:`Configuración exportada con éxito`,exportError:`Error al exportar la configuración. Por favor, inténtalo de nuevo más tarde`,nameUpdateSuccess:`Nombre de perfil actualizado`,saving:`Guardando...`,echTitle:`Reescribir ECH`,enableEch:`Activar reescritura ECH`,echDesc:`Para dominios delegados en Cloudflare, reescribe automáticamente los parámetros ECH y el SNI superficial en consultas HTTPS (Tipo 65) / SVCB (Tipo 64) para proteger la privacidad.`,echFrontingTitle:`SNI externo (ECH Fronting)`,echFrontingDesc:`Nombre de dominio visible en texto claro en el handshake TLS exterior`,echFrontingCustomPlaceholder:`Ingrese un dominio de fronting personalizado, ej. crypto.cloudflare.com`,echPreferred:`Recomendado`,whatIsEch:`¿Qué es ECH (Encrypted Client Hello)?`,echHelpDesc:`ECH es una extensión de privacidad clave de TLS 1.3 que cifra completamente el dominio de destino real (Inner SNI), mostrando solo un dominio simulado (Outer SNI) a intermediarios.`,echHelpBenefit1:`Evita que los ISP y observadores vean el dominio exacto o subdominio que visita`,echHelpBenefit2:`Junto con DoH y ECH Fronting, elimina el riesgo de filtración de SNI en texto claro`,retentionDisabled:`Desactivado (Necesidad de privacidad)`,retentionDisabledDesc:`El registro está desactivado. El sistema no registrará ningún registro de consultas DNS y borrará los registros históricos de inmediato.`},u=JSON.parse(`{"title":"Ajustes de cuenta","subtitle":"Gestiona tus credenciales de seguridad y usuarios del sistema.","jwtSecretWarningTitle":"Aviso de seguridad: Secreto JWT débil","jwtSecretWarningDesc":"El JWT_SECRET actual tiene menos de 32 caracteres, lo que presenta riesgos potenciales de seguridad. Configure la variable de entorno KEK_v1 antes de rotar JWT_SECRET para garantizar que las claves TOTP y de recuperación cifradas por sobre sigan siendo descifrables.","roleAdmin":"Administrador del sistema","roleUser":"Usuario","personalInfo":"Información personal","username":"Nombre de usuario","userId":"ID de usuario","changePassword":"Cambiar contraseña","currentPassword":"Contraseña actual","newPassword":"Nueva contraseña","updatePassword":"Actualizar contraseña","userManagement":"Gestión de usuarios (solo administradores)","createUser":"Crear usuario","role":"Rol","createdAt":"Creado el","lastActive":"Última actividad el","lastResolve":"Última resolución el","actions":"Acciones","dangerZone":"Zona de peligro","clearLogs":"Borrar todos los registros","clearLogsDesc":"Esto eliminará todos los registros de consultas DNS generados bajo tus perfiles. Esta acción es irreversible.","clearLogsBtn":"Borrar registros ahora","deleteAccount":"Eliminar cuenta","deleteAccountDesc":"Elimina de forma permanente tu cuenta y todos los datos asociados. Perderás el acceso a todas tus configuraciones DNS.","deleteAccountBtn":"Eliminar cuenta permanentemente","createNewUser":"Crear nuevo usuario","initialPassword":"Contraseña inicial","userRole":"Rol de usuario","cancel":"Cancelar","createNow":"Crear ahora","formatTipUsername":"Indicación sobre el nombre de usuario: Solo de 5 a 32 caracteres, formato Unix","formatTipPassword":"Indicación sobre la contraseña: 12-100 caracteres.","passwordSuccess":"Contraseña cambiada con éxito","updateFailed":"Actualización fallida","confirmDeleteUser":"¿Estás seguro de que quieres eliminar a este usuario? Todos los perfiles que posea también se eliminarán.","confirmClearLogs":"¿Estás seguro de que quieres eliminar todos los registros de consultas de tus perfiles? Esto no se puede deshacer.","clearLogsSuccess":"Registros borrados con éxito","confirmDeleteAccount":"ADVERTENCIA: ¿Estás seguro de que quieres eliminar tu cuenta?\\n\\nTodas tus configuraciones DNS, reglas personalizadas y registros de consultas se eliminarán de forma permanente. ¡Esta acción no se puede deshacer!","inactivityPolicy":"Política de inactividad","inactivityDesc":"Para proteger la privacidad del usuario y ahorrar recursos, todos los registros de consultas y configuraciones de DNS de cuentas sin actividad de resolución durante 30 días se eliminarán automáticamente. La cuenta en sí se eliminará tras 90 días sin iniciar sesión.","systemSettings":"Ajustes del sistema (solo administradores)","adminOnlyView":"Solo visible para administradores","featureToggle":"Interruptores de funciones","enableTurnstileSignup":"Activar captcha en la página de registro","enableTurnstileLogin":"Activar captcha en la página de inicio de sesión","totp":{"title":"Aplicación de autenticación (TOTP)","enabled":"Activado","disabled":"Desactivado","setupDesc":"Añade un nivel adicional de seguridad a tu cuenta. Utiliza Google Authenticator, Authy o cualquier app compatible con TOTP.","setupBtn":"Configurar aplicación de autenticación (TOTP)","scanQR":"Escanea este código QR con tu app de autenticación:","orEnterManually":"O introduce la clave manualmente:","enterCode":"Introduce el código de tu app para confirmar:","enterCodeHint":"Introduce el código de 6 dígitos para verificar la correcta configuración de la clave.","activate":"Activar TOTP","skipPassword":"Acceso sin contraseña – Solicitar solo el código TOTP al iniciar sesión (omitir introducción de contraseña)","disable":"Desactivar aplicación de autenticación (TOTP)","disableTitle":"Desactivar aplicación de autenticación (TOTP)","disableWarning":"Después de desactivar TOTP, si no hay llaves de paso (Passkeys) configuradas, su cuenta solo estará protegida por contraseña.","confirmDisable":"Desactivar TOTP","recoveryKeysTitle":"Por favor, guarda tus claves de recuperación","recoveryKeysWarning":"Guarda tu clave de recuperación en un lugar seguro (p. ej., un gestor de contraseñas). Cada clave solo se puede usar una vez.","copyKeys":"Copiar todas las claves","copied":"¡Copiado!","done":"Hecho, he guardado las claves","activeDesc":"La aplicación de autenticación (TOTP) está activa y genera códigos de 6 dígitos."},"activity":{"title":"Registro de actividad de la cuenta","action":"Evento","time":"Hora","ip":"Dirección IP","session":"sesión","empty":"No hay actividad registrada.","loadMore":"Cargar más","signup":"Registro","loginSuccess":"Inicio de sesión correcto","loginFail":"Inicio de sesión fallido","logout":"Cerrar sesión","pwChangeSuccess":"Contraseña cambiada","pwChangeFail":"Cambio de contraseña fallido","totpVerifySuccess":"Verificación TOTP exitosa","totpVerifyFail":"Fallo en la verificación TOTP","totpSetup":"Autenticador TOTP configurado","totpRemoved":"Autenticador TOTP desactivado","recoveryKeyUsed":"Clave de recuperación utilizada","sessionRevoked":"Sesión revocada","reasons":{"user_active":"Cierre de sesión activo","user_revoke":"Sesión revocada","expired":"Sesión caducada","geolocation_mismatch":"Discrepancia geográfica (Acceso restringido)","geolocation_missing":"Falta información geográfica","token_reuse":"Reutilización de tokens (Alerta de seguridad)"},"passkeyRegistered":"Passkey registrada","passkeyDeleted":"Passkey eliminada","passkeyVerifySuccess":"Passkey verificada","passkeyVerifyFail":"Fallo de verificación de Passkey","recoveryKeyRotated":"Clave de recuperación rotada"},"sessions":{"title":"Sesiones activas","session":"Sesión","device":"Dispositivo","ip":"Dirección IP","loginTime":"Hora de inicio de sesión","expires":"Caduca","action":"Acción","current":"Actual","revoke":"Revocar","revokeFailed":"Error al revocar la sesión.","empty":"No se encontraron sesiones activas.","unknownDevice":"Dispositivo desconocido","revokeOthers":"Revocar otras sesiones","confirmRevokeOthers":"Revocar otras sesiones","revokeOthersConfirmText":"¿Seguro que desea revocar todas las demás sesiones activas? Todos los demás dispositivos conectados se desconectarán de inmediato."},"passkey":{"title":"Passkeys","addBtn":"Agregar Passkey","desc":"Use autenticación biométrica (Touch ID, Face ID, Windows Hello) o llaves de seguridad (YubiKey) para una autenticación multifactor rápida y resistente al phishing.","empty":"Aún no se han agregado passkeys.","addTitle":"Agregar Passkey","nameLabel":"Nombre de Passkey","namePlaceholder":"ej. my_passkey","promptNotice":"Al hacer clic en continuar, el navegador le solicitará completar el registro biométrico o de llave de seguridad.","continue":"Continuar","renameTitle":"Renombrar Passkey","deleteTitle":"Eliminar Passkey","deleteConfirm":"¿Está seguro de que desea eliminar la passkey \\"{{name}}\\"? Ya no podrá usarla para la autenticación multifactor.","defaultName":"Passkey","notSupported":"Su navegador o entorno actual no es compatible con passkeys (WebAuthn).","regFailed":"Error en el registro de Passkey","count":"{{count}} configurado(s)","none":"No configurado","created":"Creado","lastUsed":"Último uso","neverUsed":"Nunca utilizado","updated":"Passkey actualizada con éxito","registered":"Passkey registrada con éxito","deleted":"Passkey eliminada","appNameLabel":"Dominio","appNameHelper":"La passkey se vinculará a este dominio","formatTip":"Indicación sobre el nombre de Passkey: 1-30 caracteres, solo se permiten letras, números, guiones bajos y guiones medios","verifyPrompt":"Autentique usando biometría o llave de seguridad de su dispositivo.","changePwNotice":"Se le solicitará autenticación con Passkey al enviar.","submitNotice":"Se le solicitará autenticación con Passkey al enviar."},"mfaNone":"Ninguno","resetUserPassword":"Restablecer contraseña","resetPasswordTitle":"Restablecer contraseña de usuario","resetPasswordWarning":"Tras el restablecimiento, todas las sesiones activas del usuario se cerrarán de inmediato.","resetPasswordSuccess":"Contraseña restablecida con éxito. Las sesiones anteriores han sido cerradas.","confirmReset":"Confirmar restablecimiento","mfa":{"title":"Autenticación multifactor (MFA)","enabled":"Configurado","notConfigured":"No configurado","desc":"Las llaves de paso (Passkey) y las apps de autenticación (TOTP) funcionan como métodos MFA. Configurar al menos uno protege su cuenta.","passwordlessTitle":"Inicio de sesión sin contraseña","passwordlessDesc":"Al activarlo, se omitirá el campo de contraseña y se verificará su identidad directamente por Passkey o TOTP.","unconfiguredHint":"Aún no hay ningún método MFA configurado. Configure un Passkey o app de autenticación a continuación."},"recoveryKey":{"title":"Clave de recuperación de emergencia","desc":"Una clave de recuperación de emergencia le permite recuperar el acceso o restablecer su contraseña si pierde todas las llaves de acceso (Passkeys) o aplicaciones de autenticación.","configured":"Configurado","notConfigured":"No configurado","kekProtected":"Cifrado con KEK","kekTooltip":"Protegido con cifrado de sobre AES-256-GCM respaldado por KEK.","viewBtn":"Ver clave de recuperación","rotateBtn":"Rotar clave","yourKey":"Su clave de recuperación de 30 dígitos","securityTip":"Mantenga esta clave en secreto. Cualquiera que tenga acceso a ella puede acceder a su cuenta.","rotateConfirm":"Rotar su clave invalidará inmediatamente la clave actual. ¿Desea continuar?","confirmRotateBtn":"Proceder a rotar","viewVerifyTitle":"Verificar identidad para ver la clave","rotateVerifyTitle":"Verificar identidad para rotar la clave","rotateSuccess":"¡Clave de recuperación rotada con éxito! Guárdela en un lugar seguro de inmediato.","legacyNotice":"Su clave está almacenada como hash unidireccional y no se puede descifrar. Rote su clave para generar una nueva protegida con KEK."},"verifyIdentity":"Verificación de seguridad","verifyIdentityDesc":"Para proteger su cuenta, verifique su identidad antes de continuar.","usePasskeyInstead":"Autenticar con Passkey","changePasswordWithPasskey":"Verificar con Passkey y actualizar","enableRegistration":"Habilitar registro de usuarios"}`),d={item1Title:`DNS Worker de protección`,item1Desc:`Un resolver DNS basado en Cloudflare Workers & D1, optimizado para la velocidad y la seguridad.`,item2Title:`Privacidad de DoH`,item2Desc:`Evita la interceptación DNS y protege tu privacidad mediante túneles cifrados DNS over HTTPS (RFC 8484).`,item3Title:`Red Edge global`,item3Desc:`Aprovecha la enorme red edge de Cloudflare para obtener una resolución ultrarrápida y latencias mínimas.`,item4Title:`Filtrado granular`,item4Desc:`Soporte completo para listas de bloqueo y de exclusión, reglas AdGuard y redirección personalizada de registros DNS.`,item5Title:`Estadísticas en tiempo real`,item5Desc:`Visualiza el estado de la red mediante registros de consultas detallados y un panel de control completo.`,item6Title:`UI moderna y modo oscuro`,item6Desc:`Un panel de control de alta densidad para desarrolladores y usuarios domésticos, basado en Blueprint UI de Palantir.`,item7Title:`Infraestructura cloud-native`,item7Desc:`La arquitectura serverless garantiza un mantenimiento nulo y una escalabilidad ilimitada para tu DNS privado.`,item8Title:`Gestionar múltiples perfiles`,item8Desc:`Crea y gestiona perfiles DNS separados para diferentes dispositivos o entornos de red.`,item9Title:`Múltiples puntos de acceso`,item9Desc:`Configura puntos de acceso dedicados para diferentes dispositivos con el fin de analizar registros y estadísticas por separado.`},f={title:`Guía de Configuración y Despliegue de DNS Worker`,subtitle:`Su instancia aún no está configurada por completo. Siga los pasos a continuación para habilitar DNS Worker.`,dbStatus:`Vinculación de Base de Datos D1 (env.DB)`,jwtStatus:`Clave Secreta JWT (env.JWT_SECRET)`,configured:`Configurado`,missing:`Faltante / No Configurado`,refresh:`Actualizar y Verificar`,methodCli:`Despliegue por CLI`,methodDash:`Despliegue por Panel de Cloudflare`,copy:`Copiar`,copied:`¡Copiado!`,stepDbTitle:`1. Vincular Base de Datos D1`,stepDbDesc:`Cree una base de datos D1 y vincúlela a su worker. En su terminal, ejecute:`,stepDbCommand1:`wrangler d1 create dns_worker_db`,stepDbDesc2:`Copie los detalles de la base de datos D1 resultantes y péguelos en su wrangler.toml bajo [[d1_databases]]:`,stepDbCommand2:`[[d1_databases]]
|
|
2
|
+
binding = "DB"
|
|
3
|
+
database_name = "dns_worker_db"
|
|
4
|
+
database_id = "<SU_D1_DATABASE_ID>"
|
|
5
|
+
migrations_dir = "migrations"`,stepDbDashDesc:`1. Vaya al Panel de Cloudflare -> Workers & Pages -> D1 -> Crear base de datos -> Nómbrela 'dns_worker_db'.
|
|
6
|
+
2. Vaya a su Worker -> Configuración -> Variables -> Vinculaciones de bases de datos D1 -> Agregar vinculación.
|
|
7
|
+
3. Establezca el nombre a 'DB' y seleccione 'dns_worker_db'. Guardar.
|
|
8
|
+
4. Vaya a su base de datos D1 -> Consola, copie y ejecute el script SQL de la carpeta migrations para inicializar las tablas.`,stepJwtTitle:`2. Establecer Clave Secreta JWT`,stepJwtDesc:`DNS Worker requiere un secreto JWT para firmar tokens de sesión. Configúrelo como un secreto de Cloudflare:`,stepJwtCommand1:`wrangler secret put JWT_SECRET`,stepJwtDashDesc:`1. Vaya a su Worker -> Configuración -> Variables -> Variables de entorno -> Agregar variable.
|
|
9
|
+
2. Establezca el nombre como 'JWT_SECRET', elija el tipo 'Secret' e ingrese una cadena aleatoria segura.
|
|
10
|
+
3. Guardar y desplegar.`,stepJwtDesc2:`Panel de Cloudflare`,stepJwtCommand2:`https://dash.cloudflare.com/`,stepDeployTitle:`3. Desplegar y Aplicar Migraciones`,stepDeployDesc:`Ejecute el comando de despliegue para compilar el frontend, aplicar migraciones de base de datos D1 automáticamente y publicar en vivo:`,stepDeployCommand:`npm run deploy`,stepDeployDashDesc:`Si completó todas las configuraciones a través del Panel de Cloudflare, vaya a la pestaña de Despliegues de su Worker y haga clic en 'Desplegar' o 'Volver a desplegar'.`,jwtGeneratorTitle:`Generador Seguro de JWT_SECRET`,jwtGeneratorDesc:`Use este generador de claves criptográficamente seguro para generar un secreto alfanumérico aleatorio de 64 caracteres para su env.JWT_SECRET.`,regenerate:`Regenerar`};var p={common:e,nav:t,theme:n,auth:r,setup:i,rules:a,analytics:o,logs:s,filtering:c,settings:l,account:u,intro:d,deploymentGuide:f};export{u as account,o as analytics,r as auth,e as common,p as default,f as deploymentGuide,c as filtering,d as intro,s as logs,t as nav,a as rules,l as settings,i as setup,n as theme};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={100:`BG`,104:`MM`,108:`BI`,112:`BY`,116:`KH`,120:`CM`,124:`CA`,132:`CV`,136:`KY`,140:`CF`,144:`LK`,148:`TD`,152:`CL`,156:`CN`,158:`TW`,162:`CX`,166:`CC`,170:`CO`,174:`KM`,175:`YT`,178:`CG`,180:`CD`,184:`CK`,188:`CR`,191:`HR`,192:`CU`,196:`CY`,203:`CZ`,204:`BJ`,208:`DK`,212:`DM`,214:`DO`,218:`EC`,222:`SV`,226:`GQ`,231:`ET`,232:`ER`,233:`EE`,234:`FO`,238:`FK`,239:`GS`,242:`FJ`,246:`FI`,248:`AX`,250:`FR`,254:`GF`,258:`PF`,260:`TF`,262:`DJ`,266:`GA`,268:`GE`,270:`GM`,275:`PS`,276:`DE`,288:`GH`,292:`GI`,296:`KI`,300:`GR`,304:`GL`,308:`GD`,312:`GP`,316:`GU`,320:`GT`,324:`GN`,328:`GY`,332:`HT`,334:`HM`,336:`VA`,340:`HN`,344:`HK`,348:`HU`,352:`IS`,356:`IN`,360:`ID`,364:`IR`,368:`IQ`,372:`IE`,376:`IL`,380:`IT`,384:`CI`,388:`JM`,392:`JP`,398:`KZ`,400:`JO`,404:`KE`,408:`KP`,410:`KR`,414:`KW`,417:`KG`,418:`LA`,422:`LB`,426:`LS`,428:`LV`,430:`LR`,434:`LY`,438:`LI`,440:`LT`,442:`LU`,446:`MO`,450:`MG`,454:`MW`,458:`MY`,462:`MV`,466:`ML`,470:`MT`,474:`MQ`,478:`MR`,480:`MU`,484:`MX`,492:`MC`,496:`MN`,498:`MD`,499:`ME`,500:`MS`,504:`MA`,508:`MZ`,512:`OM`,516:`NA`,520:`NR`,524:`NP`,528:`NL`,531:`CW`,533:`AW`,534:`SX`,535:`BQ`,540:`NC`,548:`VU`,554:`NZ`,558:`NI`,562:`NE`,566:`NG`,570:`NU`,574:`NF`,578:`NO`,580:`MP`,581:`UM`,583:`FM`,584:`MH`,585:`PW`,586:`PK`,591:`PA`,598:`PG`,600:`PY`,604:`PE`,608:`PH`,612:`PN`,616:`PL`,620:`PT`,624:`GW`,626:`TL`,630:`PR`,634:`QA`,638:`RE`,642:`RO`,643:`RU`,646:`RW`,652:`BL`,654:`SH`,659:`KN`,660:`AI`,662:`LC`,663:`MF`,666:`PM`,670:`VC`,674:`SM`,678:`ST`,682:`SA`,686:`SN`,688:`RS`,690:`SC`,694:`SL`,702:`SG`,703:`SK`,704:`VN`,705:`SI`,706:`SO`,710:`ZA`,716:`ZW`,724:`ES`,728:`SS`,729:`SD`,732:`EH`,740:`SR`,744:`SJ`,748:`SZ`,752:`SE`,756:`CH`,760:`SY`,762:`TJ`,764:`TH`,768:`TG`,772:`TK`,776:`TO`,780:`TT`,784:`AE`,788:`TN`,792:`TR`,795:`TM`,796:`TC`,798:`TV`,800:`UG`,804:`UA`,807:`MK`,818:`EG`,826:`GB`,831:`GG`,832:`JE`,833:`IM`,834:`TZ`,840:`US`,850:`VI`,854:`BF`,858:`UY`,860:`UZ`,862:`VE`,876:`WF`,882:`WS`,887:`YE`,894:`ZM`,"004":`AF`,"008":`AL`,"012":`DZ`,"016":`AS`,"020":`AD`,"024":`AO`,"010":`AQ`,"028":`AG`,"032":`AR`,"051":`AM`,"036":`AU`,"040":`AT`,"031":`AZ`,"044":`BS`,"048":`BH`,"050":`BD`,"052":`BB`,"056":`BE`,"084":`BZ`,"060":`BM`,"064":`BT`,"068":`BO`,"070":`BA`,"072":`BW`,"074":`BV`,"076":`BR`,"086":`IO`,"096":`BN`,"090":`SB`,"092":`VG`};function t(e,t=`en`){if(!e)return``;try{return new Intl.DisplayNames([t],{type:`region`}).of(e.toUpperCase())||e}catch{return e}}export{e as n,t};
|
|
@@ -0,0 +1,10 @@
|
|
|
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`},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.`},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`,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 [Région : {{region}}]`,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 9+`,androidDesc:`Prend en charge le 'DNS privé' natif du système (DoT) ou des applications tierces pour DoH.`,androidDotTitle:`DNS privé (DoT - Mode Serverfull)`,androidDotDesc:`Paramètres > Réseau et Internet > DNS privé > Nom d'hôte du fournisseur DNS privé :`,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`},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`},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`},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 (Adresse résolue)`,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.`},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}}`},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.`},u=JSON.parse(`{"title":"Paramètres du compte","subtitle":"Gérez vos identifiants de sécurité et les utilisateurs du système.","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."},"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"},"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."},"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 en cas de perte de vos clés d'accès (Passkeys) ou applications d'authentification.","configured":"Configuré","notConfigured":"Non configuré","kekProtected":"Chiffré par KEK","kekTooltip":"Protégé par chiffrement d'enveloppe AES-256-GCM basé sur KEK.","viewBtn":"Afficher la clé","rotateBtn":"Renouveler la clé","yourKey":"Votre clé de récupération à 30 chiffres","securityTip":"Gardez cette clé secrète. Toute personne ayant accès à cette clé peut accéder à votre compte.","rotateConfirm":"Le renouvellement de votre clé invalidera immédiatement la clé actuelle. Voulez-vous continuer ?","confirmRotateBtn":"Confirmer le renouvellement","viewVerifyTitle":"Vérifier l'identité pour afficher la clé","rotateVerifyTitle":"Vérifier l'identité pour renouveler la clé","rotateSuccess":"Clé de récupération renouvelée avec succès ! Veuillez la sauvegarder immédiatement.","legacyNotice":"Votre clé est enregistrée sous forme de hachage unidirectionnel hérité et ne peut pas être déchiffrée. Veuillez renouveler votre clé."},"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"}`),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
|
+
binding = "DB"
|
|
3
|
+
database_name = "dns_worker_db"
|
|
4
|
+
database_id = "<VOTRE_D1_DATABASE_ID>"
|
|
5
|
+
migrations_dir = "migrations"`,stepDbDashDesc:`1. Allez sur le Tableau de Bord Cloudflare -> Workers & Pages -> D1 -> Créer une base de données -> Nommez-la 'dns_worker_db'.
|
|
6
|
+
2. Allez dans votre Worker -> Paramètres -> Variables -> Liaisons de base de données D1 -> Ajouter une liaison.
|
|
7
|
+
3. Définissez le nom de la liaison sur 'DB' et sélectionnez 'dns_worker_db'. Enregistrez.
|
|
8
|
+
4. Allez dans votre base de données D1 -> Console, copiez et exécutez le script SQL du dossier migrations pour créer la structure des tables.`,stepJwtTitle:`2. Définir la Clé Secrète JWT`,stepJwtDesc:`DNS Worker nécessite un secret JWT pour signer les jetons de session. Configurez-le en tant que Secret Cloudflare :`,stepJwtCommand1:`wrangler secret put JWT_SECRET`,stepJwtDashDesc:`1. Allez dans votre Worker -> Paramètres -> Variables -> Variables d'environnement -> Ajouter une variable.
|
|
9
|
+
2. Définissez le nom sur 'JWT_SECRET', choisissez le type 'Secret' et entrez une chaîne aléatoire sécurisée.
|
|
10
|
+
3. Enregistrez et déployez.`,stepJwtDesc2:`Tableau de Bord Cloudflare`,stepJwtCommand2:`https://dash.cloudflare.com/`,stepDeployTitle:`3. Déployer & Appliquer les Migrations`,stepDeployDesc:`Exécutez la commande de déploiement pour compiler le frontend, appliquer automatiquement les migrations D1 et publier en ligne :`,stepDeployCommand:`npm run deploy`,stepDeployDashDesc:`Si vous avez effectué toutes les configurations via le Tableau de Bord Cloudflare, accédez à l'onglet Déploiements de votre Worker et cliquez sur 'Déployer' ou 'Redéployer'.`,jwtGeneratorTitle:`Générateur Sécurisé de JWT_SECRET`,jwtGeneratorDesc:`Utilisez ce générateur de clé cryptographiquement sécurisé pour générer un secret alphanumérique aléatoire de 64 caractères pour votre env.JWT_SECRET.`,regenerate:`Régénérer`};var p={common:e,nav:t,theme:n,auth:r,setup:i,rules:a,analytics:o,logs:s,filtering:c,settings:l,account:u,intro:d,deploymentGuide:f};export{u as account,o as analytics,r as auth,e as common,p as default,f as deploymentGuide,c as filtering,d as intro,s as logs,t as nav,a as rules,l as settings,i as setup,n as theme};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){if(!e)return`🌐`;let t=e.toUpperCase().split(``).map(e=>127397+e.charCodeAt(0));return String.fromCodePoint(...t)}export{e as t};
|