{
  "Language": {
    "followSystem": "Seguir el sistema",
    "english": "Inglés",
    "simplifiedChinese": "Chino simplificado",
    "traditionalChinese": "Chino tradicional",
    "japanese": "Japonés",
    "korean": "Coreano",
    "spanish": "Español",
    "german": "Alemán",
    "french": "Francés",
    "portuguese": "Portugués",
    "arabic": "Árabe"
  },
  "GitCredentialDialog": {
    "title": "Autenticación requerida",
    "description": "El servidor remoto requiere credenciales. Introduce tu nombre de usuario y contraseña (o token de acceso personal).",
    "username": "Nombre de usuario",
    "usernamePlaceholder": "Usuario o correo electrónico",
    "password": "Contraseña / Token",
    "passwordPlaceholder": "Contraseña o token de acceso personal",
    "passwordHint": "Introduce el nombre de usuario y contraseña del servidor.",
    "cancel": "Cancelar",
    "authenticate": "Autenticar",
    "authenticating": "Autenticando...",
    "invalidCredentials": "Credenciales inválidas. Inténtalo de nuevo.",
    "saveCredentials": "Guardar credenciales para futuras operaciones",
    "githubTitle": "Autenticación de GitHub",
    "githubDescription": "Introduce un token de acceso personal para conectarte a GitHub. El token se validará y guardará automáticamente.",
    "githubToken": "Token de acceso personal",
    "githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
    "githubTokenHint": "Genera un token en GitHub → Settings → Developer settings → Personal access tokens.",
    "githubAuthenticate": "Validar y conectar",
    "generateToken": "Generar token"
  },
  "SettingsShell": {
    "title": "Configuración",
    "preferences": "Preferencias",
    "nav": {
      "general": "General",
      "appearance": "Apariencia",
      "agents": "Agentes",
      "mcp": "MCP",
      "skills": "Skills",
      "shortcuts": "Atajos",
      "version_control": "Control de versiones",
      "system": "Sistema",
      "chat_channels": "Canales de chat",
      "web_service": "Servicio Web",
      "model_providers": "Proveedores de Modelos",
      "experts": "Expertos",
      "quick_messages": "Mensajes rápidos"
    }
  },
  "AppearanceSettings": {
    "sectionTitle": "Apariencia del tema",
    "sectionDescription": "Elige claro, oscuro o seguir el sistema. La configuración se guarda automáticamente.",
    "themeMode": "Modo de tema",
    "placeholder": "Selecciona el modo de tema",
    "system": "Seguir el sistema",
    "light": "Claro",
    "dark": "Oscuro",
    "currentTheme": "Tema efectivo actual: {theme}",
    "resolvedTheme": {
      "light": "Claro",
      "dark": "Oscuro",
      "unknown": "--"
    },
    "themeColor": {
      "sectionTitle": "Color del tema",
      "sectionDescription": "Elige una paleta de colores para acentos, botones y resaltados.",
      "current": "Color actual: {color}",
      "options": {
        "neutral": "Neutral",
        "zinc": "Zinc",
        "slate": "Slate",
        "stone": "Stone",
        "gray": "Gray",
        "red": "Red",
        "rose": "Rose",
        "orange": "Orange",
        "green": "Green",
        "blue": "Blue",
        "yellow": "Yellow",
        "violet": "Violet"
      }
    },
    "zoomLevel": {
      "sectionTitle": "Zoom de ventana",
      "sectionDescription": "Escala toda la interfaz. Se aplica al instante y se guarda por dispositivo.",
      "placeholder": "Selecciona el nivel de zoom",
      "default": "Predeterminado",
      "current": "Zoom actual: {zoom}%"
    },
    "fonts": {
      "sectionTitle": "Fuentes",
      "sectionDescription": "Elige las fuentes para la interfaz, el editor de código y el terminal. Las fuentes incluidas se cargan cuando se necesitan; selecciona «Personalizada…» para usar cualquier fuente instalada en tu sistema.",
      "interface": "Interfaz",
      "editor": "Editor",
      "terminal": "Terminal",
      "groupSans": "Sans-serif",
      "groupMono": "Monoespaciada",
      "custom": "Personalizada…",
      "customPlaceholder": "Nombre de la fuente, p. ej. Fira Code",
      "fontSize": "Tamaño de fuente",
      "ligatures": "Activar ligaduras",
      "ligaturesUnavailable": "Esta fuente no tiene ligaduras",
      "terminalLigaturesHint": "Las ligaduras del terminal solo se aplican a las fuentes de programación incluidas.",
      "preview": "Vista previa"
    }
  },
  "SystemSettings": {
    "loading": "Cargando...",
    "sectionTitle": "Administración del sistema",
    "sectionDescription": "Administra el proxy de red, las actualizaciones de la app y las preferencias de idioma.",
    "proxyTitle": "Proxy de red",
    "proxyDescription": "Cuando está activado, las solicitudes de red posteriores usarán este proxy preferentemente (incluyendo chat ACP, instalación de agentes y operaciones remotas de Git).",
    "loadFailed": "Error al cargar: {message}",
    "enableProxy": "Activar proxy del sistema",
    "proxyAddress": "Dirección del proxy",
    "proxyHint": "Compatible con http(s)/socks5, ejemplo: {example}. Solo funciona cuando el proxy del sistema está activado.",
    "save": "Guardar",
    "saving": "Guardando...",
    "proxyRequired": "Se requiere URL del proxy cuando el proxy está activado",
    "saveSuccess": "La configuración del proxy del sistema se guardó",
    "saveFailed": "Error al guardar: {message}",
    "languageTitle": "Idioma",
    "languageDescription": "Configura el idioma de la app. Al seguir el idioma del sistema, los no compatibles vuelven a inglés.",
    "appLanguage": "Idioma de la app",
    "languageSaveSuccess": "La configuración de idioma se guardó",
    "languageSaveFailed": "No se pudo guardar la configuración de idioma: {message}",
    "updateTitle": "Actualización de la app",
    "versionTitle": "Actualización de software",
    "updateDescription": "Comprueba versiones más nuevas en la fuente de versiones configurada e instálalas directamente cuando estén disponibles.",
    "currentVersion": "Versión actual",
    "upgradableVersion": "Última versión",
    "none": "Ninguna",
    "lastChecked": "Última comprobación: {time}",
    "updateError": "Error de actualización: {message}",
    "checking": "Comprobando...",
    "checkUpdate": "Buscar actualizaciones",
    "updating": "Instalando...",
    "downloading": "Descargando...",
    "upgradeTo": "Actualizar a v{version}",
    "viewRelease": "Ver lanzamiento v{version}",
    "foundUpdate": "Nueva versión v{version} encontrada",
    "alreadyLatest": "Ya tienes la versión más reciente",
    "checkUpdateFailed": "No se pudo buscar actualizaciones: {message}",
    "installSuccess": "Actualización instalada. Reiniciando la app.",
    "installFailed": "La actualización falló: {message}",
    "upgradeSuccess": "Actualización completada. Recargando...",
    "restartTimeout": "El servidor no volvió a tiempo. Revisa los registros del contenedor o del servicio.",
    "restartingIn": "Reiniciando en {seconds} s...",
    "waitingForServer": "Esperando a que el servidor vuelva...",
    "restartToUpdate": "Reiniciar para actualizar",
    "updateReadyHint": "Actualización descargada: reinicia para aplicarla.",
    "restarting": "Reiniciando...",
    "dockerUpgradeHint": "Esto actualiza el contenedor en ejecución ahora. Se pierde si se recrea el contenedor: para conservarlo, descarga o crea una imagen con la nueva versión y recrea el contenedor.",
    "upgradeRolledBack": "La actualización falló; el servidor volvió a la versión anterior.",
    "serverUnreachable": "No se pudo conectar con el servidor para iniciar la actualización. Comprueba que esté en ejecución e inténtalo de nuevo.",
    "rollbackButton": "Revertir",
    "rollingBack": "Revirtiendo...",
    "rollbackDescription": "Restaura la versión instalada antes de la última actualización.",
    "rollbackConfirmTitle": "¿Revertir a la versión anterior?",
    "rollbackConfirmDescription": "El servidor se reiniciará con la versión instalada antes de la última actualización. Una versión más reciente seguirá disponible para instalar de nuevo.",
    "rollbackConfirm": "Revertir",
    "rollbackCancel": "Cancelar",
    "rollbackSuccess": "Se revirtió a la versión anterior. Recargando...",
    "rollbackFailed": "Error al revertir. Revisa los registros del servidor.",
    "updateErrors": {
      "sourceUnavailable": "No se puede acceder al origen de actualización. Revisa tu red o proxy e inténtalo de nuevo.",
      "network": "Falló la conexión de red. Revisa tu red o proxy e inténtalo de nuevo.",
      "downloadFailed": "No se pudo descargar el paquete de actualización. Inténtalo más tarde.",
      "installFailed": "No se pudo instalar la actualización. Cierra la app e inténtalo de nuevo.",
      "unknown": "La actualización falló. Inténtalo más tarde."
    }
  },
  "VersionControlSettings": {
    "loading": "Cargando...",
    "sectionTitle": "Control de versiones",
    "sectionDescription": "Configura el ejecutable de Git y gestiona las cuentas de GitHub.",
    "gitTitle": "Configuración de Git",
    "gitDescription": "Configura el ejecutable de Git utilizado por la aplicación.",
    "gitDetected": "Git detectado",
    "gitNotFound": "Git no encontrado en el sistema",
    "gitVersion": "Versión",
    "gitPath": "Ruta",
    "customGitPath": "Ruta personalizada de Git",
    "customGitPathPlaceholder": "/usr/bin/git",
    "customGitPathHint": "Dejar vacío para usar la ruta detectada automáticamente.",
    "test": "Probar",
    "testing": "Probando...",
    "testSuccess": "El ejecutable de Git es válido.",
    "testFailed": "Prueba de Git fallida: {message}",
    "save": "Guardar",
    "saving": "Guardando...",
    "saveSuccess": "Configuración de Git guardada.",
    "saveFailed": "Error al guardar: {message}",
    "githubTitle": "Cuentas de GitHub",
    "githubDescription": "Gestiona las cuentas de GitHub para autenticación. Los tokens se almacenan localmente.",
    "noAccounts": "No hay cuentas de GitHub configuradas.",
    "addAccount": "Añadir cuenta",
    "serverUrl": "URL del servidor",
    "serverUrlPlaceholder": "https://github.com",
    "token": "Token de acceso personal",
    "tokenPlaceholder": "ghp_xxxxxxxxxxxx",
    "generateToken": "Generar token",
    "tokenHint": "Genera un token en GitHub → Settings → Developer settings → Personal access tokens.",
    "validateAndAdd": "Validar y añadir",
    "validating": "Validando...",
    "addSuccess": "Cuenta {username} añadida correctamente.",
    "addFailed": "Error al añadir cuenta: {message}",
    "testConnection": "Probar",
    "connectionSuccess": "Conexión exitosa.",
    "connectionFailed": "Conexión fallida: {message}",
    "setDefault": "Establecer como predeterminada",
    "defaultLabel": "Predeterminada",
    "defaultSet": "Cuenta predeterminada actualizada.",
    "removeAccount": "Eliminar",
    "removeConfirmTitle": "Eliminar cuenta",
    "removeConfirmMessage": "¿Estás seguro de que deseas eliminar la cuenta \"{username}\"?",
    "removeConfirm": "Eliminar",
    "removeCancel": "Cancelar",
    "removeSuccess": "Cuenta eliminada.",
    "scopes": "Alcances",
    "loadFailed": "Error al cargar configuración: {message}",
    "gitAccount": {
      "sectionTitle": "Cuentas de servidor Git",
      "sectionDescription": "Gestiona credenciales para servidores Git que no son GitHub (GitLab, Bitbucket, autoalojados, etc.).",
      "noAccounts": "No hay cuentas de servidor Git configuradas.",
      "addAccount": "Añadir cuenta",
      "addTitle": "Añadir cuenta Git",
      "addDescription": "Introduce la dirección del servidor, nombre de usuario y contraseña o token de acceso.",
      "serverUrl": "URL del servidor",
      "serverUrlPlaceholder": "https://gitlab.example.com",
      "username": "Nombre de usuario",
      "usernamePlaceholder": "Usuario o correo electrónico",
      "password": "Contraseña / Token",
      "passwordPlaceholder": "Contraseña o token de acceso",
      "passwordHint": "Introduce tu contraseña o token de acceso del servidor.",
      "add": "Añadir",
      "serverRequired": "La URL del servidor es obligatoria.",
      "usernameRequired": "El nombre de usuario es obligatorio.",
      "passwordRequired": "La contraseña es obligatoria."
    }
  },
  "ShortcutSettings": {
    "sectionTitle": "Atajos",
    "resetDefault": "Restablecer valores predeterminados",
    "recordInstruction": "Haz clic en el botón derecho y luego pulsa una combinación de teclas. Usa Ctrl/Cmd, Alt y Shift. Pulsa Esc para cancelar la grabación.",
    "recording": "Pulsa un atajo...",
    "toasts": {
      "conflict": "El atajo ya está en uso por \"{title}\"",
      "updated": "Atajo actualizado",
      "invalid": "Atajo no válido, inténtalo de nuevo",
      "reset": "Se restauraron los atajos predeterminados"
    },
    "actions": {
      "toggle_search": {
        "title": "Abrir búsqueda",
        "description": "Muestra u oculta el panel de búsqueda de conversaciones"
      },
      "toggle_sidebar": {
        "title": "Alternar barra lateral izquierda",
        "description": "Muestra u oculta la barra lateral de lista de conversaciones"
      },
      "toggle_terminal": {
        "title": "Alternar terminal",
        "description": "Muestra u oculta el panel de terminal inferior"
      },
      "new_terminal_tab": {
        "title": "Nueva terminal",
        "description": "Crea una nueva pestaña de terminal cuando el foco está en la terminal"
      },
      "close_current_terminal_tab": {
        "title": "Cerrar terminal actual",
        "description": "Cierra la pestaña de terminal actual cuando el foco está en la terminal"
      },
      "toggle_aux_panel": {
        "title": "Alternar panel derecho",
        "description": "Muestra u oculta el panel de información auxiliar"
      },
      "new_conversation": {
        "title": "Nueva conversación",
        "description": "Crea una nueva pestaña de conversación en la carpeta actual"
      },
      "open_folder": {
        "title": "Abrir carpeta",
        "description": "Abre el selector de carpetas y la carpeta en una nueva ventana"
      },
      "open_settings": {
        "title": "Abrir configuración",
        "description": "Abre la ventana de configuración"
      },
      "close_current_tab": {
        "title": "Cerrar pestaña actual",
        "description": "Cierra la conversación o pestaña de archivo actual"
      },
      "close_all_file_tabs": {
        "title": "Cerrar todas las pestañas de archivos",
        "description": "Cierra todas las pestañas de archivos abiertas cuando el panel de archivos está activo"
      },
      "next_tab": {
        "title": "Pestaña siguiente",
        "description": "Cambiar a la siguiente pestaña de conversación o archivo"
      },
      "prev_tab": {
        "title": "Pestaña anterior",
        "description": "Cambiar a la pestaña anterior de conversación o archivo"
      },
      "send_message": {
        "title": "Enviar mensaje",
        "description": "Enviar el mensaje actual en el cuadro de entrada"
      },
      "newline_in_message": {
        "title": "Nueva línea en mensaje",
        "description": "Insertar una nueva línea en el cuadro de entrada"
      }
    }
  },
  "SkillsSettings": {
    "title": "Skills",
    "description": "Selecciona una Skill a la izquierda. A la derecha se muestra una vista previa de Markdown por defecto; cambia a edición para modificar y guardar.",
    "loadingAgents": "Cargando agentes compatibles con Skills...",
    "emptyNoManageableAgents": "No hay agentes disponibles para gestionar Skills.",
    "managedTarget": "Objetivo gestionado",
    "selectAgentPlaceholder": "Selecciona un agente",
    "searchPlaceholder": "Buscar por nombre / ID / ruta...",
    "skillsList": "Lista de Skills",
    "loadingSkills": "Cargando Skills...",
    "agentNotSupported": "El agente actual no admite gestión de Skills.",
    "emptySkills": "Aún no hay Skills. Haz clic en \"Nueva Skill\" para crear una.",
    "newSkillTitle": "Nueva Skill",
    "skillInfo": "Información de la Skill",
    "skillIdPlaceholder": "skill-id (letras/números/-/_/.)",
    "skillsDirectoryWithPath": "Directorio de Skills: {path}",
    "skillsDirectoryNeedId": "Directorio de Skills: introduce el ID de Skill para generar la ruta completa",
    "markdownContent": "Contenido Markdown",
    "editingStatus": "Editando",
    "previewStatus": "Vista previa",
    "contentPlaceholder": "Introduce el contenido Markdown de la Skill...",
    "metadataTitle": "Metadatos de Skills",
    "onlyYamlMetadata": "Esta Skill solo contiene metadatos YAML.",
    "emptyContentHint": "Aún no hay contenido. Haz clic en \"Editar\" para empezar.",
    "loadingSkill": "Cargando Skill...",
    "emptyNoAgents": "No hay agentes disponibles.",
    "noSelectionHint": "Selecciona un Skill a la izquierda o haz clic en \"Nuevo Skill\" para crear uno.",
    "systemBadge": "Sistema",
    "systemHint": "Skill integrado del CLI · solo lectura",
    "scope": {
      "global": "Global",
      "folder": "Carpeta",
      "selectFolderPlaceholder": "Seleccionar una carpeta",
      "noFolders": "No se encontraron carpetas",
      "pickFolderHint": "Selecciona una carpeta para ver sus Skills."
    },
    "actions": {
      "preview": "Vista previa",
      "edit": "Editar",
      "openInWindow": "Abrir en nueva ventana",
      "delete": "Eliminar",
      "deleting": "Eliminando...",
      "refresh": "Actualizar",
      "newSkill": "Nueva Skill",
      "reset": "Restablecer",
      "save": "Guardar",
      "saving": "Guardando...",
      "cancel": "Cancelar"
    },
    "deleteDialog": {
      "title": "Eliminar Skill",
      "confirm": "¿Eliminar la Skill actual? Esta acción no se puede deshacer.",
      "confirmWithNamePrefix": "¿Eliminar la Skill",
      "confirmWithNameSuffix": "? Esta acción no se puede deshacer."
    },
    "toasts": {
      "loadFailed": "No se pudo cargar la Skill",
      "openFolderFailed": "No se pudo abrir la carpeta",
      "noSkillDirectory": "No se encontró un directorio de Skills disponible para el agente actual",
      "nameRequired": "El nombre de la Skill no puede estar vacío",
      "updated": "Skill actualizada",
      "created": "Skill creada",
      "saveFailed": "No se pudo guardar la Skill",
      "deleted": "Skill eliminada",
      "deleteFailed": "No se pudo eliminar la Skill"
    },
    "templates": {
      "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n",
      "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n",
      "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n",
      "default": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n"
    }
  },
  "McpSettings": {
    "loading": "Cargando...",
    "summary": {
      "missingCommand": "(comando faltante)",
      "missingUrl": "(URL faltante)"
    },
    "protocol": {
      "stdio": "Stdio"
    },
    "errors": {
      "selectInstallProtocol": "Selecciona un protocolo de instalación",
      "fieldRequired": "{field} es obligatorio",
      "fieldNeedsBoolean": "{field} debe ser true o false",
      "fieldNeedsNumber": "{field} debe ser un número",
      "fieldNeedsInteger": "{field} debe ser un entero",
      "fieldInvalidJson": "{field} tiene JSON inválido: {message}",
      "fieldOutOfRange": "El valor de {field} está fuera del rango permitido",
      "jsonEmpty": "{name} no puede estar vacío",
      "jsonInvalid": "{name} no es un JSON válido: {message}",
      "jsonMustBeObject": "{name} debe ser un objeto JSON",
      "specMustBeObject": "La configuración de MCP debe ser un objeto JSON.",
      "missingType": "Falta el campo type en la configuración de MCP. Indica uno de stdio, http (alias: streamable-http, streamableHttp), sse.",
      "unsupportedType": "Tipo de MCP no admitido {type}. Compatibles: stdio, http (alias: streamable-http, streamableHttp), sse.",
      "codexEntryUnsupportedType": "La entrada Codex MCP {id} tiene un tipo no admitido {type}. Compatibles: stdio, http (alias: streamable-http, streamableHttp), sse.",
      "unsupportedTransportType": "Tipo de transport no admitido {type}. Compatibles: http (alias: streamable-http, streamableHttp), sse.",
      "stdioCommandRequired": "Los MCP stdio requieren un campo command no vacío.",
      "remoteUrlRequired": "Los MCP remotos requieren un campo url no vacío.",
      "appsRequired": "Selecciona al menos una aplicación de destino."
    },
    "jsonNames": {
      "localConfig": "Configuración MCP",
      "installConfig": "Configuración de instalación"
    },
    "toasts": {
      "uninstalled": "MCP desinstalado",
      "uninstallFailed": "Error al desinstalar: {message}",
      "selectAtLeastOneApp": "Selecciona al menos una app de destino",
      "saveSuccess": "Guardado",
      "saveFailed": "Error al guardar: {message}",
      "installed": "{name} instalado",
      "installFailed": "Error al instalar: {message}",
      "serverIdRequired": "Server ID es obligatorio",
      "serverIdExists": "El Server ID \"{id}\" ya existe. Edita la entrada existente o usa un nombre diferente.",
      "created": "MCP creado"
    },
    "installDialog": {
      "title": "Confirmar instalación de MCP",
      "descriptionWithName": "Instalar {name} en la configuración local.",
      "description": "Selecciona las apps de destino para la instalación.",
      "protocol": "Protocolo",
      "selectProtocol": "Seleccionar protocolo",
      "parameters": "Parámetros de configuración",
      "booleanPlaceholder": "Selecciona true/false",
      "selectOneValue": "Selecciona un valor",
      "targetApps": "Apps de destino"
    },
    "actions": {
      "cancel": "Cancelar",
      "confirmInstall": "Confirmar instalación",
      "installing": "Instalando",
      "uninstall": "Desinstalar",
      "uninstalling": "Desinstalando",
      "viewDetails": "Ver detalles",
      "save": "Guardar",
      "saving": "Guardando",
      "install": "Instalar",
      "refresh": "Actualizar",
      "newMcp": "Nuevo MCP",
      "create": "Crear",
      "creating": "Creando..."
    },
    "tabs": {
      "local": "MCP local",
      "market": "Marketplace MCP"
    },
    "local": {
      "filterPlaceholder": "Filtrar MCP local...",
      "loadFailed": "Error de carga: {message}",
      "empty": "No se detectó MCP local.",
      "description": "La configuración de MCP local se puede editar y guardar directamente.",
      "enabledApps": "Apps habilitadas",
      "configJson": "Configuración MCP (JSON)",
      "draftTitle": "Nuevo MCP",
      "draftDescription": "Indica un Server ID y la configuración para crear un servidor MCP local.",
      "serverIdLabel": "Server ID",
      "serverIdPlaceholder": "Server ID (p. ej. my-mcp)",
      "typeHint": "Tipos admitidos: stdio, http (alias: streamable-http, streamableHttp), sse. env solo se usa con stdio; para MCP remotos usa headers para llevar tokens de autenticación.",
      "envOnRemoteWarning": "Se detectó env en un MCP remoto. Solo stdio usa env; los MCP remotos llevan los tokens de autenticación en headers, así que env se ignorará al guardar."
    },
    "market": {
      "selectMarketplace": "Seleccionar marketplace",
      "searchPlaceholder": "Buscar MCP...",
      "searchFailed": "Error de búsqueda: {message}",
      "loadingList": "Cargando lista de MCP...",
      "empty": "Sin resultados de MCP.",
      "loadingDetail": "Cargando detalles del marketplace...",
      "detailLoadFailed": "No se pudieron cargar los detalles: {message}",
      "owner": "Propietario: {owner}",
      "namespace": "Espacio de nombres: {namespace}",
      "defaultInstallProtocol": "Protocolo de instalación predeterminado",
      "currentOptionParameterCount": "Cantidad de parámetros de la opción actual: {count}",
      "installConfigDescription": "Configuración de instalación (JSON, editable antes de instalar; las ediciones sobrescribirán el formulario de protocolo/parámetros)",
      "selectLeftToView": "Selecciona un MCP del marketplace a la izquierda para ver detalles."
    },
    "badges": {
      "verified": "Verificado",
      "remote": "Remoto",
      "hasHomepage": "Tiene página web",
      "uses": "{count} usos",
      "deployed": "Desplegado",
      "notDeployed": "No desplegado"
    },
    "selectLeftMcp": "Selecciona un MCP a la izquierda."
  },
  "AcpAgentSettings": {
    "title": "Gestión del SDK de agentes",
    "description": "Gestiona en un solo lugar la conexión del SDK de agentes, estado habilitado, variables de entorno, gestión de configuración e información de preflight de versión.",
    "loadingAgents": "Cargando lista de agentes...",
    "agentList": "Lista de agentes",
    "emptyNoAgent": "No hay agentes disponibles.",
    "configManagement": "Gestión de configuración",
    "envVars": "Variables de entorno",
    "nativeJsonConfig": "Configuración JSON nativa",
    "modelHintDefault": "Déjalo vacío para usar el modelo predeterminado del sistema.",
    "generalConfigDescriptionClaude": "Admite configuración rápida de API URL, API Key y modelos de Claude, y sincroniza con la configuración JSON nativa.",
    "generalConfigDescriptionDefault": "Admite entrada de configuración importante (API URL, API Key, Model) y gestión de configuración JSON nativa.",
    "multiAgent": {
      "title": "Colaboración multiagente",
      "description": "Permite que los agentes activos deleguen subtareas a otros agentes.",
      "enable": "Activar delegación",
      "enableHint": "Cuando está desactivado, la herramienta delegate_to_agent se oculta del catálogo de herramientas MCP del agente.",
      "depthLimit": "Profundidad máxima de delegación",
      "depthHint": "Rango permitido: {min}–{max}. Limita la profundidad de recursión de una cadena de delegación (raíz → hijo → nieto …).",
      "completedCacheLabel": "Caché de resultados completados (MB)",
      "completedCacheHint": "Caché en memoria de los resultados completados de subagentes, que se conserva solo mientras la sesión de delegación está en ejecución y se libera automáticamente cuando esa sesión termina. Al superar este presupuesto, los resultados más antiguos se descartan primero de la memoria (aún visibles en la sesión propia del subagente); 0 = sin límite (igualmente se libera al terminar la sesión).",
      "save": "Guardar",
      "saving": "Guardando…",
      "saved": "Configuración de delegación guardada",
      "saveFailed": "Error al guardar la configuración de delegación",
      "loadFailed": "Error al cargar la configuración de delegación: {detail}",
      "tabGeneral": "General",
      "tabAgentDefaults": "Valores por defecto del agente",
      "agentDefaultsDescription": "Anulaciones por agente que se aplican cuando Colaboración multiagente inicia un subagente para una llamada de delegación. Las opciones mostradas provienen de un sondeo en vivo: lo que selecciones es exactamente lo que el agente aceptará.",
      "probing": "Cargando las opciones disponibles del agente…",
      "probeFailed": "Error al cargar las opciones: {detail}",
      "retry": "Reintentar",
      "noConfigAvailable": "Este agente no tiene opciones configurables.",
      "modeLabel": "Modo",
      "agentDefaultHint": "Predeterminado del agente: {value}",
      "defaultOptionLabel": "Predeterminado ({value})"
    },
    "actions": {
      "dragSort": "Arrastrar para reordenar",
      "dragSortAgent": "Arrastrar para reordenar {name}",
      "refreshCheck": "Actualizar comprobación",
      "refreshCheckAgent": "Actualizar comprobación de {name}",
      "clickEnable": "Haz clic para habilitar {name}",
      "clickDisable": "Haz clic para deshabilitar {name}",
      "install": "Instalar",
      "upgrade": "Actualizar",
      "uninstall": "Desinstalar",
      "uninstalling": "Desinstalando...",
      "saveEnvVars": "Guardar variables de entorno",
      "saving": "Guardando...",
      "saveCodexConfig": "Guardar configuración de Codex",
      "saveGeminiConfig": "Guardar configuración de Gemini",
      "saveOpenCodeConfig": "Guardar configuración de OpenCode",
      "saveOpenClawConfig": "Guardar configuración de OpenClaw",
      "saveConfigManagement": "Guardar gestión de configuración",
      "saveCurrentProvider": "Guardar proveedor actual",
      "showApiKey": "Mostrar API Key",
      "hideApiKey": "Ocultar API Key",
      "showKey": "Mostrar clave",
      "hideKey": "Ocultar clave",
      "showToken": "Mostrar token",
      "hideToken": "Ocultar token",
      "cancel": "Cancelar",
      "delete": "Eliminar",
      "deleting": "Eliminando...",
      "confirmDelete": "Confirmar eliminación",
      "confirmUninstall": "Confirmar desinstalación",
      "saveClineConfig": "Guardar configuración de Cline",
      "saveHermesConfig": "Guardar configuración de Hermes",
      "customInstall": "Instalación personalizada"
    },
    "status": {
      "enabled": "Habilitado",
      "disabled": "Deshabilitado",
      "unchecked": "Sin comprobar",
      "agentEnabledAria": "{name} habilitado",
      "agentEnabledSwitch": "Interruptor de habilitación de {name}"
    },
    "preflight": {
      "count": "Elementos de preflight: {count}",
      "notRun": "Las comprobaciones aún no se han ejecutado."
    },
    "codex": {
      "configDescription": "Admite configuración rápida de URL de API, API Key, nombre del modelo y reasoning effort, y sincroniza con `auth.json` / `config.toml`.",
      "authMode": "Modo de Autenticación",
      "chatgptSubscription": "Suscripción oficial",
      "chatgptSubscriptionHint": "Iniciar sesión con suscripción oficial de ChatGPT, sin necesidad de API Key",
      "apiKeyHint": "Conectar usando API Key a OpenAI o servicios API compatibles",
      "selectProvider": "Seleccionar proveedor",
      "modelName": "Nombre del modelo",
      "selectReasoningEffort": "Seleccionar Reasoning Effort",
      "enableWebsocket": "Habilitar WebSocket",
      "enableWebsocketAria": "Habilitar WebSocket para Codex Provider",
      "enableSkills": "Habilitar Skills",
      "enableSkillsAria": "Habilitar Skills para Codex",
      "enableFast": "Habilitar Fast",
      "enableFastAria": "Habilitar nivel de servicio Fast para Codex",
      "authJsonNative": "auth.json (nativo)",
      "configTomlNative": "config.toml (nativo)",
      "loginButton": "Iniciar sesión con ChatGPT",
      "loginRequesting": "Solicitando código de inicio de sesión...",
      "loginStep1": "Abre la siguiente URL en tu navegador:",
      "loginStep2": "Introduce el siguiente código:",
      "loginPolling": "Esperando autorización...",
      "loginCancel": "Cancelar",
      "loginSuccess": "¡Inicio de sesión exitoso, configuración guardada!",
      "loginFailed": "Error de inicio de sesión: {message}",
      "loginRetry": "Reintentar",
      "loginCodeCopied": "Código copiado",
      "loggedIn": "Cuenta conectada",
      "loginRelogin": "Reconectar / Cambiar cuenta",
      "loginTimeout": "Tiempo de inicio de sesión agotado, inténtalo de nuevo",
      "loginSaveFailed": "Inicio de sesión exitoso pero falló al guardar la configuración"
    },
    "gemini": {
      "authConfig": "Configuración de autenticación de Gemini",
      "authConfigDescription": "Alineado con la documentación de autenticación de Gemini CLI, con soporte para endpoint personalizado, inicio de sesión de Google, Gemini API Key y Vertex AI (ADC / cuenta de servicio / API Key).",
      "authMode": "Modo de autenticación",
      "selectAuthMode": "Seleccionar modo de autenticación",
      "viewAuthDoc": "Ver documentación de autenticación",
      "mode": {
        "custom": "Endpoint personalizado",
        "loginGoogle": "Inicio de sesión de Google (OAuth)",
        "vertexServiceAccount": "Vertex AI (Cuenta de servicio)"
      },
      "hint": {
        "custom": "Completa API URL, API Key y Modelo; se mapean a GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.",
        "loginGoogle": "Ejecuta gemini en terminal y completa primero el inicio de sesión de Google; no se requiere API key.",
        "geminiApiKey": "Completa GEMINI_API_KEY cuando uses la API de Gemini.",
        "vertexAdc": "Usa gcloud ADC; se recomienda configurar GOOGLE_CLOUD_PROJECT y GOOGLE_CLOUD_LOCATION.",
        "vertexServiceAccount": "Establece la ruta del JSON de la cuenta de servicio en GOOGLE_APPLICATION_CREDENTIALS.",
        "vertexApiKey": "Completa GOOGLE_API_KEY cuando uses API key de Vertex AI."
      }
    },
    "openCode": {
      "configManagement": "Gestión de configuración de OpenCode",
      "configDescription": "Alineado con el esquema `provider` de OpenCode, admite gestión de múltiples proveedores y sincronización bidireccional con archivos JSON nativos.",
      "providerManagement": "Gestión de proveedores",
      "providerCount": "{count} proveedores",
      "addProvider": "Agregar proveedor",
      "emptyProvider": "Aún no hay proveedor. Introduce un ID y haz clic en \"Agregar proveedor\".",
      "providerEnabledState": "Estado habilitado de {providerId}",
      "selectProviderNpm": "Seleccionar provider.npm",
      "modelManagement": "Gestión de modelos",
      "modelCount": "{count} modelos",
      "modelDescription": "Alineado con `provider.models` de OpenCode. La gestión rápida actualmente soporta `name` / `id`; otros campos avanzados se conservan y se pueden editar en el JSON nativo de abajo.",
      "addModel": "Agregar modelo",
      "emptyModel": "Aún no hay modelo. Introduce model id y haz clic en \"Agregar modelo\".",
      "modelId": "ID de modelo",
      "modelName": "Nombre del modelo",
      "deleteModel": "Eliminar modelo {modelId}",
      "nativeJsonConfig": "Configuración JSON nativa de OpenCode",
      "mainModel": "Modelo principal",
      "smallModel": "Modelo pequeño",
      "noMatchingModels": "No hay modelos coincidentes"
    },
    "openClaw": {
      "gatewayConfig": "Configuración de Gateway",
      "gatewayDescription": "Configura la conexión de OpenClaw Gateway. Admite gateway local o remoto.",
      "gatewayUrlHint": "Déjalo vacío para usar gateway.remote.url desde la configuración local de openclaw.",
      "gatewayTokenPlaceholder": "Token de autenticación de Gateway",
      "gatewayTokenHint": "Usa token-file en lugar de token en texto plano cuando sea posible; configúralo con el CLI de openclaw.",
      "sessionKeyHint": "Opcional. Especifica la session key del gateway; si se deja vacío se asigna automáticamente una sesión aislada."
    },
    "hermes": {
      "configManagement": "Configuración de Hermes",
      "configDescription": "Hermes gestiona sus propias credenciales en ~/.hermes/.env y los ajustes en ~/.hermes/config.yaml. Elige un proveedor y luego establece la clave de API y el modelo: codeg escribe ambos archivos por ti.",
      "providerLabel": "Proveedor",
      "providerHint": "El proveedor determina qué variable de clave de API y qué model.provider usa Hermes. Los proveedores de OAuth se configuran mediante la configuración del terminal que aparece a continuación.",
      "groupApiKey": "Proveedores con clave API",
      "groupOauth": "Proveedores OAuth",
      "groupAws": "AWS",
      "apiKeyHint": "Se guarda en ~/.hermes/.env. Nunca se inyecta en el proceso: Hermes la lee de su propia configuración.",
      "modelName": "Modelo",
      "oauthHint": "Este proveedor usa OAuth. Ejecuta la configuración de abajo para autenticarte en tu terminal.",
      "awsHint": "Bedrock usa tus credenciales de AWS (entorno o configuración compartida). Define el ID del modelo arriba y configura el acceso a AWS en tu entorno.",
      "unsupportedProvider": "Este proveedor no se puede editar con campos estructurados. Usa el editor de config.yaml de abajo o la configuración por terminal.",
      "setupTitle": "Configuración autogestionada",
      "setupHint": "La configuración interactiva de Hermes necesita un terminal. Iníciala abajo o copia el comando para ejecutarlo tú mismo.",
      "runSetup": "Ejecutar configuración de Hermes",
      "configureModel": "Configurar modelo",
      "openConfigFolder": "Abrir ~/.hermes",
      "copyCommand": "Copiar comando",
      "commandCopied": "Comando copiado al portapapeles",
      "advancedTitle": "Avanzado: editar config.yaml",
      "rawConfigHint": "Edita ~/.hermes/config.yaml directamente. Guardar aquí sobrescribe el archivo tal cual.",
      "saveRawConfig": "Guardar config.yaml"
    },
    "authModeOfficialSubscription": "Suscripción oficial",
    "authModeCustomEndpoint": "Endpoint personalizado",
    "authModeCustomEndpointHint": "Configurar manualmente la URL de API y la clave API para un endpoint personalizado.",
    "authModeModelProvider": "Proveedor de modelo",
    "modelProvider": "Proveedor de modelo",
    "modelProviderHint": "Usar la URL de API, la clave API y el modelo de un proveedor de modelo configurado.",
    "selectModelProvider": "Seleccionar proveedor de modelo",
    "noModelProviderAvailable": "No hay proveedor de modelo configurado para este agente. Vaya a la configuración de proveedores de modelo para agregar uno.",
    "claude": {
      "authMode": "Modo de autenticación",
      "officialSubscription": "Suscripción oficial",
      "officialSubscriptionHint": "Usar la suscripción oficial de Anthropic, no se requiere API Key.",
      "mainModel": "Modelo principal",
      "reasoningModel": "Modelo de razonamiento (thinking)",
      "haikuDefaultModel": "Modelo Haiku predeterminado",
      "sonnetDefaultModel": "Modelo Sonnet predeterminado",
      "opusDefaultModel": "Modelo Opus predeterminado",
      "effortLevel": "Nivel de razonamiento",
      "effortLevelDefault": "Nivel predeterminado",
      "effortLevel_low": "Bajo",
      "effortLevel_medium": "Medio",
      "effortLevel_high": "Alto",
      "effortLevel_xhigh": "Extra Alto"
    },
    "dialogs": {
      "confirmDeleteProvider": "¿Eliminar proveedor {providerId}?",
      "confirmDeleteProviderDescription": "La configuración de OpenCode y auth JSON se actualizarán juntos. Esta acción no se puede deshacer.",
      "confirmUninstall": "¿Desinstalar {name}?",
      "confirmUninstallDescription": "Esto elimina la versión instalada localmente. Puedes reinstalar más tarde.",
      "customInstallTitle": "Instalación personalizada de {name}",
      "customInstallDescription": "Introduce la versión que quieres instalar. Se reinstalará y reemplazará la versión instalada actualmente.",
      "customInstallVersionLabel": "Número de versión",
      "customInstallInvalid": "Introduce un número de versión válido, p. ej. 1.2.3.",
      "customInstallSubmit": "Instalar"
    },
    "errors": {
      "nativeJsonMustBeObject": "La configuración JSON nativa debe ser un objeto",
      "nativeJsonInvalid": "Error de formato en JSON nativo: {message}",
      "openCodeAuthMustBeObject": "OpenCode auth.json debe ser un objeto JSON",
      "openCodeAuthInvalid": "Error de formato en OpenCode auth.json: {message}",
      "authMustBeObject": "auth.json debe ser un objeto JSON",
      "authInvalid": "Error de formato en auth.json: {message}",
      "providerIdPattern": "El ID de proveedor solo admite letras, números, guion bajo, punto y guion",
      "providerExists": "El proveedor {providerId} ya existe",
      "modelIdPattern": "El ID de modelo solo admite letras, números, guion bajo, punto, dos puntos y guion",
      "modelExists": "El modelo {modelId} ya existe"
    },
    "warnings": {
      "nativeJsonRecoveredStructured": "La configuración JSON nativa es inválida; se restableció a configuración estructurada",
      "nativeJsonRecoveredOpenCode": "La configuración JSON nativa es inválida; se restableció a configuración estructurada de OpenCode",
      "openCodeAuthRecovered": "OpenCode auth.json es inválido; se restableció a configuración predeterminada",
      "authRecoveredStructured": "auth.json es inválido; se restableció a configuración estructurada"
    },
    "toasts": {
      "agentActionCompleted": "{name} {action} completado",
      "agentActionFailed": "{name} {action} falló",
      "localVersion": "Versión local: {version}",
      "installCompletedVersionLater": "Instalación completada, la versión se actualizará en la próxima comprobación",
      "uninstallCompleted": "Desinstalación de {name} completada",
      "uninstallFailed": "Desinstalación de {name} fallida",
      "localVersionRemoved": "Versión local eliminada",
      "saveAgentOrderFailed": "No se pudo guardar el orden de Agent",
      "saveAgentSwitchFailed": "No se pudo guardar el switch de Agent",
      "saveEnvFailed": "No se pudieron guardar las variables de entorno",
      "codexSaved": "Configuración de Codex guardada",
      "saveCodexNativeFailed": "No se pudo guardar la configuración nativa de Codex",
      "geminiSaved": "Configuración de Gemini guardada",
      "saveGeminiFailed": "No se pudo guardar la configuración de Gemini",
      "providerDeleted": "Proveedor {providerId} eliminado",
      "providerDeleteFailed": "No se pudo eliminar el proveedor {providerId}",
      "providerSaved": "Proveedor {providerId} guardado",
      "saveProviderFailed": "No se pudo guardar el proveedor {providerId}",
      "openCodeConfigSynced": "La configuración de OpenCode y auth JSON se sincronizaron.",
      "openCodeSaved": "Configuración de OpenCode guardada",
      "saveOpenCodeFailed": "No se pudo guardar la configuración de OpenCode",
      "openClawSaved": "Configuración de OpenClaw guardada",
      "saveOpenClawFailed": "No se pudo guardar la configuración de OpenClaw",
      "configSaved": "Configuración guardada",
      "configSavedHint": "Las sesiones existentes deben reabrirse para que surta efecto",
      "saveConfigManagementFailed": "No se pudo guardar la gestión de configuración",
      "clineSaved": "Configuración de Cline guardada",
      "saveClineFailed": "Error al guardar la configuración de Cline",
      "hermesSaved": "Configuración de Hermes guardada",
      "saveHermesFailed": "Error al guardar la configuración de Hermes",
      "modelProviderRequired": "Seleccione un proveedor de modelo antes de guardar.",
      "affectedRunningSessions": "{count, plural, one {# sesión activa necesita reconectarse para aplicar el cambio} other {# sesiones activas necesitan reconectarse para aplicar el cambio}}"
    },
    "version": {
      "statusLabel": "Estado de versión",
      "notInstalled": "No instalado",
      "remoteLocal": "Remota: {remoteVersion} · Local: {localVersion}",
      "platformUnsupported": "{versionText}. La plataforma actual no soporta este agente.",
      "uvxNotReady": "{versionText}. El runtime de uv no está instalado: instálalo desde la comprobación de uv de abajo para usar este agente.",
      "clickInstall": "{versionText}. Haz clic en Instalar a la derecha.",
      "localUnrecognized": "{versionText}. La versión local no es comparable; intenta actualizar para sobrescribir la instalación.",
      "upgradeAvailable": "{versionText}. Hay actualización disponible.",
      "remoteUnavailable": "{versionText}. La versión remota no está disponible por ahora.",
      "latest": "{versionText}. Ya está en la última versión."
    },
    "cline": {
      "configDescription": "Configure el proveedor de API y las credenciales de Cline. La configuración se guarda en ~/.cline/data/."
    },
    "opencodePlugins": {
      "title": "Plugins de OpenCode",
      "declared": "Plugins declarados",
      "noPlugins": "No hay plugins declarados en opencode.json",
      "status": {
        "installed": "Instalado",
        "missing": "No instalado"
      },
      "installAll": "Instalar todos los faltantes",
      "pinVersions": "Fijar versiones @latest",
      "install": "Instalar",
      "uninstall": "Desinstalar",
      "refresh": "Actualizar",
      "success": "Todos los plugins se instalaron correctamente",
      "failed": "La operación del plugin falló"
    }
  },
  "SettingsPages": {
    "agentsLoading": "Cargando configuración de agentes..."
  },
  "GeneralSettings": {
    "loading": "Cargando...",
    "sectionTitle": "General",
    "sectionDescription": "Preferencias centralizadas para el terminal predeterminado, la aceleración de renderizado y la delegación entre agentes.",
    "terminalTitle": "Terminal predeterminada",
    "terminalDescription": "Elige el shell que se usará al abrir nuevas pestañas de terminal desde la barra del terminal o el árbol de archivos.",
    "defaultTerminalShell": "Shell predeterminado",
    "terminalSystemDefault": "Predeterminado del sistema",
    "terminalPowerShell7": "PowerShell 7 (pwsh)",
    "terminalWindowsPowerShell": "Windows PowerShell",
    "terminalCmd": "Símbolo del sistema (cmd)",
    "terminalSaveFailed": "Error al guardar la configuración del terminal: {message}",
    "terminalShellCustom": "Ruta personalizada",
    "terminalShellCustomPath": "Ruta del shell",
    "terminalShellCustomPlaceholder": "/usr/local/bin/fish",
    "terminalShellCustomSave": "Guardar",
    "terminalShellCustomHint": "Indica una ruta absoluta o un nombre resoluble en PATH.",
    "terminalShellNotInstalled": "no instalado",
    "terminalShellNotFoundWarning": "Esta ruta no existe en este host.",
    "terminalCurrentShell": "En uso actualmente: {path}",
    "renderingTitle": "Renderizado",
    "renderingDescription": "Desactiva la aceleración por hardware si la aplicación muestra pantalla negra o fallos de renderizado (común en algunas GPU AMD o Intel integradas). Solo afecta a la versión de escritorio en Windows.",
    "disableHardwareAcceleration": "Desactivar aceleración por hardware",
    "renderingSaveFailed": "No se pudo guardar la configuración de renderizado: {message}",
    "restartRequired": "Guardado. Reinicia la aplicación para aplicar el cambio.",
    "restartNow": "Reiniciar ahora",
    "restartFailed": "No se pudo reiniciar: {message}",
    "loadFailed": "Error al cargar: {message}"
  },
  "LoginPage": {
    "documentTitle": "Iniciar sesión - codeg",
    "brand": "Codeg",
    "subtitle": "Introduce tu token de acceso para conectarte a la aplicación de escritorio",
    "tokenPlaceholder": "Token de acceso",
    "connect": "Conectar",
    "connecting": "Conectando...",
    "helpText": "Encuentra tu token en la aplicación de escritorio en Configuración → Servicio web",
    "invalidToken": "Token no válido. Por favor, comprueba e inténtalo de nuevo.",
    "connectionFailed": "Error de conexión (HTTP {status})",
    "networkError": "No se puede conectar al servidor"
  },
  "CommitPage": {
    "title": "Confirmación",
    "invalidFolderId": "ID de carpeta no válido",
    "loadingRepo": "Cargando repositorio..."
  },
  "MergePage": {
    "title": "Resolver conflictos",
    "invalidFolderId": "ID de carpeta no válido",
    "loadingRepo": "Cargando repositorio...",
    "localVersion": "Local (Nuestro)",
    "result": "Resultado",
    "remoteVersion": "Remoto (Suyo)",
    "acceptLocal": "Aceptar local",
    "acceptRemote": "Aceptar remoto",
    "markResolved": "Marcar como resuelto",
    "abortMerge": "Abortar",
    "completeMerge": "Completar fusión",
    "unresolvedConflicts": "Todavía hay marcadores de conflicto sin resolver en este archivo",
    "fileResolved": "Archivo resuelto correctamente",
    "allResolved": "Todos los conflictos resueltos",
    "conflictFiles": "Archivos en conflicto",
    "loadingFile": "Cargando archivo...",
    "preparingMerge": "Preparando fusión...",
    "selectFile": "Seleccionar un archivo para resolver",
    "noConflicts": "No hay archivos en conflicto",
    "skipFile": "Omitir",
    "abortSuccess": "Operación abortada",
    "applyAllNonConflicting": "Aplicar todos los cambios sin conflicto",
    "applyLeftNonConflicting": "Aplicar local",
    "applyRightNonConflicting": "Aplicar remoto"
  },
  "Folder": {
    "workspaceStatus": {
      "degradedTitle": "Actualizaciones en vivo no disponibles",
      "degradedHint": "El observador no pudo iniciarse (por ejemplo, permiso denegado). Actualiza manualmente para ver los cambios.",
      "retry": "Reintentar",
      "retrying": "Reintentando..."
    },
    "common": {
      "all": "Todo",
      "cancel": "Cancelar",
      "close": "Cerrar",
      "closeOthers": "Cerrar otros",
      "closeAll": "Cerrar todo",
      "confirm": "Confirmar",
      "save": "Guardar",
      "delete": "Eliminar",
      "rename": "Renombrar",
      "loading": "Cargando...",
      "refresh": "Actualizar",
      "refreshing": "Actualizando...",
      "create": "Crear",
      "createAndSwitch": "Crear y cambiar",
      "openFile": "Abrir archivo",
      "viewDiff": "Ver Diff",
      "push": "Enviar..."
    },
    "statusLabels": {
      "in_progress": "En progreso",
      "pending_review": "Revisión",
      "completed": "Completado",
      "cancelled": "Cancelado"
    },
    "sidebar": {
      "title": "Conversaciones",
      "locateActiveConversation": "Ubicar conversación activa",
      "expandAllGroups": "Expandir todos los grupos",
      "collapseAllGroups": "Colapsar todos los grupos",
      "newConversation": "Nueva conversación",
      "newConversationShort": "Nueva",
      "newChat": "Nueva conversación",
      "search": "Buscar",
      "noConversationsFound": "No se encontraron conversaciones.",
      "importLocalSessions": "Importar sesiones locales",
      "importing": "Importando...",
      "error": "Error del sistema: {message}",
      "completeAllSessions": "Completar todas las sesiones",
      "completeAllReviewTitle": "¿Completar todas las sesiones en revisión?",
      "completeAllReviewDescription": "Esto marcará como completadas todas las {count, plural, one {# sesión} other {# sesiones}} en Revisión.",
      "completing": "Completando...",
      "toasts": {
        "importedSessions": "Se importaron {imported, plural, one {# sesión} other {# sesiones}}, se omitieron {skipped}",
        "importedAndUpdated": "Se importaron {imported, plural, one {# sesión} other {# sesiones}}, se actualizaron {updated, plural, one {# título} other {# títulos}}, se omitieron {skipped}",
        "updatedTitles": "Se actualizaron {updated, plural, one {# título} other {# títulos}}, se omitieron {skipped}",
        "noNewSessionsFound": "No se encontraron sesiones nuevas (omitidas {skipped})",
        "importFailed": "Error al importar: {message}",
        "reviewCompleted": "Se marcaron como completadas {count, plural, one {# sesión en revisión} other {# sesiones en revisión}}",
        "completeReviewFailed": "Error al completar sesiones en revisión: {message}",
        "folderOpened": "Carpeta {name} abierta",
        "folderRemoved": "Carpeta {name} eliminada",
        "openFolderFailed": "Error al abrir carpeta",
        "removeFolderFailed": "Error al eliminar carpeta: {message}",
        "reorderFoldersFailed": "Error al reordenar carpetas: {message}",
        "changeFolderColorFailed": "Error al cambiar el color: {message}",
        "changeFolderDefaultAgentFailed": "Error al establecer agente predeterminado: {message}"
      },
      "statsLabel": "{folders} carpetas · {convos} conversaciones",
      "reorderHandle": "Arrastrar para reordenar",
      "openFolder": "Abrir carpeta",
      "searchPlaceholder": "Buscar conversaciones...",
      "showCompleted": "Mostrar conversaciones completadas",
      "moreOptions": "Más opciones",
      "sortBy": "Ordenar por",
      "sortByCreatedAt": "Fecha de creación",
      "sortByUpdatedAt": "Fecha de actualización",
      "statusRunningBadge": "Ejecutando",
      "statusCancelledBadge": "Cancelado",
      "conversationCountUnit": "{count, plural, one {# conversación} other {# conversaciones}}",
      "emptyFolderHint": "Sin conversaciones",
      "noMatchingConversations": "No hay conversaciones coincidentes",
      "noUnfinishedConversations": "No hay conversaciones pendientes. Activa \"Mostrar completadas\" desde el menú superior derecho.",
      "removeFolderConfirmTitle": "¿Eliminar carpeta del espacio de trabajo?",
      "removeFolderConfirmDescription": "¿Eliminar \"{name}\" del espacio de trabajo? Sus pestañas y terminales se cerrarán.",
      "folderHeaderMenu": {
        "manageConversations": "Gestionar conversaciones…",
        "changeColor": "Cambiar color",
        "useThemeColor": "Usar tema de la app",
        "setDefaultAgent": "Establecer agente predeterminado",
        "defaultAgentNone": "Sin valor (usar predeterminado global)",
        "agentUnavailableSuffix": "(no disponible)",
        "loadingAgents": "Cargando agentes…",
        "removeFromWorkspace": "Quitar del espacio de trabajo"
      },
      "manageConversations": {
        "title": "Gestionar conversaciones — {name}",
        "searchPlaceholder": "Buscar por título…",
        "agentFilterAll": "Todos los agentes",
        "statusFilterAll": "Todos los estados",
        "selectAllVisible": "Seleccionar todo",
        "deselectAll": "Deseleccionar todo",
        "selectedCount": "{count} seleccionada(s)",
        "matchedCount": "{count} coincidencia(s)",
        "messagesShort": "{count} msg",
        "untitledConversation": "Conversación sin título",
        "setStatus": "Cambiar estado…",
        "deleteSelected": "Eliminar",
        "noConversations": "No hay conversaciones en esta carpeta.",
        "noMatchingConversations": "Ninguna conversación coincide con los filtros.",
        "confirmDeleteTitle": "¿Eliminar {count} conversación(es)?",
        "confirmDeleteDescription": "Esta acción no se puede deshacer.",
        "toastDeleted": "Se eliminaron {count} conversación(es)",
        "toastStatusUpdated": "Estado actualizado para {count} conversación(es)",
        "toastOpFailed": "Error en la operación: {message}"
      },
      "sectionPinned": "Fijadas",
      "sectionFolders": "Carpetas",
      "sectionChats": "Chat",
      "noChats": "Sin chats",
      "newChatAction": "Nuevo chat"
    },
    "conversation": {
      "reloadFailed": "No se pudo recargar la conversación: {message}",
      "reloaded": "Conversación recargada",
      "reload": "Recargar",
      "activeConversationIndicator": "Conversación activa",
      "newConversation": "Nueva conversación",
      "closeConversation": "Cerrar conversación",
      "copyText": "Copiar texto",
      "copyTextSuccess": "Copiado",
      "copyTextFailed": "Error al copiar",
      "forkSession": "Bifurcar sesión",
      "forkSessionSuccess": "Sesión bifurcada exitosamente",
      "forkSessionFailed": "Error al bifurcar la sesión: {error}",
      "exportConversation": "Exportar conversación",
      "exportImage": "Imagen",
      "exportMarkdown": "Markdown",
      "exportHtml": "HTML",
      "exportSuccess": "Conversación exportada",
      "exportFailed": "Error al exportar",
      "exportImageTooLong": "La conversación es demasiado larga para exportar como imagen",
      "exportLabels": {
        "untitledConversation": "Conversación sin título",
        "agent": "Agente",
        "model": "Modelo",
        "status": "Estado",
        "started": "Inicio",
        "updated": "Actualizado",
        "tokens": "Estadísticas de tokens",
        "duration": "Duración",
        "inputTokens": "Entrada",
        "outputTokens": "Salida",
        "cacheRead": "Caché leída",
        "cacheWrite": "Caché escrita",
        "user": "Usuario",
        "assistant": "Asistente",
        "system": "Sistema",
        "toolResult": "Resultado",
        "toolError": "Error"
      }
    },
    "conversationCard": {
      "untitledConversation": "Conversación sin título",
      "newConversation": "Nueva conversación",
      "rename": "Renombrar",
      "status": "Estado",
      "delete": "Eliminar",
      "importLocalSessions": "Importar sesiones locales",
      "importing": "Importando...",
      "renameConversation": "Renombrar conversación",
      "deleteConversationTitle": "¿Eliminar conversación?",
      "deleteConversationDescription": "Esto eliminará \"{title}\". Esta acción no se puede deshacer.",
      "cancel": "Cancelar",
      "save": "Guardar",
      "pin": "Fijar",
      "unpin": "Dejar de fijar",
      "markCompleted": "Marcar como completada",
      "reopen": "Reabrir"
    },
    "search": {
      "dialogTitle": "Buscar",
      "dialogTitleWithFolder": "Buscar — {name}",
      "tabConversations": "Conversaciones",
      "tabFiles": "Archivos",
      "placeholder": "Buscar conversaciones...",
      "filePlaceholder": "Buscar archivos o directorios...",
      "allAgents": "Todo",
      "searching": "Buscando...",
      "typeToSearch": "Escribe para buscar conversaciones",
      "typeToSearchFiles": "Escribe para buscar archivos o directorios",
      "noResults": "No se encontraron resultados.",
      "untitledConversation": "Conversación sin título"
    },
    "folderTitleBar": {
      "showSidebar": "Mostrar barra lateral",
      "hideSidebar": "Ocultar barra lateral",
      "toggleTerminal": "Alternar terminal",
      "toggleAuxPanel": "Alternar panel auxiliar",
      "search": "Buscar",
      "openSettings": "Abrir configuración",
      "withShortcut": "{label} (atajo: {shortcut})"
    },
    "statusBar": {
      "connection": {
        "connected": "Conectado",
        "connecting": "Conectando...",
        "prompting": "Respondiendo...",
        "error": "Error de conexión",
        "disconnected": "Desconectado",
        "tooltip": "{agent}: {status}",
        "tooltipError": "{agent}: {error}"
      },
      "tasks": {
        "title": "Tareas"
      },
      "alerts": {
        "title": "Alertas",
        "empty": "Sin alertas"
      },
      "stats": {
        "conversations": "{count} conversaciones",
        "summary": "{conversations} conversaciones / {messages} mensajes"
      },
      "tokens": {
        "contextWindowUsageAria": "Uso de la ventana de contexto",
        "contextWindow": "Ventana de contexto",
        "usedMax": "Usado / Máx",
        "tokenUsage": "Uso de tokens",
        "input": "Entrada",
        "output": "Salida",
        "cacheRead": "Lectura de caché",
        "cacheWrite": "Escritura de caché",
        "total": "Total de tokens"
      }
    },
    "auxPanel": {
      "tabs": {
        "files": "Archivos",
        "changes": "Cambios",
        "commits": "Confirmaciones"
      },
      "noFolderTitle": "No hay carpeta abierta",
      "noFolderHint": "Abre una carpeta para ver su contenido aquí"
    },
    "windowControls": {
      "minimizeWindow": "Minimizar ventana",
      "minimize": "Minimizar",
      "maximizeWindow": "Maximizar ventana",
      "maximize": "Maximizar",
      "restoreWindow": "Restaurar ventana",
      "restore": "Restaurar",
      "closeWindow": "Cerrar ventana",
      "close": "Cerrar"
    },
    "tabs": {
      "closeConversationTab": "Cerrar pestaña de conversación",
      "close": "Cerrar",
      "closeOthers": "Cerrar otros",
      "closeAll": "Cerrar todo",
      "tileDisplay": "Vista en mosaico",
      "untileDisplay": "Salir de mosaico"
    },
    "fileWorkspace": {
      "files": "Archivos",
      "closeFileTab": "Cerrar pestaña de archivo",
      "close": "Cerrar",
      "closeOthers": "Cerrar otros",
      "closeAll": "Cerrar todo",
      "preview": "Vista previa",
      "editSource": "Editar fuente",
      "maximize": "Maximizar",
      "restore": "Restaurar"
    },
    "terminal": {
      "rename": "Renombrar",
      "close": "Cerrar",
      "closeOthers": "Cerrar otros",
      "closeAll": "Cerrar todo",
      "hideTerminal": "Ocultar terminal ({shortcut})",
      "openFolderFirst": "Abre primero una carpeta"
    },
    "folderNameDropdown": {
      "fallbackFolderName": "Carpeta",
      "openFolder": "Abrir carpeta",
      "cloneRepository": "Clonar repositorio",
      "projectBoot": "Inicializador de proyecto",
      "opened": "Abierto",
      "recentOpen": "Abiertos recientemente"
    },
    "fileWorkspacePanel": {
      "viewDiff": "Ver Diff",
      "openFile": "Abrir archivo",
      "fileCount": "{count, plural, one {# archivo} other {# archivos}}",
      "openFileOrDiff": "Abre un archivo o diff desde el panel derecho",
      "disk": "Disco",
      "head": "HEAD (referencia)",
      "unsaved": "Sin guardar",
      "workingTree": "Árbol de trabajo",
      "loading": "Cargando...",
      "compareWithBranch": "{path} · comparar con {branch}",
      "hunkCount": "{count, plural, one {# bloque} other {# bloques}}",
      "prev": "Anterior",
      "next": "Siguiente",
      "jumpToLine": "Ir a la línea {line}",
      "noParsedDiffSections": "No hay secciones de diff analizadas",
      "loadingEditor": "Cargando editor...",
      "imageZoomIn": "Ampliar",
      "imageZoomOut": "Reducir",
      "imageZoomReset": "Restablecer zoom",
      "htmlPreviewTitle": "Vista previa HTML",
      "htmlPreviewTrust": "Habilitar scripts",
      "htmlPreviewTrustHint": "Ejecuta los scripts de este archivo y permite el acceso a la red. Actívalo solo para archivos de confianza."
    },
    "branchDropdown": {
      "toasts": {
        "commitCodeCompleted": "Commit de código completado",
        "pushCodeCompleted": "Push de código completado",
        "committedFiles": "{count, plural, one {# archivo confirmado} other {# archivos confirmados}}",
        "taskCompleted": "{label} completado",
        "taskFailed": "{label} falló",
        "mergeNoNewCommits": "{branchName} no tiene commits nuevos",
        "mergedCommits": "{count, plural, one {# commit fusionado} other {# commits fusionados}}",
        "allFilesUpToDate": "Todos los archivos están actualizados",
        "updatedFiles": "{count, plural, one {# archivo actualizado} other {# archivos actualizados}}",
        "openCommitWindowFailed": "No se pudo abrir la ventana de commit",
        "openPushWindowFailed": "Error al abrir la ventana de envío",
        "upstreamSet": "La rama upstream se ha configurado",
        "upstreamSetAndPushed": "Rama upstream configurada y se enviaron {count, plural, one {# commit} other {# commits}}",
        "noCommitsToPush": "No hay commits para enviar",
        "pushedCommits": "Se enviaron {count, plural, one {# commit} other {# commits}}",
        "switchedToFolder": "Cambiado a {name}",
        "switchFailed": "No se pudo cambiar de rama"
      },
      "tasks": {
        "newBranch": "Crear rama {name}",
        "newWorktree": "Crear worktree {name}",
        "checkoutTo": "Cambiar a {branchName}",
        "mergeBranch": "Fusionar {branchName}",
        "rebaseTo": "Rebase a {branchName}",
        "deleteRemoteBranch": "Eliminar rama remota {branchName}",
        "initGitRepo": "Inicializar repositorio Git",
        "pullCode": "Hacer pull del código",
        "fetchInfo": "Obtener información",
        "pushCode": "Enviar código",
        "stashChanges": "Guardar cambios en stash",
        "stashPop": "Aplicar stash",
        "deleteBranch": "Eliminar rama {branchName}"
      },
      "confirm": {
        "mergeTitle": "Fusionar rama",
        "rebaseTitle": "Rebase de rama",
        "mergeDescription": "¿Fusionar {branchName} en la rama actual {currentBranch}?",
        "rebaseDescription": "¿Hacer rebase de la rama actual {currentBranch} sobre {branchName}?",
        "deleteRemoteTitle": "Eliminar rama remota",
        "deleteRemoteDescription": "¿Eliminar la rama remota {branchName}? Esto la eliminará del repositorio remoto y no se puede deshacer.",
        "deleteTitle": "Eliminar rama",
        "deleteDescription": "¿Eliminar la rama {branchName}? Esta acción no se puede deshacer.",
        "forceDeleteTitle": "Forzar eliminación de rama",
        "forceDeleteDescription": "La rama {branchName} no está completamente fusionada. ¿Estás seguro de que quieres forzar su eliminación? Esta acción no se puede deshacer."
      },
      "current": "Actual",
      "switchToBranch": "Cambiar a esta rama",
      "mergeBranchIntoCurrent": "Fusionar {branchName} en {currentBranch}",
      "rebaseCurrentToBranch": "Rebase de {currentBranch} sobre {branchName}",
      "noBranch": "Sin rama",
      "initGitRepo": "Inicializar repositorio Git",
      "pullCode": "Hacer pull del código",
      "fetchRemoteBranches": "Obtener ramas remotas",
      "openCommitWindow": "Commit de código...",
      "pushCode": "Enviar...",
      "newBranch": "Nueva rama...",
      "newWorktree": "Nuevo worktree...",
      "stashChanges": "Guardar cambios...",
      "stashPop": "Aplicar stash...",
      "manageRemotes": "Gestionar remotos...",
      "localBranches": "Ramas locales ({count, plural, one {#} other {#}})",
      "noLocalBranches": "Sin ramas locales",
      "remoteBranches": "Ramas remotas ({count, plural, one {#} other {#}})",
      "noRemoteBranches": "Sin ramas remotas",
      "dialogs": {
        "newBranchTitle": "Nueva rama",
        "newBranchDescription": "Crear una nueva rama desde la rama actual {branch}",
        "branchNamePlaceholder": "Nombre de la rama",
        "newWorktreeTitle": "Nuevo worktree",
        "newWorktreeDescription": "Crear un nuevo worktree desde la rama actual {branch}",
        "branchNameLabel": "Nombre de la rama",
        "worktreePathLabel": "Ruta del worktree",
        "worktreePathPlaceholder": "Ruta del worktree",
        "manageRemotesTitle": "Gestionar remotos",
        "manageRemotesEmpty": "No hay remotos configurados",
        "remoteNamePlaceholder": "Nombre del remoto",
        "remoteUrlPlaceholder": "URL del remoto",
        "addRemote": "Añadir",
        "savingRemotes": "Guardando..."
      },
      "conflict": {
        "title": "Conflictos de fusión",
        "description": "Los siguientes archivos tienen conflictos que necesitan ser resueltos:",
        "abort": "Abortar fusión",
        "openMergeTool": "Abrir herramienta de fusión",
        "completeMerge": "Completar fusión",
        "abortSuccess": "Fusión abortada correctamente",
        "completeSuccess": "Fusión completada correctamente"
      },
      "stashDialog": {
        "title": "Guardar cambios en stash",
        "description": "Guardar los cambios actuales en el stash",
        "messageLabel": "Mensaje",
        "messagePlaceholder": "Mensaje del stash (opcional)",
        "keepIndex": "Mantener índice (los cambios preparados permanecen preparados)",
        "cancel": "Cancelar",
        "stash": "Guardar",
        "success": "Cambios guardados en stash",
        "error": "Error al guardar en stash"
      },
      "unstashDialog": {
        "title": "Aplicar stash",
        "noStashes": "No hay stashes",
        "selectFile": "Selecciona un archivo para ver diferencias",
        "viewDiff": "Ver diferencias",
        "original": "Original",
        "modified": "Modificado",
        "apply": "Aplicar",
        "drop": "Eliminar",
        "applySuccess": "Stash aplicado",
        "dropSuccess": "Stash eliminado",
        "confirmApply": "¿Aplicar stash {ref} al directorio de trabajo?",
        "cancel": "Cancelar"
      },
      "deleteBranch": "Eliminar rama"
    },
    "commitDialog": {
      "toasts": {
        "commitCompleted": "Commit de código completado",
        "pushFailed": "Error al enviar",
        "committedFiles": "{count, plural, one {# archivo confirmado} other {# archivos confirmados}}",
        "addedToVcs": "Añadido a VCS",
        "addToVcsFailed": "No se pudo añadir a VCS",
        "fileDeleted": "Archivo eliminado",
        "deleteFailed": "Error al eliminar",
        "fileRolledBack": "Archivo revertido",
        "rollbackFailed": "Error al revertir",
        "dirRolledBack": "Directorio revertido",
        "dirDeleted": "Directorio eliminado"
      },
      "confirm": {
        "deleteTitle": "Confirmar eliminación",
        "deleteDescription": "¿Eliminar el archivo \"{file}\"? Esta acción no se puede deshacer.",
        "rollbackTitle": "Confirmar reversión",
        "rollbackDescription": "¿Revertir el archivo \"{file}\" a HEAD? Se perderán los cambios sin guardar.",
        "rollbackDirDescription": "¿Revertir el directorio \"{dir}\" a HEAD? Los cambios no guardados se perderán.",
        "deleteDirDescription": "¿Eliminar el directorio \"{dir}\"? Esta acción no se puede deshacer."
      },
      "actions": {
        "select": "Seleccionar",
        "unselect": "Deseleccionar",
        "rollback": "Revertir",
        "addToVcs": "Añadir a VCS"
      },
      "aria": {
        "selectFile": "{action}: {path}",
        "unselectAllFiles": "Deseleccionar todos los archivos",
        "selectAllFiles": "Seleccionar todos los archivos",
        "unselectTracked": "Deseleccionar cambios rastreados",
        "selectTracked": "Seleccionar cambios rastreados",
        "unselectUntracked": "Deseleccionar archivos no rastreados",
        "selectUntracked": "Seleccionar archivos no rastreados"
      },
      "loading": "Cargando...",
      "selectionCount": "{selected} / {total} archivos",
      "emptyFiles": "No hay archivos cambiados",
      "trackedChanges": "Cambios rastreados ({count})",
      "untrackedFiles": "Archivos no rastreados ({count})",
      "commitMessage": "Mensaje de commit",
      "commitMessagePlaceholder": "Introduce el mensaje de commit...",
      "commitButton": "Confirmar ({count})",
      "commitAndPushButton": "Confirmar y enviar ({count})",
      "head": "HEAD",
      "workingTree": "Árbol de trabajo",
      "clickFileToDiff": "Haz clic en un nombre de archivo para ver diff",
      "loadingDiff": "Cargando diff..."
    },
    "pushWindow": {
      "title": "Enviar código",
      "noUnpushedCommits": "No hay commits sin enviar",
      "noRemoteConfigured": "No hay remoto Git configurado\nAñade uno en «Gestionar remotos»",
      "newBranchNoPushedCommits": "Nueva rama — enviar para crear rama de seguimiento remota",
      "unpushed": "Sin enviar",
      "selectFileToViewDiff": "Selecciona un archivo para ver las diferencias",
      "before": "Antes",
      "after": "Después",
      "push": "Enviar",
      "toasts": {
        "pushSuccess": "Envío exitoso",
        "pushFailed": "Error al enviar",
        "upstreamSet": "Se ha configurado la rama remota",
        "upstreamSetAndPushed": "Rama remota configurada y enviados {count} commits",
        "noCommitsToPush": "No hay commits para enviar",
        "pushedCommits": "Enviados {count} commits"
      }
    },
    "gitLogTab": {
      "filesTitle": "Archivos",
      "expandAllFiles": "Expandir todos los archivos",
      "collapseAllFiles": "Colapsar todos los archivos",
      "workspace": "espacio de trabajo",
      "retry": "Reintentar",
      "noCommitsFound": "No se encontraron commits",
      "notAGitRepoTitle": "No es un repositorio Git",
      "notAGitRepoHint": "Inicializa Git desde el menú de ramas superior, o abre un repositorio existente.",
      "hash": "Hash del commit",
      "copyHash": "Copiar hash",
      "copyMessage": "Copiar mensaje",
      "author": "Autor",
      "noFileChangeDetails": "No hay detalles de cambios de archivo disponibles.",
      "branchesTitle": "Ramas",
      "loadingBranches": "Cargando ramas...",
      "noContainingBranches": "No se encontraron ramas contenedoras.",
      "newBranch": "Nueva rama...",
      "resetToHere": "Resetear aquí",
      "resetDisabledReasonNotCurrentBranchView": "Disponible solo al ver la rama actual",
      "viewCommitDiffAria": "Ver diff del commit {hash}",
      "copyFullCommitHashAria": "Copiar hash completo del commit {hash}",
      "pushStatus": {
        "pushed": "Enviado al remoto",
        "notPushed": "No enviado al remoto",
        "unknown": "Estado de push desconocido (sin upstream configurado)"
      },
      "time": {
        "monthsAgo": "{count, plural, one {hace # mes} other {hace # meses}}",
        "daysAgo": "{count, plural, one {hace # día} other {hace # días}}",
        "hoursAgo": "{count, plural, one {hace # hora} other {hace # horas}}",
        "minsAgo": "{count, plural, one {hace # min} other {hace # mins}}",
        "justNow": "justo ahora"
      },
      "toasts": {
        "createdAndSwitchedNewBranch": "Nueva rama creada y activada",
        "newBranchFromCommit": "{name} (desde {shortHash})",
        "createBranchFailed": "No se pudo crear la rama",
        "openPushWindowFailed": "No se pudo abrir la ventana de envío",
        "resetSuccess": "Reset completado",
        "resetSuccessDescription": "{branch} se reseteó a {shortHash} con {mode}",
        "resetFailed": "Falló el reset"
      },
      "branchSelector": {
        "selectBranchPlaceholder": "Seleccionar rama...",
        "localBranches": "Ramas locales",
        "current": "Actual",
        "remoteBranches": "Ramas remotas",
        "refreshCommitHistory": "Actualizar historial de commits"
      },
      "dialogs": {
        "newBranchTitle": "Nueva rama",
        "newBranchDescription": "Crea una nueva rama con el commit {shortHash} como último commit.",
        "branchNamePlaceholder": "Nombre de la rama",
        "reset": {
          "title": "Resetear la rama actual hasta aquí",
          "branchLabel": "Rama",
          "targetLabel": "Commit objetivo",
          "messageLabel": "Mensaje",
          "modeLabel": "Modo de reset",
          "confirmButton": "Resetear",
          "modes": {
            "soft": {
              "label": "--soft",
              "description": "Mueve HEAD y el puntero de la rama actual al commit objetivo.\nMantiene Index y Working Tree sin cambios.\nLos cambios de los commits retirados permanecen en estado staged."
            },
            "mixed": {
              "label": "--mixed (predeterminado)",
              "description": "Mueve HEAD al commit objetivo.\nResetea Index al commit objetivo y mantiene los cambios en Working Tree.\nLos cambios pasan de staged a unstaged."
            },
            "hard": {
              "label": "--hard",
              "description": "Mueve HEAD y resetea tanto Index como Working Tree al commit objetivo.\nSe descartan los cambios locales rastreados posteriores al commit objetivo.\nEs una operación destructiva."
            },
            "keep": {
              "label": "--keep",
              "description": "Mueve HEAD al commit objetivo e intenta conservar los cambios locales.\nSolo se conservan cambios que no entren en conflicto.\nSi hay conflictos, el reset se aborta para proteger tu trabajo."
            }
          }
        }
      }
    },
    "gitChangesTab": {
      "workspace": "espacio de trabajo",
      "noChanges": "No hay cambios locales",
      "notAGitRepoTitle": "No es un repositorio Git",
      "notAGitRepoHint": "Inicializa Git desde el menú de ramas superior, o abre un repositorio existente.",
      "trackedChanges": "Cambios rastreados ({count})",
      "untrackedFiles": "Archivos no rastreados ({count})",
      "expandTracked": "Expandir cambios rastreados",
      "collapseTracked": "Colapsar cambios rastreados",
      "expandUntracked": "Expandir archivos no rastreados",
      "collapseUntracked": "Colapsar archivos no rastreados",
      "actions": {
        "commitCode": "Hacer commit del código",
        "rollback": "Revertir",
        "addToVcs": "Añadir a VCS",
        "delete": "Eliminar"
      },
      "toasts": {
        "noAddableFilesInDir": "No hay archivos cambiados en este directorio para añadir a VCS",
        "noRollbackFilesInDir": "No hay archivos cambiados en este directorio para revertir",
        "addedToVcs": "Se añadió {name} a VCS",
        "addToVcsFailed": "No se pudo añadir a VCS",
        "openCommitWindowFailed": "No se pudo abrir la ventana de commit",
        "rolledBack": "Se revirtió {name}",
        "rollbackFailed": "Error al revertir",
        "addedFilesToVcs": "Se añadieron {count, plural, one {# archivo} other {# archivos}} a VCS",
        "rolledBackFiles": "Se revirtieron {count, plural, one {# archivo} other {# archivos}}",
        "deleted": "Se eliminó {name}",
        "deleteFailed": "Error al eliminar",
        "deletedFiles": "Se eliminaron {count} archivos",
        "noDeletableFilesInDir": "No hay archivos modificados en este directorio que se puedan eliminar"
      },
      "directoryDialog": {
        "descriptionAdd": "Selecciona archivos bajo el directorio {path} para añadir a VCS.",
        "descriptionRollback": "Selecciona archivos bajo el directorio {path} para revertir.",
        "descriptionDelete": "Selecciona archivos bajo el directorio {path} para eliminar. Esta acción no se puede deshacer.",
        "descriptionFallback": "Selecciona archivos para continuar.",
        "selectionCount": "Seleccionados {selected} / {total} archivos",
        "selectAll": "Seleccionar todo",
        "unselectAll": "Deseleccionar todo",
        "loadingCandidates": "Cargando cambios del directorio...",
        "noOperableFiles": "No hay archivos operables"
      },
      "rollbackConfirm": {
        "title": "Confirmar reversión",
        "descriptionWithTarget": "¿Revertir cambios locales de {kind} \"{name}\"?",
        "descriptionFallback": "¿Revertir cambios locales?",
        "kindDirectory": "directorio",
        "kindFile": "archivo"
      },
      "deleteConfirm": {
        "title": "Confirmar eliminación",
        "descriptionWithTarget": "¿Eliminar {kind} \"{name}\"? Esta acción no se puede deshacer.",
        "descriptionFallback": "Esta acción no se puede deshacer.",
        "kindDirectory": "directorio",
        "kindFile": "archivo"
      }
    },
    "tabContext": {
      "loadingConversation": "Cargando...",
      "untitledConversation": "Conversación sin título",
      "newConversation": "Nueva conversación"
    },
    "fileTreeTab": {
      "workspace": "Espacio de trabajo",
      "retry": "Reintentar",
      "git": "Git",
      "openInFileManager": "Abrir en el gestor de archivos",
      "openInFinder": "Abrir en Finder",
      "openInExplorer": "Abrir en Explorer",
      "attachToCurrentSession": "Agregar a la sesión",
      "compareWithBranch": "Comparar con rama...",
      "reloadFromDisk": "Recargar desde disco",
      "new": "Nuevo",
      "newFile": "Archivo",
      "newDirectory": "Directorio",
      "openIn": "Abrir en",
      "openInTerminal": "Abrir en terminal",
      "copyPath": "Copiar ruta",
      "upload": "Subir archivos/carpeta",
      "download": "Descargar archivo",
      "downloadAsZip": "Descargar como ZIP",
      "actions": {
        "select": "Seleccionar",
        "unselect": "Deseleccionar",
        "commitCode": "Confirmar código",
        "rollback": "Revertir",
        "addToVcs": "Añadir a VCS"
      },
      "aria": {
        "selectPath": "{action}: {path}"
      },
      "toasts": {
        "openDirectoryFailed": "No se pudo abrir el directorio",
        "openBuiltinTerminalFailed": "No se pudo abrir la terminal integrada",
        "openCommitWindowFailed": "No se pudo abrir la ventana de commit",
        "noAddableFilesInDir": "No hay archivos modificados en este directorio que se puedan añadir a VCS",
        "noRollbackFilesInDir": "No hay archivos modificados en este directorio que se puedan revertir",
        "addedToVcs": "Se añadió {name} a VCS",
        "addToVcsFailed": "No se pudo añadir a VCS",
        "loadBranchesFailed": "No se pudieron cargar las ramas",
        "renameFailed": "Error al renombrar",
        "deleteFailed": "Error al eliminar",
        "rolledBack": "Se revirtió {name}",
        "rollbackFailed": "Error al revertir",
        "addedFilesToVcs": "{count, plural, one {Se añadió # archivo a VCS} other {Se añadieron # archivos a VCS}}",
        "rolledBackFiles": "{count, plural, one {Se revirtió # archivo} other {Se revirtieron # archivos}}",
        "savedAsCopy": "Guardado como copia",
        "saveCopyFailed": "No se pudo guardar como copia",
        "watchStartFailed": "No se pudo iniciar la vigilancia de archivos",
        "createFailed": "Error al crear",
        "downloadFailed": "No se pudo descargar {name}",
        "downloadSaved": "{name} descargado",
        "pathCopied": "Ruta copiada",
        "copyPathFailed": "No se pudo copiar la ruta"
      },
      "createDialog": {
        "newFile": "Nuevo archivo",
        "newDirectory": "Nuevo directorio",
        "description": "Ingrese un nombre para el nuevo {kind}.",
        "placeholderFile": "file-name.ext",
        "placeholderDirectory": "folder-name"
      },
      "renameDialog": {
        "renameDirectory": "Renombrar directorio",
        "renameFile": "Renombrar archivo",
        "description": "Introduce un nuevo nombre (solo nombre, sin ruta).",
        "placeholderDirectory": "nuevo-nombre-carpeta",
        "placeholderFile": "nuevo-nombre-archivo.ext"
      },
      "uploadDialog": {
        "title": "Subir al área de trabajo",
        "description": "Ajusta el destino si es necesario y añade archivos o carpetas.",
        "workspaceRoot": "raíz del área de trabajo",
        "targetPathLabel": "Subir a",
        "targetPathHint": "Ruta resuelta: {path}",
        "dropHint": "Arrastra archivos o carpetas aquí, o usa los botones de abajo",
        "dropHintActive": "Suelta para añadir a la cola",
        "selectFiles": "Seleccionar archivos",
        "selectFolder": "Seleccionar carpeta",
        "startUpload": "Iniciar subida",
        "clearQueue": "Limpiar finalizados",
        "removeItem": "Quitar de la cola",
        "retry": "Reintentar",
        "dropZoneAria": "Suelta archivos aquí o activa para examinar",
        "folderEmpty": "No se encontraron archivos en la carpeta soltada",
        "summary": "Total: {total} · Con éxito: {succeeded} · Con error: {failed}",
        "status": {
          "pending": "En espera",
          "uploading": "Subiendo",
          "success": "Completado",
          "error": "Falló",
          "cancelled": "Cancelado"
        }
      },
      "directoryDialog": {
        "descriptionAdd": "Selecciona archivos del directorio {path} para añadir a VCS.",
        "descriptionRollback": "Selecciona archivos del directorio {path} para revertir.",
        "descriptionFallback": "Selecciona archivos para continuar.",
        "selectionCount": "Seleccionados {selected} / {total} archivos",
        "selectAll": "Seleccionar todo",
        "unselectAll": "Deseleccionar todo",
        "loadingCandidates": "Cargando cambios del directorio...",
        "noOperableFiles": "No hay archivos operables"
      },
      "compareDialog": {
        "title": "Comparar con rama",
        "descriptionWithTarget": "Selecciona una rama y compara con {kind} {path}",
        "descriptionFallback": "Selecciona una rama para comparar.",
        "kindDirectory": "directorio",
        "kindFile": "archivo",
        "filterPlaceholder": "Filtra ramas, p. ej. main / origin/main",
        "singleClickHint": "Haz clic en una rama para comparar directamente",
        "loadingBranches": "Cargando ramas...",
        "recentBranches": "Ramas recientes ({count})",
        "noCurrentBranch": "Sin rama actual",
        "localBranches": "Ramas locales ({count})",
        "remoteBranches": "Ramas remotas ({count})",
        "noMatchingBranches": "No hay ramas coincidentes"
      },
      "externalConflictDialog": {
        "title": "Se detectaron cambios externos en archivos",
        "descriptionWithPath": "El archivo {path} cambió en disco y las ediciones actuales no están guardadas.",
        "descriptionFallback": "El archivo actual cambió en disco y las ediciones actuales no están guardadas.",
        "compare": "Comparar",
        "savingCopy": "Guardando copia...",
        "saveAsCopy": "Guardar como copia",
        "reload": "Recargar"
      },
      "deleteConfirm": {
        "title": "Confirmar eliminación",
        "descriptionWithTarget": "¿Eliminar {kind} \"{name}\"? Esta acción no se puede deshacer.",
        "descriptionFallback": "Esta acción no se puede deshacer.",
        "kindDirectory": "directorio",
        "kindFile": "archivo"
      },
      "rollbackConfirm": {
        "title": "Confirmar reversión",
        "descriptionWithTarget": "¿Revertir cambios locales del archivo \"{name}\"?",
        "descriptionFallback": "¿Revertir cambios locales de este archivo?"
      },
      "terminalTitle": "Consola · {name}"
    },
    "commandDropdown": {
      "loading": "Cargando...",
      "addCommand": "Agregar comando",
      "manageCommands": "Gestionar comandos...",
      "runCommandTitle": "Ejecutar: {command}",
      "stopCommandTitle": "Detener: {command}",
      "manageDialog": {
        "title": "Gestionar comandos",
        "empty": "Aún no hay comandos",
        "namePlaceholder": "Nombre",
        "commandPlaceholder": "Comando",
        "add": "Agregar",
        "saving": "Guardando..."
      }
    },
    "workspaceContext": {
      "confirmCloseDirtyTab": "¿Cerrar \"{title}\" sin guardar?",
      "confirmCloseOtherDirtyTabs": "¿Cerrar otras pestañas con cambios sin guardar?",
      "confirmCloseAllDirtyTabs": "¿Cerrar todas las pestañas con cambios sin guardar?",
      "unableLoadContent": "No se puede cargar el contenido.\n\n{message}",
      "previewRequestTimedOut": "La solicitud de vista previa agotó el tiempo",
      "diffRequestTimedOut": "La solicitud de Diff agotó el tiempo",
      "branchCompareRequestTimedOut": "La solicitud de comparación de ramas agotó el tiempo",
      "commitDiffRequestTimedOut": "La solicitud de Diff de commit agotó el tiempo",
      "saveRequestTimedOut": "La solicitud de guardado agotó el tiempo",
      "reloadRequestTimedOut": "La solicitud de recarga agotó el tiempo",
      "noChanges": "Sin cambios.",
      "noDiffOutput": "Sin salida de diff.",
      "diffTitleWorkspace": "Diferencias · Espacio de trabajo",
      "diffDescriptionWorkingTree": "Árbol de trabajo (HEAD)",
      "diffTitleFile": "Diferencias · {name}",
      "compareTitleFile": "Comparar · {name}",
      "compareTitleBranch": "Comparar · {branch}",
      "compareDescriptionPath": "{path} · comparar con {branch}",
      "compareDescriptionBranch": "comparar con {branch}",
      "diffTitleCommitFile": "Diferencias · {name} @ {hash}",
      "diffTitleCommit": "Diferencias · {hash}",
      "diffDescriptionCommitPath": "{path} · confirmación {commit}",
      "diffDescriptionCommit": "confirmación {commit}",
      "diffTitleConflictFile": "Conflicto · {name}",
      "diffDescriptionConflict": "{path} · disco vs sin guardar"
    },
    "chat": {
      "acpConnections": {
        "actions": {
          "openAgentsSettings": "Abrir ajustes de agentes",
          "retry": "Reintentar"
        },
        "agentsSetupHint": "Abre Ajustes > Agentes para gestionar la instalación.",
        "withSetupHint": "{message}\n{hint}",
        "blocked": {
          "missingConfig": "No se puede leer la configuración actual del agente.",
          "disabled": "{agent} está deshabilitado en Ajustes de agentes. Actívalo antes de conectar.",
          "unavailable": "{agent} no está disponible en la plataforma actual.",
          "sdkMissing": "El SDK de {agent} no está instalado"
        },
        "backendErrors": {
          "initializeTimeout": "Se agotó el tiempo del handshake de conexión de {agent} (sin respuesta tras 60 segundos). Abre Ajustes para revisar la configuración del agente y de la red.",
          "processExited": "El proceso de {agent} terminó inesperadamente.",
          "spawnFailed": "No se pudo iniciar {agent}: {message}",
          "downloadFailed": "La descarga de {agent} falló: {message}",
          "sessionLoadResourceNotFound": "Error al cargar la sesión de {agent}. Recarga para reintentar o inicia una nueva conversación.",
          "turnFailedRefusal": "{agent} rechazó continuar este turno. Suele indicar un error de backend o pasarela. Revisa los registros del agente.",
          "turnFailedMaxTokens": "{agent} alcanzó el límite máximo de tokens para este turno.",
          "turnFailedMaxTurnRequests": "{agent} alcanzó el número máximo de solicitudes permitidas para este turno.",
          "turnFailedUnknown": "{agent} finalizó el turno con un motivo de parada no reconocido.",
          "turnFailedEmpty": "{agent} finalizó el turno sin producir ninguna respuesta. Revisa la configuración del agente."
        },
        "unableReadAgentConfig": "No se puede leer la configuración del agente: {message}",
        "connectFailedTitle": "Falló la conexión de {agent}",
        "toolFallbackTitle": "Herramienta",
        "eventErrorTitle": "Error del agente",
        "notificationTurnComplete": "{agent} ha terminado de responder",
        "notificationError": "{agent} error: {message}",
        "claudeApiRetry": {
          "fallbackError": "authentication_failed",
          "retryingWithMax": "reintentando {attempt}/{max}",
          "retryingAttempt": "reintentando intento {attempt}",
          "retrying": "reintentando",
          "nextRetryIn": "siguiente en {seconds}s",
          "line": "{error}{status} · {retry}",
          "lineWithDelay": "{error}{status} · {retry}, {delay}",
          "httpStatus": " (HTTP {status})"
        }
      },
      "connectionLifecycle": {
        "tasks": {
          "connectingTitle": "Conectando con {agent}",
          "connectingDescription": "Estableciendo conexión",
          "loadingSelectorsTitle": "Cargando selectores de {agent}",
          "loadingSelectorsDescription": "Obteniendo opciones de modo y configuración de sesión",
          "initSessionTitle": "Initializing {agent} session",
          "initSessionDescription": "Creating session and loading configuration"
        },
        "errors": {
          "connectionFailed": "Conexión fallida"
        }
      },
      "shared": {
        "attachedResources": "Recursos adjuntos",
        "toolCallFailed": "Falló la llamada de herramienta"
      },
      "messageThread": {
        "emptyTitle": "Aún no hay mensajes",
        "emptyDescription": "Inicia una conversación para ver mensajes aquí"
      },
      "chatInput": {
        "connecting": "Conectando...",
        "agentResponding": "{agent} está respondiendo...",
        "sendMessage": "Enviar un mensaje..."
      },
      "messageInput": {
        "askAnything": "Pregunta lo que sea...",
        "removeAttachmentAria": "Quitar {name}",
        "attachFiles": "Adjuntar archivos",
        "addActions": "Añadir",
        "quickMessages": "Mensajes rápidos",
        "quickMessagesEmpty": "Aún no hay mensajes rápidos",
        "quickMessagesLoading": "Cargando...",
        "quickMessageUntitled": "Sin título",
        "liveFeedback": "Comentarios en vivo",
        "liveFeedbackDisabledHint": "Disponible mientras el agente trabaja",
        "dropFilesToAttach": "Suelta archivos para adjuntar",
        "loadingSettings": "Cargando ajustes...",
        "loadingMode": "Cargando modo...",
        "modeLabel": "Modo",
        "agentSettings": "Ajustes del agente",
        "cancel": "Cancelar",
        "send": "Enviar",
        "forkAndSend": "Fork y Enviar",
        "slashCommands": "Comandos de barra",
        "expertSkills": "Habilidades de expertos",
        "expertsEmptyForAgent": "Este agente no tiene expertos habilitados. Actívalos en Configuración > Expertos.",
        "slashSearchPlaceholder": "Buscar comandos...",
        "slashSearchEmpty": "Sin comandos coincidentes",
        "attachLocalUpload": "Subir archivo local",
        "attachServerFile": "Seleccionar archivo del servidor",
        "attachUploadTooLarge": "{names} supera el límite de carga de {limit}MB y se omitió.",
        "attachUploadFailed": "Error al subir {names}.",
        "attachUploadNotAFile": "{names} no es un archivo regular (directorio o archivo especial) y se omitió.",
        "attachUploadQuotaExceeded": "El servidor se quedó sin espacio para subidas; no se pudo cargar {names}."
      },
      "messageQueue": {
        "addToQueue": "Agregar a la cola",
        "saveEdit": "Guardar",
        "cancelEdit": "Cancelar edición",
        "editItem": "Editar",
        "deleteItem": "Eliminar"
      },
      "welcomeInputPanel": {
        "agentsSettingsPath": "Ajustes > Agentes",
        "autoConnectFallback": "Haz clic para abrir {path} y gestionar la instalación.",
        "autoConnectAppend": "{message}. Haz clic para abrir {path} y gestionar la instalación.",
        "enableAgentFirstPlaceholder": "Habilita al menos un agente antes de iniciar una sesión...",
        "prepareSessionFailed": "No se pudo preparar la sesión de chat. Inténtalo de nuevo.",
        "createConversationFailed": "No se pudo crear la conversación. Inténtalo de nuevo.",
        "askAnythingPlaceholder": "Pregunta lo que sea..."
      },
      "welcomePanel": {
        "greeting": "¿Qué te gustaría <highlight>hacer hoy</highlight>?",
        "tips": {
          "tileTabs": "Haz clic derecho en una pestaña de conversación y elige Vista en mosaico para comparar varias sesiones lado a lado.",
          "pinTab": "Haz doble clic en una pestaña de conversación para fijarla y que una sesión nueva no la reemplace automáticamente.",
          "shortcutsNewSearch": "<shortcut>{newConversation}</shortcut> abre una conversación nueva, <shortcut>{searchConversations}</shortcut> busca en el historial.",
          "slashAtMention": "Escribe / en la entrada para activar comandos slash, o @ para referenciar un archivo del proyecto.",
          "pasteDropFiles": "Pega una captura de pantalla o arrastra un archivo a la entrada para adjuntarlo.",
          "queueMessage": "Mientras el agente responde, sigue escribiendo: tu próximo mensaje se pone en cola y se envía al terminar.",
          "draftAutoSave": "Los borradores sin enviar se guardan automáticamente por conversación y se restauran al volver.",
          "forkSend": "El desplegable del botón de enviar incluye Bifurcar y enviar, que ramifica desde el punto actual a una pestaña nueva.",
          "exportConversation": "Haz clic derecho dentro de la conversación para exportarla como Markdown, HTML o imagen.",
          "chatChannels": "Conecta Telegram / Lark / WeChat en Ajustes → Canales de chat para continuar desde el móvil.",
          "shortcutsAuxPanel": "<shortcut>{toggleAuxPanel}</shortcut> alterna el panel derecho para ver los archivos tocados y los cambios de Git de esta sesión.",
          "shortcutsTerminalSidebar": "<shortcut>{toggleTerminal}</shortcut> abre la terminal integrada, <shortcut>{toggleSidebar}</shortcut> alterna la barra lateral.",
          "customShortcuts": "Todos los atajos se pueden reasignar en Ajustes → Atajos.",
          "webService": "Activa Ajustes → Servicio web para que tu equipo acceda al mismo codeg desde un navegador.",
          "fusionMode": "Abre un archivo o diff para mostrarlo automáticamente junto a la conversación.",
          "quickMessages": "Abre el botón + junto a la entrada y elige Mensajes rápidos para insertar un fragmento guardado (gestiónalos en Ajustes → Mensajes rápidos).",
          "experts": "El botón + tiene un menú Habilidades expertas: carga roles como Depuración o Planificación con un clic."
        }
      },
      "agentSelector": {
        "noEnabledAgents": "No hay agentes habilitados",
        "openAgentsSettings": "Abrir ajustes de agentes"
      },
      "subAgentOverlay": {
        "title": "Subagentes",
        "collapsedSummary": "Subagentes {count}",
        "collapseAria": "Contraer subagentes"
      },
      "agentPlanOverlay": {
        "title": "Plan del agente",
        "collapsePlanAria": "Contraer plan",
        "collapsedSummary": "Plan de trabajo {completed}/{total}",
        "status": {
          "completed": "Completado",
          "inProgress": "En progreso",
          "pending": "Pendiente",
          "unknown": "Desconocido"
        },
        "priority": {
          "high": "Alta",
          "medium": "Media",
          "low": "Baja",
          "unknown": "Desconocida"
        }
      },
      "permissionDialog": {
        "subtitle": "El agente solicita permiso para continuar este turno.",
        "kindFallbackTool": "herramienta",
        "command": "Comando",
        "cwd": "Directorio de trabajo: {cwd}",
        "filesSummary": "Archivos: {count}",
        "moreFiles": "+{count} archivos más",
        "plan": "Plan de trabajo",
        "allowedActions": "Acciones permitidas",
        "targetMode": "Modo objetivo: {mode}"
      },
      "questionDialog": {
        "title": "El agente está haciendo una pregunta",
        "placeholder": "Escribe tu respuesta...",
        "send": "Enviar"
      },
      "messageBranch": {
        "previousBranchAria": "Rama anterior",
        "nextBranchAria": "Rama siguiente",
        "pageOf": "{current} de {total}"
      },
      "terminal": {
        "title": "Consola",
        "running": "En ejecución"
      },
      "reasoning": {
        "thinking": "Pensando…",
        "thoughtForFewSeconds": "Pensamiento",
        "thoughtForSeconds": "Pensamiento"
      },
      "linkSafety": {
        "errorCannotOpen": "No se puede abrir el archivo local",
        "errorNoWorkspace": "No hay ninguna carpeta de espacio de trabajo activa.",
        "errorOutsideWorkspace": "El archivo está fuera de la carpeta del espacio de trabajo actual.",
        "errorFailedOpen": "Error al abrir el archivo local",
        "errorFailedLink": "Error al abrir el enlace",
        "errorUnsupportedLinkProtocol": "Este protocolo de enlace no es compatible."
      },
      "messageList": {
        "attachedResources": "Recursos adjuntos",
        "loading": "Cargando...",
        "error": "Error del chat: {message}",
        "errorTitle": "Error al cargar la sesión",
        "errorActionReload": "Recargar",
        "errorActionNewSession": "Nueva conversación",
        "emptyConversation": "No hay mensajes en esta conversación.",
        "systemMessage": "Mensaje del sistema",
        "copyMessage": "Copiar",
        "copied": "Copiado",
        "downloadImage": "Descargar imagen",
        "downloadFailed": "Descarga fallida: {message}",
        "imageGeneration": "Generación de imágenes",
        "imageGenerationPending": "Generando imagen…",
        "imageGenerationFailed": "Error al generar la imagen",
        "model": "Modelo",
        "tokenStats": "Uso de tokens",
        "tokenInput": "Entrada",
        "tokenOutput": "Salida",
        "tokenCacheRead": "Lectura de caché",
        "tokenCacheWrite": "Escritura de caché",
        "duration": "Duración",
        "completedAt": "Completado a las",
        "jumpToPreviousUserMessage": "Ir al mensaje del usuario"
      },
      "liveTurnStats": {
        "thinking": "Pensando...",
        "streaming": "Transmitiendo",
        "elapsedHours": "{value} h",
        "elapsedMinutes": "{value} min",
        "elapsedSeconds": "{value} s",
        "toolUseCount": "{count} herramienta {count, plural, one {use} other {uses}}"
      },
      "tool": {
        "parameters": "Parámetros",
        "error": "Error de herramienta",
        "result": "Resultado",
        "status": {
          "approvalRequested": "Esperando aprobación",
          "approvalResponded": "Respondido",
          "inputAvailable": "En ejecución",
          "inputStreaming": "Pendiente",
          "outputAvailable": "Completado",
          "outputDenied": "Denegado",
          "outputError": "Error de salida"
        }
      },
      "toolCallBlock": {
        "tool": "Herramienta",
        "error": "Error de ejecución",
        "result": "Resultado"
      },
      "delegation": {
        "subAgentRunning": "Subagente en ejecución…",
        "noDetail": "No detail available yet.",
        "unknownAgent": "Sub-agente",
        "openDetail": "Ver conversación",
        "detailTitle": "Conversación del subagente",
        "detailDescription": "Vista de solo lectura de la conversación del subagente delegado.",
        "waitForResult": "Esperando el resultado de la tarea {task}",
        "waitForResultNoTask": "Esperando el resultado de la tarea",
        "cancelTask": "Cancelando la tarea {task}",
        "cancelTaskNoTask": "Cancelando la tarea",
        "resultPageOf": "{current} / {total}",
        "prevResult": "Resultado anterior",
        "nextResult": "Resultado siguiente",
        "noResultText": "Sin resultado en esta comprobación.",
        "status": {
          "starting": "iniciando",
          "running": "en curso",
          "checked": "consultado",
          "waiting": "esperando aprobación",
          "ok": "completado",
          "err": {
            "default": "fallido",
            "delegation_disabled": "deshabilitado",
            "depth_limit": "límite de profundidad",
            "invalid_agent_type": "agente inválido",
            "spawn_failed": "fallo al iniciar",
            "send_failed": "fallo al enviar",
            "timeout": "tiempo agotado",
            "canceled": "cancelado",
            "child_refusal": "subagente rechazó",
            "child_max_tokens": "subagente: límite de tokens",
            "child_max_turn_requests": "subagente: límite de solicitudes",
            "child_empty": "subagente sin salida",
            "child_unknown": "subagente: error",
            "unknown": "tarea desconocida"
          }
        }
      },
      "contentParts": {
        "showingTailOutput": "Mostrando la salida final durante el streaming para mejorar el rendimiento.",
        "result": "Resultado",
        "unknown": "desconocido",
        "inputTruncated": "La entrada fue truncada — el diff puede estar incompleto.",
        "replaceAll": "REEMPLAZAR TODO",
        "filesCount": "Archivos: {count}",
        "update": "actualizar",
        "moreFiles": "+{count} archivos más",
        "timeoutMs": "Tiempo de espera: {timeout}ms",
        "backgroundTrue": "Segundo plano: true",
        "offset": "Desplazamiento: {offset}",
        "limit": "Límite: {limit}",
        "pages": "Páginas: {pages}",
        "mode": "Modo: {mode}",
        "cell": "Celda: {cell}",
        "pathLabel": "Ruta:",
        "globLabel": "Patrón glob:",
        "typeLabel": "Tipo:",
        "outputLabel": "Salida:",
        "caseInsensitive": "Sin distinguir mayúsculas/minúsculas",
        "multiline": "Multilínea",
        "promptLabel": "Instrucción",
        "subjectLabel": "Asunto",
        "taskLabel": "Tarea",
        "nameLabel": "Nombre:",
        "agentPromptLabel": "Instrucción",
        "agentModelLabel": "Modelo",
        "agentRunning": "Ejecutando...",
        "agentFallbackTitle": "Iniciando subagente…",
        "agentStatsBash": "Comandos",
        "agentStatsRead": "Archivos leídos",
        "agentStatsSearch": "Búsquedas",
        "agentStatsEdit": "Ediciones",
        "agentStatsOther": "Otros",
        "goal": {
          "title": "Objetivo:",
          "titleWithStatus": "Objetivo {status}",
          "objective": "Objetivo",
          "statusLabel": "Estado",
          "tokensUsed": "Tokens usados",
          "budget": "Presupuesto",
          "remaining": "Restante",
          "elapsed": "Transcurrido",
          "tokens": "tokens",
          "status": {
            "active": "activo",
            "paused": "pausado",
            "blocked": "bloqueado",
            "usageLimited": "uso limitado",
            "budgetLimited": "presupuesto limitado",
            "complete": "completo"
          }
        },
        "field": {
          "file": "Archivo",
          "notebook": "Cuaderno",
          "command": "Comando",
          "old": "Anterior",
          "new": "Nuevo",
          "pattern": "Patrón",
          "path": "Ruta",
          "query": "Consulta",
          "url": "URL:",
          "description": "Descripción",
          "content": "Contenido",
          "source": "Fuente",
          "prompt": "Instrucción",
          "subject": "Asunto",
          "taskId": "ID de tarea",
          "status": "Estado",
          "skill": "Skill",
          "args": "Argumentos",
          "offset": "Desplazamiento",
          "limit": "Límite",
          "glob": "Patrón glob",
          "type": "Tipo",
          "output": "Salida",
          "replaceAll": "Reemplazar todo",
          "language": "Idioma",
          "timeout": "Tiempo de espera",
          "background": "Segundo plano",
          "agentType": "Tipo de agente",
          "library": "Biblioteca",
          "libraryId": "ID de biblioteca"
        },
        "title": {
          "edit": "Editar",
          "command": "Comando",
          "todoWrite": "TodoWrite (actualización de tareas)",
          "read": "Leer",
          "write": "Escribir",
          "notebookEdit": "NotebookEdit (edición de cuaderno)",
          "editFiles": "Editar ({count} archivos)",
          "editWithTarget": "Editar {target}",
          "readWithTarget": "Leer {target}",
          "writeWithTarget": "Escribir {target}",
          "notebookEditWithTarget": "NotebookEdit ({target})",
          "globWithPattern": "Patrón glob {pattern}",
          "grepWithPattern": "Patrón grep {pattern}",
          "taskCreateWithSubject": "Crear tarea: {subject}",
          "taskUpdateWithStatus": "Actualizar tarea #{id} -> {status}",
          "taskUpdate": "Actualizar tarea #{id}",
          "webFetchWithUrl": "WebFetch ({url})",
          "webSearchWithQuery": "Búsqueda web: {query}",
          "todosProgress": "Tareas ({done}/{total})",
          "skillWithName": "Skill: {name}",
          "genericWithContext": "{tool} ({context})"
        },
        "toolGroup": {
          "search": "{count, plural, one {Exploró # búsqueda} other {Exploró # búsquedas}}",
          "command": "{count, plural, one {Ejecutó # comando} other {Ejecutó # comandos}}",
          "read": "{count, plural, one {Leyó archivos # vez} other {Leyó archivos # veces}}",
          "memory": "{count, plural, one {Recordó # memoria} other {Recordó # memorias}}",
          "edit": "{count, plural, one {Editó archivos # vez} other {Editó archivos # veces}}",
          "fetch": "{count, plural, one {Recuperó # recurso} other {Recuperó # recursos}}",
          "think": "{count, plural, one {Pensó # vez} other {Pensó # veces}}",
          "todo": "{count, plural, one {Actualizó # tarea} other {Actualizó # tareas}}",
          "task": "{count, plural, one {Ejecutó # tarea} other {Ejecutó # tareas}}",
          "other": "{count, plural, one {Usó # herramienta} other {Usó # herramientas}}",
          "errorSuffix": "{count, plural, one {# falló} other {# fallaron}}",
          "joiner": " · "
        }
      },
      "messageNav": {
        "title": "Navegación de mensajes",
        "collapse": "Contraer navegación de mensajes",
        "collapsedSummary": "Mensajes {count}",
        "fileCount": "{count, plural, one {# archivo} other {# archivos}}",
        "remove": "Quitar",
        "noDiffDataAvailable": "No hay datos de diff disponibles para {filePath}"
      },
      "askQuestion": {
        "title": "El agente necesita tu elección",
        "subtitle": "Responde y luego envía. Puedes omitir en cualquier momento.",
        "recommended": "Recomendado",
        "other": "Otro",
        "otherPlaceholder": "Escribe tu respuesta…",
        "singleSelect": "Única",
        "multiSelect": "Múltiple",
        "skip": "Omitir",
        "next": "Siguiente",
        "submit": "Enviar",
        "submitError": "No se pudo enviar. Inténtalo de nuevo."
      },
      "feedbackCheckResult": {
        "count": "{count, plural, =1 {1 comentario} other {# comentarios}}",
        "expand": "Mostrar todos los comentarios",
        "collapse": "Contraer",
        "errorTitle": "Error al comprobar los comentarios"
      },
      "askQuestionResult": {
        "title": "Pregunta",
        "answeredLabel": "Pregunta y respuesta:",
        "awaiting": "Esperando tu respuesta…",
        "declined": "Descartaste esto: el agente usó su propio criterio.",
        "noSelection": "Sin selección"
      },
      "configStale": {
        "agentConfigTitle": "Configuración del agente actualizada",
        "modelProviderTitle": "Proveedor de modelo actualizado",
        "description": "Esta sesión sigue usando su configuración anterior. Vuelve a conectarte para aplicarla (se conserva el historial de la conversación).",
        "reconnect": "Reconectar para aplicar",
        "reconnecting": "Reconectando…",
        "reconnectDisabledDuringTurn": "Disponible cuando termine el turno actual",
        "dismiss": "Descartar",
        "reconnectFailed": "No se pudo reconectar la sesión",
        "applied": "Nueva configuración aplicada"
      }
    },
    "diffPreview": {
      "mode": {
        "added": "Añadido",
        "deleted": "Eliminado",
        "renamed": "Renombrado",
        "modified": "Modificado"
      },
      "hunkLabel": "Bloque {index}",
      "loadingHunk": "Cargando hunk...",
      "noDiffData": "Sin datos de diff"
    },
    "conversationContextBar": {
      "folderTitle": "Carpeta de trabajo",
      "branchTitle": "Rama de trabajo",
      "searchFolder": "Search folder...",
      "searchBranch": "Search branch...",
      "noFolders": "No folders",
      "noBranches": "No branches",
      "noBranch": "(no branch)",
      "chatModeLabel": "Modo sin carpeta",
      "commit": "Commit",
      "push": "Push",
      "merge": "Merge",
      "toasts": {
        "folderChanged": "Switched to {name}",
        "openFolderFailed": "Failed to open folder",
        "switchedToChatMode": "Cambiado al modo de chat",
        "openStashFailed": "Failed to open stash window",
        "openMergeFailed": "Failed to open merge window"
      }
    },
    "cloneDialog": {
      "title": "Clonar repositorio",
      "repositoryUrl": "URL del repositorio",
      "repositoryUrlPlaceholder": "https://github.com/user/repo.git",
      "directory": "Directorio",
      "directoryPlaceholder": "Selecciona el directorio de destino...",
      "browseDirectory": "Explorar directorio",
      "cancel": "Cancelar",
      "clone": "Clonar",
      "clonePath": "Ruta de clonación: {path}"
    },
    "toasts": {
      "cloneFailed": "No se pudo clonar el repositorio"
    }
  },
  "ProjectBoot": {
    "title": "Inicio de Proyecto",
    "tabs": {
      "shadcn": "shadcn",
      "hyperframes": "HyperFrames"
    },
    "hyperframes": {
      "title": "Proyecto de vídeo HyperFrames",
      "subtitle": "Genera un proyecto de HTML a vídeo. Luego, el agente del espacio de trabajo puede escribirlo y renderizarlo.",
      "resolution": "Resolución",
      "skillsTitle": "Skills de agentes",
      "skillsDesc": "Instala globalmente las skills de HyperFrames (enlace simbólico) para los agentes seleccionados, para que puedan crear y renderizar vídeo.",
      "recheck": "Volver a comprobar",
      "installedBadge": "Instalado",
      "skillsInstall": "Instalar / actualizar skills",
      "skillsInstalling": "Instalando skills…",
      "skillsInstalled": "Skills de HyperFrames instaladas",
      "skillsInstallFailed": "No se pudieron instalar las skills de HyperFrames"
    },
    "config": {
      "base": "Base",
      "style": "Estilo",
      "baseColor": "Color base",
      "theme": "Tema",
      "chartColor": "Color del gráfico",
      "iconLibrary": "Biblioteca de iconos",
      "font": "Fuente",
      "fontHeading": "Fuente de título",
      "menuAccent": "Acento del menú",
      "menuColor": "Color del menú",
      "radius": "Radio",
      "template": "Plantilla",
      "createProject": "Crear proyecto",
      "sectionStyle": "Estilo",
      "sectionColors": "Colores",
      "sectionTypography": "Tipografía",
      "sectionInterface": "Interfaz"
    },
    "preview": {
      "loading": "Cargando vista previa..."
    },
    "createDialog": {
      "title": "Crear proyecto",
      "projectName": "Nombre del proyecto",
      "projectNamePlaceholder": "my-app",
      "frameworkTemplate": "Plantilla del framework",
      "packageManager": "Gestor de paquetes",
      "saveDirectory": "Directorio de guardado",
      "saveDirectoryPlaceholder": "Seleccionar directorio...",
      "browseDirectory": "Explorar",
      "projectPath": "El proyecto se creará en: {path}",
      "advancedOptions": "Opciones Avanzadas",
      "base": "Biblioteca Base",
      "enableRtl": "Habilitar Soporte RTL",
      "enableRtlDescription": "Habilitar soporte de diseño para idiomas de derecha a izquierda (ej. árabe, hebreo)",
      "pmChecking": "Verificando...",
      "pmNotInstalled": "No instalado",
      "cancel": "Cancelar",
      "create": "Crear",
      "creating": "Creando proyecto..."
    },
    "toasts": {
      "createFailed": "Error al crear el proyecto",
      "createSuccess": "Proyecto creado exitosamente",
      "openWorkspaceFailed": "Proyecto creado, pero no se pudo abrir en el espacio de trabajo"
    },
    "errors": {
      "directoryExists": "El directorio de destino ya existe",
      "commandFailed": "El comando de creación del proyecto falló."
    }
  },
  "WebServiceSettings": {
    "addressSwitchHint": "Cambiar solo modifica la dirección que se muestra y se abre aquí; el servicio escucha en todas las interfaces y sigue accesible en cada dirección.",
    "sectionTitle": "Servicio Web",
    "sectionDescription": "Habilitar para acceder a Codeg de forma remota a través del navegador",
    "port": "Puerto",
    "status": "Estado",
    "autoStart": "Inicio automático",
    "autoStartHint": "Iniciar el servicio web al abrir Codeg",
    "running": "En ejecución",
    "stopped": "Detenido",
    "processing": "Procesando...",
    "start": "Iniciar",
    "stop": "Detener",
    "startFailed": "Error al iniciar",
    "stopFailed": "Error al detener",
    "saveConfigFailed": "No se pudo guardar la configuración del servicio web",
    "open": "Abrir",
    "hide": "Ocultar",
    "show": "Mostrar",
    "copy": "Copiar",
    "qrcode": "Código QR",
    "qrcodeTitle": "Escanear para abrir",
    "qrcodeHint": "Escanea con tu teléfono para abrir Codeg en el navegador",
    "addressLabel": "Dirección de acceso",
    "tokenLabel": "Token de acceso",
    "tokenHint": "Ingrese este token al acceder al cliente Web por primera vez",
    "tokenPlaceholder": "Dejar vacío para generar automáticamente",
    "regenerate": "Regenerar",
    "stalePortOccupiedTitle": "El puerto {port} está en uso por otro proceso",
    "stalePortUnknownTitle": "Estado del puerto {port} indeterminado",
    "stalePortHint": "Codeg no puede vincularse hasta que se libere el puerto. Cambia el puerto arriba o cierra el proceso que lo retiene.",
    "errors": {
      "alreadyRunning": "El servicio Web ya está en ejecución",
      "invalidAddress": "Formato de host o puerto no válido",
      "portInUse": "El puerto {port} ya está en uso. Cierre el proceso que lo usa o elija otro puerto.",
      "permissionDenied": "Permiso denegado. Utilice un puerto superior a 1024 o ejecute con mayores privilegios.",
      "addressUnavailable": "La dirección no está disponible en este equipo",
      "bindFailed": "No se pudo enlazar la dirección"
    }
  },
  "DirectoryBrowser": {
    "title": "Explorar directorio",
    "pathPlaceholder": "Ingrese la ruta del directorio...",
    "goHome": "Ir al directorio principal",
    "navigateUp": "Ir al directorio superior",
    "select": "Seleccionar",
    "cancel": "Cancelar",
    "loading": "Cargando...",
    "emptyDirectory": "Este directorio está vacío",
    "errorLoadingDir": "Error al cargar el directorio",
    "permissionDenied": "Permiso denegado"
  },
  "ChatChannelSettings": {
    "loading": "Cargando...",
    "sectionTitle": "Canales de chat",
    "sectionDescription": "Configure bots de IM para recibir notificaciones de eventos y consultar actividad de codificación.",
    "addChannel": "Agregar canal",
    "noChannels": "Aún no se han configurado canales de chat.",
    "channelName": "Nombre",
    "channelNamePlaceholder": "Mi bot de Telegram",
    "channelType": "Tipo de canal",
    "lark": "Lark (Feishu)",
    "weixin": "WeChat",
    "dailyReport": "Informe diario",
    "dailyReportTime": "Hora del informe",
    "nameRequired": "El nombre del canal es obligatorio.",
    "tokenRequired": "El token es obligatorio.",
    "chatIdRequired": "El Chat ID es obligatorio.",
    "loadFailed": "Error al cargar los canales.",
    "saveFailed": "Error al guardar los cambios.",
    "connectSuccess": "Canal conectado.",
    "connectFailed": "Error al conectar",
    "disconnectSuccess": "Canal desconectado.",
    "disconnectFailed": "Error al desconectar.",
    "testSuccess": "Prueba de conexión exitosa.",
    "testFailed": "Prueba de conexión fallida",
    "deleteSuccess": "Canal eliminado.",
    "deleteFailed": "Error al eliminar el canal.",
    "deleteConfirmTitle": "Eliminar canal",
    "deleteConfirmMessage": "Se eliminará permanentemente el canal y sus registros de mensajes. ¿Está seguro?",
    "cancel": "Cancelar",
    "delete": "Eliminar",
    "create": "Crear",
    "save": "Guardar",
    "channelListTitle": "Canales configurados",
    "channelListDescription": "Los canales habilitados se conectarán automáticamente al iniciar el servicio.",
    "editChannel": "Editar canal",
    "editSuccess": "Canal actualizado.",
    "tokenPlaceholderKeep": "Dejar vacío para mantener actual",
    "weixinScanTitle": "Escanear código QR",
    "weixinScanDescription": "Abra WeChat y escanee el código QR para conectarse.",
    "weixinQrcodeExpired": "El código QR ha expirado.",
    "weixinRefreshQrcode": "Actualizar",
    "weixinWaitingScan": "Esperando escaneo...",
    "weixinPollError": "Conexión inestable, reintentando...",
    "weixinReconnectNotice": "Debido a limitaciones del protocolo iLink, después de cada reconexión debes enviar un mensaje al bot para que los activadores de eventos surtan efecto.",
    "connect": "Conectar",
    "disconnect": "Desconectar",
    "test": "Probar conexión",
    "tabs": {
      "channels": "Canales",
      "commands": "Comandos",
      "events": "Eventos",
      "other": "Otros"
    },
    "commands": {
      "title": "Comandos integrados",
      "description": "Comandos de bot disponibles en los canales de chat. En chats grupales, se requiere @Bot para procesar mensajes.",
      "prefixLabel": "Prefijo de comando",
      "prefixDescription": "1-3 caracteres no alfanuméricos para activar comandos del bot (por defecto /).",
      "prefixSaved": "Prefijo de comando guardado.",
      "prefixSaveFailed": "Error al guardar el prefijo.",
      "prefixInvalid": "El prefijo debe ser de 1-3 caracteres no alfanuméricos.",
      "save": "Guardar",
      "folderDesc": "Seleccionar carpeta de trabajo",
      "agentDesc": "Seleccionar agente de IA",
      "taskDesc": "Crear sesión y ejecutar tarea",
      "sessionsDesc": "Listar sesiones activas en la carpeta",
      "resumeDesc": "Conversaciones recientes / reanudar una sesión",
      "cancelDesc": "Cancelar tarea actual",
      "approveDesc": "Aprobar solicitud de permiso del agente",
      "denyDesc": "Denegar solicitud de permiso del agente",
      "searchDesc": "Buscar conversaciones por palabra clave",
      "todayDesc": "Resumen de actividad de hoy",
      "statusDesc": "Estado de conexión del canal",
      "helpDesc": "Mostrar ayuda"
    },
    "events": {
      "title": "Notificaciones de eventos",
      "description": "Al habilitar eventos, se enviarán al canal cuando se activen.",
      "turnComplete": "Turno completado",
      "turnCompleteDesc": "Cuando finaliza un turno del agente",
      "error": "Error del agente",
      "errorDesc": "Cuando un agente encuentra un error",
      "permissionRequest": "Solicitud de permiso",
      "permissionRequestDesc": "Cuando un agente solicita permiso para actuar",
      "questionRequest": "Pregunta del agente",
      "questionRequestDesc": "Cuando un agente te hace una pregunta",
      "userPromptSent": "Mensaje del usuario",
      "userPromptSentDesc": "Cuando envías un mensaje (el texto del mensaje se incluye en la notificación)",
      "saved": "Filtro de eventos actualizado.",
      "saveFailed": "Error al guardar el filtro de eventos.",
      "loadFailed": "No se pudo cargar la configuración.",
      "retry": "Reintentar",
      "webhooksTitle": "Webhooks",
      "webhooksDescription": "Envía una carga JSON por POST a una o varias URL cuando se activa un evento habilitado. El filtro de eventos anterior también se aplica a los webhooks.",
      "webhookUrlPlaceholder": "https://example.com/webhook",
      "addWebhook": "Agregar webhook",
      "removeWebhook": "Eliminar webhook",
      "webhookSave": "Guardar",
      "webhooksSaved": "Webhooks guardados.",
      "webhooksSaveFailed": "Error al guardar los webhooks.",
      "webhookInvalidUrl": "Introduce URL http(s) válidas.",
      "docsTitle": "Formato de solicitud",
      "docsMethod": "Método",
      "docsContentType": "Content-Type",
      "docsNote": "Cada evento habilitado se entrega a todas las URL. Los webhooks no tienen antirrebote; el filtro de eventos anterior sigue aplicándose.",
      "editWebhook": "Editar webhook",
      "enableWebhook": "Activar webhook",
      "webhookDuplicate": "Esta URL ya está configurada.",
      "cancel": "Cancelar",
      "webhooksEmpty": "Aún no hay webhooks configurados.",
      "deleteWebhookTitle": "Eliminar webhook",
      "deleteWebhookMessage": "¿Eliminar este webhook? Los eventos ya no se enviarán a esta URL.",
      "delete": "Eliminar"
    },
    "language": {
      "title": "Idioma de mensajes",
      "description": "Idioma utilizado para las notificaciones de eventos, respuestas de comandos e informes diarios enviados a los canales de chat.",
      "saved": "Idioma de mensajes guardado.",
      "saveFailed": "Error al guardar el idioma de mensajes.",
      "en": "Inglés",
      "zh-cn": "Chino simplificado",
      "zh-tw": "Chino tradicional",
      "ja": "Japonés",
      "ko": "Coreano",
      "es": "Español",
      "de": "Alemán",
      "fr": "Francés",
      "pt": "Portugués",
      "ar": "Árabe"
    }
  },
  "ModelProviderSettings": {
    "sectionTitle": "Proveedores de Modelos",
    "sectionDescription": "Gestionar las credenciales de proveedores API para agentes.",
    "filterAll": "Todos",
    "providerListTitle": "Proveedores Configurados",
    "addProvider": "Agregar Proveedor",
    "editProvider": "Editar Proveedor",
    "noProviders": "Aún no se han configurado proveedores de modelos.",
    "providerName": "Nombre",
    "providerNamePlaceholder": "Ej. OpenAI, Anthropic",
    "apiUrl": "URL de API",
    "apiUrlPlaceholder": "https://api.openai.com/v1",
    "apiKey": "Clave API",
    "apiKeyPlaceholder": "sk-...",
    "apiKeyKeepCurrent": "Dejar vacío para mantener actual",
    "agentTypes": "Tipos de Agente",
    "agentTypesRequired": "Se requiere al menos un tipo de agente.",
    "agentType": "Tipo de Agente",
    "agentTypeRequired": "El tipo de agente es obligatorio.",
    "agentTypeImmutableHint": "El tipo de agente no se puede cambiar después de la creación.",
    "model": "Modelo",
    "modelPlaceholderCodex": "gpt-5 / gpt-5-mini",
    "modelPlaceholderGemini": "gemini-3-pro-preview",
    "claudeMainModel": "Modelo Principal",
    "claudeReasoningModel": "Modelo de Razonamiento (pensamiento)",
    "claudeHaikuDefaultModel": "Modelo Haiku Predeterminado",
    "claudeSonnetDefaultModel": "Modelo Sonnet Predeterminado",
    "claudeOpusDefaultModel": "Modelo Opus Predeterminado",
    "nameRequired": "El nombre del proveedor es obligatorio.",
    "apiUrlRequired": "La URL de API es obligatoria.",
    "apiKeyRequired": "La clave API es obligatoria.",
    "loadFailed": "Error al cargar proveedores.",
    "saveFailed": "Error al guardar cambios.",
    "createSuccess": "Proveedor creado.",
    "editSuccess": "Proveedor actualizado.",
    "deleteSuccess": "Proveedor eliminado.",
    "deleteConfirmTitle": "Eliminar Proveedor",
    "deleteConfirmMessage": "Esto eliminará permanentemente el proveedor \"{name}\". ¿Está seguro?",
    "deleteBlockedByAgent": "{agents} está usando este proveedor. Desvincúlelo antes de eliminarlo.",
    "cancel": "Cancelar",
    "delete": "Eliminar",
    "create": "Crear",
    "save": "Guardar",
    "affectedRunningSessions": "{count, plural, one {# sesión activa necesita reconectarse para aplicar el cambio} other {# sesiones activas necesitan reconectarse para aplicar el cambio}}"
  },
  "ExpertsSettings": {
    "title": "Habilidades de expertos",
    "description": "Habilita flujos de trabajo de habilidades cuidadosamente seleccionadas y probadas en la práctica para tus agentes de codificación de IA. Cada experto es una habilidad independiente del proyecto superpowers — codeg gestiona la copia central y la vincula a los agentes que elijas.",
    "loading": "Cargando expertos…",
    "loadingContent": "Cargando contenido…",
    "emptyExperts": "No hay expertos disponibles. Revisa los registros de la aplicación.",
    "emptySelection": "Selecciona un experto para ver su contenido y gestionar la activación.",
    "emptySearch": "Ningún experto coincide con la búsqueda actual.",
    "searchPlaceholder": "Buscar expertos por nombre, ID o descripción",
    "enableForAgents": "Habilitar para agentes",
    "noAgents": "No se detectaron agentes ACP.",
    "copyModeWarning": "Copiado (no vinculado). Vuelve a habilitarlo después de actualizar codeg para obtener la última versión.",
    "previewTitle": "Vista previa de SKILL.md",
    "categories": {
      "discovery": "Descubrimiento y diseño",
      "planning": "Planificación",
      "execution": "Ejecución",
      "quality": "Calidad y pruebas",
      "debugging": "Depuración",
      "review": "Revisión e integración",
      "meta": "Meta"
    },
    "states": {
      "not_linked": "No habilitado",
      "linked_to_codeg": "Habilitado",
      "linked_elsewhere": "Bloqueado — existe otro vínculo",
      "blocked_by_real_directory": "Bloqueado — una habilidad personalizada ocupa este nombre",
      "broken": "Vínculo roto"
    },
    "badges": {
      "userModified": "Modificado por el usuario"
    },
    "actions": {
      "openCentralDir": "Abrir carpeta central",
      "refresh": "Actualizar"
    },
    "toasts": {
      "loadFailed": "Error al cargar los detalles del experto",
      "enabled": "Experto habilitado para este agente",
      "disabled": "Experto deshabilitado para este agente",
      "enableFailed": "Error al habilitar el experto",
      "disableFailed": "Error al deshabilitar el experto",
      "openFolderFailed": "Error al abrir la carpeta"
    }
  },
  "QuickMessagesSettings": {
    "title": "Mensajes rápidos",
    "description": "Gestiona fragmentos de mensajes reutilizables. Arrastra para reordenar.",
    "loading": "Cargando mensajes rápidos…",
    "emptyList": "Aún no hay mensajes rápidos. Haz clic en \"Nuevo\" para crear uno.",
    "emptySelection": "Selecciona un mensaje rápido para editar.",
    "searchPlaceholder": "Buscar por título o contenido",
    "untitled": "Sin título",
    "actions": {
      "new": "Nuevo",
      "save": "Guardar",
      "delete": "Eliminar",
      "dragSort": "Arrastra para reordenar",
      "dragSortMessage": "Arrastra para reordenar mensaje rápido: {name}"
    },
    "fields": {
      "title": "Título",
      "titlePlaceholder": "Asigna un título corto a este mensaje",
      "content": "Contenido",
      "contentPlaceholder": "Escribe aquí el contenido del mensaje"
    },
    "confirmDelete": {
      "title": "¿Eliminar mensaje rápido?",
      "message": "Esto eliminará permanentemente \"{name}\". ¿Estás seguro?",
      "cancel": "Cancelar",
      "confirm": "Eliminar"
    },
    "toasts": {
      "loadFailed": "Error al cargar mensajes rápidos",
      "createFailed": "Error al crear el mensaje rápido",
      "saveFailed": "Error al guardar el mensaje rápido",
      "deleteFailed": "Error al eliminar el mensaje rápido",
      "saveOrderFailed": "Error al guardar el orden",
      "created": "Mensaje rápido creado",
      "saved": "Mensaje rápido guardado",
      "deleted": "Mensaje rápido eliminado"
    }
  },
  "Pet": {
    "badge": {
      "running": "{count} en ejecución",
      "waiting": "{count} esperando aprobación",
      "error": "{count} con error"
    },
    "panel": {
      "title": "Sesiones activas",
      "empty": "No hay sesiones activas",
      "emptyHint": "Aquí aparecen los agentes en ejecución y los que te necesitan.",
      "statusRunning": "En ejecución",
      "statusWaiting": "En espera",
      "statusError": "Error"
    },
    "menu": {
      "scale": "Escala",
      "openManager": "Gestionar mascotas",
      "close": "Cerrar"
    },
    "loadError": "No se pudo cargar la mascota",
    "missingPetIdParam": "No hay mascota seleccionada",
    "summonButton": "Mascota",
    "manager": {
      "title": "Mascotas",
      "description": "Compañeros flotantes de escritorio con sprites compatibles con Codex.",
      "addPet": "Añadir mascota",
      "importFromCodex": "Importar desde Codex",
      "noPets": "No hay mascotas. Añade una o impórtala desde Codex.",
      "setActive": "Activar",
      "active": "Activa",
      "edit": "Editar",
      "delete": "Eliminar",
      "deleteConfirm": "¿Eliminar la mascota «{name}»? Se borrará del disco.",
      "summon": "Invocar ventana de la mascota",
      "openCodexHelp": "Las mascotas de Codex deben estar en ~/.codex/pets/. No se encontraron.",
      "specRequirement": "El sprite debe ser PNG o WebP de 1536x1872 con transparencia.",
      "form": {
        "id": "ID de mascota",
        "idHelp": "Letras minúsculas, dígitos, '-' y '_'. Máx 64 chars.",
        "displayName": "Nombre",
        "description": "Descripción (opcional)",
        "spritesheet": "Sprite",
        "chooseFile": "Elegir archivo",
        "replaceFile": "Reemplazar sprite",
        "saveCreate": "Añadir mascota",
        "saveUpdate": "Guardar cambios",
        "cancel": "Cancelar"
      },
      "errors": {
        "missingId": "Se requiere ID de mascota",
        "missingName": "Se requiere nombre",
        "missingSpritesheet": "Se requiere sprite",
        "addFailed": "Error al añadir la mascota",
        "updateFailed": "Error al actualizar",
        "deleteFailed": "Error al eliminar",
        "loadFailed": "Error al cargar mascotas",
        "setActiveFailed": "Error al activar mascota",
        "summonFailed": "Error al invocar la ventana de mascota"
      }
    },
    "import": {
      "title": "Importar desde Codex",
      "subtitle": "Mascotas disponibles bajo ~/.codex/pets/.",
      "selectAll": "Seleccionar todo",
      "alreadyImported": "Ya importada",
      "renameOnConflict": "Renombrar conflictos con sufijo -imported",
      "import": "Importar selección",
      "noneFound": "No hay mascotas Codex importables.",
      "imported": "Importación correcta",
      "failed": "Importación fallida",
      "close": "Cerrar"
    },
    "marketplace": {
      "openMarketplace": "Mercado de mascotas",
      "title": "Mercado de mascotas",
      "search": "Buscar mascotas",
      "kindFilter": {
        "all": "Todas",
        "object": "Objeto",
        "animal": "Animal",
        "person": "Persona",
        "creature": "Criatura"
      },
      "sortFilter": {
        "latest": "Recientes",
        "popular": "Populares",
        "views": "Más vistas"
      },
      "refresh": "Actualizar",
      "install": "Instalar",
      "installing": "Instalando",
      "reinstall": "Reinstalar",
      "reinstallConfirm": "¿Sobrescribir la mascota local \"{name}\"? Los datos existentes serán reemplazados.",
      "cancel": "Cancelar",
      "stats": {
        "views": "Vistas",
        "downloads": "Descargas",
        "likes": "Me gusta"
      },
      "actions": {
        "idle": "Reposo",
        "running_right": "Corre der.",
        "running_left": "Corre izq.",
        "waving": "Saluda",
        "jumping": "Salta",
        "failed": "Fallo",
        "waiting": "Espera",
        "running": "Corre",
        "review": "Revisa"
      },
      "page": "Página {page} de {total}",
      "prev": "Anterior",
      "next": "Siguiente",
      "empty": "No hay mascotas que coincidan.",
      "successInstalled": "\"{name}\" instalada",
      "errors": {
        "loadFailed": "No se pudo cargar el mercado",
        "installFailed": "No se pudo instalar la mascota",
        "alreadyInstalled": "La mascota ya existe localmente"
      }
    }
  },
  "RemoteWorkspace": {
    "openRemoteWorkspace": "Open remote workspace",
    "manage": "Manage remote workspace",
    "manageTitle": "Remote Workspace connections",
    "empty": "No remote connections",
    "searchPlaceholder": "Search remote workspaces",
    "orderFailed": "Failed to save remote workspace order",
    "dragSort": "Drag to sort",
    "dragSortConnection": "Drag to sort {name}",
    "newConnection": "New connection",
    "loading": "Loading",
    "loadingConnection": "Loading remote connection",
    "name": "Name",
    "baseUrl": "Service URL",
    "token": "Access token",
    "save": "Save",
    "delete": "Delete",
    "confirmDelete": {
      "title": "Delete remote connection?",
      "message": "This will remove \"{name}\" from this device. This action cannot be undone.",
      "cancel": "Cancel",
      "confirm": "Delete"
    },
    "saved": "Remote connection saved.",
    "deleted": "Remote connection deleted.",
    "loadFailed": "Failed to load remote connections",
    "saveFailed": "Failed to save remote connection",
    "deleteFailed": "Failed to delete remote connection",
    "openFailed": "Failed to open remote workspace",
    "connectionLoadFailed": "Failed to load remote connection: {message}",
    "connectionExpired": "Remote connection \"{name}\" is expired. Update its token and reload this window."
  },
  "ServerFileBrowser": {
    "title": "Seleccionar archivo del servidor",
    "pathPlaceholder": "Introducir ruta de directorio...",
    "goHome": "Ir al directorio personal",
    "navigateUp": "Ir al directorio superior",
    "select": "Seleccionar",
    "cancel": "Cancelar",
    "loading": "Cargando...",
    "emptyDirectory": "Este directorio está vacío",
    "errorLoadingDir": "Error al cargar el directorio",
    "selectedCount": "{count} seleccionado(s)"
  },
  "BackupSettings": {
    "title": "Copia de seguridad y restauración",
    "description": "Exporta una copia de seguridad portátil de tus datos de codeg, o restaura desde una.",
    "tabs": {
      "backup": "Copia de seguridad",
      "restore": "Restaurar"
    },
    "export": {
      "includeExternal": "Incluir el contenido de las conversaciones",
      "includeExternalHint": "También archiva las transcripciones de las CLI (Claude, Codex, Gemini, …). Aumenta el tamaño.",
      "passphrase": "Frase de contraseña (opcional)",
      "passphrasePlaceholder": "Déjala vacía para un archivo sin cifrar",
      "passphraseConfirm": "Confirmar la frase de contraseña",
      "passphraseMismatch": "Las frases de contraseña no coinciden.",
      "noPassphraseWarning": "Esta copia contendrá secretos (claves de API, tokens) en texto plano. Guárdala en un lugar seguro.",
      "passphraseLossWarning": "Cifrada con esta frase de contraseña. Si la pierdes, la copia no se podrá recuperar.",
      "button": "Exportar copia",
      "inProgress": "Creando copia de seguridad…",
      "success": "Copia de seguridad creada.",
      "started": "Descarga de la copia iniciada."
    },
    "restore": {
      "selectFile": "Seleccionar archivo de copia",
      "passphrasePrompt": "Esta copia está cifrada. Introduce su frase de contraseña.",
      "unlock": "Desbloquear",
      "preview": {
        "title": "Detalles de la copia",
        "encrypted": "Cifrada",
        "compatible": "Compatible",
        "incompatible": "Incompatible",
        "createdAt": "Creada: {value}",
        "appVersion": "Versión de la app: {value}",
        "incompatibleHint": "Esta copia fue creada por una versión más reciente de codeg y no se puede restaurar."
      },
      "replaceWarning": "Restaurar reemplaza todos los datos actuales de codeg (base de datos y subidas). Tus datos actuales se guardan primero en una instantánea para poder recuperarlos.",
      "keyringNote": "Los tokens de GitHub/chat del escritorio están en el llavero del sistema y no se incluyen; vuelve a introducirlos tras restaurar.",
      "button": "Restaurar",
      "staging": "Preparando la restauración…",
      "staged": "Restauración preparada. Reiniciando…",
      "restarting": "Restauración preparada. Reiniciando el servidor…",
      "restartTimeout": "El servidor no volvió a tiempo. Recarga la página cuando esté activo.",
      "externalSideLocation": "Las transcripciones de conversaciones se restauraron en {path}",
      "confirmTitle": "¿Reemplazar todos los datos?",
      "confirmBody": "Esto reemplazará tu base de datos y subidas actuales de codeg con la copia y luego reiniciará. Tus datos actuales se guardan primero en una instantánea.",
      "cancel": "Cancelar",
      "confirmAction": "Reemplazar y reiniciar",
      "external": {
        "title": "Contenido de las conversaciones",
        "hint": "Esta copia incluye transcripciones de las CLI. Elige dónde restaurarlas.",
        "modeSkip": "No restaurar",
        "modeSide": "Restaurar en una carpeta aparte segura",
        "modeOriginal": "Restaurar en las ubicaciones originales de las CLI",
        "forceOverwrite": "Sobrescribir archivos existentes",
        "forceOverwriteHint": "Reemplaza los archivos que ya existen en las carpetas de las CLI.",
        "scanning": "Comprobando conflictos…",
        "noConflicts": "No se sobrescribirá ningún archivo existente.",
        "conflictCount": "Se verían afectados {count} archivo(s) existente(s).",
        "conflictSkipNote": "Los archivos existentes se conservan (se omiten) salvo que actives la sobrescritura."
      },
      "restartFailed": "La restauración quedó preparada, pero el servidor no pudo reiniciarse. Reinícialo manualmente para aplicarla."
    },
    "remoteUnsupported": "La copia de seguridad y la restauración actúan sobre los datos de la máquina que ejecuta codeg. Estás conectado a un espacio de trabajo remoto: gestiona sus copias desde ese servidor directamente."
  },
  "backup": {
    "restore": {
      "error": {
        "badPassphrase": "Frase de contraseña incorrecta o copia dañada.",
        "corrupted": "El archivo de copia de seguridad está dañado.",
        "unknownFormat": "Este archivo no es una copia de seguridad de codeg reconocida.",
        "newerVersion": "Esta copia fue creada por codeg {backupVersion}, más reciente que esta versión ({appVersion}).",
        "alreadyPending": "Ya hay una restauración preparada. Reinicia para aplicarla antes de preparar otra."
      }
    },
    "error": {
      "diskSpace": "No hay espacio en disco suficiente para completar la operación.",
      "cancelled": "La operación fue cancelada."
    }
  },
  "WebConnection": {
    "disconnectedTitle": "Conexión perdida",
    "reconnectingDescription": "Intentando volver a conectar con el servidor. Normalmente se recupera solo en unos segundos.",
    "reconnectNow": "Volver a conectar ahora",
    "sessionExpiredTitle": "Sesión caducada",
    "sessionExpiredDescription": "Tu sesión ya no es válida. Inicia sesión de nuevo para continuar.",
    "goToLogin": "Ir al inicio de sesión"
  },
  "SessionFeedbackSettings": {
    "title": "Comentarios en vivo",
    "description": "Envía notas y correcciones a un agente mientras trabaja. Cuando está activado, el agente obtiene una herramienta para consultar comentarios en vivo y las conversaciones muestran una entrada de notas. Consejo: el agente normalmente solo consulta los comentarios cuando lo mencionas en tu mensaje — por ejemplo, añade \"revisa mis comentarios en vivo periódicamente mientras trabajas\".",
    "enable": "Activar comentarios en vivo",
    "enableHint": "Inyecta una herramienta para consultar comentarios en los agentes iniciados después de activarlo.",
    "save": "Guardar",
    "saving": "Guardando…",
    "saved": "Ajustes de comentarios guardados",
    "saveFailed": "No se pudieron guardar los ajustes de comentarios",
    "loadFailed": "Error al cargar: {detail}"
  },
  "LiveFeedback": {
    "placeholder": "Envía una nota a {agent} mientras trabaja…",
    "agentFallback": "el agente",
    "ariaLabel": "Nota de comentarios en vivo",
    "dialogTitle": "Comentarios en vivo",
    "dialogDescription": "Envía una nota al agente mientras trabaja. La leerá en su próxima comprobación, sin interrumpir el paso actual.",
    "send": "Enviar",
    "cancel": "Cancelar",
    "pending": "esperando",
    "delivered": "recibida",
    "turnEndedUnread": "El agente terminó antes de leer tus comentarios.",
    "sendAsMessage": "Enviar como mensaje",
    "dismiss": "Descartar",
    "turnEndedResent": "El turno terminó: se envió como un mensaje nuevo.",
    "turnEnded": "El turno ya terminó.",
    "submitFailed": "No se pudo enviar tu nota"
  },
  "AskQuestionSettings": {
    "title": "Preguntar al usuario",
    "description": "Permite que los agentes se detengan y te hagan una pregunta de opción múltiple que aparece encima del cuadro de entrada de la conversación. El agente espera hasta que respondas (u omitas).",
    "enable": "Activar preguntas al usuario",
    "enableHint": "Añade la herramienta ask_user_question a los agentes iniciados después de activarlo.",
    "save": "Guardar",
    "saving": "Guardando…",
    "saved": "Ajustes de preguntas guardados",
    "saveFailed": "No se pudieron guardar los ajustes de preguntas",
    "loadFailed": "Error al cargar: {detail}"
  }
}
