mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
4514 lines
275 KiB
TypeScript
4514 lines
275 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.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': 'Escribe un mensaje...',
|
||
'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',
|
||
'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': 'Análisis anonimizado',
|
||
'privacy.shareAnonymizedData': 'Compartir datos de uso anonimizados',
|
||
'privacy.shareAnonymizedDataDesc':
|
||
'Ayuda a mejorar OpenHuman compartiendo informes de errores anónimos y análisis de uso. Todos los datos son completamente anonimizados — nunca se recopilan datos personales, mensajes, claves de billetera ni información 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':
|
||
'Todos los análisis e informes de errores son completamente anonimizados. Cuando está activado, recopilamos solo información de errores, tipo de dispositivo y la ubicación del archivo de los errores. Nunca accedemos a tus mensajes, datos de sesión, claves de billetera, claves API ni ninguna información de identificación personal. 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',
|
||
'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',
|
||
'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.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.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',
|
||
'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.defaultLocalEndpoint': 'http://localhost:11434/v1',
|
||
'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.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.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.interval.fiveMinutes': '5 minutos',
|
||
'subconscious.interval.tenMinutes': '10 minutos',
|
||
'subconscious.interval.fifteenMinutes': '15 minutos',
|
||
'subconscious.interval.thirtyMinutes': '30 minutos',
|
||
'subconscious.interval.oneHour': '1 hora',
|
||
'subconscious.interval.sixHours': '6 horas',
|
||
'subconscious.interval.twelveHours': '12 horas',
|
||
'subconscious.interval.oneDay': '1 dia',
|
||
'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',
|
||
};
|
||
|
||
export default messages;
|