{
  "username": "Nombre de Usuario",
  "password": "Contraseña",
  "login": "Acceder",
  "confirm": "Confirmar",
  "cancel": "Cancelar",
  "close": "Cerrar",
  "save": "Guardar",
  "logout": "Cerrar Sesión",
  "create": "Crear",
  "add": "Añadir",
  "remove": "Quitar",
  "update": "Actualizar",
  "copy": "Copiar",
  "copied": "Copiado",
  "more": "más",
  "download": "Descargar",
  "regenerate": "Regenerar",
  "jsonEditor": "Editor JSON",
  "downloadImage": "Descargar imagen",
  "sort": "Ordenar",
  "remark": "Notas",
  "enable": "Habilitar",
  "protocol": "Protocolo",
  "search": "Buscar",
  "filter": "Filtrar",
  "all": "Todos",
  "from": "Desde",
  "to": "Hasta",
  "done": "Hecho",
  "loading": "Cargando...",
  "refresh": "Actualizar",
  "clear": "Borrar",
  "second": "Segundo",
  "minute": "Minuto",
  "hour": "Hora",
  "day": "Día",
  "check": "Verificar",
  "indefinite": "Indefinido",
  "unlimited": "Ilimitado",
  "none": "Ninguno",
  "qrCode": "Código QR",
  "info": "Más Información",
  "edit": "Editar",
  "delete": "Eliminar",
  "reset": "Restablecer",
  "noData": "Sin datos",
  "copySuccess": "Copiado exitosamente",
  "sure": "Seguro",
  "encryption": "Encriptación",
  "transmission": "Transmisión",
  "host": "Host",
  "path": "Ruta",
  "camouflage": "Ofuscación",
  "status": "Estado",
  "enabled": "Habilitado",
  "disabled": "Deshabilitado",
  "depleted": "Agotado",
  "depletingSoon": "Agotándose",
  "offline": "Sin conexión",
  "online": "En línea",
  "domainName": "Nombre de dominio",
  "monitor": "Listening IP",
  "certificate": "Certificado Digital",
  "fail": "Falló",
  "comment": "Comentario",
  "success": "Éxito",
  "lastOnline": "Última conexión",
  "getVersion": "Obtener versión",
  "install": "Instalar",
  "clients": "Clientes",
  "usage": "Uso",
  "twoFactorCode": "Código",
  "remained": "Restante",
  "security": "Seguridad",
  "emptyDnsDesc": "No hay servidores DNS añadidos.",
  "emptyFakeDnsDesc": "No hay servidores Fake DNS añadidos.",
  "emptyBalancersDesc": "No hay balanceadores añadidos.",
  "somethingWentWrong": "Algo salió mal",
  "subscription": {
    "title": "Información de suscripción",
    "subId": "ID de suscripción",
    "status": "Estado",
    "downloaded": "Descargado",
    "uploaded": "Subido",
    "expiry": "Caducidad",
    "totalQuota": "Cuota total",
    "individualLinks": "Enlaces individuales",
    "active": "Activo",
    "inactive": "Inactivo",
    "unlimited": "Ilimitado",
    "noExpiry": "Sin caducidad",
    "copyAllConfigs": "Copiar Todas las Configuraciones",
    "copyAllConfigsCopied": "Todas las configuraciones copiadas",
    "email": "Email"
  },
  "menu": {
    "theme": "Tema",
    "dashboard": "Estado del Sistema",
    "inbounds": "Entradas",
    "clients": "Clientes",
    "groups": "Grupos",
    "nodes": "Nodos",
    "settings": "Ajustes del panel",
    "xray": "Configuración Xray",
    "routing": "Enrutamiento",
    "outbounds": "Salidas",
    "apiDocs": "Documentación de la API",
    "donate": "Donar",
    "hosts": "Hosts",
    "docs": "Documentación",
    "openMenu": "Abrir menú",
    "pinSidebar": "Fijar barra lateral",
    "unpinSidebar": "Desfijar barra lateral"
  },
  "pages": {
    "login": {
      "hello": "Hola",
      "title": "Bienvenido",
      "loginAgain": "El límite de tiempo de inicio de sesión ha expirado. Por favor, inicia sesión nuevamente.",
      "toasts": {
        "invalidFormData": "El formato de los datos de entrada es inválido.",
        "emptyUsername": "Por favor ingresa el nombre de usuario.",
        "emptyPassword": "Por favor ingresa la contraseña.",
        "wrongUsernameOrPassword": "Nombre de usuario, contraseña o código de dos factores incorrecto.",
        "successLogin": "Has iniciado sesión en tu cuenta correctamente."
      }
    },
    "index": {
      "cpu": "CPU",
      "swap": "Swap",
      "storage": "Almacenamiento",
      "memory": "Memoria",
      "xrayStatus": "Xray",
      "stopXray": "Detener",
      "restartXray": "Reiniciar",
      "xraySwitch": "Versión",
      "xrayUpdates": "Actualizaciones de Xray",
      "xraySwitchClickDesk": "Elige sabiamente, ya que las versiones anteriores pueden no ser compatibles con las configuraciones actuales.",
      "updatePanel": "Actualizar panel",
      "panelUpdateDesc": "Esto actualizará 3X-UI a la última versión y reiniciará el servicio del panel.",
      "currentPanelVersion": "Versión actual del panel",
      "latestPanelVersion": "Última versión del panel",
      "panelUpToDate": "El panel está actualizado",
      "devChannel": "Canal de desarrollo",
      "devChannelWarning": "Las compilaciones de desarrollo siguen cada commit en main y no son versiones estables; no hay reversión automática.",
      "currentCommit": "Commit actual",
      "latestCommit": "Último commit",
      "updateChannelChanged": "Canal de actualización cambiado",
      "xrayStatusUnknown": "Desconocido",
      "xrayStatusRunning": "En ejecución",
      "xrayStatusStop": "Detenido",
      "xrayStatusError": "Error",
      "systemHistoryTitle": "Historial del Sistema",
      "historyTitleCpu": "Uso de CPU",
      "historyTitleMem": "Uso de Memoria",
      "historyTitleNetwork": "Ancho de Banda de Red",
      "historyTitlePackets": "Paquetes de Red",
      "historyTitleDisk": "E/S de Disco",
      "historyTitleOnline": "Clientes en Línea",
      "historyTitleLoad": "Carga Media del Sistema (1 / 5 / 15 min)",
      "historyTitleConnections": "Conexiones Activas (TCP / UDP)",
      "historyTitleDiskUsage": "Uso del Espacio en Disco",
      "historyTabBandwidth": "Ancho de Banda",
      "historyTabPackets": "Paquetes",
      "historyTabDisk": "Disco I/O",
      "historyTabOnline": "En línea",
      "historyTabLoad": "Carga",
      "historyTabConnections": "Conexiones",
      "historyTabDiskUsage": "Uso de Disco",
      "xrayMetricsTitle": "Métricas de Xray",
      "xrayTitleHeap": "Memoria Heap Asignada",
      "xrayTitleSys": "Memoria Reservada del SO",
      "xrayTitleObjects": "Objetos Heap Activos",
      "xrayTitleGcCount": "Ciclos de GC Completados",
      "xrayTitleGcPause": "Duración de Pausa de GC",
      "xrayTitleObservatory": "Estado de Conexiones Salientes",
      "xrayTabHeap": "Heap",
      "xrayTabSys": "Sys",
      "xrayTabObjects": "Objetos",
      "xrayTabGcCount": "Recuento GC",
      "xrayTabGcPause": "Pausa GC",
      "xrayTabObservatory": "Observatorio",
      "xrayMetricsDisabled": "Endpoint de métricas de Xray no configurado",
      "xrayMetricsHint": "Añade un bloque metrics de nivel superior a la configuración de xray con tag metrics_out y listen 127.0.0.1:11111, luego reinicia xray.",
      "xrayObservatoryEmpty": "Aún no hay datos de Observatory",
      "xrayObservatoryHint": "Añade un bloque observatory a la configuración de xray listando los tags de outbound a sondear, luego reinicia xray.",
      "xrayObservatoryTagPlaceholder": "Seleccionar outbound",
      "xrayObservatoryAlive": "Activo",
      "xrayObservatoryDead": "Caído",
      "xrayObservatoryLastSeen": "Visto por última vez",
      "xrayObservatoryLastTry": "Último intento",
      "connectionCount": "Número de Conexiones",
      "ipAddresses": "Direcciones IP",
      "toggleIpVisibility": "Alternar visibilidad de la IP",
      "overallSpeed": "Velocidad general",
      "upload": "Subida",
      "download": "Descargar",
      "sent": "Enviado",
      "received": "Recibido",
      "xraySwitchVersionDialog": "¿Realmente deseas cambiar la versión de Xray?",
      "xraySwitchVersionDialogDesc": "Esto cambiará la versión de Xray a #version#.",
      "xraySwitchVersionPopover": "Xray se actualizó correctamente",
      "panelUpdateDialog": "¿Deseas actualizar el panel?",
      "panelUpdateDialogDesc": "Esto actualizará 3X-UI a la versión #version# y reiniciará el servicio del panel.",
      "panelUpdateStartedPopover": "Actualización del panel iniciada",
      "panelUpdateFailedTitle": "Error al actualizar el panel",
      "panelUpdateFailedDesc": "La actualización no se completó correctamente. Revisa los registros del servidor o ejecuta 'x-ui update' desde la línea de comandos.",
      "panelUpdateUnknownTitle": "No se pudo confirmar si la actualización terminó",
      "panelUpdateUnknownDesc": "El panel no informó un resultado a tiempo. Recarga la página para comprobar la versión actual, o revisa los registros del servidor.",
      "geofileUpdateDialog": "¿Realmente deseas actualizar el geofichero?",
      "geofileUpdateDialogDesc": "Esto actualizará el archivo #filename#.",
      "geofilesUpdateDialogDesc": "Esto actualizará todos los archivos.",
      "geofilesUpdateAll": "Actualizar todo",
      "geofileUpdatePopover": "Geofichero actualizado correctamente",
      "geodataTitle": "Actualización automática de Geodata",
      "geodataHint": "Xray descarga estos archivos según la programación y los recarga en caliente sin reiniciar. Las URL deben ser HTTPS. Cada archivo debe existir previamente en la carpeta bin para que Xray pueda actualizarlo.",
      "geodataCron": "Programación (cron)",
      "geodataOutbound": "Descargar a través de outbound (opcional)",
      "geodataFile": "Nombre de archivo",
      "geodataAddFile": "Añadir archivo",
      "geodataSaveRestart": "Guardar y reiniciar Xray",
      "geodataConfirmTitle": "¿Guardar la configuración de geodata?",
      "geodataConfirmContent": "Se actualizará la plantilla de configuración de Xray y se reiniciará Xray.",
      "geodataInvalidUrl": "Cada archivo necesita una URL HTTPS.",
      "geodataInvalidFile": "El nombre de archivo debe ser simple, p. ej. geosite_custom.dat (sin rutas).",
      "geodataInvalidCron": "Cron debe tener 5 campos, p. ej. 0 4 * * *",
      "geodataEmpty": "No hay archivos configurados. En las reglas de enrutamiento se referencian como ext:geosite_custom.dat:category.",
      "dontRefresh": "La instalación está en progreso, por favor no actualices esta página.",
      "logs": "Registros",
      "accessLogs": "Registros de acceso",
      "autoUpdate": "Actualización automática",
      "config": "Configuración",
      "backupTitle": "Copia & Restauración",
      "exportDatabase": "Copia de seguridad",
      "exportDatabaseDesc": "Haz clic para descargar un archivo .db que contiene una copia de seguridad de tu base de datos actual en tu dispositivo. El mismo archivo también puede restaurarse en un panel que funcione con PostgreSQL.",
      "importDatabase": "Restaurar",
      "importDatabaseDesc": "Haz clic para seleccionar y cargar una copia de seguridad .db o un volcado de migración (.dump) desde tu dispositivo para restaurar tu base de datos.",
      "importDatabaseSuccess": "La base de datos se ha importado correctamente",
      "importDatabaseError": "Ocurrió un error al importar la base de datos",
      "readDatabaseError": "Ocurrió un error al leer la base de datos",
      "getDatabaseError": "Ocurrió un error al obtener la base de datos",
      "getConfigError": "Ocurrió un error al obtener el archivo de configuración",
      "backupPostgresNote": "Este panel funciona con PostgreSQL. «Copia de seguridad» descarga un archivo pg_dump (.dump) y «Restaurar» lo vuelve a cargar con pg_restore. «Restaurar» también acepta una base de datos SQLite (.db) o un volcado de migración de SQLite e importa sus datos a PostgreSQL. El servidor necesita tener instaladas las herramientas cliente de PostgreSQL (pg_dump y pg_restore).",
      "exportDatabasePgDesc": "Haz clic para descargar un volcado de PostgreSQL (.dump) de tu base de datos actual en tu dispositivo.",
      "importDatabasePgDesc": "Haz clic para seleccionar y subir una copia de seguridad de PostgreSQL (.dump), una base de datos SQLite (.db) o un volcado de migración de SQLite para restaurar tu base de datos. Esto reemplaza todos los datos actuales.",
      "migrationDownload": "Descargar migración",
      "migrationDownloadPgDesc": "Haz clic para descargar una base de datos SQLite .db creada a partir de tus datos de PostgreSQL, lista para ejecutar este panel en SQLite.",
      "avg": "media",
      "peak": "pico",
      "free": "libre",
      "openSockets": "sockets abiertos",
      "throughputSub": "Total de la interfaz",
      "avgWindow": "Media del periodo",
      "healthWarm": "{list} — algo elevado",
      "healthCritical": "{list} — crítico",
      "panel": "Panel",
      "threads": "Hilos",
      "uptime": "Tiempo activo"
    },
    "inbounds": {
      "totalDownUp": "Subidas/Descargas Totales",
      "totalUsage": "Uso Total",
      "inboundCount": "Número de Entradas",
      "operate": "Menú",
      "enable": "Habilitar",
      "remark": "Notas",
      "node": "Nodo",
      "deployTo": "Desplegar en",
      "localPanel": "Panel local",
      "fallbacks": {
        "title": "Fallbacks",
        "empty": "Aún no hay fallbacks",
        "add": "Añadir fallback",
        "pickInbound": "Selecciona un inbound",
        "matchAny": "cualquiera",
        "destPlaceholder": "automático (listen:puerto del hijo)",
        "needsTls": "Los fallbacks estarán disponibles al seleccionar TLS o Reality en la pestaña de Seguridad (solo VLESS/Trojan sobre RAW)."
      },
      "protocol": "Protocolo",
      "port": "Puerto",
      "portMap": "Asignación de puertos",
      "traffic": "Tráfico",
      "speed": "Velocidad",
      "expireDate": "Fecha de Expiración",
      "createdAt": "Creado",
      "updatedAt": "Actualizado",
      "resetTraffic": "Restablecer tráfico",
      "addInbound": "Agregar Entrada",
      "generalActions": "Acciones Generales",
      "modifyInbound": "Modificar Entrada",
      "deleteConfirmTitle": "¿Eliminar el inbound \"{remark}\"?",
      "deleteConfirmContent": "Esto elimina el inbound y todos sus clientes. No se puede deshacer.",
      "resetConfirmTitle": "¿Restablecer el tráfico de \"{remark}\"?",
      "resetConfirmContent": "Restablece los contadores de subida/bajada a 0 para este inbound.",
      "selectedCount": "{count} seleccionado(s)",
      "selectAll": "Seleccionar todo",
      "bulkDeleteConfirmTitle": "¿Eliminar {count} inbounds?",
      "bulkDeleteConfirmContent": "Esto elimina los inbounds seleccionados y todos sus clientes. No se puede deshacer.",
      "cloneConfirmTitle": "¿Clonar el inbound \"{remark}\"?",
      "cloneConfirmContent": "Crea una copia con un puerto nuevo y una lista de clientes vacía.",
      "delAllClients": "Eliminar todos los clientes",
      "delAllClientsConfirmTitle": "¿Eliminar los {count} clientes de \"{remark}\"?",
      "delAllClientsConfirmContent": "Elimina todos los clientes de este inbound y sus registros de tráfico. El inbound se mantiene. Esto no se puede deshacer.",
      "attachClients": "Asociar clientes a…",
      "addClientsToGroup": "Añadir clientes al grupo…",
      "attachClientsTitle": "Asociar clientes desde «{remark}»",
      "attachClientsDesc": "Asocia los mismos {count} cliente(s) (mismo UUID/contraseña y tráfico compartido) a las entradas seleccionadas. Permanecen también en esta entrada.",
      "attachClientsTargets": "Entradas objetivo",
      "attachClientsNoTargets": "No hay otras entradas compatibles disponibles para asociar.",
      "attachClientsResult": "Asociados {attached}, omitidos {skipped}.",
      "attachClientsResultMixed": "Asociados {attached}, omitidos {skipped}, errores {errors}.",
      "attachClientsSelectLabel": "Clientes para asociar",
      "attachClientsSearchPlaceholder": "Buscar email o comentario",
      "attachClientsStatusDisabled": "Deshabilitado",
      "attachClientsSelectedCount": "{selected} de {total} seleccionado(s)",
      "attachExistingClients": "Asociar clientes existentes…",
      "attachExistingTitle": "Asociar clientes existentes a «{remark}»",
      "attachExistingDesc": "Asocia los clientes existentes ({count} disponibles) a esta entrada: mismo UUID/contraseña y tráfico compartido. Los clientes que ya están en ella se omiten.",
      "attachExistingNoClients": "Aún no hay clientes. Cree clientes primero y luego asócielos aquí.",
      "attachExistingStatusAttached": "Ya asociado",
      "detachClients": "Desasociar clientes",
      "detachClientsTitle": "Desasociar clientes de «{remark}»",
      "detachClientsDesc": "Quita el cliente o clientes seleccionados solo de esta entrada. Los registros se conservan (usa Delete para eliminar por completo). El origen tiene {count} cliente(s) en total.",
      "detachClientsResult": "Desasociados {detached}, omitidos {skipped}.",
      "detachClientsResultMixed": "Desasociados {detached}, omitidos {skipped}, errores {errors}.",
      "detachClientsSelectLabel": "Clientes para desasociar",
      "exportLinksTitle": "Exportar enlaces del inbound",
      "exportSubsTitle": "Exportar enlaces de suscripción",
      "exportAllLinksTitle": "Exportar todos los enlaces de inbound",
      "exportAllSubsTitle": "Exportar todos los enlaces de suscripción",
      "exportAllLinksFileName": "Todas-las-entradas",
      "exportAllSubsFileName": "Todas-las-entradas-Subs",
      "inboundJsonTitle": "JSON de entrada",
      "resetTrafficContent": "¿Confirmar restablecimiento de tráfico?",
      "copyLink": "Copiar Enlace",
      "address": "Dirección",
      "network": "Red",
      "destinationPort": "Puerto de Destino",
      "targetAddress": "Dirección de Destino",
      "monitorDesc": "Dejar en blanco por defecto",
      "meansNoLimit": "= Ilimitado. (unidad: GB)",
      "totalFlow": "Flujo Total",
      "leaveBlankToNeverExpire": "Dejar en Blanco para Nunca Expirar",
      "certificatePath": "Ruta Cert",
      "certificateContent": "Datos Cert",
      "publicKey": "Clave Pública",
      "privatekey": "Clave Privada",
      "client": "Cliente",
      "export": "Exportar Enlaces",
      "clone": "Clonar",
      "resetAllTraffic": "Restablecer Tráfico de Todas las Entradas",
      "resetAllTrafficTitle": "Restablecer tráfico de todas las entradas",
      "resetAllTrafficContent": "¿Estás seguro de que deseas restablecer el tráfico de todas las entradas?",
      "email": "Email",
      "IPLimit": "Límite de IP",
      "IPLimitlog": "Registro de IP",
      "IPLimitlogclear": "Limpiar el Registro",
      "setDefaultCert": "Establecer certificado desde el panel",
      "setDefaultCertEmpty": "No hay certificado configurado para el panel. Configura uno en Ajustes primero.",
      "streamTab": "Transmisión",
      "securityTab": "Seguridad",
      "sniffingTab": "Inspección",
      "sniffingMetadataOnly": "Solo metadatos",
      "sniffingRouteOnly": "Solo enrutamiento",
      "sniffingIpsExcluded": "IPs excluidas",
      "sniffingDomainsExcluded": "Dominios excluidos",
      "decryption": "Descifrado",
      "encryption": "Cifrado",
      "vlessAuthX25519": "X25519 (native)",
      "vlessAuthMlkem768": "ML-KEM-768 (native)",
      "vlessAuthX25519Xorpub": "X25519 (xorpub)",
      "vlessAuthX25519Random": "X25519 (random)",
      "vlessAuthMlkem768Xorpub": "ML-KEM-768 (xorpub)",
      "vlessAuthMlkem768Random": "ML-KEM-768 (random)",
      "vlessAuthCustom": "Personalizado",
      "vlessAuthSelected": "Seleccionado: {auth}",
      "vlessAuthGenerate": "Generar claves",
      "vlessAuthGenerateButton": "Generar",
      "advanced": {
        "title": "Secciones JSON del inbound",
        "subtitle": "JSON completo del inbound y editores específicos para settings, sniffing y streamSettings.",
        "all": "Todo",
        "allHelp": "Objeto inbound completo con todos los campos en un solo editor.",
        "settings": "Ajustes",
        "settingsHelp": "Envoltorio del bloque settings de Xray:",
        "sniffing": "Sniffing",
        "sniffingHelp": "Envoltorio del bloque sniffing de Xray:",
        "stream": "Stream",
        "streamHelp": "Envoltorio del bloque stream de Xray:"
      },
      "subSortIndex": "Orden sub",
      "inboundInfo": "Información de entrada",
      "exportInbound": "Exportación entrante",
      "import": "Importar",
      "importInbound": "Importar un entrante",
      "periodicTrafficResetTitle": "Reset de Tráfico",
      "periodicTrafficResetDay": "Día de reinicio mensual",
      "periodicTrafficReset": {
        "never": "Nunca",
        "daily": "Diariamente",
        "weekly": "Semanalmente",
        "monthly": "Mensualmente",
        "hourly": "Cada hora"
      },
      "toasts": {
        "obtain": "Recibir",
        "updateSuccess": "La actualización fue exitosa",
        "logCleanSuccess": "El registro ha sido limpiado",
        "inboundUpdateSuccess": "Entrada actualizada correctamente",
        "inboundCreateSuccess": "Entrada creada correctamente",
        "bulkDeleted": "{count} inbounds eliminados",
        "bulkDeletedMixed": "{ok} eliminados, {failed} fallidos",
        "inboundDeleteSuccess": "Entrada eliminada correctamente",
        "inboundClientAddSuccess": "Cliente(s) de entrada añadido(s)",
        "inboundClientDeleteSuccess": "Cliente de entrada eliminado",
        "inboundClientUpdateSuccess": "Cliente de entrada actualizado",
        "savedNodeOfflineWillSync": "Guardado localmente. Un nodo de respaldo está desconectado o deshabilitado: el cambio se sincronizará cuando vuelva a conectarse.",
        "resetAllClientTrafficSuccess": "Todo el tráfico del cliente ha sido reiniciado",
        "resetAllTrafficSuccess": "Todo el tráfico ha sido reiniciado",
        "resetInboundClientTrafficSuccess": "El tráfico ha sido reiniciado",
        "resetInboundTrafficSuccess": "El tráfico de entrada ha sido reiniciado",
        "trafficGetError": "Error al obtener los tráficos",
        "getNewX25519CertError": "Error al obtener el certificado X25519.",
        "getNewmldsa65Error": "Error al obtener el certificado mldsa65.",
        "getNewVlessEncError": "Error al obtener el certificado VlessEnc.",
        "scanRealityTargetError": "No se pudo escanear el objetivo REALITY.",
        "scanRealityTargetFeasible": "El objetivo es apto: se rellenaron el objetivo y el SNI.",
        "scanRealityTargetNotFeasible": "El objetivo es accesible pero no apto para REALITY.",
        "invalidClientField": "Cliente {client}: campo {field} — {reason}",
        "invalidField": "{field} — {reason}",
        "moreIssues": "{message}  (+{count} más)"
      },
      "form": {
        "moveUp": "Subir",
        "moveDown": "Bajar",
        "addAll": "Añadir todo",
        "addAllFallbackTooltip": "Añade una fila de fallback para cada entrada elegible aún no conectada",
        "peers": "Peers",
        "addPeer": "Añadir peer",
        "keepAlive": "Keep-alive",
        "autoSystemRoutesTooltip": "Solo Windows. Los CIDR se añaden automáticamente a la tabla de enrutamiento del sistema para que el tráfico coincidente pase por TUN.",
        "autoOutboundsInterface": "Interfaz de salidas automática",
        "autoOutboundsInterfaceTooltip": "Interfaz física para tráfico de salida. Usa 'auto' para detectar; se habilita automáticamente cuando se establece Auto system routes.",
        "rewriteAddress": "Reescribir dirección",
        "rewritePort": "Reescribir puerto",
        "allowedNetwork": "Red permitida",
        "followRedirect": "Seguir redirección",
        "accounts": "Cuentas",
        "allowTransparent": "Permitir transparente",
        "encryptionMethod": "Método de cifrado",
        "fakeTlsDomain": "Dominio FakeTLS (SNI)",
        "mtprotoSecret": "Secreto",
        "mtgDomainFrontingIp": "IP de domain fronting",
        "mtgDomainFrontingPort": "Puerto de domain fronting",
        "mtgDomainFrontingProxyProtocol": "Protocolo PROXY de domain fronting",
        "mtgDomainFrontingHint": "Adónde envía mtg el tráfico que no es de Telegram, p. ej. tu sitio web falso de NGINX. Deja la IP vacía para usar el dominio FakeTLS mediante DNS; el puerto predeterminado es 443.",
        "mtgProxyProtocolListener": "Aceptar protocolo PROXY (escucha)",
        "mtgPreferIp": "Preferencia de IP",
        "mtgDebug": "Registro de depuración",
        "mtgRouteThroughXray": "Enrutar a través de Xray",
        "mtgRouteThroughXrayHint": "Envía el tráfico de Telegram de este proxy a través de Xray para que siga tus reglas de enrutamiento. El sidecar mtg sale por un puente SOCKS local con la etiqueta de esta entrada; usa esa etiqueta en la pestaña Enrutamiento para reglas avanzadas.",
        "mtgRouteOutbound": "Salida",
        "mtgRouteOutboundHint": "Opcional. Fuerza el tráfico de Telegram a salir por esta salida (o balanceador). Déjalo vacío para que decidan tus reglas de enrutamiento.",
        "mtgRouteOutboundPlaceholder": "Usar reglas de enrutamiento",
        "mtprotoFakeTlsDomainHint": "Dominio FakeTLS predeterminado para generar el secreto de un nuevo cliente. Cada cliente puede usar su propio dominio.",
        "mtgThrottleMaxConnections": "Conexiones máximas",
        "mtgThrottleMaxConnectionsHint": "Limita las conexiones simultáneas de todos los usuarios con reparto equitativo. 0 desactiva el límite.",
        "mtgAdTagInvalid": "El ad-tag debe tener exactamente 32 caracteres hexadecimales.",
        "mtgPublicIpv4": "IPv4 pública",
        "mtgPublicIpv6": "IPv6 pública",
        "mtgPublicIpHint": "La dirección pública accesible de este servidor, usada por el proxy intermedio del ad-tag. Déjalo en blanco para que mtg la detecte automáticamente.",
        "visionTestseed": "Vision testseed",
        "version": "Versión",
        "udpIdleTimeout": "UDP idle timeout (s)",
        "masquerade": "Masquerade",
        "type": "Tipo",
        "upstreamUrl": "URL Upstream",
        "rewriteHost": "Reescribir Host",
        "skipTlsVerify": "Saltar verificación TLS",
        "directory": "Directorio",
        "statusCode": "Código de estado",
        "body": "Body",
        "headers": "Cabeceras",
        "proxyProtocol": "Proxy Protocol",
        "requestVersion": "Versión de petición",
        "requestMethod": "Método de petición",
        "requestPath": "Ruta de petición",
        "requestHeaders": "Cabeceras de petición",
        "responseVersion": "Versión de respuesta",
        "responseStatus": "Estado de respuesta",
        "responseReason": "Razón de respuesta",
        "responseHeaders": "Cabeceras de respuesta",
        "heartbeatPeriod": "Periodo de heartbeat",
        "serviceName": "Nombre de servicio",
        "authority": "Authority",
        "multiMode": "Multi Mode",
        "maxBufferedUpload": "Máx. subida en búfer",
        "maxUploadSize": "Tamaño máx. de subida (Byte)",
        "streamUpServer": "Stream-Up Server",
        "serverMaxHeaderBytes": "Máx. bytes cabecera servidor",
        "paddingBytes": "Bytes de Padding",
        "uplinkHttpMethod": "Método HTTP Uplink",
        "paddingObfsMode": "Modo obfs de Padding",
        "paddingKey": "Padding Key",
        "paddingHeader": "Padding Header",
        "paddingPlacement": "Ubicación de Padding",
        "paddingMethod": "Método de Padding",
        "sessionPlacement": "Session Placement",
        "sessionKey": "Session Key",
        "sessionIDTable": "Tabla de Session ID",
        "sessionIDTableHint": "Conjunto de caracteres para generar los session ID: un nombre predefinido (ALPHABET, Base62, hex, number, …) o una cadena ASCII literal. Déjalo vacío para el valor por defecto de xray-core.",
        "sessionIDLength": "Longitud de Session ID",
        "sessionIDLengthHint": "Longitud o rango (p. ej. 8-16) del session ID generado. Solo se usa cuando hay una Tabla de Session ID definida; el mínimo debe ser mayor que 0.",
        "sequencePlacement": "Sequence Placement",
        "sequenceKey": "Sequence Key",
        "uplinkDataPlacement": "Uplink Data Placement",
        "uplinkDataKey": "Uplink Data Key",
        "noSseHeader": "Sin cabecera SSE",
        "ttiMs": "TTI (ms)",
        "uplinkMbps": "Subida (MB/s)",
        "downlinkMbps": "Bajada (MB/s)",
        "cwndMultiplier": "Multiplicador CWND",
        "maxSendingWindow": "Máx. ventana de envío",
        "externalProxy": "Proxy externo",
        "forceTls": "Forzar TLS",
        "fingerprint": "Fingerprint",
        "defaultOption": "Por defecto",
        "routeMark": "Route Mark",
        "tcpKeepAliveInterval": "TCP Keep Alive Interval",
        "tcpKeepAliveIdle": "TCP Keep Alive Idle",
        "tcpMaxSeg": "TCP Max Seg",
        "tcpUserTimeout": "TCP User Timeout",
        "tcpWindowClamp": "TCP Window Clamp",
        "tcpWindowClampHint": "Deja 0 para usar el valor predeterminado del sistema. Los valores distintos de cero limitan la ventana de recepción TCP anunciada; valores como 600 (del ejemplo de la documentación de Xray) pueden hundir el rendimiento en enlaces de alta latencia.",
        "tcpFastOpen": "TCP Fast Open",
        "multipathTcp": "Multipath TCP",
        "penetrate": "Penetrate",
        "v6Only": "Solo V6",
        "tcpCongestion": "TCP Congestion",
        "dialerProxy": "Dialer Proxy",
        "trustedXForwardedFor": "X-Forwarded-For de confianza",
        "trustedXForwardedForHint": "Confía en esta cabecera de solicitud para obtener la IP real del cliente (p. ej. CF-Connecting-IP detrás del CDN de Cloudflare). Solo válido en los transportes WebSocket, HTTPUpgrade, XHTTP y gRPC. Déjalo vacío para ignorar las cabeceras reenviadas.",
        "proxyProtocolHint": "Acepta la cabecera PROXY protocol para obtener la IP real del cliente desde un túnel/relé L4 superior (HAProxy, gost, nginx-stream, Xray dokodemo-door) o Cloudflare Spectrum. El nodo superior DEBE enviar PROXY protocol. Funciona en TCP, WebSocket, HTTPUpgrade y gRPC; no en mKCP.",
        "realClientIp": "IP real del cliente",
        "realClientIpHint": "Captura la IP real del visitante cuando el tráfico llega a este inbound a través de un CDN o relé, en lugar de registrar la dirección del intermediario. Elige un preajuste para rellenar los campos sockopt correspondientes más abajo. Estos campos nunca se envían a los clientes en las suscripciones.",
        "realClientIpPresetOff": "Desactivado / directo",
        "realClientIpPresetCloudflare": "Cloudflare CDN",
        "realClientIpPresetProxyProtocol": "Relé L4 / Spectrum (PROXY)",
        "realClientIpTrustedHeaderTransportWarn": "Trusted X-Forwarded-For solo es válido en WebSocket, HTTPUpgrade y XHTTP. En el transporte actual esta cabecera se ignora.",
        "realClientIpProxyProtocolTransportWarn": "PROXY protocol no es compatible con este transporte (mKCP). Usa TCP/RAW, WebSocket, HTTPUpgrade, gRPC o XHTTP.",
        "addressPortStrategy": "Estrategia dirección+puerto",
        "tryDelayMs": "Retraso de intento (ms)",
        "prioritizeIPv6": "Priorizar IPv6",
        "interleave": "Interleave",
        "maxConcurrentTry": "Máx. intentos simultáneos",
        "customSockopt": "Sockopt personalizado",
        "addCustomOption": "Añadir opción personalizada",
        "serverNameIndication": "SNI",
        "cipherSuites": "Cipher Suites",
        "autoOption": "Auto",
        "minMaxVersion": "Versión mín/máx",
        "rejectUnknownSni": "Rechazar SNI desconocido",
        "disableSystemRoot": "Deshabilitar System Root",
        "sessionResumption": "Reanudación de sesión",
        "oneTimeLoading": "Carga única",
        "usageOption": "Opción de uso",
        "buildChain": "Construir cadena",
        "echKey": "ECH key",
        "echConfig": "Config ECH",
        "pinnedPeerCertSha256": "SHA-256 del cert. del par fijado",
        "pinnedPeerCertSha256Tip": "Hashes SHA-256 del certificado del par como cadena hexadecimal (p. ej. e8e2d3…), separados por comas. Solo en el panel — no se escribe en la config xray del servidor, pero se incluye en los enlaces para que los clientes puedan fijar el certificado.",
        "pinnedPeerCertSha256Placeholder": "hash(es) hexadecimal, separados por comas",
        "getNewEchCert": "Obtener nuevo cert ECH",
        "echSockopt": "ECH Sockopt",
        "echSockoptTip": "Opciones de socket para la conexión que Xray usa al obtener la lista de configuración ECH (por ejemplo, enrutar la consulta a través de una salida dialerProxy). Déjalo deshabilitado para usar los valores por defecto.",
        "curvePreferences": "Preferencias de curvas",
        "curvePreferencesTip": "Restringe las curvas de intercambio de claves TLS que ofrece el servidor, por orden de preferencia (por ejemplo, X25519MLKEM768, X25519). Déjalo vacío para usar los valores por defecto de Xray-core.",
        "masterKeyLog": "Registro de clave maestra",
        "masterKeyLogTip": "Ruta donde escribir las claves maestras TLS (formato SSLKEYLOGFILE) para depurar con Wireshark. Déjalo vacío en producción — permite que cualquiera con el archivo descifre el tráfico.",
        "verifyPeerCertByName": "Verificar cert. del par por nombre",
        "verifyPeerCertByNameTip": "Indica a los clientes que verifiquen el certificado del servidor con este nombre en lugar del SNI. Nombres separados por comas. Solo en el panel — se incluye en los enlaces (vcn). El reemplazo moderno de allowInsecure, que Xray eliminó después del 2026-06-01.",
        "pinFromCert": "Rellenar desde el certificado de este inbound",
        "pinFromRemote": "Obtener el hash haciendo ping al SNI (xray tls ping)",
        "pinFromRemoteNoSni": "Establece primero el SNI (serverName) para hacer ping al certificado remoto.",
        "pinFromRemoteFailed": "No se pudo obtener el hash del certificado remoto.",
        "limitFallback": "Limitar fallback",
        "limitFallbackUpload": "Limitar subida del fallback",
        "limitFallbackDownload": "Limitar bajada del fallback",
        "afterBytes": "Tras bytes",
        "afterBytesTip": "Deja que el fallback funcione a máxima velocidad durante esta cantidad de bytes y luego empieza a limitar. 0 = limitar desde el primer byte.",
        "bytesPerSec": "Bytes por seg.",
        "bytesPerSecTip": "Límite de velocidad (bytes/seg.) aplicado al tráfico del fallback tras el umbral, para que las sondas no puedan usar tu servidor como ancho de banda gratuito hacia el destino. 0 = sin límite (deshabilita esta dirección).",
        "burstBytesPerSec": "Ráfaga de bytes por seg.",
        "burstBytesPerSecTip": "Margen para ráfagas breves por encima de la tasa constante (tamaño del token-bucket). Si es menor que Bytes por seg., se eleva para igualarlo.",
        "show": "Mostrar",
        "xver": "Xver",
        "target": "Objetivo",
        "maxTimeDiff": "Máx. diferencia de tiempo (ms)",
        "minClientVer": "Mín. versión cliente",
        "maxClientVer": "Máx. versión cliente",
        "minClientVerHint": "Vacío no significa sin restricción: Xray-core aplica entonces el mínimo integrado de la build del núcleo en uso (26.3.27 en las versiones actuales) y rechaza a los clientes que reportan una versión anterior, incluidos núcleos de terceros como Mihomo y sing-box. Con 1.0.0 se aceptan, a costa de admitir huellas TLS obsoletas.",
        "maxClientVerHint": "Vacío significa sin límite superior. Si se establece, no debe ser inferior al mínimo efectivo — la versión mínima del cliente o, si ese campo está vacío, el mínimo integrado de Xray-core — o todos los clientes serán rechazados.",
        "clientVerInvalid": "La versión del cliente debe tener hasta tres números separados por puntos, cada uno 0-255 (p. ej. 26.3.27)",
        "maxClientVerBelowMin": "La versión máxima del cliente no debe ser inferior a la versión mínima",
        "shortIds": "Short IDs",
        "realityTargetHint": "Obligatorio. Debe incluir un puerto (p. ej. example.com:443). Sin puerto, Xray-core no arranca.",
        "realityTargetRequired": "El destino REALITY es obligatorio",
        "realityTargetNeedsPort": "El destino REALITY debe incluir un puerto (p. ej. example.com:443)",
        "realityTargetInvalidPort": "El destino REALITY tiene un puerto no válido",
        "scan": "Escanear",
        "findTargets": "Buscar objetivos",
        "scanModalTitle": "Escáner de objetivos REALITY",
        "scanModalDesc": "Valida un dominio o escanea un rango IP / CIDR para descubrir nuevos objetivos REALITY a partir de sus certificados. Deja el campo vacío para probar los candidatos comunes.",
        "scanDiscoverPlaceholder": "IP, CIDR o dominio — déjalo vacío para candidatos comunes",
        "scanStatus": "Estado",
        "scanFeasible": "Apto",
        "scanNotFeasible": "No apto",
        "scanCurve": "Intercambio de claves",
        "scanCert": "Certificado",
        "scanCertInvalid": "No confiable",
        "scanLatency": "Latencia",
        "scanUse": "Usar",
        "scanRescan": "Reescanear",
        "spiderX": "SpiderX",
        "spiderXHint": "Semilla por cliente: el panel deriva de ella una ruta spx única para cada cliente; regenera para rotar las rutas de todos",
        "getNewCert": "Obtener nuevo cert",
        "mldsa65Seed": "mldsa65 Seed",
        "mldsa65Verify": "mldsa65 Verify",
        "getNewSeed": "Obtener nuevo Seed",
        "listenHelp": "También puedes introducir una ruta de socket Unix (p. ej. /run/xray/in.sock), o un nombre de socket abstracto con el prefijo @ (p. ej. @xray/in.sock), para escuchar en un socket en lugar de un puerto TCP; en ese caso, establece el Puerto en 0.",
        "shareAddrStrategy": "Estrategia de dirección para compartir",
        "shareAddrStrategyHelp": "Controla qué dirección se escribe en los enlaces compartidos exportados, códigos QR y la salida de suscripción.",
        "shareAddr": "Dirección compartida personalizada",
        "shareAddrHelp": "Solo se usa cuando la estrategia de dirección para compartir es Personalizada. Introduce un host o IP sin esquema ni puerto.",
        "subSortIndex": "Orden en la suscripción",
        "subSortIndexHelp": "Posición de los enlaces de esta entrada en la salida de la suscripción (página de suscripción y apps cliente). Los valores más bajos van primero; con valores iguales se mantiene el orden de creación. No afecta a la lista de entradas del panel.",
        "shareAddrStrategyOptions": {
          "node": "Dirección del nodo",
          "listen": "Dirección de escucha del inbound",
          "custom": "Personalizada"
        }
      },
      "info": {
        "mode": "Modo",
        "grpcServiceName": "grpc serviceName",
        "grpcMultiMode": "grpc multiMode",
        "interfaceName": "Nombre de interfaz",
        "mtu": "MTU",
        "gateway": "Gateway",
        "dns": "DNS",
        "outboundsInterface": "Interfaz de salidas",
        "autoSystemRoutes": "Rutas del sistema automáticas",
        "followRedirect": "FollowRedirect",
        "auth": "Auth",
        "noKernelTun": "TUN sin kernel",
        "keepAlive": "Keep alive",
        "peerNumber": "Peer {n}",
        "peerNumberConfig": "Config Peer {n}"
      },
      "sniffingDestOverride": "Anulación de destino"
    },
    "clients": {
      "tabBasics": "Básico",
      "tabCredentials": "Credenciales",
      "tabLinks": "Enlaces",
      "wireguardConfig": "Configuración de WireGuard",
      "config": "Configuración",
      "linksHint": "Añade enlaces de terceros y URLs de suscripción remotas para incluirlos en la suscripción de este cliente.",
      "addExternalLink": "Añadir enlace externo",
      "addExternalSubscription": "Añadir suscripción externa",
      "noExternalLinks": "Aún no hay enlaces externos.",
      "noExternalSubscriptions": "Aún no hay suscripciones externas.",
      "submitEdit": "Guardar cambios",
      "clientCount": "Número de clientes",
      "bulk": "Añadir en lote",
      "selectAll": "Seleccionar todo",
      "clearAll": "Limpiar todo",
      "method": "Método",
      "first": "Primero",
      "last": "Último",
      "ipLog": "Registro de IP",
      "prefix": "Prefijo",
      "postfix": "Sufijo",
      "delayedStart": "Iniciar tras el primer uso",
      "expireDays": "Duración (días)",
      "renew": "Renovación automática",
      "renewDesc": "Renovación automática tras la expiración. (0 = desactivado) (unidad: día)",
      "renewDays": "Renovación automática (días)",
      "searchPlaceholder": "Buscar email, comentario, sub ID, UUID, contraseña, auth, Telegram ID…",
      "filterTitle": "Filtrar clientes",
      "clearAllFilters": "Limpiar todo",
      "filters": {
        "nodes": "Nodos",
        "localPanel": "Local (este panel)"
      },
      "showingCount": "Mostrando {shown} de {total}",
      "sortOldest": "Más antiguos",
      "sortNewest": "Más recientes",
      "sortRecentlyUpdated": "Recientemente actualizados",
      "sortRecentlyOnline": "Recientemente en línea",
      "sortEmailAZ": "Email A→Z",
      "sortEmailZA": "Email Z→A",
      "sortMostTraffic": "Mayor tráfico",
      "sortHighestRemaining": "Mayor restante",
      "sortExpiringSoonest": "Caducidad más próxima",
      "has": "Tiene",
      "hasNot": "No tiene",
      "actions": "Acciones",
      "totalGB": "Límite de tráfico (GB)",
      "totalGBDesc": "Cuota de datos para este cliente. 0 = ilimitado.",
      "expiryTime": "Expiración",
      "addClients": "Añadir clientes",
      "limitIp": "Límite de IP",
      "limitIpDesc": "Máximo de IP simultáneas. 0 = ilimitado.",
      "limitIpFail2banMissing": "Fail2ban no está instalado, por lo que no se puede aplicar el límite de IP. Instala Fail2ban desde el menú bash de x-ui para habilitar esta opción.",
      "limitIpFail2banWindows": "Fail2ban no está disponible en Windows, por lo que no se puede aplicar el límite de IP.",
      "limitIpDisabled": "La función de límite de IP está deshabilitada en este servidor.",
      "password": "Contraseña",
      "passwordDesc": "Solo la usan los clientes Trojan y Shadowsocks; se ignora para VLESS, VMess, Hysteria y WireGuard.",
      "subId": "ID de suscripción",
      "online": "En línea",
      "email": "Email",
      "emailInvalidChars": "El correo no puede contener espacios, '/', '\\' ni caracteres de control",
      "subIdInvalidChars": "El ID de suscripción no puede contener espacios, '/', '\\' ni caracteres de control",
      "group": "Grupo",
      "groupDesc": "Etiqueta lógica para agrupar clientes relacionados (p. ej. equipo, cliente, región). Filtrable desde la barra de herramientas.",
      "groupPlaceholder": "p. ej. customer-a",
      "comment": "Comentario",
      "traffic": "Tráfico",
      "speed": "Velocidad",
      "offline": "Sin conexión",
      "addClient": "Añadir cliente",
      "qrCode": "Código QR",
      "clientInfo": "Información del cliente",
      "editClient": "Editar cliente",
      "client": "Cliente",
      "enabled": "Habilitado",
      "remaining": "Restante",
      "duration": "Duración",
      "attachedInbounds": "Inbounds asociados",
      "selectInbound": "Selecciona uno o más inbounds",
      "selectAllInbounds": "Seleccionar todo",
      "clearAllInbounds": "Limpiar todo",
      "noSubId": "Este cliente no tiene subId, no hay enlace compartible.",
      "noLinks": "No hay enlaces compartibles — asocia primero este cliente a un inbound con protocolo válido.",
      "link": "Enlace",
      "resetNotPossible": "Asocia primero este cliente a un inbound.",
      "resetAllTraffics": "Restablecer tráfico de todos los clientes",
      "resetAllTrafficsTitle": "¿Restablecer tráfico de todos los clientes?",
      "resetAllTrafficsContent": "El contador de subida/bajada de cada cliente vuelve a cero. Las cuotas y la expiración no se modifican. Esta acción no se puede deshacer.",
      "deleteConfirmTitle": "¿Eliminar al cliente {email}?",
      "deleteConfirmContent": "Esto elimina al cliente de cada inbound asociado y descarta su registro de tráfico. No se puede deshacer.",
      "adjustSelected": "Ajustar ({count})",
      "subLinksSelected": "Enlaces sub ({count})",
      "addToGroupTitle": "Añadir {count} cliente(s) a un grupo",
      "addToGroupTooltip": "Selecciona un grupo existente o escribe un nombre nuevo. Usa Ungroup para quitar clientes de su grupo actual.",
      "groupName": "Nombre del grupo",
      "addToGroupSuccessToast": "Se añadieron {count} cliente(s) a {group}",
      "ungroupSuccessToast": "Grupo limpiado de {count} cliente(s)",
      "ungroup": "Desagrupar",
      "ungroupConfirmTitle": "¿Quitar {count} cliente(s) de su grupo?",
      "ungroupConfirmContent": "Limpia la etiqueta de grupo en cada cliente seleccionado. Los clientes se conservan (usa Delete para eliminarlos por completo).",
      "addToGroup": "Añadir al grupo",
      "attach": "Asociar",
      "adjust": "Ajustar",
      "subLinks": "Enlaces sub",
      "enable": "Habilitar",
      "disable": "Deshabilitar",
      "bulkEnableConfirmTitle": "¿Habilitar {count} clientes?",
      "bulkEnableConfirmContent": "Habilita cada cliente seleccionado en todos los inbounds asociados. Los clientes cuya cuota se haya agotado o cuya caducidad haya pasado se deshabilitarán de nuevo automáticamente.",
      "bulkDisableConfirmTitle": "¿Deshabilitar {count} clientes?",
      "bulkDisableConfirmContent": "Deshabilita cada cliente seleccionado en todos los inbounds asociados. Pierden el acceso de inmediato, pero se conservan sus registros y su tráfico.",
      "selectedCount": "{count} seleccionado(s)",
      "attachToInboundsTitle": "Asociar {count} cliente(s) a entrada(s)",
      "attachToInboundsDesc": "Asocia los {count} cliente(s) seleccionados (mismo UUID/contraseña y tráfico compartido) a las entradas elegidas. Mantienen sus asociaciones existentes.",
      "attachToInboundsTargets": "Entradas objetivo",
      "attachToInboundsNoTargets": "No hay entradas multiusuario disponibles para asociar.",
      "detach": "Desasociar",
      "detachFromInboundsTitle": "Desasociar {count} cliente(s) de entrada(s)",
      "detachFromInboundsDesc": "Quita los {count} cliente(s) seleccionados de las entradas elegidas. Las parejas donde el cliente no estaba asociado se omiten silenciosamente. Los registros de los clientes se conservan (usa Delete para eliminar por completo).",
      "detachFromInboundsTargets": "Entradas para desasociar",
      "detachFromInboundsNoTargets": "No hay entradas multiusuario disponibles.",
      "detachFromInboundsResult": "Desasociados {detached}, omitidos {skipped}.",
      "detachFromInboundsResultMixed": "Desasociados {detached}, omitidos {skipped}, errores {errors}.",
      "subLinksTitle": "Enlaces sub ({count})",
      "subLinkColumn": "URL de suscripción",
      "subJsonLinkColumn": "URL JSON de suscripción",
      "subLinksCopyAll": "Copiar todo",
      "subLinksCopiedAll": "Copiados {count} enlace(s)",
      "subLinksEmpty": "Ninguno de los clientes seleccionados tiene ID de suscripción.",
      "subLinksDisabled": "El servicio de suscripción está deshabilitado.",
      "subLinksDisabledHint": "Habilita la suscripción en Ajustes del panel → Suscripción para generar enlaces.",
      "bulkDeleteConfirmTitle": "¿Eliminar {count} clientes?",
      "bulkDeleteConfirmContent": "Cada cliente seleccionado se elimina de los inbounds asociados y se descarta su registro de tráfico. No se puede deshacer.",
      "bulkAdjustTitle": "Ajustar {count} clientes",
      "bulkAdjustHint": "Los valores positivos extienden, los negativos reducen. Los clientes con expiración o tráfico ilimitado se omiten para ese campo.",
      "bulkAdjustNothing": "Establece días o tráfico antes de aplicar.",
      "addDays": "Añadir días",
      "addTrafficGB": "Añadir tráfico (GB)",
      "bulkFlow": "Establecer flow",
      "bulkFlowNoChange": "Sin cambios",
      "bulkFlowDisable": "Desactivar (borrar flow)",
      "delDepleted": "Eliminar agotados",
      "delDepletedConfirmTitle": "¿Eliminar clientes agotados?",
      "delDepletedConfirmContent": "Elimina todos los clientes con cuota agotada o expirados. No se puede deshacer.",
      "exportClients": "Exportar clientes",
      "importClients": "Importar clientes",
      "import": "Importar",
      "delOrphans": "Eliminar clientes sin entrante",
      "delOrphansConfirmTitle": "¿Eliminar clientes sin entrante?",
      "delOrphansConfirmContent": "Elimina todos los clientes que no están vinculados a ningún entrante, junto con su registro de tráfico. No se puede deshacer.",
      "auth": "Auth",
      "hysteriaAuth": "Hysteria Auth",
      "hysteriaAuthDesc": "Credencial usada únicamente por los clientes Hysteria. Trojan y Shadowsocks usan el campo «Contraseña» en su lugar.",
      "uuid": "UUID",
      "flow": "Flow",
      "vmessSecurity": "Seguridad VMess",
      "wireguardPrivateKey": "Clave privada de WireGuard",
      "wireguardPublicKey": "Clave pública de WireGuard",
      "wireguardPreSharedKey": "Clave precompartida de WireGuard",
      "wireguardAllowedIPs": "IP permitidas de WireGuard",
      "wireguardAllowedIPsHint": "Déjalo vacío para asignar automáticamente; separa las entradas con comas",
      "mtprotoSecret": "Secreto MTProto",
      "mtprotoSecretHint": "El secreto FakeTLS del cliente. Vuelve a generarlo para cambiarlo.",
      "mtprotoAdTag": "Ad-tag (canal patrocinado)",
      "mtprotoAdTagHint": "Etiqueta hexadecimal opcional de 32 caracteres del registro de proxy de Telegram. Si se establece, este cliente se enruta a través de los proxies intermedios de Telegram y aparece un canal patrocinado en la parte superior de su lista de chats.",
      "reverseTag": "Etiqueta inversa",
      "reverseTagPlaceholder": "Reverse tag opcional",
      "telegramId": "ID de usuario de Telegram",
      "telegramIdPlaceholder": "ID numérico de usuario de Telegram (0 = ninguno)",
      "ipLimit": "Límite de IP",
      "toasts": {
        "deleted": "Cliente eliminado",
        "trafficReset": "Tráfico restablecido",
        "allTrafficsReset": "Tráfico de todos los clientes restablecido",
        "bulkDeleted": "{count} clientes eliminados",
        "bulkDeletedMixed": "{ok} eliminados, {failed} fallidos",
        "bulkEnabled": "{count} clientes habilitados",
        "bulkEnabledMixed": "{ok} habilitados, {failed} fallidos",
        "bulkDisabled": "{count} clientes deshabilitados",
        "bulkDisabledMixed": "{ok} deshabilitados, {failed} fallidos",
        "bulkCreated": "{count} clientes creados",
        "bulkCreatedMixed": "{ok} creados, {failed} fallidos",
        "bulkAdjusted": "{count} clientes ajustados",
        "bulkAdjustedMixed": "{ok} ajustados, {skipped} omitidos",
        "delDepleted": "{count} clientes agotados eliminados",
        "delOrphans": "{count} clientes sin entrante eliminados",
        "imported": "{count} clientes importados",
        "importedMixed": "{ok} importados, {failed} omitidos"
      }
    },
    "groups": {
      "name": "Nombre",
      "clientCount": "Clientes",
      "totalGroups": "Total de grupos",
      "totalGroupedClients": "Clientes con grupo",
      "trafficUsed": "Tráfico usado",
      "upload": "Subida",
      "download": "Bajada",
      "totalTraffic": "Tráfico total",
      "totalUpDown": "Subida / bajada total",
      "addGroup": "Añadir grupo",
      "createSuccess": "Grupo «{name}» creado.",
      "rename": "Renombrar",
      "renameTitle": "Renombrar {name}",
      "renameCollision": "Ya existe un grupo llamado «{name}».",
      "renameSuccess": "Grupo renombrado en {count} cliente(s).",
      "deleteConfirmTitle": "¿Eliminar el grupo {name}?",
      "deleteConfirmContent": "Esto elimina el grupo y limpia su etiqueta de {count} cliente(s). Los clientes en sí no se eliminan.",
      "deleteSuccess": "Grupo limpiado de {count} cliente(s).",
      "resetTraffic": "Restablecer tráfico",
      "resetConfirmTitle": "¿Restablecer tráfico del grupo {name}?",
      "resetConfirmContent": "Esto restablece solo el contador de tráfico del grupo. Los contadores de cada cliente no se ven afectados.",
      "resetSuccess": "Tráfico del grupo {name} restablecido.",
      "adjustSuccess": "Ajustados {count} cliente(s) en {name}.",
      "emptyForAction": "Este grupo aún no tiene clientes.",
      "deleteGroupOnly": "Eliminar grupo (conservar clientes)",
      "deleteClients": "Eliminar clientes del grupo",
      "deleteClientsConfirmTitle": "¿Eliminar todos los clientes en {name}?",
      "deleteClientsConfirmContent": "Esto elimina permanentemente {count} cliente(s) junto con sus registros de tráfico. La etiqueta de grupo también se limpia. Esto no se puede deshacer.",
      "deleteClientsSuccess": "Eliminados {count} cliente(s).",
      "deleteClientsMixed": "{ok} eliminados, {failed} omitidos",
      "addToGroup": "Añadir clientes…",
      "addToGroupTitle": "Añadir clientes al grupo «{name}»",
      "addToGroupDesc": "Selecciona clientes para añadir a este grupo. Mantienen sus asociaciones de entrada existentes; solo cambia la etiqueta de grupo. Los clientes que ya están en este grupo no se muestran.",
      "addToGroupEmpty": "No hay otros clientes disponibles para añadir.",
      "addToGroupResult": "Añadidos {count} cliente(s) a {name}.",
      "removeFromGroup": "Quitar clientes…",
      "removeFromGroupTitle": "Quitar clientes del grupo «{name}»",
      "removeFromGroupDesc": "Selecciona miembros para quitar de este grupo. Los clientes se conservan (usa «Eliminar clientes del grupo» para eliminarlos por completo).",
      "removeFromGroupResult": "Quitados {count} cliente(s) de {name}."
    },
    "nodes": {
      "addNode": "Agregar nodo",
      "editNode": "Editar nodo",
      "totalNodes": "Total de nodos",
      "onlineNodes": "En línea",
      "offlineNodes": "Sin conexión",
      "avgLatency": "Latencia media",
      "name": "Nombre",
      "namePlaceholder": "p. ej. de-frankfurt-1",
      "addressPlaceholder": "panel.example.com o 1.2.3.4",
      "remark": "Notas",
      "scheme": "Esquema",
      "address": "Dirección",
      "port": "Puerto",
      "basePath": "Ruta base",
      "apiToken": "Token API",
      "apiTokenPlaceholder": "Token desde la página de Configuración del panel remoto",
      "apiTokenHint": "El panel remoto expone su token de API en Configuraciones de Seguridad → Token de API.",
      "apiTokenKeepHint": "Déjalo en blanco para mantener el token actual",
      "allowPrivateAddress": "Permitir dirección privada",
      "allowPrivateAddressHint": "Habilitar solo para nodos en una red privada o VPN.",
      "outboundTag": "Outbound de conexión",
      "outboundTagHint": "Enruta el tráfico de la API del panel de este nodo a través del outbound Xray seleccionado. Un inbound de puente loopback se agrega automáticamente a la configuración en ejecución y se aplica en vivo. Déjelo vacío para una conexión directa.",
      "outboundTagPlaceholder": "Conexión directa",
      "inboundSyncMode": "Importación de inbounds",
      "inboundSyncModeHint": "Elige qué inbounds importar desde este nodo. Los nodos existentes importan todos de forma predeterminada.",
      "allInbounds": "Todos los inbounds",
      "selectedInbounds": "Inbounds seleccionados",
      "inboundTags": "Inbounds",
      "inboundTagsHint": "La selección se compara por la etiqueta del inbound. Una selección vacía no importa ninguno.",
      "inboundTagsPlaceholder": "Carga y selecciona inbounds",
      "loadInbounds": "Cargar inbounds desde el nodo",
      "inboundsLoaded": "Se cargaron {{count}} inbounds",
      "inboundsLoadFailed": "No se pudieron cargar los inbounds",
      "enable": "Habilitado",
      "status": "Estado",
      "cpu": "CPU",
      "mem": "Memoria",
      "netUp": "Subida de red (KB/s)",
      "netDown": "Bajada de red (KB/s)",
      "uptime": "Tiempo activo",
      "latency": "Latencia",
      "lastHeartbeat": "Último latido",
      "xrayVersion": "Versión de Xray",
      "panelVersion": "Versión del panel",
      "actions": "Acciones",
      "probe": "Sondear ahora",
      "updatePanel": "Actualizar panel",
      "updateSelected": "Actualizar seleccionados ({count})",
      "updateAvailable": "Actualización disponible",
      "updateConfirmTitle": "¿Actualizar {count} nodo(s) a la última versión?",
      "updateConfirmContent": "Cada nodo seleccionado descarga la última versión y se reinicia con ella. Solo se actualizan los nodos habilitados y en línea.",
      "updateDevChannel": "Actualizar al canal de desarrollo (último commit)",
      "testConnection": "Probar conexión",
      "connectionOk": "Conexión correcta ({ms} ms)",
      "connectionFailed": "Conexión fallida",
      "never": "nunca",
      "justNow": "ahora mismo",
      "subNode": "Subnodo",
      "subNodeTip": "Solo lectura: un nodo descendente al que se llega a través de {parent}. Gestiónalo desde el propio panel de {parent}.",
      "deleteConfirmTitle": "¿Eliminar el nodo \"{name}\"?",
      "deleteConfirmContent": "Esto detiene la monitorización del nodo. El panel remoto en sí no se ve afectado.",
      "statusValues": {
        "online": "En línea",
        "offline": "Sin conexión",
        "unknown": "Desconocido",
        "xrayError": "Error de Xray",
        "xrayStopped": "Detenido"
      },
      "toasts": {
        "list": "Error al cargar los nodos",
        "obtain": "Error al cargar el nodo",
        "add": "Agregar nodo",
        "update": "Actualizar nodo",
        "delete": "Eliminar nodo",
        "deleted": "Nodo eliminado",
        "test": "Probar conexión",
        "fillRequired": "El nombre, la dirección, el puerto y el token de API son obligatorios",
        "probeFailed": "Sondeo fallido",
        "updateStarted": "Actualización del panel iniciada",
        "updateResult": "Actualización iniciada en {ok} nodo(s), {failed} fallaron",
        "updateNoneEligible": "Selecciona al menos un nodo en línea y habilitado",
        "saveMtls": "Guardar mTLS del nodo"
      },
      "tlsVerifyMode": "Verificación TLS",
      "tlsVerifyModeHint": "Cómo valida el panel el certificado HTTPS del nodo. Fijar u Omitir son para certificados autofirmados (solo nodos https).",
      "tlsVerify": "Verificar (CA predeterminada)",
      "tlsPin": "Fijar certificado (SHA-256)",
      "tlsSkip": "Omitir verificación",
      "tlsMtls": "TLS mutuo (certificado de cliente)",
      "mtlsFormHint": "Este nodo autentica al panel con un certificado de cliente. Copia el CA de este panel desde la sección mTLS del nodo al nodo, configura su CA de confianza y luego reinícialo.",
      "mtls": {
        "title": "mTLS del nodo",
        "intro": "TLS mutuo añade un factor de certificado de cliente además del token de API para las llamadas entre nodos. Es opcional: déjalo vacío para mantener solo la autenticación por token.",
        "copyCa": "Copiar el CA de este panel",
        "copyCaHint": "Entrega este CA a los nodos que gestiona este panel y luego configura su verificación TLS como TLS mutuo.",
        "caCopied": "Certificado CA copiado al portapapeles",
        "caFailed": "No se pudo obtener el certificado CA",
        "trustLabel": "CA de confianza (panel superior)",
        "trustHint": "Cuando este panel es a su vez un nodo, pega aquí el CA del panel que lo gestiona para exigir su certificado de cliente. Reinicia el panel para aplicar.",
        "trustPlaceholder": "-----BEGIN CERTIFICATE-----",
        "save": "Guardar CA de confianza",
        "saved": "CA de confianza guardado — reinicia el panel para aplicar"
      },
      "tlsSkipWarning": "Omitir la verificación elimina la protección contra ataques de intermediario; el token de API podría ser interceptado. Es preferible fijar el certificado.",
      "pinnedCert": "SHA-256 del certificado fijado",
      "pinnedCertHint": "SHA-256 del certificado del nodo en base64 o hex. Usa Obtener para leerlo del nodo ahora.",
      "pinnedCertPlaceholder": "SHA-256 en base64 o hex",
      "fetchPin": "Obtener",
      "pinFetched": "Se obtuvo el certificado actual del nodo",
      "pinFetchFailed": "No se pudo obtener el certificado"
    },
    "settings": {
      "defaultTag": "Predeterminado",
      "title": "Configuraciones",
      "save": "Guardar",
      "infoDesc": "Cada cambio realizado aquí debe ser guardado. Por favor, reinicie el panel para aplicar los cambios.",
      "restartPanel": "Reiniciar panel",
      "restartPanelDesc": "¿Está seguro de que desea reiniciar el panel? Haga clic en Aceptar para reiniciar después de 3 segundos. Si no puede acceder al panel después de reiniciar, por favor, consulte la información de registro del panel en el servidor.",
      "restartPanelSuccess": "El panel se reinició correctamente",
      "actions": "Acciones",
      "resetDefaultConfig": "Restablecer a Configuración Predeterminada",
      "panelSettings": "Configuraciones del Panel",
      "securitySettings": "Configuraciones de Seguridad",
      "securityWarnings": "Advertencias de seguridad",
      "panelExposed": "Es posible que su panel esté expuesto:",
      "warnHttp": "El panel se sirve por HTTP sin cifrar — configure TLS para producción.",
      "warnDefaultPort": "El puerto por defecto 2053 es conocido — cámbielo a uno aleatorio.",
      "warnDefaultBasePath": "La ruta base por defecto \"/\" es conocida — cámbiela a una ruta aleatoria.",
      "warnDefaultSubPath": "La ruta de suscripción por defecto \"/sub/\" es conocida — cámbiela.",
      "warnDefaultJsonPath": "La ruta de suscripción JSON por defecto \"/json/\" es conocida — cámbiela.",
      "TGBotSettings": "Bot de Telegram",
      "panelListeningIP": "IP de Escucha del Panel",
      "panelListeningIPDesc": "Dejar en blanco por defecto para monitorear todas las IPs.",
      "panelListeningDomain": "Dominio de Escucha del Panel",
      "panelListeningDomainDesc": "Dejar en blanco por defecto para monitorear todos los dominios e IPs.",
      "panelPort": "Puerto del Panel",
      "panelPortDesc": "El puerto utilizado para mostrar este panel.",
      "publicKeyPath": "Ruta del Archivo de Clave Pública del Certificado del Panel",
      "publicKeyPathDesc": "Complete con una ruta absoluta que comience con.",
      "privateKeyPath": "Ruta del Archivo de Clave Privada del Certificado del Panel",
      "privateKeyPathDesc": "Complete con una ruta absoluta que comience con.",
      "panelUrlPath": "Ruta URI",
      "panelUrlPathDesc": "Debe empezar con '/' y terminar con.",
      "pageSize": "Tamaño de paginación",
      "pageSizeDesc": "Defina el tamaño de página para la tabla de entradas. Establezca 0 para desactivar",
      "panelOutbound": "Salida del tráfico del panel",
      "panelOutboundDesc": "Enruta las peticiones del propio panel — comprobaciones de versión y descargas de panel/Xray, Telegram y la actualización normal de archivos geo — a través de esta salida de Xray para sortear el filtrado de GitHub/Telegram en el servidor. Una entrada puente local se añade automáticamente a la configuración en ejecución y se aplica en vivo. La Autoactualización de Geodata nativa de Xray no se ve afectada; tiene su propia salida de descarga. Deja vacío para conexión directa.",
      "panelOutboundPh": "Conexión directa",
      "datepicker": "selector de fechas",
      "datepickerPlaceholder": "Seleccionar fecha",
      "datepickerDescription": "El tipo de calendario selector especifica la fecha de vencimiento",
      "oldUsername": "Nombre de Usuario Actual",
      "currentPassword": "Contraseña Actual",
      "newUsername": "Nuevo Nombre de Usuario",
      "newPassword": "Nueva Contraseña",
      "telegramBotEnable": "Habilitar bot de Telegram",
      "telegramBotEnableDesc": "Conéctese a las funciones de este panel a través del bot de Telegram.",
      "telegramToken": "Token de Telegram",
      "telegramTokenDesc": "Debe obtener el token del administrador de bots de Telegram {'@'}botfather.",
      "telegramProxy": "Proxy SOCKS",
      "telegramProxyDesc": "Si necesita el proxy Socks5 para conectarse a Telegram. Ajuste su configuración según la guía.",
      "telegramAPIServer": "Servidor API de Telegram",
      "telegramAPIServerDesc": "El servidor API de Telegram a utilizar. Déjelo en blanco para utilizar el servidor predeterminado.",
      "telegramChatId": "IDs de Chat de Telegram para Administradores",
      "telegramChatIdDesc": "IDs de Chat múltiples separados por comas. Use {'@'}userinfobot o use el comando '/id' en el bot para obtener sus IDs de Chat.",
      "telegramNotifyTime": "Hora de Notificación del Bot de Telegram",
      "telegramNotifyTimeDesc": "Con qué frecuencia el bot de Telegram envía informes periódicos. Elige un intervalo predefinido o selecciona Personalizado para introducir una expresión crontab.",
      "notifyTime": {
        "every": "@every — repetir en un intervalo",
        "hourly": "@hourly — cada hora",
        "daily": "@daily — cada día a las 00:00",
        "weekly": "@weekly — cada semana",
        "monthly": "@monthly — cada mes",
        "custom": "Personalizado (crontab)",
        "seconds": "Segundos",
        "minutes": "Minutos",
        "hours": "Horas",
        "interval": "Intervalo",
        "unit": "Unidad"
      },
      "tgNotifyBackup": "Respaldo de Base de Datos",
      "tgNotifyBackupDesc": "Incluir archivo de respaldo de base de datos con notificación de informe.",
      "tgNotifyLogin": "Notificación de Inicio de Sesión",
      "tgNotifyLoginDesc": "Muestra el nombre de usuario, dirección IP y hora cuando alguien intenta iniciar sesión en su panel.",
      "sessionMaxAge": "Edad Máxima de Sesión",
      "sessionMaxAgeDesc": "La duración de una sesión de inicio de sesión (unidad: minutos).",
      "expireTimeDiff": "Umbral de Expiración para Notificación",
      "expireTimeDiffDesc": "Reciba notificaciones sobre la expiración de la cuenta antes del umbral (unidad: días).",
      "trafficDiff": "Umbral de Tráfico para Notificación",
      "trafficDiffDesc": "Reciba notificaciones sobre el agotamiento del tráfico antes de alcanzar el umbral (unidad: GB).",
      "tgNotifyCpu": "Umbral de Alerta de Porcentaje de CPU",
      "tgNotifyCpuDesc": "Reciba notificaciones si el uso de la CPU supera este umbral (unidad: %).",
      "timeZone": "Zona Horaria",
      "timeZoneDesc": "Las tareas programadas se ejecutan de acuerdo con la hora en esta zona horaria.",
      "subSettings": "Suscripción",
      "subEnable": "Habilitar Servicio",
      "subEnableDesc": "Función de suscripción con configuración separada.",
      "subJsonEnable": "Habilitar/Deshabilitar el endpoint de suscripción JSON de forma independiente.",
      "subJsonEnableTitle": "Suscripción JSON",
      "subClashEnableTitle": "Suscripción Clash / Mihomo",
      "subFormatsTipTitle": "Configuración de suscripción específica por formato",
      "subFormatsTipDesc": "Configura por separado las rutas URL, las URL inversas y la detección automática de clientes para JSON y Clash / Mihomo.",
      "subFormatsTipAction": "Abrir formatos de suscripción",
      "subJsonAutoDetect": "Detectar automáticamente clientes Xray JSON",
      "subJsonAutoDetectDesc": "Al activarlo, los clientes compatibles reconocidos que soliciten la URL de suscripción estándar recibirán automáticamente una matriz de configuraciones Xray JSON. Los demás clientes conservarán la respuesta sin procesar/Base64. Requiere activar la suscripción JSON y reiniciar el panel.",
      "subJsonAlwaysArray": "Devolver siempre una matriz JSON",
      "subJsonAlwaysArrayDesc": "Devuelve el endpoint JSON explícito como una matriz incluso con un solo perfil, según el estándar XTLS. Las respuestas JSON detectadas automáticamente siempre usan matrices. Desactívalo para conservar la respuesta heredada de un solo objeto.",
      "subJsonUserAgentRegex": "Expresión User-Agent de Xray JSON",
      "subJsonUserAgentRegexDesc": "Expresión regular Go RE2 que se compara con el User-Agent del cliente para seleccionar automáticamente el formato Xray JSON en la URL de suscripción estándar. Vacía de forma predeterminada, por lo que la detección automática permanece desactivada hasta que definas un patrón para los clientes que quieras atender. Los demás clientes conservan la respuesta sin procesar/Base64. Reinicia el panel después de cambiarla.",
      "subClashAutoDetect": "Detectar automáticamente clientes Clash/Mihomo",
      "subClashAutoDetectDesc": "Al activarlo, los clientes Clash/Mihomo reconocidos que soliciten la URL de suscripción estándar recibirán automáticamente YAML de Clash. Los navegadores seguirán mostrando la página de suscripción, los demás clientes conservarán la respuesta sin procesar/Base64 y las URL explícitas de JSON y Clash seguirán disponibles. Requiere activar la suscripción Clash/Mihomo y reiniciar el panel para aplicar el cambio.",
      "subClashUserAgentRegex": "Expresión User-Agent de Clash/Mihomo",
      "subClashUserAgentRegexDesc": "Expresión regular Go RE2 que se compara con el User-Agent del cliente para reconocer clientes Clash/Mihomo en la URL de suscripción estándar. Déjala vacía para usar el patrón predeterminado. Reinicia el panel después de cambiarla.",
      "subTitle": "Título de la Suscripción",
      "subTitleDesc": "Título mostrado en el cliente VPN",
      "subSupportUrl": "URL de soporte",
      "subSupportUrlDesc": "Enlace de soporte técnico mostrado en el cliente VPN",
      "subProfileUrl": "URL del perfil",
      "subProfileUrlDesc": "Un enlace a tu sitio web mostrado en el cliente VPN",
      "subAnnounce": "Anuncio",
      "subAnnounceDesc": "El texto del anuncio mostrado en el cliente VPN",
      "subThemeDir": "Directorio del tema de suscripción",
      "subThemeDirDesc": "Ruta absoluta a una carpeta que contiene una plantilla personalizada (index.html/sub.html) para la página de suscripción (p. ej. /etc/3x-ui/sub_templates/my-theme/). Déjalo vacío para usar la página predeterminada.",
      "subThemeDirDocs": "Guía de plantillas ↗",
      "subEnableRouting": "Habilitar enrutamiento",
      "subEnableRoutingDesc": "Configuración global para habilitar el enrutamiento en el cliente VPN. (Solo para Happ)",
      "subRoutingRules": "Reglas de enrutamiento",
      "subRoutingRulesDesc": "Reglas de enrutamiento globales para el cliente VPN. (Solo para Happ)",
      "subHideSettings": "Ocultar configuración del servidor",
      "subHideSettingsDesc": "Ocultar la posibilidad de ver y editar las configuraciones del servidor en el cliente VPN. (Solo para Happ)",
      "subIncyEnableRouting": "Habilitar enrutamiento",
      "subIncyEnableRoutingDesc": "Inyectar un perfil de enrutamiento en el cuerpo de la suscripción para el cliente Incy. (Solo para Incy)",
      "subIncyRoutingRules": "Reglas de enrutamiento",
      "subIncyRoutingRulesDesc": "Enlace de enrutamiento de Incy añadido al cuerpo de la suscripción, p. ej. incy://routing/onadd/<base64>. (Solo para Incy)",
      "subClashEnableRouting": "Habilitar enrutamiento",
      "subClashEnableRoutingDesc": "Incluir reglas globales de enrutamiento Clash/Mihomo en las suscripciones YAML generadas.",
      "subClashRoutingRules": "Reglas globales de enrutamiento",
      "subClashRoutingRulesDesc": "Reglas Clash/Mihomo agregadas al inicio de cada suscripción YAML antes de MATCH,PROXY.",
      "subListen": "Listening IP",
      "subListenDesc": "Dejar en blanco por defecto para monitorear todas las IPs.",
      "subPort": "Puerto de Suscripción",
      "subPortDesc": "El número de puerto para el servicio de suscripción debe estar sin usar en el servidor. También se usa para construir el enlace/QR de suscripción mostrado en el panel cuando «URI de proxy inverso» está vacío — si la suscripción se accede a través de un proxy inverso en otro puerto, configure «URI de proxy inverso» en su lugar.",
      "subCertPath": "Ruta del Archivo de Clave Pública del Certificado de Suscripción",
      "subCertPathDesc": "Complete con una ruta absoluta que comience con '/'",
      "subKeyPath": "Ruta del Archivo de Clave Privada del Certificado de Suscripción",
      "subKeyPathDesc": "Complete con una ruta absoluta que comience con '/'",
      "subPath": "Ruta URI",
      "subPathDesc": "Debe empezar con '/' y terminar con '/'",
      "subDomain": "Dominio de Escucha",
      "subDomainDesc": "Dejar en blanco por defecto para monitorear todos los dominios e IPs. También se usa como dominio de reserva para el enlace de suscripción mostrado cuando «URI de proxy inverso» está vacío — configure «URI de proxy inverso» si el panel y la suscripción se acceden por dominios diferentes (por ejemplo, detrás de un proxy inverso).",
      "subUpdates": "Intervalos de Actualización de Suscripción",
      "subUpdatesDesc": "Horas de intervalo entre actualizaciones en la aplicación del cliente.",
      "subEncrypt": "Codificar",
      "subEncryptDesc": "Encriptar las configuraciones devueltas en la suscripción.",
      "subURI": "URI de proxy inverso",
      "subURIDesc": "La URL base completa (scheme://dominio[:puerto]/ruta/) para el enlace de suscripción y el código QR, usada en lugar de Dominio de Escucha/Puerto de Suscripción. Configúrela cuando la suscripción se acceda a través de un proxy inverso o un dominio/puerto distinto a los anteriores.",
      "externalTrafficInformEnable": "Informe de tráfico externo",
      "externalTrafficInformEnableDesc": "Informar a una API externa en cada actualización de tráfico.",
      "externalTrafficInformURI": "URI de información de tráfico externo",
      "externalTrafficInformURIDesc": "Las actualizaciones de tráfico se envían a este URI.",
      "restartXrayOnClientDisable": "Reiniciar Xray tras desactivación automática",
      "restartXrayOnClientDisableDesc": "Cuando un cliente se desactive automáticamente por vencimiento o límite de tráfico, reiniciar Xray.",
      "fragment": "Fragmentación",
      "fragmentDesc": "Habilitar la fragmentación para el paquete de saludo de TLS",
      "fragmentSett": "Configuración de Fragmentación",
      "noisesDesc": "Activar Sonidos",
      "noisesSett": "Configuración de Sonidos",
      "trustedProxyCidrs": "CIDR de proxy de confianza",
      "trustedProxyCidrsDesc": "IP/CIDR separados por coma que pueden establecer las cabeceras de host, proto e IP del cliente reenviadas.",
      "ldap": {
        "enable": "Habilitar sincronización LDAP",
        "host": "Host LDAP",
        "port": "Puerto LDAP",
        "useTls": "Usar TLS (LDAPS)",
        "skipTlsVerify": "Omitir verificación de certificado TLS",
        "skipTlsVerifyDesc": "Inseguro — desactiva la validación del certificado del servidor. Usar solo con CA internos/no confiables.",
        "bindDn": "Bind DN",
        "passwordConfigured": "Configurada; deja en blanco para mantener la contraseña actual.",
        "passwordUnconfigured": "No configurada.",
        "passwordPlaceholder": "Configurada — introduce un nuevo valor para reemplazar",
        "baseDn": "Base DN",
        "userFilter": "Filtro de usuario",
        "userAttr": "Atributo de usuario (username/email)",
        "vlessField": "Atributo flag VLESS",
        "flagField": "Atributo flag genérico (opcional)",
        "flagFieldDesc": "Si se establece, sobrescribe el flag VLESS — p. ej. shadowInactive.",
        "truthyValues": "Valores truthy",
        "truthyValuesDesc": "Separados por coma; por defecto: true,1,yes,on",
        "invertFlag": "Invertir flag",
        "invertFlagDesc": "Habilita cuando el atributo significa «deshabilitado» (p. ej. shadowInactive).",
        "syncSchedule": "Programación de sincronización",
        "syncScheduleDesc": "Cadena tipo cron, p. ej. @every 1m",
        "inboundTags": "Etiquetas de entradas",
        "inboundTagsDesc": "Entradas en las que la sincronización LDAP puede auto-crear o auto-eliminar clientes.",
        "noInbounds": "No se encontraron entradas. Crea una en Entradas primero.",
        "autoCreate": "Crear clientes automáticamente",
        "autoDelete": "Eliminar clientes automáticamente",
        "defaultTotalGb": "Total por defecto (GB)",
        "defaultExpiryDays": "Caducidad por defecto (días)",
        "defaultIpLimit": "Límite IP por defecto"
      },
      "subFormats": {
        "finalMask": "Final Mask",
        "finalMaskDesc": "Inyecta máscaras TCP/UDP de finalmask de Xray y parámetros QUIC en cada perfil Xray JSON generado. Requiere una aplicación compatible con suscripciones Xray JSON y un núcleo Xray reciente.",
        "packets": "Paquetes",
        "length": "Longitud",
        "interval": "Intervalo",
        "maxSplit": "Máx. división",
        "noises": "Ruidos",
        "noiseItem": "Ruido №{n}",
        "type": "Tipo",
        "packet": "Paquete",
        "delayMs": "Retraso (ms)",
        "applyTo": "Aplicar a",
        "addNoise": "+ Ruido",
        "concurrency": "Concurrencia",
        "xudpConcurrency": "Concurrencia xudp",
        "xudpUdp443": "xudp UDP 443"
      },
      "mux": "Mux",
      "muxDesc": "Transmite múltiples flujos de datos independientes dentro de un flujo de datos establecido.",
      "muxSett": "Configuración Mux",
      "direct": "Conexión Directa",
      "directDesc": "Establece conexiones directas con dominios o rangos de IP de un país específico.",
      "notifications": "Notificaciones",
      "certs": "Certificados",
      "externalTraffic": "Tráfico Externo",
      "dateAndTime": "Fecha y Hora",
      "proxyAndServer": "Proxy y Servidor",
      "intervals": "Intervalos",
      "information": "Información",
      "profile": "Perfil",
      "language": "Idioma",
      "telegramBotLanguage": "Idioma del Bot de Telegram",
      "security": {
        "admin": "Credenciales de administrador",
        "twoFactor": "Autenticación de dos factores",
        "twoFactorEnable": "Habilitar 2FA",
        "twoFactorEnableDesc": "Añade una capa adicional de autenticación para mayor seguridad.",
        "twoFactorModalSetTitle": "Activar autenticación de dos factores",
        "twoFactorModalDeleteTitle": "Desactivar autenticación de dos factores",
        "twoFactorModalSteps": "Para configurar la autenticación de dos factores, sigue estos pasos:",
        "twoFactorModalFirstStep": "1. Escanea este código QR en la aplicación de autenticación o copia el token cerca del código QR y pégalo en la aplicación",
        "twoFactorModalSecondStep": "2. Ingresa el código de la aplicación",
        "twoFactorModalRemoveStep": "Ingresa el código de la aplicación para eliminar la autenticación de dos factores.",
        "twoFactorModalChangeCredentialsTitle": "Cambiar credenciales",
        "twoFactorModalChangeCredentialsStep": "Ingrese el código de la aplicación para cambiar las credenciales del administrador.",
        "twoFactorModalSetSuccess": "La autenticación de dos factores se ha establecido con éxito",
        "twoFactorModalDeleteSuccess": "La autenticación de dos factores se ha eliminado con éxito",
        "twoFactorModalError": "Código incorrecto",
        "show": "Mostrar",
        "hide": "Ocultar",
        "apiTokenNew": "Nuevo token",
        "apiTokenName": "Nombre",
        "apiTokenNamePlaceholder": "por ejemplo central-panel-a",
        "apiTokenNameRequired": "El nombre es obligatorio",
        "apiTokenEmpty": "Aún no hay tokens — crea uno para autenticar bots o paneles remotos.",
        "apiTokenDeleteWarning": "Cualquier cliente que use este token dejará de autenticarse inmediatamente.",
        "apiTokenCreatedTitle": "Token creado",
        "apiTokenCreatedNotice": "Copia este token ahora. Por seguridad, no se almacena de forma legible y no se volverá a mostrar."
      },
      "toasts": {
        "modifySettings": "Los parámetros han sido modificados.",
        "getSettings": "Ocurrió un error al obtener los parámetros.",
        "modifyUserError": "Ocurrió un error al cambiar las credenciales del administrador.",
        "modifyUser": "Has cambiado exitosamente las credenciales del administrador.",
        "originalUserPassIncorrect": "Nombre de usuario o contraseña original incorrectos",
        "userPassMustBeNotEmpty": "El nuevo nombre de usuario y la nueva contraseña no pueden estar vacíos",
        "getOutboundTrafficError": "Error al obtener el tráfico saliente",
        "resetOutboundTrafficError": "Error al reiniciar el tráfico saliente"
      },
      "smtpSettings": "Configuración de SMTP",
      "smtpEnable": "Activar notificaciones por correo",
      "smtpEnableDesc": "Activar notificaciones por correo mediante SMTP",
      "smtpHost": "Servidor SMTP",
      "smtpHostDesc": "Nombre del servidor SMTP (p. ej. smtp.gmail.com)",
      "smtpPort": "Puerto SMTP",
      "smtpPortDesc": "Puerto del servidor SMTP (predeterminado: 587)",
      "smtpUsername": "Usuario SMTP",
      "smtpUsernameDesc": "Usuario de autenticación SMTP",
      "smtpFrom": "Dirección de remitente (From)",
      "smtpFromDesc": "Dirección usada en el encabezado From del correo. Déjelo vacío para usar el nombre de usuario.",
      "smtpFromName": "Nombre del remitente (From)",
      "smtpFromNameDesc": "Nombre para mostrar opcional antes de la dirección en el encabezado From.",
      "smtpPassword": "Contraseña SMTP",
      "smtpPasswordDesc": "Contraseña de autenticación SMTP",
      "smtpTo": "Destinatarios",
      "smtpToDesc": "Direcciones de correo de los destinatarios separadas por comas",
      "emailSettings": "Correo",
      "emailNotifications": "Notificaciones",
      "smtpEventBusNotify": "Notificaciones por correo de eventos",
      "smtpEventBusNotifyDesc": "Seleccione qué eventos generan notificaciones por correo",
      "tgEventBusNotify": "Notificaciones de Telegram de eventos",
      "tgEventBusNotifyDesc": "Seleccione qué eventos generan notificaciones de Telegram",
      "testSmtp": "Enviar correo de prueba",
      "testTgBot": "Enviar mensaje de prueba",
      "eventGroupOutbound": "Saliente",
      "eventGroupXray": "Núcleo de Xray",
      "eventGroupSystem": "Sistema",
      "eventGroupSecurity": "Seguridad",
      "eventGroupNode": "Nodos",
      "eventOutboundDown": "Caído",
      "eventOutboundUp": "Activo",
      "eventXrayCrash": "Caída",
      "eventNodeDown": "Caído",
      "eventNodeUp": "Activo",
      "eventCPUHigh": "CPU alta (%)",
      "requestFailed": "La solicitud falló",
      "smtpEncryption": "Cifrado",
      "smtpEncryptionDesc": "Método de cifrado de la conexión SMTP",
      "smtpEncryptionNone": "Ninguno (texto sin cifrar)",
      "smtpEncryptionStartTLS": "STARTTLS",
      "smtpEncryptionTLS": "TLS (implícito)",
      "smtpStageConnect": "Conexión",
      "smtpStageAuth": "Autenticación",
      "smtpStageSend": "Envío",
      "smtpTestSuccess": "Correo de prueba enviado correctamente",
      "smtpHostNotConfigured": "Servidor SMTP no configurado",
      "smtpNoRecipients": "No hay destinatarios configurados",
      "smtpFromNotConfigured": "La dirección del remitente SMTP no está configurada",
      "eventLoginAttempt": "Intento de inicio de sesión",
      "telegramTokenConfigured": "Configurado; deje en blanco para mantener el token actual.",
      "telegramTokenPlaceholder": "Configurado: introduzca un nuevo token para reemplazarlo",
      "smtpPasswordConfigured": "Configurada; deje en blanco para mantener la contraseña actual.",
      "smtpPasswordPlaceholder": "Configurada: introduzca una nueva contraseña para reemplazarla",
      "smtpNotInitialized": "SMTP no inicializado",
      "tgBotNotEnabled": "El bot de Telegram no está activado",
      "tgTestFailed": "La prueba de Telegram falló",
      "tgTestSuccess": "Mensaje de prueba enviado a Telegram",
      "tgBotNotRunning": "El bot de Telegram no está en ejecución",
      "smtpErrorAuth": "Error de autenticación: compruebe el usuario y la contraseña",
      "smtpErrorStarttls": "El servidor requiere STARTTLS: cambie el tipo de cifrado",
      "smtpErrorTls": "El servidor requiere TLS: cambie el tipo de cifrado",
      "smtpErrorRefused": "Conexión rechazada: compruebe el servidor y el puerto",
      "smtpErrorTimeout": "Tiempo de conexión agotado: servidor inaccesible",
      "smtpErrorRelay": "El servidor rechaza el envío desde esta dirección",
      "smtpErrorEof": "Conexión cerrada por el servidor",
      "smtpErrorUnknown": "Error de SMTP: {{ .Error }}",
      "eventMemoryHigh": "Uso de memoria alto (%)",
      "remarkTemplate": "Plantilla de notas",
      "remarkTemplateDesc": "Cuando se define, esto reemplaza el modelo de notas para cada enlace de suscripción — escribe tu propio formato con los tokens de variable (usa el botón para insertarlos). Déjalo vacío para usar el modelo anterior.",
      "subShowIdentityOnAllLinks": "Mostrar identidad en cada enlace",
      "subShowIdentityOnAllLinksDesc": "Si está activado, {{EMAIL}} y {{USERNAME}} permanecen en la nota de cada enlace del cuerpo de la suscripción. Los tokens de uso siguen solo en el primer enlace.",
      "validation": {
        "pathLeadingSlash": "La ruta debe comenzar con /"
      },
      "secretClear": "Borrar",
      "secretClearUndo": "Deshacer borrado"
    },
    "xray": {
      "save": "Guardar configuración",
      "restartSuccess": "Xray se ha reiniciado correctamente",
      "stopSuccess": "Xray se ha detenido correctamente",
      "restartError": "Ocurrió un error al reiniciar Xray.",
      "stopError": "Ocurrió un error al detener Xray.",
      "basicTemplate": "Perfil Básico",
      "advancedTemplate": "Perfil Avanzado",
      "generalConfigs": "Configuraciones Generales",
      "generalConfigsDesc": "Estas opciones proporcionarán ajustes generales.",
      "logConfigs": "Registro",
      "logConfigsDesc": "Los registros pueden afectar la eficiencia de su servidor. Se recomienda habilitarlos sabiamente solo en caso de sus necesidades.",
      "basicRouting": "Enrutamiento Básico",
      "blockConnectionsConfigsDesc": "Estas opciones bloquearán el tráfico según el país solicitado específico.",
      "directConnectionsConfigsDesc": "Una conexión directa asegura que el tráfico específico no sea enrutado a través de otro servidor.",
      "blockips": "Bloquear IPs",
      "blockdomains": "Bloquear Dominios",
      "directips": "IPs Directas",
      "directdomains": "Dominios Directos",
      "ipv4Routing": "Enrutamiento IPv4",
      "ipv4RoutingDesc": "Estas opciones solo enrutarán a los dominios objetivo a través de IPv4.",
      "Template": "Plantilla de Configuración de Xray",
      "TemplateDesc": "Genera el archivo de configuración final de Xray basado en esta plantilla.",
      "FreedomStrategy": "Configurar Estrategia para el Protocolo Freedom",
      "FreedomStrategyDesc": "Establece la estrategia de salida de la red en el Protocolo Freedom.",
      "FreedomHappyEyeballs": "Freedom Happy Eyeballs (IPv4/IPv6)",
      "FreedomHappyEyeballsDesc": "Marcado de doble pila para la salida directa (freedom): útil en servidores de salida con IPv4 e IPv6.",
      "FreedomHappyEyeballsTryDelayDesc": "Milisegundos antes de probar la otra familia de direcciones. 150–250 ms es un buen punto de partida.",
      "RoutingStrategy": "Configurar Estrategia de Enrutamiento de Dominios",
      "RoutingStrategyDesc": "Establece la estrategia general de enrutamiento para la resolución de DNS.",
      "outboundTestUrl": "URL de prueba de outbound",
      "outboundTestUrlDesc": "URL usada al probar la conectividad del outbound",
      "Torrent": "Prohibir Uso de BitTorrent",
      "Inbounds": "Entradas",
      "Outbounds": "Salidas",
      "Balancers": "Equilibradores",
      "balancerTagRequired": "La etiqueta es obligatoria",
      "balancerSelectorRequired": "Elige al menos una salida",
      "balancerLive": "Destino actual",
      "balancerOverride": "Forzar destino",
      "balancerOverridePh": "Automático (estrategia)",
      "balancerLiveRefresh": "Actualizar estado del balanceador",
      "balancerNotRunning": "Este balanceador no está activo en el Xray en ejecución — guarda los cambios o inicia Xray primero",
      "routeTester": "Prueba de ruta",
      "routeTesterDesc": "Pregunta al Xray en ejecución qué salida gestionaría una conexión. No se envía tráfico real — la decisión viene directamente del motor de enrutamiento en vivo.",
      "routeTesterDest": "Dominio o IP",
      "routeTesterPort": "Puerto",
      "routeTesterInbound": "Entrante",
      "routeTesterProtocol": "Protocolo detectado",
      "routeTesterTest": "Probar ruta",
      "routeTesterMatchedOutbound": "Salida coincidente",
      "routeTesterViaBalancer": "vía balanceador",
      "routeTesterDefaultOutbound": "Ninguna regla de enrutamiento coincidió — el tráfico va a la salida predeterminada (primera).",
      "Routings": "Reglas de enrutamiento",
      "completeTemplate": "Todo",
      "logLevel": "Nivel de registro",
      "logLevelDesc": "El nivel de registro para registros de errores, que indica la información que debe registrarse.",
      "accessLog": "Registro de acceso",
      "accessLogDesc": "La ruta del archivo para el registro de acceso. El valor especial 'ninguno' deshabilita los registros de acceso",
      "errorLog": "Registro de Errores",
      "errorLogDesc": "La ruta del archivo para el registro de errores. El valor especial 'none' desactiva los registros de errores.",
      "dnsLog": "Registro DNS",
      "dnsLogDesc": "Si habilitar los registros de consulta DNS",
      "maskAddress": "Enmascarar Dirección",
      "maskAddressDesc": "Máscara de dirección IP, cuando se habilita, reemplazará automáticamente la dirección IP que aparece en el registro.",
      "statistics": "Estadísticas",
      "statsInboundUplink": "Estadísticas de Subida de Entrada",
      "statsInboundDownlink": "Estadísticas de Bajada de Entrada",
      "statsOutboundUplink": "Estadísticas de Subida de Salida",
      "statsOutboundDownlink": "Estadísticas de Bajada de Salida",
      "connectionLimits": "Límites de conexión",
      "connectionLimitsDesc": "Políticas a nivel de conexión para el nivel de usuario 0. Deja un campo vacío para usar el valor predeterminado de Xray.",
      "connIdle": "Tiempo de inactividad",
      "connIdleDesc": "Cierra una conexión después de que permanezca inactiva durante esta cantidad de segundos. Reducirlo libera memoria y descriptores de archivo más rápido en servidores con mucha carga (predeterminado de Xray: 300).",
      "bufferSize": "Tamaño del búfer",
      "bufferSizeDesc": "Tamaño del búfer interno por conexión en KB. Ponlo en 0 para minimizar el uso de memoria en servidores con poca RAM (el valor predeterminado de Xray depende de la plataforma).",
      "bufferSizePlaceholder": "automático",
      "seconds": "segundos",
      "importRules": "Importar reglas",
      "exportRules": "Exportar reglas",
      "importOutbounds": "Importar salidas",
      "exportOutbounds": "Exportar salidas",
      "importInvalidJson": "JSON no válido — se esperaba un array o un objeto con una clave coincidente.",
      "metricsListen": "Punto de métricas",
      "metricsListenDesc": "Expone las métricas estilo Prometheus de Xray en esta dirección:puerto (por ejemplo, 127.0.0.1:11111). Déjalo vacío para deshabilitarlo. Vincúlalo a localhost y ponlo tras un proxy inverso — no está autenticado.",
      "metricsTag": "Etiqueta de métricas",
      "rules": {
        "source": "Fuente",
        "dest": "Destino",
        "inbound": "Entrante",
        "balancer": "Equilibrador",
        "useComma": "Elementos separados por comas"
      },
      "routing": {
        "dragToReorder": "Arrastra para reordenar"
      },
      "ruleForm": {
        "sourceIps": "IPs de origen",
        "sourcePort": "Puerto de origen",
        "vlessRoute": "Ruta VLESS",
        "attributes": "Atributos",
        "value": "Valor",
        "user": "Usuario",
        "inboundTags": "Etiquetas de entradas",
        "outboundTag": "Etiqueta de salida",
        "balancerTag": "Etiqueta de balanceador",
        "balancerTagTooltip": "Enruta el tráfico a través de uno de los balanceadores configurados"
      },
      "outboundForm": {
        "tagDuplicate": "Etiqueta ya usada por otra salida",
        "tagRequired": "La etiqueta es obligatoria",
        "tagPlaceholder": "etiqueta-única",
        "localIpPlaceholder": "IP local",
        "dialerProxyPlaceholder": "Selecciona una salida para encadenar",
        "dialerProxyHint": "Conecta esta salida a través de otra salida (por etiqueta) para crear una cadena de proxy. Déjalo vacío para conectar directamente.",
        "targetStrategyHint": "Cómo se resuelve el dominio de destino antes de conectar: AsIs (predeterminado) lo envía sin resolver, UseIP… resuelve con respaldo, ForceIP… exige resolución.",
        "addressRequired": "La dirección es obligatoria",
        "portRequired": "El puerto es obligatorio",
        "optional": "opcional",
        "udpOverTcp": "UDP sobre TCP",
        "uotVersion": "Versión UoT",
        "inboundTag": "Etiqueta de entrada",
        "inboundTagPlaceholder": "etiqueta de entrada usada en reglas de enrutamiento",
        "responseType": "Tipo de respuesta",
        "rewriteNetwork": "Reescribir red",
        "unchanged": "(sin cambios)",
        "unchangedAddress": "(sin cambios) p. ej. 1.1.1.1",
        "rules": "Reglas",
        "ruleN": "Regla {n}",
        "action": "Acción",
        "redirect": "Redirect",
        "finalRules": "Reglas finales",
        "overrideXrayPrivateIp": "Sobrescribir el bloqueo de IP privada por defecto de Xray",
        "blockDelay": "Retraso de bloqueo (ms)",
        "reverseSniffing": "Sniffing inverso",
        "reserved": "Reservado",
        "minUploadInterval": "Intervalo mín. de subida (ms)",
        "maxUploadSizeBytes": "Tamaño máx. de subida (bytes)",
        "uplinkChunkSize": "Tamaño de chunk Uplink",
        "noGrpcHeader": "Sin cabecera gRPC",
        "maxConcurrency": "Máx. concurrencia",
        "maxConnections": "Máx. conexiones",
        "maxReuseTimes": "Máx. reutilizaciones",
        "maxRequestTimes": "Máx. peticiones",
        "maxReusableSecs": "Máx. segundos reutilizables",
        "keepAlivePeriod": "Periodo keep alive",
        "authPassword": "Contraseña de auth",
        "visionTestpre": "Vision testpre",
        "serverNamePlaceholder": "nombre del servidor",
        "verifyPeerName": "Verificar nombre del peer",
        "pinnedSha256": "SHA256 pinned",
        "shortId": "Short ID",
        "sockopts": "Sockopts",
        "keepAliveInterval": "Intervalo keep alive",
        "markFwmark": "Mark (fwmark)",
        "interface": "Interfaz",
        "proxyProtocol": "Proxy protocol",
        "tcpUserTimeoutMs": "TCP user timeout (ms)",
        "tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
      },
      "outbound": {
        "tag": "Etiqueta",
        "egress": "Egress",
        "egressHint": "Run an HTTP test to show egress IP and country.",
        "outboundStatus": "Estado de Salida",
        "sendThrough": "Enviar a través de",
        "targetStrategy": "Estrategia de destino",
        "modeRealDelay": "Retardo real",
        "testModeTooltip": "TCP: sonda rápida solo de dial. HTTP: petición completa a través de xray. Retardo real: tiempo total incluyendo el establecimiento de la conexión.",
        "testAll": "Probar todo",
        "httpStatus": "Estado HTTP",
        "breakdownConnect": "Conexión al proxy",
        "breakdownTls": "TLS vía salida",
        "breakdownTtfb": "Primer byte",
        "country": "País",
        "server": "Servidor",
        "city": "Ciudad",
        "allCities": "Todas las ciudades",
        "moveToTop": "Mover al principio"
      },
      "outboundSub": {
        "manage": "Suscripciones",
        "title": "Suscripciones de salida",
        "remark": "Notas (opcional)",
        "remarkPlaceholder": "p. ej. nodos HK",
        "url": "URL de suscripción",
        "urlPlaceholder": "https://... (lista de enlaces en base64)",
        "tagPrefix": "Prefijo de etiqueta",
        "tagPrefixPlaceholder": "hk-",
        "interval": "Intervalo de actualización",
        "hours": "h",
        "minutes": "min",
        "intervalHint": "Por defecto 10 minutos. La tarea en segundo plano comprueba con frecuencia; cada suscripción solo vuelve a descargarse cuando ha transcurrido su propio intervalo.",
        "enabled": "Habilitado",
        "allowPrivate": "Permitir direcciones privadas",
        "allowPrivateHint": "Permite localhost, la red local (LAN) y las IP privadas en la URL de esta suscripción. Desactivado por defecto por seguridad; actívalo solo para una fuente local de confianza.",
        "prepend": "Antes de las salidas manuales",
        "prependHint": "Coloca las salidas de esta suscripción antes de las configuradas manualmente, de modo que una de ellas pueda convertirse en la predeterminada.",
        "preview": "Vista previa",
        "previewEmpty": "No se encontraron salidas en esta URL.",
        "refreshAll": "Actualizar todo",
        "statusOk": "Correcto",
        "toastUpdated": "Suscripción actualizada",
        "addButton": "Añadir",
        "active": "Suscripciones activas",
        "empty": "Aún no hay suscripciones. Añade una arriba.",
        "colRemark": "Notas",
        "colLastFetch": "Última descarga",
        "colEnabled": "Habilitado",
        "auto": "auto",
        "never": "nunca",
        "refreshNow": "Actualizar ahora",
        "deleteConfirm": "¿Eliminar esta suscripción?",
        "restartHint": "Después de añadir o actualizar, reinicia Xray (o espera a la próxima recarga automática) para activar las salidas.",
        "fromSubsTitle": "Desde suscripciones de salida (solo lectura)",
        "fromSubsDesc": "Importadas desde tus suscripciones activas. Gestiónalas en el panel de Suscripciones de arriba.",
        "toastLoadFailed": "No se pudieron cargar las suscripciones",
        "toastUrlRequired": "La URL de suscripción es obligatoria",
        "toastAdded": "Suscripción añadida",
        "toastAddFailed": "No se pudo añadir la suscripción",
        "toastRefreshed": "Actualizada",
        "toastRefreshFailed": "Error al actualizar",
        "toastDeleted": "Eliminada",
        "toastDeleteFailed": "Error al eliminar"
      },
      "tabBalancerSettings": "Ajustes del balanceador",
      "tabObservatory": "Observatorio",
      "observatory": {
        "autoManaged": "Los observadores se gestionan automáticamente a partir de tus balanceadores. Ajusta abajo cómo sondean; las salidas vigiladas siguen los selectores del balanceador.",
        "emptyHint": "No hay ningún observador de conexión activo. Se añade uno automáticamente al crear un balanceador Least Ping o Least Load —o un balanceador Random / Round-robin con fallback— para que los balanceadores que usan observador puedan comprobar la salud de las salidas antes de elegir un destino.",
        "mixedLegacy": "Esta configuración contiene Observatory y Burst Observatory a la vez. Xray usa un único observador global, por lo que este estado mixto heredado no está soportado; al guardar balanceadores se normalizará a un solo observador.",
        "subjectSelector": "Salidas vigiladas",
        "subjectSelectorDesc": "Etiquetas de salida que sondea este observador. Se gestionan automáticamente a partir de tus balanceadores.",
        "probeURL": "URL de sondeo",
        "probeURLDesc": "URL solicitada para medir cada salida. Debe devolver HTTP 204.",
        "probeInterval": "Intervalo de sondeo",
        "probeIntervalDesc": "Con qué frecuencia se sondea cada salida, p. ej. 30s, 1m, 2h45m.",
        "enableConcurrency": "Sondeo concurrente",
        "enableConcurrencyDesc": "Sondea todas las salidas vigiladas a la vez en lugar de una a una. Más rápido, pero más visible en la red.",
        "destination": "Destino de sondeo",
        "destinationDesc": "URL solicitada para medir cada salida. Debe devolver HTTP 204.",
        "connectivity": "Comprobación de conectividad",
        "connectivityDesc": "URL opcional de comprobación de red local, se prueba solo si falla el destino. Déjalo vacío para omitir.",
        "interval": "Intervalo de sondeo",
        "intervalDesc": "Tiempo medio entre sondeos por salida, p. ej. 1m. Mínimo 10s.",
        "timeout": "Tiempo de espera del sondeo",
        "timeoutDesc": "Cuánto esperar un sondeo antes de considerarlo fallido, p. ej. 5s.",
        "sampling": "Número de muestras",
        "samplingDesc": "Número de resultados de sondeo recientes que se conservan para puntuar cada salida.",
        "httpMethod": "Método HTTP",
        "httpMethodDesc": "Método HTTP usado para los sondeos.",
        "deleteAlsoObservatory": "Este es el último balanceador que usa el Observatorio, por lo que también se eliminará.",
        "deleteAlsoBurst": "Este es el último balanceador que usa el Observatorio Burst, por lo que también se eliminará."
      },
      "refCleanup": {
        "header": "Al eliminar esto también se actualiza tu enrutamiento:",
        "ruleRemoved": "Regla {label} — eliminada (sin destino restante)",
        "ruleModified": "Regla {label} — conservada (ahora usa {keeps})",
        "balancerRemoved": "Balanceador {tag} — eliminado (sin destinos restantes)"
      },
      "balancer": {
        "balancerStrategy": "Estrategia",
        "tag": "Etiqueta",
        "tagDuplicate": "Etiqueta ya usada por otro balanceador",
        "tagPlaceholder": "etiqueta única de balanceador",
        "selector": "Selector",
        "fallback": "Fallback",
        "cycleTooltip": "Ciclo: {path} → (volver a {start})",
        "expected": "Esperado",
        "expectedPlaceholder": "número óptimo de nodos",
        "maxRtt": "Máx. RTT",
        "tolerance": "Tolerancia",
        "baselines": "Baselines",
        "costs": "Costs",
        "costMatch": "Patrón de etiqueta",
        "costValue": "Peso",
        "costRegexp": "Coincidencia por expresión regular",
        "balancerDeleteInUse": "No se puede eliminar este balanceador — se usa como respaldo para: {names}",
        "balancerFallbackCycle": "No se puede establecer este balanceador como respaldo — crearía una dependencia circular.",
        "balancerFallbackInfo": "El tráfico se enrutará a través de: Balanceador → Loopback → Servidor → Balanceador destino → Conexión saliente. Esto agrega un salto adicional a través del servidor, lo que puede introducir ligeros retrasos.",
        "fallbackBalancerHint": "Seleccione otro balanceador como respaldo",
        "reservedPrefix": "El prefijo _bl_ está reservado para objetos loopback internos del balanceador"
      },
      "wireguard": {
        "secretKey": "Llave secreta",
        "publicKey": "Llave pública",
        "allowedIPs": "IP permitidas",
        "endpoint": "Punto final",
        "domainStrategy": "Estrategia de dominio"
      },
      "tun": {
        "userLevel": "Nivel de Usuario"
      },
      "nord": {
        "accessToken": "Access token",
        "privateKey": "Clave privada",
        "noServers": "No se encontraron servidores para el país seleccionado",
        "noPublicKey": "El servidor seleccionado no anuncia una clave pública NordLynx.",
        "outboundAdded": "Salida NordVPN añadida",
        "outboundUpdated": "Salida NordVPN actualizada"
      },
      "warp": {
        "changeIp": "Cambiar IP",
        "changeIpSuccess": "¡IP de WARP cambiada correctamente!",
        "autoUpdateIp": "Actualizar IP automáticamente",
        "intervalDays": "Intervalo (días)",
        "intervalDesc": "0 para desactivar. Cambia la dirección IP automáticamente.",
        "licenseError": "No se pudo establecer la licencia WARP.",
        "fetchFirst": "Obtén primero la configuración WARP.",
        "createAccount": "Crear cuenta WARP",
        "accessToken": "Access token",
        "deviceId": "ID del dispositivo",
        "licenseKey": "Clave de licencia",
        "privateKey": "Clave privada",
        "deleteAccount": "Eliminar cuenta",
        "settings": "Ajustes",
        "licenseKeyLabel": "Clave de licencia WARP / WARP+",
        "key": "Clave",
        "keyPlaceholder": "clave WARP+ de 26 caracteres",
        "accountInfo": "Información de cuenta",
        "deviceName": "Nombre del dispositivo",
        "deviceModel": "Modelo del dispositivo",
        "deviceEnabled": "Dispositivo habilitado",
        "accountType": "Tipo de cuenta",
        "role": "Rol",
        "warpPlusData": "Datos WARP+",
        "quota": "Cuota",
        "usage": "Uso",
        "addOutbound": "Añadir salida"
      },
      "dns": {
        "enable": "Habilitar DNS",
        "enableDesc": "Habilitar servidor DNS incorporado",
        "tag": "Etiqueta de Entrada DNS",
        "tagDesc": "Esta etiqueta estará disponible como una etiqueta de entrada en las reglas de enrutamiento.",
        "clientIp": "IP del cliente",
        "clientIpDesc": "Se utiliza para notificar al servidor la ubicación IP especificada durante las consultas DNS",
        "disableCache": "Desactivar caché",
        "disableCacheDesc": "Desactiva el almacenamiento en caché de DNS",
        "disableFallback": "Desactivar respaldo",
        "disableFallbackDesc": "Desactiva las consultas DNS de respaldo",
        "disableFallbackIfMatch": "Desactivar respaldo si coincide",
        "disableFallbackIfMatchDesc": "Desactiva las consultas DNS de respaldo cuando se acierta en la lista de dominios coincidentes del servidor DNS",
        "enableParallelQuery": "Habilitar consulta paralela",
        "enableParallelQueryDesc": "Habilitar consultas DNS paralelas a múltiples servidores para una resolución más rápida",
        "strategy": "Estrategia de Consulta",
        "strategyDesc": "Estrategia general para resolver nombres de dominio",
        "add": "Agregar Servidor",
        "edit": "Editar Servidor",
        "domains": "Dominios",
        "expectIPs": "IPs esperadas",
        "unexpectIPs": "IPs inesperadas",
        "useSystemHosts": "Usar Hosts del sistema",
        "useSystemHostsDesc": "Usar el archivo hosts de un sistema instalado",
        "serveStale": "Servir caducados",
        "serveStaleDesc": "Devolver resultados caducados de la caché mientras se actualiza en segundo plano",
        "serveExpiredTTL": "TTL de caducados",
        "serveExpiredTTLDesc": "Validez (segundos) de las entradas caducadas en la caché; 0 = nunca caduca",
        "timeoutMs": "Tiempo de espera (ms)",
        "skipFallback": "Omitir respaldo",
        "finalQuery": "Consulta final",
        "hosts": "Hosts",
        "hostsAdd": "Agregar Host",
        "hostsEmpty": "No hay Hosts definidos",
        "hostsDomain": "Dominio (ej. domain:example.com)",
        "hostsValues": "IP o dominio — escribe y presiona Enter",
        "usePreset": "Usar plantilla",
        "dnsPresetTitle": "Plantillas DNS",
        "dnsPresetFamily": "Familiar",
        "clearAll": "Eliminar todos",
        "clearAllTitle": "¿Eliminar todos los servidores DNS?",
        "clearAllConfirm": "Esto eliminará todos los servidores DNS de la lista. No se puede deshacer.",
        "dnsLeakWarning": "El DNS puede filtrarse por localhost, UDP/TCP sin cifrar, DoH/DoQ en modo local, consultas de respaldo o EDNS client IP. Usa DoH enrutado, fija los resolutores en hosts y desactiva el respaldo cuando la privacidad importe."
      },
      "fakedns": {
        "add": "Agregar DNS Falso",
        "ipPool": "Subred del grupo de IP",
        "poolSize": "Tamaño del grupo"
      },
      "defaultOutbound": "Salida predeterminada",
      "defaultOutboundDesc": "El tráfico que no coincide con ninguna regla de enrutamiento usa esta salida (la primera de la lista)."
    },
    "hosts": {
      "addHost": "Agregar host",
      "editHost": "Editar host",
      "selectInbound": "Selecciona un inbound",
      "selectedCount": "{count} seleccionado(s)",
      "summary": {
        "total": "Total",
        "enabled": "Habilitados",
        "disabled": "Deshabilitados"
      },
      "moveUp": "Subir",
      "moveDown": "Bajar",
      "bulkEnable": "Habilitar",
      "bulkDisable": "Deshabilitar",
      "bulkDelete": "Eliminar",
      "bulkDeleteConfirm": "¿Eliminar {count} host(s) seleccionado(s)?",
      "deleteConfirmTitle": "¿Eliminar el host \"{name}\"?",
      "sections": {
        "basic": "Básico",
        "security": "Seguridad",
        "advanced": "Avanzado",
        "general": "General",
        "clash": "Clash (mihomo)"
      },
      "fields": {
        "remark": "Notas",
        "serverDescription": "Descripción",
        "inbound": "Inbounds",
        "address": "Dirección",
        "port": "Puerto",
        "endpoint": "Punto final",
        "enable": "Habilitar",
        "actions": "Acciones",
        "security": "Seguridad",
        "sni": "SNI",
        "overrideSniFromAddress": "Usar la dirección como SNI",
        "keepSniBlank": "Dejar el SNI en blanco",
        "hostHeader": "Cabecera Host",
        "path": "Ruta",
        "alpn": "ALPN",
        "fingerprint": "Fingerprint",
        "pins": "SHA-256 del cert. fijado",
        "verifyPeerCertByName": "Verificar cert. del par por nombre",
        "allowInsecure": "Permitir inseguro",
        "echConfigList": "Lista de config. ECH",
        "muxParams": "Mux",
        "sockoptParams": "Sockopt",
        "finalMask": "Máscara final",
        "vlessRoute": "Ruta VLESS",
        "mihomoIpVersion": "Versión de IP",
        "mihomoX25519": "Mihomo X25519",
        "shuffleHost": "Barajar host",
        "tags": "Etiquetas",
        "nodeGuids": "Nodos",
        "excludeFromSubTypes": "Excluir de formatos",
        "inheritAddress": "Hereda dirección"
      },
      "hints": {
        "address": "Déjalo en blanco para heredar la dirección propia del inbound.",
        "port": "0 hereda el puerto del inbound.",
        "tags": "No visible para los usuarios finales; se envía solo con la suscripción RAW. Solo letras mayúsculas, dígitos, _ y :.",
        "nodeGuids": "Elige los nodos que se resolvieron desde este host. Solo asignación visual.",
        "serverDescription": "Nota opcional que se muestra bajo las notas.",
        "allowInsecure": "Omitir la verificación del certificado TLS (allowInsecure / skip-cert-verify).",
        "vlessRoute": "Un único valor de ruta VLESS (0-65535) incrustado en el UUID, p. ej. 443. Déjalo en blanco para ninguno.",
        "remark": "Una etiqueta simple para este host. Se muestra como nombre de la configuración solo cuando el inbound no tiene notas propias."
      },
      "remarkVars": {
        "title": "Variables de plantilla",
        "intro": "Haz clic en una variable para añadirla. Se sustituye por cliente al generar la suscripción.",
        "preview": "Vista previa",
        "groups": {
          "client": "Cliente",
          "traffic": "Tráfico",
          "time": "Tiempo y estado",
          "connection": "Conexión"
        },
        "descEMAIL": "Email del cliente",
        "descINBOUND": "Notas del propio inbound (nombre de la configuración)",
        "descHOST": "Notas del host",
        "descID": "UUID del cliente",
        "descSHORT_ID": "Primeros 8 caracteres del UUID",
        "descTELEGRAM_ID": "ID de Telegram del cliente (vacío si no está definido)",
        "descSUB_ID": "ID de suscripción",
        "descCOMMENT": "Comentario del cliente",
        "descTRAFFIC_USED": "Tráfico usado (legible)",
        "descTRAFFIC_LEFT": "Tráfico restante (oculto si es ilimitado)",
        "descTRAFFIC_TOTAL": "Tráfico total (oculto si es ilimitado)",
        "descTRAFFIC_USED_BYTES": "Tráfico usado en bytes",
        "descTRAFFIC_LEFT_BYTES": "Tráfico restante en bytes",
        "descTRAFFIC_TOTAL_BYTES": "Tráfico total en bytes",
        "descUP": "Tráfico de subida",
        "descDOWN": "Tráfico de bajada",
        "descSTATUS": "activo / expirado / deshabilitado / agotado",
        "descSTATUS_EMOJI": "Estado como emoji (✅ ⏳ 🚫)",
        "descDAYS_LEFT": "Días hasta la expiración (oculto si es ilimitado)",
        "descTIME_LEFT": "Tiempo restante (p. ej. 12d 4h 30m)",
        "descUSAGE_PERCENTAGE": "Tráfico usado en porcentaje (oculto si es ilimitado)",
        "descEXPIRE_DATE": "Fecha de expiración (AAAA-MM-DD)",
        "descJALALI_EXPIRE_DATE": "Fecha de expiración en el calendario Jalali (AAAA/MM/DD)",
        "descEXPIRE_UNIX": "Expiración como marca de tiempo Unix (segundos)",
        "descCREATED_UNIX": "Hora de creación como marca de tiempo Unix (segundos)",
        "descRESET_DAYS": "Periodo de reinicio de tráfico en días",
        "descPROTOCOL": "Protocolo del inbound (VLESS, VMess, Trojan, …)",
        "descTRANSPORT": "Red de transporte (tcp, ws, grpc, …)",
        "descSECURITY": "Seguridad del transporte (TLS, REALITY, NONE)"
      },
      "toasts": {
        "list": "Error al cargar los hosts",
        "obtain": "Error al cargar el host",
        "add": "Agregar host",
        "update": "Actualizar host",
        "delete": "Eliminar host",
        "badTag": "Etiqueta no válida",
        "badVlessRoute": "Introduce un único número entre 0 y 65535"
      }
    }
  },
  "tgbot": {
    "keyboardClosed": "❌ Teclado cerrado!",
    "noResult": "❗ ¡Sin resultados!",
    "noQuery": "❌ ¡Consulta no encontrada! ¡Por favor, use el comando nuevamente!",
    "wentWrong": "❌ ¡Algo salió mal!",
    "noIpRecord": "❗ ¡No hay registro de IP!",
    "noInbounds": "❗ ¡No se encontraron entradas!",
    "unlimited": "♾ Ilimitado (Restablecer)",
    "add": "Añadir",
    "month": "Mes",
    "months": "Meses",
    "days": "Días",
    "hours": "Horas",
    "minutes": "Minutos",
    "unknown": "Desconocido",
    "inbounds": "Entradas",
    "clients": "Clientes",
    "offline": "🔴 Sin conexión",
    "online": "🟢 En línea",
    "commands": {
      "unknown": "❗ Comando desconocido",
      "pleaseChoose": "👇 Por favor elige:\r\n",
      "help": "🤖 ¡Bienvenido a este bot! Está diseñado para ofrecerte datos específicos del servidor y te permite hacer modificaciones según sea necesario.\r\n\r\n",
      "start": "👋 Hola <i>{{ .Firstname }}</i>.\r\n",
      "welcome": "🤖 Bienvenido al bot de gestión de <b>{{ .Hostname }}</b>.\r\n",
      "status": "✅ ¡El bot está bien!",
      "usage": "❗ ¡Por favor proporciona un texto para buscar!",
      "getID": "🆔 Tu ID: <code>{{ .ID }}</code>",
      "helpAdminCommands": "Para reiniciar Xray Core:\r\n<code>/restart</code>\r\n\r\nPara buscar un correo electrónico de cliente:\r\n<code>/usage [Correo electrónico]</code>\r\n\r\nPara buscar entradas (con estadísticas de cliente):\r\n<code>/inbound [Observación]</code>\r\n\r\nID de Chat de Telegram:\r\n<code>/id</code>",
      "helpClientCommands": "Para buscar estadísticas, utiliza el siguiente comando:\r\n<code>/usage [Correo electrónico]</code>\r\n\r\nID de Chat de Telegram:\r\n<code>/id</code>",
      "restartUsage": "\r\n\r\n<code>/restart</code>",
      "restartSuccess": "✅ ¡Operación exitosa!",
      "restartFailed": "❗ Error en la operación.\r\n\r\n<code>Error: {{ .Error }}</code>.",
      "xrayNotRunning": "❗ Xray Core no está en ejecución.",
      "startDesc": "Mostrar el menú principal",
      "helpDesc": "Ayuda del bot",
      "statusDesc": "Comprobar el estado del bot",
      "idDesc": "Mostrar tu ID de Telegram",
      "usageDesc": "Ver el uso del cliente: /usage correo",
      "inboundDesc": "Buscar entradas: /inbound nombre (admin)",
      "restartDesc": "Reiniciar el núcleo de Xray (admin)",
      "clearallDesc": "Restablecer el tráfico de todos los clientes (admin)"
    },
    "messages": {
      "cpuThreshold": "El uso de CPU {{ .Percent }}% es mayor que el umbral {{ .Threshold }}%",
      "selectUserFailed": "❌ ¡Error al seleccionar usuario!",
      "userSaved": "✅ Usuario de Telegram guardado.",
      "loginSuccess": "✅ Has iniciado sesión en el panel con éxito.\r\n",
      "loginFailed": "❗️ Falló el inicio de sesión en el panel.\r\n",
      "report": "🕰 Informes programados: {{ .RunTime }}\r\n",
      "datetime": "⏰ Fecha y Hora: {{ .DateTime }}\r\n",
      "hostname": "💻 Host: {{ .Hostname }}\r\n",
      "version": "🚀 Versión de X-UI: {{ .Version }}\r\n",
      "xrayVersion": "📡 Versión de Xray: {{ .XrayVersion }}\r\n",
      "ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
      "ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
      "ip": "🌐 IP: {{ .IP }}\r\n",
      "ips": "🔢 IPs:\r\n{{ .IPs }}\r\n",
      "serverUpTime": "⏳ Tiempo de actividad del servidor: {{ .UpTime }} {{ .Unit }}\r\n",
      "serverLoad": "📈 Carga del servidor: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
      "serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
      "tcpCount": "🔹 TCP: {{ .Count }}\r\n",
      "udpCount": "🔸 UDP: {{ .Count }}\r\n",
      "traffic": "🚦 Tráfico: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
      "xrayStatus": "ℹ️ Estado: {{ .State }}\r\n",
      "username": "👤 Nombre de usuario: {{ .Username }}\r\n",
      "reason": "❗️ Motivo: {{ .Reason }}\r\n",
      "time": "⏰ Hora: {{ .Time }}\r\n",
      "inbound": "📍 Entrada: {{ .Remark }}\r\n",
      "port": "🔌 Puerto: {{ .Port }}\r\n",
      "expire": "📅 Fecha de Vencimiento: {{ .Time }}\r\n",
      "expireIn": "📅 Vence en: {{ .Time }}\r\n",
      "active": "💡 Activo: {{ .Enable }}\r\n",
      "enabled": "🚨 Habilitado: {{ .Enable }}\r\n",
      "online": "🌐 Estado de conexión: {{ .Status }}\r\n",
      "lastOnline": "🔙 Última conexión: {{ .Time }}\r\n",
      "email": "📧 Email: {{ .Email }}\r\n",
      "upload": "🔼 Subida: ↑{{ .Upload }}\r\n",
      "download": "🔽 Descarga: ↓{{ .Download }}\r\n",
      "total": "📊 Total: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
      "TGUser": "👤 Usuario de Telegram: {{ .TelegramID }}\r\n",
      "exhaustedCount": "🚨 Cantidad de Agotados {{ .Type }}:\r\n",
      "onlinesCount": "🌐 Clientes en línea: {{ .Count }}\r\n",
      "disabled": "🛑 Desactivado: {{ .Disabled }}\r\n",
      "depleteSoon": "🔜 Se agotará pronto: {{ .Deplete }}\r\n\r\n",
      "backupTime": "🗄 Hora de la Copia de Seguridad: {{ .Time }}\r\n",
      "refreshedOn": "\r\n📋🔄 Actualizado en: {{ .Time }}\r\n\r\n",
      "yes": "✅ Sí",
      "no": "❌ No",
      "received_email": "📧📥 Correo electrónico actualizado.",
      "received_comment": "💬📥 Comentario actualizado.",
      "email_prompt": "📧 Correo electrónico predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo electrónico.",
      "comment_prompt": "💬 Comentario predeterminado: {{ .ClientComment }}\n\nIntroduce tu comentario.",
      "cancel": "❌ ¡Proceso cancelado! \n\nPuedes /start de nuevo en cualquier momento. 🔄",
      "error_add_client": "⚠️ Error:\n\n {{ .error }}",
      "using_default_value": "Está bien, me quedaré con el valor predeterminado. 😊",
      "incorrect_input": "Tu entrada no es válida.\nLas frases deben ser continuas sin espacios.\nEjemplo correcto: aaaaaa\nEjemplo incorrecto: aaa aaa 🚫",
      "AreYouSure": "¿Estás seguro? 🤔",
      "SuccessResetTraffic": "📧 Correo: {{ .ClientEmail }}\n🏁 Resultado: ✅ Éxito",
      "FailedResetTraffic": "📧 Correo: {{ .ClientEmail }}\n🏁 Resultado: ❌ Fallido \n\n🛠️ Error: [ {{ .ErrorMessage }} ]",
      "FinishProcess": "🔚 Proceso de reinicio de tráfico finalizado para todos los clientes.",
      "eventOutboundDown": "El saliente {{ .Tag }} está CAÍDO",
      "eventOutboundUp": "El saliente {{ .Tag }} está ACTIVO",
      "eventErrorDetail": "Error: {{ .Error }}",
      "eventDelayDetail": "Retardo: {{ .Delay }} ms",
      "eventXrayCrash": "Xray se ha BLOQUEADO",
      "eventXrayCrashError": "Error: {{ .Error }}",
      "eventNodeDown": "El nodo {{ .Name }} está CAÍDO",
      "eventNodeUp": "El nodo {{ .Name }} está ACTIVO",
      "eventLoginFallback": "Inicio de sesión fallido desde {{ .Source }}",
      "memoryThreshold": "Uso de memoria {{ .Percent }}% supera el umbral de {{ .Threshold }}%"
    },
    "buttons": {
      "closeKeyboard": "❌ Cerrar Teclado",
      "cancel": "❌ Cancelar",
      "cancelReset": "❌ Cancelar Reinicio",
      "cancelIpLimit": "❌ Cancelar Límite de IP",
      "confirmResetTraffic": "✅ ¿Confirmar Reinicio de Tráfico?",
      "confirmClearIps": "✅ ¿Confirmar Limpiar IPs?",
      "confirmRemoveTGUser": "✅ ¿Confirmar Eliminar Usuario de Telegram?",
      "confirmToggle": "✅ ¿Confirmar habilitar/deshabilitar usuario?",
      "dbBackup": "Obtener Copia de Seguridad de BD",
      "serverUsage": "Uso del Servidor",
      "getInbounds": "Obtener Entradas",
      "depleteSoon": "Pronto se Agotará",
      "clientUsage": "Obtener Uso",
      "onlines": "Clientes en línea",
      "commands": "Comandos",
      "refresh": "🔄 Actualizar",
      "clearIPs": "❌ Limpiar IPs",
      "removeTGUser": "❌ Eliminar Usuario de Telegram",
      "selectTGUser": "👤 Seleccionar Usuario de Telegram",
      "selectOneTGUser": "👤 Selecciona un usuario de telegram:",
      "resetTraffic": "📈 Reiniciar Tráfico",
      "resetExpire": "📅 Cambiar fecha de Vencimiento",
      "ipLog": "🔢 Registro de IP",
      "ipLimit": "🔢 Límite de IP",
      "setTGUser": "👤 Establecer Usuario de Telegram",
      "toggle": "🔘 Habilitar / Deshabilitar",
      "custom": "🔢 Personalizado",
      "confirmNumber": "✅ Confirmar: {{ .Num }}",
      "confirmNumberAdd": "✅ Confirmar agregando: {{ .Num }}",
      "limitTraffic": "🚧 Límite de tráfico",
      "getBanLogs": "Registros de prohibición",
      "allClients": "Todos los Clientes",
      "addClient": "Añadir cliente",
      "submitDisable": "Enviar como deshabilitado ☑️",
      "submitEnable": "Enviar como habilitado ✅",
      "use_default": "🏷️ Usar por defecto",
      "change_email": "⚙️📧 Email",
      "change_comment": "⚙️💬 Comentario",
      "ResetAllTraffics": "Reiniciar todo el tráfico",
      "SortedTrafficUsageReport": "Informe de uso de tráfico ordenado"
    },
    "answers": {
      "successfulOperation": "✅ ¡Exitosa!",
      "errorOperation": "❗ Error en la Operación.",
      "getInboundsFailed": "❌ Error al obtener las entradas",
      "getClientsFailed": "❌ No se pudo obtener los clientes.",
      "canceled": "❌ {{ .Email }} : Operación cancelada.",
      "clientRefreshSuccess": "✅ {{ .Email }} : Cliente actualizado exitosamente.",
      "IpRefreshSuccess": "✅ {{ .Email }} : IPs actualizadas exitosamente.",
      "TGIdRefreshSuccess": "✅ {{ .Email }} : Usuario de Telegram del cliente actualizado exitosamente.",
      "resetTrafficSuccess": "✅ {{ .Email }} : Tráfico reiniciado exitosamente.",
      "setTrafficLimitSuccess": "✅ {{ .Email }} : Límite de Tráfico guardado exitosamente.",
      "expireResetSuccess": "✅ {{ .Email }} : Días de vencimiento reiniciados exitosamente.",
      "resetIpSuccess": "✅ {{ .Email }} : Límite de IP {{ .Count }} guardado exitosamente.",
      "clearIpSuccess": "✅ {{ .Email }} : IPs limpiadas exitosamente.",
      "getIpLog": "✅ {{ .Email }} : Obtener Registro de IP.",
      "getUserInfo": "✅ {{ .Email }} : Obtener Información de Usuario de Telegram.",
      "removedTGUserSuccess": "✅ {{ .Email }} : Usuario de Telegram eliminado exitosamente.",
      "enableSuccess": "✅ {{ .Email }} : Habilitado exitosamente.",
      "disableSuccess": "✅ {{ .Email }} : Deshabilitado exitosamente.",
      "askToAddUserId": "¡No se encuentra su configuración!\r\nPor favor, pídale a su administrador que use su ChatID de usuario de Telegram en su(s) configuración(es).\r\n\r\nSu ChatID de usuario: <code>{{ .TgUserID }}</code>",
      "chooseClient": "Elige un Cliente para Inbound {{ .Inbound }}",
      "chooseInbound": "Elige un Inbound"
    }
  },
  "email": {
    "labelStatus": "Estado",
    "labelOutbound": "Saliente",
    "labelNode": "Nodo",
    "labelError": "Error",
    "labelDelay": "Retardo",
    "labelUsername": "Usuario",
    "labelIP": "IP",
    "labelReason": "Motivo",
    "labelSource": "Origen",
    "statusCrashed": "BLOQUEADO",
    "statusHigh": "ALTA",
    "statusSuccess": "CORRECTO",
    "statusFailed": "FALLIDO",
    "statusDown": "CAÍDO",
    "statusUp": "ACTIVO"
  }
}
