{
  "_display_name": "Español",

  "app.tab.core": "⚙️ Núcleo",
  "app.tab.servers": "🖥️ Servidores",
  "app.tab.diagnostics": "🔍 Diagnósticos",
  "app.tab.help": "❓ Ayuda",

  "core.status_checking": "Comprobando estado del núcleo...",
  "core.status_error_not_found": "Estado del núcleo ❌ Error: sing-box no encontrado",
  "core.status_restarting": "Estado del núcleo 🔄 Reiniciando...",
  "core.status_running": "Estado del núcleo ✅ En ejecución",
  "core.status_stopped": "Estado del núcleo ⏸️ Detenido",
  "core.button_start": "Iniciar",
  "core.button_stop": "Detener",
  "core.button_exit": "Salir",
  "core.button_restart": "Reiniciar",
  "core.label_config": "Configuración",
  "core.status_checking_config": "Comprobando configuración...",
  "core.status_config_ok": "%s ✅ %s",
  "core.status_config_not_found": "%s ❌ no encontrado",
  "core.status_config_error": "Error de configuración: %v",
  "core.status_parser_starting": "Iniciando...",
  "core.button_update": "🔄 Actualizar",
  "core.button_wizard": "⚙️ Asistente",
  "core.button_download_template": "Descargar plantilla de configuración",
  "core.label_singbox": "Sing-box",
  "core.singbox_help_msg": "sing-box es el binario principal.\n\n",
  "core.singbox_help_look_for": "Buscar: %s\n",
  "core.singbox_help_extract": "Extrae el binario en la carpeta bin.\n\n",
  "core.singbox_help_manual": "Puedes descargarlo con el botón de arriba, o manualmente desde:",
  "core.singbox_status_checking": "Comprobando...",
  "core.singbox_status_not_found": "❌ no encontrado",
  "core.button_download": "Descargar",
  "core.button_download_version": "Descargar v%s",
  "core.button_update_version": "Actualizar v%s",
  "core.dialog_singbox_title": "Sing-box",
  "core.dialog_singbox_close": "Cerrar",
  "core.button_open_bin": "Abrir carpeta bin",
  "core.label_wintun": "Wintun",
  "core.wintun_help_msg": "wintun.dll es necesario para el modo TUN en Windows.\n\n",
  "core.wintun_help_in_archive": "En el archivo descargado, toma wintun.dll \n\n Tu sistema es %s.\n\n ",
  "core.wintun_help_place": "Colócalo en la carpeta bin: bin\n\n",
  "core.wintun_help_manual": "Puedes descargarlo con el botón de arriba, o manualmente desde:",
  "core.wintun_status_checking": "Comprobando...",
  "core.wintun_status_ok": "ok",
  "core.wintun_status_not_found": "❌ no encontrado",
  "core.wintun_status_error": "❌ Error al comprobar wintun.dll",
  "core.dialog_wintun_title": "Wintun",
  "core.dialog_wintun_close": "Cerrar",
  "core.dialog_template_title": "Plantilla de configuración",
  "core.dialog_template_saved": "Plantilla guardada en %s",
  "core.dialog_download_complete_title": "Descarga completada",
  "core.dialog_update_available_title": "Actualización disponible",
  "core.dialog_update_msg": "Hay una nueva versión de la aplicación disponible",
  "core.dialog_update_current": "Versión actual: %s",
  "core.dialog_update_new": "Nueva versión: %s",
  "core.dialog_update_close": "Cerrar",
  "core.button_download_from_github": "Descargar desde GitHub",
  "core.config_not_found_title": "Configuración no encontrada",
  "core.config_not_found_message": "⚠️ ¡Archivo de configuración no encontrado!\n\nEl archivo %s falta en la carpeta bin.\n\nPara comenzar:\n1. descargar Asistente\n2. usar el Asistente para generar un archivo de configuración\n3. presionar Iniciar\n",
  "core.already_running_app_title": "Información",
  "core.already_running_app_message": "La aplicación ya está en ejecución. Usa la instancia existente o ciérrala antes de iniciar una nueva.",
  "core.info_title": "Info",
  "core.already_running": "Sing-Box ya en ejecución (según el estado interno).",
  "core.crash_title": "Crash",
  "core.crash_restarting": "Sing-Box se ha bloqueado, reiniciando... (intento %d/%d)",

  "error.startup": "Error al iniciar sing-box:\n\n%s\n\nPor favor verifica:\n1. config.json es válido\n2. el ejecutable sing-box existe\n3. Revisa los logs para más detalles",
  "error.parser": "El parser falló:\n\n%s\n\nPor favor verifica:\n1. la URL de suscripción es válida\n2. conexión de red\n3. Revisa parser.log para detalles",
  "error.linux_capabilities": "Se requieren capacidades de Linux",
  "error.restart_failed": "Sing-Box no pudo reiniciarse después de %d intentos. Revisa sing-box.log para los detalles.",
  "error.check_updates_failed": "Error al comprobar actualizaciones",
  "error.version_check": "Error al comprobar la versión: %s",

  "core.update_available_title": "Actualización disponible",
  "core.update_available_message": "¡Actualización disponible!\n\nInstalado: %s\nÚltimo: %s\n\nPuedes descargar la actualización desde la pestaña Core.",
  "core.no_updates_title": "Sin actualizaciones",
  "core.latest_version_message": "Estás usando la última versión.\n\nInstalado: %s\nÚltimo: %s",

  "tray.open": "Abrir",
  "tray.quit": "Salir",
  "tray.start_vpn": "Iniciar VPN",
  "tray.stop_vpn": "Detener VPN",
  "tray.select_proxy": "Seleccionar proxy",
  "tray.no_proxies_available": "No hay proxies disponibles",
  "tray.hide_app_from_dock": "Ocultar la app del Dock",

  "help.open_config_folder": "⚙️ Abrir carpeta de configuración",
  "help.kill_singbox": "🛑 Matar Sing-Box",
  "help.kill_title": "Matar",
  "help.kill_result": "Sing-Box terminado si estaba en ejecución.",
  "help.version_label": "📦 Versión: %s",
  "help.checking_updates": "Comprobando actualizaciones...",
  "help.unable_to_check_updates": "No se puede comprobar actualizaciones",
  "help.update_available_format": "🆕 Actualización disponible: %s\nActual: %s",
  "help.dev_build_format": "✅ Estás usando una build de desarrollo\nActual: %s\nÚltima release: %s",
  "help.latest_version_format": "✅ Estás usando la última versión\nActual: %s",
  "help.telegram_link": "💬 Canal de Telegram",
  "help.github_link": "🐙 Repositorio GitHub",
  "help.language_label": "Idioma:",
  "help.language_changed": "Idioma cambiado. Reinicia la aplicación para aplicar completamente.",
  "help.download_locales": "📥 Descargar traducciones",
  "help.download_locales_btn": "⬇",
  "help.download_locales_success": "Traducciones descargadas (%d). Reinicia para ver los nuevos idiomas.",
  "help.download_locales_failed": "No se pudieron descargar las traducciones",
  "help.downloading_locales": "Descargando...",
  "help.downloading_locales_btn": "🔄",

  "diag.stun_button": "STUN [UDP]",
  "diag.stun_check_title": "Comprobación STUN",
  "diag.stun_checking": "Comprobando, por favor espere...",
  "diag.external_ip_format": "Tu IP externa: %s\n%s",
  "diag.copy_ip": "Copiar IP",
  "diag.copied_title": "Copiado",
  "diag.ip_copied": "Dirección IP copiada al portapapeles.",
  "diag.stun_result_title": "Resultado de STUN",
  "diag.close": "Cerrar",
  "diag.stun_server_label": "Servidor STUN (host:puerto):",
  "diag.use_system_socks5": "Usar proxy SOCKS5 del sistema",
  "diag.stun_settings": "Ajustes STUN",
  "diag.save": "Guardar",
  "diag.cancel": "Cancelar",
  "diag.open_log_window": "Abrir ventana de logs",
  "diag.open_logs_folder": "Abrir carpeta de logs",
  "diag.ip_check_services": "Servicios de comprobación de IP:",

  "log.window_title": "Logs",
  "log.level_label": "Nivel:",
  "log.level_error": "Error",
  "log.level_warn": "Aviso",
  "log.level_info": "Info",
  "log.level_verbose": "Verbose",
  "log.level_trace": "Trace",
  "log.refresh": "Actualizar",
  "log.internal_tab": "Interno",
  "log.core_tab": "Core",
  "log.api_tab": "API",
  "log.file_not_available": "Archivo de log no disponible.",

  "dialog.download_failed": "Descarga fallida. Consulta el log para más detalles.",
  "dialog.download_failed_manual_hint": "Por favor descarga el archivo manualmente y colócalo en la carpeta abajo.",
  "dialog.open_download_page": "Abrir página de descarga",
  "dialog.open_folder": "Abrir carpeta",
  "dialog.close": "Cerrar",
  "dialog.copy": "Copiar",
  "dialog.ok": "OK",
  "dialog.kill_process": "Matar proceso",
  "dialog.close_warning": "Cerrar esta advertencia",
  "dialog.process_already_running": "Sing-Box parece estar ya en ejecución.\n¿Deseas matar el proceso existente?",
  "dialog.warning": "Advertencia",
  "dialog.error_prefix": "❌ ",

  "servers.status_not_checked": "Estado: No comprobado",
  "servers.status_click_load": "Haz clic en 'Cargar proxies'",
  "servers.status_loading": "Cargando proxies para '%s'...",
  "servers.status_loaded": "Proxies cargados para '%s'. Activo: %s",
  "servers.status_clash_api_disabled": "API Clash deshabilitada debido a error de configuración",
  "servers.status_clash_api_off_error": "❌ Clash API Apagada (Error)",
  "servers.status_clash_api_off_config": "❌ Clash API Apagada (Error de configuración)",
  "servers.status_clash_api_on": "✅ Clash API Activa",
  "servers.status_not_running": "Estado: No en ejecución",
  "servers.status_singbox_stopped": "Sing-box está detenido.",
  "servers.error_api_not_initialized": "El servicio API no está inicializado",
  "servers.error_api_disabled": "La API está deshabilitada: error de configuración",
  "servers.status_delay_error": "Error de retardo: %s",
  "servers.status_delay_format": "Retardo: %d ms para %s",
  "servers.status_selected": "Seleccionado: %s",
  "servers.status_selected_multi": "Seleccionados: %d proxies",
  "servers.status_selected_none": "Ningún proxy seleccionado",
  "servers.status_switch_error": "Error de conmutación: %s",
  "servers.status_switched": "'%s' cambiado a %s",
  "servers.status_sorted_name_az": "Ordenado por nombre (A-Z)",
  "servers.status_sorted_name_za": "Ordenado por nombre (Z-A)",
  "servers.status_sorted_delay_fast": "Ordenado por retardo (más rápido primero)",
  "servers.status_sorted_delay_slow": "Ordenado por retardo (más lento primero)",
  "servers.status_no_proxies": "No hay proxies para hacer ping",
  "servers.status_list_counts": "Total / disp.: %d / %d",
  "servers.status_pinging": "Haciendo ping a %d proxies...",
  "servers.status_pinging_progress": "Ping %d/%d...",
  "servers.status_ping_completed": "Prueba de ping completada para %d proxies",
  "servers.status_selected_group": "Grupo seleccionado '%s'. Último proxy usado: %s",
  "servers.status_selected_group_only": "Grupo seleccionado '%s'.",
  "servers.status_ping_url_updated": "URL de prueba de ping actualizada: %s",
  "servers.label_proxy_name": "Nombre del proxy",
  "servers.button_ping": "Ping",
  "servers.button_test": "test",
  "servers.tooltip_hide_ping_errors": "Ocultar servidores con error de ping",
  "servers.tooltip_show_ping_errors": "Mostrar todos los servidores",
  "servers.tooltip_sort_by_name": "Ordenar por nombre (A–Z / Z–A)",
  "servers.tooltip_sort_by_delay": "Ordenar por latencia de ping (más rápido / más lento primero)",
  "servers.tooltip_ping_all": "Ping a todos los proxies del grupo",
  "servers.tooltip_ping_settings": "URL del test de ping y peticiones en paralelo",
  "servers.button_export": "Exportar",
  "servers.tooltip_export_uris": "All visible rows, current list order, one URI per line (hidden ping errors omitted; excludes selector, urltest, direct).",
  "servers.tooltip_export_uris_selected": "Selected proxies only (multiple selection), list order (same URI rules as default copy).",
  "servers.status_export_nothing_visible": "Nothing to export (no rows in current view).",
  "servers.status_export_nothing_selected": "Nothing to export (no selected rows in current view).",
  "servers.status_export_uris_building": "Preparing export...",
  "servers.status_export_uris_done": "Clipboard: %d lines (one URI per line)",
  "servers.status_export_uris_none": "No share links could be built for this list.",
  "servers.error_export_no_config": "Config path is not set.",
  "servers.label_sort_by_name": "A…Z",
  "servers.placeholder_select_group": "Seleccionar grupo de selector",
  "servers.label_selector_group": "Grupo de selectores:",
  "servers.dialog_ping_settings_title": "Ajustes de test de ping",
  "servers.ping_label_url": "URL de test de ping",
  "servers.ping_label_custom_url": "URL personalizada:",
  "servers.ping_label_parallel": "Solicitudes paralelas (ping a todos):",
  "servers.ping_placeholder_url": "https://example.com/generate_204",
  "servers.ping_option_custom": "Personalizada",
  "servers.ping_button_save": "Guardar",
  "servers.ping_button_cancel": "Cancelar",
  "servers.dialog_selector_active_title": "Selector → Salida activa",
  "servers.dialog_selector_close": "Cerrar",
  "servers.ping_button_error": "Error",
  "servers.ping_format_ms": "%d ms",
  "servers.selector_no_active": "%s → (sin salida activa)",
  "servers.selector_error": "%s → error: %v",
  "servers.selector_active": "%s → %s",

  "wizard.window_title": "Asistente de configuración",
  "wizard.tab_sources": "Fuentes",
  "wizard.tab_outbounds": "Salidas",
  "wizard.tab_rules": "Reglas",
  "wizard.tab_preview": "Vista previa",
  "wizard.button_read": "Leer",
  "wizard.button_save_as": "Guardar como",
  "wizard.button_close": "Cerrar",
  "wizard.button_prev": "Ant",
  "wizard.button_next": "Sig",
  "wizard.button_save": "Guardar",
  "wizard.dialog_confirmation": "Confirmación",
  "wizard.dialog_unsaved_changes": "Los cambios actuales se perderán. ¿Guardar el estado actual?",
  "wizard.dialog_save_before_close": "¿Guardar cambios antes de cerrar?",
  "wizard.dialog_discard": "Descartar",
  "wizard.dialog_cancel": "Cancelar",
  "wizard.shared.button_edit": "Editar",
  "wizard.shared.button_del": "Del",
  "wizard.error_load_config": "Fallo al cargar la configuración existente",
  "wizard.error_save_state": "Fallo al guardar el estado",
  "wizard.error_load_state": "Fallo al cargar el estado",
  "wizard.error_restore_state": "Fallo al restaurar el estado",
  "wizard.error_template_failed": "Fallo al cargar la plantilla de configuración",
  "wizard.error_template_missing": "Plantilla de configuración faltante",

  "wizard.source.label_url": "URL de suscripción o enlaces directos:",
  "wizard.source.placeholder_url": "https://tu-url-de-suscripción-aquí",
  "wizard.source.hint": "Soporta URLs de suscripción (http/https) o enlaces directos (vless://, vmess://, trojan://, ss://, hysteria2://, ssh://). Para múltiples enlaces, usa una nueva línea por enlace.",
  "wizard.source.button_add": "Añadir",
  "wizard.source.button_get_free": "¡Obtener VPN gratis!",
  "wizard.source.label_sources": "Fuentes",
  "wizard.source.no_sources": "No hay fuentes definidas en ParserConfig.",
  "wizard.source.connections_n": "Conexiones %d",
  "wizard.source.source_n": "Fuente %d",
  "wizard.source.placeholder_prefix": "prefijo",
  "wizard.source.button_view": "Ver",
  "wizard.source.button_del": "Del",
  "wizard.source.dialog_copied_title": "Copiado",
  "wizard.source.dialog_copied_message": "Fuente copiada al portapapeles.",
  "wizard.source.preview_click_refresh": "Haz clic en Actualizar para cargar servidores de todas las fuentes.",
  "wizard.source.preview_no_sources": "No hay fuentes. Añade URLs y haz clic en Actualizar.",
  "wizard.source.preview_loading": "Cargando...",
  "wizard.source.preview_error": "Error: %s",
  "wizard.source.preview_servers": "%d servidor(es) de %d fuente(s)",
  "wizard.source.preview_errors": "  ⚠️ %d error(es)",
  "wizard.source.button_refresh": "Actualizar",
  "wizard.source.view_title": "Servidores — %s",
  "wizard.source.view_close": "Cerrar",
  "wizard.source.view_no_servers": "No se encontraron servidores.",
  "wizard.source.view_server_count": "%d servidor(es)",

  "wizard.outbounds.placeholder": "Introduce el JSON ParserConfig aquí...",
  "wizard.outbounds.button_docs": "📖 Documentación",
  "wizard.outbounds.label": "ParserConfig:",
  "wizard.outbounds.error_serialize": "Fallo al serializar ParserConfig",
  "wizard.outbounds.error_open_docs": "falló al abrir la documentación",
  "wizard.outbounds.error_invalid_json": "JSON ParserConfig inválido",
  "wizard.outbounds.error_invalid_config": "ParserConfig inválido",

  "wizard.rules.button_srs_download": "⬇ srs",
  "wizard.rules.button_srs_loading": "🔄 srs",
  "wizard.rules.button_srs_done": "✔️ srs",
  "wizard.rules.template_not_found": "Archivo de plantilla bin/%s no encontrado.",
  "wizard.rules.template_create_hint": "Crea el archivo de plantilla para habilitar esta pestaña.",
  "wizard.rules.no_selectable_rules": "No hay reglas seleccionables definidas en la plantilla.",
  "wizard.rules.label_outbound": "Salida:",
  "wizard.rules.button_info": "?",
  "wizard.rules.button_edit": "✏️",
  "wizard.rules.button_delete": "Delete rule",
  "wizard.rules.dialog_delete_unnamed": "(unnamed rule)",
  "wizard.rules.dialog_delete_confirm": "Delete custom rule \"%s\"?",
  "wizard.rules.button_add_rule": "➕ Añadir regla",
  "wizard.rules.label_final_outbound": "Salida final:",
  "wizard.rules.checkbox_tun": "TUN",
  "wizard.rules.tun_help": "Activar TUN requerirá ingresar tu contraseña al iniciar o detener el VPN.",
  "wizard.rules.label_selectable": "Reglas seleccionables",
  "wizard.rules.error_srs_failed": "Fallo al descargar el conjunto de reglas (SRS)",

  "wizard.preview.placeholder": "La vista previa aparecerá aquí",
  "wizard.preview.status_click_show": "Haz clic en 'Mostrar vista previa' para generar la vista previa (esto puede tardar para configuraciones grandes)",
  "wizard.preview.button_show": "Mostrar vista previa",
  "wizard.preview.label": "Vista previa",
  "wizard.preview.loading_large": "Cargando vista previa grande...",
  "wizard.preview.status_loading_large": "⏳ Cargando vista previa grande...",
  "wizard.preview.status_parsing": "⏳ Parseando suscripciones y generando salidas...",
  "wizard.preview.text_parsing": "Parseando configuración... Por favor espere.",
  "wizard.preview.text_building": "Construyendo vista previa...",
  "wizard.preview.status_building": "⏳ Construyendo la configuración de vista previa...",
  "wizard.preview.status_parsing_config": "⏳ Parseando ParserConfig...",
  "wizard.preview.error": "Error de vista previa: %v",
  "wizard.preview.status_error": "❌ Error: %v",
  "wizard.preview.status_ready": "✅ Vista previa lista",

  "wizard.save.error_config_empty": "ParserConfig está vacío",
  "wizard.save.error_config_invalid": "ParserConfig inválido",
  "wizard.save.error_no_sources": "Agrega al menos una fuente: usa la pestaña Fuentes (Añadir) o agrega proxies en ParserConfig en la pestaña Salidas.",
  "wizard.save.dialog_saving": "Guardando",
  "wizard.save.dialog_in_progress": "Ya hay una operación de guardado en progreso... Por favor espera.",
  "wizard.save.status_waiting": "Esperando parseo...",
  "wizard.save.status_parsing": "Parseando suscripciones...",
  "wizard.save.status_building": "Construyendo configuración...",
  "wizard.save.status_preparing": "Preparando...",
  "wizard.save.status_validating": "Validando...",
  "wizard.save.status_saving_state": "Guardando estado...",
  "wizard.save.status_done": "Hecho",
  "wizard.save.button_copy": "Copiar config",
  "wizard.save.dialog_validation_failed": "Validación fallida",
  "wizard.save.dialog_copied_title": "Copiado",
  "wizard.save.dialog_copied_message": "Config copiada al portapapeles.",
  "wizard.save.dialog_success_message": "Config escrita en %s\n\n✅ Validación: Aprobada",
  "wizard.save.dialog_success_title": "Config guardada",
  "wizard.save.error_parse_failed": "Fallo al parsear suscripciones",
  "wizard.save.error_controller": "controlador no disponible",

  "wizard.add_rule.title_add": "Añadir regla",
  "wizard.add_rule.title_edit": "Editar regla",
  "wizard.add_rule.placeholder_name": "Nombre de la regla",
  "wizard.add_rule.placeholder_ip": "Introduce direcciones IP (formato CIDR)\nej: 192.168.1.0/24",
  "wizard.add_rule.placeholder_url": "Introduce dominios o URLs (uno por línea)\nej: example.com",
  "wizard.add_rule.label_processes": "Procesos (selecciona uno o más via popup):",
  "wizard.add_rule.button_select_processes": "Seleccionar procesos...",
  "wizard.add_rule.check_match_by_path": "Coincidir por ruta",
  "wizard.add_rule.radio_simple": "Simple",
  "wizard.add_rule.radio_regex": "Regex",
  "wizard.add_rule.placeholder_path_simple": "Uno por línea. Usa * como comodín (ej: */steam/* o *\\Steam\\*).",
  "wizard.add_rule.placeholder_path_regex": "Uno por línea. Regex completo tal cual (no /regex/i). Ej: ^C:\\\\Games\\\\.* o .*steam.*",
  "wizard.add_rule.label_path_patterns": "Patrones de ruta (uno por línea):",
  "wizard.add_rule.placeholder_custom": "JSON personalizado (ej: {})",
  "wizard.add_rule.label_custom_json": "JSON personalizado:",
  "wizard.add_rule.placeholder_srs_urls": "URLs SRS (uno por línea)\nej: https://raw.githubusercontent.com/.../file.srs",
  "wizard.add_rule.label_srs_urls": "URLs SRS (uno por línea):",
  "wizard.add_rule.placeholder_raw": "{\"ip_cidr\": [], \"outbound\": \"proxy-out\"}",
  "wizard.add_rule.type_ip": "Direcciones IP (CIDR)",
  "wizard.add_rule.type_domain": "Dominios/URLs",
  "wizard.add_rule.type_process": "Procesos",
  "wizard.add_rule.type_srs": "SRS",
  "wizard.add_rule.type_custom": "JSON personalizado",
  "wizard.add_rule.domain_exact": "Dominios exactos",
  "wizard.add_rule.domain_suffix": "Sufijo",
  "wizard.add_rule.domain_keyword": "Palabra clave",
  "wizard.add_rule.domain_regex": "Regex",
  "wizard.add_rule.label_ip": "Direcciones IP (una por línea, formato CIDR):",
  "wizard.add_rule.label_domains": "Dominios (uno por línea):",
  "wizard.add_rule.label_suffixes": "Sufijos de dominio (uno por línea):",
  "wizard.add_rule.label_keywords": "Palabras clave de dominio (uno por línea):",
  "wizard.add_rule.label_domain_regex": "Regex de dominio:",
  "wizard.add_rule.placeholder_domain_regex": "Ej: ^.*\\.google\\.com$ o .*\\.(google|youtube)\\.com$ (regex completo, sin /)",
  "wizard.add_rule.label_outbound": "Salida:",
  "wizard.add_rule.button_add": "Añadir",
  "wizard.add_rule.button_save": "Guardar",
  "wizard.add_rule.button_cancel": "Cancelar",
  "wizard.add_rule.button_remove": "−",
  "wizard.add_rule.window_select_processes": "Seleccionar procesos",
  "wizard.add_rule.button_add_process": "+ Añadir",
  "wizard.add_rule.button_refresh": "Actualizar",
  "wizard.add_rule.button_close": "Cerrar",
  "wizard.add_rule.label_name": "Nombre de la regla:",
  "wizard.add_rule.label_type": "Tipo de regla:",
  "wizard.add_rule.tab_form": "Formulario",
  "wizard.add_rule.tab_raw": "Bruto",
  "wizard.add_rule.error_name_required": "El nombre de la regla es obligatorio",
  "wizard.add_rule.error_raw_empty": "El JSON bruto está vacío",
  "wizard.add_rule.error_must_be_object": "la regla debe ser un objeto JSON",
  "wizard.add_rule.error_must_have_outbound": "la regla debe contener \"outbound\" o \"action\"",
  "wizard.add_rule.dialog_not_recognized_title": "Regla no reconocida",
  "wizard.add_rule.dialog_not_recognized_msg": "No se pudo reconocer la regla, el formulario no puede cargarse; permanece en Bruto.",
  "wizard.add_rule.srs_hint": "Recomendamos buscar conjuntos de reglas (SRS) adecuados en el proyecto:",
  "wizard.add_rule.srs_dialog_title": "Conjuntos de reglas SRS",
  "wizard.add_rule.srs_dialog_close": "Cerrar",
  "wizard.add_rule.button_open": "Abrir",
  "wizard.add_rule.error_path_required": "introduce al menos un patrón de ruta",
  "wizard.add_rule.error_srs_required": "introduce al menos una URL SRS",
  "wizard.add_rule.error_srs_valid": "introduce al menos una URL SRS válida",
  "wizard.add_rule.error_custom_empty": "El JSON personalizado está vacío",
  "wizard.add_rule.error_custom_object": "El JSON personalizado debe ser un objeto",

  "wizard.save_state.title": "Guardar estado",
  "wizard.save_state.placeholder_id": "Introduce el ID de estado (a-z, A-Z, 0-9, -, _)",
  "wizard.save_state.placeholder_comment": "Comentario (opcional)",
  "wizard.save_state.warning_exists": "Existe un estado con este ID. Será sobrescrito.",
  "wizard.save_state.label_id": "ID de estado:",
  "wizard.save_state.label_comment": "Comentario:",
  "wizard.save_state.button_save": "Guardar",
  "wizard.save_state.button_cancel": "Cancelar",
  "wizard.save_state.error_empty": "El ID no puede estar vacío",

  "wizard.load_state.title": "Cargar estado",
  "wizard.load_state.error_load_list": "Fallo al cargar la lista de estados",
  "wizard.load_state.suffix_current": " (Actual)",
  "wizard.load_state.button_load": "Cargar",
  "wizard.load_state.button_new": "Nuevo",
  "wizard.load_state.button_delete": "Eliminar",
  "wizard.load_state.button_cancel": "Cancelar",
  "wizard.load_state.error_delete_current": "No se puede eliminar el estado actual (state.json)",
  "wizard.load_state.dialog_delete_title": "Eliminar estado",
  "wizard.load_state.dialog_delete_confirm": "¿Eliminar el estado '%s'?",
  "wizard.load_state.error_delete": "Fallo al eliminar el estado",

  "wizard.get_free.loading_title": "Cargando",
  "wizard.get_free.loading_msg": "Descargando get_free.json...",
  "wizard.get_free.error_occurred": "Ocurrió un error: %v",
  "wizard.get_free.error_download": "Fallo al descargar get_free.json:\n\nComprueba tu conexión a internet y vuelve a intentarlo.",
  "wizard.get_free.error_load": "Fallo al cargar get_free.json:\n\nComprueba el archivo o intenta descargarlo de nuevo.",
  "wizard.get_free.error_data_not_loaded": "Error: los datos no se cargaron",
  "wizard.get_free.error_process": "Fallo al procesar get_free.json",
  "wizard.get_free.button_apply": "Aplicar configuración",
  "wizard.get_free.dialog_apply_title": "Aplicar configuración",
  "wizard.get_free.dialog_apply_confirm": "Aplicar esta configuración reemplazará tus fuentes y reglas actuales. ¿Continuar?",
  "wizard.get_free.error_apply": "Fallo al aplicar la configuración",
  "wizard.get_free.dialog_success_title": "Éxito",
  "wizard.get_free.dialog_success_msg": "¡La configuración desde get_free.json se ha aplicado con éxito!",
  "wizard.get_free.dialog_title": "Obtener VPN gratis",
  "wizard.get_free.button_close": "Cerrar",

  "wizard.outbound.title_edit": "Editar salida",
  "wizard.outbound.title_add": "Añadir salida",
  "wizard.outbound.placeholder_tag": "ej. proxy-out",
  "wizard.outbound.type_manual": "manual (selector)",
  "wizard.outbound.type_auto": "auto (urltest)",
  "wizard.outbound.placeholder_comment": "Comentario opcional",
  "wizard.outbound.scope_all": "Para todos",
  "wizard.outbound.scope_source": "Para la fuente: ",
  "wizard.outbound.label_source": "Fuente ",
  "wizard.outbound.label_tag": "tag",
  "wizard.outbound.placeholder_filter": "ej. /🇳🇱/i o !/(🇷🇺)/i",
  "wizard.outbound.placeholder_preferred": "ej. /🇳🇱/i",
  "wizard.outbound.label_filters": "Filtros (clave y valor; use !/regex/i para negación)",
  "wizard.outbound.label_preferred": "Por defecto preferido (filtro para el nodo predeterminado)",
  "wizard.outbound.label_add_outbounds": "Añadir salidas al inicio (direct-out, reject, otros)",
  "wizard.outbound.label_raw_json": "JSON bruto de la salida",
  "wizard.outbound.button_docs": "📖 Documentación",
  "wizard.outbound.label_scope": "Alcance",
  "wizard.outbound.label_tag_field": "Tag",
  "wizard.outbound.label_type": "Tipo",
  "wizard.outbound.label_comment": "Comentario",
  "wizard.outbound.preview_switch": "Cambia a Vista previa para ver nodos para esta salida.",
  "wizard.outbound.preview_no_presenter": "La vista previa no está disponible en este contexto (sin presentador).",
  "wizard.outbound.preview_model_nil": "Vista previa no disponible: modelo del asistente nulo.",
  "wizard.outbound.preview_invalid_json": "Fallo al construir la vista previa: JSON de salida inválido. Cambia a la pestaña 'Bruto' y corrige el JSON primero.",
  "wizard.outbound.preview_cache_failed": "Fallo al construir la caché de vista previa: %v",
  "wizard.outbound.preview_no_nodes": "No hay nodos disponibles para vista previa. Configura las fuentes e inténtalo de nuevo.",
  "wizard.outbound.preview_unknown_source": "Fuente desconocida",
  "wizard.outbound.preview_status": "%d nodo(s) total, %d coinciden con los filtros",
  "wizard.outbound.preview_default": ", predeterminado: %s",
  "wizard.outbound.preview_also_includes": " | También incluye: %s",
  "wizard.outbound.preview_source_errors": " | ⚠️ %d error(es) de fuente",
  "wizard.outbound.tab_settings": "Ajustes",
  "wizard.outbound.tab_raw": "Bruto",
  "wizard.outbound.tab_preview": "Vista previa",
  "wizard.outbound.button_cancel": "Cancelar",
  "wizard.outbound.button_save": "Guardar",
  "wizard.outbound.error_config": "ParserConfig no disponible",
  "wizard.outbound.error_invalid_json": "JSON inválido",
  "wizard.outbound.error_tag_required": "se requiere tag",
  "wizard.outbound.error_open_docs": "falló al abrir la documentación",
  "wizard.outbound.configurator_label": "Salidas:",
  "wizard.outbound.button_add": "Añadir"
}
