dns-worker 1.1.5 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +154 -155
  2. package/README.md +1 -3
  3. package/dist/serverfull.mjs +49 -49
  4. package/dist/serverfull.mjs.map +4 -4
  5. package/package.json +7 -3
  6. package/static/assets/AccountView-DIeqrGlp.js +4 -0
  7. package/static/assets/AnalyticsView-BzZ61m0y.js +2 -0
  8. package/static/assets/{DestinationMap-Bwv9zW4k.js → DestinationMap-DAk0zqdP.js} +1 -1
  9. package/static/assets/{FilteringView-hYm_mlJ0.js → FilteringView-CkcgGa7_.js} +1 -1
  10. package/static/assets/LogsView-Bb2JGWSY.js +5 -0
  11. package/static/assets/{RulesView-DLhxdWLq.js → RulesView-BKZXclmK.js} +1 -1
  12. package/static/assets/{SettingsView-VR3JolCU.js → SettingsView-BIUiIVIC.js} +1 -1
  13. package/static/assets/SetupView-MjSOUYm0.js +1 -0
  14. package/static/assets/{TrendChart-wcrIRt7R.js → TrendChart-CDyqUTCQ.js} +1 -1
  15. package/static/assets/date-D8IlsmbP.js +1 -0
  16. package/static/assets/de-DE-BXtoHcnB.js +12 -0
  17. package/static/assets/es-ES-HzsKZWQV.js +12 -0
  18. package/static/assets/fr-FR-cS1x6c9J.js +12 -0
  19. package/static/assets/index-BJJdTKLc.css +2 -0
  20. package/static/assets/index-C5rHE6WK.js +17 -0
  21. package/static/assets/ja-JP-Dxk2el-P.js +12 -0
  22. package/static/assets/ko-KR-Bj56Fs_D.js +12 -0
  23. package/static/assets/ru-RU-D1z3XQQZ.js +12 -0
  24. package/static/assets/{services-BYhiWUn8.js → services-B-OKDv75.js} +1 -1
  25. package/static/assets/useLogsE2ee-Crd_rHKZ.js +1 -0
  26. package/static/assets/vi-VN-YQQX1woE.js +12 -0
  27. package/static/assets/zh-CN-B0jDBZPP.js +12 -0
  28. package/static/assets/zh-TW-DOnIGWL3.js +12 -0
  29. package/static/index.html +2 -2
  30. package/static/sw.js +1 -1
  31. package/static/assets/AccountView-t2HnohwK.js +0 -4
  32. package/static/assets/AnalyticsView-DDNyezYl.js +0 -2
  33. package/static/assets/LogsView-BSRCO63V.js +0 -5
  34. package/static/assets/SetupView-BEaDE8T8.js +0 -1
  35. package/static/assets/date-DG8jTrEB.js +0 -1
  36. package/static/assets/de-DE-BiPVfS40.js +0 -12
  37. package/static/assets/es-ES-CM9mOh6j.js +0 -12
  38. package/static/assets/fr-FR-_-PAIgSj.js +0 -12
  39. package/static/assets/index-CrB_HdIL.js +0 -17
  40. package/static/assets/index-DZNm9qiP.css +0 -2
  41. package/static/assets/ja-JP-CYATQiqp.js +0 -12
  42. package/static/assets/ko-KR-DCPI1Twu.js +0 -12
  43. package/static/assets/ru-RU-D5bj5X0j.js +0 -12
  44. package/static/assets/vi-VN-D1YSdAMz.js +0 -12
  45. package/static/assets/zh-CN-Dhtte9ac.js +0 -12
  46. package/static/assets/zh-TW-CiUsmXXj.js +0 -12
  47. /package/static/assets/{SwipeableDrawer-DkPacJ1O.js → SwipeableDrawer-BrlOF_Xg.js} +0 -0
@@ -0,0 +1,12 @@
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`,close:`Cerrar`,cancel:`Cancelar`,yes:`Sí`,no:`No`,continue:`Continuar`,back:`Volver`,copy:`Copiar`,copied:`Copiado`,copyKey:`Copiar nueva clave de recuperación`,confirm:`Confirmar`,delete:`Eliminar`,rename:`Renombrar`,disable:`Desactivar`,confirmDisable:`Confirmar desactivación`,modeServerfull:`Modo Serverfull`,modeCloudflare:`Modo Cloudflare Worker`,unknown:`Desconocido`},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`,unlockSession:`Desbloquear pantalla`,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:`Sesión caducada. Por favor, inicie sesión de nuevo.`,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.`,keepLoggedIn:`Mantener la sesión iniciada durante {{days}} días`,orUseOtherMfa:`o usar otro método`,totpUseRecovery:`Usar clave de recuperación`,totpUseApp:`Usar aplicación de autenticación`,mfaMethodTotp:`Aplicación de autenticación (TOTP)`,invalidTotp:`Código de verificación TOTP inválido.`,sessionExpiredNotice:`Sesión caducada o no válida. Por favor, inicie sesión de nuevo.`,tooManyAttemptsTerminate:`Demasiados intentos fallidos. Sesión finalizada.`},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`,serverLocation:`Ubicación del servidor`,traceDetails:`Cloudflare Trace (/cdn-cgi/trace)`,noTraceData:`No hay datos de trace disponibles`,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`,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 / DNS privado (DoT y DoQ)`,androidDesc:`Admite 'DNS privado' nativo del sistema (DoT) o aplicaciones de terceros para DoH.`,androidDotTitle:`DNS privado (DoT / DoQ)`,androidDotDesc:`Ajustes > Redes e Internet > DNS privado > Nombre de host del proveedor de DNS privado (también compatible con clientes DoQ):`,androidWildcardHint:`(Certificado comodín, redirige a este perfil)`,androidSingleDomainHint:`(Certificado de dominio único, redirige al perfil predeterminado)`,androidIpNotice:`Accediendo mediante IP o dirección local. DNS privado de Android solo admite nombres de dominio; configure SERVERFULL_DOT_DOMAIN en .env (ej. dns.example.com).`,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`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`Soporte nativo para RFC 9250 (DNS over QUIC) y RFC 9460 (HTTP/3 & Encrypted Client Hello), con negociación 0-RTT y protección contra inspección de SNI.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`Compatible con clientes modernos como AdGuard, Clash Meta (Mihomo), Sing-box, etc.:`,doqWildcardHint:`(Certificado comodín, enruta a este perfil)`,doqSingleDomainHint:`(Certificado de dominio único, enruta al perfil predeterminado)`,doqIpNotice:`DoQ requiere un certificado TLS y un nombre de dominio válido. Configure SERVERFULL_DOT_DOMAIN en .env y actualice.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`Los navegadores modernos (Chrome/Firefox/Safari) negocian automáticamente HTTP/3 y cifrado ECH a través de registros Alt-Svc y HTTPS RFC 9460:`,ddrHint:`Integrado con RFC 9460 Sección 8 DDR (Discovery of Designated Resolvers), lo que permite a los clientes negociar y actualizar automáticamente a DoQ/DoT y ECH mediante consultas _dns.`,e2eeDesc:`Cifra los registros DNS en el edge con su clave híbrida poscuántica (P256-MLKEM768). La nube no puede inspeccionarlos; la desencriptación es local mediante su Passkey.`,detecting:`Detectando...`,dotUnavailableCfTitle:`DoT / DoQ no disponible en modo Cloudflare Worker`,dotUnavailableCfDesc:`Actualmente en modo Cloudflare Worker (Serverless). Debido a las restricciones de red, no se admite la escucha en el puerto TCP/UDP 853. Para usar DoT o DoQ, despliegue en modo Serverfull; en este modo, use DoH.`,privateNetwork:`Red privada`},a={title:`Reglas personalizadas`,subtitle:`Controla manualmente el comportamiento de resolución de dominios específicos (bloquear, permitir o redirigir).`,addSelfRedirectTag:`¿Añadir redirección del sitio?`,addSelfRedirectPrompt:`¿Desea añadir una regla CNAME para este sitio para la optimización de red regional (recomendado para usuarios en China continental)?`,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`,editRule:`Editar regla`,cancel:`Cancelar`,yes:`Sí`,no:`No`,saveChanges:`Guardar cambios`,delete:`Eliminar`,close:`Cerrar`},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`,loading:`Cargando...`},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`,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.`,detailIsClientEncrypted:`¿Cifrado en el cliente?`,encryptedLocked:`Sí (Bloqueado)`,encryptedDecrypted:`Sí (Descifrado localmente)`,encryptedYes:`Sí`,notEncrypted:`No`,encryptedRecord:`[Registro cifrado]`,exportSuccess:`Registros exportados con éxito`,exportError:`Error al exportar los registros`,e2eeLockedExportWarning:`Algunos registros están cifrados y actualmente bloqueados; el archivo exportado puede contener marcadores de posición cifrados.`,scrollToTop:`Ir arriba`},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}}`,listDetails:`Detalles de la lista`},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`,retention180d:`180 días`,retention360d:`360 días`,retentionMaxSuffix:`(Máximo)`,daysUnit:`días`,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.`,localRetentionTitle:`Almacenamiento y retención local`,localRetentionDuration:`Duración de retención local`,localRetentionDesc:`Los registros se guardan de forma persistente en la base de datos SQLite local de su navegador (OPFS), lo que permite búsquedas instantáneas y ahorra costes en la nube. Los registros locales antiguos se eliminan automáticamente.`,localRetention30d:`30 días`,localRetention90d:`90 días (Recomendado)`,localRetention180d:`180 días`,localRetention365d:`365 días (1 año)`,localRetentionUnlimited:`Ilimitado (Hasta borrado manual)`,localEngineStorage:`Motor de almacenamiento`,localEngineOpfs:`Persistente OPFS`,localEngineMemory:`Memoria temporal (Modo incógnito)`,localCachedCount:`Registros locales en caché`,localCachedCountUnit:`{{count}} registros`,clearLocalData:`Borrar registros locales`,clearLocalDataConfirm:`¿Está seguro de que desea borrar todos los registros locales de este perfil? (Los registros en la nube no se verán afectados)`,clearLocalDataSuccess:`Registros locales borrados con éxito`,clearLocalDataError:`Error al borrar los registros locales`,e2eeTitle:`Cifrado de extremo a extremo (E2EE)`,e2eeEnabled:`Activado`,e2eeDisabled:`Desactivado`,e2eeDesc:`Cifra los registros DNS en el edge con su clave híbrida poscuántica (P256-MLKEM768). La nube no puede inspeccionarlos; la desencriptación es local mediante su Passkey.`,e2eePasskeyRequired:`E2EE requiere soporte para Passkey (WebAuthn). Por favor, agregue primero un Passkey en la configuración de la cuenta.`,e2eeGoToAccount:`Ir a Configuración de Cuenta`,e2eeEnableSwitch:`Activar cifrado E2EE`,e2eeKeyType:`Algoritmo de cifrado`,e2eeDeviceState:`Estado en este dispositivo`,e2eeUnlocked:`Desbloqueado en este dispositivo`,e2eeUnlockButton:`Verificar Passkey para desbloquear`,e2eeProtectedPasskeys:`Credenciales Passkey autorizadas`,e2eeDevicesUnit:`dispositivo(s)`,e2eeEnableSuccess:`Cifrado E2EE activado con éxito`,e2eeEnableError:`Error al activar cifrado E2EE`,e2eeDisableSuccess:`Cifrado E2EE desactivado`,e2eeDisableError:`Error al desactivar cifrado E2EE`,e2eeUnlockSuccess:`Clave privada desbloqueada en este dispositivo`,e2eeUnlockError:`Error al verificar Passkey`,e2eeDisableConfirm:`¿Está seguro de que desea desactivar E2EE? Los futuros registros se almacenarán en texto plano.`,e2eeUnlockPrompt:`Este perfil tiene cifrado E2EE activado. Verifique su Passkey para ver los registros.`,e2eeUnlockNow:`Desbloquear registros`,e2eeUnlockRecovery:`Desbloquear con clave de recuperación`,securityTitle:`Seguridad y acceso`,rotateKeyTitle:`URL de acceso`,rotateKeyDesc:`Genera una nueva URL de acceso para este perfil. Todos los dispositivos que utilicen la URL anterior perderán inmediatamente su conexión con DNS Worker y deberán reconfigurarse con la nueva URL.`,rotateKeyBtn:`Rotar URL`,copied:`Copiado al portapapeles`,nameUpdateFailed:`Error al actualizar`},u=JSON.parse(`{"title":"Ajustes de cuenta","subtitle":"Gestiona tus credenciales de seguridad y usuarios del sistema.","e2ee":{"title":"Cifrado de extremo a extremo (E2EE)","desc":"Protege sus datos confidenciales mediante cifrado de sobre híbrido poscuántico del lado del cliente (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) respaldado por Passkeys de hardware. Solo los dispositivos autorizados pueden desencriptar localmente.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"Actualizar a Post-Cuántica (PQC)","upgradePqcSuccess":"Actualizado con éxito al cifrado híbrido post-cuántico (P256-MLKEM768)","upgradePqcError":"Error al actualizar al cifrado post-cuántico","enabled":"Activado","disabled":"Desactivado","passkeyRequired":"El cifrado de extremo a extremo requiere al menos una Passkey de hardware (WebAuthn). Registre una Passkey en la sección de autenticación multifactor (MFA) arriba.","scopesTitle":"Categorías de datos cifrados","scopesSubtitle":"Seleccione qué categorías de datos desea cifrar de extremo a extremo con su Passkey de hardware.","scopeLogsTitle":"Registros de consultas DNS","scopeLogsDesc":"Cifra nombres de dominio, IP de clientes, respuestas y latencia de subida en el Edge antes de guardar en D1.","scopeRulesTitle":"Reglas personalizadas y redirecciones","scopeRulesDesc":"Reglas personalizadas de bloqueo/permiso y políticas de redirección cifradas en el cliente.","scopeClientsTitle":"Metadatos de clientes y dispositivos","scopeClientsDesc":"Alias de dispositivos, identificadores de puntos de acceso y topología de red.","statusActive":"Protegido","statusPlanned":"Planificado","profileSelect":"Configurar perfil","keyType":"Algoritmo de cifrado","deviceState":"Estado actual del dispositivo","unlocked":"Desbloqueado en este dispositivo","unlockButton":"Verificar Passkey para desbloquear","protectedPasskeys":"Credenciales Passkey autorizadas","devicesUnit":"credencial(es)","enableSuccess":"Cifrado de extremo a extremo activado con éxito","enableError":"Error al activar el cifrado de extremo a extremo","disableSuccess":"Cifrado de extremo a extremo desactivado","disableError":"Error al desactivar el cifrado de extremo a extremo","unlockSuccess":"Clave privada desbloqueada con éxito en este dispositivo","unlockError":"Error al verificar Passkey y desbloquear","disableConfirm":"¿Está seguro de desactivar el cifrado de extremo a extremo para este perfil? Los registros futuros se guardarán en texto plano. (Los registros cifrados históricos seguirán requiriendo la clave privada)","noKeypairTitle":"Par de claves de extremo a extremo no inicializado","noKeypairDesc":"El cifrado de extremo a extremo requiere generar un par de claves poscuánticas (P256-MLKEM768) para su cuenta. La clave privada se protegerá mediante sobre cifrado con su Passkey o clave de recuperación.","initPasskeyBtn":"Verificar Passkey existente para generar par de claves","addPasskeyBtn":"Añadir Passkey para admitir cifrado por hardware","initRecoveryBtn":"Generar par de claves con clave de recuperación","initWithRecoveryTitle":"Generar par de claves con clave de recuperación","initWithRecoveryDesc":"Ingrese su clave de recuperación de emergencia actual de 30 dígitos. El sistema generará localmente un par de claves poscuánticas (P256-MLKEM768). La clave de recuperación se rotará automáticamente después de su uso.","keypairGenSuccess":"¡Par de claves de extremo a extremo generado con éxito!","keypairGenError":"Error al generar el par de claves","unlockRecoveryButton":"Desbloquear con clave de recuperación","unlockWithRecoveryTitle":"Desbloquear con clave de recuperación","unlockWithRecoveryDesc":"Introduzca su clave de emergencia de 30 dígitos. Nota: La clave se rotará automáticamente tras verificarse.","recoveryKeyInputLabel":"Clave de recuperación","unlockConfirm":"Desbloquear clave privada","recoveryUnlockFailed":"Clave de recuperación no válida o descifrado fallido","generateKeypairBtn":"Generar par de claves","enableSwitch":"Habilitar cifrado de extremo a extremo para registros de consulta","enableSwitchDesc":"Cifra nombres de dominio, IP de clientes, respuestas y latencia en el borde antes de guardarlos en la nube.","trustBoundaryTitle":"Aviso de límite de seguridad y confianza","trustBoundaryDesc":"Todo el tráfico de consultas DNS pasa inevitablemente por el servidor de alojamiento (nodos perimetrales de Cloudflare Workers o tiempo de ejecución del servidor) durante la resolución, donde se procesa en memoria antes de guardarse cifrado. Esta función protege los datos en reposo en la base de datos en la nube (D1 / almacenamiento persistente); no oculta el tráfico de red activo al servidor de alojamiento que procesa la solicitud.","initFailed":"Error al inicializar el cifrado de extremo a extremo","lockDevice":"Bloquear este dispositivo","lockSuccess":"Bloqueado, clave privada eliminada del almacenamiento local","enrollPasskeyBtn":"Vincular Passkey actual","enrollPasskeySuccess":"¡Passkey vinculada con éxito a E2EE!","enrollPasskeyFailed":"Error al vincular Passkey","resetKeypairBtn":"Restablecer par de claves","confirmResetBtn":"Confirmar restablecimiento y regeneración","resetKeypairTitle":"Restablecer par de claves E2EE","resetKeypairDesc":"Si su clave de recuperación no coincide o no se puede descifrar, y no hay Passkeys registradas, el restablecimiento purgará las claves antiguas del servidor y generará un nuevo par de claves poscuánticas (P256-MLKEM768).","resetKeypairPasskeyNotice":"Al confirmar, se invocará de inmediato su Passkey configurada para cifrar y autorizar el nuevo par de claves.","resetKeypairRecoveryNotice":"Al confirmar, se le solicitará que introduzca su clave de recuperación actual para generar y cifrar el nuevo par de claves.","resetAndInitPasskeySuccess":"¡Par de claves restablecido con éxito y vuelto a cifrar con su Passkey!","resetSuccessEnterRecovery":"Claves antiguas eliminadas. Inicialice un nuevo par de claves con su clave de recuperación.","resetFailed":"Error al restablecer el par de claves"},"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","yes":"Sí","no":"No","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.","invalidCode":"Por favor introduzca un código de 6 dígitos","testBtn":"Probar código","testTitle":"Probar aplicación de autenticación (TOTP)","testDesc":"Introduzca el código de verificación de 6 dígitos de su aplicación de autenticación para comprobar que está sincronizada y genera códigos válidos.","testSuccess":"¡Verificación exitosa! Su aplicación de autenticación está configurada correctamente.","testFailed":"Código de verificación no válido o reloj no sincronizado","verificationCode":"Código de verificación de 6 dígitos","verifyBtn":"Verificar ahora","enterPassword":"Introduce tu contraseña para confirmar:","passwordPlaceholder":"Contraseña de la cuenta"},"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","device":"Dispositivo"},"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.","testBtn":"Probar llave de paso","testThis":"Probar esta llave de paso","testSuccess":"Llave de paso verificada con éxito: {{name}}","testCancelled":"Verificación de llave de paso cancelada","testFailed":"Error al verificar la llave de paso"},"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.","password":"Contraseña","passkey":"Passkey","totp":"TOTP"},"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 todos los Passkeys o autenticadores. Para garantizar una seguridad de conocimiento cero, se almacena como un hash criptográfico unidireccional y no se puede ver en texto plano. Se rota inmediatamente tras cada uso.","configured":"Configurada","notConfigured":"No configurada","rotateBtn":"Rotar clave de recuperación","yourKey":"Su clave de recuperación de 30 dígitos","securityTip":"Mantenga esta clave en secreto. Cualquier persona con acceso a ella puede acceder a su cuenta.","rotateConfirm":"Rotar su clave invalidará inmediatamente la clave actual. La verificación solo se permite mediante Passkey existente o clave original. ¿Continuar?","confirmRotateBtn":"Proceder a rotar","rotateVerifyTitle":"Verificar identidad para rotar clave","rotateSuccess":"¡Clave de recuperación rotada con éxito! Guárdela en un lugar seguro inmediatamente.","oneWayHash":"Hash criptográfico unidireccional","oneWayTooltip":"Protegida con hash unidireccional SHA-256. El servidor no almacena texto plano ni puede descifrarlo.","newKeyGenerated":"Nueva clave de recuperación de 30 dígitos generada (Guárdela ahora)","oneWayWarning":"Aviso: Esta clave se muestra SOLO UNA VEZ. El servidor solo guarda un hash irreversible, cópiela y guárdela de forma segura sin conexión.","autoRotatedTitle":"Clave de recuperación rotada automáticamente","autoRotatedNotice":"Siguiendo la regla de un solo uso, su clave anterior se ha invalidado y se ha generado una nueva de 30 dígitos. ¡Cópiela y guárdela sin conexión!","savedAndClose":"La he guardado, continuar","savedAndContinue":"La he guardado y continuar al panel","descOneWay":"La clave de recuperación de emergencia es la única credencial para recuperar el acceso a la cuenta y descifrar los datos E2EE si se pierden todas las Passkeys o autenticadores. Para garantizar la seguridad de conocimiento cero, se almacena como un hash irreversible unidireccional y no se puede ver en texto sin formato en la web. Solo se puede rotar utilizando la clave original o una Passkey existente. Se rota automáticamente al usarse.","keyRequired":"Se requiere la clave de recuperación","verifyBtn":"Clave de recuperación","verifyPromptLabel":"Clave de recuperación original","rotateSuccessE2eeWarning":"¡Clave de recuperación rotada con éxito! Nota: Como E2EE estaba bloqueado previamente y no se pudo descifrar, los datos antiguos aún requieren la clave anterior, o puede hacer clic en \\"Restablecer par de claves\\" a continuación."},"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","timezone":"Zona horaria","timezoneAuto":"Automático (predeterminado del navegador)","totpCode":"Código de autenticador"}`),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.`,item10Title:`Registros de conocimiento cero`,item10Desc:`Cifrado de extremo a extremo con KEM híbrido poscuántico (P256-MLKEM768). Las claves se guardan localmente, garantizando conocimiento cero en el servidor.`,item11Title:`Soporte multi-BD D1/Turso/File`,item11Desc:`Admite Cloudflare D1, Turso SQLite distribuido y almacenamiento en archivos locales, aliviando los límites de cuota gratuita.`},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`,serverfullTitle:`Guía de despliegue y configuración de DNS Worker Serverfull`,serverfullSubtitle:`Su instancia se ejecuta en modo Serverfull (independiente). Siga estos pasos para inicializar la base de datos y configurar las variables.`,serverfullDbStatus:`Base de datos SQLite (Directorio de datos local)`,serverfullDbConfigured:`Listo e inicializado`,serverfullDbMissing:`Archivo de base de datos faltante`,serverfullDbMissingHint:`La base de datos normalmente se inicializa en la instalación. Si falta, reinstale el paquete o reinicie el servicio para inicializarlo.`,serverfullJwtStatus:`Secreto JWT (Configuración .env)`,serverfullJwtConfigured:`Configurado`,serverfullJwtMissing:`No configurado`,serverfullJwtMissingHint:`JWT_SECRET se puede modificar en .env (o /etc/dns-worker/.env). Pegue el secreto generado a continuación y reinicie el servicio.`,serverfullStepInstallTitle:`1. Verificar o reinstalar (Inicializar base de datos)`,serverfullStepInstallDesc:`Si falta la base de datos SQLite, reinstale globalmente para crear el directorio e inicializar el esquema:`,serverfullStepInstallCmd:`sudo npm install -g dns-worker@latest`,serverfullStepEnvTitle:`2. Configurar JWT_SECRET en .env`,serverfullStepEnvDesc:`Edite /etc/dns-worker/.env e inserte el secreto generado abajo:`,serverfullStepEnvCmd:`sudo nano /etc/dns-worker/.env
11
+ # Configure JWT_SECRET=<secreto_generado_abajo>`,serverfullStepServiceTitle:`3. Reiniciar y verificar el servicio`,serverfullStepServiceDesc:`Reinicie el servicio del sistema tras guardar la configuración y verifique su estado:`,serverfullStepServiceCmd:`sudo dns-worker service restart
12
+ sudo dns-worker status`},p={defaultDesc:`Resolución DNS segura, rápida y personalizable para todos sus dispositivos. Basado en Cloudflare Workers, de código abierto y enfocado en la privacidad.`,setupDesc:`Configure sus dispositivos para usar DNS Worker.`};var m={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,meta:p};export{u as account,o as analytics,r as auth,e as common,m as default,f as deploymentGuide,c as filtering,d as intro,s as logs,p as meta,t as nav,a as rules,l as settings,i as setup,n as theme};
@@ -0,0 +1,12 @@
1
+ const e={account:`Compte`,logout:`Déconnexion`,selectProfile:`Sélectionner un profil`,add:`Ajouter`,newProfileName:`Nouveau nom du profil...`,profileNameFormatTip:`Note sur le nom du profil : 1 à 30 caractères, ne doit pas dupliquer un nom existant`,profileLimitExceeded:`Limite de profils atteinte (max. {{max}})`,profileNameExists:`Ce nom de profil existe déjà`,profileNameFormatError:`Format de nom du profil incorrect`,create:`Créer`,welcome:`Bienvenue`,createProfileToStart:`Créez un profil pour commencer.`,loading:`Chargement...`,errorNetwork:`Erreur réseau`,confirmDelete:`Voulez-vous vraiment supprimer ce profil ?`,confirmLogout:`Voulez-vous vraiment vous déconnecter ?`,notFound:`404 - Page non trouvée`,notFoundDesc:`La page que vous recherchez n'existe pas ou a été déplacée.`,backToHome:`Retour à l'accueil`,apac:`Asie-Pacifique`,mainlandChina:`Chine continentale`,HongKong:`Hong Kong`,Singapore:`Singapour`,Tokyo:`Tokyo`,NorthAmerica:`Amérique du Nord`,nae:`Est de l'Amérique du Nord`,naw:`Ouest de l'Amérique du Nord`,eu:`Europe`,invalidFormat:`Format de fichier incorrect`,import:`Importer`,importSuccess:`Profil importé avec succès`,importError:`Échec de l'importation. Veuillez vérifier le format et réessayer plus tard`,save:`Enregistrer`,saveSuccess:`Paramètres enregistrés`,close:`Fermer`,cancel:`Annuler`,yes:`Oui`,no:`Non`,continue:`Continuer`,back:`Retour`,copy:`Copier`,copied:`Copié`,copyKey:`Copier la nouvelle clé de récupération`,confirm:`Confirmer`,delete:`Supprimer`,rename:`Renommer`,disable:`Désactiver`,confirmDisable:`Confirmer la désactivation`,modeServerfull:`Mode Serverfull`,modeCloudflare:`Mode Cloudflare Worker`,unknown:`Inconnu`},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`,unlockSession:`Déverrouiller l'écran`,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:`Session expirée. Veuillez vous reconnecter.`,pinIncorrect:`Code PIN incorrect`,attemptsRemaining:`{{count}} tentatives restantes`,logoutAndReturn:`Déconnecter la session`,lockNow:`Verrouiller maintenant`,cfErrorWithDetails:`Erreur Cloudflare Edge (Erreur {{code}} : {{desc}}). Le service est temporairement indisponible, veuillez réessayer plus tard. {{rayId}}`,cfErrorCodeOnly:`Erreur Cloudflare Edge (Erreur {{code}}). Le service est temporairement indisponible. {{rayId}}`,cfErrorGeneric:`Erreur Cloudflare Edge, le service est temporairement indisponible. Veuillez réessayer plus tard. {{rayId}}`,htmlErrorGeneric:`Le serveur a renvoyé une réponse inattendue (HTTP {{status}}). Veuillez réessayer plus tard.`,tooManyAttempts:`Trop de requêtes ou de tentatives. Veuillez réessayer plus tard.`,dbQuotaExceeded:`Le quota quotidien de lecture de la base de données a été dépassé. Veuillez attendre la réinitialisation quotidienne.`,noUsersRegistered:`Aucun compte enregistré. Veuillez vous inscrire en tant qu'administrateur.`,registerAdminTitle:`Enregistrer un compte administrateur`,registerAdminDesc:`Aucun compte dans le système. Le premier utilisateur deviendra administrateur système.`,goToRegisterAdmin:`Créer l'admin`,dbNotInitialized:`Base de données non initialisée ou tables manquantes. Veuillez exécuter npm run db:migrate:prod.`,verifyWithPasskey:`Vérifier avec une clé d'accès (Passkey)`,orUseTotp:`Ou utiliser le code de l'authentificateur`,passwordRequiredFirst:`Veuillez d'abord saisir votre mot de passe`,passkeyVerification:`Vérification par clé d'accès`,passkeyPromptDesc:`Vérifiez à l'aide de vos données biométriques enregistrées ou de votre clé de sécurité`,forgotPassword:`Mot de passe oublié ?`,forgotPasswordTitle:`Réinitialiser le mot de passe`,forgotPasswordDesc:`Récupérez votre compte en toute sécurité grâce à l'authentification multifacteur (Passkey ou TOTP).`,noMfaContactAdmin:`Ce compte n'a configuré aucune authentification multifacteur (Passkey ou TOTP). Veuillez contacter un administrateur.`,chooseMfaForReset:`Choisissez une méthode pour vérifier votre identité :`,authViaPasskey:`Vérifier avec Passkey`,authViaPasskeyDesc:`Vérification en un clic par biométrie ou clé de sécurité matérielle`,authViaTotp:`Vérifier avec l'application d'authentification (TOTP)`,authViaTotpDesc:`Saisissez le code à 6 chiffres généré par votre application`,authViaRecoveryKey:`Utiliser une clé de récupération d'urgence`,authViaRecoveryKeyDesc:`Saisissez une clé de récupération à 10 caractères`,verifyAndProceed:`Vérifier et continuer`,setNewPassword:`Définir un nouveau mot de passe`,setNewPasswordDesc:`Identité vérifiée. Veuillez définir un nouveau mot de passe pour votre compte.`,newPassword:`Nouveau mot de passe`,confirmNewPassword:`Confirmer le nouveau mot de passe`,passwordMismatch:`Les mots de passe ne correspondent pas`,saveAndReset:`Enregistrer et réinitialiser`,resetSuccessTitle:`Mot de passe réinitialisé avec succès`,resetSuccessDesc:`Votre mot de passe a été mis à jour et toutes vos sessions actives ont été fermées. Veuillez vous reconnecter.`,goToLogin:`Aller à la connexion`,mfaSetupTitle:`Renforcer la sécurité du compte`,mfaSetupDesc:`La configuration de l'authentification multifacteur (MFA) protège votre compte et active la connexion sans mot de passe.`,mfaRecommended:`Recommandé`,passkeySignupDesc:`Utilisez Touch ID, Face ID ou une clé de sécurité. Rapide et résistant au phishing.`,bindPasskeyNow:`Enregistrer une clé d'accès maintenant`,mfaUniversal:`Universel`,totpSignupDesc:`Utilisez Google Authenticator, 1Password ou toute application TOTP standard.`,setupTotpBtn:`Configurer l'application d'authentification`,skipMfaSetup:`Ignorer pour l'instant`,backToMfaOptions:`Retour aux options`,otherOptions:`Autres options`,next:`Suivant`,mfaVerification:`Authentification multifacteur`,totpPrompt:`Entrez le code dynamique à 6 chiffres de votre application d'authentification`,recoveryPrompt:`Entrez votre clé de récupération à 30 chiffres (5 groupes de 6 chiffres)`,recoveryChecksumError:`Erreur de somme de contrôle : ce groupe n'est pas divisible par 11`,recoveryChecksumErrorDesc:`Erreur de somme de contrôle dans le groupe {{groups}}, veuillez vérifier et réessayer`,backToPasskey:`Retour à la vérification par Passkey`,recoveryKeyRequired:`Veuillez entrer votre clé de récupération`,totpFormatError:`Veuillez entrer un code valide à 6 chiffres`,registrationDisabledTitle:`Inscription désactivée`,registrationDisabledDesc:`L'inscription de nouveaux utilisateurs est actuellement fermée. Veuillez contacter un administrateur pour obtenir un compte.`,backToLogin:`Retour à la connexion`,jwtSecretPreset:`JWT_SECRET par défaut détecté. Veuillez modifier le JWT_SECRET prédéfini dans les variables d'environnement avant le déploiement.`,jwtSecretMissing:`JWT_SECRET manquant. Veuillez configurer une clé sécurisée dans les variables d'environnement avant le déploiement.`,jwtSecretInvalid:`Format JWT_SECRET non valide, veuillez vérifier la configuration.`,keepLoggedIn:`Rester connecté pendant {{days}} jours`,orUseOtherMfa:`ou utiliser une autre méthode`,totpUseRecovery:`Utiliser la clé de récupération`,totpUseApp:`Utiliser l'application d'authentification`,mfaMethodTotp:`Application d'authentification (TOTP)`,invalidTotp:`Code de vérification TOTP invalide.`,sessionExpiredNotice:`Session expirée ou invalide. Veuillez vous reconnecter.`,tooManyAttemptsTerminate:`Trop de tentatives infructueuses. Session terminée.`},i={title:`Guide d'installation`,subtitle:`Configurez vos appareils pour gérer votre sécurité Internet avec DNS Worker.`,regionOptimization:`Optimisation de la région de connexion (Windows)`,otherRegion:`Autres régions`,copied:`Copié dans le presse-papiers`,verifyConnection:`Vérifier la connexion`,verifying:`Vérification...`,connected:`Connecté`,notConnected:`Non connecté`,profileMatch:`Le filtrage est actif pour ce profil.`,profileMismatch:`Vous utilisez Obex, mais l'ID du profil ne correspond pas.`,verifyHint:`Terminez la configuration ci-dessous et cliquez sur le bouton pour vérifier.`,refreshStatus:`Actualiser l'état`,egressIp:`Adresse IP de sortie`,currentLocation:`Localisation actuelle`,edgeServer:`Serveur Edge`,serverLocation:`Emplacement du serveur`,traceDetails:`Cloudflare Trace (/cdn-cgi/trace)`,noTraceData:`Aucune donnée de trace disponible`,dohUrlTitle:`URL DoH du profil actuel`,accessPointTitle:`URL d'accès DoH`,defaultAccessPointName:`appareil-1`,moreAccessPoints:`Plus de points d'accès ↗`,accessPointName:`Nom du point d'accès`,accessPointToken:`Clé d'accès`,addAccessPoint:`Ajouter un point d'accès`,renameAccessPoint:`Renommer`,rotateToken:`Renouveler la clé`,rotateTokenConfirmDesc:`Le renouvellement de la clé déconnectera immédiatement tous les appareils utilisant l'ancienne clé. Voulez-vous continuer ?`,deleteAccessPoint:`Supprimer`,deleteAccessPointConfirm:`Voulez-vous vraiment supprimer ce point d'accès ?`,manageAccessPoints:`Gérer les points d'accès`,searchAccessPoints:`Rechercher des points d'accès...`,accessPointNameExists:`Ce nom de point d'accès existe déjà`,accessPointCreated:`Point d'accès créé avec succès`,accessPointRenamed:`Point d'accès renommé avec succès`,accessPointDeleted:`Point d'accès supprimé avec succès`,accessPointNameFormatTip:`Note sur le point d'accès : 1 à 30 caractères. Seuls les lettres, chiffres, traits de soulignement et tirets sont autorisés`,accessPointLimitExceeded:`Limite de points d'accès atteinte (max. {{max}})`,tokenRotated:`Clé d'accès renouvelée avec succès`,whatIsDoh:`Qu'est-ce que DoH ?`,dohDesc:`Le DNS over HTTPS (DoH) est un protocole permettant d'effectuer des requêtes DNS via une connexion HTTPS chiffrée.`,dohBenefit1:`Empêche l'interception et la manipulation du trafic DNS par des tiers`,dohBenefit2:`Améliore la sécurité lors de la résolution DNS et de la navigation web`,learnMore:`En savoir plus`,copyUrl:`Copier l'URL`,browsers:`Navigateurs`,browserTitle:`Configuration du navigateur (Chrome/Edge)`,browserSteps:`Paramètres > Confidentialité et sécurité > Sécurité > Utiliser un DNS sécurisé > Personnalisé > Coller l'URL.`,browserTips:`Ou copiez cette adresse dans votre barre d'adresse :`,apple:`Apple`,appleTitle:`macOS / iOS / iPadOS / tvOS`,appleDesc:`Les appareils Apple prennent en charge la configuration rapide via des profils de configuration.`,appleWarning:`Les profils ne peuvent pas être installés en "Mode Isolement (Lockdown Mode)". Veuillez vérifier que ce mode est désactivé.`,downloadConfig:`Télécharger le profil de configuration`,appleInstallHint:`Après le téléchargement, accédez à Paramètres > Profil téléchargé pour l'installer`,windows:`MS Windows`,windowsTitle:`Configuration Windows 11`,windowsStep0:`Paramètres > Réseau et Internet`,windowsStep1:`Propriétés > Attribution du serveur DNS > Modifier > Manuel.`,windowsStep2:`Sélectionnez et saisissez les IP DNS :`,windowsStep3:`Activez DoH (modèle manuel) et collez l'URL.`,windowsStep4:`Désactivez le repli vers les connexions non chiffrées.`,android:`Android`,androidTitle:`Android / DNS privé (DoT & DoQ)`,androidDesc:`Prend en charge le 'DNS privé' natif du système (DoT) ou des applications tierces pour DoH.`,androidDotTitle:`DNS privé (DoT / DoQ)`,androidDotDesc:`Paramètres > Réseau et Internet > DNS privé > Nom d'hôte du fournisseur DNS privé (prend également en charge les clients DoQ) :`,androidWildcardHint:`(Certificat générique, redirige vers ce profil)`,androidSingleDomainHint:`(Certificat domaine unique, redirige vers le profil par défaut)`,androidIpNotice:`Accès via IP ou adresse locale. Le DNS privé d'Android n'accepte que les noms de domaine ; veuillez configurer SERVERFULL_DOT_DOMAIN dans .env (ex. dns.example.com).`,androidWarning:`Remarque : Le 'DNS privé' natif d'Android utilise le protocole DoT. En cas de déploiement sur Cloudflare Workers, utilisez des applications comme Intra pour DoH. En mode Serverfull avec TLS configuré, vous pouvez directement utiliser le nom d'hôte DoT ci-dessus.`,dynamicFromDomain:`Dynamique (depuis "{{domain}}")`,dynamicFromDomainV6:`Dynamique IPv6 (depuis "{{domain}}")`,linux:`Linux`,linuxTitle:`Linux (proxy DoH Cloudflared)`,linuxDesc:`Exécutez un proxy DNS local léger pour envoyer les requêtes DNS chiffrées par DoH à Obex.`,linuxStep1:`Exécutez le script suivant pour installer cloudflared et créer un service systemd (écoute sur 127.0.0.1:53).`,linuxStep2:`Modifiez le DNS du système pour 127.0.0.1.`,routeros:`MikroTik`,routerosTitle:`MikroTik RouterOS`,routerosDesc:`Utilisez ce résolveur pour tous les appareils de votre réseau en le définissant comme serveur DoH du routeur.`,routerosStep1:`À exécuter dans le terminal RouterOS (RouterOS 7) :`,routerosNote:`Les requêtes transmises par le routeur apparaissent dans les journaux comme provenant du routeur, et non des appareils individuels. Configurez les appareils directement si vous avez besoin de journaux par appareil.`,routerosDocs:`Documentation DNS de MikroTik`,accessPointsCardTitle:`Points d'accès`,currentAccessPoint:`Point d'accès actuel`,selectAccessPointToConfigure:`Sélectionner le point d'accès à configurer`,quic:`QUIC & HTTP/3`,quicTitle:`DNS over QUIC (DoQ) & HTTP/3 (DoH3)`,quicDesc:`Prise en charge native de la RFC 9250 (DNS over QUIC) et de la RFC 9460 (HTTP/3 & Encrypted Client Hello), avec établissement 0-RTT et protection contre l'inspection du SNI.`,doqTitle:`DNS over QUIC (DoQ - RFC 9250)`,doqAppHint:`Compatible avec les clients modernes tels qu'AdGuard, Clash Meta (Mihomo), Sing-box, etc. :`,doqWildcardHint:`(Certificat générique, redirige vers ce profil)`,doqSingleDomainHint:`(Certificat de domaine unique, redirige vers le profil par défaut)`,doqIpNotice:`DoQ requiert un certificat TLS et un nom de domaine valide. Veuillez définir SERVERFULL_DOT_DOMAIN dans .env puis actualiser.`,h3Title:`HTTP/3 (DoH3) & ECH (Encrypted Client Hello)`,h3Desc:`Les navigateurs modernes (Chrome/Firefox/Safari) négocient automatiquement HTTP/3 et le chiffrement ECH via les enregistrements Alt-Svc et HTTPS RFC 9460 :`,ddrHint:`Intégré avec la section 8 de la RFC 9460 DDR (Discovery of Designated Resolvers), permettant aux clients de négocier et de passer automatiquement à DoQ/DoT et ECH via des requêtes _dns.`,e2eeDesc:`Chiffre les journaux DNS à la périphérie avec votre clé hybride post-quantique (P256-MLKEM768). Le cloud ne peut pas les lire; le déchiffrement se fait localement via votre Passkey.`,detecting:`Détection en cours...`,dotUnavailableCfTitle:`DoT / DoQ indisponible en mode Cloudflare Worker`,dotUnavailableCfDesc:`Actuellement exécuté en mode Cloudflare Worker (Serverless). En raison des limites du runtime edge, l'écoute sur les ports TCP/UDP 853 n'est pas prise en charge. Pour utiliser DoT ou DoQ, déployez en mode Serverfull ; utilisez DoH pour le moment.`,privateNetwork:`Réseau privé`},a={title:`Règles personnalisées`,subtitle:`Contrôlez manuellement le comportement de résolution pour des domaines spécifiques (bloquer, autoriser ou rediriger).`,addSelfRedirectTag:`Ajouter une redirection du site ?`,addSelfRedirectPrompt:`Ajouter une règle CNAME pour ce site pour l'optimisation réseau régionale (recommandé pour les utilisateurs en Chine continentale) ?`,action:`Action`,typeBlock:`Bloquer (BLOCK)`,typeAllow:`Autoriser (ALLOW)`,typeRedirect:`Rediriger (REDIRECT)`,pattern:`Modèle de domaine (Pattern)`,patternPlaceholder:`example.com ou *.test.com`,addRule:`Ajouter la règle`,redirectSettings:`Paramètres de redirection`,aRecord:`Enregistrement A (IPv4)`,aaaaRecord:`Enregistrement AAAA (IPv6)`,cnameRecord:`Enregistrement CNAME`,txtRecord:`Enregistrement TXT`,optional:`(optionnel)`,ipv4Placeholder:`ex. 1.2.3.4`,ipv6Placeholder:`ex. 2001:db8::1`,cnamePlaceholder:`ex. cible.com`,txtPlaceholder:`Saisissez le contenu du texte...`,saveRedirectRule:`Enregistrer et ajouter la règle de redirection`,noRulesTitle:`Aucune règle personnalisée`,noRulesDesc:`Vous n'avez pas encore ajouté de règle manuelle.`,tableAction:`Action`,tablePattern:`Modèle`,tableDetails:`Détails de résolution`,tableOps:`Opérations`,labelBlock:`Bloquer`,labelAllow:`Autoriser`,labelRedirect:`Rediriger`,detailBlock:`Résoudre vers : `,detailAllow:`Transmettre au serveur amont`,patternEmpty:`Le modèle de domaine ne peut pas être vide`,duplicatePattern:`Une règle existe déjà pour ce domaine`,addSuccess:`Règle ajoutée avec succès`,addFailed:`Échec de l'ajout de la règle`,updateSuccess:`Règle mise à jour avec succès`,updateFailed:`Échec de la mise à jour de la règle`,tableCreatedAt:`Date d'ajout`,clickToSort:`Cliquer pour trier`,editRule:`Modifier la règle`,cancel:`Annuler`,yes:`Oui`,no:`Non`,saveChanges:`Enregistrer les modifications`,delete:`Supprimer`,close:`Fermer`},o={customRange:`Période personnalisée`,startTime:`Heure de début`,endTime:`Heure de fin`,apply:`Appliquer`,custom:`Personnalisé`,totalQueries:`Requêtes totales`,blocked:`Bloquées`,redirected:`Redirigées`,blockRate:`Taux de blocage`,activeDevices:`Appareils actifs`,activeIPs:`Adresses IP actives`,queryTrend:`Évolution des requêtes`,noRecords:`Aucun enregistrement pour cette période`,topAllowed:`Domaines les plus autorisés (Allowed)`,topBlocked:`Domaines les plus bloqués (Blocked)`,noData:`Aucune donnée`,clientActivity:`Activité des clients`,ipAddress:`Adresse IP`,location:`Localisation`,queries:`Requêtes`,destinationDistribution:`Distribution des destinations de trafic`,requests:`Requêtes`,topIsps:`Principaux FAI`,pressToShowMore:`Cliquer pour afficher plus`,maximize:`Agrandir`,minimize:`Réduire`,loading:`Chargement...`},s={title:`Journaux de requêtes`,subtitle:`Consultez les journaux de résolution DNS et les enregistrements de blocage pour ce profil.`,realtime:`Temps réel`,allStatus:`Tous les états`,onlyPass:`Autorisées`,onlyBlock:`Bloquées`,onlyRedirect:`Redirigées`,searchPlaceholder:`Rechercher des domaines...`,noResults:`Aucun résultat trouvé`,noRecords:`Aucun enregistrement`,noResultsDesc:`Aucun enregistrement de domaine ne correspond à "{{query}}".`,noRecordsDesc:`Aucune requête DNS reçue pendant la période sélectionnée.`,tableTime:`Heure`,tableDomain:`Domaine`,tableAnswer:`Résultat`,tableSource:`Source`,tableType:`Type`,tableStatus:`État`,tableReason:`Raison`,loadedAll:`Tous les {{count}} enregistrements ont été chargés`,realtimeLoadMoreTip:`Désactivez le mode "Temps réel" pour en charger plus`,filterAccessPoint:`Point d'accès`,allAccessPoint:`Tous les points d'accès`,allCountry:`Tous les pays`,filterCountry:`Pays de destination`,allIsp:`Tous les FAI`,filterIsp:`FAI`,timeRange:`Période`,clearFilters:`Effacer les filtres`,details:`Détails de la requête`,detailAccessPoint:`Point d'accès`,basicInfo:`Informations de base`,detailDomain:`Domaine`,detailType:`Type`,detailTime:`Heure`,detailLatency:`Latence`,detailProfile:`Profil utilisé`,detailStatus:`État`,detailUpstream:`Serveur amont`,detailReason:`Raison`,detailNoReason:`Aucune (Autorisé)`,detailECS:`ECS`,resolutionResult:`Résultat de résolution`,noResult:`Aucun résultat`,networkDetails:`Détails réseau`,clientSource:`Client (Source)`,destination:`Destination`,quickActions:`Actions rapides`,actionAllow:`Autoriser`,actionBlock:`Bloquer`,actionRedirect:`Rediriger`,statusPass:`Autorisé`,statusBlock:`Bloqué`,statusRedirect:`Redirigé`,export:`Exporter les journaux`,rewritten:`Réécrit`,logDetails:`Détails du journal`,searchCountry:`Rechercher un pays...`,noMatchingCountries:`Aucun pays correspondant trouvé`,searchIsp:`Rechercher un FAI...`,noMatchingIsps:`Aucun FAI correspondant trouvé`,loadingIsps:`Chargement des FAI...`,loggingDisabledTitle:`Journalisation désactivée`,loggingDisabledDesc:`La conservation des journaux pour ce profil est définie sur 'Désactivé'. Aucun journal n'est enregistré. Pour afficher les journaux, activez la rétention dans les Paramètres.`,detailIsClientEncrypted:`Chiffré côté client`,encryptedLocked:`Oui (Verrouillé)`,encryptedDecrypted:`Oui (Déchiffré localement)`,encryptedYes:`Oui`,notEncrypted:`Non`,encryptedRecord:`[Enregistrement chiffré]`,exportSuccess:`Journaux exportés avec succès`,exportError:`Échec de l'exportation des journaux`,e2eeLockedExportWarning:`Certains journaux sont chiffrés et actuellement verrouillés ; le fichier exporté peut contenir des espaces réservés chiffrés.`,scrollToTop:`Haut de page`},c={title:`Listes de blocage externes`,subtitle:`Abonnez-vous à des listes de blocage de domaines gérées par des tiers (comme AdGuard, etc.).`,formatDisclaimer:`Ce système ne prend en charge que les formats de liste AdGuard basiques et les listes de domaines simples. Seules les règles de blocage de base (ex. ||example.com^) sont prises en compte ; les exceptions "@@", les règles de réécriture "$" et les jokers "*" sont ignorés. Les sous-domaines sont associés automatiquement.`,syncAll:`Synchroniser toutes les listes`,urlPlaceholder:`Saisir l'URL de la liste...`,addSubscription:`Ajouter un abonnement`,supportedFormats:`Formats de listes pris en charge :`,formatAdGuard:`Compatible avec les règles de filtrage ||domain.com^.`,formatHosts:`Compatible avec les fichiers hosts standard (ex. 0.0.0.0 domain.com).`,noListsTitle:`Aucune liste ajoutée`,noListsDesc:`Vous n'êtes pas encore abonné à une liste de blocage externe.`,tableUrl:`URL de la liste`,tableLastSync:`Dernière synchro`,tableStatus:`État`,tableOps:`Opérations`,neverSynced:`Jamais`,enabled:`Actif`,disabled:`Échec de synchro`,statusNormal:`Normal`,statusDisabled:`Désactivée`,statusOutdated:`Obsolète`,statusMissing:`Manquant`,presetOisdBig:`OISD Big (Blocage de publicités et malwares)`,presetOisdNsfw:`OISD NSFW (Blocage de contenus pornographiques/adultes)`,presetAdGuard:`AdGuard AdServers (Serveurs publicitaires)`,presetStevenBlack:`StevenBlack Hosts (Bloqueur tout-en-un)`,syncTaskStarted:`Tâche de synchronisation démarrée`,syncCheckComplete:`Vérification de synchronisation terminée`,syncTaskFailed:`Échec de la synchronisation`,syncing:`Synchronisation...`,syncSuccess:`Synchronisation réussie`,syncError:`Échec de la synchronisation`,syncErrorDesc:`Impossible de télécharger ou d'analyser la liste de blocage. Veuillez vérifier le lien et son accessibilité.`,deleteConfirm:`Confirmer la suppression de l'abonnement ?`,deleteSuccess:`Liste supprimée avec succès`,deleteError:`Échec de la suppression de la liste`,addSuccess:`Liste ajoutée avec succès`,addError:`Échec de l'ajout de la liste`,listEnabled:`Liste active`,listEnabledHint:`Désactivez pour arrêter le filtrage avec cette liste sans la supprimer. Son abonnement et son historique de synchronisation sont conservés.`,listEnabledToast:`Liste activée - reconstruction du filtre`,listDisabledToast:`Liste désactivée - reconstruction du filtre`,checkDomain:`Vérifier un domaine`,checkDomainHint:`Les listes sont stockées sous forme de filtres compacts, leurs entrées ne peuvent donc pas être parcourues. Vous pouvez tester instantanément n'importe quel domaine par rapport à cette liste.`,check:`Vérifier`,checkBlocked:`Bloqué par cette liste`,checkNotBlocked:`Non bloqué par cette liste`,checkViaParent:`(correspond à un domaine parent)`,checkNotSynced:`Cette liste n'a pas encore terminé sa synchronisation, il n'y a donc rien à vérifier.`,checkListDisabled:`Cette liste est actuellement désactivée, elle ne filtre donc rien pour le moment.`,checkProbabilisticRate:`Les filtres sont probabilistes : environ 1 correspondance sur {{odds}} est un faux positif. Ajouter une exception couvre aussi tous ses sous-domaines.`,checkProbabilistic:`Les filtres sont probabilistes, une petite part des correspondances sont donc des faux positifs. Ajouter une exception couvre aussi tous ses sous-domaines.`,checkAllowAction:`Autoriser quand même`,checkAllowed:`Exception ajoutée - ce domaine se résout désormais`,allowRuleAdded:`Exception ajoutée pour {{domain}}`,listDetails:`Détails de la liste`},l={title:`Paramètres du profil`,subtitle:`Gériez votre stratégie de résolution DNS et vos options avancées.`,saveChanges:`Enregistrer toutes les modifications`,saveSuccess:`Paramètres enregistrés avec succès`,saveError:`Échec de l'enregistrement. Veuillez réessayer plus tard`,upstreamTitle:`Serveur amont`,dohUrl:`URL DoH`,dnsIP:`IP DNS`,classicDns:`DNS classique`,httpsOnly:`Prendre en charge HTTPS uniquement`,upstreamDesc:`Toutes les requêtes non bloquées seront envoyées à ce serveur. Prend en charge DoH (HTTPS), DoT (tls://), DNS Stamp (sdns://) ou le DNS classique. Le DNS classique est acheminé via TCP.`,defaultPolicyTitle:`Comportement de filtrage par défaut`,onNoMatch:`Si aucune règle ne correspond`,allowAll:`Autoriser toutes les requêtes`,blockAll:`Bloquer toutes les requêtes`,logRetentionTitle:`Rétention des journaux`,retentionDuration:`Durée de rétention`,retentionDesc:`Les journaux sont supprimés automatiquement. `,skipLogOnPass:`Ne pas enregistrer les requêtes autorisées`,skipLogOnPassDesc:`Lorsqu'activé, les requêtes normales autorisées ne sont pas enregistrées. Seules les requêtes bloquées, redirigées ou échouées sont conservées.`,ecsTitle:`EDNS Client Subnet (ECS)`,ecsUpstreamHint:`Tous les serveurs DNS en amont ne prennent pas en charge l'ECS. Pour les résolveurs récursifs comme ControlD, l'ECS n'affecte que le routage interne et n'est pas transmis au serveur faisant autorité.`,sendEcs:`Transmettre ECS`,customSubnet:`Sous-réseau personnalisé`,customIpv4:`Sous-réseau IPv4 personnalisé`,customIpv6:`Sous-réseau IPv6 personnalisé`,ipv4Hint:`(ex. 1.2.3.0/24)`,ipv6Hint:`(ex. 2001:db8::/32)`,testToolTitle:`Outil de test de résolution en temps réel`,testDomain:`Domaine de test`,recordType:`Type d'enregistrement`,runTest:`Exécuter le test`,domainPlaceholder:`ex. google.com`,hitRule:`Règle correspondante / Raison`,defaultAllow:`Politique d'autorisation par défaut`,parseLatency:`Temps de résolution`,sourceIp:`Adresse IP source`,answerSection:`Section des réponses (Answer Section)`,noRecordsReturned:`Cette requête n'a renvoyé aucun enregistrement.`,diagnostics:`Informations de diagnostic`,errorDetail:`Détails de l'erreur`,upstreamResponse:`Réponse de l'amont`,presetCloudflareSecurity:`Cloudflare Security (Rapide/Protection malwares et phishing)`,presetCloudflareFamilies:`Cloudflare Families (Rapide/Protection malwares et contenu adulte)`,presetQuad9:`Quad9 (Protection malwares/Pas de journaux/Sans ECS)`,presetQuad9Ecs:`Quad9 ECS (Protection malwares/Pas de journaux/Avec ECS)`,presetControlDFree:`ControlD Free (Protection publicités/trackers/malwares/phishing)`,presetControlDUncensored:`ControlD Uncensored (Contourner la censure)`,presetAdGuard:`AdGuard (Bloqueur publicités et trackers)`,presetAdGuardFamily:`AdGuard Family protection (Publicités/trackers/contenu adulte/recherche sécurisée)`,retention10m:`10 minutes`,retention1h:`1 heure`,retention24h:`24 heures`,retention7d:`7 jours`,retention30d:`30 jours`,retention90d:`90 jours`,retention180d:`180 jours`,retention360d:`360 jours`,retentionMaxSuffix:`(Maximum)`,daysUnit:`jours`,blockModeTitle:`Mode de réponse au blocage`,blockModeDesc:`Contenu renvoyé lorsqu'un domaine est bloqué`,default:`Par défaut`,NXDOMAIN:`NXDOMAIN (Le domaine n'existe pas)`,NODATA:`NODATA (Aucune donnée)`,customIP:`IP personnalisée`,export:`Exporter la configuration`,exportSuccess:`Configuration exportée avec succès`,exportError:`Échec de l'exportation. Veuillez réessayer plus tard`,nameUpdateSuccess:`Nom du profil mis à jour`,saving:`Enregistrement en cours...`,echTitle:`Réécrire ECH`,enableEch:`Activer la réécriture ECH`,echDesc:`Pour les domaines gérés par Cloudflare, réécrit automatiquement les paramètres ECH et le SNI de façade lors des requêtes HTTPS (Type 65) / SVCB (Type 64).`,echFrontingTitle:`SNI externe (ECH Fronting)`,echFrontingDesc:`Nom de domaine visible en clair dans le handshake TLS externe`,echFrontingCustomPlaceholder:`Entrez un domaine de fronting personnalisé, ex. crypto.cloudflare.com`,echPreferred:`Recommandé`,whatIsEch:`Qu'est-ce que l'ECH (Encrypted Client Hello) ?`,echHelpDesc:`L'ECH est une extension de confidentialité essentielle de TLS 1.3 qui chiffre intégralement le nom de domaine réel (Inner SNI), n'exposant qu'un domaine de façade (Outer SNI).`,echHelpBenefit1:`Empêche les FAI et les intermédiaires d'intercepter le sous-domaine exact visité`,echHelpBenefit2:`Associé au DoH, élimine les fuites de SNI en clair`,retentionDisabled:`Désactivé (Besoins de confidentialité)`,retentionDisabledDesc:`La journalisation est désactivée. Le système n'enregistrera aucun journal de requêtes DNS et effacera immédiatement les journaux historiques.`,localRetentionTitle:`Stockage et conservation locale`,localRetentionDuration:`Durée de rétention locale`,localRetentionDesc:`Les journaux sont stockés de manière persistante dans la base SQLite locale de votre navigateur (OPFS), permettant des recherches instantanées et réduisant les coûts de stockage dans le cloud. Les journaux locaux expirés sont automatiquement supprimés.`,localRetention30d:`30 jours`,localRetention90d:`90 jours (Recommandé)`,localRetention180d:`180 jours`,localRetention365d:`365 jours (1 an)`,localRetentionUnlimited:`Illimité (Jusqu'au nettoyage manuel)`,localEngineStorage:`Moteur de stockage`,localEngineOpfs:`OPFS persistant`,localEngineMemory:`Mémoire temporaire (Navigation privée)`,localCachedCount:`Journaux en cache local`,localCachedCountUnit:`{{count}} entrées`,clearLocalData:`Vider les journaux locaux`,clearLocalDataConfirm:`Voulez-vous vraiment effacer tous les journaux locaux pour ce profil ? (Les journaux cloud ne sont pas affectés)`,clearLocalDataSuccess:`Journaux locaux effacés avec succès`,clearLocalDataError:`Échec de l'effacement des journaux locaux`,e2eeTitle:`Chiffrement de bout en bout (E2EE)`,e2eeEnabled:`Activé`,e2eeDisabled:`Désactivé`,e2eeDesc:`Chiffre les journaux DNS à la périphérie avec votre clé hybride post-quantique (P256-MLKEM768). Le cloud ne peut pas les lire; le déchiffrement se fait localement via votre Passkey.`,e2eePasskeyRequired:`E2EE nécessite un Passkey (WebAuthn). Veuillez d'abord ajouter un Passkey dans les paramètres du compte.`,e2eeGoToAccount:`Aller aux paramètres du compte`,e2eeEnableSwitch:`Activer le chiffrement E2EE`,e2eeKeyType:`Algorithme de chiffrement`,e2eeDeviceState:`État de cet appareil`,e2eeUnlocked:`Déverrouillé sur cet appareil`,e2eeUnlockButton:`Vérifier le Passkey pour déverrouiller`,e2eeProtectedPasskeys:`Passkeys autorisés`,e2eeDevicesUnit:`appareil(s)`,e2eeEnableSuccess:`Chiffrement E2EE activé avec succès`,e2eeEnableError:`Échec de l'activation du chiffrement E2EE`,e2eeDisableSuccess:`Chiffrement E2EE désactivé`,e2eeDisableError:`Échec de la désactivation du chiffrement E2EE`,e2eeUnlockSuccess:`Clé déverrouillée avec succès sur cet appareil`,e2eeUnlockError:`Échec de la vérification du Passkey`,e2eeDisableConfirm:`Voulez-vous vraiment désactiver E2EE ? Les futurs journaux seront stockés en clair.`,e2eeUnlockPrompt:`Ce profil utilise le chiffrement E2EE. Vérifiez votre Passkey pour afficher les journaux.`,e2eeUnlockNow:`Déverrouiller les journaux`,e2eeUnlockRecovery:`Déverrouiller avec la clé de récupération`,securityTitle:`Sécurité et accès`,rotateKeyTitle:`URL d'accès`,rotateKeyDesc:`Génère une nouvelle URL d'accès pour ce profil. Tous les appareils utilisant l'ancienne URL perdront immédiatement leur connexion à DNS Worker et devront être reconfigurés avec la nouvelle URL.`,rotateKeyBtn:`Faire pivoter l'URL`,copied:`Copié dans le presse-papiers`,nameUpdateFailed:`Échec de la mise à jour`},u=JSON.parse(`{"title":"Paramètres du compte","subtitle":"Gérez vos identifiants de sécurité et les utilisateurs du système.","e2ee":{"title":"Chiffrement de bout en bout (E2EE)","desc":"Sécurise vos données sensibles via un chiffrement enveloppe hybride post-quantique côté client (P256-MLKEM768 + AES-256-GCM / NIST FIPS 203) adossé à des Passkeys matériels. Seuls les appareils autorisés peuvent déchiffrer localement.","pqcTag":"PQC / NIST FIPS 203","upgradePqcBtn":"Passer à la post-quantique (PQC)","upgradePqcSuccess":"Mise à niveau réussie vers le chiffrement hybride post-quantique (P256-MLKEM768)","upgradePqcError":"Échec de la mise à niveau vers le chiffrement post-quantique","enabled":"Activé","disabled":"Désactivé","passkeyRequired":"Le chiffrement de bout en bout nécessite au moins une clé d'accès matérielle (WebAuthn). Veuillez ajouter une Passkey dans la section MFA ci-dessus.","scopesTitle":"Catégories de données chiffrées","scopesSubtitle":"Choisissez les catégories de données à chiffrer de bout en bout avec votre clé d'accès.","scopeLogsTitle":"Journaux de requêtes DNS","scopeLogsDesc":"Chiffre les domaines, adresses IP clientes, réponses et latences au niveau de l'Edge avant enregistrement dans D1.","scopeRulesTitle":"Règles personnalisées et redirections","scopeRulesDesc":"Règles d'autorisation/blocage et politiques de redirection chiffrées côté client.","scopeClientsTitle":"Métadonnées de clients et d'appareils","scopeClientsDesc":"Alias d'appareils, identifiants de points d'accès et métadonnées de topologie réseau.","statusActive":"Protégé","statusPlanned":"Prévu","profileSelect":"Configurer le profil","keyType":"Algorithme de chiffrement","deviceState":"État actuel de l'appareil","unlocked":"Déverrouillé sur cet appareil","unlockButton":"Vérifier la Passkey pour déverrouiller","protectedPasskeys":"Clés d'accès Passkey autorisées","devicesUnit":"clé(s)","enableSuccess":"Chiffrement de bout en bout activé avec succès","enableError":"Échec de l'activation du chiffrement de bout en bout","disableSuccess":"Chiffrement de bout en bout désactivé","disableError":"Échec de la désactivation du chiffrement de bout en bout","unlockSuccess":"Clé privée déverrouillée avec succès sur cet appareil","unlockError":"Échec de la vérification de la Passkey","disableConfirm":"Voulez-vous vraiment désactiver le chiffrement de bout en bout pour ce profil ? Les futurs journaux seront stockés en clair. (Les anciens journaux chiffrés nécessitent toujours la clé privée)","noKeypairTitle":"Paire de clés de bout en bout non initialisée","noKeypairDesc":"Le chiffrement de bout en bout nécessite la génération d'une paire de clés post-quantiques (P256-MLKEM768) pour votre compte. La clé privée est protégée par chiffrement enveloppe adossé à votre Passkey ou clé de récupération.","initPasskeyBtn":"Vérifier la Passkey existante pour générer la paire de clés","addPasskeyBtn":"Ajouter une Passkey pour prendre en charge le chiffrement matériel","initRecoveryBtn":"Générer la paire de clés avec la clé de récupération","initWithRecoveryTitle":"Générer la paire de clés avec la clé de récupération","initWithRecoveryDesc":"Saisissez votre clé d'urgence actuelle à 30 chiffres. Le système générera localement une paire de clés post-quantiques (P256-MLKEM768). La clé de récupération sera automatiquement renouvelée dès son utilisation.","keypairGenSuccess":"Paire de clés de bout en bout générée avec succès !","keypairGenError":"Échec de la génération de la paire de clés","unlockRecoveryButton":"Déverrouiller avec la clé de récupération","unlockWithRecoveryTitle":"Déverrouiller avec la clé de récupération","unlockWithRecoveryDesc":"Saisissez votre clé d'urgence à 30 chiffres. Remarque : La clé sera automatiquement renouvelée dès qu'elle aura été vérifiée.","recoveryKeyInputLabel":"Clé de récupération","unlockConfirm":"Déverrouiller la clé privée","recoveryUnlockFailed":"Clé de récupération non valide ou échec du déchiffrement","generateKeypairBtn":"Générer la paire de clés","enableSwitch":"Activer le chiffrement de bout en bout des journaux de requêtes","enableSwitchDesc":"Chiffre les noms de domaine, les adresses IP clientes, les réponses et la latence en périphérie avant stockage dans le cloud.","trustBoundaryTitle":"Avis sur les limites de sécurité et de confiance","trustBoundaryDesc":"Tout le trafic de requêtes DNS transite inévitablement par le serveur d'hébergement (nœuds Cloudflare Workers ou serveur autonome) lors de la résolution, où les requêtes sont traitées en mémoire avant d'être écrites sous forme chiffrée. Cette fonctionnalité protège les données au repos dans la base de données cloud (D1) ; elle ne masque pas le trafic réseau en direct au serveur d'hébergement qui traite la requête.","initFailed":"Échec de l'initialisation du chiffrement de bout en bout","lockDevice":"Verrouiller cet appareil","lockSuccess":"Verrouillé, clé privée effacée du stockage local","enrollPasskeyBtn":"Associer la clé d'accès actuelle","enrollPasskeySuccess":"Clé d'accès associée avec succès au chiffrement de bout en bout !","enrollPasskeyFailed":"Échec de l'association de la clé d'accès","resetKeypairBtn":"Réinitialiser la paire de clés","confirmResetBtn":"Confirmer la réinitialisation et la régénération","resetKeypairTitle":"Réinitialiser la paire de clés E2EE","resetKeypairDesc":"Si votre clé de secours ne correspond pas ou ne parvient pas à déchiffrer, et qu'aucune clé d'accès n'est enregistrée, la réinitialisation effacera les anciennes clés du serveur et générera une toute nouvelle paire de clés post-quantique (P256-MLKEM768).","resetKeypairPasskeyNotice":"La confirmation invoquera immédiatement votre clé d'accès configurée pour chiffrer et autoriser la nouvelle paire de clés.","resetKeypairRecoveryNotice":"La confirmation vous invitera à saisir votre clé de secours actuelle pour générer et chiffrer la nouvelle paire de clés.","resetAndInitPasskeySuccess":"Paire de clés réinitialisée avec succès et rechiffrée avec votre clé d'accès !","resetSuccessEnterRecovery":"Anciennes clés purgées. Veuillez initialiser une nouvelle paire de clés avec votre clé de secours.","resetFailed":"Échec de la réinitialisation de la paire de clés"},"jwtSecretWarningTitle":"Avis de sécurité : Secret JWT faible","jwtSecretWarningDesc":"Le JWT_SECRET actuel comporte moins de 32 caractères, ce qui présente des risques potentiels pour la sécurité. Veuillez configurer la variable d'environnement KEK_v1 avant de renouveler JWT_SECRET afin de garantir que les clés TOTP et de récupération chiffrées par enveloppe restent déchiffrables.","roleAdmin":"Administrateur système","roleUser":"Utilisateur","personalInfo":"Informations personnelles","username":"Nom d'utilisateur","userId":"ID de l'utilisateur","changePassword":"Modifier le mot de passe","currentPassword":"Mot de passe actuel","newPassword":"Nouveau mot de passe","updatePassword":"Mettre à jour le mot de passe","userManagement":"Gestion des utilisateurs (Admins uniquement)","createUser":"Créer un utilisateur","role":"Rôle","createdAt":"Créé le","lastActive":"Dernière activité le","lastResolve":"Dernière résolution le","actions":"Actions","dangerZone":"Zone de danger","clearLogs":"Effacer tous les journaux","clearLogsDesc":"Cela supprimera tous les journaux de requêtes DNS générés sous vos profils. Cette action est irréversible.","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","yes":"Oui","no":"Non","createNow":"Créer maintenant","formatTipUsername":"Note sur le nom d'utilisateur : 5 à 32 caractères uniquement, format Unix","formatTipPassword":"Note sur le mot de passe : 12-100 caractères.","passwordSuccess":"Mot de passe modifié avec succès","updateFailed":"Échec de la modification","confirmDeleteUser":"Voulez-vous vraiment supprimer cet utilisateur ? Tous les profils lui appartenant seront également supprimés.","confirmClearLogs":"Voulez-vous vraiment supprimer tous les journaux de requêtes de vos profils ? Cette action est irréversible.","clearLogsSuccess":"Journaux supprimés avec succès","confirmDeleteAccount":"AVERTISSEMENT : Voulez-vous vraiment supprimer votre compte ?\\n\\nToutes vos configurations DNS, règles personnalisées et journaux de requêtes seront définitivement supprimés. Cette action ne peut pas être annulée !","inactivityPolicy":"Politique d'inactivité","inactivityDesc":"Pour protéger la vie privée des utilisateurs et économiser des ressources, tous les journaux de requêtes et configurations DNS des comptes sans activité de résolution pendant 30 jours seront automatiquement supprimés. Le compte lui-même sera supprimé après 90 jours sans connexion.","systemSettings":"Paramètres système (Admins uniquement)","adminOnlyView":"Uniquement visible par les administrateurs","featureToggle":"Options des fonctionnalités","enableTurnstileSignup":"Activer le captcha sur la page d'inscription","enableTurnstileLogin":"Activer le captcha sur la page de connexion","totp":{"title":"Application d'authentification (TOTP)","enabled":"Activé","disabled":"Désactivé","setupDesc":"Ajoutez un niveau de sécurité supplémentaire à votre compte. Utilisez Google Authenticator, Authy ou n'importe quelle application compatible TOTP.","setupBtn":"Configurer l'application d'authentification (TOTP)","scanQR":"Scannez ce code QR avec votre application d'authentification :","orEnterManually":"Ou saisissez la clé manuellement :","enterCode":"Saisissez le code de votre application pour confirmer :","enterCodeHint":"Saisissez le code à 6 chiffres pour vérifier la bonne configuration de la clé.","activate":"Activer TOTP","skipPassword":"Connexion sans mot de passe – Demander uniquement le code TOTP lors de la connexion (ignorer la saisie du mot de passe)","disable":"Désactiver l'application d'authentification (TOTP)","disableTitle":"Désactiver l'application d'authentification (TOTP)","disableWarning":"Après avoir désactivé TOTP, si aucune clé d'accès (Passkey) n'est configurée, votre compte ne sera protégé que par un mot de passe.","confirmDisable":"Désactiver TOTP","recoveryKeysTitle":"Veuillez enregistrer vos clés de récupération","recoveryKeysWarning":"Veuillez conserver votre clé de récupération dans un endroit sûr (ex. un gestionnaire de mots de passe). Chaque clé ne peut être utilisée qu'une seule fois.","copyKeys":"Copier toutes les clés","copied":"Copié !","done":"Terminé, j'ai enregistré les clés","activeDesc":"L'application d'authentification (TOTP) est active et génère des codes à 6 chiffres.","invalidCode":"Veuillez saisir un code à 6 chiffres","testBtn":"Tester le code","testTitle":"Tester l'application d'authentification (TOTP)","testDesc":"Saisissez le code de vérification à 6 chiffres de votre application d'authentification pour vérifier qu'elle est bien synchronisée et génère des codes valides.","testSuccess":"Vérification réussie ! Votre application d'authentification est correctement configurée.","testFailed":"Code de vérification invalide ou horloge désynchronisée","verificationCode":"Code de vérification à 6 chiffres","verifyBtn":"Vérifier maintenant","enterPassword":"Entrez votre mot de passe pour confirmer :","passwordPlaceholder":"Mot de passe du compte"},"activity":{"title":"Historique d'activité du compte","action":"Événement","time":"Heure","ip":"Adresse IP","session":"Session","empty":"Aucune activité enregistrée.","loadMore":"Charger plus","signup":"Inscription","loginSuccess":"Connexion réussie","loginFail":"Échec de connexion","logout":"Déconnexion","pwChangeSuccess":"Mot de passe modifié","pwChangeFail":"Échec de la modification du mot de passe","totpVerifySuccess":"Vérification TOTP réussie","totpVerifyFail":"Échec de la vérification TOTP","totpSetup":"Authentificateur TOTP configuré","totpRemoved":"Authentificateur TOTP désactivé","recoveryKeyUsed":"Clé de récupération utilisée","sessionRevoked":"Session révoquée","reasons":{"user_active":"Déconnexion active","user_revoke":"Session révoquée","expired":"Session expirée","geolocation_mismatch":"Écart géographique (Accès restreint)","geolocation_missing":"Informations géographiques manquantes","token_reuse":"Réutilisation de tokens (Alerte de sécurité)"},"passkeyRegistered":"Clé d'accès enregistrée","passkeyDeleted":"Clé d'accès supprimée","passkeyVerifySuccess":"Clé d'accès vérifiée","passkeyVerifyFail":"Échec de vérification de clé d'accès","recoveryKeyRotated":"Clé de récupération renouvelée","device":"Appareil"},"sessions":{"title":"Sessions actives","session":"Session","device":"Appareil","ip":"Adresse IP","loginTime":"Heure de connexion","expires":"Expire le","action":"Action","current":"Actuelle","revoke":"Révoquer","revokeFailed":"Échec de la révocation de la session.","empty":"Aucune session active trouvée.","unknownDevice":"Appareil inconnu","revokeOthers":"Révoquer les autres sessions","confirmRevokeOthers":"Révoquer les autres sessions","revokeOthersConfirmText":"Voulez-vous vraiment révoquer toutes les autres sessions actives ? Tous les autres appareils connectés seront déconnectés immédiatement."},"passkey":{"title":"Clés d'accès (Passkeys)","addBtn":"Ajouter une clé d'accès","desc":"Utilisez la biométrie (Touch ID, Face ID, Windows Hello) ou des clés de sécurité (YubiKey) pour une authentification multifacteur rapide et résistante au phishing.","empty":"Aucune clé d'accès ajoutée pour le moment.","addTitle":"Ajouter une clé d'accès","nameLabel":"Nom de la clé d'accès","namePlaceholder":"ex. my_passkey","promptNotice":"Après avoir cliqué sur Continuer, votre navigateur vous invitera à terminer l'enregistrement biométrique ou de la clé de sécurité.","continue":"Continuer","renameTitle":"Renommer la clé d'accès","deleteTitle":"Supprimer la clé d'accès","deleteConfirm":"Êtes-vous sûr de vouloir supprimer la clé d'accès \\"{{name}}\\" ? Vous ne pourrez plus l'utiliser pour l'authentification multifacteur.","defaultName":"Clé d'accès","notSupported":"Votre navigateur ou environnement actuel ne prend pas en charge les clés d'accès (WebAuthn).","regFailed":"Échec de l'enregistrement de la clé d'accès","count":"{{count}} configuré(s)","none":"Non configuré","created":"Créé le","lastUsed":"Dernière utilisation","neverUsed":"Jamais utilisé","updated":"Clé d'accès mise à jour avec succès","registered":"Clé d'accès enregistrée avec succès","deleted":"Clé d'accès supprimée","appNameLabel":"Domaine","appNameHelper":"La clé d'accès sera liée à ce domaine","formatTip":"Note sur le nom de clé d'accès : 1 à 30 caractères, seuls les lettres, chiffres, tirets et traits de soulignement sont autorisés","verifyPrompt":"Authentifiez-vous à l'aide des capteurs biométriques ou d'une clé de sécurité.","changePwNotice":"Une invite d'authentification Passkey apparaîtra lors de l'envoi.","submitNotice":"Une invite d'authentification Passkey apparaîtra lors de l'envoi.","testBtn":"Tester la clé d'accès","testThis":"Tester cette clé d'accès","testSuccess":"Clé d'accès vérifiée avec succès : {{name}}","testCancelled":"Vérification de la clé d'accès annulée","testFailed":"Échec de la vérification de la clé d'accès"},"mfaNone":"Aucun","resetUserPassword":"Réinitialiser le mot de passe","resetPasswordTitle":"Réinitialiser le mot de passe de l'utilisateur","resetPasswordWarning":"Après la réinitialisation, toutes les sessions actives de l'utilisateur seront immédiatement révoquées.","resetPasswordSuccess":"Mot de passe réinitialisé avec succès. Les sessions actives ont été révoquées.","confirmReset":"Confirmer la réinitialisation","mfa":{"title":"Authentification multifacteur (MFA)","enabled":"Configuré","notConfigured":"Non configuré","desc":"Les clés d'accès (Passkeys) et les applications d'authentification (TOTP) servent de méthodes MFA. Configurer au moins l'un d'eux protège votre compte.","passwordlessTitle":"Connexion sans mot de passe","passwordlessDesc":"Une fois activée, la saisie du mot de passe est ignorée et votre identité est vérifiée directement via Passkey ou TOTP.","unconfiguredHint":"Aucune méthode MFA n'est encore configurée. Configurez un Passkey ou une application d'authentification ci-dessous.","password":"Mot de passe","passkey":"Passkey","totp":"TOTP"},"recoveryKey":{"title":"Clé de récupération d'urgence","desc":"Une clé de récupération d'urgence vous permet de récupérer l'accès ou de réinitialiser votre mot de passe si vous perdez tous vos Passkeys ou applications d'authentification. Pour garantir une sécurité zéro connaissance, la clé est stockée sous forme de hachage cryptographique unidirectionnel et ne peut pas être affichée en texte clair. Elle est automatiquement renouvelée dès son utilisation.","configured":"Configurée","notConfigured":"Non configurée","rotateBtn":"Renouveler la clé de récupération","yourKey":"Votre clé de récupération à 30 chiffres","securityTip":"Gardez cette clé secrète. Toute personne y ayant accès peut accéder à votre compte.","rotateConfirm":"Le renouvellement invalidera immédiatement la clé actuelle. La vérification n'est autorisée que via Passkey existante ou clé d'origine. Continuer ?","confirmRotateBtn":"Procéder au renouvellement","rotateVerifyTitle":"Vérifier l'identité pour renouveler la clé","rotateSuccess":"Clé de récupération renouvelée avec succès ! Veuillez la conserver en lieu sûr immédiatement.","oneWayHash":"Hachage cryptographique unidirectionnel","oneWayTooltip":"Protégée par hachage unidirectionnel SHA-256. Le serveur ne stocke aucun texte clair et ne peut pas le déchiffrer.","newKeyGenerated":"Nouvelle clé de récupération à 30 chiffres générée (Sauvegardez maintenant)","oneWayWarning":"Attention : Cette clé n'est affichée QU'UNE SEULE FOIS. Le serveur ne conserve qu'un hachage irréversible, veuillez la copier et la conserver hors ligne en toute sécurité.","autoRotatedTitle":"Clé de récupération renouvelée automatiquement","autoRotatedNotice":"Conformément à la règle d'utilisation unique, votre ancienne clé a été invalidée et une nouvelle clé à 30 chiffres a été générée. Copiez-la et conservez-la hors ligne !","savedAndClose":"Je l'ai sauvegardée et continuer","savedAndContinue":"Je l'ai sauvegardée et accéder au tableau de bord","descOneWay":"La clé de récupération d'urgence est le seul moyen de récupérer l'accès au compte et de déchiffrer les données E2EE en cas de perte de tous les Passkeys ou authentificateurs. Pour garantir la sécurité zéro-connaissance, elle est stockée sous forme de hachage irréversible et ne peut pas être affichée en texte clair sur le Web. Elle ne peut être renouvelée qu'à l'aide de la clé d'origine ou d'un Passkey existant. Elle est automatiquement renouvelée après utilisation.","keyRequired":"La clé de récupération est requise","verifyBtn":"Clé de récupération","verifyPromptLabel":"Clé de récupération d'origine","rotateSuccessE2eeWarning":"Clé de secours renouvelée avec succès ! Remarque : Comme le E2EE était verrouillé et n'a pas pu être déchiffré, les anciennes données nécessitent toujours la clé précédente, ou vous pouvez cliquer sur « Réinitialiser la paire de clés » ci-dessous."},"verifyIdentity":"Vérification de sécurité","verifyIdentityDesc":"Pour protéger votre compte, veuillez vérifier votre identité avant de continuer.","usePasskeyInstead":"Authentifier avec Passkey","changePasswordWithPasskey":"Vérifier avec Passkey et modifier","enableRegistration":"Activer l'inscription des utilisateurs","timezone":"Fuseau horaire","timezoneAuto":"Automatique (par défaut du navigateur)","totpCode":"Code de l'authentificateur"}`),d={item1Title:`DNS Worker de protection`,item1Desc:`Un résolveur DNS basé sur Cloudflare Workers & D1, optimisé pour la vitesse et la sécurité.`,item2Title:`Confidentialité DoH`,item2Desc:`Évite l'interception DNS et protège votre confidentialité via des tunnels chiffrés DNS over HTTPS (RFC 8484).`,item3Title:`Réseau Edge mondial`,item3Desc:`Profite du vaste réseau edge de Cloudflare pour obtenir une résolution ultrarapide et des latences minimales.`,item4Title:`Filtrage granulaire`,item4Desc:`Support complet pour les listes de blocage et d'autorisation, les règles AdGuard et la redirection personnalisée d'enregistrements DNS.`,item5Title:`Statistiques en temps réel`,item5Desc:`Visualisez l'état du réseau via des journaux de requêtes détaillés et un tableau de bord complet.`,item6Title:`UI moderne et mode sombre`,item6Desc:`Un tableau de bord à haute densité pour les développeurs et les particuliers, basé sur Blueprint UI de Palantir.`,item7Title:`Infrastructure cloud-native`,item7Desc:`L'architecture serverless garantit une maintenance nulle et une évolutivité illimitée pour votre DNS privé.`,item8Title:`Gérer plusieurs profils`,item8Desc:`Créez et gérez des profils DNS distincts pour différents appareils ou environnements réseau.`,item9Title:`Plusieurs points d'accès`,item9Desc:`Configurez des points d'accès dédiés pour différents appareils afin d'analyser les journaux et les statistiques séparément.`,item10Title:`Journaux Zero-Knowledge`,item10Desc:`Chiffrement de bout en bout avec KEM hybride post-quantique (P256-MLKEM768). Les clés restent locales, garantissant un serveur sans aucune connaissance.`,item11Title:`Support multi-BD D1/Turso/File`,item11Desc:`Prend en charge Cloudflare D1, Turso SQLite distribué et le stockage de fichiers locaux pour surmonter les limites de quota.`},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`,serverfullTitle:`Guide de déploiement et configuration DNS Worker Serverfull`,serverfullSubtitle:`Votre instance s'exécute en mode Serverfull (autonome). Suivez ces étapes pour initialiser la base de données et configurer les paramètres.`,serverfullDbStatus:`Base de données SQLite (Répertoire de données local)`,serverfullDbConfigured:`Prêt et initialisé`,serverfullDbMissing:`Fichier de base de données manquant`,serverfullDbMissingHint:`La base de données est normalement initialisée lors de l'installation. Si elle est manquante, réinstallez ou redémarrez le service pour déclencher l'initialisation.`,serverfullJwtStatus:`Clé secrète JWT (Configuration .env)`,serverfullJwtConfigured:`Configuré`,serverfullJwtMissing:`Non configuré`,serverfullJwtMissingHint:`JWT_SECRET peut être modifié dans .env (ou /etc/dns-worker/.env). Collez la clé générée ci-dessous et redémarrez le service.`,serverfullStepInstallTitle:`1. Vérifier ou réinstaller (Initialiser la base de données)`,serverfullStepInstallDesc:`Si la base de données SQLite est manquante, réinstallez globalement :`,serverfullStepInstallCmd:`sudo npm install -g dns-worker@latest`,serverfullStepEnvTitle:`2. Configurer JWT_SECRET dans .env`,serverfullStepEnvDesc:`Modifiez /etc/dns-worker/.env et insérez la clé générée ci-dessous :`,serverfullStepEnvCmd:`sudo nano /etc/dns-worker/.env
11
+ # Définir JWT_SECRET=<clé_générée_ci-dessous>`,serverfullStepServiceTitle:`3. Redémarrer et vérifier le service`,serverfullStepServiceDesc:`Redémarrez le service après modification et vérifiez le statut :`,serverfullStepServiceCmd:`sudo dns-worker service restart
12
+ sudo dns-worker status`},p={defaultDesc:`Résolution DNS sécurisée, rapide et personnalisable pour tous vos appareils. Basé sur Cloudflare Workers, open source et axé sur la confidentialité.`,setupDesc:`Configurez vos appareils pour utiliser DNS Worker.`};var m={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,meta:p};export{u as account,o as analytics,r as auth,e as common,m as default,f as deploymentGuide,c as filtering,d as intro,s as logs,p as meta,t as nav,a as rules,l as settings,i as setup,n as theme};