mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
Co-authored-by: zahica1234 <i.milev001@gmail.com> Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
4726 lines
288 KiB
TypeScript
4726 lines
288 KiB
TypeScript
import type { TranslationMap } from './types';
|
||
|
||
// Spanish (Español) translations. Keys mirror en.ts; missing/
|
||
// English-identical values fall back to English via I18nContext.resolveEn().
|
||
const messages: TranslationMap = {
|
||
'nav.home': 'Inicio',
|
||
'nav.human': 'Humano',
|
||
'nav.chat': 'Charla',
|
||
'nav.connections': 'Conexiones',
|
||
'nav.memory': 'Inteligencia',
|
||
'nav.alerts': 'Alertas',
|
||
'nav.rewards': 'Recompensas',
|
||
'nav.settings': 'Configuración',
|
||
'common.cancel': 'Cancelar',
|
||
'common.save': 'Guardar',
|
||
'common.confirm': 'Confirmar',
|
||
'common.delete': 'Eliminar',
|
||
'common.edit': 'Editar',
|
||
'common.create': 'Crear',
|
||
'common.search': 'Buscar',
|
||
'common.loading': 'cargando…',
|
||
'common.error': 'error',
|
||
'common.success': 'Éxito',
|
||
'common.back': 'Atrás',
|
||
'common.next': 'Siguiente',
|
||
'common.finish': 'Finalizar',
|
||
'common.close': 'Cerrar',
|
||
'common.enabled': 'Activado',
|
||
'common.disabled': 'Desactivado',
|
||
'common.on': 'Activado',
|
||
'common.off': 'Desactivado',
|
||
'common.yes': 'Sí',
|
||
'common.no': 'No',
|
||
'common.ok': 'Entendido',
|
||
'common.name': 'Nombre',
|
||
'common.retry': 'Reintentar',
|
||
'common.copy': 'Copiar',
|
||
'common.copied': 'Copiado',
|
||
'common.learnMore': 'Más información',
|
||
'common.seeAll': 'Ver',
|
||
'common.dismiss': 'Descartar',
|
||
'common.clear': 'Limpiar',
|
||
'common.reset': 'Restablecer',
|
||
'common.refresh': 'Actualizar',
|
||
'common.export': 'Exportar',
|
||
'common.import': 'Importar',
|
||
'common.upload': 'Subir',
|
||
'common.download': 'Descargar',
|
||
'common.add': 'Agregar',
|
||
'common.remove': 'Eliminar',
|
||
'common.showMore': 'Ver más',
|
||
'common.showLess': 'Ver menos',
|
||
'common.submit': 'Enviar',
|
||
'common.continue': 'Continuar',
|
||
'common.comingSoon': 'Próximamente',
|
||
'common.breadcrumb': 'Miga de pan',
|
||
'settings.general': 'generales',
|
||
'settings.featuresAndAI': 'Funciones e IA',
|
||
'settings.billingAndRewards': 'Facturación y recompensas',
|
||
'settings.support': 'Soporte',
|
||
'settings.advanced': 'Avanzado',
|
||
'settings.dangerZone': 'Zona de peligro',
|
||
'settings.account': 'Cuenta',
|
||
'settings.accountDesc': 'Frase de recuperación, equipo, conexiones y privacidad',
|
||
'settings.notifications': 'Notificaciones',
|
||
'settings.notificationsDesc': 'No molestar y controles de notificación por cuenta',
|
||
'settings.notifications.tabs.preferences': 'Preferencias',
|
||
'settings.notifications.tabs.routing': 'Enrutamiento',
|
||
'settings.features': 'Funciones',
|
||
'settings.featuresDesc': 'Conciencia de pantalla, mensajería y herramientas',
|
||
'settings.aiModels': 'IA y modelos',
|
||
'settings.aiModelsDesc': 'Configuración de modelos de IA locales, descargas y proveedor LLM',
|
||
'settings.ai': 'Configuración de IA',
|
||
'settings.aiDesc':
|
||
'Proveedores en la nube, modelos locales de Ollama y enrutamiento por carga de trabajo',
|
||
'settings.billingUsage': 'Facturación y uso',
|
||
'settings.billingUsageDesc': 'Plan de suscripción, créditos y métodos de pago',
|
||
'settings.rewards': 'Recompensas',
|
||
'settings.rewardsDesc': 'Referidos, cupones y créditos ganados',
|
||
'settings.restartTour': 'Reiniciar tour',
|
||
'settings.restartTourDesc': 'Reproduce el recorrido del producto desde el principio',
|
||
'settings.about': 'Acerca de',
|
||
'settings.aboutDesc': 'Versión de la app y actualizaciones de software',
|
||
'settings.developerOptions': 'Avanzado',
|
||
'settings.developerOptionsDesc':
|
||
'Configuración de IA, canales de mensajería, herramientas, diagnósticos y paneles de depuración',
|
||
'settings.clearAppData': 'Borrar datos de la app',
|
||
'settings.clearAppDataDesc':
|
||
'Cerrar sesión y eliminar permanentemente todos los datos locales de la app',
|
||
'settings.logOut': 'Cerrar sesión',
|
||
'settings.logOutDesc': 'Salir de tu cuenta',
|
||
'settings.exitLocalSession': 'Salir de la sesión local',
|
||
'settings.exitLocalSessionDesc': 'Volver a la pantalla de inicio de sesión',
|
||
'settings.language': 'Idioma',
|
||
'settings.betaBuild': 'Compilación beta: v{version}',
|
||
'settings.languageDesc': 'Idioma de visualización de la interfaz de la app',
|
||
'settings.alerts': 'Alertas',
|
||
'settings.alertsDesc': 'Ver alertas recientes y actividad en tu bandeja',
|
||
'settings.account.recoveryPhrase': 'Frase de recuperación',
|
||
'settings.account.recoveryPhraseDesc': 'Ver y respaldar tu frase de recuperación de cuenta',
|
||
'settings.account.team': 'Equipo',
|
||
'settings.account.teamDesc': 'Administrar miembros del equipo y permisos',
|
||
'settings.account.connections': 'Conexiones',
|
||
'settings.account.connectionsDesc': 'Administrar cuentas y servicios vinculados',
|
||
'settings.account.privacy': 'Privacidad',
|
||
'settings.account.privacyDesc': 'Controla qué datos salen de tu computadora',
|
||
'migration.title': 'Importar desde otro asistente',
|
||
'migration.description':
|
||
'Migra la memoria y las notas de otro asistente local a este espacio de trabajo. Empieza con una Vista previa para ver exactamente qué cambiará y luego pulsa Aplicar para copiar los datos. Tu memoria actual se respalda primero.',
|
||
'migration.vendorLabel': 'Proveedor de origen',
|
||
'migration.vendor.openclaw': 'OpenClaw',
|
||
'migration.vendor.hermes': 'Hermes Agent',
|
||
'migration.sourceLabel': 'Ruta del espacio de trabajo de origen (opcional)',
|
||
'migration.sourcePlaceholder':
|
||
'Déjalo en blanco para detectar automáticamente (p. ej. ~/.openclaw/workspace)',
|
||
'migration.sourcePlaceholderHermes':
|
||
'Dejar en blanco para detectar automáticamente (p. ej., ~/.hermes)',
|
||
'migration.sourceHint':
|
||
'Si está vacío, se usa la ubicación predeterminada del proveedor. Indica una ruta explícita si moviste el espacio de trabajo a otro sitio.',
|
||
'migration.previewAction': 'Vista previa',
|
||
'migration.previewRunning': 'Previsualizando…',
|
||
'migration.applyAction': 'Aplicar importación',
|
||
'migration.applyRunning': 'Importando…',
|
||
'migration.applyDisclaimer':
|
||
'Aplicar se desbloquea tras una Vista previa exitosa del mismo origen. La memoria actual se respalda antes de cualquier importación.',
|
||
'migration.reportTitlePreview': 'Vista previa — aún no se importó nada',
|
||
'migration.reportTitleApplied': 'Importación completa',
|
||
'migration.report.source': 'Espacio de trabajo de origen',
|
||
'migration.report.target': 'Espacio de trabajo de destino',
|
||
'migration.report.fromSqlite': 'Desde SQLite (brain.db)',
|
||
'migration.report.fromMarkdown': 'Desde Markdown',
|
||
'migration.report.imported': 'Importado',
|
||
'migration.report.skippedUnchanged': 'Omitido (sin cambios)',
|
||
'migration.report.renamedConflicts': 'Renombrado por conflicto',
|
||
'migration.report.warnings': 'Advertencias',
|
||
'migration.report.previewHint':
|
||
'Todavía no se importó ningún dato. Pulsa Aplicar importación para copiarlo.',
|
||
'migration.report.appliedHint':
|
||
'Las entradas importadas ya están en tu memoria. Vuelve a ejecutar Vista previa si quieres comparar de nuevo.',
|
||
'migration.confirmImport.singular':
|
||
'¿Importar {count} entrada al espacio de trabajo actual?\n\nOrigen: {source}\nDestino: {target}\n\nLa memoria existente se respaldará antes de la importación.',
|
||
'migration.confirmImport.plural':
|
||
'¿Importar {count} entradas al espacio de trabajo actual?\n\nOrigen: {source}\nDestino: {target}\n\nLa memoria existente se respaldará antes de la importación.',
|
||
'settings.notifications.doNotDisturb': 'No molestar',
|
||
'settings.notifications.doNotDisturbDesc':
|
||
'Pausar todas las notificaciones por un período determinado',
|
||
'settings.notifications.channelControls': 'Controles por canal',
|
||
'settings.notifications.channelControlsDesc':
|
||
'Configura las preferencias de notificación para cada canal',
|
||
'settings.features.screenAwareness': 'Conciencia de pantalla',
|
||
'settings.features.screenAwarenessDesc': 'Permite que el asistente vea tu ventana activa',
|
||
'settings.features.messaging': 'Mensajería',
|
||
'settings.features.messagingDesc': 'Configuración de integración de canales y mensajería',
|
||
'settings.features.tools': 'Herramientas',
|
||
'settings.features.toolsDesc': 'Administrar herramientas e integraciones conectadas',
|
||
'settings.ai.localSetup': 'Configuración de IA local',
|
||
'settings.ai.localSetupDesc': 'Descargar y configurar modelos de IA locales',
|
||
'settings.ai.llmProvider': 'Proveedor LLM',
|
||
'settings.ai.llmProviderDesc': 'Elegir y configurar tu proveedor de IA',
|
||
'clearData.title': 'Borrar datos de la app',
|
||
'clearData.warning':
|
||
'Esto cerrará tu sesión y eliminará permanentemente los datos locales de la app, incluyendo:',
|
||
'clearData.bulletSettings': 'Configuración de la app y conversaciones',
|
||
'clearData.bulletCache': 'Todos los datos de caché de integraciones locales',
|
||
'clearData.bulletWorkspace': 'Datos del espacio de trabajo',
|
||
'clearData.bulletOther': 'Todos los demás datos locales',
|
||
'clearData.irreversible': 'Esta acción no se puede deshacer.',
|
||
'clearData.clearing': 'Borrando datos de la app...',
|
||
'clearData.failed': 'No se pudieron borrar los datos ni cerrar sesión. Inténtalo de nuevo.',
|
||
'clearData.failedLogout': 'No se pudo cerrar sesión. Inténtalo de nuevo.',
|
||
'clearData.failedPersist':
|
||
'No se pudo borrar el estado persistido de la app. Inténtalo de nuevo.',
|
||
'welcome.title': 'Bienvenido a OpenHuman',
|
||
'welcome.subtitle':
|
||
'Tu super inteligencia artificial personal. Privada, simple y extremadamente poderosa.',
|
||
'welcome.connectPrompt': 'Configurar URL de RPC (Avanzado)',
|
||
'welcome.selectRuntime': 'Seleccionar un runtime',
|
||
'welcome.clearingAppData': 'Borrando datos de la aplicación...',
|
||
'welcome.clearAppDataAndRestart': 'Borrar datos de la aplicación y reiniciar',
|
||
'welcome.clearAppDataWarning':
|
||
'Esto borra los secretos y las cuentas almacenados localmente en este dispositivo. Tu cuenta en la nube no se ve afectada; puedes volver a iniciar sesión inmediatamente.',
|
||
'welcome.resetErrorFallback':
|
||
'No se pudieron borrar los datos de la aplicación. Cierra y vuelve a abrir OpenHuman, luego inténtalo de nuevo.',
|
||
'welcome.signingIn': 'Registrándote...',
|
||
'welcome.termsIntro': 'Al continuar, aceptas las',
|
||
'welcome.termsOfUse': 'Términos',
|
||
'welcome.termsJoiner': 'y',
|
||
'welcome.privacyPolicy': 'Política de privacidad',
|
||
'welcome.termsOutro': '.',
|
||
'welcome.urlPlaceholder': 'http://localhost:8089',
|
||
'welcome.invalidUrl': 'Ingresa una URL HTTP o HTTPS válida',
|
||
'welcome.connecting': 'Probando',
|
||
'welcome.connect': 'Probar',
|
||
'home.greeting': 'Buenos días',
|
||
'home.greetingAfternoon': 'Buenas tardes',
|
||
'home.greetingEvening': 'Buenas noches',
|
||
'home.askAssistant': 'Pregúntale lo que quieras a tu asistente...',
|
||
'home.statusOk':
|
||
'Tu dispositivo está conectado. Mantén la app abierta para conservar la conexión. Envíale un mensaje a tu agente con el botón de abajo.',
|
||
'home.statusBackendOnly':
|
||
'Reconectando al backend… tu agente estará disponible nuevamente en breve.',
|
||
'home.statusCoreUnreachable':
|
||
'El proceso en segundo plano de OpenHuman no responde. Es posible que haya fallado o no haya podido iniciarse.',
|
||
'home.statusInternetOffline':
|
||
'Tu dispositivo está sin conexión. Verifica tu red o reinicia la app para reconectar.',
|
||
'home.restartCore': 'Reiniciar core',
|
||
'home.restartingCore': 'Reiniciando core…',
|
||
'home.themeToggle.toLight': 'Cambiar a modo claro',
|
||
'home.themeToggle.toDark': 'Cambiar a modo oscuro',
|
||
'home.usageExhaustedTitle': 'Has agotado tu uso',
|
||
'home.usageExhaustedBody':
|
||
'Ya no te queda uso incluido por ahora. Inicia una suscripción para desbloquear más capacidad continua.',
|
||
'home.usageExhaustedCta': 'Obtener una suscripción',
|
||
'home.routinesCard': 'Tus rutinas',
|
||
'home.routinesActive': '{count} activas',
|
||
'routines.title': 'Tus rutinas',
|
||
'routines.subtitle': 'Cosas que tu asistente hace automáticamente',
|
||
'routines.loading': 'Cargando rutinas…',
|
||
'routines.empty': 'Aún no hay rutinas',
|
||
'routines.emptyHint':
|
||
'Tu asistente puede ejecutar tareas según un horario, como informes matutinos o resúmenes diarios.',
|
||
'routines.refresh': 'Refrescar',
|
||
'routines.nextRun': 'Próxima carrera',
|
||
'routines.lastRunSuccess': 'La última ejecución tuvo éxito',
|
||
'routines.lastRunFailed': 'La última ejecución falló',
|
||
'routines.notRunYet': 'Aún no se ha ejecutado',
|
||
'routines.runNow': 'Corre ahora',
|
||
'routines.running': 'Corriendo…',
|
||
'routines.runNowTimedOut': 'Tiempo de espera agotado — actualiza e intenta de nuevo.',
|
||
'routines.viewHistory': 'Ver historial',
|
||
'routines.loadingHistory': 'Cargando…',
|
||
'routines.noHistory': 'Aún no hay historial de ejecuciones.',
|
||
'routines.statusSuccess': 'Éxito',
|
||
'routines.statusError': 'Error',
|
||
'routines.showOutput': 'Mostrar salida',
|
||
'routines.hideOutput': 'Ocultar salida',
|
||
'routines.toggleEnabled': 'Habilitar o deshabilitar esta rutina',
|
||
'routines.typeAgent': 'Agente',
|
||
'routines.typeCommand': 'Comando',
|
||
'nav.routines': 'Routines',
|
||
'chat.newThread': 'Nuevo hilo',
|
||
'chat.typeMessage': '¿En qué puedo ayudarte hoy?',
|
||
'chat.send': 'Enviar mensaje',
|
||
'chat.thinking': 'Pensando...',
|
||
'chat.noMessages': 'Sin mensajes aún',
|
||
'chat.startConversation': 'Inicia una conversación',
|
||
'chat.regenerate': 'Regenerar',
|
||
'chat.copyResponse': 'Copiar respuesta',
|
||
'chat.citations': 'Citas',
|
||
'chat.toolUsed': 'Herramienta usada',
|
||
'scope.legacy': 'Legado',
|
||
'scope.user': 'Usuario',
|
||
'scope.project': 'Proyecto',
|
||
'skills.title': 'Conexiones',
|
||
'skills.search': 'Buscar conexiones...',
|
||
'skills.noResults': 'No se encontraron conexiones',
|
||
'skills.connect': 'Conectar',
|
||
'skills.disconnect': 'Desconectar',
|
||
'skills.configure': 'Administrar',
|
||
'skills.connected': 'Conectado',
|
||
'skills.available': 'Disponible',
|
||
'skills.addAccount': 'Agregar cuenta',
|
||
'skills.channels': 'Canales',
|
||
'skills.integrations': 'Integraciones',
|
||
'skills.integrationsSubtitle':
|
||
'Conexiones OAuth en la nube: inicia sesión con tu cuenta y Composio gestiona los tokens para que los agentes puedan leer y actuar en tu nombre. Sin claves de API que administrar.',
|
||
'skills.composio.noApiKeyTitle': 'No hay una API key de Composio configurada',
|
||
'skills.composio.noApiKeyDescription':
|
||
'El modo local usa tu propia API key de Composio. Abre Ajustes → Avanzado → Composio para añadir una antes de conectar integraciones aquí.',
|
||
'skills.composio.noApiKeyCta': 'Abrir en Ajustes',
|
||
'skills.tabs.composio': 'Composio',
|
||
'skills.tabs.channels': 'Canales',
|
||
'skills.tabs.mcp': 'MCP Servidores',
|
||
'skills.tabs.runners': 'Runners',
|
||
'memory.title': 'Memoria',
|
||
'memory.search': 'Buscar recuerdos...',
|
||
'memory.noResults': 'No se encontraron recuerdos',
|
||
'memory.empty': 'Sin recuerdos aún. Los recuerdos se crean automáticamente mientras interactúas.',
|
||
'memory.tab.memory': 'Memoria',
|
||
'memory.tab.memoryTree': 'Árbol de memoria',
|
||
'memory.tab.tasks': 'Tareas del agente',
|
||
'memory.tab.tasksDescription':
|
||
'Crea y realiza un seguimiento de tareas: tus propios pendientes más los tableros que tus agentes crean a lo largo de las conversaciones.',
|
||
'memory.tab.subconscious': 'Subconsciente',
|
||
'memory.tab.workflows': 'Workflows',
|
||
'memory.tab.workflowsDescription':
|
||
'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||
'memory.tab.dreams': 'Sueños',
|
||
'memory.tab.calls': 'Llamadas',
|
||
'memory.tab.diagram': 'Diagram',
|
||
'memory.tab.centrality': 'Centrality',
|
||
'memory.tab.namespaces': 'Espacios de nombres',
|
||
'memory.tab.timeline': 'Timeline',
|
||
'memory.tab.settings': 'Configuración',
|
||
'memory.analyzeNow': 'Analizar ahora',
|
||
'memoryTimeline.title': 'Memory Timeline',
|
||
'memoryTimeline.intro':
|
||
'When the assistant learned about you — facts grouped by the month they were last reinforced. Surfaces growth, bursts of activity, and quiet stretches.',
|
||
'memoryTimeline.loading': 'Building the timeline…',
|
||
'memoryTimeline.errorPrefix': 'Could not load the graph:',
|
||
'memoryTimeline.retry': 'Retry',
|
||
'memoryTimeline.namespaceLabel': 'Namespace',
|
||
'memoryTimeline.namespaceAll': 'All namespaces',
|
||
'memoryTimeline.empty': 'No knowledge graph yet.',
|
||
'memoryTimeline.emptyHint':
|
||
'As the assistant records facts about you, their timeline will appear here.',
|
||
'memoryTimeline.metricTotal': 'Facts',
|
||
'memoryTimeline.metricMonths': 'Active months',
|
||
'memoryTimeline.metricRecent': 'Last 30 days',
|
||
'memoryTimeline.heading': 'Facts learned per month',
|
||
'memoryTimeline.busiestCaption': 'Busiest: {period} ({count})',
|
||
'memoryTimeline.undatedNote': '{count} fact(s) have no recorded date.',
|
||
'memoryTimeline.truncated': 'Showing the {shown} most recent of {total} months.',
|
||
'namespaceOverview.title': 'Resumen de espacios de nombres',
|
||
'namespaceOverview.intro':
|
||
'Cómo se distribuye tu conocimiento entre contextos: el número de hechos y entidades distintas registradas en cada espacio de nombres.',
|
||
'namespaceOverview.loading': 'Agregando espacios de nombres…',
|
||
'namespaceOverview.errorPrefix': 'No se pudo cargar el gráfico:',
|
||
'namespaceOverview.retry': 'Reintentar',
|
||
'namespaceOverview.empty': 'Aún no hay gráfico de conocimiento.',
|
||
'namespaceOverview.emptyHint':
|
||
'A medida que el asistente registra hechos entre contextos, cada espacio de nombres aparecerá aquí.',
|
||
'namespaceOverview.metricNamespaces': 'Espacios de nombres',
|
||
'namespaceOverview.metricFacts': 'Hechos',
|
||
'namespaceOverview.metricEntities': 'Entidades',
|
||
'namespaceOverview.heading': 'Por espacio de nombres',
|
||
'namespaceOverview.unnamespaced': '(sin espacio de nombres)',
|
||
'namespaceOverview.factsLabel': '{count} hechos',
|
||
'namespaceOverview.entitiesLabel': '{count} entidades',
|
||
'namespaceOverview.entitiesShort': '{count} ent.',
|
||
'namespaceOverview.truncated':
|
||
'Mostrando los {shown} principales de {total} espacios de nombres.',
|
||
'graphCentrality.title': 'Centralidad del gráfico de conocimiento',
|
||
'graphCentrality.intro':
|
||
'El PageRank sobre su gráfico de memoria muestra los centros de carga y las entidades conectoras que vinculan grupos que de otro modo estarían separados, que un recuento de frecuencia sin procesar no puede revelar.',
|
||
'graphCentrality.loading': 'Centralidad informática…',
|
||
'graphCentrality.errorPrefix': 'No se pudo cargar el gráfico:',
|
||
'graphCentrality.retry': 'Rever',
|
||
'graphCentrality.empty': 'Aún no hay gráfico de conocimiento.',
|
||
'graphCentrality.emptyHint':
|
||
'A medida que el asistente registre datos sobre usted, las entidades más conectadas aparecerán aquí.',
|
||
'graphCentrality.namespaceLabel': 'Espacio de nombres',
|
||
'graphCentrality.namespaceAll': 'Todos los espacios de nombres',
|
||
'graphCentrality.metricEntities': 'Entidades',
|
||
'graphCentrality.metricConnections': 'Conexiones',
|
||
'graphCentrality.metricClusters': 'Clústeres',
|
||
'graphCentrality.clustersCaption': 'Clústeres {components} · holdings más grandes {largest}',
|
||
'graphCentrality.approximateBadge': 'aproximado',
|
||
'graphCentrality.approximateTitle':
|
||
'Se detuvo en el límite de iteración antes de converger completamente',
|
||
'graphCentrality.rankedHeading': 'Principales entidades por influencia',
|
||
'graphCentrality.colRank': '#',
|
||
'graphCentrality.colEntity': 'Entidad',
|
||
'graphCentrality.colInfluence': 'Influencia',
|
||
'graphCentrality.colLinks': 'Campo de golf',
|
||
'graphCentrality.bridgeBadge': 'conector',
|
||
'graphCentrality.bridgeTitle': 'Conector: más influyente de lo que sugiere su número de enlaces',
|
||
'graphCentrality.degreeTitle': '{in} entra · {out} sale',
|
||
'memory.tab.associations': 'Associations',
|
||
'entityAssociations.title': 'Entity Associations',
|
||
'entityAssociations.intro':
|
||
'Entities that share many of the same connections are associated — even when no single fact links them directly. Jaccard similarity surfaces these hidden pairings.',
|
||
'entityAssociations.loading': 'Scoring associations…',
|
||
'entityAssociations.errorPrefix': 'Could not load the graph:',
|
||
'entityAssociations.retry': 'Retry',
|
||
'entityAssociations.empty': 'No associations yet.',
|
||
'entityAssociations.emptyHint':
|
||
'When entities start sharing connections, the strongest pairings will surface here.',
|
||
'entityAssociations.namespaceLabel': 'Namespace',
|
||
'entityAssociations.namespaceAll': 'All namespaces',
|
||
'entityAssociations.metricEntities': 'Entities',
|
||
'entityAssociations.metricPairs': 'Associations',
|
||
'entityAssociations.rankedHeading': 'Strongest associations',
|
||
'entityAssociations.linkedBadge': 'linked',
|
||
'entityAssociations.inferredBadge': 'inferred',
|
||
'entityAssociations.linkedTitle': 'These entities are directly connected.',
|
||
'entityAssociations.inferredTitle':
|
||
'No direct link — associated only through shared connections.',
|
||
'entityAssociations.sharedLabel': '{shared} shared',
|
||
'entityAssociations.pairTitle': '{jaccard}% similar · {shared} of {union} connections shared',
|
||
'entityAssociations.truncated': 'Showing {shown} of {total} — strongest first.',
|
||
'memory.tab.freshness': 'Freshness',
|
||
'memoryFreshness.title': 'Knowledge Freshness',
|
||
'memoryFreshness.intro':
|
||
'Facts the assistant has not reconfirmed lately decay along a forgetting curve. This surfaces what is going stale and worth re-checking, so old facts are not treated as still-certain.',
|
||
'memoryFreshness.loading': 'Scoring freshness…',
|
||
'memoryFreshness.errorPrefix': 'Could not load the graph:',
|
||
'memoryFreshness.retry': 'Retry',
|
||
'memoryFreshness.empty': 'No knowledge graph yet.',
|
||
'memoryFreshness.emptyHint':
|
||
'As the assistant records facts about you, their freshness will be tracked here.',
|
||
'memoryFreshness.namespaceLabel': 'Namespace',
|
||
'memoryFreshness.namespaceAll': 'All namespaces',
|
||
'memoryFreshness.metricFresh': 'Fresh',
|
||
'memoryFreshness.metricFading': 'Fading',
|
||
'memoryFreshness.metricStale': 'Stale',
|
||
'memoryFreshness.recallCaption': 'Average recall {recall}% across {total} facts',
|
||
'memoryFreshness.queueHeading': 'Re-confirm queue',
|
||
'memoryFreshness.queueTruncated': 'Showing {shown} of {total} — address these first.',
|
||
'memoryFreshness.allFresh': 'Every fact is still fresh — nothing to re-confirm.',
|
||
'memoryFreshness.statusFading': 'fading',
|
||
'memoryFreshness.statusStale': 'stale',
|
||
'memoryFreshness.ageLabel': '{days}d old',
|
||
'memoryFreshness.recallTitle': '{recall}% recall · half-life {halfLife}d',
|
||
'memory.tab.path': 'Rutas',
|
||
'connectionPath.title': 'Ruta de conexión',
|
||
'connectionPath.intro':
|
||
'Rastrea la cadena de relaciones más corta que une dos entidades cualesquiera: cómo las conecta el grafo, incluso a través de varios saltos.',
|
||
'connectionPath.loading': 'Cargando el grafo…',
|
||
'connectionPath.errorPrefix': 'No se pudo cargar el grafo:',
|
||
'connectionPath.retry': 'Reintentar',
|
||
'connectionPath.namespaceLabel': 'Espacio de nombres',
|
||
'connectionPath.namespaceAll': 'Todos los espacios de nombres',
|
||
'connectionPath.sourceLabel': 'Desde',
|
||
'connectionPath.targetLabel': 'Hasta',
|
||
'connectionPath.sourcePlaceholder': 'Entidad inicial',
|
||
'connectionPath.targetPlaceholder': 'Entidad final',
|
||
'connectionPath.prompt': 'Elige dos entidades para rastrear cómo están conectadas.',
|
||
'connectionPath.empty': 'Aún no hay grafo de conocimiento.',
|
||
'connectionPath.emptyHint':
|
||
'Cuando el asistente registre datos relacionados, podrás rastrear conexiones aquí.',
|
||
'connectionPath.resultHeading': 'Ruta más corta',
|
||
'connectionPath.pathSummary': 'A {length} salto(s) de distancia',
|
||
'connectionPath.sameMessage': 'Elige dos entidades diferentes.',
|
||
'connectionPath.missingSource': '«{entity}» no está en el grafo.',
|
||
'connectionPath.missingTarget': '«{entity}» no está en el grafo.',
|
||
'connectionPath.noPath': 'No se encontró ninguna conexión entre «{source}» y «{target}».',
|
||
'memoryTree.status.title': 'Árbol de la memoria',
|
||
'memoryTree.status.autoSyncLabel': 'Auto-sincronización',
|
||
'memoryTree.status.autoSyncDescription':
|
||
'Pausa para detener la nueva ingestión. El wiki existente sigue siendo consultable.',
|
||
'memoryTree.status.statusTile': 'Estado',
|
||
'memoryTree.status.lastSyncTile': 'Última sincronización',
|
||
'memoryTree.status.totalChunksTile': 'Fragmentos totales',
|
||
'memoryTree.status.wikiSizeTile': 'Tamaño de la wiki',
|
||
'memoryTree.status.statusRunning': 'Corriendo',
|
||
'memoryTree.status.statusPaused': 'Pausado',
|
||
'memoryTree.status.statusSyncing': 'Sincronizando',
|
||
'memoryTree.status.statusError': 'Error',
|
||
'memoryTree.status.statusIdle': 'Inactivo',
|
||
'memoryTree.status.never': 'Nunca',
|
||
'memoryTree.status.fetchError': 'No se pudo obtener el estado del Árbol de Memoria',
|
||
'memoryTree.status.retry': 'Rever',
|
||
'memoryTree.status.toggleFailed': 'No se pudo activar la sincronización automática',
|
||
'memoryTree.status.justNow': 'justo ahora',
|
||
'memoryTree.status.secondsAgo': '{count}s hace',
|
||
'memoryTree.status.minuteAgo': 'Hace 1 minuto',
|
||
'memoryTree.status.minutesAgo': '{count} hace un minuto',
|
||
'memoryTree.status.hourAgo': 'Hace 1 hora',
|
||
'memoryTree.status.hoursAgo': '{count} hace hr',
|
||
'memoryTree.status.dayAgo': 'Hace 1 día',
|
||
'memoryTree.status.daysAgo': '{count} hace días',
|
||
'memoryTree.status.integrationsTitle': 'Estado por integración',
|
||
'memoryTree.status.integrationsEmpty': 'No hay integraciones conectadas',
|
||
'memoryTree.status.integrationActive': 'Activa',
|
||
'memoryTree.status.integrationStale': 'Inactiva',
|
||
'memoryTree.status.integrationChunks': 'Fragmentos: {count}',
|
||
'alerts.title': 'Alertas',
|
||
'alerts.empty': 'Sin alertas aún',
|
||
'alerts.markAllRead': 'Marcar todo como leído',
|
||
'alerts.unread': 'sin leer',
|
||
'rewards.title': 'Recompensas',
|
||
'rewards.referrals': 'Referidos',
|
||
'rewards.coupons': 'Canjear',
|
||
'rewards.localUnavailable':
|
||
'El acceso local no obtiene recompensas, cupones ni crédito por referidos. Cierra sesión y continúa iniciando sesión con una cuenta de OpenHuman si quieres que las recompensas cuenten.',
|
||
'rewards.localUnavailableCta': 'Abrir ajustes de la cuenta',
|
||
'rewards.credits': 'Créditos',
|
||
'rewards.referralCode': 'Tu código de referido',
|
||
'rewards.copyCode': 'Copiar código',
|
||
'rewards.share': 'Compartir',
|
||
'onboarding.welcome': 'Hola. Soy OpenHuman.',
|
||
'onboarding.welcomeDesc':
|
||
'Tu asistente de IA superinteligente que corre en tu computadora. Privado, simple y extremadamente poderoso.',
|
||
'onboarding.context': 'Recopilación de contexto',
|
||
'onboarding.contextDesc': 'Conecta las herramientas y servicios que usas todos los días.',
|
||
'onboarding.localAI': 'IA local',
|
||
'onboarding.localAIDesc': 'Configura un modelo de IA local que corra en tu máquina.',
|
||
'onboarding.chatProvider': 'Proveedor de chat',
|
||
'onboarding.chatProviderDesc': 'Elige cómo quieres interactuar con tu asistente.',
|
||
'onboarding.referral': 'Referido',
|
||
'onboarding.referralDesc': 'Ingresa un código de referido si tienes uno.',
|
||
'onboarding.finish': 'Finalizar configuración',
|
||
'onboarding.finishDesc': '¡Todo listo! Empieza a usar OpenHuman.',
|
||
'onboarding.skip': 'Omitir',
|
||
'onboarding.getStarted': 'Empezar',
|
||
'onboarding.runtimeChoice.title': '¿Cómo quieres ejecutar OpenHuman?',
|
||
'onboarding.runtimeChoice.subtitle':
|
||
'Elige la configuración que mejor se adapte a ti. Puedes cambiarlo más tarde en Configuración.',
|
||
'onboarding.runtimeChoice.cloud.title': 'Sencillo',
|
||
'onboarding.runtimeChoice.cloud.tagline': 'Deja que OpenHuman lo gestione todo por ti.',
|
||
'onboarding.runtimeChoice.cloud.f1': 'Seguridad integrada',
|
||
'onboarding.runtimeChoice.cloud.f2': 'Compresión de tokens para aprovechar más tu uso',
|
||
'onboarding.runtimeChoice.cloud.f3': 'Una suscripción, todos los modelos incluidos',
|
||
'onboarding.runtimeChoice.cloud.f4': 'Sin claves API que gestionar',
|
||
'onboarding.runtimeChoice.cloud.f5': 'Fácil de configurar',
|
||
'onboarding.runtimeChoice.custom.title': 'Personalizado',
|
||
'onboarding.runtimeChoice.custom.tagline':
|
||
'Usa tus propias claves. Control total sobre lo que usas.',
|
||
'onboarding.runtimeChoice.custom.f1': 'Necesitarás claves API para casi todo',
|
||
'onboarding.runtimeChoice.custom.f2': 'Reutiliza servicios por los que ya pagas',
|
||
'onboarding.runtimeChoice.custom.f3': 'Puede ser gratuito si ejecutas todo localmente',
|
||
'onboarding.runtimeChoice.custom.f4': 'Más configuración, más opciones',
|
||
'onboarding.runtimeChoice.custom.f5': 'Ideal para usuarios avanzados y desarrolladores',
|
||
'onboarding.runtimeChoice.cloud.creditHighlight': '$1 de crédito gratis para probarlo',
|
||
'onboarding.runtimeChoice.continueCloud': 'Continuar con Simple',
|
||
'onboarding.runtimeChoice.continueCustom': 'Continuar con Personalizado',
|
||
'onboarding.runtimeChoice.recommended': 'Recomendado',
|
||
'onboarding.apiKeys.title': 'Agreguemos tus claves API',
|
||
'onboarding.apiKeys.subtitle':
|
||
'Puedes pegarlas ahora u omitir y agregarlas luego en Configuración › IA. Las claves se guardan en este dispositivo, cifradas en reposo.',
|
||
'onboarding.apiKeys.openaiLabel': 'Clave API de OpenAI',
|
||
'onboarding.apiKeys.openaiPlaceholder': 'sk-...',
|
||
'onboarding.apiKeys.openaiOauthHint':
|
||
'Utilice ChatGPT Plus/Pro (suscripción) o una clave OpenAI API; no se requieren ambas.',
|
||
'onboarding.apiKeys.openaiOauthOpening': 'Abriendo inicio de sesión…',
|
||
'onboarding.apiKeys.openaiOauthConnect': 'Iniciar sesión con ChatGPT',
|
||
'onboarding.apiKeys.openaiOauthConnected': 'Conectado con ChatGPT',
|
||
'onboarding.apiKeys.openaiOauthCallbackHint':
|
||
'Después de iniciar sesión, pega la URL de redirección completa de tu navegador (empieza por {url}).',
|
||
'onboarding.apiKeys.oauthDesktopOnly':
|
||
'El inicio de sesión con ChatGPT solo está disponible en la aplicación de escritorio.',
|
||
'onboarding.apiKeys.oauthStartFailed':
|
||
'No se pudo iniciar el inicio de sesión con ChatGPT. Inténtalo de nuevo o usa una clave de API.',
|
||
'onboarding.apiKeys.oauthPasteRedirect':
|
||
'Pega la URL de redirección de tu navegador después de iniciar sesión.',
|
||
'onboarding.apiKeys.oauthCompleteFailed':
|
||
'El inicio de sesión con ChatGPT no se completó. Comprueba la URL de redirección e inténtalo de nuevo.',
|
||
'onboarding.apiKeys.finishSignIn': 'Finalizar el inicio de sesión en ChatGPT',
|
||
'onboarding.apiKeys.orApiKey': 'o tecla API',
|
||
'onboarding.apiKeys.anthropicLabel': 'Clave API de Anthropic',
|
||
'onboarding.apiKeys.anthropicPlaceholder': 'sk-ant-...',
|
||
'onboarding.apiKeys.saveError': 'No se pudo guardar esa clave. Verifícala y vuelve a intentarlo.',
|
||
'onboarding.apiKeys.skipForNow': 'Omitir por ahora',
|
||
'onboarding.apiKeys.continue': 'Guardar y continuar',
|
||
'onboarding.apiKeys.saving': 'Guardando…',
|
||
'onboarding.custom.stepperInference': 'Inferencia',
|
||
'onboarding.custom.stepperVoice': 'Voz',
|
||
'onboarding.custom.stepperOAuth': 'OAuth',
|
||
'onboarding.custom.stepperSearch': 'Búsqueda',
|
||
'onboarding.custom.stepperEmbeddings': 'Embeddings',
|
||
'onboarding.custom.stepperMemory': 'Memoria',
|
||
'onboarding.custom.stepCounter': 'Paso {n} de {total}',
|
||
'onboarding.custom.defaultTitle': 'Por defecto',
|
||
'onboarding.custom.defaultSubtitle': 'Deja que OpenHuman lo gestione por ti.',
|
||
'onboarding.custom.configureTitle': 'Configurar',
|
||
'onboarding.custom.configureSubtitle': 'Yo elijo qué usar.',
|
||
'onboarding.custom.progressAriaLabel': 'Progreso del onboarding',
|
||
'onboarding.custom.continue': 'Continuar',
|
||
'onboarding.custom.back': 'Atrás',
|
||
'onboarding.custom.finish': 'Finalizar configuración',
|
||
'onboarding.custom.configureLater':
|
||
'Puedes terminar de configurar esto después del onboarding. Te llevaremos a la página de configuración correspondiente cuando termines.',
|
||
'onboarding.custom.openSettings': 'Abrir en Configuración',
|
||
'onboarding.custom.inference.title': 'Inferencia (Texto)',
|
||
'onboarding.custom.inference.subtitle':
|
||
'¿Qué modelo de lenguaje debe responder tus preguntas y ejecutar tus agentes?',
|
||
'onboarding.custom.inference.defaultDesc':
|
||
'OpenHuman dirige cada carga de trabajo a un modelo predeterminado adecuado. Sin claves, sin configuración.',
|
||
'onboarding.custom.inference.configureDesc':
|
||
'Usa tu propia clave de OpenAI o Anthropic. La usamos para todas las cargas de trabajo basadas en texto.',
|
||
'onboarding.custom.voice.title': 'Voz',
|
||
'onboarding.custom.voice.subtitle': 'Texto a voz y voz a texto para el modo de voz.',
|
||
'onboarding.custom.voice.defaultDesc':
|
||
'OpenHuman incluye STT/TTS gestionado que funciona de inmediato. Sin nada que configurar.',
|
||
'onboarding.custom.voice.configureDesc':
|
||
'Usa tu propio ElevenLabs / OpenAI Whisper / etc. Configura en Configuración › Voz.',
|
||
'onboarding.custom.oauth.title': 'Conexiones (OAuth)',
|
||
'onboarding.custom.oauth.subtitle':
|
||
'Gmail, Slack, Notion y otros servicios conectados que necesitan OAuth.',
|
||
'onboarding.custom.oauth.defaultDesc':
|
||
'OpenHuman ejecuta un espacio de trabajo de Composio gestionado. Un clic para conectar cada servicio más tarde.',
|
||
'onboarding.custom.oauth.configureDesc':
|
||
'Usa tu propia cuenta / clave API de Composio. Configura en Configuración › Conexiones.',
|
||
'onboarding.custom.search.title': 'Búsqueda web',
|
||
'onboarding.custom.search.subtitle': 'Cómo OpenHuman busca en la web en tu nombre.',
|
||
'onboarding.custom.search.defaultDesc':
|
||
'OpenHuman usa un backend de búsqueda gestionado. Sin claves necesarias.',
|
||
'onboarding.custom.search.configureDesc':
|
||
'Usa tu propia clave de proveedor de búsqueda (Tavily, Brave, etc.). Configura en Configuración › Herramientas.',
|
||
'onboarding.custom.embeddings.title': 'Embeddings',
|
||
'onboarding.custom.embeddings.subtitle':
|
||
'Cómo OpenHuman genera embeddings vectoriales para la búsqueda semántica en memoria.',
|
||
'onboarding.custom.embeddings.defaultDesc':
|
||
'OpenHuman usa un servicio de embeddings gestionado. No se necesita clave de API.',
|
||
'onboarding.custom.embeddings.configureDesc':
|
||
'Usa tu propio proveedor de embeddings (OpenAI, Voyage, Ollama, etc.).',
|
||
'onboarding.custom.memory.title': 'Memoria',
|
||
'onboarding.custom.memory.subtitle':
|
||
'Cómo OpenHuman recuerda tu contexto, preferencias y conversaciones anteriores.',
|
||
'onboarding.custom.memory.defaultDesc':
|
||
'OpenHuman gestiona el almacenamiento y la recuperación de memoria automáticamente. Sin nada que configurar.',
|
||
'onboarding.custom.memory.configureDesc':
|
||
'Inspecciona, exporta o borra la memoria tú mismo. Configura en Configuración › Memoria.',
|
||
'accounts.addAccount': 'Agregar cuenta',
|
||
'accounts.manageAccounts': 'Administrar cuentas',
|
||
'accounts.noAccounts': 'Sin cuentas conectadas',
|
||
'accounts.connectAccount': 'Conecta una cuenta para empezar',
|
||
'accounts.agent': 'Agente',
|
||
'accounts.respondQueue': 'Cola de respuestas',
|
||
'accounts.disconnect': 'Desconectar',
|
||
'accounts.disconnectConfirm': '¿Seguro que quieres desconectar esta cuenta?',
|
||
'accounts.disconnectClearMemory': 'Eliminar también la memoria de esta fuente',
|
||
'accounts.disconnectClearMemoryHint':
|
||
'Elimina permanentemente los fragmentos de memoria locales vinculados a esta conexión.',
|
||
'accounts.searchAccounts': 'Buscar cuentas...',
|
||
'channels.title': 'Canales',
|
||
'channels.configure': 'Configurar canal',
|
||
'channels.setup': 'Configurar',
|
||
'channels.noChannels': 'Sin canales configurados',
|
||
'channels.localManagedUnavailable':
|
||
'Los canales gestionados no están disponibles para usuarios locales.',
|
||
'channels.addChannel': 'Agregar canal',
|
||
'channels.status.connected': 'Conectado',
|
||
'channels.status.disconnected': 'Desconectado',
|
||
'channels.status.error': 'error',
|
||
'channels.status.configuring': 'Configurando',
|
||
'channels.defaultMessaging': 'Canal de mensajería predeterminado',
|
||
'webhooks.title': 'Ganchos web',
|
||
'webhooks.create': 'Crear webhook',
|
||
'webhooks.noWebhooks': 'Sin webhooks configurados',
|
||
'webhooks.url': 'URL',
|
||
'webhooks.secret': 'Secreto',
|
||
'webhooks.events': 'Eventos',
|
||
'webhooks.archiveDirectory': 'Directorio de archivo',
|
||
'webhooks.todayFile': 'Archivo de hoy',
|
||
'invites.title': 'Invitaciones',
|
||
'invites.create': 'Crear invitación',
|
||
'invites.noInvites': 'Sin invitaciones pendientes',
|
||
'invites.code': 'Código de invitación',
|
||
'invites.copyLink': 'Copiar enlace',
|
||
'invites.generate': 'Generar invitación',
|
||
'invites.generating': 'Generando...',
|
||
'invites.refreshing': 'Actualizando invitaciones...',
|
||
'invites.loading': 'Cargando invitaciones...',
|
||
'invites.copyCodeAria': 'Copiar código de invitación',
|
||
'invites.revokeAria': 'Revocar invitación',
|
||
'invites.usedUp': 'Agotado',
|
||
'invites.uses': 'Usos: {current}{max}',
|
||
'invites.expiresOn': 'Expira el {date}',
|
||
'invites.empty': 'Aún no hay invitaciones',
|
||
'invites.emptyHint': 'Genera un código de invitación para compartir con otras personas',
|
||
'invites.revokeTitle': 'Revocar código de invitación',
|
||
'invites.revokePromptPrefix': '¿Estás seguro de que quieres revocar el código de invitación?',
|
||
'invites.revokeWarning':
|
||
'Este código de invitación dejará de ser válido y no podrá usarse para unirse al equipo.',
|
||
'invites.revoking': 'Revocando...',
|
||
'invites.revokeAction': 'Revocar invitación',
|
||
'invites.failedGenerate': 'No se pudo generar la invitación',
|
||
'invites.failedRevoke': 'No se pudo revocar la invitación',
|
||
'team.refreshingMembers': 'Miembros refrescantes...',
|
||
'team.loadingMembers': 'Cargando miembros...',
|
||
'team.memberCount': '{count} miembro',
|
||
'team.memberCountPlural': '{count} miembros',
|
||
'team.you': '(tú)',
|
||
'team.removeAria': 'Quitar {name}',
|
||
'team.noMembers': 'No se encontraron miembros',
|
||
'team.removeTitle': 'Eliminar miembro del equipo',
|
||
'team.removePromptPrefix': '¿Estás seguro de que quieres eliminar?',
|
||
'team.removePromptSuffix': 'del equipo?',
|
||
'team.removeWarning': 'Perderán el acceso al equipo y a todos los recursos del equipo.',
|
||
'team.removing': 'Eliminando...',
|
||
'team.removeAction': 'Eliminar miembro',
|
||
'team.changeRoleTitle': 'Cambiar rol de miembro',
|
||
'team.changeRolePrompt': '¿Cambiar el rol de {name} de {oldRole} a {newRole}?',
|
||
'team.changeRoleAdminGrant':
|
||
'Esto les otorgará permisos completos de administrador, incluida la capacidad de gestionar miembros del equipo.',
|
||
'team.changeRoleAdminRemove':
|
||
'Esto eliminará sus permisos de administrador y ya no podrán gestionar el equipo.',
|
||
'team.changing': 'Cambiando...',
|
||
'team.changeRoleAction': 'Cambiar rol',
|
||
'team.failedChangeRole': 'No se pudo cambiar el rol',
|
||
'team.failedRemoveMember': 'No se pudo eliminar el miembro',
|
||
'devOptions.title': 'Avanzado',
|
||
'devOptions.diagnostics': 'Diagnósticos',
|
||
'devOptions.diagnosticsDesc': 'Estado del sistema, registros y métricas de rendimiento',
|
||
'devOptions.toolPolicyDiagnosticsDesc':
|
||
'Inventario de herramientas, postura política, listas permitidas de MCP y bloqueos recientes',
|
||
'devOptions.toolPolicyDiagnostics.loading': 'Cargando…',
|
||
'devOptions.toolPolicyDiagnostics.unavailable': 'Diagnóstico no disponible',
|
||
'devOptions.toolPolicyDiagnostics.posture.title': 'Postura política',
|
||
'devOptions.toolPolicyDiagnostics.posture.autonomy': 'Autonomía:',
|
||
'devOptions.toolPolicyDiagnostics.posture.workspaceOnly': 'Solo espacio de trabajo:',
|
||
'devOptions.toolPolicyDiagnostics.posture.maxActionsPerHour': 'Máximo actions/hr:',
|
||
'devOptions.toolPolicyDiagnostics.posture.approvalMediumRisk': 'Aprobación (riesgo medio):',
|
||
'devOptions.toolPolicyDiagnostics.posture.blockHighRisk': 'Bloquear alto riesgo:',
|
||
'devOptions.toolPolicyDiagnostics.inventory.title': 'Inventario',
|
||
'devOptions.toolPolicyDiagnostics.inventory.totalTools': 'herramientas totales',
|
||
'devOptions.toolPolicyDiagnostics.inventory.enabledTools': 'Herramientas habilitadas',
|
||
'devOptions.toolPolicyDiagnostics.inventory.mcpStdioTools': 'Herramientas estándar MCP',
|
||
'devOptions.toolPolicyDiagnostics.inventory.jsonRpcTools': 'Herramientas JSON-RPC',
|
||
'devOptions.toolPolicyDiagnostics.mcpAllowlists.title': 'Listas permitidas de MCP',
|
||
'devOptions.toolPolicyDiagnostics.mcpAllowlists.summary':
|
||
'Habilitado: {enabled} · Servidores: {enabledCount}/{totalCount}',
|
||
'devOptions.toolPolicyDiagnostics.mcpAllowlists.unnamed': '<sin nombre>',
|
||
'devOptions.toolPolicyDiagnostics.mcpAllowlists.allowDeny':
|
||
'permitir={allowCount} negar={denyCount}',
|
||
'devOptions.toolPolicyDiagnostics.mcpWriteAudit.title': 'Auditoría de escritura MCP',
|
||
'devOptions.toolPolicyDiagnostics.mcpWriteAudit.summary':
|
||
'Habilitado: {enabled} · Reciente (24h): {recentRows}',
|
||
'devOptions.toolPolicyDiagnostics.recentBlocked.title': 'Llamadas bloqueadas recientes',
|
||
'devOptions.toolPolicyDiagnostics.recentBlocked.empty': 'No se registraron llamadas bloqueadas.',
|
||
'devOptions.toolPolicyDiagnostics.redactedSurfaces.title': 'Superficies redactadas',
|
||
'devOptions.toolPolicyDiagnostics.redactedSurfaces.summary':
|
||
'Capacidad de escritura: {writeCount} · Superficies de política: {policyCount}',
|
||
'devOptions.debugPanels': 'Paneles de depuración',
|
||
'devOptions.debugPanelsDesc':
|
||
'Banderas de funciones, inspección de estado y herramientas de depuración',
|
||
'devOptions.webhooks': 'Ganchos web',
|
||
'devOptions.webhooksDesc': 'Configurar y probar integraciones de webhook',
|
||
'devOptions.memoryInspection': 'Inspección de memoria',
|
||
'devOptions.memoryInspectionDesc': 'Explorar, consultar y administrar entradas de memoria',
|
||
'voice.pushToTalk': 'Pulsar para hablar',
|
||
'voice.recording': 'Grabando...',
|
||
'voice.processing': 'Procesando...',
|
||
'voice.languageHint': 'Idioma',
|
||
'misc.rehydrating': 'Cargando tus datos...',
|
||
'misc.checkingServices': 'Verificando servicios...',
|
||
'misc.serviceUnavailable': 'Servicio no disponible',
|
||
'misc.somethingWentWrong': 'Algo salió mal',
|
||
'misc.tryAgainLater': 'Por favor, inténtalo más tarde.',
|
||
'misc.restartApp': 'Reiniciar app',
|
||
'misc.updateAvailable': 'Actualización disponible',
|
||
'misc.updateNow': 'Actualizar ahora',
|
||
'misc.updateLater': 'Después',
|
||
'misc.downloading': 'Descargando...',
|
||
'misc.installing': 'Instalando...',
|
||
'misc.beta':
|
||
'OpenHuman está en beta temprana. No dudes en compartir comentarios o reportar cualquier error que encuentres — cada reporte nos ayuda a mejorar más rápido.',
|
||
'misc.betaFeedback': 'Enviar comentarios',
|
||
'mnemonic.title': 'Frase de recuperación',
|
||
'mnemonic.warning': 'Escribe estas palabras en orden y guárdalas en un lugar seguro.',
|
||
'mnemonic.copyWarning':
|
||
'Nunca compartas tu frase de recuperación. Cualquiera con estas palabras puede acceder a tu cuenta.',
|
||
'mnemonic.copied': 'Frase de recuperación copiada al portapapeles',
|
||
'mnemonic.reveal': 'Mostrar frase',
|
||
'mnemonic.revealPhrase': 'Mostrar frase de recuperación',
|
||
'mnemonic.hidden': 'La frase de recuperación está oculta',
|
||
'privacy.title': 'Privacidad y seguridad',
|
||
'privacy.description': 'Informe de transparencia de datos enviados a servicios externos.',
|
||
'privacy.empty': 'No se detectaron transferencias de datos externas.',
|
||
'privacy.whatLeavesComputer': 'Qué sale de tu computadora',
|
||
'privacy.loading': 'Cargando detalles de privacidad...',
|
||
'privacy.loadError':
|
||
'No se pudo cargar la lista de privacidad en vivo. Los controles de análisis a continuación aún funcionan.',
|
||
'privacy.noCapabilities': 'Ninguna capacidad divulga movimiento de datos actualmente.',
|
||
'privacy.sentTo': 'Enviado a',
|
||
'privacy.leavesDevice': 'Sale del dispositivo',
|
||
'privacy.staysLocal': 'Se queda local',
|
||
'privacy.anonymizedAnalytics': 'Analítica del producto',
|
||
'privacy.shareAnonymizedData': 'Compartir analítica del producto y diagnósticos',
|
||
'privacy.shareAnonymizedDataDesc':
|
||
'Ayuda a mejorar OpenHuman compartiendo informes de fallos y eventos de uso con privacidad limitada, incluido un ID de cuenta estable y metadatos de la versión de la app. Nunca se recopilan mensajes, claves de billetera, claves API ni tokens de sesión.',
|
||
'privacy.meetingFollowUps': 'Seguimientos de reuniones',
|
||
'privacy.autoHandoffMeet':
|
||
'Transferencia automática de transcripciones de Google Meet al orquestador',
|
||
'privacy.autoHandoffMeetDesc':
|
||
'Cuando termina una llamada de Google Meet, el orquestador de OpenHuman puede leer la transcripción y tomar acciones como redactar mensajes, programar seguimientos o publicar resúmenes en tu espacio de Slack conectado. Desactivado por defecto.',
|
||
'privacy.analyticsDisclaimer':
|
||
'Cuando está activado, la analítica del producto y los diagnósticos pueden incluir informes de fallos y eventos de uso con privacidad limitada, un ID de cuenta estable y metadatos de la versión de la app. Nunca se recopilan mensajes, claves de billetera, claves API ni tokens de sesión. Puedes cambiar esta configuración en cualquier momento.',
|
||
'settings.about.version': 'Versión',
|
||
'settings.about.updateAvailable': 'está disponible',
|
||
'settings.about.softwareUpdates': 'Actualizaciones de software',
|
||
'settings.about.lastChecked': 'Última verificación',
|
||
'settings.about.checking': 'Verificando...',
|
||
'settings.about.checkForUpdates': 'Buscar actualizaciones',
|
||
'settings.about.releases': 'Versiones',
|
||
'settings.about.releasesDesc':
|
||
'Explora las notas de versión y compilaciones anteriores en GitHub.',
|
||
'settings.about.openReleases': 'Abrir versiones en GitHub',
|
||
'settings.about.connection': 'Conexión',
|
||
'settings.about.connectionMode': 'Modo',
|
||
'settings.about.connectionModeLocal': 'locales',
|
||
'settings.about.connectionModeCloud': 'nube',
|
||
'settings.about.connectionModeUnset': 'No seleccionado',
|
||
'settings.about.serverUrl': 'Servidor URL',
|
||
'settings.about.serverUrlUnavailable': 'No disponible',
|
||
'settings.about.connectionHelperLocal':
|
||
'Generado en el proceso por la shell Tauri al iniciar la aplicación. El puerto se elige al inicio, por lo que este URL cambia entre lanzamientos.',
|
||
'settings.about.connectionHelperCloud':
|
||
'Conectado a un núcleo remoto. Cambia esto en BootCheck o en el selector de modo en la nube.',
|
||
'settings.heartbeat.title': 'Latidos y bucles',
|
||
'settings.heartbeat.desc':
|
||
'Controla los ritmos de programación en segundo plano e inspecciona el mapa del bucle.',
|
||
'settings.ledgerUsage.title': 'Libro mayor de uso',
|
||
'settings.ledgerUsage.desc':
|
||
'Gasto de crédito reciente, matemáticas de presupuesto y presupuesto de lectura de fondo API.',
|
||
'settings.costDashboard.title': 'Panel de costos',
|
||
'settings.costDashboard.desc':
|
||
'Gasto de 7 días y quema de tokens en todo el enjambre, con ritmo de presupuesto y desglose por modelo.',
|
||
'settings.costDashboard.sevenDayCost': 'Costo diario de 7 días',
|
||
'settings.costDashboard.sevenDayTokens': 'Uso de token de 7 días',
|
||
'settings.costDashboard.totalSpend': 'Total de 7 días',
|
||
'settings.costDashboard.monthlyPace': 'Ritmo mensual',
|
||
'settings.costDashboard.budgetLimit': 'Límite de presupuesto',
|
||
'settings.costDashboard.utilization': 'Uso',
|
||
'settings.costDashboard.modelBreakdown': 'Desglose por modelo',
|
||
'settings.costDashboard.model': 'Modelo',
|
||
'settings.costDashboard.provider': 'proveedor',
|
||
'settings.costDashboard.cost': 'Costo',
|
||
'settings.costDashboard.tokens': 'Fichas',
|
||
'settings.costDashboard.requests': 'Solicitudes',
|
||
'settings.costDashboard.percentOfTotal': '% del total',
|
||
'settings.costDashboard.inputTokens': 'entrado',
|
||
'settings.costDashboard.outputTokens': 'Salida',
|
||
'settings.costDashboard.budgetNormal': 'En camino',
|
||
'settings.costDashboard.budgetWarning': 'Advertencia',
|
||
'settings.costDashboard.budgetExceeded': 'Por encima del presupuesto',
|
||
'settings.costDashboard.noBudget': 'Sin límite establecido',
|
||
'settings.costDashboard.noData': 'No se ha registrado ningún costo en los últimos 7 días.',
|
||
'settings.costDashboard.noModels': 'No hay actividad del modelo en los últimos 7 días.',
|
||
'settings.costDashboard.loading': 'Cargando panel de costos…',
|
||
'settings.costDashboard.disabledHint':
|
||
'El panel de costos está deshabilitado en la configuración. Configure [cost.dashboard] enabled = true en config.toml para volver a habilitarlo.',
|
||
'settings.costDashboard.subtitle':
|
||
'Gasto en vivo y quema de tokens en todo el enjambre. Las barras se actualizan automáticamente cada pocos segundos — no se necesita recargar la página.',
|
||
'settings.costDashboard.summaryAriaLabel': 'Métricas de resumen de costos',
|
||
'settings.costDashboard.lastSevenDays': 'últimos 7 días',
|
||
'settings.costDashboard.utilizationOf': 'de',
|
||
'settings.costDashboard.thisMonth': 'este mes',
|
||
'settings.costDashboard.monthlyPaceHint':
|
||
'Gasto mensual proyectado al ritmo diario actual (promedio × 30).',
|
||
'settings.costDashboard.budgetLimitHint':
|
||
'Presupuesto mensual leído de cost.monthly_limit_usd en config.toml.',
|
||
'settings.costDashboard.dailyTarget': 'Objetivo diario',
|
||
'settings.costDashboard.today': 'Hoy',
|
||
'settings.costDashboard.todayBadge': 'HOY',
|
||
'settings.costDashboard.unknownProvider': '—',
|
||
'settings.costDashboard.justNow': 'Hace un momento',
|
||
'settings.costDashboard.secondsAgo': '{value}s hace',
|
||
'settings.costDashboard.minutesAgo': '{value}m hace',
|
||
'settings.costDashboard.hoursAgo': '{value}h hace',
|
||
'settings.costDashboard.daysAgo': '{value}d hace',
|
||
'settings.costDashboard.updated': 'Actualizado',
|
||
'settings.costDashboard.refresh': 'Refrescar',
|
||
'settings.costDashboard.utcNote': 'Días agrupados en UTC',
|
||
'settings.costDashboard.stackedNote': 'Entrada + salida apiladas',
|
||
'settings.costDashboard.modelBreakdownHint': 'Agregado a lo largo de los últimos 7 días.',
|
||
'settings.costDashboard.noDataHint':
|
||
'Envía un mensaje de agente: el uso de tokens de la próxima llamada al proveedor se mostrará en el gráfico en aproximadamente 10 segundos.',
|
||
'settings.search.title': 'motor de búsqueda',
|
||
'settings.search.menuDesc':
|
||
'Por defecto, usa la búsqueda gestionada por OpenHuman o conecta tu propio proveedor con una clave API.',
|
||
'settings.search.description':
|
||
'Elige el motor de búsqueda que usa el agente, o deshabilita las herramientas de búsqueda por completo. Gestionado usa el backend de OpenHuman (sin configuración). Parallel, Brave y Querit se ejecutan directamente desde tu máquina usando tu clave de API.',
|
||
'settings.search.engineAria': 'motor de búsqueda',
|
||
'settings.search.engineDisabledLabel': 'Disabled',
|
||
'settings.search.engineDisabledDesc':
|
||
'Elimina las herramientas de búsqueda del contexto del agente y de la lista de herramientas disponibles.',
|
||
'settings.search.engineManagedLabel': 'OpenHuman Gestionado',
|
||
'settings.search.engineManagedDesc':
|
||
'Predeterminado. Enrutado a través del backend OpenHuman — no se requiere la clave API.',
|
||
'settings.search.localManagedUnavailable':
|
||
'La búsqueda gestionada por OpenHuman no está disponible para usuarios locales. Añade tu propia API key de Parallel o Brave para habilitar la búsqueda web.',
|
||
'settings.search.engineParallelLabel': 'paralelo',
|
||
'settings.search.engineParallelDesc':
|
||
'Direct Parallel API: buscar, extraer, chatear, investigar, enriquecer, herramientas de conjuntos de datos.',
|
||
'settings.search.engineBraveLabel': 'Brave Buscar',
|
||
'settings.search.engineBraveDesc':
|
||
'Búsqueda Directa Brave API: herramientas web, de noticias, de imágenes y de videos.',
|
||
'settings.search.engineQueritLabel': 'Quiere',
|
||
'settings.search.engineQueritDesc':
|
||
'Direct Querit API: búsqueda web con filtros de sitio, rango de tiempo, país e idioma.',
|
||
'settings.search.statusConfigured': 'Configurado',
|
||
'settings.search.statusNeedsKey': 'Necesita la clave API',
|
||
'settings.search.fallbackToManaged':
|
||
'No se ha configurado ninguna clave: la búsqueda volverá a Managed hasta que se guarde una clave.',
|
||
'settings.search.getApiKey': 'Obtener la clave API',
|
||
'settings.search.save': 'Guardar',
|
||
'settings.search.clear': 'Borrar',
|
||
'settings.search.show': 'Mostrar',
|
||
'settings.search.hide': 'Ocultar',
|
||
'settings.search.statusSaving': 'Guardando…',
|
||
'settings.search.statusSaved': 'Guardado.',
|
||
'settings.search.statusError': 'Fallido',
|
||
'settings.search.parallelKeyLabel': 'Parallel API clave',
|
||
'settings.search.braveKeyLabel': 'Brave Buscar clave API',
|
||
'settings.search.queritKeyLabel': 'Querit clave API',
|
||
'settings.search.placeholderStored': '•••••••• (almacenado)',
|
||
'settings.search.placeholderParallel': 'pk_...',
|
||
'settings.search.placeholderBrave': 'BSA...',
|
||
'settings.search.placeholderQuerit': 'Querit clave API',
|
||
'settings.search.allowedSitesLabel': 'Sitios web permitidos',
|
||
'settings.search.allowedSitesHint':
|
||
'Hosts que el asistente puede abrir y leer — mediante recuperación web y la herramienta de navegador — uno por línea, p. ej. reuters.com. Un host también incluye sus subdominios. La búsqueda web en sí no está restringida por esta lista.',
|
||
'settings.search.allowedSitesAllOn':
|
||
'El asistente puede abrir cualquier sitio web público. Las direcciones locales y privadas permanecen bloqueadas.',
|
||
'settings.search.allowedSitesPlaceholder': 'reuters.com\napnews.com\ngithub.com',
|
||
'settings.search.allowedSitesSave': 'Guardar sitios web',
|
||
'settings.search.accessModeAria': 'Modo de acceso web',
|
||
'settings.search.accessAllowAll': 'Permitir todo',
|
||
'settings.search.accessCustom': 'Personalizado',
|
||
'settings.search.accessBlockAll': 'Bloquear todo',
|
||
'settings.search.accessBlockAllHint':
|
||
'Todo el acceso web está bloqueado: el asistente no puede abrir ni leer ningún sitio web.',
|
||
'settings.embeddings.title': 'Incrustaciones',
|
||
'settings.embeddings.description':
|
||
'Elige qué proveedor de embeddings convierte la memoria en vectores para la búsqueda semántica. Cambiar el proveedor, modelo o dimensiones invalida los vectores almacenados y requiere un reinicio completo de la memoria.',
|
||
'settings.embeddings.providerAria': 'Proveedor de embeddings',
|
||
'settings.embeddings.statusConfigured': 'Configurado',
|
||
'settings.embeddings.statusNeedsKey': 'Necesita clave API',
|
||
'settings.embeddings.apiKeyLabel': 'Clave API de {provider}',
|
||
'settings.embeddings.placeholderStored': '•••••••• (almacenado)',
|
||
'settings.embeddings.placeholderKey': 'Pega tu clave API…',
|
||
'settings.embeddings.keyStoredEncrypted': 'Tu clave API se almacena cifrada en este dispositivo.',
|
||
'settings.embeddings.show': 'Mostrar',
|
||
'settings.embeddings.hide': 'Ocultar',
|
||
'settings.embeddings.save': 'Guardar',
|
||
'settings.embeddings.clear': 'Borrar',
|
||
'settings.embeddings.model': 'Modelo',
|
||
'settings.embeddings.dimensions': 'Dimensiones',
|
||
'settings.embeddings.customEndpoint': 'Endpoint personalizado',
|
||
'settings.embeddings.customModelPlaceholder': 'Nombre del modelo',
|
||
'settings.embeddings.customDimsPlaceholder': 'Se atenúa',
|
||
'settings.embeddings.applyCustom': 'Aplicar',
|
||
'settings.embeddings.testConnection': 'Probar conexión',
|
||
'settings.embeddings.testing': 'Probando…',
|
||
'settings.embeddings.testSuccess': 'Conectado — {dims} dimensiones',
|
||
'settings.embeddings.testFailed': 'Fallido: {error}',
|
||
'settings.embeddings.saving': 'Guardando…',
|
||
'settings.embeddings.saved': 'Guardado.',
|
||
'settings.embeddings.errorPrefix': 'Fallido',
|
||
'settings.embeddings.wipeTitle': '¿Reiniciar vectores de memoria?',
|
||
'settings.embeddings.wipeBody':
|
||
'Cambiar el proveedor de embeddings, modelo o dimensiones borrará todos los vectores de memoria almacenados. La memoria debe reconstruirse antes de que la recuperación funcione de nuevo. Esto no se puede deshacer.',
|
||
'settings.embeddings.cancel': 'Cancelar',
|
||
'settings.embeddings.confirmWipe': 'Borrar y aplicar',
|
||
'settings.embeddings.setupTitle': 'Configurar {provider}',
|
||
'settings.embeddings.saveAndSwitch': 'Guardar y cambiar',
|
||
'settings.embeddings.optional': 'opcional',
|
||
'settings.embeddings.vectorSearchDisabled':
|
||
'La búsqueda vectorial está desactivada. La recuperación de memoria utilizará únicamente la coincidencia de palabras clave y la actualidad — sin clasificación semántica.',
|
||
'settings.embeddings.clearKey': 'Borrar clave API',
|
||
'pages.settings.ai.embeddings': 'Incrustaciones',
|
||
'pages.settings.ai.embeddingsDesc':
|
||
'Modelo de codificación vectorial para recuperación de memoria',
|
||
'mcp.alphaBadge': 'Alfa',
|
||
'mcp.alphaBannerText':
|
||
'La compatibilidad con el servidor MCP se encuentra en las primeras etapas alfa. El registro de Smithery, el flujo de instalación y el cableado de herramientas pueden comportarse mal o cambiar de forma entre versiones.',
|
||
'mcp.toolList.noTools': 'No hay herramientas disponibles.',
|
||
'mcp.setup.secretDialog.title': 'Configuración MCP: ingresar secreto',
|
||
'mcp.setup.secretDialog.bodyPrefix': 'El agente de configuración MCP necesita',
|
||
'mcp.setup.secretDialog.bodySuffix':
|
||
'. Su valor se envía directamente al proceso principal y nunca entra en la conversación AI.',
|
||
'mcp.setup.secretDialog.inputLabel': 'Valor',
|
||
'mcp.setup.secretDialog.inputPlaceholder': 'Pegar aquí',
|
||
'mcp.setup.secretDialog.show': 'Mostrar',
|
||
'mcp.setup.secretDialog.hide': 'Ocultar',
|
||
'mcp.setup.secretDialog.submit': 'Enviar',
|
||
'mcp.setup.secretDialog.cancel': 'Cancelar',
|
||
'mcp.setup.secretDialog.submitting': 'Enviando…',
|
||
'mcp.setup.secretDialog.errorPrefix': 'No se pudo enviar:',
|
||
'mcp.setup.secretDialog.privacyNote':
|
||
'Almacenado cifrado en la tabla de secretos local MCP. Nunca se registra ni se envía a un modelo.',
|
||
'devices.betaBadge': 'Beta',
|
||
'devices.betaText':
|
||
'Esta función está actualmente en beta. Vincula teléfonos iOS con este OpenHuman para usarlos como cliente remoto.',
|
||
'devices.comingSoonDescription':
|
||
'El emparejamiento de dispositivos llegará pronto. Esta página será el lugar para emparejar iPhones y gestionar dispositivos conectados.',
|
||
'devices.title': 'Dispositivos',
|
||
'devices.pairIphone': 'Emparejar iPhone',
|
||
'devices.noPaired': 'No hay dispositivos emparejados',
|
||
'devices.emptyState': 'Escanee un QR code en su iPhone para conectarlo a esta sesión OpenHuman.',
|
||
'devices.devicePairedTitle': 'Dispositivo emparejado',
|
||
'devices.devicePairedMessage': 'iPhone conectado correctamente.',
|
||
'devices.deviceRevokedTitle': 'Dispositivo revocado',
|
||
'devices.deviceRevokedMessage': '{label} eliminado.',
|
||
'devices.revokeFailedTitle': 'Revocar falló',
|
||
'devices.online': 'En línea',
|
||
'devices.offline': 'Sin conexión',
|
||
'devices.lastSeenNever': 'nunca',
|
||
'devices.lastSeenNow': 'Justo ahora',
|
||
'devices.lastSeenMinutes': 'Hace {count}m',
|
||
'devices.lastSeenHours': 'Hace {count}h',
|
||
'devices.lastSeenDays': 'Hace {count}d',
|
||
'devices.revoke': 'Revocar',
|
||
'devices.revokeAria': 'Revocar {label}',
|
||
'devices.confirmRevokeTitle': '¿Revocar dispositivo?',
|
||
'devices.confirmRevokeBody': '{label} ya no podrá conectarse. Esta acción no se puede deshacer.',
|
||
'devices.loadFailed': 'Error al cargar los dispositivos: {message}',
|
||
'devices.pairModal.title': 'Emparejar iPhone',
|
||
'devices.pairModal.loading': 'Generando código de emparejamiento…',
|
||
'devices.pairModal.instructions': 'Abre la app de OpenHuman en tu iPhone y escanea este código.',
|
||
'devices.pairModal.expiresIn': 'El código caduca en ~{count} minuto',
|
||
'devices.pairModal.expiresInPlural': 'El código caduca en ~{count} minutos',
|
||
'devices.pairModal.showDetails': 'Mostrar detalles',
|
||
'devices.pairModal.hideDetails': 'Ocultar detalles',
|
||
'devices.pairModal.channelId': 'ID de canal',
|
||
'devices.pairModal.pairingUrl': 'Emparejamiento URL',
|
||
'devices.pairModal.expiredTitle': 'El código QR expiró',
|
||
'devices.pairModal.expiredBody': 'Genera un código nuevo para continuar con el emparejamiento.',
|
||
'devices.pairModal.generateNewCode': 'Generar nuevo código',
|
||
'devices.pairModal.successTitle': 'iPhone emparejado',
|
||
'devices.pairModal.autoClose': 'Cerrando automáticamente…',
|
||
'devices.pairModal.errorPrefix': 'No se pudo crear el emparejamiento: {message}',
|
||
'devices.pairModal.errorTitle': 'Algo salió mal',
|
||
'devices.pairModal.copyUrl': 'Copiar',
|
||
'mcp.catalog.searchAria': 'Buscar catálogo de herrería',
|
||
'mcp.catalog.searchPlaceholder': 'Buscar en el catálogo de Herrería...',
|
||
'mcp.catalog.loadFailed': 'No se pudo cargar el catálogo',
|
||
'mcp.catalog.noResults': 'No se encontraron servidores.',
|
||
'mcp.catalog.noResultsFor': 'No se encontraron servidores para "{query}".',
|
||
'mcp.catalog.loadMore': 'Cargar más',
|
||
'mcp.configAssistant.title': 'Asistente de configuración',
|
||
'mcp.configAssistant.empty':
|
||
'Pregunte sobre la configuración, las variables de entorno requeridas o los pasos de configuración.',
|
||
'mcp.configAssistant.suggestedValues': 'Valores sugeridos:',
|
||
'mcp.configAssistant.valueHidden': '(valor oculto)',
|
||
'mcp.configAssistant.applySuggested': 'Aplicar valores sugeridos',
|
||
'mcp.configAssistant.reinstallHint': 'Vuelva a instalar con estos valores para aplicarlos.',
|
||
'mcp.configAssistant.thinking': 'Pensando...',
|
||
'mcp.configAssistant.inputPlaceholder':
|
||
'Haga una pregunta (Intro para enviar, Mayús+Intro para nueva línea)',
|
||
'mcp.configAssistant.send': 'enviar',
|
||
'mcp.configAssistant.failedResponse': 'No se pudo obtener respuesta',
|
||
'mcp.toolList.availableSingular': '{count} herramienta disponible',
|
||
'mcp.toolList.availablePlural': '{count} herramientas disponibles',
|
||
'mcp.toolList.tryTool': 'Intentar',
|
||
'mcp.toolList.tryToolAria': 'Abrir el área de pruebas de ejecución para {name}',
|
||
'mcp.playground.title': 'Ejecutar {name}',
|
||
'mcp.playground.close': 'Cerrar el patio de recreo',
|
||
'mcp.playground.inputSchema': 'Esquema de entrada',
|
||
'mcp.playground.argsLabel': 'Argumentos (JSON)',
|
||
'mcp.playground.argsHelp':
|
||
'Escriba JSON que coincida con el esquema de entrada. La entrada vacía se trata como {}.',
|
||
'mcp.playground.runShortcut': '⌘/Ctrl + Enter para ejecutar',
|
||
'mcp.playground.format': 'Formato',
|
||
'mcp.playground.invalidJson': 'JSON no válido',
|
||
'mcp.playground.run': 'Ejecutar herramienta',
|
||
'mcp.playground.running': 'Corriendo…',
|
||
'mcp.playground.result': 'Resultado',
|
||
'mcp.playground.resultError': 'La herramienta devolvió un error',
|
||
'mcp.playground.copyResult': 'Copiar resultado',
|
||
'mcp.playground.copied': 'copiado',
|
||
'mcp.playground.history': 'Historia',
|
||
'mcp.playground.historyEmpty': 'Aún no hay invocaciones en esta sesión.',
|
||
'mcp.playground.historyLoad': 'Cargar',
|
||
'mcp.playground.unexpectedError': 'Error inesperado al invocar la herramienta.',
|
||
'mcp.catalog.deployed': 'Implementado',
|
||
'mcp.catalog.installCount': '{count} instala',
|
||
'app.update.dismissNotification': 'Descartar notificación de actualización',
|
||
'bootCheck.rpcAuthSuffix': 'en cada RPC.',
|
||
'app.localAiDownload.expandAria': 'Ampliar el progreso de la descarga',
|
||
'app.localAiDownload.collapseAria': 'Contraer el progreso de la descarga',
|
||
'app.localAiDownload.dismissAria': 'Descartar notificación de descarga',
|
||
'mobile.nav.ariaLabel': 'Navegación móvil',
|
||
'progress.stepsAria': 'Pasos de progreso',
|
||
'progress.stepAria': 'Paso {current} de {total}',
|
||
'workspace.vaultsTitle': 'Bóvedas de conocimiento',
|
||
'workspace.vaultsDesc':
|
||
'Apunte a una carpeta local; Los archivos se fragmentan y reflejan en la memoria.',
|
||
'calls.title': 'llamadas',
|
||
'calls.comingSoonBody':
|
||
'Próximamente llegarán las llamadas asistidas por IA. Manténganse al tanto.',
|
||
'art.rotatingTetrahedronAria': 'Nave espacial giratoria de tetraedro invertido',
|
||
'mcp.installed.title': 'Instalado',
|
||
'mcp.installed.browseCatalog': 'Explorar catálogo',
|
||
'mcp.installed.empty': 'Aún no hay servidores MCP instalados.',
|
||
'mcp.installed.toolSingular': 'herramienta {count}',
|
||
'mcp.installed.toolPlural': '{count} herramientas',
|
||
'mcp.health.title': 'Salud',
|
||
'mcp.health.summaryAria': 'Resumen del estado de la conexión MCP',
|
||
'mcp.health.connectedCount': '{count} conectado',
|
||
'mcp.health.connectingCount': 'Conexión {count}',
|
||
'mcp.health.errorCount': 'Error {count}',
|
||
'mcp.health.disconnectedCount': '{count} inactivo',
|
||
'mcp.health.retryAll': 'Reintentar todo ({count})',
|
||
'mcp.health.retryAllAria': 'Vuelva a intentar todos los servidores MCP con errores {count}',
|
||
'mcp.health.disconnectAll': 'Desconectar todo ({count})',
|
||
'mcp.health.disconnectAllAria': 'Desconecte todos los servidores MCP conectados al {count}',
|
||
'mcp.health.disconnectConfirm.title': '¿Desconectar todos los servidores MCP?',
|
||
'mcp.health.disconnectConfirm.body':
|
||
'Esto desconectará {count} servidores MCP conectados actualmente. Se conservan las configuraciones instaladas y los secretos; puedes volver a conectar cualquier servidor más tarde.',
|
||
'mcp.health.disconnectConfirm.cancel': 'Cancelar',
|
||
'mcp.health.disconnectConfirm.confirm': 'Desconectar todo',
|
||
'mcp.health.opErrorGeneric': 'La operación masiva falló. Ver registros.',
|
||
'mcp.health.bulkPartialFailure':
|
||
'{failed} de {total} servidores fallaron. Consulta los registros.',
|
||
'mcp.installed.search.landmarkAria': 'Buscar servidores MCP instalados',
|
||
'mcp.installed.search.inputAria': 'Filtrar servidores MCP instalados por nombre',
|
||
'mcp.installed.search.placeholder': 'Filtrar servidores…',
|
||
'mcp.installed.search.clearAria': 'Limpiar filtro',
|
||
'mcp.installed.search.countMatches': 'Servidores {shown} de {total}',
|
||
'mcp.installed.search.noMatches': 'Ningún servidor coincide con "{query}".',
|
||
'mcp.inventory.openButton': 'Inventario',
|
||
'mcp.inventory.openAria': 'Abra el panel de inventario MCP compartible',
|
||
'mcp.inventory.title': 'Inventario MCP compartible',
|
||
'mcp.inventory.subtitle':
|
||
'Exporte sus servidores MCP instalados como un manifiesto portátil y sin secretos, o importe uno de un compañero de equipo. Los valores de entorno secretos nunca se incluyen ni se importan.',
|
||
'mcp.inventory.close': 'Cerrar panel de inventario',
|
||
'mcp.inventory.tablistAria': 'Secciones de inventario',
|
||
'mcp.inventory.tab.export': 'Exportar',
|
||
'mcp.inventory.tab.import': 'Importar',
|
||
'mcp.inventory.export.empty':
|
||
'Aún no hay servidores MCP instalados: no hay nada que exportar. Primero instale uno del catálogo.',
|
||
'mcp.inventory.export.privacyTitle': '¿Qué hay en este manifiesto?',
|
||
'mcp.inventory.export.privacyBody':
|
||
'Nombres de servidor, nombres calificados, NOMBRES CLAVE de variables de entorno y configuraciones no secretas únicamente. Los valores secretos, los identificadores de su máquina y las marcas de tiempo por instalación se eliminan intencionalmente.',
|
||
'mcp.inventory.export.serverCount': 'Servidores {count} en este manifiesto',
|
||
'mcp.inventory.export.copy': 'Copiar',
|
||
'mcp.inventory.export.copied': 'copiado',
|
||
'mcp.inventory.export.copyAria': 'Copie el manifiesto JSON al portapapeles.',
|
||
'mcp.inventory.export.download': 'Descargar',
|
||
'mcp.inventory.export.downloadAria': 'Descargue el manifiesto como un archivo JSON',
|
||
'mcp.inventory.import.trustTitle':
|
||
'Trate los manifiestos importados como código que no es de confianza',
|
||
'mcp.inventory.import.trustBody':
|
||
'Un servidor MCP es una herramienta que usted le otorga a su agente. Importe únicamente manifiestos de fuentes en las que confíe. Cada instalación requiere su clic explícito; nada se instala automáticamente.',
|
||
'mcp.inventory.import.pasteLabel': 'Pegar manifiesto JSON',
|
||
'mcp.inventory.import.pastePlaceholder':
|
||
'Pegue un manifiesto aquí o cargue un archivo.json a continuación.',
|
||
'mcp.inventory.import.preview': 'Avance',
|
||
'mcp.inventory.import.clear': 'Claro',
|
||
'mcp.inventory.import.uploadFile': 'o cargar un archivo.json',
|
||
'mcp.inventory.import.uploadFileAria': 'Cargar un archivo.json de manifiesto',
|
||
'mcp.inventory.import.fileTooLarge':
|
||
'El archivo es demasiado grande (más de 1 MB). Negarse a cargar.',
|
||
'mcp.inventory.import.fileReadFailed': 'No se pudo leer el archivo.',
|
||
'mcp.inventory.import.parseErrorPrefix': 'No se pudo analizar el manifiesto:',
|
||
'mcp.inventory.import.previewHeading': 'Avance',
|
||
'mcp.inventory.import.previewCounts': 'Servidores {total}: {newly} nuevo, {already} ya instalado',
|
||
'mcp.inventory.import.previewEmpty': 'El manifiesto no contiene servidores.',
|
||
'mcp.inventory.import.exportedFrom': 'Exportado desde {exporter}',
|
||
'mcp.inventory.import.exportedAt': 'en {when}',
|
||
'mcp.inventory.import.statusNew': 'Nuevo',
|
||
'mcp.inventory.import.statusAlreadyInstalled': 'Ya instalado',
|
||
'mcp.inventory.import.envKeysLabel': 'Teclas ambientales',
|
||
'mcp.inventory.import.install': 'Instalar',
|
||
'mcp.inventory.import.installAria': 'Instale {name} desde este manifiesto',
|
||
'mcp.inventory.import.skipped': 'omitido',
|
||
'mcp.inventory.parseError.empty': 'El manifiesto está vacío.',
|
||
'mcp.inventory.parseError.invalidJson': 'JSON no válido.',
|
||
'mcp.inventory.parseError.rootNotObject': 'El manifiesto debe ser un objeto JSON en la raíz.',
|
||
'mcp.inventory.parseError.unsupportedSchema':
|
||
'Esquema de manifiesto no compatible: este archivo no fue generado por un exportador compatible.',
|
||
'mcp.inventory.parseError.missingExportedAt': 'Campo `exported_at` faltante o no válido.',
|
||
'mcp.inventory.parseError.missingExportedBy': 'Campo `exported_by` faltante o no válido.',
|
||
'mcp.inventory.parseError.invalidServers': 'Matriz `servers` faltante o no válida.',
|
||
'mcp.inventory.parseError.serverNotObject': 'Una entrada del servidor no es un objeto.',
|
||
'mcp.inventory.parseError.serverMissingQualifiedName':
|
||
'A una entrada del servidor le falta su nombre_calificado.',
|
||
'mcp.inventory.parseError.serverMissingDisplayName':
|
||
'A una entrada del servidor le falta su nombre para mostrar.',
|
||
'mcp.inventory.parseError.serverEnvKeysNotArray':
|
||
'Una entrada del servidor tiene un campo env_keys que no es una matriz de cadenas.',
|
||
'mcp.inventory.parseError.serverContainsEnv':
|
||
'Una entrada de servidor contiene un mapa de valores `env`. Negarse a importar: los manifiestos solo deben contener env_keys (nombres), nunca valores secretos.',
|
||
'mcp.inventory.parseError.duplicateQualifiedName':
|
||
'Nombre_calificado duplicado encontrado en el manifiesto. Cada servidor debe aparecer como máximo una vez.',
|
||
'mcp.tab.loading': 'Cargando servidores MCP...',
|
||
'mcp.tab.emptyDetail': 'Seleccione un servidor o explore el catálogo.',
|
||
'mcp.install.loadingDetail': 'Cargando detalles del servidor...',
|
||
'mcp.install.back': 'volver',
|
||
'mcp.install.title': 'Instalar {name}',
|
||
'mcp.install.requiredEnv': 'Variables de entorno requeridas',
|
||
'mcp.install.enterValue': 'Ingrese {key}',
|
||
'mcp.install.show': 'Mostrar',
|
||
'mcp.install.hide': 'Ocultar',
|
||
'mcp.install.configLabel': 'Configuración (JSON opcional)',
|
||
'mcp.install.configPlaceholder': '{"key": "value"}',
|
||
'mcp.install.missingRequired': 'Se requiere "{key}"',
|
||
'mcp.install.invalidJson': 'La configuración JSON no es JSON válida',
|
||
'mcp.install.failedDetail': 'No se pudieron cargar los detalles del servidor',
|
||
'mcp.install.failedInstall': 'La instalación falló',
|
||
'mcp.install.button': 'Instalar',
|
||
'mcp.install.installing': 'Instalando...',
|
||
'mcp.detail.suggestedEnvReady': 'Valores ambientales sugeridos listos',
|
||
'mcp.detail.suggestedEnvBody':
|
||
'Reinstale este servidor con los valores sugeridos para aplicarlos: {keys}',
|
||
'mcp.detail.connect': 'Conectar',
|
||
'mcp.detail.connecting': 'Conectando...',
|
||
'mcp.detail.disconnect': 'Desconectar',
|
||
'mcp.detail.hideAssistant': 'Ocultar asistente',
|
||
'mcp.detail.helpConfigure': 'Ayúdame a configurar',
|
||
'mcp.detail.confirmUninstall': '¿Confirmar la desinstalación?',
|
||
'mcp.detail.confirmUninstallAction': 'Sí, desinstalar',
|
||
'mcp.detail.uninstall': 'Desinstalar',
|
||
'mcp.detail.envVars': 'Variables ambientales',
|
||
'mcp.detail.reconfigure': 'Reconfigurar',
|
||
'mcp.detail.reconfigureHint':
|
||
'Introduce nuevos valores para cada variable y vuelve a conectar. Esto reemplaza los valores guardados.',
|
||
'mcp.detail.saveReconnect': 'Guardar y reconectar',
|
||
'mcp.detail.reconfigureSaving': 'Guardando…',
|
||
'mcp.detail.reconfigureSuccess': 'Entorno actualizado y reconectado.',
|
||
'mcp.detail.reconfigureReconnectFailed':
|
||
'Guardado, pero no se pudo reconectar con los nuevos valores.',
|
||
'mcp.detail.tools': 'Herramientas',
|
||
'onboarding.skipForNow': 'Saltar por ahora',
|
||
'onboarding.localAI.continueWithCloud': 'Continuar con la nube',
|
||
'onboarding.localAI.useLocalAnyway':
|
||
'Usar IA local de todos modos (no recomendado para tu dispositivo)',
|
||
'onboarding.localAI.useLocalInstead': 'Utilice IA local en su lugar (conecte Ollama ahora)',
|
||
'onboarding.localAI.setupIssue': 'La configuración local de la IA encontró un problema',
|
||
'autonomy.title': 'Autonomía del agente',
|
||
'autonomy.maxActionsLabel': 'Acciones máximas por hora',
|
||
'autonomy.maxActionsHelp':
|
||
'Número máximo de acciones de herramientas que un agente puede ejecutar por hora. El nuevo valor se aplica en tu próximo chat. Los trabajos cron y los oyentes de canales mantienen su límite actual hasta que reinicies OpenHuman.',
|
||
'autonomy.statusSaving': 'Guardando…',
|
||
'autonomy.statusSaved': 'Guardado.',
|
||
'autonomy.statusFailed': 'Fallido',
|
||
'autonomy.unlimitedNote': 'Ilimitado: limitación de velocidad deshabilitada.',
|
||
'autonomy.invalidIntegerMsg':
|
||
'Debe ser un número entero positivo (usa el ajuste preestablecido Sin límite para no tener límite).',
|
||
'autonomy.presetUnlimited': 'Ilimitado (predeterminado)',
|
||
'triggers.toggleFailed': '{action} falló para {trigger}: {message}',
|
||
'settings.ai.overview': 'Resumen del sistema de IA',
|
||
'settings.ai.configStatus': 'Estado de configuración',
|
||
'settings.ai.fallbackMode': 'Modo de respaldo',
|
||
'settings.ai.loadedFromRuntime': 'Cargado desde el runtime',
|
||
'settings.ai.loadingDuration': 'Duración de carga',
|
||
'settings.ai.localRuntime': 'Runtime de modelo local',
|
||
'settings.ai.openManager': 'Abrir gestor',
|
||
'settings.ai.retryDownload': 'Reintentar descarga',
|
||
'settings.ai.state': 'Estado',
|
||
'settings.ai.targetModel': 'Modelo objetivo',
|
||
'settings.ai.download': 'Descargar',
|
||
'settings.ai.localModelUnavailable': 'Estado del modelo local no disponible.',
|
||
'settings.ai.soulConfig': 'Configuración de persona SOUL',
|
||
'settings.ai.refreshing': 'Actualizando...',
|
||
'settings.ai.refreshSoul': 'Actualizar SOUL',
|
||
'settings.ai.loadingSoul': 'Cargando configuración de SOUL...',
|
||
'settings.ai.identity': 'Identidad',
|
||
'settings.ai.personality': 'Personalidad',
|
||
'settings.ai.safetyRules': 'Reglas de seguridad',
|
||
'settings.ai.source': 'Fuente',
|
||
'settings.ai.loaded': 'Cargado',
|
||
'settings.ai.toolsConfig': 'Configuración de TOOLS',
|
||
'settings.ai.refreshTools': 'Actualizar TOOLS',
|
||
'settings.ai.toolsAvailable': 'Herramientas disponibles',
|
||
'settings.ai.tools': 'herramientas',
|
||
'settings.ai.activeSkills': 'Skills activos',
|
||
'settings.ai.skills': 'habilidades',
|
||
'settings.ai.skillsOverview': 'Resumen de skills',
|
||
'settings.ai.refreshingAll': 'Actualizando todo...',
|
||
'settings.ai.refreshAll': 'Actualizar toda la configuración de IA',
|
||
'settings.notifications.suppressAll': 'Suprimir todas las notificaciones',
|
||
'settings.notifications.suppressAllDesc':
|
||
'Bloquear todas las notificaciones del sistema de las apps integradas, independientemente del estado de foco.',
|
||
'settings.notifications.toggleDnd': 'Activar/desactivar No molestar',
|
||
'settings.notifications.categories': 'Categorías',
|
||
'settings.notifications.categoryFooter':
|
||
'Deshabilitar una categoría impide que aparezcan nuevas notificaciones de ese tipo en el centro de notificaciones. Las notificaciones existentes permanecen hasta que se eliminan.',
|
||
'settings.billing.movedToWeb': 'La facturación se trasladó a la web',
|
||
'settings.billing.openDashboard': 'Abrir panel de facturación',
|
||
'settings.billing.movedToWebDesc':
|
||
'Los cambios de suscripción, métodos de pago, créditos y facturas ahora se gestionan en TinyHumans en la web.',
|
||
'settings.billing.backToSettings': 'Volver a configuración',
|
||
'settings.billing.openingBrowser': 'Abriendo tu navegador...',
|
||
'settings.billing.browserNotOpen': 'Si tu navegador no se abrió, usa el botón de arriba.',
|
||
'settings.billing.browserOpenFailed':
|
||
'No se pudo abrir el navegador automáticamente. Usa el botón de arriba.',
|
||
'settings.tools.chooseCapabilities': 'Elige qué capacidades puede usar OpenHuman en tu nombre.',
|
||
'settings.tools.saveChanges': 'Guardar cambios',
|
||
'settings.tools.preferencesSaved': 'Preferencias guardadas',
|
||
'settings.tools.saveFailed': 'No se pudieron guardar las preferencias. Inténtalo de nuevo.',
|
||
'settings.screenAwareness.mode': 'Modo',
|
||
'settings.screenAwareness.allExceptBlacklist': 'Todo excepto lista negra',
|
||
'settings.screenAwareness.whitelistOnly': 'Solo lista blanca',
|
||
'settings.screenAwareness.screenMonitoring': 'Monitoreo de pantalla',
|
||
'settings.screenAwareness.saveSettings': 'Guardar configuración',
|
||
'settings.screenAwareness.session': 'Sesión',
|
||
'settings.screenAwareness.status': 'Estado',
|
||
'settings.screenAwareness.active': 'Activo',
|
||
'settings.screenAwareness.stopped': 'Detenido',
|
||
'settings.screenAwareness.remaining': 'Restante',
|
||
'settings.screenAwareness.startSession': 'Iniciar sesión',
|
||
'settings.screenAwareness.stopSession': 'Detener sesión',
|
||
'settings.screenAwareness.analyzeNow': 'Analizar ahora',
|
||
'settings.screenAwareness.macosOnly':
|
||
'La captura de pantalla y los controles de permisos de Conciencia de pantalla actualmente solo son compatibles con macOS.',
|
||
'connections.comingSoon': 'Próximamente',
|
||
'connections.setUp': 'Configurar',
|
||
'connections.configured': 'Configurado',
|
||
'connections.unavailable': 'No disponible',
|
||
'connections.checking': 'Verificando…',
|
||
'connections.walletConfigured':
|
||
'Las identidades locales de EVM, BTC, Solana y Tron están configuradas desde tu frase de recuperación.',
|
||
'connections.walletReady':
|
||
'Configura identidades locales de EVM, BTC, Solana y Tron desde una sola frase de recuperación.',
|
||
'connections.walletError':
|
||
'No se pudo verificar el estado de la billetera. Toca para reintentar desde el panel de Frase de recuperación.',
|
||
'connections.walletChecking': 'Verificando estado de la billetera...',
|
||
'connections.walletIdentities': 'Identidades de billetera',
|
||
'connections.walletDerived':
|
||
'Derivadas localmente desde tu frase de recuperación y almacenadas solo como metadatos seguros.',
|
||
'connections.privacySecurity': 'Privacidad y seguridad',
|
||
'connections.privacySecurityDesc':
|
||
'Todos los datos y credenciales se almacenan localmente con política de cero retención de datos. Tu información está cifrada y nunca se comparte con terceros.',
|
||
'channels.status.connecting': 'Conectando',
|
||
'channels.status.notConfigured': 'No configurado',
|
||
'channels.noActiveRoute': 'Sin ruta activa',
|
||
'channels.activeRoute': 'Ruta activa',
|
||
'channels.loadingDefinitions': 'Cargando definiciones de canales...',
|
||
'channels.channelConnections': 'Conexiones de canales',
|
||
'channels.configureAuthModes':
|
||
'Configura los modos de autenticación para cada canal de mensajería.',
|
||
'channels.configNotAvailable': 'Configuración para',
|
||
'channels.channel': 'canal',
|
||
'devOptions.coreModeNotSet': 'Modo core: no establecido',
|
||
'devOptions.coreModeNotSetDesc':
|
||
'El selector de verificación de arranque aún no se ha confirmado. Usa Cambiar modo en el selector para elegir Local o Cloud.',
|
||
'devOptions.local': 'locales',
|
||
'devOptions.embeddedCoreSidecar': 'Core sidecar integrado',
|
||
'devOptions.sidecarSpawned': 'Iniciado en proceso por el shell de Tauri al arrancar la app.',
|
||
'devOptions.cloud': 'Nube',
|
||
'devOptions.remoteCoreRpc': 'RPC de core remoto',
|
||
'devOptions.token': 'ficha',
|
||
'devOptions.tokenNotSet': 'no establecido — RPC devolverá 401',
|
||
'devOptions.triggerSentryTest': 'Activar prueba de Sentry (staging)',
|
||
'devOptions.triggerSentryTestDesc':
|
||
'Dispara un error etiquetado para verificar el pipeline de Sentry. Issue #1072 — eliminar después de la verificación.',
|
||
'devOptions.sendTestEvent': 'Enviar evento de prueba',
|
||
'devOptions.sending': 'Enviando…',
|
||
'devOptions.eventSent': 'Evento enviado',
|
||
'devOptions.sentryDisabled': '(sin identificación: Sentry deshabilitado en esta compilación)',
|
||
'devOptions.failed': 'Fallido',
|
||
'devOptions.appLogs': 'Registros de la app',
|
||
'devOptions.appLogsDesc':
|
||
'Abre la carpeta que contiene los archivos de registro diarios. Adjunta el archivo más reciente al reportar un problema.',
|
||
'devOptions.openLogsFolder': 'Abrir carpeta de registros',
|
||
'mnemonic.phraseSaved': 'Frase de recuperación guardada',
|
||
'mnemonic.walletReady':
|
||
'Las identidades de billetera multicadena están listas. Volviendo a configuración...',
|
||
'mnemonic.writeDownWords': 'Anota estas',
|
||
'mnemonic.wordsInOrder':
|
||
'palabras en orden y guárdalas en un lugar seguro. Esta frase protege tu clave de cifrado local y tus identidades de billetera EVM, BTC, Solana y Tron.',
|
||
'mnemonic.cannotRecover':
|
||
'Esta frase no puede recuperarse si se pierde y debe permanecer completamente local en tu dispositivo.',
|
||
'mnemonic.copyToClipboard': 'Copiar al portapapeles',
|
||
'mnemonic.alreadyHavePhrase': 'Ya tengo una frase de recuperación',
|
||
'mnemonic.consentSaved':
|
||
'Guardé esta frase y consiento usarla para la configuración de billetera local',
|
||
'mnemonic.enterPhraseToRestore':
|
||
'Ingresa tu frase de recuperación a continuación para restaurar tus identidades de billetera local, o pega la frase completa en cualquier campo (12 palabras para respaldos nuevos; las frases de 24 palabras de versiones anteriores aún funcionan).',
|
||
'mnemonic.words': 'Palabras',
|
||
'mnemonic.validPhrase': 'Frase de recuperación válida',
|
||
'mnemonic.generateNewPhrase': 'Generar una nueva frase de recuperación',
|
||
'mnemonic.securingData': 'Protegiendo tus datos...',
|
||
'mnemonic.saveRecoveryPhrase': 'Guardar frase de recuperación',
|
||
'mnemonic.userNotLoaded': 'Usuario no cargado. Inicia sesión de nuevo o recarga la página.',
|
||
'mnemonic.invalidPhrase':
|
||
'Frase de recuperación inválida. Revisa las palabras e inténtalo de nuevo.',
|
||
'mnemonic.somethingWentWrong': 'Algo salió mal. Inténtalo de nuevo.',
|
||
'team.failedToCreate': 'No se pudo crear el equipo',
|
||
'team.invalidInviteCode': 'Código de invitación inválido o expirado',
|
||
'team.failedToSwitch': 'No se pudo cambiar de equipo',
|
||
'team.failedToLeave': 'No se pudo salir del equipo',
|
||
'team.role.owner': 'Propietario',
|
||
'team.role.admin': 'Administrador',
|
||
'team.role.billingManager': 'Gestor de facturación',
|
||
'team.role.member': 'Miembro',
|
||
'team.active': 'Activo',
|
||
'team.personalTeam': 'Equipo personal',
|
||
'team.manageTeam': 'Administrar equipo',
|
||
'team.switching': 'Cambiando...',
|
||
'team.switch': 'Cambiar',
|
||
'team.leaving': 'Saliendo...',
|
||
'team.leave': 'Salir',
|
||
'team.yourTeams': 'Tus equipos',
|
||
'team.createNewTeam': 'Crear nuevo equipo',
|
||
'team.teamName': 'Nombre del equipo',
|
||
'team.creating': 'Creando...',
|
||
'team.joinExistingTeam': 'Unirse a un equipo existente',
|
||
'team.inviteCode': 'Código de invitación',
|
||
'team.joining': 'Uniéndose...',
|
||
'team.join': 'Unirse',
|
||
'team.leaveTeam': 'Salir del equipo',
|
||
'team.confirmLeave': '¿Seguro que quieres salir de',
|
||
'team.leaveWarning':
|
||
'Perderás el acceso al equipo y todos sus recursos. Necesitarás una nueva invitación para volver a unirte.',
|
||
'team.management': 'Gestión de equipo',
|
||
'team.notFound': 'Equipo no encontrado',
|
||
'team.accessDenied': 'Acceso denegado',
|
||
'team.members': 'Miembros',
|
||
'team.membersDesc': 'Administrar los miembros y roles del equipo',
|
||
'team.invites': 'invita',
|
||
'team.invitesDesc': 'Generar y administrar códigos de invitación',
|
||
'team.settings': 'Configuración del equipo',
|
||
'team.settingsDesc': 'Editar el nombre y la configuración del equipo',
|
||
'team.editSettings': 'Editar configuración del equipo',
|
||
'team.enterName': 'Introduce el nombre del equipo',
|
||
'team.saving': 'Guardando...',
|
||
'team.saveChanges': 'Guardar cambios',
|
||
'team.delete': 'Eliminar equipo',
|
||
'team.deleteDesc': 'Eliminar permanentemente este equipo',
|
||
'team.deleting': 'Eliminando...',
|
||
'team.failedToUpdate': 'No se pudo actualizar el equipo',
|
||
'team.failedToDelete': 'No se pudo eliminar el equipo',
|
||
'team.manageTitle': 'Administrar {name}',
|
||
'team.planCreated': 'Plan {plan} • Creado {date}',
|
||
'team.confirmDelete': '¿Está seguro de que desea eliminar {name}?',
|
||
'team.deleteWarning':
|
||
'Esta acción no se puede deshacer. Todos los datos del equipo serán eliminados permanentemente.',
|
||
'voice.title': 'Dictado de voz',
|
||
'voice.settings': 'Configuración de voz',
|
||
'voice.settingsDesc':
|
||
'Mantén presionada la tecla de acceso rápido para dictar e insertar texto en el campo activo.',
|
||
'voice.hotkey': 'Tecla de acceso rápido',
|
||
'voice.activationMode': 'Modo de activación',
|
||
'voice.tapToToggle': 'Toca para alternar',
|
||
'voice.writingStyle': 'Estilo de escritura',
|
||
'voice.verbatimTranscription': 'Transcripción literal',
|
||
'voice.naturalCleanup': 'Limpieza natural',
|
||
'voice.autoStart': 'Iniciar servidor de voz automáticamente con el core',
|
||
'voice.customDictionary': 'Diccionario personalizado',
|
||
'voice.customDictionaryDesc':
|
||
'Agrega nombres, términos técnicos y palabras de dominio para mejorar la precisión del reconocimiento.',
|
||
'voice.addWord': 'Agregar una palabra...',
|
||
'voice.sttDisabled':
|
||
'El dictado de voz está desactivado hasta que el modelo STT local se descargue y esté listo.',
|
||
'voice.openLocalAiModel': 'Abrir modelo de IA local',
|
||
'voice.serverRestarted': 'Servidor de voz reiniciado con la nueva configuración.',
|
||
'voice.settingsSaved': 'Configuración de voz guardada.',
|
||
'voice.serverStarted': 'Servidor de voz iniciado.',
|
||
'voice.serverStopped': 'Servidor de voz detenido.',
|
||
'voice.saveVoiceSettings': 'Guardar configuración de voz',
|
||
'voice.startVoiceServer': 'Iniciar servidor de voz',
|
||
'voice.stopVoiceServer': 'Detener servidor de voz',
|
||
'voice.debugTitle': 'Depuración de voz',
|
||
'voice.failedToLoadSettings': 'No se pudo cargar la configuración de voz',
|
||
'voice.failedToSaveSettings': 'No se pudo guardar la configuración de voz',
|
||
'voice.failedToStartServer': 'No se pudo iniciar el servidor de voz',
|
||
'voice.failedToStopServer': 'No se pudo detener el servidor de voz',
|
||
'voice.sttDisabledPrefix':
|
||
'La dictación por voz está desactivada hasta que se descargue el modelo STT local. Usa el',
|
||
'voice.sttDisabledSuffix': 'sección anterior para instalar Whisper.',
|
||
'voice.debug.failedToLoadVoiceDebugData': 'No se pudieron cargar los datos de depuración de voz',
|
||
'voice.debug.settingsSaved': 'Configuración de depuración guardada.',
|
||
'voice.debug.failedToSaveSettings': 'No se pudo guardar la configuración de voz',
|
||
'voice.debug.runtimeStatus': 'Estado de tiempo de ejecución',
|
||
'voice.debug.runtimeStatusDesc':
|
||
'Diagnósticos en vivo para el servidor de voz y el motor de reconocimiento de voz.',
|
||
'voice.debug.server': 'Servidor',
|
||
'voice.debug.unavailable': 'No disponible',
|
||
'voice.debug.ready': 'Listo',
|
||
'voice.debug.notReady': 'No listo',
|
||
'voice.debug.hotkey': 'tecla de acceso rápido',
|
||
'voice.debug.notAvailable': 'n/a',
|
||
'voice.debug.mode': 'Modo',
|
||
'voice.debug.transcriptions': 'Transcripciones',
|
||
'voice.debug.serverError': 'Error del servidor',
|
||
'voice.debug.advancedSettings': 'Configuración avanzada',
|
||
'voice.debug.advancedSettingsDesc':
|
||
'Parámetros de ajuste de bajo nivel para la grabación y la detección de silencio.',
|
||
'voice.debug.minimumRecordingSeconds': 'Segundos mínimos de grabación',
|
||
'voice.debug.silenceThreshold': 'Umbral de silencio (RMS)',
|
||
'voice.debug.silenceThresholdDesc':
|
||
'Las grabaciones con energía por debajo de este valor se tratan como silencio y se omiten. Menor = más sensible.',
|
||
'voice.providers.saved': 'Proveedores de voz guardados.',
|
||
'voice.providers.failedToSave': 'No se pudieron guardar los proveedores de voz',
|
||
'voice.providers.ellipsis': '…',
|
||
'voice.providers.installing': 'Instalación',
|
||
'voice.providers.installingBusy': 'Instalando…',
|
||
'voice.providers.reinstallLocally': 'Reinstalar localmente',
|
||
'voice.providers.repair': 'Reparación',
|
||
'voice.providers.retryLocally': 'Reintentar localmente',
|
||
'voice.providers.installLocally': 'Instalar localmente',
|
||
'voice.providers.whisperReady': 'El susurro está listo.',
|
||
'voice.providers.whisperInstallStarted': 'Se inició la instalación de Whisper',
|
||
'voice.providers.queued': 'en cola',
|
||
'voice.providers.failedToInstallWhisper': 'No se pudo instalar Whisper',
|
||
'voice.providers.piperReady': 'Piper está listo.',
|
||
'voice.providers.piperInstallStarted': 'Instalación de Piper iniciada',
|
||
'voice.providers.failedToInstallPiper': 'No se pudo instalar Piper',
|
||
'voice.providers.title': 'Proveedores de voz',
|
||
'voice.providers.desc':
|
||
'Elige dónde se ejecutan la transcripción y la síntesis. Usa los botones Instalar localmente para descargar los binarios y modelos en tu espacio de trabajo. Los proveedores locales se pueden guardar antes de que finalice la instalación; no se requiere configuración manual de WHISPER_BIN o PIPER_BIN.',
|
||
'voice.providers.sttProvider': 'Proveedor de voz a texto',
|
||
'voice.providers.sttProviderAria': 'proveedor STT',
|
||
'voice.providers.cloudWhisperProxy': 'Nube (proxy de susurro)',
|
||
'voice.providers.localWhisper': 'Susurro local',
|
||
'voice.providers.installRequired': ' (se requiere instalación)',
|
||
'voice.providers.whisperInstalledTitle': 'Susurro está instalado. Haga clic para reinstalar.',
|
||
'voice.providers.whisperDownloadTitle':
|
||
'Descarga whisper.cpp y el modelo GGML en tu espacio de trabajo.',
|
||
'voice.providers.installed': 'Instalado',
|
||
'voice.providers.installFailed': 'La instalación falló',
|
||
'voice.providers.notInstalled': 'No instalado',
|
||
'voice.providers.whisperModel': 'Modelo susurro',
|
||
'voice.providers.whisperModelAria': 'modelo susurro',
|
||
'voice.providers.whisperModelTiny': 'Pequeño (39 MB, más rápido)',
|
||
'voice.providers.whisperModelBase': 'Base (74 MB)',
|
||
'voice.providers.whisperModelSmall': 'Pequeño (244 MB)',
|
||
'voice.providers.whisperModelMedium': 'Mediano (769 MB, recomendado)',
|
||
'voice.providers.whisperModelLargeTurbo': 'Turbo v3 grande (1,5 GB, mejor precisión)',
|
||
'voice.providers.ttsProvider': 'Proveedor de texto a voz',
|
||
'voice.providers.ttsProviderAria': 'Proveedor de TTS',
|
||
'voice.providers.cloudElevenLabsProxy': 'Nube (proxy de ElevenLabs)',
|
||
'voice.providers.localPiper': 'flautista local',
|
||
'voice.providers.piperInstalledTitle': 'Piper está instalado. Haga clic para reinstalar.',
|
||
'voice.providers.piperDownloadTitle':
|
||
'Descarga Piper y la voz en_US-lessac-medium incluida en tu espacio de trabajo.',
|
||
'voice.providers.piperVoice': 'voz de gaitero',
|
||
'voice.providers.piperVoiceAria': 'voz de gaitero',
|
||
'voice.providers.customVoiceOption': 'Otro (escriba a continuación)…',
|
||
'voice.providers.customVoiceAria': 'Identificación de voz de Piper (personalizada)',
|
||
'voice.providers.customVoicePlaceholder': 'es_US-lessac-medium',
|
||
'voice.providers.piperVoicesDesc':
|
||
'Las voces provienen de huggingface.co/rhasspy/piper-voices. Cambiar de voz puede requerir un clic en Instalar/Reinstalar para descargar el nuevo archivo .onnx.',
|
||
'voice.providers.mascotVoice': 'Voz de mascota',
|
||
'voice.providers.mascotVoiceDescPrefix':
|
||
'La voz de ElevenLabs que usa la mascota para las respuestas habladas se configura en',
|
||
'voice.providers.mascotSettings': 'Configuración de mascota',
|
||
'voice.providers.mascotVoiceDescSuffix': '.',
|
||
'voice.providers.hotkeyPlaceholder': 'fn',
|
||
'voice.providers.piperPreset.lessacMedium': 'Estados Unidos · Lessac (neutral, recomendado)',
|
||
'voice.providers.piperPreset.lessacHigh': 'EE.UU. · Lessac (mayor calidad, más grande)',
|
||
'voice.providers.piperPreset.ryanMedium': 'Estados Unidos · Ryan (masculino)',
|
||
'voice.providers.piperPreset.amyMedium': 'Estados Unidos · Amy (mujer)',
|
||
'voice.providers.piperPreset.librittsHigh': 'Estados Unidos · LibriTTS (varios altavoces)',
|
||
'voice.providers.piperPreset.alanMedium': 'ES · Alan (masculino)',
|
||
'voice.providers.piperPreset.jennyDiocoMedium': 'GB · Jenny Dioco (mujer)',
|
||
'voice.providers.piperPreset.northernEnglishMaleMedium': 'GB · Inglés del Norte (masculino)',
|
||
'voice.providers.chip.cloud': 'OpenHuman (Gestionado)',
|
||
'voice.providers.chip.cloudAria': 'El proveedor gestionado de OpenHuman está siempre habilitado',
|
||
'voice.providers.chip.whisper': 'Whisper (Local)',
|
||
'voice.providers.chip.enableWhisper': 'Activar Whisper STT local',
|
||
'voice.providers.chip.disableWhisper': 'Desactivar Whisper STT local',
|
||
'voice.providers.chip.piper': 'Piper (Local)',
|
||
'voice.providers.chip.enablePiper': 'Activar Piper TTS local',
|
||
'voice.providers.chip.disablePiper': 'Desactivar Piper TTS local',
|
||
'voice.providers.chip.enableProvider': 'Enable',
|
||
'voice.providers.chip.disableProvider': 'Disable',
|
||
'voice.providers.chip.apiKeyLabel': 'Clave de API',
|
||
'voice.providers.chip.apiKeyPlaceholder': 'sk-…',
|
||
'voice.providers.chip.comingSoon': 'próximamente',
|
||
'voice.modal.title': 'Configure',
|
||
'voice.modal.desc':
|
||
'Introduce tu clave de API para habilitar este proveedor. Puedes probar la conexión antes de guardar.',
|
||
'voice.modal.testKey': 'Probar clave',
|
||
'voice.modal.testing': 'Probando…',
|
||
'voice.modal.saveAndEnable': 'Guardar y activar',
|
||
'voice.modal.enable': 'Enable',
|
||
'voice.modal.whisperDesc':
|
||
'Elige un tamaño de modelo e instala el binario de Whisper y el modelo GGML en tu espacio de trabajo. Los modelos más grandes son más precisos pero más lentos.',
|
||
'voice.modal.piperDesc':
|
||
'Elige una voz e instala el binario de Piper y el modelo ONNX en tu espacio de trabajo. Piper funciona completamente sin conexión con baja latencia.',
|
||
'voice.routing.title': 'Enrutamiento de voz',
|
||
'voice.routing.desc':
|
||
'Elige qué proveedores habilitados gestionan el reconocimiento y la síntesis de voz.',
|
||
'voice.routing.save': 'Save',
|
||
'voice.routing.testStt': 'Probar STT',
|
||
'voice.routing.testTts': 'Probar TTS',
|
||
'voice.routing.elevenlabsVoice': 'Voz de ElevenLabs',
|
||
'voice.routing.elevenlabsVoiceAria': 'Selección de voz de ElevenLabs',
|
||
'voice.routing.elevenlabsVoiceIdAria': 'ID de voz de ElevenLabs (personalizado)',
|
||
'voice.routing.elevenlabsVoiceDesc':
|
||
'Elige una voz seleccionada o pega un ID de voz personalizado desde tu panel de ElevenLabs.',
|
||
'voice.externalProviders.title': 'Proveedores de voz externos',
|
||
'voice.externalProviders.desc':
|
||
'Conecta APIs de STT/TTS de terceros como Deepgram, ElevenLabs u OpenAI directamente.',
|
||
'voice.externalProviders.keySet': 'Clave configurada',
|
||
'voice.externalProviders.noKey': 'Sin clave de API',
|
||
'voice.externalProviders.test': 'Test',
|
||
'voice.externalProviders.testing': 'Probando…',
|
||
'voice.externalProviders.remove': 'Remove',
|
||
'voice.externalProviders.provider': 'Provider',
|
||
'voice.externalProviders.selectProvider': 'Seleccionar un proveedor…',
|
||
'voice.externalProviders.apiKey': 'Clave de API',
|
||
'voice.externalProviders.apiKeyPlaceholder': 'sk-…',
|
||
'voice.externalProviders.add': 'Add',
|
||
'autocomplete.title': 'Autocompletado',
|
||
'autocomplete.settings': 'Configuración',
|
||
'autocomplete.acceptWithTab': 'Aceptar con Tab',
|
||
'autocomplete.stylePreset': 'Estilo predeterminado',
|
||
'autocomplete.style.balanced': 'Equilibrado',
|
||
'autocomplete.style.concise': 'Conciso',
|
||
'autocomplete.style.formal': 'formales',
|
||
'autocomplete.style.casual': 'Informal',
|
||
'autocomplete.style.custom': 'Personalizado',
|
||
'autocomplete.disabledApps': 'Apps desactivadas (un bundle/token de app por línea)',
|
||
'autocomplete.saveSettings': 'Guardar configuración',
|
||
'autocomplete.saving': 'Guardando…',
|
||
'autocomplete.runtime': 'Tiempo de ejecución',
|
||
'autocomplete.running': 'Ejecutándose',
|
||
'autocomplete.start': 'Iniciar',
|
||
'autocomplete.stop': 'Detener',
|
||
'autocomplete.settingsSaved': 'Configuración de autocompletado guardada.',
|
||
'autocomplete.started': 'Autocompletado iniciado.',
|
||
'autocomplete.didNotStart': 'El autocompletado no inició. Verifica si está habilitado.',
|
||
'autocomplete.stopped': 'Autocompletado detenido.',
|
||
'autocomplete.advancedSettings': 'Configuración avanzada',
|
||
'autocomplete.debugTitle': 'Depuración de autocompletado',
|
||
'chat.agentChat': 'Chat con agente',
|
||
'chat.overrides': 'Anulaciones',
|
||
'chat.model': 'Modelo',
|
||
'chat.temperature': 'Temperatura',
|
||
'chat.conversation': 'Conversación',
|
||
'chat.startAgentConversation': 'Inicia una conversación con el agente.',
|
||
'chat.you': 'Tú',
|
||
'chat.agent': 'Agente',
|
||
'chat.askAgent': 'Pregúntale lo que quieras al agente...',
|
||
'chat.sendMessage': 'Enviar mensaje',
|
||
'composio.triageTitle': 'Disparadores de integración',
|
||
'composio.triageDesc':
|
||
'Cuando está activo, cada disparador de Composio entrante pasa por un paso de clasificación con IA que clasifica el evento y puede iniciar acciones automatizadas — un turno de LLM local por disparador. Desactívalo globalmente o por integración si prefieres revisión manual. Si la variable de entorno',
|
||
'composio.disableAllTriage': 'Desactivar clasificación de IA para todos los disparadores',
|
||
'composio.triggersStillRecorded':
|
||
'Los disparadores siguen registrándose en el historial — no se ejecuta ningún turno de LLM.',
|
||
'composio.disableSpecificIntegrations':
|
||
'Desactivar clasificación de IA para integraciones específicas',
|
||
'composio.settingsSaved': 'Ajustes guardados',
|
||
'composio.saveFailed': 'No se pudo guardar. Inténtalo de nuevo.',
|
||
'cron.title': 'Tareas cron',
|
||
'cron.scheduledJobs': 'Trabajos programados',
|
||
'cron.manageCronJobs': 'Gestiona las tareas cron desde el programador del core.',
|
||
'cron.refreshCronJobs': 'Actualizar tareas cron',
|
||
'localModel.modelStatus': 'Estado del modelo',
|
||
'localModel.downloadModels': 'Descargar modelos',
|
||
'localModel.usage': 'Uso',
|
||
'localModel.usageDesc':
|
||
'Elige qué subsistemas corren en el modelo local. Todo lo que esté desactivado usa la nube.',
|
||
'localModel.enableRuntime': 'Activar runtime de IA local',
|
||
'localModel.enableRuntimeDesc':
|
||
'Interruptor principal. Desactivado por defecto — Ollama permanece inactivo. Cuando está activado, el resumidor de árbol, la inteligencia de pantalla y el autocompletado siempre usan el modelo local.',
|
||
'localModel.advancedSettings': 'Configuración avanzada',
|
||
'localModel.debugTitle': 'Depuración de modelo local',
|
||
'screenAwareness.debugTitle': 'Depuración de Conciencia de pantalla',
|
||
'screenAwareness.debug.debugAndDiagnostics': 'Depuración y diagnóstico',
|
||
'screenAwareness.debug.collapse': 'Colapso',
|
||
'screenAwareness.debug.expand': 'Expandir',
|
||
'screenAwareness.debug.failedToSave': 'No se pudo guardar la inteligencia de pantalla',
|
||
'screenAwareness.debug.policyTitle': 'Política de inteligencia de pantalla',
|
||
'screenAwareness.debug.baselineFps': 'FPS de referencia',
|
||
'screenAwareness.debug.useVisionModel': 'Usar modelo de visión',
|
||
'screenAwareness.debug.useVisionModelDesc':
|
||
'Envía capturas de pantalla a un LLM de visión para obtener más contexto. Cuando está desactivado, solo se usa texto OCR con un LLM de texto, lo que es más rápido y no requiere modelo de visión.',
|
||
'screenAwareness.debug.keepScreenshots': 'Mantener capturas de pantalla',
|
||
'screenAwareness.debug.keepScreenshotsDesc':
|
||
'Guarda las capturas de pantalla en el espacio de trabajo en lugar de eliminarlas tras el procesamiento',
|
||
'screenAwareness.debug.allowlist': 'Lista de permitidos (una regla por línea)',
|
||
'screenAwareness.debug.denylist': 'Lista de rechazados (una regla por línea)',
|
||
'screenAwareness.debug.saveSettings': 'Guardar configuración de inteligencia de pantalla',
|
||
'screenAwareness.debug.sessionStats': 'Estadísticas de sesión',
|
||
'screenAwareness.debug.framesEphemeral': 'Marcos (efímeros)',
|
||
'screenAwareness.debug.panicStop': 'parada de pánico',
|
||
'screenAwareness.debug.defaultPanicHotkey': 'Cmd+Mayús+.',
|
||
'screenAwareness.debug.vision': 'Visión',
|
||
'screenAwareness.debug.idle': 'inactivo',
|
||
'screenAwareness.debug.visionQueue': 'Cola de visión',
|
||
'screenAwareness.debug.lastVision': 'ultima vision',
|
||
'screenAwareness.debug.notAvailable': 'n/a',
|
||
'screenAwareness.debug.visionSummaries': 'Resúmenes de visión',
|
||
'screenAwareness.debug.refreshing': 'Refrescante…',
|
||
'screenAwareness.debug.noSummaries': 'Aún no hay resúmenes.',
|
||
'screenAwareness.debug.unknownApp': 'Aplicación desconocida',
|
||
'screenAwareness.debug.macosOnly':
|
||
'Screen Intelligence V1 actualmente solo es compatible con macOS.',
|
||
'memory.debugTitle': 'Depuración de memoria',
|
||
'memory.documents': 'Documentos',
|
||
'memory.filterByNamespace': 'Filtrar por espacio de nombres...',
|
||
'memory.refresh': 'Actualizar',
|
||
'memory.noDocumentsFound': 'No se encontraron documentos.',
|
||
'memory.delete': 'Eliminar',
|
||
'memory.rawResponse': 'Respuesta cruda',
|
||
'memory.namespaces': 'Espacios de nombres',
|
||
'memory.noNamespacesFound': 'No se encontraron espacios de nombres.',
|
||
'memory.queryRecall': 'Consulta y recuperación',
|
||
'memory.namespace': 'Espacio de nombres',
|
||
'memory.queryText': 'Texto de consulta...',
|
||
'memory.defaultMaxChunks': '10',
|
||
'memory.maxChunks': 'trozos máximos',
|
||
'memory.query': 'Consulta',
|
||
'memory.recall': 'recordar',
|
||
'memory.queryLabel': 'Consulta',
|
||
'memory.recallLabel': 'recordar',
|
||
'memory.queryResult': 'Resultado de la consulta',
|
||
'memory.recallResult': 'Recuperar resultado',
|
||
'memory.clearNamespace': 'Borrar espacio de nombres',
|
||
'memory.clearNamespaceDescription':
|
||
'Elimina permanentemente todos los documentos dentro de un espacio de nombres.',
|
||
'memory.selectNamespace': 'Seleccionar espacio de nombres...',
|
||
'memory.exampleNamespace': 'por ej. habilidad:gmail:usuario@ejemplo.com',
|
||
'memory.clear': 'Borrar',
|
||
'memory.deleteConfirm':
|
||
'¿Eliminar el documento «{documentId}» del espacio de nombres «{namespace}»?',
|
||
'memory.clearNamespaceConfirm':
|
||
'Esto eliminará permanentemente TODOS los documentos del espacio de nombres «{namespace}». ¿Continuar?',
|
||
'memory.clearNamespaceSuccess': 'Se borró el espacio de nombres "{namespace}".',
|
||
'memory.clearNamespaceEmpty': 'No hay nada que borrar en "{namespace}".',
|
||
'webhooks.debugTitle': 'Depuración de webhooks',
|
||
'webhooks.failedToLoadDebugData': 'No se pudieron cargar los datos de depuración del webhook',
|
||
'webhooks.clearLogsConfirm': '¿Borrar todos los registros de depuración de webhooks capturados?',
|
||
'webhooks.failedToClearLogs': 'No se pudieron borrar los registros de webhook',
|
||
'webhooks.loading': 'Cargando...',
|
||
'webhooks.refresh': 'Actualizar',
|
||
'webhooks.clearing': 'Limpiando...',
|
||
'webhooks.clearLogs': 'Borrar registros',
|
||
'webhooks.registered': 'registrado',
|
||
'webhooks.captured': 'capturado',
|
||
'webhooks.live': 'vivir',
|
||
'webhooks.disconnected': 'desconectado',
|
||
'webhooks.lastEvent': 'último evento',
|
||
'webhooks.at': 'en',
|
||
'webhooks.registeredWebhooks': 'Webhooks registrados',
|
||
'webhooks.noActiveRegistrations': 'No hay registros activos.',
|
||
'webhooks.resolvingBackendUrl': 'Resolviendo el servidor URL…',
|
||
'webhooks.capturedRequests': 'Solicitudes capturadas',
|
||
'webhooks.noRequestsCaptured': 'Aún no se han capturado solicitudes de webhook.',
|
||
'webhooks.unrouted': 'sin ruta',
|
||
'webhooks.pending': 'pendiente',
|
||
'webhooks.requestHeaders': 'Encabezados de solicitud',
|
||
'webhooks.queryParams': 'Parámetros de consulta',
|
||
'webhooks.requestBody': 'Cuerpo de solicitud',
|
||
'webhooks.responseHeaders': 'Encabezados de respuesta',
|
||
'webhooks.responseBody': 'Cuerpo de respuesta',
|
||
'webhooks.rawPayload': 'Carga útil sin procesar',
|
||
'webhooks.empty': '[vacío]',
|
||
'providerSetup.error.defaultDetails': 'Error en la configuración del proveedor.',
|
||
'providerSetup.error.providerFallback': 'el proveedor',
|
||
'providerSetup.error.credentialsRejected':
|
||
'{provider} rechazó las credenciales. Comprueba la clave de API e inténtalo de nuevo.',
|
||
'providerSetup.error.endpointNotRecognized':
|
||
'{provider} no reconoció el endpoint. Comprueba la URL base e inténtalo de nuevo.',
|
||
'providerSetup.error.providerUnavailable':
|
||
'{provider} no está disponible en este momento. Inténtalo de nuevo o comprueba el estado del proveedor.',
|
||
'providerSetup.error.unreachable':
|
||
'No se pudo contactar con {provider}. Comprueba la URL del endpoint y la conexión de red, luego inténtalo de nuevo.',
|
||
'providerSetup.error.couldNotReachWithMessage': 'No se pudo comunicar con {provider}: {message}',
|
||
'providerSetup.error.technicalDetails': 'Detalles técnicos',
|
||
'notifications.routingTitle': 'Enrutamiento de notificaciones',
|
||
'notifications.routing.pipelineStats': 'Estadísticas de canalización',
|
||
'notifications.routing.total': 'totales',
|
||
'notifications.routing.unread': 'No leído',
|
||
'notifications.routing.unscored': 'Sin puntuación',
|
||
'notifications.routing.intelligenceTitle': 'Inteligencia de notificaciones',
|
||
'notifications.routing.intelligenceDesc':
|
||
'Cada notificación de tus cuentas conectadas es puntuada por un modelo de IA local. Las notificaciones de alta importancia se enrutan automáticamente a tu agente orquestador para que nada crítico se escape.',
|
||
'notifications.routing.howItWorks': 'como funciona',
|
||
'notifications.routing.level.drop': 'soltar',
|
||
'notifications.routing.level.dropDesc': 'Ruido/spam: almacenado pero no revelado',
|
||
'notifications.routing.level.acknowledge': 'Reconocer',
|
||
'notifications.routing.level.acknowledgeDesc':
|
||
'Prioridad baja — se muestra en el centro de notificaciones',
|
||
'notifications.routing.level.react': 'reaccionar',
|
||
'notifications.routing.level.reactDesc':
|
||
'Prioridad media — activa una respuesta enfocada del agente',
|
||
'notifications.routing.level.escalate': 'escalar',
|
||
'notifications.routing.level.escalateDesc': 'Prioridad alta: reenviado al agente orquestador',
|
||
'notifications.routing.perProvider': 'Enrutamiento por proveedor',
|
||
'notifications.routing.threshold': 'umbral',
|
||
'notifications.routing.routeToOrchestrator': 'Ruta al orquestador',
|
||
'notifications.routing.loadSettingsError':
|
||
'Error al cargar la configuración. Vuelve a abrir este panel para reintentar.',
|
||
'common.reload': 'Recargar',
|
||
'common.skip': 'Omitir',
|
||
'common.disable': 'Desactivar',
|
||
'common.enable': 'Activar',
|
||
'chat.safetyTimeout':
|
||
'Sin respuesta del agente después de 2 minutos. Intenta de nuevo o verifica tu conexión.',
|
||
'chat.filter.all': 'Todos',
|
||
'chat.filter.work': 'Trabajo',
|
||
'chat.filter.briefing': 'Resumen',
|
||
'chat.filter.notification': 'Notificación',
|
||
'chat.filter.workers': 'Trabajadores',
|
||
'chat.selectThread': 'Selecciona un hilo',
|
||
'chat.threads': 'Hilos',
|
||
'chat.noThreads': 'Sin hilos aún',
|
||
'chat.noLabelThreads': 'Sin hilos "{label}"',
|
||
'chat.noWorkerThreads': 'Sin hilos de worker aún',
|
||
'chat.deleteThread': 'Eliminar hilo',
|
||
'chat.deleteThreadConfirm': '¿Seguro que quieres eliminar "{title}"?',
|
||
'chat.untitledThread': 'Hilo sin título',
|
||
'chat.editThreadTitle': 'Editar título del hilo',
|
||
'chat.hideSidebar': 'Ocultar barra lateral',
|
||
'chat.showSidebar': 'Mostrar barra lateral',
|
||
'chat.newThreadShortcut': 'Nuevo hilo (/new)',
|
||
'chat.new': 'Nuevo',
|
||
'chat.failedToLoadMessages': 'No se pudieron cargar los mensajes',
|
||
'chat.thinkingIteration': 'Pensando... ({n})',
|
||
'chat.thinkingDots': 'Pensando...',
|
||
'chat.approachingLimit': 'Acercándote al límite de uso',
|
||
'chat.approachingLimitMsg': 'Has usado el {pct}% de tu cuota disponible.',
|
||
'chat.upgrade': 'Mejorar plan',
|
||
'chat.weeklyLimitHit': 'Alcanzaste tu límite semanal.',
|
||
'chat.resets': 'Se restablece',
|
||
'chat.topUpToContinue': 'Recarga para continuar.',
|
||
'chat.budgetComplete':
|
||
'Tu presupuesto incluido se agotó. Agrega créditos o mejora tu plan para continuar.',
|
||
'chat.topUp': 'Recargar',
|
||
'chat.cycle': 'Ciclo',
|
||
'chat.cycleSpent': 'Gastado este ciclo',
|
||
'chat.cycleRemaining': 'Restante',
|
||
'chat.left': 'restante',
|
||
'chat.setup': 'Configurar',
|
||
'chat.switchToText': 'Cambiar a texto',
|
||
'chat.transcribing': 'Transcribiendo...',
|
||
'chat.stopAndSend': 'Detener y enviar',
|
||
'chat.startTalking': 'Empieza a hablar',
|
||
'chat.playingVoiceReply': 'Reproduciendo respuesta de voz',
|
||
'chat.voiceHint': 'Usa el micrófono para hablar',
|
||
'chat.micUnavailable': 'Micrófono no disponible',
|
||
'chat.turn': 'turno',
|
||
'chat.turns': 'turnos',
|
||
'chat.openWorkerThread': 'Abrir hilo de worker',
|
||
'chat.attachment.attach': 'Adjuntar imagen',
|
||
'chat.attachment.remove': 'Eliminar {name}',
|
||
'chat.attachment.tooMany': 'Máximo {max} imágenes por mensaje',
|
||
'chat.attachment.tooLarge': 'La imagen supera el límite de tamaño de {max}',
|
||
'chat.attachment.unsupportedType':
|
||
'Tipo de archivo no compatible. Use PNG, JPEG, WebP, GIF o BMP.',
|
||
'chat.attachment.readFailed': 'No se pudo leer el archivo',
|
||
'memory.searchAria': 'Buscar en memoria',
|
||
'memory.searchPlaceholder': 'Buscar entradas de memoria...',
|
||
'memory.sourceFilter.all': 'Todas las fuentes',
|
||
'memory.sourceFilter.email': 'Correo',
|
||
'memory.sourceFilter.calendar': 'Calendario',
|
||
'memory.sourceFilter.telegram': 'Telegram',
|
||
'memory.sourceFilter.aiInsight': 'Insight de IA',
|
||
'memory.sourceFilter.system': 'Sistema',
|
||
'memory.sourceFilter.trading': 'Comercio',
|
||
'memory.sourceFilter.security': 'Seguridad',
|
||
'memory.ingestionActivity': 'Actividad de ingesta',
|
||
'memory.events': 'eventos',
|
||
'memory.event': 'evento',
|
||
'memory.overTheLast': 'en los últimos',
|
||
'memory.months': 'meses',
|
||
'memory.peak': 'Pico',
|
||
'memory.perDay': '/día',
|
||
'memory.less': 'Menos',
|
||
'memory.more': 'Más',
|
||
'memory.on': 'el',
|
||
'memory.loading': 'Cargando memoria',
|
||
'memory.fetching': 'Obteniendo tus entradas de memoria...',
|
||
'memory.analyzing': 'Analizando memoria',
|
||
'memory.analyzingHint': 'Procesando tus recuerdos para extraer insights...',
|
||
'memory.noMatches': 'Sin resultados',
|
||
'memory.noMatchesHint': 'Prueba cambiar los términos de búsqueda o los filtros.',
|
||
'memory.allCaughtUp': 'Todo al día',
|
||
'memory.allCaughtUpHint': 'No hay nuevas entradas de memoria para procesar.',
|
||
'memory.noAnalysis': 'Sin análisis aún',
|
||
'memory.noAnalysisHint': 'Ejecuta un análisis para descubrir patrones en tus recuerdos.',
|
||
'memory.emptyHint': 'Empieza a interactuar para crear tus primeros recuerdos.',
|
||
'mic.unavailable': 'Micrófono no disponible',
|
||
'mic.permissionDenied': 'Permiso de micrófono denegado',
|
||
'mic.failedToStartRecorder': 'No se pudo iniciar la grabadora',
|
||
'mic.deviceUnavailable':
|
||
'El micrófono seleccionado no está disponible: prueba con otro dispositivo.',
|
||
'mic.deviceInUse': 'El micrófono está siendo utilizado por otra aplicación.',
|
||
'mic.error': 'Error del micrófono',
|
||
'mic.transcribing': 'Transcribiendo...',
|
||
'mic.retryingTranscription': 'Retrying... ({attempt} of {max})',
|
||
'mic.tapToSend': 'Toca para enviar',
|
||
'mic.waitingForAgent': 'Esperando al agente...',
|
||
'mic.tapAndSpeak': 'Toca y habla',
|
||
'mic.stopRecording': 'Detener grabación y enviar',
|
||
'mic.startRecording': 'Iniciar grabación',
|
||
'mic.deviceSelector': 'Dispositivo de micrófono',
|
||
'mic.tapToSendCountdown': 'Toca para enviar ({seconds}s)',
|
||
'token.usageLimitReached': 'Límite de uso alcanzado',
|
||
'token.approachingLimit': 'Acercándote al límite',
|
||
'token.planClickForDetails': 'plan - toca para ver detalles',
|
||
'token.sessionTokens': 'Ent: {in} | Sal: {out} | Turnos: {turns}',
|
||
'token.limit': 'Límite alcanzado',
|
||
'catalog.noCapabilityBinding': 'Sin vinculación de capacidad',
|
||
'catalog.downloadFailed': 'Descarga fallida',
|
||
'catalog.active': 'Activo',
|
||
'catalog.installed': 'Instalado',
|
||
'catalog.notDownloaded': 'No descargado',
|
||
'catalog.inUse': 'En uso',
|
||
'catalog.use': 'Usar',
|
||
'catalog.deleteModel': 'Eliminar modelo',
|
||
'catalog.download': 'Descargar',
|
||
'navigator.recent': 'Reciente',
|
||
'navigator.today': 'Hoy',
|
||
'navigator.thisWeek': 'Esta semana',
|
||
'navigator.sources': 'Fuentes',
|
||
'navigator.email': 'Correo',
|
||
'navigator.slack': 'Slack',
|
||
'navigator.chat': 'Charla',
|
||
'navigator.documents': 'Documentos',
|
||
'navigator.people': 'Personas',
|
||
'navigator.topics': 'Temas',
|
||
'dreams.description':
|
||
'Los sueños son reflexiones generadas por IA que sintetizan patrones de tus recuerdos.',
|
||
'dreams.comingSoon': 'Próximamente',
|
||
'assignment.memoryLlm': 'LLM de memoria',
|
||
'assignment.memoryLlmAria': 'Selección de LLM de memoria',
|
||
'assignment.embedder': 'Incrustador',
|
||
'assignment.loaded': 'Cargado',
|
||
'assignment.notDownloaded': 'No descargado',
|
||
'assignment.usedForExtractSummarise': 'Usado para extracción y resumen',
|
||
'insights.knownFacts': 'Hechos conocidos',
|
||
'insights.preferences': 'Preferencias',
|
||
'insights.relationships': 'Relaciones',
|
||
'insights.skills': 'Habilidades',
|
||
'insights.opinions': 'Opiniones',
|
||
'insights.other': 'Otro',
|
||
'insights.title': 'Perspectivas',
|
||
'insights.empty': 'Sin insights aún. Los insights se generan a medida que crece tu memoria.',
|
||
'insights.description': 'Basado en {count} relaciones en tu grafo de memoria.',
|
||
'insights.items': 'elementos',
|
||
'insights.more': 'más',
|
||
'calls.joiningCall': 'Uniéndose a la llamada',
|
||
'calls.meetWindowOpening': 'La ventana de Meet se está abriendo...',
|
||
'calls.failedToStart': 'No se pudo iniciar la llamada de Google Meet',
|
||
'calls.couldNotStart': 'No se pudo iniciar la llamada',
|
||
'calls.failedToClose': 'No se pudo cerrar la llamada',
|
||
'calls.couldNotClose': 'No se pudo cerrar la llamada',
|
||
'calls.joinMeet': 'Unirse a una llamada de Google Meet',
|
||
'calls.joinMeetDescription': 'Ingresa un enlace de Google Meet para unirte.',
|
||
'calls.meetLink': 'Enlace de Meet',
|
||
'calls.displayName': 'Nombre de visualización',
|
||
'calls.openingMeet': 'Abriendo Meet...',
|
||
'calls.joinCall': 'Unirse a la llamada',
|
||
'calls.activeCalls': 'Llamadas activas',
|
||
'calls.leave': 'Salir',
|
||
'workspace.wipeConfirm':
|
||
'¿Seguro que quieres borrar toda la memoria? Esta acción no se puede deshacer.',
|
||
'workspace.resetTreeConfirm': '¿Seguro que quieres reconstruir el árbol de memoria?',
|
||
'workspace.wipeTitle': 'Borrar memoria',
|
||
'workspace.resetting': 'Restableciendo...',
|
||
'workspace.resetMemory': 'Restablecer memoria',
|
||
'workspace.resetTreeTitle': 'Reconstruir árbol de memoria',
|
||
'workspace.rebuilding': 'Reconstruyendo...',
|
||
'workspace.resetMemoryTree': 'Restablecer árbol de memoria',
|
||
'workspace.building': 'Construyendo...',
|
||
'workspace.buildSummaryTrees': 'Construir árboles de resumen',
|
||
'workspace.viewVault': 'Ver bóveda',
|
||
'workspace.openingVaultTitle': 'Apertura de bóveda en obsidiana',
|
||
'workspace.openingVaultMessage':
|
||
'Si Obsidian no se abre, instálalo desde obsidian.md o usa Mostrar carpeta. Ruta del almacén:',
|
||
'workspace.openVaultFailedTitle': 'No se pudo abrir el almacén en Obsidian',
|
||
'workspace.openVaultFailedMessage':
|
||
'Utilice Revelar carpeta para abrir el directorio del almacén directamente. Ruta de la bóveda:',
|
||
'workspace.revealVaultFailed': 'No se pudo mostrar la carpeta del almacén',
|
||
'workspace.revealFolder': 'Revelar carpeta',
|
||
'workspace.checkingVault': 'Verificando…',
|
||
'workspace.vaultNotRegisteredHelp':
|
||
'Obsidian solo abre las carpetas que hayas agregado como almacén. En Obsidian, elige «Abrir carpeta como almacén» y selecciona la carpeta de abajo; solo necesitas hacerlo una vez. Luego haz clic en Ver almacén de nuevo.',
|
||
'workspace.obsidianNotFoundHelp':
|
||
'No encontramos Obsidian en este dispositivo. Instálalo, o — si está instalado en una ubicación no estándar — establece su carpeta de configuración en Avanzado.',
|
||
'workspace.openAnyway': 'Abrir en Obsidian de todos modos',
|
||
'workspace.installObsidian': 'Instalar Obsidian',
|
||
'workspace.obsidianAdvanced': '¿Obsidian instalado en otro lugar?',
|
||
'workspace.obsidianConfigDirLabel': 'Carpeta de configuración de Obsidian',
|
||
'workspace.obsidianConfigDirHint':
|
||
'Ruta a la carpeta que contiene obsidian.json (p. ej., ~/.config/obsidian). Dejar en blanco para detectar automáticamente.',
|
||
'workspace.obsidianConfigDirPlaceholder': '~/.config/obsidian',
|
||
'workspace.graphLoadFailed': 'No se pudo cargar el grafo de memoria',
|
||
'workspace.loadingGraph': 'Cargando grafo de memoria...',
|
||
'workspace.graphViewMode': 'Modo de vista del grafo de memoria',
|
||
'workspace.trees': 'Árboles',
|
||
'workspace.contacts': 'Contactos',
|
||
'graph.noContactMentions': 'Sin menciones de contacto',
|
||
'graph.noMemory': 'Sin memoria',
|
||
'graph.source': 'Fuente',
|
||
'graph.topic': 'Tema',
|
||
'graph.global': 'Mundial',
|
||
'graph.document': 'Documento',
|
||
'graph.contact': 'Contacto',
|
||
'graph.nodes': 'nodos',
|
||
'graph.parentChild': 'padre-hijo',
|
||
'graph.documentContact': 'documento-contacto',
|
||
'graph.link': 'enlace',
|
||
'graph.links': 'enlaces',
|
||
'graph.children': 'hijos',
|
||
'graph.clickToOpenObsidian': 'Clic para abrir en Obsidian',
|
||
'graph.person': 'Persona',
|
||
'graph.resetView': 'Restablecer vista',
|
||
'modal.dontShowAgain': 'No mostrar sugerencias similares',
|
||
'reflections.loading': 'Cargando reflexiones...',
|
||
'reflections.empty': 'Sin reflexiones aún',
|
||
'reflections.title': 'Reflexiones',
|
||
'reflections.proposedAction': 'Acción propuesta',
|
||
'reflections.act': 'Actuar',
|
||
'reflections.dismiss': 'Descartar',
|
||
'reflections.viewConversation': 'Ver',
|
||
'subconscious.mode.label': 'Modo subconsciente',
|
||
'subconscious.mode.off.title': 'Apagado',
|
||
'subconscious.mode.off.desc': 'El subconsciente está desactivado.',
|
||
'subconscious.mode.simple.title': 'Simple',
|
||
'subconscious.mode.simple.desc': 'Observación de solo lectura. Solo acceso a memoria y archivos.',
|
||
'subconscious.mode.aggressive.title': 'Agresivo',
|
||
'subconscious.mode.aggressive.desc':
|
||
'Acceso completo a herramientas. Puede escribir, crear agentes y delegar tareas.',
|
||
'subconscious.mode.aggressiveWarning':
|
||
'El modo agresivo otorga al subconsciente acceso completo a herramientas, incluyendo escritura y creación de subagentes.',
|
||
'subconscious.interval.label': 'Frecuencia',
|
||
'subconscious.interval.minutes': '{n} min',
|
||
'subconscious.interval.hours': '{n}h',
|
||
'subconscious.interval.oneHour': '1 hora',
|
||
'subconscious.interval.oneDay': '24 horas',
|
||
'whatsapp.chatsSynced': 'chats sincronizados',
|
||
'whatsapp.chatSynced': 'chat sincronizado',
|
||
'sync.active': 'Activo',
|
||
'sync.recent': 'Reciente',
|
||
'sync.idle': 'Inactivo',
|
||
'sync.memorySources': 'Fuentes de memoria',
|
||
'sync.noConnectedSources': 'Sin fuentes conectadas',
|
||
'sync.chunks': 'fragmentos',
|
||
'sync.lastChunk': 'Último fragmento:',
|
||
'sync.pending': 'pendiente',
|
||
'sync.processed': 'procesado',
|
||
'sync.syncing': 'Sincronizando…',
|
||
'sync.sync': 'Sincronizar',
|
||
'sync.failedToLoad': 'No se pudo cargar el estado de sincronización',
|
||
'sync.noContent':
|
||
'Aún no se ha sincronizado contenido en la memoria. Conecta una integración para empezar.',
|
||
'memorySources.title': 'Fuentes de memoria',
|
||
'memorySources.empty':
|
||
'Aún no hay fuentes de memoria. Agrega una para comenzar a alimentar la memoria.',
|
||
'memorySources.customSources': 'Fuentes personalizadas',
|
||
'memorySources.addSource': 'Agregar fuente',
|
||
'memorySources.noCustomSources':
|
||
'Aún no hay fuentes personalizadas. Agrega una carpeta, el repositorio GitHub, la fuente RSS o una página web para comenzar.',
|
||
'memorySources.loadingConnections': 'Cargando conexiones…',
|
||
'memorySources.noConnections':
|
||
'No se encontraron conexiones activas de Composio. Conecta una integración primero.',
|
||
'memorySources.pickConnection': 'Elige una conexión',
|
||
'memorySources.selectConnection': '— Seleccionar una conexión —',
|
||
'memorySources.composioListFailed': 'Error al cargar las conexiones Composio.',
|
||
'memorySources.browse': 'Examinar…',
|
||
'memorySources.folderPathPlaceholder': '/Users/you/notes',
|
||
'memorySources.globPatternPlaceholder': '**/*.md',
|
||
'memorySources.repoUrlPlaceholder': 'https://github.com/org/repo',
|
||
'memorySources.branchPlaceholder': 'main',
|
||
'memorySources.feedUrlPlaceholder': 'https://example.com/feed.xml',
|
||
'memorySources.pageUrlPlaceholder': 'https://example.com/article',
|
||
'memorySources.cssSelectorPlaceholder': 'article',
|
||
'memorySources.searchQueryPlaceholder': 'de:usuario AI seguridad',
|
||
'memorySources.kind.composio': 'Integración',
|
||
'memorySources.kind.folder': 'Carpeta local',
|
||
'memorySources.kind.github_repo': 'GitHub Repositorio',
|
||
'memorySources.kind.twitter_query': 'Búsqueda en Twitter',
|
||
'memorySources.kind.rss_feed': 'RSS Alimentar',
|
||
'memorySources.kind.web_page': 'Página web',
|
||
'memorySources.sync.successTitle': 'Sincronizando',
|
||
'memorySources.sync.successMessage': 'El progreso aparecerá en breve.',
|
||
'memorySources.sync.failedTitle': 'Sincronización fallida:',
|
||
'time.justNow': 'ahora mismo',
|
||
'time.secondsAgoSuffix': 's',
|
||
'time.minutesAgoSuffix': 'min',
|
||
'time.hoursAgoSuffix': 'h',
|
||
'time.daysAgoSuffix': 'd',
|
||
'memorySources.pickKind': '¿Qué tipo de fuente quieres agregar?',
|
||
'memorySources.backToKinds': 'Volver a los tipos de fuente',
|
||
'memorySources.label': 'Etiqueta',
|
||
'memorySources.labelPlaceholder': 'Mis notas de investigación',
|
||
'memorySources.add': 'Añadir',
|
||
'memorySources.adding': 'Agregando…',
|
||
'memorySources.added': 'Fuente añadida',
|
||
'memorySources.removed': 'Fuente eliminada',
|
||
'memorySources.remove': 'Eliminar',
|
||
'memorySources.enable': 'Habilitar',
|
||
'memorySources.disable': 'Desactivar',
|
||
'memorySources.toggleFailed': 'Error al alternar',
|
||
'memorySources.removeFailed': 'Error al eliminar',
|
||
'memorySources.folderPath': 'Ruta de la carpeta',
|
||
'memorySources.globPattern': 'Patrón glob',
|
||
'memorySources.repoUrl': 'Repositorio URL',
|
||
'memorySources.branch': 'Rama',
|
||
'memorySources.feedUrl': 'Alimentar URL',
|
||
'memorySources.pageUrl': 'Página URL',
|
||
'memorySources.cssSelector': 'Selector CSS (opcional)',
|
||
'memorySources.searchQuery': 'Consulta de búsqueda',
|
||
'memorySources.build.title': 'Construir',
|
||
'memorySources.build.building': 'Construyendo…',
|
||
'memorySources.build.successTitle': 'Árbol construido',
|
||
'memorySources.build.failedTitle': 'Construcción fallida',
|
||
'memorySources.build.sealsMessage': 'sellado(s) completado(s)',
|
||
'backend.aiBackend': 'Backend de IA',
|
||
'backend.cloud': 'Nube',
|
||
'backend.recommended': 'Recomendado',
|
||
'backend.cloudDescription':
|
||
'Modelos rápidos y potentes alojados en nuestros servidores. Listos para usar de inmediato.',
|
||
'backend.privacyNote':
|
||
'Nunca enviamos datos personales, mensajes ni claves a nuestros servidores.',
|
||
'backend.local': 'locales',
|
||
'backend.advanced': 'Avanzado',
|
||
'backend.localDescription':
|
||
'Ejecuta modelos en tu propia máquina usando Ollama. Privacidad total, requiere configuración.',
|
||
'backend.ramRecommended': 'Se recomienda 16 GB+ de RAM',
|
||
'subconscious.tasks': 'tareas',
|
||
'subconscious.ticks': 'garrapatas',
|
||
'subconscious.last': 'Último',
|
||
'subconscious.failed': 'fallido',
|
||
'subconscious.tickInterval': 'Intervalo de tick',
|
||
'subconscious.runNow': 'Ejecutar ahora',
|
||
'subconscious.providerUnavailableTitle': 'Subconsciente en pausa',
|
||
'subconscious.providerSettings': 'Ajustes de IA',
|
||
'subconscious.approvalNeeded': 'Se necesita aprobación',
|
||
'subconscious.requiresApproval': 'Requiere aprobación',
|
||
'subconscious.fixInConnections': 'Corregir en Conexiones',
|
||
'subconscious.goAhead': 'Adelante',
|
||
'subconscious.activeTasks': 'Tareas activas',
|
||
'subconscious.noActiveTasks': 'Sin tareas activas',
|
||
'subconscious.default': 'Predeterminado',
|
||
'subconscious.addTaskPlaceholder': 'Agregar una nueva tarea...',
|
||
'subconscious.activityLog': 'Registro de actividad',
|
||
'subconscious.noActivity': 'Sin actividad aún',
|
||
'subconscious.decision.nothingNew': 'Sin novedades',
|
||
'subconscious.decision.completed': 'Completado',
|
||
'subconscious.decision.evaluating': 'Evaluando',
|
||
'subconscious.decision.waitingApproval': 'Esperando aprobación',
|
||
'subconscious.decision.failed': 'Fallido',
|
||
'subconscious.decision.cancelled': 'Cancelado',
|
||
'subconscious.decision.skipped': 'Omitido',
|
||
'actionable.complete': 'Completar',
|
||
'actionable.dismiss': 'Descartar',
|
||
'actionable.snooze': 'Posponer',
|
||
'actionable.new': 'Nuevo',
|
||
'stats.storage': 'Almacenamiento',
|
||
'stats.files': 'archivos',
|
||
'stats.documents': 'Documentos',
|
||
'stats.today': 'hoy',
|
||
'stats.namespaces': 'Espacios de nombres',
|
||
'stats.relations': 'Relaciones',
|
||
'stats.firstMemory': 'Primer recuerdo',
|
||
'stats.latest': 'Más reciente',
|
||
'stats.sessions': 'Sesiones',
|
||
'stats.tokens': 'fichas',
|
||
'bootCheck.invalidUrl': 'Ingresa una URL de runtime.',
|
||
'bootCheck.urlMustStartWith': 'La URL debe comenzar con http:// o https://',
|
||
'bootCheck.validUrlRequired':
|
||
'Eso no parece una URL válida (prueba con https://core.example.com/rpc)',
|
||
'bootCheck.tokenRequired': 'Necesitaremos un token de autenticación para conectarnos.',
|
||
'bootCheck.httpPublicWarning':
|
||
'Esta es una URL HTTP sin cifrar en un host público: el tráfico no estará cifrado. Usa HTTPS a menos que confíes en esta red.',
|
||
'bootCheck.chooseCoreMode': 'Seleccionar un runtime',
|
||
'bootCheck.connectToCore': 'Conectar a tu runtime',
|
||
'bootCheck.desktopDescription':
|
||
'OpenHuman necesita un runtime para funcionar. Elige dónde debe vivir.',
|
||
'bootCheck.webDescription':
|
||
'En la web, OpenHuman se conecta a un runtime que tú controlas. Ingresa su URL y token de autenticación abajo, o descarga la app de escritorio para ejecutar uno en tu máquina.',
|
||
'bootCheck.preferDesktop': '¿Prefieres tener todo en tu propio dispositivo?',
|
||
'bootCheck.downloadDesktop': 'Obtener la app de escritorio',
|
||
'bootCheck.localRecommended': 'Ejecutar localmente (Recomendado)',
|
||
'bootCheck.localDescription':
|
||
'Corre directamente en tu computadora. El más rápido, completamente privado, sin nada que configurar.',
|
||
'bootCheck.cloudMode': 'Ejecutar en la nube (Complejo)',
|
||
'bootCheck.cloudDescription':
|
||
'Conéctate a un runtime que estás alojando en otro lugar. Permanece en línea 24×7 para que no necesites mantener este dispositivo encendido.',
|
||
'bootCheck.coreRpcUrl': 'URL del runtime',
|
||
'bootCheck.rpcUrlPlaceholder': 'https://core.example.com/rpc',
|
||
'bootCheck.authToken': 'Token de autenticación',
|
||
'bootCheck.bearerTokenPlaceholder': 'El bearer token de tu runtime remoto',
|
||
'bootCheck.storedLocally': 'Solo guardado en este dispositivo. Enviado como ',
|
||
'bootCheck.testing': 'Probando…',
|
||
'bootCheck.testConnection': 'Probar conexión',
|
||
'bootCheck.connectedOk': 'Conectado. Todo listo.',
|
||
'bootCheck.authFailed': 'Ese token no funcionó. Verifícalo e inténtalo de nuevo.',
|
||
'bootCheck.unreachablePrefix': 'No se pudo alcanzar:',
|
||
'bootCheck.checkingCore': 'Activando tu runtime…',
|
||
'bootCheck.cannotReach': 'No se puede alcanzar el runtime',
|
||
'bootCheck.cannotReachDesc':
|
||
'No pudimos conectarnos a tu runtime. ¿Quieres probar con uno diferente?',
|
||
'bootCheck.switchMode': 'Elegir un runtime diferente',
|
||
'bootCheck.quit': 'Salir',
|
||
'bootCheck.legacyDetected': 'Runtime en segundo plano legacy detectado',
|
||
'bootCheck.legacyDescription':
|
||
'Un daemon de OpenHuman instalado por separado ya está corriendo en este dispositivo. Necesitamos eliminarlo antes de que el runtime integrado pueda tomar el control.',
|
||
'bootCheck.removing': 'Eliminando…',
|
||
'bootCheck.removeContinue': 'Eliminar y continuar',
|
||
'bootCheck.localNeedsRestart': 'El runtime local necesita reiniciarse',
|
||
'bootCheck.localNeedsRestartDesc':
|
||
'Tu runtime local tiene una versión diferente a la de esta app. Un reinicio rápido los sincronizará.',
|
||
'bootCheck.restarting': 'Reiniciando…',
|
||
'bootCheck.restartCore': 'Reiniciar runtime',
|
||
'bootCheck.cloudNeedsUpdate': 'El runtime en la nube necesita actualizarse',
|
||
'bootCheck.cloudNeedsUpdateDesc':
|
||
'Tu runtime en la nube tiene una versión diferente a la de esta app. Ejecuta el actualizador para sincronizarlos.',
|
||
'bootCheck.updating': 'Actualizando…',
|
||
'bootCheck.updateCloudCore': 'Actualizar runtime en la nube',
|
||
'bootCheck.versionCheckFailed': 'Verificación de versión del runtime fallida',
|
||
'bootCheck.versionCheckFailedDesc':
|
||
'Tu runtime está activo pero no reporta su versión. Puede estar desactualizado. Reinícialo o actualízalo para continuar.',
|
||
'bootCheck.working': 'Trabajando…',
|
||
'bootCheck.restartUpdateCore': 'Reiniciar / Actualizar runtime',
|
||
'bootCheck.unexpectedError': 'Error inesperado en verificación de arranque',
|
||
'bootCheck.actionFailed': 'Algo salió mal. Inténtalo de nuevo.',
|
||
'bootCheck.portConflictTitle': 'No se pudo iniciar el motor de la aplicación',
|
||
'bootCheck.portConflictBody':
|
||
'Otro proceso está usando el puerto de red que OpenHuman necesita. Intentaremos solucionarlo automáticamente.',
|
||
'bootCheck.portConflictFixButton': 'Corregir automáticamente',
|
||
'bootCheck.portConflictFixing': 'Corrigiendo…',
|
||
'bootCheck.portConflictFixFailed':
|
||
'La corrección automática no funcionó. Reinicia tu equipo e inténtalo de nuevo.',
|
||
'notifications.justNow': 'justo ahora',
|
||
'notifications.minAgo': 'hace {n}m',
|
||
'notifications.hrAgo': 'hace {n}h',
|
||
'notifications.dayAgo': 'hace {n}d',
|
||
'notifications.category.messages': 'Mensajes',
|
||
'notifications.category.agents': 'Agentes',
|
||
'notifications.category.skills': 'Habilidades',
|
||
'notifications.category.system': 'Sistema',
|
||
'notifications.category.meetings': 'Reuniones',
|
||
'notifications.category.reminders': 'Recordatorios',
|
||
'notifications.category.important': 'Importante',
|
||
'about.update.status.checking': 'Verificando...',
|
||
'about.update.status.available': 'v{version} disponible',
|
||
'about.update.status.availableNoVersion': 'Actualización disponible',
|
||
'about.update.status.downloading': 'Descargando...',
|
||
'about.update.status.readyToInstall': 'v{version} lista para instalar',
|
||
'about.update.status.readyToInstallNoVersion':
|
||
'Una nueva versión se descargó y está lista. Reinicia para aplicarla.',
|
||
'about.update.status.installing': 'Instalando...',
|
||
'about.update.status.restarting': 'Reiniciando...',
|
||
'about.update.status.upToDate': 'Estás usando la versión más reciente.',
|
||
'about.update.status.error': 'Error al verificar actualizaciones',
|
||
'about.update.status.default': 'Buscar actualizaciones',
|
||
'welcome.connectionFailed': 'Conexión fallida: {status} {statusText}',
|
||
'welcome.connectionFailedMsg': 'Conexión fallida: {message}',
|
||
'welcome.continueLocally': 'Continuar localmente',
|
||
'welcome.continueLocallyExperimental': 'Continuar localmente (Experimental)',
|
||
'welcome.localSessionStarting': 'Iniciando sesión local...',
|
||
'welcome.localSessionDesc': 'Utiliza un perfil local sin conexión y omite TinyHumans OAuth.',
|
||
'chat.agentChatDesc': 'Abre una sesión de chat directo con el agente.',
|
||
'chat.modelPlaceholder': 'gpt-4o',
|
||
'channels.activeRouteValue': '{channel} vía {authMode}',
|
||
'privacy.dataKind.messages': 'Mensajes',
|
||
'privacy.dataKind.agents': 'Agentes',
|
||
'privacy.dataKind.skills': 'Habilidades',
|
||
'privacy.dataKind.system': 'Sistema',
|
||
'privacy.dataKind.meetings': 'Reuniones',
|
||
'privacy.dataKind.reminders': 'Recordatorios',
|
||
'privacy.dataKind.important': 'Importante',
|
||
'onboarding.enableLocalAI': 'Activar IA local',
|
||
'onboarding.skills.status.available': 'Disponible',
|
||
'onboarding.skills.status.connected': 'Conectado',
|
||
'onboarding.skills.status.connecting': 'Conectando',
|
||
'onboarding.skills.status.error': 'error',
|
||
'onboarding.skills.status.unavailable': 'No disponible',
|
||
'composio.statusUnavailable': 'Estado no disponible',
|
||
'composio.authExpired': 'Autenticación caducada',
|
||
'composio.reconnect': 'Reconectar',
|
||
'composio.expiredAuthorization': '{name} autorización vencida',
|
||
'composio.expiredDescription':
|
||
'Vuelva a conectarse para volver a habilitar las herramientas {name}. OpenHuman mantendrá esta integración no disponible hasta que actualice el acceso de OAuth.',
|
||
'composio.envVarOverrides': 'está configurada, reemplaza esta configuración.',
|
||
'composio.previewBadge': 'Vista previa',
|
||
'composio.previewTooltip':
|
||
'La integración del agente estará disponible próximamente: puede conectarse, pero el agente aún no puede usar este kit de herramientas.',
|
||
'memory.day.sun': 'Dom',
|
||
'memory.day.mon': 'Lun',
|
||
'memory.day.tue': 'Mar',
|
||
'memory.day.wed': 'Mié',
|
||
'memory.day.thu': 'Jue',
|
||
'memory.day.fri': 'Vie',
|
||
'memory.day.sat': 'Sáb',
|
||
'memory.ingesting': 'Ingiriendo',
|
||
'memory.ingestionQueued': 'En cola',
|
||
'memory.ingestingTitle': 'Ingiriendo {title}',
|
||
'mic.noAudioCaptured': 'No se capturó audio',
|
||
'mic.noSpeechDetected': 'No se detectó habla',
|
||
'mic.lowConfidenceResult': 'No se pudo entender el audio con claridad — intenta de nuevo',
|
||
'mic.failedToStopRecording': 'No se pudo detener la grabación: {message}',
|
||
'mic.transcriptionFailed': 'Transcripción fallida: {message}',
|
||
'reflections.kind.retrospective': 'Retrospectiva',
|
||
'reflections.kind.derivedFact': 'Hecho derivado',
|
||
'reflections.kind.moodInsight': 'Insight de ánimo',
|
||
'reflections.kind.relationshipInsight': 'Insight de relación',
|
||
'graph.tooltip.summary': 'Resumen',
|
||
'graph.tooltip.contact': 'Contacto',
|
||
'localModel.usage.never': 'Nunca',
|
||
'localModel.usage.mediumLoad': 'Carga media',
|
||
'localModel.usage.lowLoad': 'Carga baja',
|
||
'localModel.usage.idleMode': 'Modo inactivo',
|
||
'localModel.rebootstrapComplete': 'Re-bootstrap del modelo completado.',
|
||
'localModel.modelsVerified': 'Modelos locales verificados.',
|
||
'accounts.addModal.allConnected': 'Todo conectado',
|
||
'accounts.addModal.title': 'Agregar cuenta',
|
||
'accounts.respondQueue.empty': 'Vacío',
|
||
'accounts.respondQueue.hide': 'Ocultar cola de respuestas',
|
||
'accounts.respondQueue.loadFailed': 'No se pudo cargar la cola de respuestas',
|
||
'accounts.respondQueue.loading': 'Cargando cola…',
|
||
'accounts.respondQueue.pending': 'Pendiente',
|
||
'accounts.respondQueue.show': 'Mostrar cola de respuestas',
|
||
'accounts.respondQueue.title': 'Cola de respuestas',
|
||
'accounts.webviewHost.almostReady': 'Casi listo...',
|
||
'accounts.webviewHost.loadTimeout': 'Tiempo de carga agotado',
|
||
'accounts.webviewHost.loading': 'Cargando {providerName}...',
|
||
'accounts.webviewHost.loadingAccount': 'Cargando cuenta',
|
||
'accounts.webviewHost.restoringSession': 'Restaurando sesión...',
|
||
'accounts.webviewHost.retryLoading': 'Reintentar carga',
|
||
'accounts.webviewHost.takingLonger': '{providerName} está tardando más de lo esperado.',
|
||
'accounts.webviewHost.timeoutHint': 'Pista de tiempo agotado',
|
||
'app.connectionBadge.composio': 'Composio',
|
||
'app.connectionBadge.messaging': 'Mensajería',
|
||
'app.connectionIndicator.connected': 'Conectado a OpenHuman AI 🚀',
|
||
'app.connectionIndicator.connecting': 'Conectando',
|
||
'app.connectionIndicator.coreOffline': 'Core sin conexión',
|
||
'app.connectionIndicator.disconnected': 'Desconectado',
|
||
'app.connectionIndicator.offline': 'Sin conexión',
|
||
'app.connectionIndicator.reconnecting': 'Reconectando…',
|
||
'app.errorFallback.componentStack': 'Pila de componentes',
|
||
'app.errorFallback.downloadLatest': 'Descargar la última versión',
|
||
'app.errorFallback.heading': 'Encabezado',
|
||
'app.errorFallback.hint': 'Sugerencia',
|
||
'app.errorFallback.reloadApp': 'Recargar app',
|
||
'app.errorFallback.subheading': 'Subtítulo',
|
||
'app.errorFallback.tryRecover': 'Intentar recuperar',
|
||
'app.localAiDownload.installing': 'Instalando...',
|
||
'app.localAiDownload.preparing': 'Preparando...',
|
||
'app.openhumanLink.accounts.continueWith': 'Continuar con inicio de sesión de {label}',
|
||
'app.openhumanLink.accounts.done': 'Listo',
|
||
'app.openhumanLink.accounts.intro': 'Introducción',
|
||
'app.openhumanLink.accounts.webviewNote': 'Nota de webview',
|
||
'app.openhumanLink.billing.openDashboard': 'Abrir panel',
|
||
'app.openhumanLink.billing.stayOnTrial': 'Continuar con prueba',
|
||
'app.openhumanLink.billing.trialCredit': 'Crédito de prueba',
|
||
'app.openhumanLink.billing.trialDesc': 'Descripción de prueba',
|
||
'app.openhumanLink.defaultBody':
|
||
'Aún no está listo en el menú emergente. Abre la página completa de ajustes cuando la necesites.',
|
||
'app.openhumanLink.discord.intro': 'Introducción',
|
||
'app.openhumanLink.discord.openInvite': 'Abrir invitación',
|
||
'app.openhumanLink.discord.perk1': 'Ventaja 1',
|
||
'app.openhumanLink.discord.perk2': 'Ventaja 2',
|
||
'app.openhumanLink.discord.perk3': 'Ventaja 3',
|
||
'app.openhumanLink.discord.perk4': 'Ventaja 4',
|
||
'app.openhumanLink.discordReport.intro':
|
||
'Lo sentimos — algo falló de nuestra parte. Intentamos registrar estos errores automáticamente, pero compartir los detalles en Discord nos ayuda a solucionarlo más rápido.',
|
||
'app.openhumanLink.discordReport.openDiscord': 'Abrir Discord',
|
||
'app.openhumanLink.done': 'Listo',
|
||
'app.openhumanLink.loadingChannelSetup': 'Cargando configuración de canal',
|
||
'app.openhumanLink.maybeLater': 'Quizás después',
|
||
'app.openhumanLink.notifications.asking': 'Consultando tu sistema operativo…',
|
||
'app.openhumanLink.notifications.blocked': 'Bloqueado',
|
||
'app.openhumanLink.notifications.blockedStep1': 'Paso bloqueado 1',
|
||
'app.openhumanLink.notifications.blockedStep2': 'Paso bloqueado 2',
|
||
'app.openhumanLink.notifications.blockedStep3': 'Paso bloqueado 3',
|
||
'app.openhumanLink.notifications.intro': 'Introducción',
|
||
'app.openhumanLink.notifications.promptHint': 'Sugerencia de permiso',
|
||
'app.openhumanLink.notifications.retry': 'Reintentar notificación de prueba',
|
||
'app.openhumanLink.notifications.send': 'Enviar notificación de prueba',
|
||
'app.openhumanLink.notifications.sendFailed': 'No se pudo enviar: {error}',
|
||
'app.openhumanLink.notifications.sent':
|
||
'Notificación de prueba enviada. Si no la recibiste, ve a Ajustes del sistema → Notificaciones → OpenHuman, activa Permitir notificaciones y configura el estilo de banner como Persistente.',
|
||
'app.openhumanLink.skipForNow': 'Omitir por ahora',
|
||
'app.openhumanLink.telegramUnavailable': 'Telegram no disponible',
|
||
'app.openhumanLink.title.accounts': 'Conecta tus apps',
|
||
'app.openhumanLink.title.billing': 'Facturación y créditos',
|
||
'app.openhumanLink.title.discord': 'Únete a la comunidad',
|
||
'app.openhumanLink.title.discordReport': 'Reportar este error',
|
||
'app.openhumanLink.title.messaging': 'Conecta un canal de chat',
|
||
'app.openhumanLink.title.notifications': 'Permitir notificaciones',
|
||
'app.persistRehydration.body': 'Cuerpo',
|
||
'app.persistRehydration.heading': 'Encabezado',
|
||
'app.persistRehydration.resetCta': 'Restableciendo…',
|
||
'app.persistRehydration.resetting': 'Restableciendo…',
|
||
'app.routeLoading.initializing': 'Inicializando OpenHuman...',
|
||
'app.update.currentlyOn': '{version}',
|
||
'app.update.errorFallback': 'Algo salió mal durante la actualización.',
|
||
'app.update.header.default': 'Actualización',
|
||
'app.update.header.error': 'Actualización fallida',
|
||
'app.update.header.installing': 'Instalando actualización',
|
||
'app.update.header.readyToInstall': 'Actualización lista para instalar',
|
||
'app.update.header.restarting': 'Reiniciando…',
|
||
'app.update.later': 'Después',
|
||
'app.update.newVersionReady': 'Una nueva versión está lista para instalar.',
|
||
'app.update.progress.downloaded': '{amount} descargado',
|
||
'app.update.progress.installing': 'Instalando la nueva versión…',
|
||
'app.update.progress.restarting': 'Relanzando la app…',
|
||
'app.update.progress.working': '{percent}%',
|
||
'app.update.restartNote': 'Nota de reinicio',
|
||
'app.update.restartNow': 'Reiniciar ahora',
|
||
'app.update.versionReady': 'La versión {newVersion} está lista para instalar.',
|
||
'channels.discord.accountLinked': 'Cuenta vinculada',
|
||
'channels.discord.connect': 'Conectar',
|
||
'channels.discord.linkTokenExpired': 'El token de enlace expiró. Inténtalo de nuevo.',
|
||
'channels.discord.linkTokenInstruction': '{token}',
|
||
'channels.discord.linkTokenLabel': 'Etiqueta de token de enlace',
|
||
'channels.discord.linkTokenOnce': 'Token de enlace de un solo uso',
|
||
'channels.discord.picker.allPermissionsOk':
|
||
'El bot tiene todos los permisos requeridos en este canal.',
|
||
'channels.discord.picker.botNotInServers': 'Bot no está en servidores',
|
||
'channels.discord.picker.category': 'Categoría',
|
||
'channels.discord.picker.channel': 'Canal',
|
||
'channels.discord.picker.checkingPermissions': 'Verificando permisos',
|
||
'channels.discord.picker.loadingChannels': 'Cargando canales...',
|
||
'channels.discord.picker.loadingServers': 'Cargando servidores...',
|
||
'channels.discord.picker.missingPermissions': 'Permisos faltantes',
|
||
'channels.discord.picker.noChannels': 'No se encontraron canales de texto',
|
||
'channels.discord.picker.noServers': 'No se encontraron servidores',
|
||
'channels.discord.picker.selectChannel': 'Selecciona un canal',
|
||
'channels.discord.picker.selectServer': 'Selecciona un servidor',
|
||
'channels.discord.picker.server': 'Servidor',
|
||
'channels.discord.picker.serverChannelSelection': 'Selección de servidor y canal',
|
||
'channels.discord.savedRestartRequired': 'Canal guardado. Reinicia la app para activarlo.',
|
||
'channels.telegram.connect': 'Conectar',
|
||
'channels.telegram.managedDmConnecting': 'Conectando DM gestionado',
|
||
'channels.telegram.managedDmTimeout': 'Tiempo de DM gestionado agotado',
|
||
'channels.telegram.reconnect': 'Reconectar',
|
||
'channels.telegram.savedRestartRequired': 'Canal guardado. Reinicia la app para activarlo.',
|
||
'channels.web.alwaysAvailable': 'Siempre disponible',
|
||
'chat.approval.approve': 'Aprobar',
|
||
'chat.approval.alwaysAllow': 'Permitir siempre',
|
||
'chat.approval.alwaysAllowHint':
|
||
'Deje de solicitar esta herramienta: agréguela a su lista de permitidos siempre',
|
||
'chat.approval.deciding': 'Laboral…',
|
||
'chat.approval.deny': 'Denegar',
|
||
'chat.approval.error': 'No se pudo registrar su decisión; inténtelo de nuevo.',
|
||
'chat.approval.fallback': 'El agente quiere ejecutar una acción que necesita su aprobación.',
|
||
'chat.approval.title': 'Aprobación necesaria',
|
||
'chat.approval.tool': 'Herramienta:',
|
||
'channels.authMode.managed_dm': 'Iniciar sesión con OpenHuman',
|
||
'channels.authMode.oauth': 'OAuth Iniciar sesión',
|
||
'channels.authMode.bot_token': 'Utilice su propio token de bot',
|
||
'channels.authMode.api_key': 'Utilice su propia clave API',
|
||
'channels.fieldRequired': '{field} es requerido',
|
||
'channels.mcp.title': 'MCP Servidores',
|
||
'channels.mcp.description':
|
||
'Explora y gestiona servidores de Model Context Protocol que amplían la IA con nuevas herramientas.',
|
||
'channels.discord.displayName': 'Discord',
|
||
'channels.discord.description': 'Enviar y recibir mensajes a través de Discord.',
|
||
'channels.discord.authMode.bot_token.description': 'Proporcione su propio token de bot Discord.',
|
||
'channels.discord.authMode.oauth.description':
|
||
'Instale el bot OpenHuman en su servidor Discord a través de OAuth.',
|
||
'channels.discord.authMode.managed_dm.description':
|
||
'Vincula tu cuenta personal Discord al bot OpenHuman.',
|
||
'channels.discord.fields.bot_token.label': 'Ficha de robot',
|
||
'channels.discord.fields.bot_token.placeholder': 'Tu token de bot Discord',
|
||
'channels.discord.fields.guild_id.label': 'ID del servidor (gremio)',
|
||
'channels.discord.fields.guild_id.placeholder': 'Opcional: restringir a un servidor específico',
|
||
'channels.telegram.displayName': 'Telegram',
|
||
'channels.telegram.description': 'Enviar y recibir mensajes a través de Telegram.',
|
||
'channels.telegram.authMode.managed_dm.description':
|
||
'Envíe un mensaje al bot OpenHuman Telegram directamente.',
|
||
'channels.telegram.authMode.bot_token.description':
|
||
'Proporcione su propio token de Bot Telegram de @BotFather.',
|
||
'channels.telegram.fields.bot_token.label': 'Ficha de robot',
|
||
'channels.telegram.fields.bot_token.placeholder': '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11',
|
||
'channels.telegram.fields.allowed_users.label': 'Usuarios permitidos',
|
||
'channels.telegram.fields.allowed_users.placeholder':
|
||
'Nombres de usuario Telegram separados por comas',
|
||
'channels.telegram.remoteControlTitle': 'Control remoto (Telegram)',
|
||
'channels.telegram.remoteControlBody':
|
||
'Desde un chat Telegram permitido, envíe /status, /sessions, /new o /help. El enrutamiento de modelos todavía usa /model y /models.',
|
||
'channels.web.displayName': 'Web',
|
||
'channels.web.description': 'Chatea a través de la interfaz de usuario web incorporada.',
|
||
'channels.web.authMode.managed_dm.description':
|
||
'Utilice el chat web integrado: no requiere configuración.',
|
||
'channels.yuanbao.connect': 'Connect',
|
||
'channels.yuanbao.connecting': 'Conectando…',
|
||
'channels.yuanbao.fieldRequired': '{field} es obligatorio',
|
||
'channels.yuanbao.reconnect': 'Reconnect',
|
||
'channels.yuanbao.savedRestartRequired': 'Canal guardado. Reinicia la aplicación para activarlo.',
|
||
'channels.yuanbao.unexpectedStatus': 'Estado de conexión inesperado: {status}',
|
||
'chat.unsubscribeApproval.approve': 'Aprobar y darse de baja',
|
||
'chat.unsubscribeApproval.approved': '✓ Baja realizada con éxito.',
|
||
'chat.unsubscribeApproval.denied': '✕ Solicitud denegada.',
|
||
'chat.unsubscribeApproval.deny': 'Denegar',
|
||
'chat.unsubscribeApproval.processing': 'Procesando...',
|
||
'chat.unsubscribeApproval.title': 'Solicitud de baja',
|
||
'commandPalette.ariaLabel': 'Paleta de comandos',
|
||
'commandPalette.description': 'Descripción',
|
||
'commandPalette.label': 'Comandos',
|
||
'commandPalette.noResults': 'Sin resultados',
|
||
'commandPalette.placeholder': 'Escribe un comando o busca…',
|
||
'commandPalette.searchAria': 'Buscar comandos',
|
||
'commandPalette.shortcutHint': 'Pulsa ? para ver todos los atajos',
|
||
'commandPalette.title': 'Paleta de comandos',
|
||
'kbd.ariaLabel': 'Atajo de teclado: {shortcut}',
|
||
'iosMascot.connectedTo': 'Conectado a',
|
||
'iosMascot.defaultPairedLabel': 'Escritorio',
|
||
'iosMascot.disconnect': 'Desconectar',
|
||
'iosMascot.error.generic': 'Algo salió mal. Por favor inténtalo de nuevo.',
|
||
'iosMascot.error.sendFailed': 'No se pudo enviar. Comprueba tu conexión.',
|
||
'iosMascot.pushToTalk': 'Empuja para hablar',
|
||
'iosMascot.sendMessage': 'enviar mensaje',
|
||
'iosMascot.thinking': 'Pensando...',
|
||
'iosMascot.typeMessage': 'Escribe un mensaje...',
|
||
'iosPair.connectedLoading': '¡Conectado! Cargando...',
|
||
'iosPair.connecting': 'Conectándose al escritorio...',
|
||
'iosPair.desktopLabel': 'Escritorio',
|
||
'iosPair.error.camera':
|
||
'Error al escanear con la cámara. Comprueba los permisos de cámara e inténtalo de nuevo.',
|
||
'iosPair.error.connectionFailed':
|
||
'Error de conexión. Asegúrate de que la aplicación de escritorio esté en ejecución e inténtalo de nuevo.',
|
||
'iosPair.error.invalidQr':
|
||
'Código QR no válido. Asegúrate de escanear un código de vinculación de OpenHuman.',
|
||
'iosPair.error.unreachableDesktop':
|
||
'No se pudo acceder al escritorio. Asegúrate de que ambos dispositivos estén en línea e inténtalo de nuevo.',
|
||
'iosPair.expired': 'QR code expiró. Pídale al escritorio que regenere el código.',
|
||
'iosPair.instructions':
|
||
'Abre OpenHuman en tu escritorio, ve a Configuración > Dispositivos y pulsa «Vincular teléfono» para mostrar el código QR.',
|
||
'iosPair.retryScan': 'Reintentar escaneo',
|
||
'iosPair.scanQrCode': 'Escanear QR code',
|
||
'iosPair.scannerOpening': 'Apertura del escáner...',
|
||
'iosPair.step.openDesktop': 'Abra OpenHuman en el escritorio',
|
||
'iosPair.step.openSettings': 'Vaya a Configuración > Dispositivos',
|
||
'iosPair.step.showQr': 'Toca "Emparejar teléfono" para mostrar QR',
|
||
'iosPair.title': 'Emparéjalo con tu escritorio',
|
||
'composio.connect.additionalConfigRequired': 'Configuración adicional requerida',
|
||
'composio.connect.atlassianSubdomainHint': 'cumbre',
|
||
'composio.connect.atlassianSubdomainLabel': 'Etiqueta de subdominio de Atlassian',
|
||
'composio.connect.connect': 'Conectar',
|
||
'composio.connect.dynamicsOrgNameHint':
|
||
'Por ejemplo, "myorg" para myorg.crm.dynamics.com. Introduce solo el nombre corto de la organización, no la URL completa.',
|
||
'composio.connect.dynamicsOrgNameLabel': 'Nombre de la organización de Dynamics 365',
|
||
'composio.connect.connectionFailed': 'Falló la conexión (estado: {status}).',
|
||
'composio.connect.disconnectFailed': 'Desconexión fallida: {msg}',
|
||
'composio.connect.disconnecting': 'Desconectando…',
|
||
'composio.connect.idleDescription': 'Conecta tu',
|
||
'composio.connect.idleDescriptionSuffix':
|
||
'cuenta. Abriremos una ventana del navegador, apruebas el acceso allí, y esta app detectará la conexión automáticamente.',
|
||
'composio.connect.isConnected': 'está conectado.',
|
||
'composio.connect.manage': 'Gestionar',
|
||
'composio.connect.needsFieldsPrefix': 'Para conectar',
|
||
'composio.connect.needsFieldsSuffix':
|
||
'necesitamos un poco más de información. Completa los campos que faltan abajo y vuelve a intentarlo.',
|
||
'composio.connect.needsSubdomain': 'Para conectar',
|
||
'composio.connect.needsSubdomainSuffix':
|
||
'introduce tu subdominio de Atlassian (p. ej. acme para acme.atlassian.net) e inténtalo de nuevo.',
|
||
'composio.connect.oauthComplete': 'OAuth por completar…',
|
||
'composio.connect.oauthTimeout': 'Tiempo de OAuth agotado',
|
||
'composio.connect.permissions': 'Permisos',
|
||
'composio.connect.permissionsDefault': 'Lectura + Escritura habilitados por defecto',
|
||
'composio.connect.permissionsNote': 'puede exponer',
|
||
'composio.connect.permissionsNoteSuffix':
|
||
'los propios permisos del agente de OpenHuman se controlan abajo con conmutadores de lectura, escritura y administración.',
|
||
'composio.connect.reopenBrowser': 'Reabrir navegador',
|
||
'composio.connect.requestingUrl': 'Solicitando URL de conexión…',
|
||
'composio.connect.requiredFieldEmpty': 'Este campo es obligatorio.',
|
||
'composio.connect.retryConnection': 'Reintentar conexión',
|
||
'composio.connect.scopeLoadError': 'No se pudieron cargar las preferencias de alcance: {msg}',
|
||
'composio.connect.scopeSaveError': 'No se pudo guardar el alcance {key}: {msg}',
|
||
'composio.connect.scope.read': 'leer',
|
||
'composio.connect.scope.readHint': 'Permita que el agente lea datos de esta conexión.',
|
||
'composio.connect.scope.write': 'escribir',
|
||
'composio.connect.scope.writeHint':
|
||
'Permita que el agente cree o modifique datos a través de esta conexión.',
|
||
'composio.connect.scope.admin': 'administrador',
|
||
'composio.connect.scope.adminHint':
|
||
'Permitir que el agente administre configuraciones, permisos o acciones destructivas.',
|
||
'composio.connect.subdomainInvalid':
|
||
'Introduce solo el subdominio corto (p. ej. "acme"), no la URL completa. Debe contener solo letras, números y guiones.',
|
||
'composio.connect.subdomainRequired': 'Ingresa tu subdominio de Atlassian para continuar.',
|
||
'composio.connect.wabaIdHint':
|
||
'Encuéntralo mediante GET /me/businesses y luego GET /{business_id}/owned_whatsapp_business_accounts usando tu token de acceso de Meta.',
|
||
'composio.connect.wabaIdLabel': 'Etiqueta de ID de WABA',
|
||
'composio.connect.wabaIdRequired':
|
||
'Ingresa tu ID de cuenta de WhatsApp Business (WABA ID) para continuar.',
|
||
'composio.connect.waitingFor': 'Esperando a',
|
||
'composio.connect.waitingHint': 'Sugerencia de espera',
|
||
'composio.triggers.heading': 'Disparadores',
|
||
'composio.triggers.listenFrom': 'Escuchar eventos de',
|
||
'composio.triggers.loadError': 'No se pudieron cargar los triggers',
|
||
'composio.triggers.needsConfiguration': 'Necesita configuración',
|
||
'composio.triggers.noneAvailable': 'Actualmente no hay triggers disponibles para',
|
||
'conversations.taskKanban.moveLeft': 'Mover a la izquierda',
|
||
'conversations.taskKanban.moveRight': 'Mover a la derecha',
|
||
'conversations.taskKanban.title': 'Tareas',
|
||
'conversations.taskKanban.approval.default': 'Por defecto',
|
||
'conversations.taskKanban.approval.notRequired': 'No requerido',
|
||
'conversations.taskKanban.approval.notRequiredBadge': 'sin aprobación',
|
||
'conversations.taskKanban.approval.required': 'Requerido',
|
||
'conversations.taskKanban.approval.requiredBadge': 'aprobación',
|
||
'conversations.taskKanban.approval.requiredBeforeExecution': 'Requerido antes de la ejecución',
|
||
'conversations.taskKanban.briefButton': 'Resumen de la tarea',
|
||
'conversations.taskKanban.briefTitle': 'Resumen de la tarea',
|
||
'conversations.taskKanban.closeBrief': 'Cerrar resumen de tarea',
|
||
'conversations.taskKanban.field.acceptanceCriteria': 'Criterios de aceptación',
|
||
'conversations.taskKanban.field.allowedTools': 'Herramientas permitidas',
|
||
'conversations.taskKanban.field.approval': 'Aprobación',
|
||
'conversations.taskKanban.field.assignedAgent': 'Agente asignado',
|
||
'conversations.taskKanban.field.blocker': 'bloqueador',
|
||
'conversations.taskKanban.field.evidence': 'Evidencia',
|
||
'conversations.taskKanban.field.notes': 'Notas',
|
||
'conversations.taskKanban.field.objective': 'Objetivo',
|
||
'conversations.taskKanban.field.plan': 'Plan',
|
||
'conversations.taskKanban.field.status': 'Estado',
|
||
'conversations.taskKanban.field.title': 'Título',
|
||
'conversations.taskKanban.saveChanges': 'Guardar cambios',
|
||
'conversations.taskKanban.deleteCard': 'Borrar',
|
||
'conversations.taskKanban.updateFailed':
|
||
'No se pudo actualizar la tarea; los cambios no se guardaron.',
|
||
'conversations.toolTimeline.turn': 'turno',
|
||
'conversations.toolTimeline.step': 'Paso',
|
||
'conversations.toolTimeline.workerThread': 'hilo de worker',
|
||
'conversations.subagent.viewProcessing': 'Ver procesamiento completo',
|
||
'conversations.subagent.parent': 'Principal',
|
||
'conversations.subagent.thinking': 'Pensando',
|
||
'conversations.subagent.response': 'Respuesta',
|
||
'conversations.subagent.toolCalls': 'Llamadas a herramientas',
|
||
'conversations.subagent.working': 'Trabajando…',
|
||
'conversations.subagent.noOutputYet': 'Aún no hay resultados',
|
||
'conversations.subagent.close': 'Cerrar',
|
||
'conversations.subagent.statusRunning': 'en ejecución',
|
||
'conversations.subagent.statusCompleted': 'completado',
|
||
'conversations.subagent.statusFailed': 'fallido',
|
||
'conversations.subagent.statusAwaitingUser': 'esperando al usuario',
|
||
'daemon.serviceBlockingGate.body': 'Cuerpo',
|
||
'daemon.serviceBlockingGate.downloadHint': 'Sugerencia de descarga',
|
||
'daemon.serviceBlockingGate.downloadLatest': 'Descargar la última versión',
|
||
'daemon.serviceBlockingGate.retryCore': 'Reintentar Core',
|
||
'daemon.serviceBlockingGate.retryFailed':
|
||
'Reintento fallido. Descarga la última versión de la app e inténtalo de nuevo.',
|
||
'daemon.serviceBlockingGate.retrying': 'Reintentando...',
|
||
'daemon.serviceBlockingGate.title': 'El core de OpenHuman no está disponible',
|
||
'home.banners.discordSubtitle': 'Subtítulo de Discord',
|
||
'home.banners.discordTitle': 'Únete a nuestro Discord',
|
||
'home.banners.earlyBirdDismiss': 'Descartar banner de early bird',
|
||
'home.banners.earlyBirdFirstSub': 'primera suscripción.',
|
||
'home.banners.earlyBirdOn': 'Early bird activo',
|
||
'home.banners.earlyBirdTitle': 'Los primeros 1.000 usuarios obtienen un 60% de descuento.',
|
||
'home.banners.earlyBirdUseCode': 'Usar código early bird',
|
||
'home.banners.getSubscription': 'obtener una suscripción',
|
||
'home.banners.promoCreditsBody': 'Cuerpo de créditos promocionales',
|
||
'home.banners.promoCreditsTitle': '{amount}',
|
||
'home.banners.promoCreditsUsage': 'Uso de créditos promocionales',
|
||
'intelligence.memoryChunk.detail.chunk': 'Fragmento',
|
||
'intelligence.memoryChunk.detail.copyChunkId': 'Copiar ID de fragmento',
|
||
'intelligence.memoryChunk.detail.embeddingInfo': 'bge-m3 1024dim',
|
||
'intelligence.memoryChunk.detail.noEmbedding': 'Sin embedding',
|
||
'intelligence.memoryChunk.letterhead.from': 'de',
|
||
'intelligence.memoryChunk.letterhead.to': 'a',
|
||
'intelligence.memoryChunk.mentioned.chunkOne': '1 fragmento',
|
||
'intelligence.memoryChunk.mentioned.chunkOther': '{count} fragmentos',
|
||
'intelligence.memoryChunk.mentioned.heading': 'm e n c i o n a d o',
|
||
'intelligence.memoryChunk.scoreBars.ariaScore': '{name} puntuación {pct} por ciento',
|
||
'intelligence.memoryChunk.scoreBars.atThreshold': 'en {threshold}',
|
||
'intelligence.memoryChunk.scoreBars.dropped': 'descartado',
|
||
'intelligence.memoryChunk.scoreBars.heading': 'p o r q u é s e c o n s e r v ó',
|
||
'intelligence.memoryChunk.scoreBars.kept': 'conservado',
|
||
'intelligence.diagram.title': 'Diagrama de arquitectura',
|
||
'intelligence.diagram.description':
|
||
'Última salida de arquitectura local desde el endpoint de diagrama configurado.',
|
||
'intelligence.diagram.refresh': 'Refresh',
|
||
'intelligence.diagram.refreshAria': 'Actualizar diagrama',
|
||
'intelligence.diagram.emptyTitle': 'Aún no hay diagrama disponible',
|
||
'intelligence.diagram.emptyDescription':
|
||
'Genera un diagrama de arquitectura desde el orquestador y este panel se actualizará desde el endpoint local configurado.',
|
||
'intelligence.diagram.skillInstallCommand': 'npx skills add yizhiyanhua-ai/fireworks-tech-graph',
|
||
'intelligence.diagram.promptExample':
|
||
'Genera un diagrama de arquitectura del enjambre actual en estilo de terminal oscuro',
|
||
'intelligence.diagram.imageAlt': 'Último diagrama de arquitectura de OpenHuman generado',
|
||
'intelligence.diagram.refreshesEvery': 'Se actualiza cada {seconds}s',
|
||
'intelligence.memoryText.entityTypePrefix': 'Tipo de entidad',
|
||
'intelligence.screenDebug.active': 'Activo',
|
||
'intelligence.screenDebug.app': 'Aplicación',
|
||
'intelligence.screenDebug.bounds': 'Límites',
|
||
'intelligence.screenDebug.captureAlt': 'Resultado de prueba de captura',
|
||
'intelligence.screenDebug.captureFailed': 'Falló',
|
||
'intelligence.screenDebug.captureSuccess': 'Éxito',
|
||
'intelligence.screenDebug.captureTest': 'Prueba de captura',
|
||
'intelligence.screenDebug.capturing': 'Capturando',
|
||
'intelligence.screenDebug.frames': 'Fotogramas',
|
||
'intelligence.screenDebug.idle': 'Inactivo',
|
||
'intelligence.screenDebug.lastApp': 'Última app',
|
||
'intelligence.screenDebug.mode': 'Modo',
|
||
'intelligence.screenDebug.permAccessibility': 'Permiso de accesibilidad',
|
||
'intelligence.screenDebug.permInput': 'Permiso de entrada',
|
||
'intelligence.screenDebug.permScreen': 'Accesibilidad',
|
||
'intelligence.screenDebug.permissions': 'Permisos',
|
||
'intelligence.screenDebug.platformNotSupported': 'Plataforma no compatible',
|
||
'intelligence.screenDebug.recentVisionSummaries': 'Resúmenes de visión recientes',
|
||
'intelligence.screenDebug.session': 'Sesión',
|
||
'intelligence.screenDebug.size': 'Tamaño',
|
||
'intelligence.screenDebug.status': 'Estado',
|
||
'intelligence.screenDebug.testCapture': 'Prueba de captura',
|
||
'intelligence.screenDebug.time': 'Tiempo',
|
||
'intelligence.screenDebug.title': 'Título',
|
||
'intelligence.screenDebug.unknown': 'Desconocido',
|
||
'intelligence.screenDebug.visionQueue': 'Cola de visión',
|
||
'intelligence.screenDebug.visionState': 'Estado de visión',
|
||
'intelligence.tasks.activeBoardOne': '1 tablero activo entre conversaciones',
|
||
'intelligence.tasks.activeBoardOther': '{count} tableros activos entre conversaciones',
|
||
'intelligence.tasks.empty': 'Sin tableros de tareas de agente aún',
|
||
'intelligence.tasks.emptyHint': 'Sugerencia de vacío',
|
||
'intelligence.tasks.failedToLoad': 'No se pudo cargar',
|
||
'intelligence.tasks.live': 'en vivo',
|
||
'intelligence.tasks.loadingBoards': 'Cargando tableros de tareas…',
|
||
'intelligence.tasks.threadPrefix': 'Hilo {thread}',
|
||
'intelligence.tasks.subtitle':
|
||
'Sus tareas y paneles de tareas de agentes en todo el espacio de trabajo.',
|
||
'intelligence.tasks.newTask': 'Nueva tarea',
|
||
'intelligence.tasks.personalBoardTitle': 'Tareas del agente',
|
||
'intelligence.tasks.personalEmpty': 'Aún no hay tareas personales',
|
||
'intelligence.tasks.composer.title': 'Nueva tarea',
|
||
'intelligence.tasks.composer.titleLabel': 'Título',
|
||
'intelligence.tasks.composer.titlePlaceholder': '¿Qué hay que hacer?',
|
||
'intelligence.tasks.composer.statusLabel': 'Estado',
|
||
'intelligence.tasks.composer.attachLabel': 'Adjuntar a la conversación',
|
||
'intelligence.tasks.composer.attachNone': 'Personal (sin conversación)',
|
||
'intelligence.tasks.composer.objectiveLabel': 'Objetivo',
|
||
'intelligence.tasks.composer.objectivePlaceholder': 'Opcional: el resultado deseado',
|
||
'intelligence.tasks.composer.notesLabel': 'Notas',
|
||
'intelligence.tasks.composer.notesPlaceholder': 'Notas opcionales',
|
||
'intelligence.tasks.composer.create': 'Crear tarea',
|
||
'intelligence.tasks.composer.creating': 'Creando…',
|
||
'intelligence.tasks.composer.createFailed': 'No se pudo crear la tarea',
|
||
'notifications.card.dismiss': 'Descartar notificación',
|
||
'notifications.card.importanceTitle': 'Importancia: {pct}%',
|
||
'notifications.center.empty': 'Sin notificaciones aún',
|
||
'notifications.center.emptyHint': 'Sugerencia de vacío',
|
||
'notifications.center.filterAll': 'Filtrar todo',
|
||
'notifications.center.markAllRead': 'Marcar todo como leído',
|
||
'notifications.center.title': 'Notificaciones',
|
||
'oauth.button.connecting': 'Conectando...',
|
||
'oauth.button.loopbackTimeout':
|
||
'El inicio de sesión expiró — el navegador no completó la redirección OAuth. Por favor, inténtalo de nuevo.',
|
||
'oauth.login.continueWith': 'Continuar con',
|
||
'onboarding.contextGathering.buildingDesc': 'Descripción de construcción',
|
||
'onboarding.contextGathering.buildingProfile': 'Construyendo tu perfil...',
|
||
'onboarding.contextGathering.continueToChat': 'Continuar al chat',
|
||
'onboarding.contextGathering.coreAlive':
|
||
'El núcleo está disponible — el primer arranque puede tardar un minuto.',
|
||
'onboarding.contextGathering.coreAliveProbing': 'Comprobando la conexión con el núcleo…',
|
||
'onboarding.contextGathering.coreUnreachable':
|
||
'El núcleo no responde. Puedes continuar e intentarlo más tarde.',
|
||
'onboarding.contextGathering.errorDesc':
|
||
'No pudimos construir tu perfil completo ahora mismo, pero no pasa nada — puedes continuar y tu perfil se construirá con el tiempo.',
|
||
'onboarding.contextGathering.stillWorkingDesc':
|
||
'El primer arranque puede tardar 30–60 segundos mientras preparamos tu modelo local y tus herramientas. Puedes continuar al chat en cualquier momento — la construcción del perfil sigue en segundo plano.',
|
||
'onboarding.contextGathering.stillWorkingTitle': 'Seguimos trabajando en tu perfil…',
|
||
'onboarding.contextGathering.title': 'Recopilación de contexto',
|
||
'openhuman.team_list_teams': 'Lista de equipos',
|
||
'overlay.ariaAttention': 'Mensaje de atención',
|
||
'overlay.ariaCompanion': 'Acompañante activo',
|
||
'overlay.ariaOrb': 'Overlay de OpenHuman',
|
||
'overlay.ariaVoiceActive': 'Entrada de voz activa',
|
||
'overlay.companion.error': 'error',
|
||
'overlay.companion.listening': 'Escuchando…',
|
||
'overlay.companion.pointing': 'Señalando…',
|
||
'overlay.companion.speaking': 'Hablando…',
|
||
'overlay.companion.thinking': 'Pensando…',
|
||
'overlay.orbTitle': 'Arrastra para mover · Doble clic para restablecer posición',
|
||
'pages.settings.account.connections': 'Conexiones',
|
||
'pages.settings.account.connectionsDesc': 'Descripción de conexiones',
|
||
'pages.settings.account.migration': 'Importar desde otro asistente',
|
||
'pages.settings.account.migrationDesc':
|
||
'Migra memoria y notas desde OpenClaw (y pronto Hermes) a este espacio de trabajo.',
|
||
'pages.settings.account.privacy': 'Privacidad',
|
||
'pages.settings.account.privacyDesc': 'Descripción de privacidad',
|
||
'pages.settings.account.recoveryPhrase': 'Frase de recuperación',
|
||
'pages.settings.account.recoveryPhraseDesc': 'Descripción de frase de recuperación',
|
||
'pages.settings.account.team': 'Equipo',
|
||
'pages.settings.account.teamDesc': 'Descripción de equipo',
|
||
'pages.settings.accountSection.description':
|
||
'Frase de recuperación, equipo, conexiones y configuración de privacidad.',
|
||
'pages.settings.accountSection.title': 'Cuenta',
|
||
'pages.settings.ai.llm': 'LLM',
|
||
'pages.settings.ai.llmDesc': 'Descripción de LLM',
|
||
'pages.settings.ai.voice': 'Voz',
|
||
'pages.settings.ai.voiceDesc': 'Descripción de voz',
|
||
'pages.settings.aiSection.description':
|
||
'Proveedores de modelos de lenguaje, Ollama local y voz (STT / TTS).',
|
||
'pages.settings.aiSection.title': 'IA',
|
||
'pages.settings.composioSection.title': 'Composio',
|
||
'pages.settings.composioSection.description':
|
||
'Enrutamiento, activadores e historial para integraciones impulsadas por Composio.',
|
||
'settings.developerMenu.composio.title': 'Composio',
|
||
'settings.developerMenu.composio.desc':
|
||
'Modo de enrutamiento, activadores de integración y archivo de historial de activadores.',
|
||
'pages.settings.features.desktopCompanion': 'Acompañante de escritorio',
|
||
'pages.settings.features.desktopCompanionDesc':
|
||
'Asistente de voz con conciencia de pantalla — escucha, ve, habla, señala',
|
||
'pages.settings.features.messagingChannels': 'Canales de mensajería',
|
||
'pages.settings.features.messagingChannelsDesc': 'Descripción de canales de mensajería',
|
||
'pages.settings.features.notifications': 'Notificaciones',
|
||
'pages.settings.features.notificationsDesc': 'Descripción de notificaciones',
|
||
'pages.settings.features.screenAwareness': 'Conciencia de pantalla',
|
||
'pages.settings.features.screenAwarenessDesc': 'Descripción de conciencia de pantalla',
|
||
'pages.settings.features.tools': 'Herramientas',
|
||
'pages.settings.features.toolsDesc': 'Descripción de herramientas',
|
||
'pages.settings.featuresSection.description':
|
||
'Conciencia de pantalla, mensajería y herramientas.',
|
||
'pages.settings.featuresSection.title': 'Funciones',
|
||
'privacy.dataKind.credentials': 'Credenciales',
|
||
'privacy.dataKind.derived': 'Derivado',
|
||
'privacy.dataKind.diagnostics': 'Diagnósticos',
|
||
'privacy.dataKind.metadata': 'Metadatos',
|
||
'privacy.dataKind.raw': 'Sin procesar',
|
||
'privacy.whatLeaves.link.label': '¿Qué sale de mi ordenador?',
|
||
'rewards.community.achievementsUnlocked': '{unlocked} de {total} logros desbloqueados',
|
||
'rewards.community.connectDiscord': 'Conectar Discord',
|
||
'rewards.community.cumulativeTokens': 'Tokens acumulados',
|
||
'rewards.community.currentStreak': 'Racha actual',
|
||
'rewards.community.discordLinkedNotInGuild': 'Discord vinculado pero no en el servidor',
|
||
'rewards.community.discordMember': 'Te uniste al servidor',
|
||
'rewards.community.discordNotLinked': 'Discord no vinculado',
|
||
'rewards.community.discordServer': 'Servidor de Discord',
|
||
'rewards.community.discordStatusUnavailable': 'Estado de Discord no disponible',
|
||
'rewards.community.discordWaiting': 'Esperando en Discord',
|
||
'rewards.community.heroSubtitle': 'Subtítulo hero',
|
||
'rewards.community.heroTitle': 'Título hero',
|
||
'rewards.community.joinDiscord': 'Unirse a Discord',
|
||
'rewards.community.loadingRewards': 'Cargando recompensas…',
|
||
'rewards.community.locked': 'Desbloqueado',
|
||
'rewards.community.retrying': 'Reintentando…',
|
||
'rewards.community.rolesAndRewards': 'Roles y recompensas',
|
||
'rewards.community.streakDays': '{n}',
|
||
'rewards.community.syncPending': 'Sincronización de recompensas pendiente',
|
||
'rewards.community.syncPendingDesc': 'Descripción de sincronización pendiente',
|
||
'rewards.community.syncUnavailable': 'Sincronización no disponible',
|
||
'rewards.community.tryAgain': 'Reintentando…',
|
||
'rewards.community.unknown': 'Desconocido',
|
||
'rewards.community.unlocked': 'Desbloqueado',
|
||
'rewards.community.yourProgress': 'Tu progreso',
|
||
'rewards.coupon.colCode': 'Código',
|
||
'rewards.coupon.colRedeemed': 'Canjeado',
|
||
'rewards.coupon.colReward': 'Recompensa',
|
||
'rewards.coupon.colStatus': 'Estado',
|
||
'rewards.coupon.loadingHistory': 'Cargando historial de recompensas…',
|
||
'rewards.coupon.noCodes': 'Aún no se han canjeado códigos de recompensa.',
|
||
'rewards.coupon.pending': 'Pendiente',
|
||
'rewards.coupon.placeholder': 'Código de cupón',
|
||
'rewards.coupon.promoCredits': 'Créditos promocionales',
|
||
'rewards.coupon.recentRedemptions': 'Canjes recientes',
|
||
'rewards.coupon.redeemAccepted':
|
||
'{code} aceptado. {amount} se desbloqueará cuando se complete la acción requerida.',
|
||
'rewards.coupon.redeemButton': 'Canjear código',
|
||
'rewards.coupon.redeemSuccess': '{code} canjeado. Se añadieron {amount} a tus créditos.',
|
||
'rewards.coupon.redeemedCodes': 'Códigos canjeados',
|
||
'rewards.coupon.redeeming': 'Canjeando...',
|
||
'rewards.coupon.statusApplied': 'Aplicado',
|
||
'rewards.coupon.statusPendingAction': 'Acción pendiente',
|
||
'rewards.coupon.statusRedeemed': 'Canjeado',
|
||
'rewards.coupon.subtitle': 'Subtítulo',
|
||
'rewards.coupon.title': 'Canjear un código de cupón',
|
||
'rewards.referralSection.activity': 'Actividad de referidos',
|
||
'rewards.referralSection.apply': 'Aplicando…',
|
||
'rewards.referralSection.applying': 'Aplicando…',
|
||
'rewards.referralSection.colReferredUser': 'Usuario referido',
|
||
'rewards.referralSection.colReward': 'Recompensa',
|
||
'rewards.referralSection.colStatus': 'Estado',
|
||
'rewards.referralSection.colUpdated': 'Actualizado',
|
||
'rewards.referralSection.completed': 'Completado',
|
||
'rewards.referralSection.copyCode': 'Copiar código',
|
||
'rewards.referralSection.copyFailed': 'Error al copiar',
|
||
'rewards.referralSection.haveCode': '¿Tienes un código de referido?',
|
||
'rewards.referralSection.haveCodeDesc': 'Descripción de código disponible',
|
||
'rewards.referralSection.linked': 'Vinculado',
|
||
'rewards.referralSection.linkedCode': '(código {code})',
|
||
'rewards.referralSection.loading': 'Cargando programa de referidos…',
|
||
'rewards.referralSection.retry': 'Reintentar',
|
||
'rewards.referralSection.noReferrals': 'Sin referidos',
|
||
'rewards.referralSection.pendingReferrals': 'Referidos pendientes',
|
||
'rewards.referralSection.placeholder': 'Código de referido',
|
||
'rewards.referralSection.share': 'Compartir',
|
||
'rewards.referralSection.statusCompleted': 'Estado: completado',
|
||
'rewards.referralSection.statusExpired': 'Estado: expirado',
|
||
'rewards.referralSection.statusJoined': 'Estado: unido',
|
||
'rewards.referralSection.subtitle': 'Subtítulo',
|
||
'rewards.referralSection.title': 'Invita amigos, gana créditos',
|
||
'rewards.referralSection.totalEarned': 'Total ganado',
|
||
'rewards.referralSection.yourCode': 'Tu código',
|
||
'settings.ai.addCloudProvider': 'Añadir proveedor en la nube',
|
||
'settings.ai.addProvider': 'Guardando…',
|
||
'settings.ai.apiKeyFieldLabel': 'Etiqueta de campo de clave API',
|
||
'settings.ai.apiKeyRequired': 'Pega tu clave API para continuar.',
|
||
'settings.ai.apiKeyStoredEncrypted': 'Clave API almacenada cifrada',
|
||
'settings.ai.apiKeysEncrypted': 'perfiles-de-autenticación.json',
|
||
'settings.ai.clearStoredKey': 'Borrar clave almacenada',
|
||
'settings.ai.connectProvider': 'Conectar proveedor',
|
||
'settings.ai.customRouting': 'Enrutamiento personalizado',
|
||
'settings.ai.defaultResolvesTo': 'El valor predeterminado se resuelve a',
|
||
'settings.ai.discard': 'Descartar',
|
||
'settings.ai.editProvider': 'Editar proveedor',
|
||
'settings.ai.llmProviders': 'Proveedores LLM',
|
||
'settings.ai.llmProvidersDesc': 'Descripción de proveedores LLM',
|
||
'settings.ai.localOllama': 'Local (Ollama)',
|
||
'settings.ai.modelLabel': 'Modelo',
|
||
'settings.ai.noCustomProviders': 'Sin proveedores personalizados',
|
||
'settings.ai.openAiCompat.authHeaderExample': 'Autorización: Portador <su clave>',
|
||
'settings.ai.openAiCompat.authHeaderLabel': 'encabezado de autenticación',
|
||
'settings.ai.openAiCompat.baseUrlLabel': 'URL base',
|
||
'settings.ai.openAiCompat.baseUrlUnavailable': 'No disponible',
|
||
'settings.ai.openAiCompat.clearKey': 'Borrar clave',
|
||
'settings.ai.openAiCompat.description':
|
||
'Señale los arneses locales en este servidor /v1 para enrutar a través de los proveedores configurados a continuación. La autenticación utiliza una clave estable que usted establece aquí, no el portador interno del núcleo de la aplicación.',
|
||
'settings.ai.openAiCompat.keyConfigured': 'Clave configurada',
|
||
'settings.ai.openAiCompat.keyRequired': 'Se requiere clave',
|
||
'settings.ai.openAiCompat.rotateKey': 'Girar clave',
|
||
'settings.ai.openAiCompat.setKey': 'Establecer clave',
|
||
'settings.ai.openAiCompat.title': 'Punto final compatible con OpenAI',
|
||
'settings.ai.providerLabel': 'Proveedor',
|
||
'skills.mcpComingSoon.title': 'MCP Servidores',
|
||
'skills.mcpComingSoon.description':
|
||
'La gestión de servidores MCP llegará pronto. Esta pestaña será el lugar para descubrir, conectar y monitorear tus integraciones de servidor MCP.',
|
||
'settings.ai.routing': 'Enrutamiento',
|
||
'settings.ai.routingCustom': 'Enrutamiento personalizado',
|
||
'settings.ai.routingDefault': 'Predeterminado',
|
||
'settings.ai.routingDesc': 'Descripción de enrutamiento',
|
||
'settings.ai.saveChanges': 'Guardando…',
|
||
'settings.ai.saving': 'Guardando…',
|
||
'settings.ai.unsavedChange': 'cambio sin guardar',
|
||
'settings.ai.unsavedChanges': 'cambios sin guardar',
|
||
'settings.ai.workloadGroupBackground': 'Grupo de carga de trabajo en segundo plano',
|
||
'settings.ai.workloadGroupChat': 'Grupo de carga de trabajo de chat',
|
||
'settings.ai.disconnectProvider': 'Desconectar {label}',
|
||
'settings.ai.connectProviderLabel': 'Conectar {label}',
|
||
'settings.ai.editProviderEndpoint': 'Editar punto de conexión de {label}',
|
||
'settings.ai.defaultLocalEndpoint': 'http://localhost:11434/v1',
|
||
'settings.ai.editEndpoint': 'Editar punto de conexión',
|
||
'settings.ai.endpointUrlLabel': 'Punto final URL',
|
||
'settings.ai.localRuntimeHelper':
|
||
'Donde {label} es accesible. Por defecto es localhost; apunte esto a un host remoto (por ejemplo, http://10.0.0.4:11434/v1) para usar una instancia compartida.',
|
||
'settings.ai.endpointUrlRequired': 'Se requiere el punto final URL.',
|
||
'settings.ai.endpointProtocolRequired': 'El punto final debe comenzar con http:// o https://.',
|
||
'settings.ai.connectProviderDialog': 'Conectar {label}',
|
||
'settings.ai.or': 'O',
|
||
'settings.ai.codexOauthMissingAuthUrl':
|
||
'Codex OAuth no devolvió una URL de autorización. Intenta iniciar sesión de nuevo.',
|
||
'settings.ai.codexOauthMissingCallbackUrl':
|
||
'Pega la URL de redirección de tu navegador después de iniciar sesión.',
|
||
'settings.ai.openRouterOauthDescription':
|
||
'Inicia sesión con OpenRouter e importa una clave API controlada por el usuario usando PKCE.',
|
||
'settings.ai.connecting': 'Conectando...',
|
||
'settings.ai.backgroundLoops': 'Bucles de fondo',
|
||
'settings.ai.backgroundLoopsDesc':
|
||
'Vea qué se ejecuta sin un mensaje de chat, pause el trabajo de latido y examine las filas recientes del libro mayor de créditos.',
|
||
'settings.ai.heartbeatControls': 'Controles de latidos del corazón',
|
||
'settings.ai.heartbeatControlsDesc':
|
||
'Predeterminado apagado. Activar inicia el bucle; desactivar aborta la tarea en ejecución.',
|
||
'settings.ai.heartbeatLoop': 'Bucle de latidos del corazón',
|
||
'settings.ai.heartbeatLoopDesc':
|
||
'Programador maestro para planificador + inferencia subconsciente opcional.',
|
||
'settings.ai.subconsciousInference': 'inferencia subconsciente',
|
||
'settings.ai.subconsciousInferenceDesc':
|
||
'Ejecuta la evaluación task/reflection respaldada por modelo en los latidos del corazón.',
|
||
'settings.ai.calendarMeetingChecks': 'Verificaciones de reuniones del calendario',
|
||
'settings.ai.calendarMeetingChecksDesc':
|
||
'Llama a la lista de eventos del calendario para conexiones de calendario Google activas.',
|
||
'settings.ai.calendarCap': 'tapa del calendario',
|
||
'settings.ai.connectionsPerTick': '{count} conexión/tick',
|
||
'settings.ai.meetingLookahead': 'Reunión anticipada',
|
||
'settings.ai.minutesShort': '{count} min',
|
||
'settings.ai.reminderLookahead': 'Recordatorio anticipado',
|
||
'settings.ai.cronReminderChecks': 'Comprobaciones de recordatorio cron',
|
||
'settings.ai.cronReminderChecksDesc':
|
||
'Analiza los trabajos cron habilitados para elementos próximos similares a recordatorios.',
|
||
'settings.ai.relevantNotificationChecks': 'Comprobaciones de notificaciones relevantes',
|
||
'settings.ai.relevantNotificationChecksDesc':
|
||
'Promueve las notificaciones locales urgentes en alertas proactivas.',
|
||
'settings.ai.externalDelivery': 'Entrega externa',
|
||
'settings.ai.externalDeliveryDesc':
|
||
'Permite que las alertas de latido envíen mensajes proactivos a canales externos.',
|
||
'settings.ai.interval': 'Intervalo',
|
||
'settings.ai.running': 'Corriendo...',
|
||
'settings.ai.plannerTickNow': 'Planificador marca ahora',
|
||
'settings.ai.loadingHeartbeatControls': 'Cargando controles de latidos...',
|
||
'settings.ai.heartbeatControlsUnavailable': 'Los controles de latidos no están disponibles.',
|
||
'settings.ai.loopMap': 'Mapa de bucle',
|
||
'settings.ai.plannerSummary':
|
||
'Planificador: {sourceEvents} eventos de origen, {sent} enviados, {deduped} deduplicados.',
|
||
'settings.ai.routeLabel': 'ruta: {route}',
|
||
'settings.ai.on': 'en',
|
||
'settings.ai.off': 'apagado',
|
||
'settings.ai.recentUsageLedger': 'Libro mayor de uso reciente',
|
||
'settings.ai.recentUsageLedgerDesc':
|
||
'Las filas del backend exponen action/time hoy; las etiquetas de origen necesitan soporte del backend.',
|
||
'settings.ai.latestSpend': 'Último gasto: {amount} en {time} ({action})',
|
||
'settings.ai.topActions': 'Acciones principales',
|
||
'settings.ai.noSpendRows': 'No se han cargado filas de gastos.',
|
||
'settings.ai.topHours': 'Horas principales',
|
||
'settings.ai.noHourlySpend': 'Aún no hay gasto por horas.',
|
||
'settings.ai.openhumanDefault': 'OpenHuman (predeterminado)',
|
||
'settings.ai.localModelResolved': 'Ollama · {model}',
|
||
'settings.ai.customRoutingForWorkload': 'Ruta personalizada para {label}',
|
||
'settings.ai.loadingModels': 'Cargando modelos...',
|
||
'settings.ai.enterModelIdManually': 'o ingrese la identificación del modelo manualmente:',
|
||
'settings.ai.modelIdPlaceholderForProvider': '{slug} identificación del modelo',
|
||
'settings.ai.modelIdPlaceholder': 'model-id',
|
||
'settings.ai.selectModel': 'Seleccione un modelo...',
|
||
'settings.ai.temperatureOverride': 'Anulación de temperatura',
|
||
'settings.ai.temperatureOverrideSlider': 'Anulación de temperatura (control deslizante)',
|
||
'settings.ai.temperatureOverrideValue': 'Anulación de temperatura (valor)',
|
||
'settings.ai.temperatureOverrideDesc':
|
||
'Más bajo = más determinista. Déjelo sin marcar para usar el valor predeterminado del proveedor.',
|
||
'settings.ai.testFailed': 'Prueba fallida',
|
||
'settings.ai.testingModel': 'Modelo de prueba...',
|
||
'settings.ai.modelResponse': 'Respuesta modelo',
|
||
'settings.ai.providerWithValue': 'Proveedor: {value}',
|
||
'settings.ai.noneDash': '—',
|
||
'settings.ai.promptHelloWorld': 'Mensaje: Hola mundo',
|
||
'settings.ai.startedAt': 'Iniciado: {value}',
|
||
'settings.ai.waitingForModelResponse': 'Esperando respuesta del modelo seleccionado...',
|
||
'settings.ai.response': 'Respuesta',
|
||
'settings.ai.testing': 'Probando...',
|
||
'settings.ai.test': 'prueba',
|
||
'settings.ai.slugMissingError': 'Ingrese el nombre de un proveedor para generar un slug.',
|
||
'settings.ai.slugInUseError': 'Ese nombre de proveedor ya está en uso.',
|
||
'settings.ai.slugReservedError': 'Elija un nombre de proveedor diferente.',
|
||
'settings.ai.providerNamePlaceholder': 'Mi proveedor',
|
||
'settings.ai.slugLabel': 'Babosa:',
|
||
'settings.ai.openAiUrlLabel': 'URL de OpenAI',
|
||
'settings.ai.openAiUrlPlaceholder': 'https://api.openai.com/v1',
|
||
'settings.ai.keepExistingKeyPlaceholder': 'Déjelo en blanco para conservar la clave existente',
|
||
'settings.ai.reindexingMemory': 'Memoria de reindexación',
|
||
'settings.ai.reindexingMemoryMessage':
|
||
'Los embeddings están siendo reprocesados. El(los) elemento(s) de memoria {pending} están siendo re-embebidos bajo el modelo actual; la recuperación semántica se reduce hasta que esto termine. La búsqueda por palabras clave sigue funcionando, y el re-embedding continúa en segundo plano si cierras esto.',
|
||
'settings.ai.signInWithOpenRouter': 'Iniciar sesión con OpenRouter',
|
||
'settings.ai.weekBudget': 'Presupuesto semanal',
|
||
'settings.ai.cycleRemaining': 'Ciclo restante',
|
||
'settings.ai.cycleTotalSpend': 'Gasto total del ciclo',
|
||
'settings.ai.avgSpendRow': 'Fila de gasto medio',
|
||
'settings.ai.backgroundApiReads': 'Bg API lee',
|
||
'settings.ai.backgroundWakeups': 'Bg despertares',
|
||
'settings.ai.budgetMath': 'Matemáticas presupuestarias',
|
||
'settings.ai.rowsLeft': 'Filas restantes',
|
||
'settings.ai.rowsPerFullWeekBudget': 'Presupuesto de filas por semana completa',
|
||
'settings.ai.sampleBurnRate': 'Tasa de grabación de muestras',
|
||
'settings.ai.projectedEmpty': 'vacío proyectado',
|
||
'settings.ai.apiReadsPerDollarRemaining': 'API lecturas por $ restantes',
|
||
'settings.ai.loopCallBudget': 'Presupuesto de llamadas en bucle',
|
||
'settings.ai.heartbeatTicks': 'Latidos del corazón',
|
||
'settings.ai.calendarPlannerCalls': 'Llamadas del planificador de calendario',
|
||
'settings.ai.calendarFanoutCap': 'Tapa de distribución del calendario',
|
||
'settings.ai.subconsciousModelCalls': 'Llamadas del modelo subconsciente',
|
||
'settings.ai.composioSyncScans': 'Composio escaneos de sincronización',
|
||
'settings.ai.totalBackgroundApiReadBudget': 'Total bg API leer presupuesto',
|
||
'settings.ai.memoryWorkerPolls': 'Encuestas de trabajadores de la memoria',
|
||
'settings.ai.defaultProviderName': 'OpenHuman',
|
||
'settings.ai.routing.managed': 'Gestionado',
|
||
'settings.ai.routing.managedDesc':
|
||
'OpenHuman ejecutará toda la inferencia en la nube, elegirá el mejor modelo para la tarea, optimizará para el costo y mantendrá los valores predeterminados de enrutamiento más seguros.',
|
||
'settings.ai.routing.managedMsg':
|
||
'OpenHuman manejará toda la inferencia para cada carga de trabajo y elegirá automáticamente la mejor ruta para costo, calidad y seguridad.',
|
||
'settings.ai.routing.useYourOwn': 'Utilice sus propios modelos',
|
||
'settings.ai.routing.useYourOwnDesc':
|
||
'Elige un proveedor + modelo y dirige todas las cargas de trabajo a través de él. Esto es simple, pero puede ser ineficiente porque la inferencia ligera y la pesada comparten la misma ruta.',
|
||
'settings.ai.routing.advanced': 'Avanzado',
|
||
'settings.ai.routing.advancedDesc':
|
||
'Elige diferentes modelos para diferentes tareas. Esta es la mejor opción para una optimización estricta de costos y el mayor control.',
|
||
'settings.ai.routing.customDesc':
|
||
'El enrutamiento detallado te ofrece la mejor optimización de costos y el mayor control. Usa las filas a continuación para decidir qué cargas de trabajo permanecen gestionadas, cuáles usan tu valor predeterminado compartido y cuáles se asignan a un modelo específico.',
|
||
'settings.ai.routing.chatAndConversations': 'Chat y conversaciones',
|
||
'settings.ai.routing.chatDesc':
|
||
'Modelos utilizados durante la interacción directa con el usuario, respuestas, razonamiento, bucles de agentes y ayuda en programación.',
|
||
'settings.ai.routing.backgroundTasks': 'Tareas en segundo plano',
|
||
'settings.ai.routing.bgTasksDesc':
|
||
'Modelos utilizados fuera del flujo principal de la conversación para resumen, latido, aprendizaje y evaluación subconsciente.',
|
||
'settings.ai.routing.addCustomProvider': 'Agregar proveedor personalizado',
|
||
'settings.ai.globalModel.title': 'Elige un modelo para todo',
|
||
'settings.ai.globalModel.desc':
|
||
'Esto dirige toda la inferencia a través de un modelo. Es más sencillo, pero puede ser ineficiente en cuanto a costo y calidad porque las tareas ligeras y pesadas usarán la misma ruta.',
|
||
'settings.ai.globalModel.noProviders':
|
||
'Agrega o conecta un proveedor primero. Luego puedes enrutar cada carga de trabajo a través de un modelo aquí.',
|
||
'settings.ai.globalModel.provider': 'Proveedor',
|
||
'settings.ai.globalModel.model': 'modelo',
|
||
'settings.ai.globalModel.loadingModels': 'Cargando modelos…',
|
||
'settings.ai.globalModel.enterModelId': 'Ingrese la identificación del modelo',
|
||
'settings.ai.globalModel.appliesToAll':
|
||
'Aplica el mismo proveedor + modelo a chat, razonamiento, codificación, memoria, latido, aprendizaje y subconsciente. Los embeddings se configuran por separado. Los cambios se guardan cuando haces clic en guardar.',
|
||
'settings.ai.globalModel.saving': 'Guardando…',
|
||
'settings.ai.globalModel.saved': 'Guardado',
|
||
'settings.ai.workload.noModel': 'Ningún modelo seleccionado',
|
||
'settings.ai.workload.changeModel': 'Cambiar modelo',
|
||
'settings.ai.workload.chooseModel': 'Elige modelo',
|
||
'settings.ai.provider.ollama': 'Ollama',
|
||
'settings.autocomplete.appFilter.acceptSuggestion': 'Aceptar sugerencia',
|
||
'settings.autocomplete.appFilter.app': 'Aplicación',
|
||
'settings.autocomplete.appFilter.currentSuggestion': 'Sugerencia actual',
|
||
'settings.autocomplete.appFilter.contextOverride': 'Anulación de contexto (opcional)',
|
||
'settings.autocomplete.appFilter.debounce': 'rebote',
|
||
'settings.autocomplete.appFilter.debugFocus': 'Foco de depuración',
|
||
'settings.autocomplete.appFilter.enabled': 'Habilitado',
|
||
'settings.autocomplete.appFilter.getSuggestion': 'Obtener sugerencia',
|
||
'settings.autocomplete.appFilter.lastError': 'último error',
|
||
'settings.autocomplete.appFilter.liveLogs': 'Registros en vivo',
|
||
'settings.autocomplete.appFilter.model': 'modelo',
|
||
'settings.autocomplete.appFilter.noLogs': '):',
|
||
'settings.autocomplete.appFilter.phase': 'Fase',
|
||
'settings.autocomplete.appFilter.platformSupported': 'Plataforma compatible',
|
||
'settings.autocomplete.appFilter.refreshStatus': 'Actualizando…',
|
||
'settings.autocomplete.appFilter.refreshing': 'Actualizando…',
|
||
'settings.autocomplete.appFilter.running': 'corriendo',
|
||
'settings.autocomplete.appFilter.runtime': 'Tiempo de ejecución',
|
||
'settings.autocomplete.appFilter.test': 'Probar',
|
||
'settings.autocomplete.completionStyle.acceptedCompletion':
|
||
'{count} completado aceptado almacenado — se usa para personalizar futuras sugerencias.',
|
||
'settings.autocomplete.completionStyle.acceptedCompletions':
|
||
'{count} completados aceptados almacenados — se usan para personalizar futuras sugerencias.',
|
||
'settings.autocomplete.completionStyle.clearHistory': 'Limpiando…',
|
||
'settings.autocomplete.completionStyle.clearing': 'Limpiando…',
|
||
'settings.autocomplete.completionStyle.debounce': 'Rebote (ms)',
|
||
'settings.autocomplete.completionStyle.enabled': 'Activado',
|
||
'settings.autocomplete.completionStyle.maxChars': 'Máx. caracteres',
|
||
'settings.autocomplete.completionStyle.noHistory':
|
||
'Sin completados aceptados aún. Acepta sugerencias con Tab para empezar a personalizar.',
|
||
'settings.autocomplete.completionStyle.overlayTtl': 'TTL de overlay (ms)',
|
||
'settings.autocomplete.completionStyle.personalizationHistory': 'Historial de personalización',
|
||
'settings.autocomplete.completionStyle.styleExamples': 'Ejemplos de estilo (uno por línea)',
|
||
'settings.autocomplete.completionStyle.styleInstructions': 'Instrucciones de estilo',
|
||
'settings.autocomplete.debug.acceptedPrefix': 'Aceptado: {value}',
|
||
'settings.autocomplete.debug.acceptFailed': 'No se pudo aceptar la sugerencia',
|
||
'settings.autocomplete.debug.alreadyRunning':
|
||
'La función de autocompletar ya se está ejecutando.',
|
||
'settings.autocomplete.debug.clearHistoryFailed': 'No se pudo borrar el historial',
|
||
'settings.autocomplete.debug.didNotStart': 'La función de autocompletar no se inició.',
|
||
'settings.autocomplete.debug.disabledInSettings':
|
||
'Autocompletar está deshabilitado en la configuración. Habilítelo y guarde primero.',
|
||
'settings.autocomplete.debug.fetchSuggestionFailed': 'No se pudo recuperar la sugerencia actual',
|
||
'settings.autocomplete.debug.inspectFocusedElementFailed':
|
||
'No se pudo inspeccionar el elemento enfocado',
|
||
'settings.autocomplete.debug.loadSettingsFailed':
|
||
'No se pudo cargar la configuración de autocompletar',
|
||
'settings.autocomplete.debug.noSuggestionApplied': 'No se aplicó ninguna sugerencia.',
|
||
'settings.autocomplete.debug.noSuggestionReturned': 'No se devolvió ninguna sugerencia.',
|
||
'settings.autocomplete.debug.refreshStatusFailed':
|
||
'No se pudo actualizar el estado de autocompletar',
|
||
'settings.autocomplete.debug.saveAdvancedSettingsFailed':
|
||
'No se pudo guardar la configuración avanzada',
|
||
'settings.autocomplete.debug.startFailed': 'No se pudo iniciar el autocompletado',
|
||
'settings.autocomplete.debug.stopFailed': 'No se pudo detener el autocompletado',
|
||
'settings.autocomplete.debug.suggestionPrefix': 'Sugerencia: {value}',
|
||
'settings.autocomplete.shared.none': 'Ninguno',
|
||
'settings.autocomplete.shared.notApplicable': 'n/a',
|
||
'settings.autocomplete.shared.unknown': 'Desconocido',
|
||
'settings.billing.autoRecharge.addAmount': 'Agregar esta cantidad',
|
||
'settings.billing.autoRecharge.addCard': 'Agregar tarjeta',
|
||
'settings.billing.autoRecharge.amountHint': 'Sugerencia de cantidad',
|
||
'settings.billing.autoRecharge.defaultCard': 'Tarjeta predeterminada',
|
||
'settings.billing.autoRecharge.lastRechargeFailed': 'Última recarga fallida',
|
||
'settings.billing.autoRecharge.lastRecharged': 'Última recarga',
|
||
'settings.billing.autoRecharge.expires': 'Vence {date}',
|
||
'settings.billing.autoRecharge.noCards': 'Sin tarjetas',
|
||
'settings.billing.autoRecharge.paymentMethods': 'Métodos de pago',
|
||
'settings.billing.autoRecharge.rechargeInProgress': 'Recarga en progreso',
|
||
'settings.billing.autoRecharge.spentThisWeek': '${spent} de ${limit} usados esta semana',
|
||
'settings.billing.autoRecharge.rechargeWhen': 'Recargar cuando el saldo caiga por debajo de',
|
||
'settings.billing.autoRecharge.saveSettings': 'Guardando…',
|
||
'settings.billing.autoRecharge.saving': 'Guardando…',
|
||
'settings.billing.autoRecharge.setDefault': ':',
|
||
'settings.billing.autoRecharge.subtitle': 'Subtítulo',
|
||
'settings.billing.autoRecharge.title': 'Activar recarga automática',
|
||
'settings.billing.autoRecharge.toggleAriaLabel': 'Activar/desactivar recarga automática',
|
||
'settings.billing.autoRecharge.weeklyLimit': 'Límite de gasto semanal',
|
||
'settings.billing.history.desc': 'Descripción',
|
||
'settings.billing.history.empty': 'Vacío',
|
||
'settings.billing.history.openPortal': 'Abrir portal',
|
||
'settings.billing.history.posted': 'Publicado',
|
||
'settings.billing.history.title': 'Título',
|
||
'settings.billing.inferenceBudget.cycleEnds': 'El ciclo termina',
|
||
'settings.billing.inferenceBudget.exhausted': 'Agotado',
|
||
'settings.billing.inferenceBudget.loadError': 'Error de carga',
|
||
'settings.billing.inferenceBudget.noBudgetDesc': 'Sin descripción de presupuesto',
|
||
'settings.billing.inferenceBudget.noRecurringBudget': 'Sin presupuesto recurrente',
|
||
'settings.billing.inferenceBudget.noRecurringPlanBudget': 'Sin presupuesto de plan recurrente',
|
||
'settings.billing.inferenceBudget.noRecurringWeeklyDesc':
|
||
'Su plan actual no incluye un presupuesto semanal recurrente para inferencias. En su lugar, el uso se paga con los créditos disponibles.',
|
||
'settings.billing.inferenceBudget.remaining': 'Restante',
|
||
'settings.billing.inferenceBudget.remainingSummary': '{remaining} / {budget} restante',
|
||
'settings.billing.inferenceBudget.spentThisCycle': 'Pasé {amount} este ciclo',
|
||
'settings.billing.inferenceBudget.cycleEndsOn': 'El ciclo termina {date}',
|
||
'settings.billing.inferenceBudget.exhaustedDesc':
|
||
'El uso de la suscripción incluida se ha agotado. Recarga créditos para seguir usando AI sin esperar al próximo ciclo.',
|
||
'settings.billing.inferenceBudget.discountVsPayg':
|
||
'{pct}% más barato por llamada que pagar por uso.',
|
||
'settings.billing.inferenceBudget.cycleSpend': 'Gasto en ciclo',
|
||
'settings.billing.inferenceBudget.totalAmount': '{amount} en total',
|
||
'settings.billing.inferenceBudget.inference': 'Inferencia',
|
||
'settings.billing.inferenceBudget.integrations': 'Integraciones',
|
||
'settings.billing.inferenceBudget.calls': '{count} llamadas',
|
||
'settings.billing.inferenceBudget.dailySpend': 'Gasto diario',
|
||
'settings.billing.inferenceBudget.dailySpendPoint': '{date}: {amount}',
|
||
'settings.billing.inferenceBudget.topModels': 'Mejores modelos',
|
||
'settings.billing.inferenceBudget.noInferenceUsage': 'No se utilizan inferencias en este ciclo.',
|
||
'settings.billing.inferenceBudget.topIntegrations': 'Principales integraciones',
|
||
'settings.billing.inferenceBudget.noIntegrationUsage': 'No hay uso de integración en este ciclo.',
|
||
'settings.billing.inferenceBudget.tenHourCap': 'Límite de diez horas',
|
||
'settings.billing.inferenceBudget.title': 'Título',
|
||
'settings.billing.inferenceBudget.unableToLoad': 'No se pueden cargar datos de uso',
|
||
'settings.billing.inferenceBudget.notAvailable': 'n/a',
|
||
'settings.billing.payAsYouGo.available': 'Disponible',
|
||
'settings.billing.payAsYouGo.chargeCustomAmount': 'Abriendo…',
|
||
'settings.billing.payAsYouGo.chooseTopUpDesc': 'Descripción de recarga',
|
||
'settings.billing.payAsYouGo.chooseTopUpTitle': 'Título de recarga',
|
||
'settings.billing.payAsYouGo.creditBalanceDesc': 'Descripción de saldo de crédito',
|
||
'settings.billing.payAsYouGo.creditBalanceTitle': 'Título de saldo de crédito',
|
||
'settings.billing.payAsYouGo.customAmount': 'Cantidad personalizada',
|
||
'settings.billing.payAsYouGo.enterAmount': 'Ingresar cantidad',
|
||
'settings.billing.payAsYouGo.opening': 'Abriendo',
|
||
'settings.billing.payAsYouGo.promotionalCredits': 'Créditos promocionales',
|
||
'settings.billing.payAsYouGo.topUpBalance': 'Recargar saldo',
|
||
'settings.billing.payAsYouGo.topUpCredits': 'Recargar créditos',
|
||
'settings.billing.payAsYouGo.unableToLoad': 'No se pudo cargar el saldo.',
|
||
'settings.billing.subscription.annual': 'Anual',
|
||
'settings.billing.subscription.billedAnnually': 'Facturado anualmente',
|
||
'settings.billing.subscription.chooseSubtitle': 'Elegir subtítulo',
|
||
'settings.billing.subscription.chooseTitle': 'Elegir título',
|
||
'settings.billing.subscription.cryptoDesc': 'Descripción de cripto',
|
||
'settings.billing.subscription.cryptoQuestion': 'Pregunta de cripto',
|
||
'settings.billing.subscription.current': 'Actual',
|
||
'settings.billing.subscription.currentPlan': 'Plan actual',
|
||
'settings.billing.subscription.monthly': 'Mensual',
|
||
'settings.billing.subscription.paymentConfirmed': 'Pago confirmado',
|
||
'settings.billing.subscription.perMonth': 'Por mes',
|
||
'settings.billing.subscription.popular': 'populares',
|
||
'settings.billing.subscription.save': '{pct}',
|
||
'settings.billing.subscription.upgrade': 'Mejorar plan',
|
||
'settings.billing.subscription.waiting': 'Esperando',
|
||
'settings.billing.subscription.waitingPayment': 'Esperando pago',
|
||
'settings.composio.apiKeyDesc':
|
||
'Actualmente hay una clave API de Composio almacenada en este dispositivo.',
|
||
'settings.composio.apiKeyExamplePlaceholder': 'ck_live_xxxxxxxxxxxxxxxx',
|
||
'settings.composio.apiKeyLabel': 'Clave API de Composio',
|
||
'settings.composio.apiKeyStored': 'Clave API almacenada',
|
||
'settings.composio.apiKeyStoredPlaceholder': '••••••••••••••••',
|
||
'settings.composio.clearedToBackend': 'Cambiado al modo Backend',
|
||
'settings.composio.confirmItem1': 'Una cuenta en app.composio.dev con una clave API',
|
||
'settings.composio.confirmItem2':
|
||
'Vuelve a vincular cada integración a través de tu cuenta personal de Composio',
|
||
'settings.composio.confirmItem3':
|
||
'Nota: los triggers de Composio (webhooks en tiempo real) aún no funcionan en modo Directo — solo las llamadas de herramientas síncronas',
|
||
'settings.composio.confirmNeedItems': 'Necesitarás:',
|
||
'settings.composio.confirmSwitch': 'Entiendo, cambiar a Directo',
|
||
'settings.composio.confirmTitle': '⚠️ Cambiando a modo Directo',
|
||
'settings.composio.confirmWarning':
|
||
'Tus integraciones existentes (Gmail, Slack, GitHub, etc. vinculadas a través de OpenHuman) no serán visibles — viven en el inquilino de Composio gestionado por OpenHuman.',
|
||
'settings.composio.intro':
|
||
'Composio integra más de 250 aplicaciones externas como herramientas que tu agente puede invocar. Elige cómo se enrutan esas llamadas.',
|
||
'settings.composio.title': 'Composio',
|
||
'settings.composio.modeDirect': 'Directo (usa tu propia clave API)',
|
||
'settings.composio.modeDirectDesc':
|
||
'Las llamadas van directamente a backend.composio.dev. Soberano / amigable con uso sin conexión. La ejecución de herramientas funciona de forma síncrona; los webhooks de triggers en tiempo real aún no están enrutados en modo directo (incidencia pendiente).',
|
||
'settings.composio.modeManaged': 'Gestionado (OpenHuman lo maneja por ti)',
|
||
'settings.composio.modeManagedDesc':
|
||
'OpenHuman canaliza las llamadas de herramientas a través de nuestro backend (recomendado). La autenticación se intermedia; nunca pegas una clave API de Composio. Los webhooks están totalmente enrutados.',
|
||
'settings.composio.routingMode': 'Modo de enrutamiento',
|
||
'settings.composio.saveErrorNoKey':
|
||
'Error al guardar. El modo Directo requiere una clave API no vacía.',
|
||
'settings.composio.saving': 'Guardando…',
|
||
'settings.composio.switching': 'Cambiando…',
|
||
'settings.companion.title': 'Compañero de escritorio',
|
||
'settings.companion.session': 'Sesión',
|
||
'settings.companion.activeLabel': 'Activo',
|
||
'settings.companion.inactiveStatus': 'Inactivo',
|
||
'settings.companion.stopping': 'Parando…',
|
||
'settings.companion.stopSession': 'Detener sesión',
|
||
'settings.companion.starting': 'Empezando…',
|
||
'settings.companion.startSession': 'Iniciar sesión',
|
||
'settings.companion.sessionId': 'ID de sesión',
|
||
'settings.companion.turns': 'vueltas',
|
||
'settings.companion.remaining': 'restante',
|
||
'settings.companion.configuration': 'Configuración',
|
||
'settings.companion.hotkey': 'tecla de acceso rápido',
|
||
'settings.companion.activationMode': 'Modo de activación',
|
||
'settings.companion.sessionTtl': 'TTL de sesión',
|
||
'settings.companion.screenCapture': 'Captura de pantalla',
|
||
'settings.companion.appContext': 'Contexto de la aplicación',
|
||
'settings.cron.jobs.commandRequired': 'El comando es obligatorio para los trabajos de shell',
|
||
'settings.cron.jobs.createJob': 'Nuevo trabajo programado',
|
||
'settings.cron.jobs.created': 'Trabajo creado',
|
||
'settings.cron.jobs.custom': 'Personalizado',
|
||
'settings.cron.jobs.desc': 'Descripción',
|
||
'settings.cron.jobs.edit': 'Editar',
|
||
'settings.cron.jobs.editJob': 'Editar trabajo programado',
|
||
'settings.cron.jobs.empty': 'No se encontraron tareas cron del core.',
|
||
'settings.cron.jobs.errorCreate': 'No se pudo crear el trabajo cron: {message}',
|
||
'settings.cron.jobs.errorLoadList':
|
||
'No se pudieron cargar los trabajos cron del núcleo: {message}',
|
||
'settings.cron.jobs.errorLoadRuns': 'No se pudo cargar el historial de ejecuciones: {message}',
|
||
'settings.cron.jobs.errorRemove': 'No se pudo eliminar el trabajo cron del núcleo: {message}',
|
||
'settings.cron.jobs.errorRun': 'No se pudo ejecutar el trabajo cron del núcleo: {message}',
|
||
'settings.cron.jobs.errorToggle': 'No se pudo actualizar el trabajo cron del núcleo: {message}',
|
||
'settings.cron.jobs.errorUpdate': 'No se pudo actualizar el trabajo cron: {message}',
|
||
'settings.cron.jobs.formAtLabel': 'Ejecutar a las',
|
||
'settings.cron.jobs.formCancel': 'Cancelar',
|
||
'settings.cron.jobs.formCommand': 'Comando de shell',
|
||
'settings.cron.jobs.formCommandPlaceholder': 'p. ej. curl https://example.com/health',
|
||
'settings.cron.jobs.formCreate': 'Crear',
|
||
'settings.cron.jobs.formCronCustom': 'Expresión personalizada',
|
||
'settings.cron.jobs.formCronCustomPlaceholder': 'p. ej. */30 * * * *',
|
||
'settings.cron.jobs.formCronPreset': 'Predefinido',
|
||
'settings.cron.jobs.formCronPreview': 'Ejecuciones: {preview}',
|
||
'settings.cron.jobs.formDeleteAfterRun': 'Eliminar tras la primera ejecución',
|
||
'settings.cron.jobs.formDelivery': 'Modo de entrega',
|
||
'settings.cron.jobs.formDeliveryNone': 'Ninguno (solo salida)',
|
||
'settings.cron.jobs.formDeliveryProactive': 'Proactivo (notificación push)',
|
||
'settings.cron.jobs.formError': 'No se pudo guardar el trabajo',
|
||
'settings.cron.jobs.formEveryLabel': 'Intervalo (milisegundos)',
|
||
'settings.cron.jobs.formEveryPlaceholder': 'p. ej. 3600000',
|
||
'settings.cron.jobs.formJobType': 'Tipo de trabajo',
|
||
'settings.cron.jobs.formJobTypeAgent': 'Agent (instrucción de IA)',
|
||
'settings.cron.jobs.formJobTypeShell': 'Comando de shell',
|
||
'settings.cron.jobs.formName': 'Nombre del trabajo',
|
||
'settings.cron.jobs.formNamePlaceholder': 'p. ej. daily-report, cleanup-task',
|
||
'settings.cron.jobs.formPrompt': 'Instrucción del agente',
|
||
'settings.cron.jobs.formPromptPlaceholder': '¿Qué debe hacer el agente en cada ejecución?',
|
||
'settings.cron.jobs.formPromptRequired':
|
||
'La instrucción es obligatoria para los trabajos de agente',
|
||
'settings.cron.jobs.formSave': 'Guardar',
|
||
'settings.cron.jobs.formSaving': 'Guardando…',
|
||
'settings.cron.jobs.formScheduleAt': 'Una sola vez (ejecutar a las)',
|
||
'settings.cron.jobs.formScheduleCron': 'Recurrente (cron)',
|
||
'settings.cron.jobs.formScheduleEvery': 'Intervalo (cada N ms)',
|
||
'settings.cron.jobs.formScheduleRequired': 'La programación es obligatoria',
|
||
'settings.cron.jobs.formScheduleType': 'Tipo de programación',
|
||
'settings.cron.jobs.formSessionIsolated': 'Aislada (recomendado)',
|
||
'settings.cron.jobs.formSessionMain': 'Sesión principal',
|
||
'settings.cron.jobs.formSessionTarget': 'Sesión de destino',
|
||
'settings.cron.jobs.lastStatus': 'Último estado',
|
||
'settings.cron.jobs.loading': 'Cargando tareas cron...',
|
||
'settings.cron.jobs.loadingRuns': 'Cargando ejecuciones',
|
||
'settings.cron.jobs.nextRun': 'Próxima ejecución',
|
||
'settings.cron.jobs.pause': 'Pausar',
|
||
'settings.cron.jobs.paused': 'Pausado',
|
||
'settings.cron.jobs.recentRuns': 'Ejecuciones recientes',
|
||
'settings.cron.jobs.removing': 'Eliminando',
|
||
'settings.cron.jobs.resume': 'Reanudar',
|
||
'settings.cron.jobs.runningNow': 'Ejecutando ahora',
|
||
'settings.cron.jobs.saving': 'Guardando…',
|
||
'settings.cron.jobs.schedule': 'Programación',
|
||
'settings.cron.jobs.title': 'Tareas cron del core',
|
||
'settings.cron.jobs.updated': 'Trabajo actualizado',
|
||
'settings.cron.jobs.viewRuns': 'Ver ejecuciones',
|
||
'settings.cron.schedule.every2hours': 'Cada 2 horas',
|
||
'settings.cron.schedule.every30min': 'Cada 30 minutos',
|
||
'settings.cron.schedule.every6hours': 'Cada 6 horas',
|
||
'settings.cron.schedule.everyHour': 'Cada hora',
|
||
'settings.cron.schedule.onceDaily': 'Una vez al día (9 a. m.)',
|
||
'settings.localModel.deviceCapability.active': 'Activo',
|
||
'settings.localModel.deviceCapability.appliedTier': 'Nivel aplicado',
|
||
'settings.localModel.deviceCapability.applying': 'Aplicando',
|
||
'settings.localModel.deviceCapability.cores': '{count}',
|
||
'settings.localModel.deviceCapability.couldNotLoadPresets': 'No se pudieron cargar los presets',
|
||
'settings.localModel.deviceCapability.cpu': 'CPU',
|
||
'settings.localModel.deviceCapability.customModelIds': 'IDs de modelos personalizados',
|
||
'settings.localModel.deviceCapability.detected': 'Detectado',
|
||
'settings.localModel.deviceCapability.disabled': 'Desactivado',
|
||
'settings.localModel.deviceCapability.disabledDesc': 'Descripción de desactivado',
|
||
'settings.localModel.deviceCapability.downloadingModels': '(descargando modelos)',
|
||
'settings.localModel.deviceCapability.downloadingSetupDesc':
|
||
'Descargando el instalador de OllamaSetup (~2 GB) y descomprimiéndolo. Esto puede tardar un minuto en la primera instalación.',
|
||
'settings.localModel.deviceCapability.failedToApplyPreset': 'No se pudo aplicar el preset',
|
||
'settings.localModel.deviceCapability.gpu': 'GPU',
|
||
'settings.localModel.deviceCapability.installFailed': 'Instalación de Ollama fallida',
|
||
'settings.localModel.deviceCapability.installFailedDesc':
|
||
'El instalador terminó antes de que Ollama estuviera disponible. Haz clic en reintentar o instálalo manualmente desde ollama.com.',
|
||
'settings.localModel.deviceCapability.installFirst': 'Ejecuta Ollama primero.',
|
||
'settings.localModel.deviceCapability.installFirstDesc':
|
||
'Los niveles locales dependen de un endpoint de Ollama gestionado externamente. Inícialo tú mismo, descarga los modelos que quieras y sigue usando "Desactivado (respaldo en la nube)" hasta que el runtime sea accesible.',
|
||
'settings.localModel.deviceCapability.installOllamaFirst':
|
||
'Ejecuta Ollama primero para usar este nivel',
|
||
'settings.localModel.deviceCapability.installingOllama': 'Instalando Ollama',
|
||
'settings.localModel.deviceCapability.loadingDeviceInfo': 'Cargando info del dispositivo',
|
||
'settings.localModel.deviceCapability.localAiDisabled':
|
||
'IA local desactivada — usando respaldo en la nube.',
|
||
'settings.localModel.deviceCapability.modelTier': 'Nivel de modelo',
|
||
'settings.localModel.deviceCapability.needsOllama': 'Necesita Ollama',
|
||
'settings.localModel.deviceCapability.notDetected': 'No detectado',
|
||
'settings.localModel.deviceCapability.disabledLowercase': 'discapacitado',
|
||
'settings.localModel.deviceCapability.presetDetails':
|
||
'Chat: {chatModel} · Visión: {visionModel} · RAM objetivo: {targetRamGb} GB',
|
||
'settings.localModel.deviceCapability.ram': 'RAM',
|
||
'settings.localModel.deviceCapability.recommended': 'Recomendado',
|
||
'settings.localModel.deviceCapability.retryInstall': 'Reintentando…',
|
||
'settings.localModel.deviceCapability.retrying': 'Reintentando…',
|
||
'settings.localModel.deviceCapability.starting': 'Iniciando…',
|
||
'settings.localModel.download.audioPathPlaceholder': 'Ruta absoluta al archivo de audio',
|
||
'settings.localModel.download.capabilityChat': 'Charla',
|
||
'settings.localModel.download.capabilityEmbedding': 'Incrustar',
|
||
'settings.localModel.download.capabilityAssets': 'Activos de capacidad',
|
||
'settings.localModel.download.capabilityStt': 'STT',
|
||
'settings.localModel.download.capabilityTts': 'TTS',
|
||
'settings.localModel.download.capabilityVision': 'Visión',
|
||
'settings.localModel.download.downloading': 'Descargando...',
|
||
'settings.localModel.download.embeddingDimensions': 'Dimensiones: {dimensions}',
|
||
'settings.localModel.download.embeddingModel': 'Modelo: {modelId}',
|
||
'settings.localModel.download.embeddingPlaceholder': 'Una cadena de entrada por línea...',
|
||
'settings.localModel.download.embeddingVectors': 'Vectores: {count}',
|
||
'settings.localModel.download.noThinkMode': 'Sin modo de pensamiento',
|
||
'settings.localModel.download.notAvailable': 'n/a',
|
||
'settings.localModel.download.promptPlaceholder':
|
||
'Escribe cualquier prompt y ejecútalo en el modelo local...',
|
||
'settings.localModel.download.quantizationPref': 'Preferencia de cuantización',
|
||
'settings.localModel.download.runEmbeddingTest': 'Ejecutando...',
|
||
'settings.localModel.download.runPromptTest': 'Ejecutar prueba de prompt',
|
||
'settings.localModel.download.runSummaryTest': 'Ejecutar prueba de resumen',
|
||
'settings.localModel.download.runTranscriptionTest': 'Ejecutando...',
|
||
'settings.localModel.download.runTtsTest': 'Ejecutando...',
|
||
'settings.localModel.download.runVisionTest': 'Ejecutando...',
|
||
'settings.localModel.download.running': 'Ejecutando...',
|
||
'settings.localModel.download.runningPrompt': 'Ejecutando prompt',
|
||
'settings.localModel.download.summaryHelper':
|
||
'Llama a `openhuman.inference_summarize` a través del núcleo de Rust',
|
||
'settings.localModel.download.summarizePlaceholder':
|
||
'Pega texto para resumir con el modelo local...',
|
||
'settings.localModel.download.testCustomPrompt': 'Probar prompt personalizado',
|
||
'settings.localModel.download.testEmbeddings': 'Probar embeddings',
|
||
'settings.localModel.download.testSummarization': 'Probar resumen',
|
||
'settings.localModel.download.testVisionPrompt': 'Probar prompt de visión',
|
||
'settings.localModel.download.testVoiceInput': 'Probar entrada de voz (STT)',
|
||
'settings.localModel.download.testVoiceOutput': 'Probar salida de voz (TTS)',
|
||
'settings.localModel.download.transcript': 'Transcripción:',
|
||
'settings.localModel.download.ttsOutput': 'Salida: {outputPath}',
|
||
'settings.localModel.download.ttsOutputPlaceholder': 'Ruta WAV de salida opcional',
|
||
'settings.localModel.download.ttsPlaceholder': 'Ingresa texto para sintetizar...',
|
||
'settings.localModel.download.ttsVoice': 'Voz: {voiceId}',
|
||
'settings.localModel.download.visionImagePlaceholder':
|
||
'Una referencia de imagen por línea (data URI, URL o marcador de ruta local)',
|
||
'settings.localModel.download.visionPromptPlaceholder':
|
||
'Ingresa un prompt para el modelo de visión...',
|
||
'settings.localModel.status.allChecksPassed': 'Todas las verificaciones pasaron',
|
||
'settings.localModel.status.artifact': 'Artefacto',
|
||
'settings.localModel.status.backend': 'backend',
|
||
'settings.localModel.status.binary': 'Binario',
|
||
'settings.localModel.status.bootstrapResume': 'Bootstrap / Reanudar',
|
||
'settings.localModel.status.checking': 'Verificando...',
|
||
'settings.localModel.status.checkingOllama': 'Verificando Ollama',
|
||
'settings.localModel.status.contextBelowMinimumBadge':
|
||
'{contextLength} ctx - debajo de {required} min',
|
||
'settings.localModel.status.contextBelowMinimumTitle':
|
||
'Rechazado: los tokens {contextLength} de la ventana de contexto están por debajo del mínimo de tokens {required} que requiere la capa de memoria. El truncamiento silencioso corrompería la recuperación.',
|
||
'settings.localModel.status.contextOkBadge': '{contextLength}ctx ✓',
|
||
'settings.localModel.status.contextOkTitle':
|
||
'Los tokens {contextLength} de la ventana de contexto cumplen con el mínimo de la capa de memoria de tokens {required}.',
|
||
'settings.localModel.status.contextUnknownBadge': 'ctx desconocido',
|
||
'settings.localModel.status.contextUnknownTitle':
|
||
'Ventana de contexto desconocida; No se pudo confirmar que cumpla con el mínimo de capa de memoria del token {required}.',
|
||
'settings.localModel.status.customLocation': 'Ubicación personalizada',
|
||
'settings.localModel.status.customLocationDesc': 'Descripción de ubicación personalizada',
|
||
'settings.localModel.status.diagnosticsHint':
|
||
'Haz clic en "Ejecutar diagnósticos" para verificar que Ollama está en ejecución y los modelos están instalados.',
|
||
'settings.localModel.status.downloadingUnknown': 'Descargando (tamaño desconocido)',
|
||
'settings.localModel.status.eta': 'ETA',
|
||
'settings.localModel.status.expectedModels': 'Modelos esperados',
|
||
'settings.localModel.status.expectedChat': 'Charla: {model}',
|
||
'settings.localModel.status.expectedEmbedding': 'Incrustación: {model}',
|
||
'settings.localModel.status.expectedVision': 'Visión: {model}',
|
||
'settings.localModel.status.externalProcess': 'Proceso externo',
|
||
'settings.localModel.status.forceRebootstrap': 'Forzar re-bootstrap',
|
||
'settings.localModel.status.generationTps': 'TPS de generación',
|
||
'settings.localModel.status.hideErrorDetails': 'Ocultar detalles del error',
|
||
'settings.localModel.status.installManually': 'Instalar manualmente',
|
||
'settings.localModel.status.installManuallyFrom': 'Instalar manualmente desde',
|
||
'settings.localModel.status.installOllama': 'Iniciando…',
|
||
'settings.localModel.status.installedModels': 'Modelos instalados',
|
||
'settings.localModel.status.installing': 'Instalando...',
|
||
'settings.localModel.status.installingOllama': 'Instalando runtime de Ollama...',
|
||
'settings.localModel.status.issues': 'Problemas',
|
||
'settings.localModel.status.issuesFound': 'Se encontraron {count} problema(s)',
|
||
'settings.localModel.status.lastLatency': 'Última latencia',
|
||
'settings.localModel.status.model': 'Modelo',
|
||
'settings.localModel.status.notAvailable': 'n/a',
|
||
'settings.localModel.status.notFound': 'No encontrado',
|
||
'settings.localModel.status.notRunning': 'No en ejecución',
|
||
'settings.localModel.status.ollamaBinaryPath': 'Ruta del binario de Ollama',
|
||
'localModel.ollamaServer.helperText': 'Ejemplo: http://192.168.1.5:11434',
|
||
'localModel.ollamaServer.label': 'URL del servidor Ollama',
|
||
'localModel.ollamaServer.modelCount': 'modelos',
|
||
'localModel.ollamaServer.placeholder': 'http://localhost:11434',
|
||
'localModel.ollamaServer.reachable': 'Accesible',
|
||
'localModel.ollamaServer.resetButton': 'Restablecer al valor predeterminado',
|
||
'localModel.ollamaServer.saveButton': 'Guardar',
|
||
'localModel.ollamaServer.testButton': 'Probar conexión',
|
||
'localModel.ollamaServer.unreachable': 'No accesible',
|
||
'localModel.ollamaServer.validationError': 'Debe ser una URL http:// o https:// válida',
|
||
'settings.localModel.status.ollamaDiagnostics': 'Diagnósticos de Ollama',
|
||
'settings.localModel.status.ollamaNotInstalled': 'Runtime de Ollama no disponible',
|
||
'settings.localModel.status.ollamaNotInstalledDesc':
|
||
'OpenHuman ahora trata Ollama como un runtime de inferencia externo. Inicia tu propio servidor Ollama, descarga los modelos que quieras y apunta el enrutado de cargas hacia él.',
|
||
'settings.localModel.status.progress': 'Progreso',
|
||
'settings.localModel.status.provider': 'Proveedor',
|
||
'settings.localModel.status.retryBootstrap': 'Reintentar bootstrap',
|
||
'settings.localModel.status.runDiagnostics': 'Verificando...',
|
||
'settings.localModel.status.running': 'Ejecutándose',
|
||
'settings.localModel.status.runningExternalProcess': 'Ejecutándose como proceso externo',
|
||
'settings.localModel.status.runtimeStatus': 'Estado del runtime',
|
||
'settings.localModel.status.server': 'Servidor',
|
||
'settings.localModel.status.setPath': 'Configurando...',
|
||
'settings.localModel.status.setting': 'Configurando...',
|
||
'settings.localModel.status.showErrorDetails': 'Ocultar detalles del error',
|
||
'settings.localModel.status.showInstallErrorDetails': 'Ocultar detalles del error',
|
||
'settings.localModel.status.suggestedFixes': 'Correcciones sugeridas',
|
||
'settings.localModel.status.thenSetPath': 'Luego configura la ruta',
|
||
'settings.localModel.status.triggering': 'Activando...',
|
||
'settings.localModel.status.unavailable': 'No disponible',
|
||
'settings.localModel.status.working': 'Trabajando...',
|
||
'settings.developerMenu.ai.title': 'Configuración de IA',
|
||
'settings.developerMenu.ai.desc':
|
||
'Proveedores en la nube, modelos locales de Ollama y enrutamiento por carga de trabajo',
|
||
'settings.developerMenu.screenAwareness.title': 'Conciencia de pantalla',
|
||
'settings.developerMenu.screenAwareness.desc':
|
||
'Permisos de captura de pantalla, política de supervisión y controles de sesión',
|
||
'settings.developerMenu.messagingChannels.title': 'Canales de mensajería',
|
||
'settings.developerMenu.messagingChannels.desc':
|
||
'Configura los modos de autenticación de Telegram/Discord y el enrutamiento de canal predeterminado',
|
||
'settings.developerMenu.tools.title': 'Herramientas',
|
||
'settings.developerMenu.tools.desc':
|
||
'Activa o desactiva las capacidades que OpenHuman puede usar en tu nombre',
|
||
'settings.developerMenu.agentChat.title': 'Chat del agente',
|
||
'settings.developerMenu.agentChat.desc':
|
||
'Prueba conversaciones del agente con ajustes de modelo y temperatura',
|
||
'settings.developerMenu.devWorkflow.title': 'Flujo de trabajo de desarrollo',
|
||
'settings.developerMenu.devWorkflow.desc':
|
||
'Agente autónomo que selecciona tus problemas GitHub y genera PRs según un horario',
|
||
'settings.developerMenu.devWorkflow.panelDesc':
|
||
'Configura un agente desarrollador autónomo que seleccione los problemas GitHub asignados a ti y genere solicitudes de extracción automáticamente según un horario.',
|
||
'settings.developerMenu.skillsRunner.title': 'Corredor de habilidades',
|
||
'settings.developerMenu.skillsRunner.desc':
|
||
'Ejecute cualquier habilidad incluida de manera ad hoc: complete sus entradas y active una ejecución autónoma en segundo plano',
|
||
'settings.developerMenu.skillsRunner.panelDesc':
|
||
'Elige una habilidad agrupada, completa sus entradas declaradas y ejecuta una ejecución en segundo plano de tipo fire-and-forget. Usa Dev Workflow en su lugar si quieres un trabajo recurrente programado con cron.',
|
||
'settings.skillsRunner.skill': 'Habilidad',
|
||
'settings.skillsRunner.selectSkill': 'Selecciona una habilidad…',
|
||
'settings.skillsRunner.loadingSkills': 'Cargando habilidades…',
|
||
'settings.skillsRunner.loadingDescription': 'Cargando entradas de habilidades…',
|
||
'settings.skillsRunner.noInputs': 'Esta habilidad no declara entradas.',
|
||
'settings.skillsRunner.placeholder.required': 'requerido',
|
||
'settings.skillsRunner.runNow': 'Corre ahora',
|
||
'settings.skillsRunner.starting': 'Comenzando…',
|
||
'settings.skillsRunner.started': 'Iniciado — id de ejecución:',
|
||
'settings.skillsRunner.logPath': 'Registro:',
|
||
'settings.skillsRunner.error.listSkills': 'Error al cargar habilidades:',
|
||
'settings.skillsRunner.error.describe': 'Error al cargar las entradas:',
|
||
'settings.skillsRunner.error.missingRequired': 'Faltan datos de entrada requeridos:',
|
||
'settings.skillsRunner.error.run': 'Error al iniciar la ejecución:',
|
||
'settings.skillsRunner.error.preflightGate': 'La puerta de preembarque falló',
|
||
'settings.skillsRunner.schedule.heading': 'Horario (recurrente)',
|
||
'settings.skillsRunner.schedule.help':
|
||
'Guarda esta habilidad + entradas como un trabajo cron recurrente. El agente llamará a run_skill en cada tick.',
|
||
'settings.skillsRunner.schedule.frequency': 'Frecuencia',
|
||
'settings.skillsRunner.schedule.every30min': 'Cada 30 minutos',
|
||
'settings.skillsRunner.schedule.everyHour': 'Cada hora',
|
||
'settings.skillsRunner.schedule.every2hours': 'Cada 2 horas',
|
||
'settings.skillsRunner.schedule.every6hours': 'Cada 6 horas',
|
||
'settings.skillsRunner.schedule.onceDaily': 'Una vez al día (9:00)',
|
||
'settings.skillsRunner.schedule.save': 'Guardar horario',
|
||
'settings.skillsRunner.schedule.saving': 'Guardando…',
|
||
'settings.skillsRunner.schedule.saved': 'Horario guardado.',
|
||
'settings.skillsRunner.schedule.error': 'Error al guardar el horario:',
|
||
'settings.skillsRunner.schedule.loadingJobs': 'Cargando horarios existentes…',
|
||
'settings.skillsRunner.schedule.noJobs': 'Aún no hay horarios guardados para esta habilidad.',
|
||
'settings.skillsRunner.schedule.existing': 'Trabajos programados para esta habilidad:',
|
||
'settings.skillsRunner.schedule.runNow': 'Correr',
|
||
'settings.skillsRunner.schedule.remove': 'Eliminar',
|
||
'settings.skillsRunner.scheduleEnabled': 'Habilitado',
|
||
'settings.skillsRunner.scheduleDisabled': 'Pausado',
|
||
'settings.skillsRunner.scheduleToggleAria': 'Alternar programación habilitada',
|
||
'settings.skillsRunner.schedule.history': 'Historia',
|
||
'settings.skillsRunner.schedule.historyLoading': 'Cargando historial…',
|
||
'settings.skillsRunner.schedule.historyEmpty': 'Aún no hay ejecuciones para este horario.',
|
||
'settings.skillsRunner.schedule.historyNoOutput': 'No se capturó salida.',
|
||
'settings.skillsRunner.schedule.active': 'activo',
|
||
'settings.skillsRunner.schedule.lastRunLabel': 'último:',
|
||
'settings.skillsRunner.recentRuns.headingForSkill': 'Ejecuciones recientes para esta habilidad',
|
||
'settings.skillsRunner.recentRuns.headingAll': 'Carreras de habilidades recientes (todas)',
|
||
'settings.skillsRunner.recentRuns.refresh': 'Refrescar',
|
||
'settings.skillsRunner.recentRuns.loading': 'Cargando carreras recientes…',
|
||
'settings.skillsRunner.recentRuns.empty': 'No hay carreras recientes.',
|
||
'settings.skillsRunner.viewer.loading': 'Cargando registro…',
|
||
'settings.skillsRunner.viewer.tailing': 'Seguimiento en vivo',
|
||
'settings.skillsRunner.viewer.fetching': 'obteniendo',
|
||
'settings.skillsRunner.viewer.error': 'Error al leer el registro:',
|
||
'settings.skillsRunner.repoPicker.loading': 'Cargando repositorios…',
|
||
'settings.skillsRunner.repoPicker.select': 'Selecciona un repositorio…',
|
||
'settings.skillsRunner.repoPicker.empty':
|
||
'No se devolvieron repositorios. Conecta GitHub a través de Composio para llenar esta lista.',
|
||
'settings.skillsRunner.repoPicker.notConnected':
|
||
'GitHub no está conectado a través de Composio. Conéctalo primero en Habilidades → Composio.',
|
||
'settings.skillsRunner.repoPicker.privateTag': '(privado)',
|
||
'settings.skillsRunner.branchPicker.needRepo': 'Primero elige un repositorio…',
|
||
'settings.skillsRunner.branchPicker.loading': 'Cargando ramas…',
|
||
'settings.skillsRunner.branchPicker.select': 'Seleccione una sucursal…',
|
||
'settings.devWorkflow.githubRepository': 'Repositorio GitHub',
|
||
'settings.devWorkflow.loadingRepositories': 'Cargando repositorios...',
|
||
'settings.devWorkflow.selectRepository': 'Selecciona un repositorio',
|
||
'settings.devWorkflow.privateTag': '(privado)',
|
||
'settings.devWorkflow.detectingForkInfo': 'Detectando información del fork...',
|
||
'settings.devWorkflow.forkDetected': 'Bifurcación detectada',
|
||
'settings.devWorkflow.upstream': 'Corriente arriba:',
|
||
'settings.devWorkflow.forkPrNote': 'Se abrirán PRs contra el repositorio principal.',
|
||
'settings.devWorkflow.notForkNote':
|
||
'No es un fork. Los PR se harán directamente contra este repositorio.',
|
||
'settings.devWorkflow.targetBranch': 'Rama de destino',
|
||
'settings.devWorkflow.targetBranchNote': 'Se crearán PRs contra esta rama',
|
||
'settings.devWorkflow.loadingBranches': 'Cargando ramas...',
|
||
'settings.devWorkflow.runFrequency': 'Frecuencia de ejecución',
|
||
'settings.devWorkflow.runFrequencyNote':
|
||
'Con qué frecuencia el agente debe comprobar si hay problemas y levantar PRs.',
|
||
'settings.devWorkflow.updateConfiguration': 'Actualizar configuración',
|
||
'settings.devWorkflow.saveConfiguration': 'Guardar configuración',
|
||
'settings.devWorkflow.remove': 'Eliminar',
|
||
'settings.devWorkflow.saved': 'guardado',
|
||
'settings.devWorkflow.activeConfiguration': 'Configuración activa',
|
||
'settings.devWorkflow.activeConfigRepository': 'Repositorio:',
|
||
'settings.devWorkflow.activeConfigUpstream': 'Corriente arriba:',
|
||
'settings.devWorkflow.activeConfigTargetBranch': 'Rama destino:',
|
||
'settings.devWorkflow.activeConfigSchedule': 'Horario:',
|
||
'settings.devWorkflow.enabled': 'Habilitado',
|
||
'settings.devWorkflow.paused': 'Pausado',
|
||
'settings.devWorkflow.nextRun': 'Próxima carrera',
|
||
'settings.devWorkflow.lastRun': 'Última ejecución',
|
||
'settings.devWorkflow.runNow': 'Corre ahora',
|
||
'settings.devWorkflow.running': 'Corriendo…',
|
||
'settings.devWorkflow.recentRuns': 'Ejecuciones recientes',
|
||
'settings.devWorkflow.cronSaveError': 'Error al guardar la configuración',
|
||
'settings.devWorkflow.lastOutput': 'Última salida',
|
||
'settings.devWorkflow.noOutput': 'No se capturó salida',
|
||
'settings.devWorkflow.runningStatus':
|
||
'El agente está en funcionamiento: seleccionando un problema y trabajando en una solución...',
|
||
'settings.devWorkflow.errorNotConnected':
|
||
'GitHub no está conectado. Por favor, conecte GitHub a través de Configuración > Avanzado > Composio primero.',
|
||
'settings.devWorkflow.errorToolNotEnabled':
|
||
'La herramienta GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER no está habilitada en este backend. Por favor, pide a tu administrador que la habilite en la integración de Composio (backend#842).',
|
||
'settings.devWorkflow.errorNotAuthenticated': 'No autenticado. Por favor, inicie sesión primero.',
|
||
'settings.devWorkflow.errorNoRepositories':
|
||
'No se encontraron repositorios para esta cuenta GitHub.',
|
||
'settings.devWorkflow.schedule.every30min': 'Cada 30 minutos',
|
||
'settings.devWorkflow.schedule.everyHour': 'Cada hora',
|
||
'settings.devWorkflow.schedule.every2hours': 'Cada 2 horas',
|
||
'settings.devWorkflow.schedule.every6hours': 'Cada 6 horas',
|
||
'settings.devWorkflow.schedule.onceDaily': 'Una vez al día (9 AM)',
|
||
'settings.developerMenu.cronJobs.title': 'Tareas cron',
|
||
'settings.developerMenu.cronJobs.desc':
|
||
'Ver y configurar tareas programadas para habilidades en tiempo de ejecución',
|
||
'settings.developerMenu.localModelDebug.title': 'Depuración del modelo local',
|
||
'settings.developerMenu.localModelDebug.desc':
|
||
'Configuración de Ollama, descargas de recursos, pruebas de modelo y diagnósticos',
|
||
'settings.developerMenu.webhooks.title': 'Ganchos web',
|
||
'settings.developerMenu.webhooks.desc':
|
||
'Inspecciona registros de webhooks en tiempo de ejecución y solicitudes capturadas',
|
||
'settings.developerMenu.eventLog.title': 'Registro de eventos',
|
||
'settings.developerMenu.eventLog.desc':
|
||
'Transmisión en vivo codificada por colores de todos los eventos de agentes, herramientas y sistemas',
|
||
'settings.developerMenu.eventLog.allTypes': 'Todos los tipos',
|
||
'settings.developerMenu.eventLog.filterAgent': 'Filtrar...',
|
||
'settings.developerMenu.eventLog.download': 'Descargar',
|
||
'settings.developerMenu.eventLog.events': 'eventos',
|
||
'settings.developerMenu.eventLog.live': 'Vivir',
|
||
'settings.developerMenu.eventLog.disconnected': 'desconectado',
|
||
'settings.developerMenu.eventLog.waiting': 'Esperando eventos...',
|
||
'settings.developerMenu.eventLog.notConnected': 'No conectado al núcleo',
|
||
'settings.developerMenu.eventLog.jumpToLatest': 'Saltar a lo más reciente',
|
||
'settings.developerMenu.eventLog.badge.tool': 'TOOL',
|
||
'settings.developerMenu.eventLog.badge.agent': 'AGENT',
|
||
'settings.developerMenu.eventLog.badge.info': 'INFO',
|
||
'settings.developerMenu.eventLog.badge.mem': 'MEM',
|
||
'settings.developerMenu.eventLog.badge.chan': 'CHAN',
|
||
'settings.developerMenu.eventLog.badge.cron': 'CRON',
|
||
'settings.developerMenu.eventLog.badge.hook': 'HOOK',
|
||
'settings.developerMenu.eventLog.badge.warn': 'WARN',
|
||
'settings.developerMenu.eventLog.badge.skill': 'SKILL',
|
||
'settings.developerMenu.eventLog.badge.comp': 'COMP',
|
||
'settings.developerMenu.eventLog.badge.mcp': 'MCP',
|
||
'settings.developerMenu.intelligence.title': 'Inteligencia',
|
||
'settings.developerMenu.intelligence.desc':
|
||
'Espacio de trabajo de memoria, motor subconsciente, sueños y ajustes',
|
||
'settings.developerMenu.notificationRouting.title': 'Enrutamiento de notificaciones',
|
||
'settings.developerMenu.notificationRouting.desc':
|
||
'Puntuación de importancia con IA y escalado al orquestador para alertas de integración',
|
||
'settings.developerMenu.composeioTriggers.title': 'Disparadores de ComposeIO',
|
||
'settings.developerMenu.composeioTriggers.desc':
|
||
'Ver historial y archivo de disparadores de ComposeIO',
|
||
'settings.developerMenu.composioRouting.title': 'Enrutamiento de Composio (modo directo)',
|
||
'settings.developerMenu.composioRouting.desc':
|
||
'Usa tu propia clave API de Composio y enruta llamadas directamente a backend.composio.dev',
|
||
'settings.developerMenu.integrationTriggers.title': 'Disparadores de integración',
|
||
'settings.developerMenu.integrationTriggers.desc':
|
||
'Configura los ajustes de triaje de IA para disparadores de integración de Composio',
|
||
'settings.developerMenu.mcpServer.title': 'MCP Servidor',
|
||
'settings.developerMenu.mcpServer.desc':
|
||
'Configure clientes MCP externos para conectarse a OpenHuman',
|
||
'settings.developerMenu.autonomy.title': 'Autonomía del agente',
|
||
'settings.developerMenu.autonomy.desc':
|
||
'Límites de frecuencia de acciones de herramientas y umbrales de seguridad',
|
||
'settings.mcpServer.title': 'MCP Servidor',
|
||
'settings.mcpServer.toolsSectionTitle': 'Herramientas disponibles',
|
||
'settings.mcpServer.toolsSectionDesc':
|
||
'Herramientas expuestas a través del servidor stdio MCP cuando se ejecuta openhuman-core mcp',
|
||
'settings.mcpServer.configSectionTitle': 'Configuración del cliente',
|
||
'settings.mcpServer.configSectionDesc':
|
||
'Seleccione su cliente MCP para generar el fragmento de configuración correcto',
|
||
'settings.mcpServer.copySnippet': 'Copiar al portapapeles',
|
||
'settings.mcpServer.copied': '¡Copiado!',
|
||
'settings.mcpServer.openConfigFile': 'Abrir archivo de configuración',
|
||
'settings.mcpServer.binaryPathNotFound':
|
||
'OpenHuman binario no encontrado. Si se ejecuta desde el código fuente, compila con: cargo build --bin openhuman-core',
|
||
'settings.mcpServer.openConfigError': 'No se pudo abrir el archivo de configuración',
|
||
'settings.mcpServer.clientClaudeDesktop': 'Escritorio Claude',
|
||
'settings.mcpServer.clientCursor': 'Cursor',
|
||
'settings.mcpServer.clientCodex': 'Códice',
|
||
'settings.mcpServer.clientZed': 'Zed',
|
||
'settings.mcpServer.configFilePath': 'Archivo de configuración',
|
||
'settings.mcpServer.clientSelectorAriaLabel': 'MCP selector de cliente',
|
||
'settings.appearance.menuDesc': 'Elige claro, oscuro o igualar el tema del sistema',
|
||
'settings.agentAccess.title': 'Acceso del agente al sistema operativo',
|
||
'settings.agentAccess.menuDesc':
|
||
'Controla dónde el agente puede read/write y si puede usar la consola.',
|
||
'settings.agentAccess.loadError': 'Error al cargar la configuración de acceso',
|
||
'settings.agentAccess.saveError': 'Error al guardar la configuración de acceso',
|
||
'settings.agentAccess.saved': 'Guardado — se aplica en tu próximo mensaje.',
|
||
'settings.agentAccess.desktopOnly':
|
||
'La configuración de acceso solo está disponible en la aplicación de escritorio.',
|
||
'settings.agentAccess.loading': 'Cargando…',
|
||
'settings.agentAccess.accessMode': 'Modo de acceso',
|
||
'settings.agentAccess.tier.readonly.title': 'Solo lectura',
|
||
'settings.agentAccess.tier.readonly.desc':
|
||
'Lee archivos y ejecuta comandos de solo lectura para explorar, pero nunca escribe, edita ni ejecuta nada que cambie el estado.',
|
||
'settings.agentAccess.tier.supervised.title': 'Pregunta antes de editar',
|
||
'settings.agentAccess.tier.supervised.desc':
|
||
'Crea nuevos archivos libremente, pero solicita su aprobación antes de editar un archivo existente, ejecutar un comando, acceder a la red o instalar algo.',
|
||
'settings.agentAccess.tier.full.title': 'Acceso completo',
|
||
'settings.agentAccess.tier.full.desc':
|
||
'Ejecuta comandos con acceso completo de tu cuenta de usuario: puede read/write en cualquier lugar permitido, excepto en los almacenes de credenciales y del sistema. Los comandos destructivos, el acceso a la red y las instalaciones aún requieren aprobación.',
|
||
'settings.agentAccess.defaultTag': '(predeterminado)',
|
||
'settings.agentAccess.fullWarning':
|
||
'⚠ El acceso completo ejecuta comandos con el acceso total de tu cuenta y no está en un entorno aislado. Solo actívalo cuando confíes en el agente con esta máquina. Los directorios de credenciales y del sistema siguen bloqueados, y las acciones destructivas, de red e instalación aún requieren aprobación.',
|
||
'settings.agentAccess.confine.label': 'Restringir al espacio de trabajo',
|
||
'settings.agentAccess.confine.desc':
|
||
'Restringe al agente al directorio de trabajo (más cualquier carpeta concedida), sea cual sea el modo de acceso seleccionado. Cuando está desactivado, puede acceder a cualquier lugar al que pueda acceder tu usuario, excepto a los directorios de credenciales y del sistema que siempre están bloqueados.',
|
||
'settings.agentAccess.requireTaskPlanApproval.label': 'Requerir la aprobación del plan de tareas',
|
||
'settings.agentAccess.requireTaskPlanApproval.desc':
|
||
'Pausa antes de que un agente asignado ejecute un breve tarea elaborada por el agente.',
|
||
'settings.agentAccess.timeout.label': 'Tiempo de espera de la acción',
|
||
'settings.agentAccess.timeout.desc':
|
||
'Cuánto tiempo puede ejecutarse una sola herramienta o acción antes de cancelarse. Aumenta este valor si un modelo local grande se interrumpe antes de terminar su respuesta.',
|
||
'settings.agentAccess.timeout.unit': 'segundos',
|
||
'settings.agentAccess.timeout.invalid':
|
||
'Introduce un número entero de segundos dentro del rango permitido',
|
||
'settings.agentAccess.timeout.envOverride':
|
||
'La variable de entorno OPENHUMAN_TOOL_TIMEOUT_SECS está anulando este ajuste, por lo que los cambios aquí no tendrán efecto hasta que se elimine.',
|
||
'settings.agentAccess.grantedFolders': 'Carpetas concedidas',
|
||
'settings.agentAccess.alwaysAllow': 'Herramientas siempre permitidas',
|
||
'settings.agentAccess.alwaysAllowDesc':
|
||
'Las herramientas que marcaste como "Permitir siempre" en el chat se ejecutan sin pedir permiso. Elimina una para que se te pregunte nuevamente.',
|
||
'settings.agentAccess.alwaysAllowNone': 'Aún no hay herramientas siempre permitidas.',
|
||
'settings.agentAccess.grantedDesc':
|
||
'Carpetas que el agente puede leer y escribir, además del espacio de trabajo. Los almacenes de credenciales (~/.ssh, ~/.gnupg, ~/.aws, llaveros) y los directorios del sistema (/etc, /System, C:\\Windows,…) siempre están bloqueados, incluso dentro de una carpeta concedida.',
|
||
'settings.agentAccess.noneGranted': 'No se otorgaron carpetas.',
|
||
'settings.agentAccess.readWrite': 'leer + escribir',
|
||
'settings.agentAccess.readOnly': 'solo lectura',
|
||
'settings.agentAccess.remove': 'Eliminar',
|
||
'settings.agentAccess.pathPlaceholder': 'Ruta absoluta de la carpeta',
|
||
'settings.agentAccess.accessLevelLabel': 'Nivel de acceso',
|
||
'settings.agentAccess.add': 'Añadir',
|
||
'settings.agentAccess.saving': 'Guardando…',
|
||
'settings.agentAccess.changesApply': 'Los cambios se aplican en tu próximo mensaje.',
|
||
'settings.agentAccess.directories': 'Directorios',
|
||
'settings.agentAccess.actionSandbox': 'Sandbox de acciones',
|
||
'settings.agentAccess.readWriteAccess': 'lectura + escritura',
|
||
'settings.agentAccess.actionSandboxDesc':
|
||
'Directorio de trabajo predeterminado para herramientas de shell, archivos y git.',
|
||
'settings.agentAccess.internalState': 'Estado interno',
|
||
'settings.agentAccess.agentBlocked': 'bloqueado para el agente',
|
||
'settings.agentAccess.internalStateDesc':
|
||
'Bases de datos de memoria, sesiones, tokens y otros datos esenciales. No accesible para herramientas del agente.',
|
||
'settings.agentAccess.approvalHistory': 'Approval history',
|
||
'settings.agentAccess.approvalHistoryDesc':
|
||
'Review past Approve / Deny decisions the agent requested.',
|
||
'settings.agentAccess.viewApprovalHistory': 'View approval history',
|
||
'settings.approvalHistory.title': 'Approval history',
|
||
'settings.approvalHistory.subtitle': 'Recent tool-approval decisions, newest first.',
|
||
'settings.approvalHistory.refresh': 'Refresh',
|
||
'settings.approvalHistory.loading': 'Loading approval history…',
|
||
'settings.approvalHistory.retry': 'Retry',
|
||
'settings.approvalHistory.emptyState': 'No approval decisions recorded yet.',
|
||
'settings.approvalHistory.errorGeneric': 'Unable to load approval history. Try again.',
|
||
'settings.approvalHistory.decidedAt': 'Decided {date}',
|
||
'settings.approvalHistory.decision.approveOnce': 'Approved once',
|
||
'settings.approvalHistory.decision.approveAlways': 'Always allowed',
|
||
'settings.approvalHistory.decision.deny': 'Denied',
|
||
'settings.appearance.title': 'Apariencia',
|
||
'settings.appearance.themeHeading': 'Tema',
|
||
'settings.appearance.themeAria': 'Tema',
|
||
'settings.appearance.modeLight': 'Luz',
|
||
'settings.appearance.modeLightDesc': 'Superficies brillantes, texto oscuro.',
|
||
'settings.appearance.modeDark': 'oscuro',
|
||
'settings.appearance.modeDarkDesc':
|
||
'Las superficies oscuras son más agradables a la vista después del anochecer.',
|
||
'settings.appearance.modeSystem': 'Sistema de partidos',
|
||
'settings.appearance.modeSystemDesc':
|
||
'Siga la configuración de apariencia de su sistema operativo.',
|
||
'settings.appearance.helperText':
|
||
'El modo oscuro cambia toda la aplicación (chat, configuración, paneles) a una paleta tenue. El "sistema de coincidencias" sigue la apariencia de su sistema operativo y se actualiza en vivo.',
|
||
'settings.appearance.tabBarHeading': 'Barra de pestañas inferior',
|
||
'settings.appearance.tabBarAlwaysShowLabels': 'Mostrar siempre etiquetas',
|
||
'settings.appearance.tabBarAlwaysShowLabelsDesc':
|
||
'Cuando está desactivado, las etiquetas solo aparecen al pasar el mouse o para la pestaña activa.',
|
||
'settings.mascot.active': 'Activo',
|
||
'settings.mascot.characterDesc': 'Descripción del personaje',
|
||
'settings.mascot.characterHeading': 'Encabezado del personaje',
|
||
'settings.mascot.customGifError':
|
||
'Introduzca una ruta HTTPS .gif URL, loopback HTTP .gif URL, file:// .gif URL o ruta .gif local.',
|
||
'settings.mascot.customGifHeading': 'Avatar GIF personalizado',
|
||
'settings.mascot.customGifLabel': 'Avatar GIF personalizado URL',
|
||
'settings.mascot.customGifPlaceholder': 'https://example.com/avatar.gif',
|
||
'settings.mascot.characterPreview': 'Vista previa',
|
||
'settings.mascot.characterStates': 'estados',
|
||
'settings.mascot.characterVisemes': 'visemas',
|
||
'settings.mascot.colorAria': 'color OpenHuman',
|
||
'settings.mascot.colorDesc': 'Descripción del color',
|
||
'settings.mascot.colorHeading': 'Encabezado del color',
|
||
'settings.mascot.colorBlack': 'negro',
|
||
'settings.mascot.colorBurgundy': 'Borgoña',
|
||
'settings.mascot.colorCustom': 'Personalizado',
|
||
'settings.mascot.colorNavy': 'Marina',
|
||
'settings.mascot.primaryColor': 'Color primario',
|
||
'settings.mascot.secondaryColor': 'Color secundario',
|
||
'settings.mascot.colorYellow': 'amarillo',
|
||
'settings.mascot.libraryUnavailable': 'Biblioteca OpenHuman no disponible',
|
||
'settings.mascot.title': 'OpenHuman',
|
||
'settings.mascot.loadingLibrary': 'Cargando biblioteca de OpenHuman…',
|
||
'settings.mascot.loadDetailError': 'No se pudo cargar la mascota.',
|
||
'settings.mascot.loadLibraryError': 'No se pudo cargar la biblioteca de mascotas.',
|
||
'settings.mascot.localDefault': 'OpenHuman local (predeterminado)',
|
||
'settings.mascot.menuTitle': 'Mascota',
|
||
'settings.mascot.menuDesc': 'Elige el color de la mascota usado en toda la app',
|
||
'settings.mascot.noCharacters': 'Aún no hay personajes de OpenHuman disponibles',
|
||
'settings.mascot.noColorVariants': 'Sin variantes de color',
|
||
'settings.mascot.voice.current': 'actual',
|
||
'settings.mascot.voice.customDesc':
|
||
'Encuentra los ID de voz en api.elevenlabs.io/v1/voices o en tu panel de ElevenLabs. Solo se almacena el ID — tu clave de API permanece en el backend.',
|
||
'settings.mascot.voice.customHeading': 'ID de voz personalizado',
|
||
'settings.mascot.voice.customOption': 'Otro (pegar ID de voz)…',
|
||
'settings.mascot.voice.customPlaceholder': 'por ej. 21m00Tcm4TlvDq8ikWAM',
|
||
'settings.mascot.voice.desc':
|
||
'Elige la voz de ElevenLabs que la mascota usa para las respuestas habladas. Filtra por género, elige de la lista curada, pega un ID personalizado, o deja que la app elija una voz que coincida con el idioma de la interfaz.',
|
||
'settings.mascot.voice.genderFemale': 'Femenino',
|
||
'settings.mascot.voice.genderHeading': 'Género de la voz',
|
||
'settings.mascot.voice.genderMale': 'Masculino',
|
||
'settings.mascot.voice.heading': 'Voz',
|
||
'settings.mascot.voice.preset': 'Preajuste de voz',
|
||
'settings.mascot.voice.presetHeading': 'Preajuste de voz',
|
||
'settings.mascot.voice.preview': 'Vista previa de voz',
|
||
'settings.mascot.voice.previewError': 'Falló la vista previa de voz',
|
||
'settings.mascot.voice.previewText': 'Hola, soy tu asistente. Esta es una vista previa de voz.',
|
||
'settings.mascot.voice.previewing': 'Reproduciendo vista previa…',
|
||
'settings.mascot.voice.reset': 'Restablecer al predeterminado',
|
||
'settings.mascot.voice.useLocaleDefault': 'Coincidir con el idioma de la app',
|
||
'settings.mascot.voice.useLocaleDefaultDesc':
|
||
'Elegir automáticamente una voz para el idioma de la interfaz actual.',
|
||
'settings.persona.title': 'Persona',
|
||
'settings.persona.menuTitle': 'Persona',
|
||
'settings.persona.menuDesc':
|
||
'Nombre, personalidad, avatar y voz: tu asistente como una sola identidad',
|
||
'settings.persona.identityHeading': 'Identidad',
|
||
'settings.persona.identityDesc':
|
||
'Un nombre para mostrar y una breve descripción de tu asistente. Se muestra en la aplicación; no cambia la forma en que el asistente razona.',
|
||
'settings.persona.displayNameLabel': 'Nombre para mostrar',
|
||
'settings.persona.displayNamePlaceholder': 'p. ej. Nova',
|
||
'settings.persona.descriptionLabel': 'Descripción',
|
||
'settings.persona.descriptionPlaceholder':
|
||
'por ejemplo, un asistente tranquilo y conciso para mi equipo.',
|
||
'settings.persona.soul.heading': 'Personalidad (SOUL.md)',
|
||
'settings.persona.soul.desc':
|
||
'La personalidad que el asistente sigue en cada conversación. Las ediciones se guardan en tu espacio de trabajo y se aplican en la próxima respuesta.',
|
||
'settings.persona.soul.editorLabel': 'contenido de SOUL.md',
|
||
'settings.persona.soul.reset': 'Restablecer a predeterminado',
|
||
'settings.persona.soul.usingDefault': 'Usando el predeterminado incluido',
|
||
'settings.persona.soul.loadError': 'No se pudo cargar SOUL.md',
|
||
'settings.persona.soul.saveError': 'No se pudo guardar SOUL.md',
|
||
'settings.persona.soul.resetError': 'No se pudo restablecer SOUL.md',
|
||
'settings.persona.appearanceHeading': 'Avatar y Voz',
|
||
'settings.persona.appearanceDesc':
|
||
'El color de la mascota, el avatar personalizado GIF y la voz de respuesta se configuran en los ajustes de la mascota.',
|
||
'settings.persona.openMascotSettings': 'Abrir la configuración de Mascota',
|
||
'settings.memoryWindow.balanced.badge': 'Recomendado',
|
||
'settings.memoryWindow.balanced.hint':
|
||
'Predeterminado sensato — buena continuidad sin quemar tokens extra en cada ejecución.',
|
||
'settings.memoryWindow.balanced.label': 'Equilibrado',
|
||
'settings.memoryWindow.description':
|
||
'Cuánto contexto recordado inyecta OpenHuman en cada nueva ejecución del agente. Ventanas más grandes parecen más conscientes de conversaciones pasadas, pero usan más tokens — y cuestan más — en cada ejecución.',
|
||
'settings.memoryWindow.extended.badge': 'Más contexto',
|
||
'settings.memoryWindow.extended.hint':
|
||
'Más memoria a largo plazo inyectada en cada ejecución. Mayor coste de tokens por turno.',
|
||
'settings.memoryWindow.extended.label': 'Extendido',
|
||
'settings.memoryWindow.maximum.badge': 'Mayor coste',
|
||
'settings.memoryWindow.maximum.hint':
|
||
'La ventana segura más grande. Mejor continuidad, factura de tokens significativamente mayor en cada ejecución.',
|
||
'settings.memoryWindow.maximum.label': 'Máximo',
|
||
'settings.memoryWindow.minimal.badge': 'Más barato',
|
||
'settings.memoryWindow.minimal.hint':
|
||
'Ventana de memoria más pequeña. La más barata, rápida y con menor continuidad entre ejecuciones.',
|
||
'settings.memoryWindow.minimal.label': 'Mínimo',
|
||
'settings.memoryWindow.title': 'Ventana de memoria a largo plazo',
|
||
'settings.modelHealth.title': 'Salud del modelo',
|
||
'settings.modelHealth.desc':
|
||
'Comparación por modelo de calidad, tasa de alucinaciones y costo entre los modelos activos',
|
||
'settings.modelHealth.allStatuses': 'Todos los estados',
|
||
'settings.modelHealth.models': 'modelos',
|
||
'settings.modelHealth.loading': 'Cargando datos del modelo...',
|
||
'settings.modelHealth.empty': 'No hay modelos registrados',
|
||
'settings.modelHealth.col.model': 'Modelo',
|
||
'settings.modelHealth.col.quality': 'Calidad',
|
||
'settings.modelHealth.col.halluc': 'Tasa de alucinación',
|
||
'settings.modelHealth.col.cost': 'Costo / 1M salido',
|
||
'settings.modelHealth.col.agents': 'Agentes',
|
||
'settings.modelHealth.col.status': 'Estado',
|
||
'settings.modelHealth.badge.keep': 'Mantener',
|
||
'settings.modelHealth.badge.replace': 'Reemplazar',
|
||
'settings.modelHealth.badge.staging': 'Prueba de preparación',
|
||
'settings.modelHealth.badge.vision': 'Solo visión',
|
||
'settings.modelHealth.swap': '¿Intercambiar?',
|
||
'settings.modelHealth.modal.title': '¿Reemplazar modelo?',
|
||
'settings.modelHealth.modal.hallucRate': 'Tasa de alucinación',
|
||
'settings.modelHealth.modal.cancel': 'Cancelar',
|
||
'settings.modelHealth.modal.apply': 'Aplicar reemplazo',
|
||
'settings.modelHealth.tag.cheaper': 'CHEAPER',
|
||
'settings.modelHealth.tag.better': 'BETTER',
|
||
'settings.screenIntel.permissions.accessibility': 'Accesibilidad',
|
||
'settings.screenIntel.permissions.grantHint': 'Sugerencia de permiso',
|
||
'settings.screenIntel.permissions.inputMonitoring': 'Monitoreo de entrada',
|
||
'settings.screenIntel.permissions.macosAppliesPrivacy': 'macOS aplica privacidad',
|
||
'settings.screenIntel.permissions.openInputMonitoring': 'Solicitando…',
|
||
'settings.screenIntel.permissions.refreshStatus': 'Actualizando…',
|
||
'settings.screenIntel.permissions.refreshing': 'Actualizando…',
|
||
'settings.screenIntel.permissions.requestAccessibility': 'Solicitando…',
|
||
'settings.screenIntel.permissions.requestScreenRecording': 'Solicitando…',
|
||
'settings.screenIntel.permissions.requesting': 'Solicitando…',
|
||
'settings.screenIntel.permissions.restartRefresh': 'Reiniciando core…',
|
||
'settings.screenIntel.permissions.restartingCore': 'Reiniciando core…',
|
||
'settings.screenIntel.permissions.screenRecording': 'Grabación de pantalla',
|
||
'settings.screenIntel.permissions.title': 'Permisos',
|
||
'skills.card.moreActions': 'Más acciones',
|
||
'skills.channelIcon.discord': 'Discord',
|
||
'skills.channelIcon.imessage': 'iMessage',
|
||
'skills.channelIcon.telegram': 'Telegram',
|
||
'skills.channelIcon.web': 'Web',
|
||
'skills.channelIcon.yuanbao': 'Yuanbao',
|
||
'skills.composio.poweredBy': 'Desarrollado por Composio',
|
||
'skills.composio.staleStatusTitle': 'Las conexiones muestran un estado obsoleto',
|
||
'skills.create.allowedTools': 'Herramientas permitidas',
|
||
'skills.create.allowedToolsHelp': 'Representado en el frontmatter de SKILL.md como',
|
||
'skills.create.allowedToolsPlaceholder': 'node_exec, buscar',
|
||
'skills.create.author': 'Autor',
|
||
'skills.create.authorPlaceholder': 'Tu nombre',
|
||
'skills.create.commaSeparated': '(separado por comas)',
|
||
'skills.create.createBtn': 'Crear habilidad',
|
||
'skills.create.createError': 'No se pudo crear el skill',
|
||
'skills.create.creating': 'Creando…',
|
||
'skills.create.description': 'Descripción',
|
||
'skills.create.descriptionPlaceholder': '¿Qué hace este skill?',
|
||
'skills.create.optional': '(opcional)',
|
||
'skills.create.inputs.heading': 'Inputs',
|
||
'skills.create.inputs.help':
|
||
'Declara los parámetros que necesita la habilidad. El ejecutor de habilidades mostrará un formulario para estos en tiempo de ejecución.',
|
||
'skills.create.inputs.add': 'Agregar entrada',
|
||
'skills.create.inputs.row.name': 'Nombre de la entrada',
|
||
'skills.create.inputs.row.namePlaceholder': 'p. ej., repo',
|
||
'skills.create.inputs.row.nameError':
|
||
'Solo letras, dígitos, guiones bajos y guiones; debe comenzar con una letra.',
|
||
'skills.create.inputs.row.description': 'Descripción de la entrada',
|
||
'skills.create.inputs.row.descriptionPlaceholder': '¿Qué va en este campo?',
|
||
'skills.create.inputs.row.type': 'Type',
|
||
'skills.create.inputs.row.required': 'Required',
|
||
'skills.create.inputs.row.remove': 'Eliminar entrada',
|
||
'skills.create.inputs.type.string': 'Text',
|
||
'skills.create.inputs.type.integer': 'Number',
|
||
'skills.create.inputs.type.boolean': 'Sí / No',
|
||
'skills.create.license': 'Licencia',
|
||
'skills.create.licensePlaceholder': 'MIT',
|
||
'skills.create.name': 'Nombre',
|
||
'skills.create.namePlaceholder': 'p. ej. Trade Journal',
|
||
'skills.create.scope': 'Alcance',
|
||
'skills.create.scopeProjectHint': '/.openhuman/habilidades/',
|
||
'skills.create.scopeUserHint':
|
||
'Se escribe en ~/.openhuman/skills/<slug>/SKILL.md — disponible en todos los espacios de trabajo.',
|
||
'skills.create.slugLabel': 'Etiqueta de slug',
|
||
'skills.create.subtitle': 'HABILIDAD.md',
|
||
'skills.create.tags': 'Etiquetas',
|
||
'skills.create.tagsPlaceholder': 'comercio, investigación',
|
||
'skills.create.title': 'Nueva habilidad',
|
||
'skills.detail.allowedTools': 'Herramientas permitidas',
|
||
'skills.detail.author': 'Autor',
|
||
'skills.detail.bundledResources': 'Recursos incluidos',
|
||
'skills.detail.closeAriaLabel': 'Cerrar detalles del skill',
|
||
'skills.detail.location': 'Ubicación',
|
||
'skills.detail.noBundledResources': 'Sin recursos incluidos.',
|
||
'skills.detail.tags': 'Etiquetas',
|
||
'skills.detail.warnings': 'Advertencias',
|
||
'skills.install.errors.alreadyInstalledHint':
|
||
'Ya existe una habilidad con esta babosa en el espacio de trabajo. Elimínelo primero o cambie el frontmatter `metadata.id`/`name`.',
|
||
'skills.install.errors.alreadyInstalledTitle': 'Habilidad ya instalada',
|
||
'skills.install.errors.fetchFailedHint':
|
||
'La solicitud no se completó correctamente. Verifique que URL apunte a un archivo público accesible y que el host haya devuelto una respuesta 2xx.',
|
||
'skills.install.errors.fetchFailedTitle': 'Error de recuperación',
|
||
'skills.install.errors.fetchTimedOutHint':
|
||
'El host remoto no respondió a tiempo. Inténtelo de nuevo o aumente el tiempo de espera (1-600 s).',
|
||
'skills.install.errors.fetchTimedOutTitle': 'Se agotó el tiempo de recuperación',
|
||
'skills.install.errors.fetchTooLargeHint':
|
||
'SKILL.md debe tener menos de 1 MiB. Divida los recursos empaquetados en archivos `references/` o `scripts/` en lugar de insertarlos.',
|
||
'skills.install.errors.fetchTooLargeTitle': 'SKILL.md demasiado grande',
|
||
'skills.install.errors.genericHint':
|
||
'El servidor devolvió un error. El mensaje sin formato se muestra a continuación.',
|
||
'skills.install.errors.genericTitle': 'No se pudo instalar la habilidad',
|
||
'skills.install.errors.invalidSkillHint':
|
||
'El frontmatter debe ser YAML válido con campos `nombre` y `descripción` no vacíos, terminados en `---`.',
|
||
'skills.install.errors.invalidSkillTitle': 'SKILL.md no analizó',
|
||
'skills.install.errors.invalidUrlHint':
|
||
'Solo se permiten HTTPS URLs públicos. Los hosts privados, de bucle invertido y de metadatos están bloqueados.',
|
||
'skills.install.errors.invalidUrlTitle': 'URL rechazado',
|
||
'skills.install.errors.unsupportedUrlHint':
|
||
'Sólo funcionan los enlaces directos `.md`. Para GitHub, enlace a un archivo (github.com/owner/repo/blob/.../SKILL.md): las raíces del árbol y del repositorio no están instaladas.',
|
||
'skills.install.errors.unsupportedUrlTitle': 'Formulario URL no compatible',
|
||
'skills.install.errors.writeFailedHint':
|
||
'No se podía escribir en el directorio de habilidades del espacio de trabajo. Verifique los permisos del sistema de archivos para `<workspace>/.openhuman/skills/`.',
|
||
'skills.install.errors.writeFailedTitle': 'No se pudo escribir SKILL.md',
|
||
'skills.install.fetchLog': 'Obtener registro',
|
||
'skills.install.fetchingPrefix': 'buscando',
|
||
'skills.install.fetchingSuffix':
|
||
'esto puede tardar hasta el tiempo de espera que haya configurado.',
|
||
'skills.install.installBtn': 'Instalando…',
|
||
'skills.install.installComplete': 'Instalación completa',
|
||
'skills.install.installing': 'Instalando…',
|
||
'skills.install.parseWarnings': 'Advertencias de análisis',
|
||
'skills.install.rawError': 'Error sin procesar',
|
||
'skills.install.subtitleMiddle': 'sobre HTTPS y lo instala bajo',
|
||
'skills.install.subtitlePrefix': 'Obtiene un solo',
|
||
'skills.install.subtitleSuffix':
|
||
'HTTPS solamente; Los hosts privados y de loopback están bloqueados.',
|
||
'skills.install.successDiscovered': 'Descubrí {count} nuevas habilidades.',
|
||
'skills.install.successNoNewIds':
|
||
'Habilidad instalada, pero no aparecieron nuevos identificadores de habilidad; es posible que el catálogo ya contenga una habilidad con el mismo slug.',
|
||
'skills.install.timeoutHint': '(segundos, opcional)',
|
||
'skills.install.timeoutHelp':
|
||
'El valor predeterminado es 60 segundos. Los valores fuera de 1-600 se bloquean en el lado del servidor.',
|
||
'skills.install.timeoutInvalid': 'Debe ser un número entero entre 1 y 600.',
|
||
'skills.install.timeoutLabel': 'Etiqueta de tiempo límite',
|
||
'skills.install.timeoutPlaceholder': '60',
|
||
'skills.install.title': 'Instalar habilidad desde URL',
|
||
'skills.install.urlHelpMiddle': 'archivo.',
|
||
'skills.install.urlHelpPrefix': 'Enlace directo a un',
|
||
'skills.install.urlHelpSuffix': 'URLs reescritura automática a',
|
||
'skills.install.urlInvalidPrefix': 'URL debe ser un bien formado',
|
||
'skills.install.urlInvalidSuffix': 'enlace.',
|
||
'skills.install.urlLabel': 'URL de la habilidad',
|
||
'skills.install.urlPlaceholder': 'https://raw.githubusercontent.com/owner/repo/main/SKILL.md',
|
||
'skills.meetingBots.bannerDesc': 'Descripción del banner',
|
||
'skills.meetingBots.bannerTitle': 'Título del banner',
|
||
'skills.meetingBots.busyTitle': 'OpenHuman está ocupado',
|
||
'skills.meetingBots.comingSoon': 'Próximamente',
|
||
'skills.meetingBots.couldNotStartTitle': 'No se pudo iniciar OpenHuman',
|
||
'skills.meetingBots.displayName': 'Nombre de visualización',
|
||
'skills.meetingBots.failedToStart': 'No se pudo iniciar OpenHuman.',
|
||
'skills.meetingBots.joiningMessage': 'Debería aparecer como participante en unos segundos.',
|
||
'skills.meetingBots.joiningTitle': 'OpenHuman se está uniendo a la reunión',
|
||
'skills.meetingBots.meetingLink': 'Enlace de la reunión',
|
||
'skills.meetingBots.modalAriaLabel': 'Enviar OpenHuman a una reunión',
|
||
'skills.meetingBots.modalDesc': 'Descripción del modal',
|
||
'skills.meetingBots.modalTitle': 'Enviar OpenHuman a una reunión',
|
||
'skills.meetingBots.newBadge': 'Nuevo',
|
||
'skills.meetingBots.platformComingSoon': 'El soporte de {label} llegará pronto.',
|
||
'skills.meetingBots.platformHints.gmeet': 'meet.google.com/abc-defg-hij',
|
||
'skills.meetingBots.platformHints.teams': 'equipos.microsoft.com/...',
|
||
'skills.meetingBots.platformHints.zoom': 'zoom.us/j/...',
|
||
'skills.meetingBots.platforms.gmeet': 'Google Conocer',
|
||
'skills.meetingBots.platforms.teams': 'Equipos de Microsoft',
|
||
'skills.meetingBots.platforms.zoom': 'Ampliar',
|
||
'skills.meetingBots.sendTo': 'Enviar a',
|
||
'skills.meetingBots.soonSuffix': 'pronto',
|
||
'skills.meetingBots.starting': 'Iniciando…',
|
||
'skills.resource.preview.closeAriaLabel': 'Cerrar vista previa',
|
||
'skills.resource.preview.failed': 'Vista previa fallida',
|
||
'skills.resource.preview.loading': 'Cargando vista previa…',
|
||
'skills.resource.tree.empty': 'Sin recursos incluidos.',
|
||
'skills.search.placeholder': 'Marcador de posición',
|
||
'skills.setup.autocomplete.acceptKey': 'Tecla de aceptación',
|
||
'skills.setup.autocomplete.activeDesc': 'Descripción activa',
|
||
'skills.setup.autocomplete.activeTitle': 'Autocompletado está activo',
|
||
'skills.setup.autocomplete.customizeSettings': 'Personalizar configuración',
|
||
'skills.setup.autocomplete.debounce': 'rebote',
|
||
'skills.setup.autocomplete.description': 'Descripción',
|
||
'skills.setup.autocomplete.enableBtn': 'Activando...',
|
||
'skills.setup.autocomplete.enableError': 'No se pudo activar el autocompletado',
|
||
'skills.setup.autocomplete.enabling': 'Activando...',
|
||
'skills.setup.autocomplete.notSupported': 'No compatible',
|
||
'skills.setup.autocomplete.stepEnable': 'Activar completados en línea',
|
||
'skills.setup.autocomplete.stepSuccess': 'Listo para usar',
|
||
'skills.setup.autocomplete.stylePreset': 'Estilo predeterminado',
|
||
'skills.setup.autocomplete.stylePresetValue': 'Equilibrado (configurable después)',
|
||
'skills.setup.autocomplete.title': 'Autocompletado de texto',
|
||
'skills.setup.screenIntel.activeDesc': 'Descripción activa',
|
||
'skills.setup.screenIntel.activeTitle': 'Inteligencia de pantalla está activada',
|
||
'skills.setup.screenIntel.advancedSettings': 'Configuración avanzada',
|
||
'skills.setup.screenIntel.allGranted': 'Todos los permisos otorgados',
|
||
'skills.setup.screenIntel.captureMode': 'Modo de captura',
|
||
'skills.setup.screenIntel.captureModeValue': 'Todas las ventanas (configurable después)',
|
||
'skills.setup.screenIntel.deniedHint':
|
||
'Después de otorgar permisos en Configuración del sistema, haz clic abajo para reiniciar y aplicar los cambios.',
|
||
'skills.setup.screenIntel.enableBtn': 'Activando...',
|
||
'skills.setup.screenIntel.enableDesc': 's en tu pantalla y añade contexto útil a tu agente',
|
||
'skills.setup.screenIntel.enableError': 'No se pudo activar la Inteligencia de pantalla',
|
||
'skills.setup.screenIntel.enabling': 'Activando...',
|
||
'skills.setup.screenIntel.grant': 'Abriendo...',
|
||
'skills.setup.screenIntel.granted': 'Otorgado',
|
||
'skills.setup.screenIntel.macosOnly': 'Solo macOS',
|
||
'skills.setup.screenIntel.opening': 'Abriendo...',
|
||
'skills.setup.screenIntel.panicHotkey': 'Tecla de pánico',
|
||
'skills.setup.screenIntel.permAccessibility': 'Accesibilidad',
|
||
'skills.setup.screenIntel.permInputMonitoring': 'Monitoreo de entrada',
|
||
'skills.setup.screenIntel.permScreenRecording': 'Grabación de pantalla',
|
||
'skills.setup.screenIntel.permissionsDesc': 'Descripción de permisos',
|
||
'skills.setup.screenIntel.permissionPathLabel': 'macOS aplica la privacidad a:',
|
||
'skills.setup.screenIntel.refreshStatus': 'Actualizar estado',
|
||
'skills.setup.screenIntel.restartRefresh': 'Reiniciando...',
|
||
'skills.setup.screenIntel.restarting': 'Reiniciando...',
|
||
'skills.setup.screenIntel.stepEnable': 'Activar el skill',
|
||
'skills.setup.screenIntel.stepPermissions': 'Otorgar permisos',
|
||
'skills.setup.screenIntel.stepSuccess': 'Listo para usar',
|
||
'skills.setup.screenIntel.title': 'Inteligencia de pantalla',
|
||
'skills.setup.screenIntel.visionModel': 'Modelo de visión',
|
||
'skills.setup.voice.activation': 'Activación',
|
||
'skills.setup.voice.activeDescPrefix': 'fn',
|
||
'skills.setup.voice.activeDescSuffix': 'fn',
|
||
'skills.setup.voice.activeTitle': 'Inteligencia de voz está activa',
|
||
'skills.setup.voice.customizeSettings': 'Personalizar configuración',
|
||
'skills.setup.voice.downloadSttBtn': 'Descargar modelo STT',
|
||
'skills.setup.voice.enableDesc': 'Descripción de activación',
|
||
'skills.setup.voice.hotkey': 'Tecla de acceso rápido',
|
||
'skills.setup.voice.startBtn': 'Iniciando...',
|
||
'skills.setup.voice.startError': 'No se pudo iniciar el servidor de voz',
|
||
'skills.setup.voice.starting': 'Iniciando...',
|
||
'skills.setup.voice.stepEnable': 'Iniciar servidor de voz',
|
||
'skills.setup.voice.stepSetup': 'Se requiere descarga del modelo',
|
||
'skills.setup.voice.stepSuccess': 'Listo para usar',
|
||
'skills.setup.voice.sttNotReady': 'Modelo de voz a texto no listo',
|
||
'skills.setup.voice.sttNotReadyDesc':
|
||
'La Inteligencia de voz requiere un modelo local de Whisper para transcripción. Descárgalo desde la configuración de Modelo local.',
|
||
'skills.setup.voice.sttReady': 'Modelo de voz a texto listo',
|
||
'skills.setup.voice.sttReturnHint': 'Sugerencia de retorno STT',
|
||
'skills.setup.voice.title': 'Inteligencia de voz',
|
||
'skills.uninstall.couldNotUninstall': 'No se pudo desinstalar',
|
||
'skills.uninstall.description':
|
||
'Esto elimina permanentemente el directorio de la habilidad y todos sus recursos incluidos. El agente dejará de verlo en el próximo turno.',
|
||
'skills.uninstall.title': 'Desinstalar',
|
||
'skills.uninstall.uninstallBtn': 'Desinstalar',
|
||
'skills.uninstall.uninstalling': 'Desinstalando…',
|
||
'upsell.global.limitMessage': 'Mejora tu plan o recarga créditos para continuar',
|
||
'upsell.global.limitTitle': 'Tú',
|
||
'upsell.global.nearLimitMessage':
|
||
'Has usado el {pct}% de tu límite de uso. Mejora el plan para límites más altos.',
|
||
'upsell.global.nearLimitTitle': 'Acercándote al límite de uso',
|
||
'upsell.usageLimit.bodyBudget':
|
||
'Has alcanzado tu límite semanal.{reset} Mejora tu plan o recarga créditos para evitar límites.',
|
||
'upsell.usageLimit.bodyRate':
|
||
'Has alcanzado tu límite de inferencia de 10 horas.{reset} Mejora para obtener límites más altos.',
|
||
'upsell.usageLimit.heading': 'Límite de uso alcanzado',
|
||
'upsell.usageLimit.notNow': 'Ahora no',
|
||
'upsell.usageLimit.perWindow': '{amount}',
|
||
'upsell.usageLimit.planIncludes': '{plan}',
|
||
'upsell.usageLimit.resetsIn': 'Se restablece {time}.',
|
||
'upsell.usageLimit.upgradePlan': 'Mejorar plan',
|
||
'upsell.usageLimit.weeklyInference': '{amount}',
|
||
'walkthrough.tooltip.letsGo': '¡Vamos!',
|
||
'walkthrough.tooltip.next': 'Siguiente →',
|
||
'walkthrough.tooltip.skip': 'Omitir tour',
|
||
'walkthrough.tooltip.stepCounter': '{n} de {total}',
|
||
'webhooks.activity.empty': 'Vacío',
|
||
'webhooks.activity.title': 'Actividad reciente',
|
||
'webhooks.composioHistory.empty': 'Vacío',
|
||
'webhooks.composioHistory.metadataId': 'ID de metadatos',
|
||
'webhooks.composioHistory.metadataUuid': 'UUID de metadatos',
|
||
'webhooks.composioHistory.payload': 'Carga útil',
|
||
'webhooks.composioHistory.title': 'Historial de disparadores de Composio',
|
||
'webhooks.tunnels.active': 'Activo',
|
||
'webhooks.tunnels.createFailed': 'No se pudo crear el túnel',
|
||
'webhooks.tunnels.creating': 'Creando...',
|
||
'webhooks.tunnels.deleteFailed': 'No se pudo eliminar el túnel',
|
||
'webhooks.tunnels.descriptionPlaceholder': 'Descripción (opcional)',
|
||
'webhooks.tunnels.echo': 'eco',
|
||
'webhooks.tunnels.empty': 'Vacío',
|
||
'webhooks.tunnels.enableEcho': 'Activar echo',
|
||
'webhooks.tunnels.inactive': 'Inactivo',
|
||
'webhooks.tunnels.namePlaceholder': 'Nombre del túnel (p. ej. telegram-bot)',
|
||
'webhooks.tunnels.newTunnel': 'Nuevo túnel',
|
||
'webhooks.tunnels.removeEcho': 'Eliminar echo',
|
||
'webhooks.tunnels.title': 'Túneles de webhook',
|
||
'webhooks.tunnels.toggleFailed': 'No se pudo alternar el echo',
|
||
'composio.directModeRequiresKey':
|
||
'Error al guardar. El modo Directo requiere una clave API no vacía.',
|
||
'composio.integrationSlugsHelp': 'Slugs de integración separados por comas, p.',
|
||
'composio.integrationSlugsExample': 'gmail, flojo',
|
||
'composio.integrationSlugsCaseInsensitive': 'No distingue entre mayúsculas y minúsculas.',
|
||
'composio.integrationSlugsPlaceholder': 'gmail, holgura, ...',
|
||
'composio.notYetRouted': 'aún sin enrutar',
|
||
'composio.triggers.loading': 'Cargando…',
|
||
'conversations.taskKanban.todo': 'Pendiente',
|
||
'chat.addReaction': 'Añadir reacción',
|
||
'chat.agentProfile.create': 'Crear perfil de agente',
|
||
'chat.agentProfile.createFailed': 'No se pudo crear el perfil del agente.',
|
||
'chat.agentProfile.customDescription': 'Perfil de agente personalizado',
|
||
'chat.agentProfile.defaultAgentLabel': 'orquestador',
|
||
'chat.agentProfile.exists': 'El perfil del agente "{name}" ya existe.',
|
||
'chat.agentProfile.label': 'Perfil del agente',
|
||
'chat.agentProfile.namePlaceholder': 'Nombre del perfil',
|
||
'chat.agentProfile.promptStylePlaceholder': 'estilo rápido',
|
||
'chat.agentProfile.allowedToolsPlaceholder': 'Herramientas permitidas',
|
||
'chat.backToThread': 'volver a {title}',
|
||
'chat.parentThread': 'hilo principal',
|
||
'chat.removeReaction': 'Quitar {emoji}',
|
||
'settings.composio.loading': 'Cargando…',
|
||
'settings.mascot.noCharactersAvailable': 'Aún no hay personajes de OpenHuman disponibles',
|
||
'skills.uninstall.confirmTitle': '¿Desinstalar {name}?',
|
||
'conversations.taskKanban.blocked': 'Bloqueado',
|
||
'conversations.taskKanban.done': 'Completado',
|
||
'conversations.taskKanban.pending': 'Pendiente',
|
||
'conversations.taskKanban.working': 'Laboral',
|
||
'conversations.taskKanban.awaitingApproval': 'En espera de aprobación',
|
||
'conversations.taskKanban.ready': 'Listo',
|
||
'conversations.taskKanban.rejected': 'Rechazado',
|
||
'conversations.taskKanban.inProgress': 'En progreso',
|
||
'intelligence.memoryChunk.detail.copiedHint': 'copiado',
|
||
'settings.composio.notYetRouted': 'aún sin enrutar',
|
||
'settings.localModel.download.manageExternal': 'Gestiona este modelo en tu runtime externo.',
|
||
'settings.localModel.status.manageOllamaExternal':
|
||
'Gestiona el proceso de Ollama y las descargas de modelos fuera de OpenHuman, luego vuelve a ejecutar los diagnósticos.',
|
||
'settings.localModel.status.ollamaDocs': 'Documentación de Ollama',
|
||
'settings.localModel.status.thenRetry':
|
||
'para instrucciones de configuración, luego reintenta cuando tu runtime sea accesible.',
|
||
'devOptions.menuAi': 'Configuración de IA',
|
||
'devOptions.menuAiDesc':
|
||
'Proveedores de nube, modelos Ollama locales y enrutamiento por carga de trabajo',
|
||
'devOptions.menuScreenAware': 'Conciencia de pantalla',
|
||
'devOptions.menuScreenAwareDesc':
|
||
'Permisos de captura de pantalla, política de monitoreo y controles de sesión',
|
||
'devOptions.menuMessaging': 'Canales de mensajería',
|
||
'devOptions.menuMessagingDesc':
|
||
'Configurar los modos de autenticación Telegram/Discord y el enrutamiento de canales predeterminado',
|
||
'devOptions.menuTools': 'Herramientas',
|
||
'devOptions.menuToolsDesc':
|
||
'Habilitar o deshabilitar capacidades que OpenHuman puede usar en su nombre',
|
||
'devOptions.menuAgentChat': 'Chat de agente',
|
||
'devOptions.menuAgentChatDesc':
|
||
'Conversación del agente de prueba con anulaciones de modelo y temperatura',
|
||
'devOptions.menuCronJobs': 'Trabajos cronificados',
|
||
'devOptions.menuCronJobsDesc':
|
||
'Ver y configurar trabajos programados para habilidades en tiempo de ejecución',
|
||
'devOptions.menuLocalModelDebug': 'Depuración del modelo local',
|
||
'devOptions.menuLocalModelDebugDesc':
|
||
'Ollama configuración, descargas de activos, pruebas de modelos y diagnósticos',
|
||
'devOptions.menuWebhooksDebug': 'Ganchos web',
|
||
'devOptions.menuWebhooksDebugDesc':
|
||
'Inspeccionar los registros de webhooks en tiempo de ejecución y los registros de solicitudes capturados',
|
||
'devOptions.menuIntelligence': 'Inteligencia',
|
||
'devOptions.menuIntelligenceDesc':
|
||
'Espacio de trabajo de la memoria, motor subconsciente, sueños y escenarios.',
|
||
'devOptions.menuNotificationRouting': 'Enrutamiento de notificaciones',
|
||
'devOptions.menuNotificationRoutingDesc':
|
||
'Puntuación de importancia de la IA y escalamiento del orquestador para alertas de integración',
|
||
'devOptions.menuComposeIOTriggers': 'Activadores de ComposeIO',
|
||
'devOptions.menuComposeIOTriggersDesc':
|
||
'Ver el historial y el archivo de activadores de ComposeIO',
|
||
'devOptions.menuComposioRouting': 'Composio Enrutamiento (modo directo)',
|
||
'devOptions.menuComposioRoutingDesc':
|
||
'Traiga su propia clave Composio API y enrute las llamadas directamente a backend.composio.dev',
|
||
'devOptions.menuComposioTriggers': 'Desencadenantes de integración',
|
||
'devOptions.menuComposioTriggersDesc':
|
||
'Configurar los ajustes de clasificación de IA para los activadores de integración Composio',
|
||
'memory.sourceFilterAria': 'Filtrar por fuente',
|
||
'calls.comingSoonDescription': 'Las llamadas asistidas por IA llegarán pronto. Mantente atento.',
|
||
'whatsapp.title': 'WhatsApp',
|
||
'subconscious.priority.critical': 'crítico',
|
||
'subconscious.priority.important': 'importante',
|
||
'subconscious.priority.normal': 'normales',
|
||
'subconscious.durationSeconds': '{seconds}s',
|
||
'subconscious.durationMilliseconds': '{milliseconds}ms',
|
||
'settings.appearance': 'Apariencia',
|
||
'settings.appearanceDesc': 'Elija claro, oscuro o combine el tema de su sistema',
|
||
'settings.mascot': 'mascota',
|
||
'settings.mascotDesc': 'Elija el color de mascota utilizado en la aplicación',
|
||
'pages.settings.account.walletBalances': 'Saldos de billetera',
|
||
'pages.settings.account.walletBalancesDesc':
|
||
'Ver saldos en múltiples cadenas de tu billetera local',
|
||
'walletBalances.title': 'Saldos de billetera',
|
||
'walletBalances.refresh': 'Refresh',
|
||
'walletBalances.loading': 'Cargando saldos…',
|
||
'walletBalances.retry': 'Retry',
|
||
'walletBalances.emptyState':
|
||
'Aún no hay cuentas de billetera — configura una billetera en Frase de recuperación.',
|
||
'walletBalances.copyAddress': 'Copiar dirección',
|
||
'walletBalances.providerMissing': 'proveedor no disponible',
|
||
'walletBalances.rawBalance': 'Bruto: {raw}',
|
||
'walletBalances.errorGeneric':
|
||
'No se pueden cargar los saldos de la billetera. Configura tu billetera en Frase de recuperación e inténtalo de nuevo.',
|
||
'walletBalances.setupHint':
|
||
'Tu frase de recuperación aún no está configurada. Configúrala para activar tu monedero y ver los saldos en vivo.',
|
||
'walletBalances.setupCta': 'Configurar frase de recuperación',
|
||
'walletBalances.notSetUp': 'Sin configurar',
|
||
'walletBalances.send': 'Enviar',
|
||
'walletBalances.receive': 'Recibir',
|
||
'walletReceive.scanHint':
|
||
'Escanea este código o copia la dirección de abajo para recibir fondos.',
|
||
'walletReceive.addressLabel': 'Dirección de {network}',
|
||
'walletReceive.onlyChainWarning':
|
||
'Envía solo activos de {network} a esta dirección. Enviar activos de otra red puede provocar una pérdida permanente.',
|
||
'walletSend.available': 'Disponible',
|
||
'walletSend.recipient': 'Dirección del destinatario',
|
||
'walletSend.recipientPlaceholder': 'Pega la dirección de destino',
|
||
'walletSend.recipientRequired': 'Introduce una dirección de destinatario',
|
||
'walletSend.amount': 'Importe',
|
||
'walletSend.invalidAmount': 'Introduce un importe válido',
|
||
'walletSend.review': 'Revisar',
|
||
'walletSend.preparing': 'Preparando…',
|
||
'walletSend.confirmHint':
|
||
'Revisa los detalles a continuación. La firma se realiza localmente; no se transmite nada hasta que confirmes.',
|
||
'walletSend.estimatedFee': 'Comisión de red estimada',
|
||
'walletSend.confirmSend': 'Confirmar y enviar',
|
||
'walletSend.sending': 'Enviando…',
|
||
'walletSend.sent': 'Transacción enviada',
|
||
'walletSend.txHash': 'Hash de la transacción',
|
||
'walletSend.viewExplorer': 'Ver en el explorador',
|
||
'walletSend.done': 'Hecho',
|
||
'walletSend.genericError': 'No se pudo completar la transferencia. Inténtalo de nuevo.',
|
||
'settings.taskSources.title': 'Fuentes de tareas',
|
||
'settings.taskSources.subtitle':
|
||
'Extrae tareas de tus herramientas al tablero de tareas del agente',
|
||
'settings.taskSources.description':
|
||
'Recopila elementos de trabajo de GitHub, Notion, Linear y ClickUp, enriquétalos y dirígelos al tablero de tareas del agente.',
|
||
'settings.taskSources.connectHint':
|
||
'Las fuentes de tareas utilizan tus cuentas conectadas. Conéctalas primero en Integraciones.',
|
||
'settings.taskSources.disabledBanner':
|
||
'Las fuentes de tareas están deshabilitadas en la configuración. Actívalas para que se actualicen automáticamente.',
|
||
'settings.taskSources.loadError': 'Error al cargar las fuentes de la tarea',
|
||
'settings.taskSources.addTitle': 'Agregar una fuente de tarea',
|
||
'settings.taskSources.provider': 'proveedor',
|
||
'settings.taskSources.name': 'Nombre (opcional)',
|
||
'settings.taskSources.namePlaceholder': 'p. ej. Mis asuntos abiertos',
|
||
'settings.taskSources.github.repo': 'Repositorio (propietario/nombre, opcional)',
|
||
'settings.taskSources.github.labels': 'Etiquetas (separadas por comas)',
|
||
'settings.taskSources.notion.database': 'ID de la base de datos (tablero)',
|
||
'settings.taskSources.linear.team': 'ID del equipo (opcional)',
|
||
'settings.taskSources.clickup.team': 'ID del espacio de trabajo (equipo) (opcional)',
|
||
'settings.taskSources.assignedToMe': 'Solo los elementos asignados a mí',
|
||
'settings.taskSources.add': 'Agregar fuente',
|
||
'settings.taskSources.adding': 'Agregando…',
|
||
'settings.taskSources.preview': 'Avance',
|
||
'settings.taskSources.previewResult': 'La(s) tarea(s) {count} coinciden con este filtro',
|
||
'settings.taskSources.fetchNow': 'Trae ahora',
|
||
'settings.taskSources.fetching': 'Obteniendo…',
|
||
'settings.taskSources.fetchResult': 'Enrutado {routed} de la(s) tarea(s) {fetched}',
|
||
'settings.taskSources.configured': 'Fuentes configuradas',
|
||
'settings.taskSources.empty': 'Aún no se han configurado fuentes de tareas.',
|
||
'settings.taskSources.proactive': 'proactivo',
|
||
'settings.taskSources.lastFetch': 'Última búsqueda',
|
||
'settings.taskSources.never': 'Nunca',
|
||
'settings.taskSources.statusEnabled': 'Habilitado',
|
||
'settings.taskSources.statusDisabled': 'Deshabilitado',
|
||
'settings.taskSources.enable': 'Habilitar',
|
||
'settings.taskSources.disable': 'Desactivar',
|
||
'settings.taskSources.remove': 'Eliminar',
|
||
'settings.taskSources.removeConfirm':
|
||
'¿Eliminar esta fuente de tarea? Todo el historial de tareas ingeridas se eliminará y no se puede deshacer.',
|
||
'settings.taskSources.refresh': 'Refrescar',
|
||
'settings.taskSources.providers.github': 'GitHub',
|
||
'settings.taskSources.providers.notion': 'Noción',
|
||
'settings.taskSources.providers.linear': 'Lineal',
|
||
'settings.taskSources.providers.clickup': 'ClickUp',
|
||
'skills.dashboard.title': 'Skills',
|
||
'skills.dashboard.scheduledHeading': 'Habilidades programadas',
|
||
'skills.dashboard.emptyTitle': 'Sin habilidades programadas',
|
||
'skills.dashboard.emptyBody':
|
||
'Ejecuta una habilidad integrada una vez o guarda una programación recurrente para verla aquí.',
|
||
'skills.dashboard.create': 'Crear una habilidad',
|
||
'skills.dashboard.run': 'Ejecutar una habilidad',
|
||
'skills.dashboard.enable': 'Activar habilidad programada',
|
||
'skills.dashboard.disable': 'Desactivar habilidad programada',
|
||
'skills.dashboard.lastRun': 'Última ejecución',
|
||
'skills.dashboard.nextRun': 'Próxima ejecución',
|
||
'skills.dashboard.cardOpenRunner': 'Abrir en el ejecutor',
|
||
'skills.dashboard.loadError': 'Error al cargar las habilidades programadas',
|
||
'skills.new.title': 'Crear una habilidad',
|
||
'skills.new.placeholderBody':
|
||
'El formulario de creación llegará pronto. Por ahora, usa el botón «Nueva habilidad» en la página del ejecutor.',
|
||
'settings.agents.title': 'Agentes',
|
||
'settings.agents.subtitle':
|
||
'Administra los agentes disponibles para la delegación: los predeterminados integrados y tus propios agentes personalizados.',
|
||
'settings.agents.menuDesc': 'Administrar agentes integrados y personalizados',
|
||
'settings.agents.newAgent': 'Nuevo agente',
|
||
'settings.agents.loadError': 'No se pudieron cargar los agentes',
|
||
'settings.agents.empty': 'Todavía no hay agentes',
|
||
'settings.agents.sourceDefault': 'incorporado',
|
||
'settings.agents.sourceCustom': 'Personalizado',
|
||
'settings.agents.enable': 'Habilitar agente',
|
||
'settings.agents.disable': 'Desactivar agente',
|
||
'settings.agents.edit': 'Editar',
|
||
'settings.agents.delete': 'Borrar',
|
||
'settings.agents.reset': 'Restablecer a predeterminado',
|
||
'settings.agents.modelLabel': 'Modelo',
|
||
'settings.agents.toolsLabel': 'Herramientas',
|
||
'settings.agents.toolsAll': 'Todas las herramientas',
|
||
'settings.agents.toolsCount': 'herramientas {count}',
|
||
'settings.agents.actionFailed': 'No se pudo actualizar el agente',
|
||
'settings.agents.orchestratorLocked': 'El orquestador siempre está habilitado.',
|
||
'settings.agents.editor.createTitle': 'Nuevo agente',
|
||
'settings.agents.editor.editTitle': 'Editar agente',
|
||
'settings.agents.editor.id': 'ID',
|
||
'settings.agents.editor.idHint': 'Solo letras minúsculas, números, _ y -.',
|
||
'settings.agents.editor.name': 'Nombre',
|
||
'settings.agents.editor.description': 'Descripción',
|
||
'settings.agents.editor.model': 'Modelo (opcional)',
|
||
'settings.agents.editor.modelPlaceholder':
|
||
'por ejemplo, heredar, pista:rápido, o un id de modelo',
|
||
'settings.agents.editor.systemPrompt': 'Indicador del sistema (opcional)',
|
||
'settings.agents.editor.tools': 'Herramientas permitidas',
|
||
'settings.agents.editor.toolsHint':
|
||
'Un nombre de herramienta por línea. Usa * para todas las herramientas.',
|
||
'settings.agents.editor.defaultsNote':
|
||
'Editar un agente integrado guarda una anulación que puedes restablecer más tarde.',
|
||
'settings.agents.editor.save': 'Guardar',
|
||
'settings.agents.editor.create': 'Crear agente',
|
||
'settings.agents.editor.saving': 'Guardando…',
|
||
'nav.workflows': 'Workflows',
|
||
'workflows.title': 'Agent Workflows',
|
||
'workflows.subtitle': 'Lifecycle-bound rule sets that guide how the agent behaves during tasks.',
|
||
'workflows.createNew': 'New Workflow',
|
||
'workflows.listHeading': 'Workflows',
|
||
'workflows.delete': 'Delete Workflow',
|
||
'workflows.deleteError': 'Failed to delete workflow',
|
||
'workflows.warnings': '{count} warning(s)',
|
||
'workflows.empty.title': 'No workflows yet',
|
||
'workflows.empty.body':
|
||
'Create a workflow to define rules and scripts for task lifecycle phases.',
|
||
'workflows.create.title': 'New Workflow',
|
||
'workflows.create.subtitle': 'Define a lifecycle-bound rule set for the agent.',
|
||
'workflows.create.name': 'Name',
|
||
'workflows.create.namePlaceholder': 'e.g. Python project workflow',
|
||
'workflows.create.description': 'Description',
|
||
'workflows.create.descriptionPlaceholder': 'What does this workflow do?',
|
||
'workflows.create.whenToUse': 'When to use',
|
||
'workflows.create.whenToUsePlaceholder': 'When should the agent pick up this workflow?',
|
||
'workflows.create.optional': '(optional)',
|
||
'workflows.create.createBtn': 'Create workflow',
|
||
'workflows.create.creating': 'Creating…',
|
||
'workflows.create.createError': 'Could not create workflow',
|
||
'workflows.create.successTitle': 'Workflow created',
|
||
'workflows.create.successMessage': 'was created successfully.',
|
||
'workflows.deleteConfirm.title': 'Delete workflow',
|
||
'workflows.deleteConfirm.body': 'Remove "{name}"? This cannot be undone.',
|
||
'workflows.detail.tags': 'Tags',
|
||
'workflows.detail.location': 'Location',
|
||
'workflows.detail.warnings': 'Warnings',
|
||
'workflows.detail.phases': 'Phases',
|
||
'workflows.detail.noPhases': 'No phases defined.',
|
||
'workflows.detail.loadError': 'Failed to load full workflow',
|
||
'workflows.phase.rules': 'Rules',
|
||
'workflows.phase.rules.empty': 'No rules.',
|
||
'workflows.phase.scripts': 'Scripts',
|
||
'workflows.phase.scripts.empty': 'No scripts.',
|
||
'workflows.phase.toolScope': 'Tool scope',
|
||
'workflows.phase.toolScope.allow': 'Allow',
|
||
'workflows.phase.toolScope.deny': 'Deny',
|
||
'workflows.phase.toolScope.inherited': 'Inherited from workflow default.',
|
||
'workflows.phase.toolScope.empty': 'No tool restrictions.',
|
||
'workflows.phase.context': 'Context',
|
||
'workflows.phase.context.empty': 'No context providers.',
|
||
'settings.agentsSection.title': 'Agents',
|
||
'settings.agentsSection.description':
|
||
'Administra tus agentes, su autonomía y a qué pueden acceder en este equipo.',
|
||
'settings.agentsSection.menuDesc': 'Registro, autonomía y acceso al SO',
|
||
'settings.cryptoSection.title': 'Cripto',
|
||
'settings.cryptoSection.description':
|
||
'Gestiona tu frase de recuperación y consulta los saldos de tus cuentas de monedero.',
|
||
'settings.cryptoSection.menuDesc': 'Frase de recuperación y saldos del monedero',
|
||
'settings.notificationsHub.title': 'Notificaciones',
|
||
'settings.notificationsHub.description':
|
||
'Consulta tu bandeja de alertas y gestiona las preferencias de notificación y el enrutamiento.',
|
||
'settings.notificationsHub.menuDesc': 'Bandeja de alertas y preferencias de notificación',
|
||
'settings.notificationsHub.settingsItem': 'Ajustes de notificaciones',
|
||
'settings.notificationsHub.settingsItemDesc': 'Preferencias y enrutamiento',
|
||
'settings.agents.editor.notFound': 'Agente no encontrado.',
|
||
'settings.agents.editor.modelInherit': 'Heredar (predeterminado de la plataforma)',
|
||
'settings.agents.editor.modelHints': 'Sugerencias de enrutamiento',
|
||
'settings.agents.editor.modelTiers': 'Niveles de modelo',
|
||
'settings.agents.editor.modelCustom': 'ID de modelo personalizado…',
|
||
'settings.agents.editor.modelCustomPlaceholder': 'ej. anthropic/claude-sonnet-4',
|
||
'settings.agents.editor.selectTools': 'Agregar herramientas',
|
||
'settings.agents.editor.toolsAllSelected': 'Todas las herramientas',
|
||
'settings.agents.editor.toolsNoneSelected': 'Ninguna herramienta seleccionada',
|
||
'settings.agents.editor.removeToolAria': 'Eliminar {tool}',
|
||
'settings.agents.editor.toolsModalTitle': 'Herramientas permitidas',
|
||
'settings.agents.editor.toolsSelectedCount': '{count} seleccionadas',
|
||
'settings.agents.editor.toolsSearchPlaceholder': 'Buscar herramientas…',
|
||
'settings.agents.editor.toolsAllowAll': 'Permitir todas las herramientas (*)',
|
||
'settings.agents.editor.toolsAllowAllHint':
|
||
'Este agente puede usar todas las herramientas disponibles.',
|
||
'settings.agents.editor.toolsLoading': 'Cargando herramientas…',
|
||
'settings.agents.editor.toolsLoadError': 'No se pudieron cargar las herramientas',
|
||
'settings.agents.editor.toolsEmpty': 'Ninguna herramienta coincide con tu búsqueda.',
|
||
'settings.agents.editor.toolsDone': 'Done',
|
||
'settings.agents.editor.builtInReadonly':
|
||
'Los agentes integrados no se pueden editar. Puedes activarlos, desactivarlos o restablecerlos desde la lista de agentes.',
|
||
'autocomplete.debounceMs': 'Retardo (ms)',
|
||
'autocomplete.maxChars': 'Máximo de caracteres de contexto',
|
||
'autocomplete.overlayTtlMs': 'Tiempo de espera de superposición (ms)',
|
||
'memory.tab.council': 'Council',
|
||
'modelCouncil.title': 'Model Council',
|
||
'modelCouncil.intro':
|
||
'Ask one question, get independent answers from several models in parallel, then a chair model synthesizes where they agree, where they disagree, and what each uniquely adds.',
|
||
'modelCouncil.questionLabel': 'Question',
|
||
'modelCouncil.questionPlaceholder': 'Ask the council a question…',
|
||
'modelCouncil.membersLabel': 'Member models',
|
||
'modelCouncil.maxMembersNote': 'up to {max}',
|
||
'modelCouncil.memberPlaceholder': 'e.g. gpt-5.2',
|
||
'modelCouncil.memberAria': 'Member model {n}',
|
||
'modelCouncil.removeMemberAria': 'Remove member model {n}',
|
||
'modelCouncil.addMember': '+ Add model',
|
||
'modelCouncil.chairLabel': 'Chair model',
|
||
'modelCouncil.chairPlaceholder': 'e.g. claude-opus-4-8',
|
||
'modelCouncil.chairHelp': 'The chair reads every member answer and writes the synthesis.',
|
||
'modelCouncil.run': 'Convene council',
|
||
'modelCouncil.running': 'Convening…',
|
||
'modelCouncil.runningHint': 'Querying members in parallel, then synthesizing…',
|
||
'modelCouncil.errorPrefix': 'Council failed:',
|
||
'modelCouncil.resultsHeading': 'Council results',
|
||
'modelCouncil.memberAnswered': 'Answered',
|
||
'modelCouncil.memberFailed': 'Failed',
|
||
'modelCouncil.synthesisHeading': 'Synthesis',
|
||
'modelCouncil.synthesisBy': 'by {model}',
|
||
'graphCohesion.brokerBadge': 'intermediario',
|
||
'graphCohesion.brokerTitle':
|
||
'Hueco estructural: los vecinos de esta entidad no están conectados entre sí — ella es el único enlace entre ellos.',
|
||
'graphCohesion.colCohesion': 'Cohesión',
|
||
'graphCohesion.colEntity': 'Entidad',
|
||
'graphCohesion.colLinks': 'Enlaces',
|
||
'graphCohesion.colRank': '#',
|
||
'graphCohesion.empty': 'Aún no hay grafo de conocimiento.',
|
||
'graphCohesion.emptyHint':
|
||
'A medida que el asistente registra hechos conectados sobre usted, su estructura de agrupamiento aparecerá aquí.',
|
||
'graphCohesion.errorPrefix': 'No se pudo cargar el grafo:',
|
||
'graphCohesion.intro':
|
||
'Cuán estrechamente tejido está el vecindario de cada entidad. Los intermediarios — entidades cuyos vecinos no están conectados entre sí — son los puntos únicos que mantienen unidos grupos que de otro modo estarían separados, algo que un orden por frecuencia o PageRank no puede revelar.',
|
||
'graphCohesion.loading': 'Calculando cohesión…',
|
||
'graphCohesion.metricConnections': 'Conexiones',
|
||
'graphCohesion.metricEntities': 'Entidades',
|
||
'graphCohesion.metricTriangles': 'Triángulos',
|
||
'graphCohesion.namespaceAll': 'Todos los espacios de nombres',
|
||
'graphCohesion.namespaceLabel': 'Espacio de nombres',
|
||
'graphCohesion.noBrokers': 'Aún no hay entidades con dos o más conexiones.',
|
||
'graphCohesion.rankedHeading': 'Intermediarios: vecindarios más sueltos',
|
||
'graphCohesion.retry': 'Reintentar',
|
||
'graphCohesion.summaryCaption': 'Agrupamiento promedio {avg} · transitividad {transitivity}',
|
||
'graphCohesion.title': 'Cohesión del grafo',
|
||
'memory.tab.cohesion': 'Cohesion',
|
||
|
||
'keyring.consent.title': 'Almacenamiento seguro no disponible',
|
||
'keyring.consent.description':
|
||
'El llavero de su sistema operativo no está accesible. OpenHuman necesita su permiso para almacenar secretos usando almacenamiento local cifrado.',
|
||
'keyring.consent.reasonPrefix': 'Motivo:',
|
||
'keyring.consent.showDetails': '¿Qué significa esto?',
|
||
'keyring.consent.hideDetails': 'Ocultar detalles',
|
||
'keyring.consent.tradeoffTitle': 'Compromiso de seguridad',
|
||
'keyring.consent.tradeoffBody':
|
||
'Con el almacenamiento local cifrado, sus secretos se cifran en disco usando una clave maestra almacenada junto a los datos. Esto es menos seguro que el llavero del SO, que usa protección respaldada por hardware. Las copias de seguridad o la sincronización de archivos pueden incluir los datos cifrados.',
|
||
'keyring.consent.consentButton': 'Usar almacenamiento local cifrado',
|
||
'keyring.consent.retryButton': 'Reintentar OS Keychain',
|
||
'keyring.consent.declineButton': 'Rechazar',
|
||
'keyring.consent.retrying': 'Reintentando…',
|
||
'keyring.consent.error': 'No se pudo guardar la preferencia. Inténtelo de nuevo.',
|
||
'keyring.consent.retryFailed': 'El llavero sigue sin estar disponible.',
|
||
'keyring.settings.title': 'Seguridad',
|
||
'keyring.settings.storageMode': 'Modo de almacenamiento de secretos',
|
||
'keyring.settings.mode.osKeychain': 'Llavero del SO',
|
||
'keyring.settings.mode.encryptedFile': 'Local cifrado',
|
||
'keyring.settings.mode.consentPending': 'No configurado',
|
||
'keyring.settings.mode.declined': 'Rechazado',
|
||
'keyring.settings.availability': 'Disponibilidad del llavero',
|
||
'keyring.settings.available': 'El llavero del SO está disponible',
|
||
'keyring.settings.unavailable': 'El llavero del SO no está disponible',
|
||
'keyring.settings.backend': 'Motor',
|
||
'keyring.settings.retryButton': 'Reintentar detección del llavero',
|
||
'keyring.settings.retryFailed': 'Reintento fallido. El llavero sigue sin estar disponible.',
|
||
'keyring.settings.consentTitle': 'Consentimiento de almacenamiento',
|
||
'keyring.settings.consentDescription':
|
||
'Elija cómo se almacenan los secretos cuando el llavero del SO no está disponible.',
|
||
'keyring.settings.grantConsent': 'Permitir almacenamiento local cifrado',
|
||
'keyring.settings.revokeConsent': 'Rechazar almacenamiento local',
|
||
'pages.settings.account.security': 'Seguridad',
|
||
'pages.settings.account.securityDesc': 'Modo de almacenamiento de secretos y estado del llavero',
|
||
// #002 memory-pipeline-hardening: degraded badges + typed remediation.
|
||
'memoryTree.status.statusDegraded': 'Degradado',
|
||
'memoryTree.status.degradedRecall': 'Recuperación semántica desactivada',
|
||
'memoryTree.status.degradedStructure': 'Estructura de la wiki incompleta',
|
||
'memoryTree.status.extractionCoverage':
|
||
'Cobertura de extracción: {pct}% de los fragmentos tienen estructura',
|
||
'memory.health.remediation.budget_exhausted':
|
||
'Los embeddings de memoria agotaron el presupuesto gestionado. Configura embeddings locales de Ollama (Configuración → IA → Incrustaciones) o añade tu propia clave de API de embeddings para seguir construyendo la memoria.',
|
||
'memory.health.remediation.auth_missing':
|
||
'No se encontraron credenciales de embeddings. Inicia sesión en OpenHuman o configura embeddings locales de Ollama en Configuración → IA → Incrustaciones.',
|
||
'memory.health.remediation.auth_invalid':
|
||
'Tus credenciales de embeddings fueron rechazadas. Vuelve a autenticarte o cambia a embeddings locales de Ollama en Configuración → IA → Incrustaciones.',
|
||
'memory.health.remediation.embeddings_unconfigured':
|
||
'No hay ningún proveedor de embeddings configurado, por lo que la recuperación semántica está desactivada. Configura embeddings locales de Ollama (recomendado) o añade una clave de embeddings en Configuración → IA → Incrustaciones.',
|
||
'memory.health.remediation.embedding_dim_mismatch':
|
||
'El modelo de embeddings devuelve un tamaño de vector incorrecto (la memoria espera 1024 dimensiones). Elige un modelo de 1024 dimensiones o solicita 1024 dimensiones a tu proveedor.',
|
||
'memory.health.remediation.local_model_unavailable':
|
||
'No hay disponible un modelo local requerido. Instala/ejecuta Ollama y descarga el modelo, o cambia esta carga de trabajo a un proveedor en la nube en Configuración → IA.',
|
||
'memory.health.remediation.extraction_timeout':
|
||
'El modelo de extracción de memoria está agotando el tiempo de espera, por lo que la wiki tiene poca estructura. Cambia el modelo de extracción de memoria por uno más rápido en Configuración → IA.',
|
||
'memory.health.remediation.summarizer_unavailable':
|
||
'No hay ningún proveedor de resúmenes disponible para Crear árboles de resumen. Activa la IA local (Ollama) o activa el resumen en la nube en Configuración → IA → Memoria.',
|
||
'memory.health.remediation.transient':
|
||
'Un error temporal interrumpió el procesamiento de la memoria. Se reintentará automáticamente.',
|
||
'memory.health.remediation.unknown':
|
||
'El procesamiento de la memoria encontró un problema. Comprueba Configuración → IA para la configuración.',
|
||
// Chat — agent-generated artifacts (#2779)
|
||
'chat.artifact.aria': 'Artefacto: {title}',
|
||
'chat.artifact.generating': 'Generando {kind}…',
|
||
'chat.artifact.ready': 'Listo',
|
||
'chat.artifact.failed': 'Error al generar',
|
||
'chat.artifact.download': 'Descargar',
|
||
'chat.artifact.downloading': 'Descargando…',
|
||
'chat.artifact.downloaded': 'Guardado en {path}',
|
||
'chat.artifact.download_failed': 'Error al descargar: {reason}',
|
||
'chat.artifact.retry': 'Reintentar',
|
||
'chat.artifact.reveal': 'Mostrar en la carpeta',
|
||
'chat.artifact.show_more': 'Ver más',
|
||
'chat.artifact.show_less': 'Ver menos',
|
||
|
||
// Chat composer toolbar
|
||
'composer.attachFile': 'Adjuntar archivo',
|
||
'composer.modelSelector': 'Modelo',
|
||
'composer.voiceMode': 'Modo de voz',
|
||
'composer.qualityHigh': 'Alto',
|
||
// Agent activity level
|
||
'activityLevel.title': 'Nivel de actividad del agente',
|
||
'activityLevel.description':
|
||
'Controla qué tan proactivo es tu agente. Los niveles más altos usan más tokens.',
|
||
'activityLevel.off': 'Desactivado',
|
||
'activityLevel.offDesc':
|
||
'Sin procesamiento en segundo plano. Sincroniza solo al presionar el botón.',
|
||
'activityLevel.minimal': 'Mínimo',
|
||
'activityLevel.minimalDesc': 'Sincroniza fuentes una vez al día. Sin mensajes proactivos.',
|
||
'activityLevel.moderate': 'Moderado',
|
||
'activityLevel.moderateDesc': 'Sincroniza cada hora. Resumen diario. Sugiere acciones.',
|
||
'activityLevel.active': 'Activo',
|
||
'activityLevel.activeDesc':
|
||
'Sincroniza cada 10 min. Monitorea canales, prioriza y redacta respuestas.',
|
||
'activityLevel.alwaysOn': 'Siempre activo',
|
||
'activityLevel.alwaysOnDesc':
|
||
'Sincronización en tiempo real. Autonomía total dentro de los límites.',
|
||
'activityLevel.currentMonth': 'Este mes: ${amount}',
|
||
'activityLevel.saved': 'Nivel de actividad actualizado.',
|
||
'activityLevel.default': 'predeterminado',
|
||
'activityLevel.costFree': '$0',
|
||
'activityLevel.costRange': '~${min}–${max}/mes',
|
||
|
||
// Sync budget dialog
|
||
'syncBudget.title': 'Presupuesto de sincronización',
|
||
'syncBudget.maxTokens': 'Tokens máximos por sincronización',
|
||
'syncBudget.maxTokensHelp': 'Detener la sincronización al consumir este número de tokens.',
|
||
'syncBudget.maxCost': 'Costo máximo por sincronización (USD)',
|
||
'syncBudget.maxCostHelp': 'Límite absoluto en dólares por ejecución de sincronización.',
|
||
'syncBudget.syncDepth': 'Profundidad de sincronización',
|
||
'syncBudget.syncDepthHelp': 'Solo obtener elementos de esta ventana de tiempo.',
|
||
'syncBudget.days7': 'Últimos 7 días',
|
||
'syncBudget.days30': 'Últimos 30 días',
|
||
'syncBudget.days90': 'Últimos 90 días',
|
||
'syncBudget.allTime': 'Todo el tiempo',
|
||
'syncBudget.unlimited': 'Ilimitado',
|
||
'syncBudget.saved': 'Presupuesto guardado.',
|
||
|
||
// Sync confirm dialog
|
||
'syncConfirm.title': 'Confirmar sincronización',
|
||
'syncConfirm.message':
|
||
'Esta sincronización procesará ~{items} elementos (~{tokens} tokens, est. ${cost}).',
|
||
'syncConfirm.budgetNote': 'Límite de presupuesto: ${max}',
|
||
'syncConfirm.proceed': 'Proceder',
|
||
'syncConfirm.cancel': 'Cancelar',
|
||
'syncConfirm.estimating': 'Calculando costo...',
|
||
|
||
// Monthly cost badge
|
||
'monthlyCost.badge': '${amount} este mes',
|
||
'monthlyCost.noData': 'Sin sincronizaciones este mes',
|
||
|
||
// Onboarding: Custom > Activity
|
||
'onboarding.custom.stepperActivity': 'Actividad',
|
||
'onboarding.custom.stepperVault': 'Bóveda',
|
||
'onboarding.custom.activity.title': 'Actividad del agente',
|
||
'onboarding.custom.activity.subtitle':
|
||
'Qué tan proactivamente monitorea y actúa tu agente en segundo plano.',
|
||
'onboarding.custom.activity.defaultDesc':
|
||
'Actividad moderada — sincronización por hora, resumen diario.',
|
||
'onboarding.custom.activity.configureDesc':
|
||
'Elige tu propio nivel de actividad. Configurar en Ajustes › Nivel de actividad del agente.',
|
||
|
||
// Onboarding: Custom > Vault
|
||
'onboarding.custom.vault.title': 'Configuración de memoria y bóveda',
|
||
'onboarding.custom.vault.subtitle':
|
||
'Confirma dónde se escriben las notas de memoria, cómo se leen los datos de origen y si el flujo de bóveda está en buen estado.',
|
||
'onboarding.custom.vault.defaultDesc':
|
||
'Usa los valores predeterminados de memoria administrada por OpenHuman. La ruta de la bóveda y el estado de sincronización se pueden revisar más adelante.',
|
||
'onboarding.custom.vault.configureDesc':
|
||
'Revisa la propiedad de la bóveda, ejecuta comprobaciones de estado y ajusta los controles de memoria ahora.',
|
||
'onboarding.custom.vault.localDisabledReason':
|
||
'La configuración administrada requiere inicio de sesión en OpenHuman y no está disponible en modo local.',
|
||
'onboarding.custom.vault.exitError':
|
||
'No se pudo completar el proceso de incorporación. Por favor, inténtalo de nuevo.',
|
||
|
||
// Vault Health
|
||
'vaultHealth.title': 'Lista de verificación de salud de la bóveda',
|
||
'vaultHealth.setupTitle': 'Estado de configuración de la bóveda',
|
||
'vaultHealth.workspaceVault': 'Bóveda del espacio de trabajo:',
|
||
'vaultHealth.refresh': 'Actualizar',
|
||
'vaultHealth.refreshing': 'Actualizando…',
|
||
'vaultHealth.revealFolder': 'Mostrar carpeta',
|
||
'vaultHealth.openInObsidian': 'Abrir en Obsidian',
|
||
'vaultHealth.installObsidian': 'Instalar Obsidian',
|
||
'vaultHealth.openObsidianError': 'No se pudo abrir Obsidian',
|
||
'vaultHealth.revealError': 'No se pudo mostrar la carpeta de la bóveda',
|
||
'vaultHealth.downloadError': 'No se pudo abrir la página de descarga de Obsidian',
|
||
'vaultHealth.loadError': 'No se pudo cargar el estado de la bóveda:',
|
||
'vaultHealth.lastSync': 'Última sincronización:',
|
||
'vaultHealth.passed': 'Superado',
|
||
'vaultHealth.needsAttention': 'Requiere atención',
|
||
'vaultHealth.existsLabel': 'La ruta de la bóveda del espacio de trabajo existe',
|
||
'vaultHealth.existsRecovery':
|
||
'La carpeta de la bóveda no existe. Inicia una sincronización o crea esta carpeta y luego actualiza esta lista.',
|
||
'vaultHealth.writableLabel': 'OpenHuman puede escribir en la bóveda',
|
||
'vaultHealth.writableRecovery':
|
||
'OpenHuman aún no puede escribir en esta bóveda. Concede permisos de escritura y actualiza.',
|
||
'vaultHealth.obsidianLabel': 'La bóveda está registrada en Obsidian',
|
||
'vaultHealth.obsidianRecovery':
|
||
'En Obsidian, elige "Abrir carpeta como bóveda" para esta ruta y luego actualiza esta lista.',
|
||
'vaultHealth.pipelineLabel': 'El flujo de memoria está en buen estado',
|
||
'vaultHealth.pipelineRecovery':
|
||
'El flujo de memoria está pausado o en error. Vuelve a habilitar la sincronización automática en el estado del árbol de memoria y reintenta.',
|
||
'vaultHealth.timeNever': 'Nunca',
|
||
'vaultHealth.timeJustNow': 'ahora mismo',
|
||
'vaultHealth.timeMinAgo': 'hace {n} min',
|
||
'vaultHealth.timeHrAgo': 'hace {n} h',
|
||
'vaultHealth.timeDayAgo': 'hace {n} día',
|
||
'vaultHealth.timeDaysAgo': 'hace {n} días',
|
||
|
||
// Memory Data
|
||
'memoryData.howItWorks': 'Cómo funciona el almacenamiento de memoria',
|
||
'memoryData.workspaceVault': 'Bóveda del espacio de trabajo · escritura',
|
||
'memoryData.workspaceVaultDesc':
|
||
'OpenHuman escribe las notas de memoria generadas en memory_tree/content.',
|
||
'memoryData.connectedSources': 'Fuentes conectadas · lectura',
|
||
'memoryData.connectedSourcesDesc':
|
||
'Carpetas, buzones, chats y repositorios se importan para la indexación de memoria; sus archivos originales nunca se reescriben.',
|
||
'memoryData.internalFiles': 'Archivos internos del árbol de memoria',
|
||
'memoryData.internalFilesDesc':
|
||
'Los índices, el estado de la cola y los resúmenes son administrados por OpenHuman para mantener en buen estado la recuperación y la sincronización.',
|
||
'memoryData.windowError': 'Ventana de memoria',
|
||
'memoryData.windowUpdated': 'Ventana de memoria actualizada',
|
||
'memoryData.windowUpdatedMsg': 'Establecida en {window}.',
|
||
};
|
||
|
||
export default messages;
|