mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-09-27 03:46:39 +08:00
262980d612
The bot session monitor paging controls use `common.next` and
`common.previous`, but those keys never existed in any locale. They were
only rendered because of the hardcoded `defaultValue: 'Next'`/`'Previous'`.
Removing those fallbacks (previous commit) made i18next render the raw key
name, so the Playwright smoke tests could no longer find the "Next" button.
Add `common.previous` and `common.next` to all 8 locales (reusing each
language's existing `guidedTour.previous`/`next` wording) and re-align the
locale key order with the `en-US` reference.
Verified locally:
- scripts/check-i18n.mjs passes for all locales
- every t('...') key referenced by BotSessionMonitor.tsx now exists in en-US
- tests/e2e/bot-session-tool-timeline.spec.ts: 13/13 passed (including the
two request-recovery cases that failed in CI)
- prettier / tsc / eslint clean
3248 lines
147 KiB
TypeScript
3248 lines
147 KiB
TypeScript
import pipelineMigration from './pipeline-migration/es-ES';
|
|
const esES = {
|
|
assistant: {
|
|
modelHint: 'Cambia el modelo del asistente para el próximo mensaje',
|
|
details: 'Ver datos sin procesar',
|
|
found: 'Se encontraron {{count}} elementos',
|
|
completed: 'Completado',
|
|
failed: 'Fallido',
|
|
denied: 'No ejecutado',
|
|
partial: 'Resultado parcial',
|
|
operationFailed:
|
|
'La operación falló. Revisa los detalles y el estado de los recursos antes de reintentar un cambio.',
|
|
operationDenied: 'Rechazado. Nada de este lote se ejecutó.',
|
|
openResource: 'Abrir recurso',
|
|
sendUnconfirmed:
|
|
'Entrega sin confirmar. Comprueba tu conexión y vuelve a abrir la conversación.',
|
|
draftPlaceholder: 'Escribe tu próximo mensaje mientras esperas…',
|
|
operations: {
|
|
create_pipeline: 'Crear Pipeline',
|
|
configure_pipeline: 'Configurar Pipeline',
|
|
create_knowledge_base: 'Crear base de conocimiento',
|
|
get_pipeline: 'Consultar Pipeline',
|
|
get_knowledge_schema: 'Consultar el esquema del motor de conocimiento',
|
|
},
|
|
resources: {
|
|
models: 'Buscar modelos de chat',
|
|
embedding_models: 'Buscar modelos de embeddings',
|
|
pipelines: 'Buscar Pipelines',
|
|
knowledge_bases: 'Buscar bases de conocimiento',
|
|
knowledge_engines: 'Buscar motores de conocimiento',
|
|
},
|
|
title: 'Asistente del espacio de trabajo',
|
|
subtitle: 'Crea y gestiona tus aplicaciones',
|
|
newChat: 'Nueva conversación',
|
|
close: 'Cerrar',
|
|
welcome:
|
|
'Dime qué quieres crear. Puedo inspeccionar este espacio de trabajo y proponer cambios en la base de conocimiento y el Pipeline para que los confirmes.',
|
|
discover:
|
|
'¿Qué modelos, bases de conocimiento y Pipelines hay disponibles?',
|
|
build:
|
|
'Ayúdame a crear una aplicación de preguntas y respuestas con base de conocimiento.',
|
|
toolResult: 'Resultado de la operación',
|
|
review: 'Revisa las operaciones exactas antes de ejecutarlas',
|
|
confirm: 'Confirmar y ejecutar',
|
|
decline: 'Rechazar',
|
|
working: 'Procesando…',
|
|
modelUnavailable:
|
|
'Modelo no disponible. Revisa su configuración y acceso, y luego inicia una nueva conversación.',
|
|
error:
|
|
'Este turno no se completó. Revisa los resultados de los recursos antes de iniciar una nueva conversación; los cambios no se reintentan automáticamente.',
|
|
running:
|
|
'Este turno sigue en ejecución o se interrumpió antes de guardar su resultado. Vuelve a abrir el asistente para actualizar; revisa los recursos antes de empezar de nuevo.',
|
|
placeholder: 'Describe tu aplicación…',
|
|
send: 'Enviar',
|
|
},
|
|
sidebarGuide: {
|
|
steps: {
|
|
monitoring: {
|
|
title: 'Revisar la actividad',
|
|
description:
|
|
'Consulta la actividad de los bots, el uso de modelos, los mensajes y el rendimiento del sistema.',
|
|
},
|
|
bots: {
|
|
title: 'Conectar plataformas de chat',
|
|
description:
|
|
'Conecta LangBot a plataformas de chat y administra las conexiones de tus bots.',
|
|
},
|
|
pipelines: {
|
|
title: 'Configurar procesadores',
|
|
description:
|
|
'Crea flujos, Agents y configuraciones de procesadores de plugins reutilizables y conéctalos a tus bots.',
|
|
},
|
|
knowledge: {
|
|
title: 'Gestionar bases de conocimiento',
|
|
description:
|
|
'Organiza documentos y fuentes externas de conocimiento para mejorar las respuestas.',
|
|
},
|
|
plugins: {
|
|
title: 'Gestionar extensiones instaladas',
|
|
description:
|
|
'Administra plugins, servidores MCP y habilidades instalados y consulta su estado.',
|
|
},
|
|
'add-extension': {
|
|
title: 'Añadir extensiones',
|
|
description:
|
|
'Instala funciones desde el mercado, GitHub o un paquete local.',
|
|
},
|
|
models: {
|
|
title: 'Configurar modelos',
|
|
description:
|
|
'Configura proveedores y elige los modelos de lenguaje, embeddings y otros modelos que usa LangBot.',
|
|
},
|
|
'api-integration': {
|
|
title: 'Configurar acceso API',
|
|
description:
|
|
'Crea claves API y configura el acceso externo a los servicios de LangBot y MCP.',
|
|
},
|
|
},
|
|
},
|
|
guidedTour: {
|
|
eventDebugDescription:
|
|
'Elige un evento compatible, introduce datos de prueba y revisa la salida y los resultados de las herramientas. Las acciones de plataforma se simulan; los modelos y las demás herramientas se ejecutan según su configuración.',
|
|
pipeline: {
|
|
trigger: {
|
|
title: 'Elegir qué mensajes responder',
|
|
description:
|
|
'Los flujos procesan eventos de mensajes y responden automáticamente con IA. Configura los activadores de grupo, las reglas de chat privado y los filtros.',
|
|
},
|
|
ai: {
|
|
title: 'Configurar las funciones de IA',
|
|
description:
|
|
'Elige un ejecutor local o de una plataforma externa y configura su modelo, instrucciones, bases de conocimiento y otros parámetros.',
|
|
},
|
|
output: {
|
|
title: 'Ajustar las respuestas',
|
|
description:
|
|
'Configura reglas de salida, como el tratamiento de textos largos, para decidir cómo se entregan las respuestas.',
|
|
},
|
|
safety: {
|
|
title: 'Configurar controles de seguridad',
|
|
description:
|
|
'Activa filtros de contenido y límites de frecuencia según sea necesario.',
|
|
},
|
|
extensions: {
|
|
title: 'Elegir extensiones disponibles',
|
|
description:
|
|
'Selecciona los plugins, servidores MCP y habilidades que puede usar este flujo para ampliar el procesamiento y las herramientas.',
|
|
},
|
|
basic: {
|
|
title: 'Administrar el flujo',
|
|
description:
|
|
'Copia este flujo para crear otra configuración o elimina un flujo que ya no necesites.',
|
|
},
|
|
debug: {
|
|
title: 'Probar una conversación',
|
|
description:
|
|
'Envía mensajes de prueba para comprobar los activadores, las respuestas de IA y el procesamiento de salida. Los cambios se guardan antes de la prueba.',
|
|
},
|
|
monitoring: {
|
|
title: 'Revisar el historial',
|
|
description:
|
|
'Usa la pestaña junto al título para revisar conversaciones, pasos de procesamiento y errores cuando falten respuestas o sean inesperadas.',
|
|
},
|
|
save: {
|
|
title: 'Guardar y conectar un bot',
|
|
description:
|
|
'Guarda la configuración y asigna los eventos de mensaje recibido a este flujo en la página del bot.',
|
|
},
|
|
},
|
|
pluginProcessor: {
|
|
select: {
|
|
title: 'Elegir un ejecutor de plugin',
|
|
description:
|
|
'Elige un ejecutor compatible con el procesamiento de eventos. El autor del plugin declara los eventos admitidos y su lógica.',
|
|
},
|
|
parameters: {
|
|
title: 'Configurar parámetros del plugin',
|
|
description:
|
|
'Completa los ajustes del plugin. Puedes guardar varias configuraciones del mismo plugin para distintos bots o usos.',
|
|
},
|
|
debug: {
|
|
title: 'Probar el procesamiento de eventos',
|
|
},
|
|
logs: {
|
|
title: 'Revisar resultados',
|
|
description:
|
|
'Consulta el estado, el evento de entrada, los registros y los resultados de cada ejecución para investigar fallos.',
|
|
},
|
|
save: {
|
|
title: 'Guardar y vincular a un bot',
|
|
description:
|
|
'Tras guardar, añade esta configuración en la sección de procesadores de plugins del bot. Recibirá automáticamente los eventos declarados, sin rutas individuales.',
|
|
},
|
|
},
|
|
previous: 'Anterior',
|
|
label: 'Guía de uso',
|
|
progress: 'Paso {{current}} de {{total}}',
|
|
next: 'Siguiente',
|
|
finish: 'Finalizar guía',
|
|
skip: 'Omitir',
|
|
bot: {
|
|
connection: {
|
|
title: 'Elegir un método de conexión',
|
|
description:
|
|
'Elige un método compatible con este adaptador. Sus parámetros se actualizarán automáticamente.',
|
|
},
|
|
basic: {
|
|
title: 'Asignar un nombre al bot',
|
|
description:
|
|
'Usa un nombre reconocible para encontrar esta conexión en las rutas y los registros.',
|
|
},
|
|
adapter: {
|
|
title: 'Elegir un adaptador de plataforma',
|
|
description:
|
|
'Elige el adaptador de este bot. Configurarás la conexión y los parámetros de la plataforma después de crearlo.',
|
|
},
|
|
parameters: {
|
|
title: 'Configurar la plataforma',
|
|
description:
|
|
'Introduce las credenciales y los parámetros. Consulta la documentación del adaptador para los ajustes del lado de la plataforma.',
|
|
action: 'Abrir documentación del adaptador',
|
|
},
|
|
routing: {
|
|
title: 'Dirigir los eventos entrantes',
|
|
description: 'Elige qué procesador recibe cada evento de este bot.',
|
|
},
|
|
save: {
|
|
title: 'Guardar la configuración del bot',
|
|
description:
|
|
'Comprueba la conexión y las rutas de eventos, y guarda los cambios. Después puedes activar el bot.',
|
|
},
|
|
submit: {
|
|
title: 'Crear el bot',
|
|
description:
|
|
'Crea el bot desactivado y continúa configurando la conexión y los parámetros en su página.',
|
|
},
|
|
},
|
|
processorCreate: {
|
|
type: {
|
|
title: 'Elegir un tipo de procesador',
|
|
description:
|
|
'Los pipelines siguen un flujo de mensajes definido; los agentes deciden con modelos y herramientas, y los procesadores de plugins gestionan los eventos declarados.',
|
|
},
|
|
basic: {
|
|
title: 'Nombrar el procesador',
|
|
description:
|
|
'Asigna un nombre reconocible. El ejecutor y los eventos se configuran después de crear el procesador.',
|
|
},
|
|
submit: {
|
|
title: 'Crear y continuar la configuración',
|
|
description:
|
|
'Después de crear el procesador, configura el ejecutor, sus parámetros, los eventos y las herramientas que necesite.',
|
|
},
|
|
},
|
|
runner: {
|
|
debug: {
|
|
title: 'Probar el procesamiento de eventos',
|
|
},
|
|
select: {
|
|
title: 'Elegir o instalar un ejecutor',
|
|
description:
|
|
'Selecciona un ejecutor instalado o instala uno directamente desde la lista del mercado en este selector.',
|
|
action: 'Explorar ejecutores en el mercado',
|
|
},
|
|
parameters: {
|
|
title: 'Configurar los parámetros del ejecutor',
|
|
description:
|
|
'Introduce el modelo, las credenciales, la URL del servicio y los demás ajustes definidos por el ejecutor seleccionado.',
|
|
},
|
|
events: {
|
|
title: 'Configurar eventos y herramientas',
|
|
description:
|
|
'Abre Eventos y herramientas para elegir qué eventos recibe este agente y qué herramientas de plataforma o de LangBot puede usar.',
|
|
},
|
|
},
|
|
knowledge: {
|
|
basic: {
|
|
title: 'Describir la base de conocimiento',
|
|
description:
|
|
'Asigna un nombre y, si lo deseas, una descripción antes de elegir el motor de almacenamiento y búsqueda.',
|
|
},
|
|
engine: {
|
|
title: 'Revisar el motor de conocimiento',
|
|
description:
|
|
'Confirma el motor de esta base de conocimiento. Sus parámetros y opciones de búsqueda se configuran debajo.',
|
|
action: 'Explorar motores de conocimiento',
|
|
},
|
|
parameters: {
|
|
title: 'Configurar parámetros del motor',
|
|
description:
|
|
'Completa los ajustes de almacenamiento, modelo, credenciales o servicio externo que solicita el motor.',
|
|
},
|
|
retrieval: {
|
|
title: 'Configurar la búsqueda',
|
|
description:
|
|
'Define cómo busca el motor y devuelve contenido relevante a los procesadores.',
|
|
},
|
|
save: {
|
|
title: 'Guardar la base de conocimiento',
|
|
description:
|
|
'Comprueba los parámetros del motor y la búsqueda, y guarda la configuración.',
|
|
},
|
|
submit: {
|
|
title: 'Crear la base de conocimiento',
|
|
description:
|
|
'Crea la base de conocimiento y añade documentos o conecta fuentes compatibles con el motor elegido.',
|
|
},
|
|
},
|
|
},
|
|
pipelineMigration,
|
|
sidebar: {
|
|
home: 'Inicio',
|
|
extensions: 'Extensiones',
|
|
installedPlugins: 'Instalados',
|
|
pluginMarket: 'Tienda',
|
|
mcpServers: 'Servidores MCP',
|
|
addExtension: 'Añadir extensión',
|
|
pluginPages: 'Páginas de plugins',
|
|
pluginPagesTooltip:
|
|
'Páginas visuales proporcionadas por los plugins instalados',
|
|
quickStart: 'Inicio rápido',
|
|
scrollToBottom: 'Desplazar al final',
|
|
editionCommunity: 'Comunidad',
|
|
editionCloud: 'Cloud',
|
|
},
|
|
common: {
|
|
customValue: 'Personalizado',
|
|
loadFailed: 'No se pudo cargar. Inténtalo de nuevo.',
|
|
search: 'Buscar',
|
|
previous: 'Anterior',
|
|
next: 'Siguiente',
|
|
login: 'Iniciar sesión',
|
|
logout: 'Cerrar sesión',
|
|
accountOptions: 'Configuración',
|
|
account: 'Cuenta',
|
|
integration: 'Integración',
|
|
email: 'Correo electrónico',
|
|
password: 'Contraseña',
|
|
welcome: 'Bienvenido de nuevo a LangBot 👋',
|
|
continueToLogin: 'Inicia sesión para continuar',
|
|
loginSuccess: 'Inicio de sesión exitoso',
|
|
loginFailed:
|
|
'Error de inicio de sesión, por favor verifica tu correo y contraseña',
|
|
loginLoadError: 'No se puede conectar al servidor',
|
|
loginLoadErrorDesc:
|
|
'No se puede conectar al backend de LangBot. Asegúrate de que el servicio esté en ejecución e inténtalo de nuevo.',
|
|
retry: 'Reintentar',
|
|
showSecret: 'Mostrar secreto',
|
|
hideSecret: 'Ocultar secreto',
|
|
enterEmail: 'Introduce la dirección de correo electrónico',
|
|
enterPassword: 'Introduce la contraseña',
|
|
invalidEmail:
|
|
'Por favor, introduce una dirección de correo electrónico válida',
|
|
emptyPassword: 'Por favor, introduce tu contraseña',
|
|
language: 'Idioma',
|
|
helpDocs: 'Obtener ayuda',
|
|
featureRequest: 'Solicitar función',
|
|
starOnGitHub: 'Dar estrella en GitHub',
|
|
joinDiscord: 'Únete a Discord',
|
|
create: 'Crear',
|
|
edit: 'Editar',
|
|
editBasicInfo: 'Editar información básica',
|
|
editBasicInfoDescription: 'Cambia el nombre, la descripción y el icono.',
|
|
editBasicInfoDescriptionNoIcon: 'Cambia el nombre y la descripción.',
|
|
management: 'Administración',
|
|
delete: 'Eliminar',
|
|
add: 'Añadir',
|
|
select: 'Seleccionar',
|
|
clear: 'Limpiar',
|
|
skill: 'Habilidad',
|
|
cancel: 'Cancelar',
|
|
submit: 'Enviar',
|
|
error: 'Error',
|
|
success: 'Éxito',
|
|
save: 'Guardar',
|
|
saving: 'Guardando...',
|
|
recommend: 'Recomendado',
|
|
start: 'Iniciar',
|
|
confirm: 'Confirmar',
|
|
confirmDelete: 'Confirmar eliminación',
|
|
deleteConfirmation: '¿Estás seguro de que deseas eliminar esto?',
|
|
selectOption: 'Selecciona una opción',
|
|
selectPreset: 'Seleccionar preajuste',
|
|
required: 'Obligatorio',
|
|
enable: 'Activar',
|
|
name: 'Nombre',
|
|
description: 'Descripción',
|
|
icon: 'Icono',
|
|
close: 'Cerrar',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteError: 'Error al eliminar: ',
|
|
addRound: 'Añadir ronda',
|
|
copy: 'Copiar',
|
|
download: 'Descargar',
|
|
copySuccess: 'Copiado correctamente',
|
|
copyFailed: 'Error al copiar',
|
|
test: 'Probar',
|
|
forgotPassword: '¿Olvidaste tu contraseña?',
|
|
agreementNotice: 'Al continuar, aceptas nuestros',
|
|
termsOfService: 'Términos de servicio',
|
|
privacyPolicy: 'Política de privacidad',
|
|
and: 'y',
|
|
dataCollectionPolicy: 'Política de recopilación de datos',
|
|
dataCollectionPolicyUrl:
|
|
'https://langbot.app/docs/en/insight/data-collection-policy',
|
|
loading: 'Cargando...',
|
|
fieldRequired: 'Este campo es obligatorio',
|
|
or: 'o',
|
|
loginWithSpace: 'Iniciar sesión con una cuenta de LangBot',
|
|
spaceLoginRecommended:
|
|
'Recomendado: Usa API de modelos oficiales estables y servicios en la nube',
|
|
loginLocal: 'Iniciar sesión con cuenta local',
|
|
loginWithPassword: 'Iniciar sesión con contraseña',
|
|
loginWithPasskey: 'Iniciar sesión con Passkey',
|
|
passkeyLoginSuccess: 'Passkey verificada con éxito, iniciando sesión...',
|
|
passkeyLoginFailed: 'Error al iniciar sesión con Passkey',
|
|
passkeyNotSupported:
|
|
'Passkey no es compatible en este navegador o dispositivo',
|
|
verify: 'Verificar',
|
|
back: 'Atrás',
|
|
totpChallengeTitle: 'Verificación en dos pasos',
|
|
totpChallengeDesc:
|
|
'Introduce el código de 6 dígitos de tu aplicación de autenticación para continuar',
|
|
totpUseRecoveryCode:
|
|
'Introduce uno de tus códigos de recuperación de un solo uso para continuar',
|
|
enterTotpCode: 'Introduce el código de 6 dígitos',
|
|
enterRecoveryCode: 'Introduce el código de recuperación',
|
|
useRecoveryCode: 'Usar un código de recuperación',
|
|
useTotpCode: 'Usar un código de autenticación',
|
|
totpInvalidCode: 'Código no válido o ya usado, inténtalo de nuevo',
|
|
totpVerifyFailed: 'La verificación en dos pasos falló, inténtalo de nuevo',
|
|
spaceLoginTitle: 'Iniciar sesión con una cuenta de LangBot',
|
|
spaceLoginDescription:
|
|
'Escanea el código QR o visita el enlace para autorizar',
|
|
spaceLoginUserCode: 'Tu código',
|
|
spaceLoginExpires: 'El código expira en {{seconds}} segundos',
|
|
spaceLoginWaiting: 'Esperando autorización...',
|
|
spaceLoginSuccess: 'Autorización exitosa',
|
|
spaceLoginFailed: 'Error de inicio de sesión con una cuenta de LangBot',
|
|
spaceLoginExpired:
|
|
'El código de autorización ha expirado, por favor inténtalo de nuevo',
|
|
spaceLoginCancel: 'Cancelar',
|
|
spaceLoginVisitLink: 'Visitar enlace',
|
|
spaceLoginProcessing: 'Iniciando sesión con una cuenta de LangBot',
|
|
spaceLoginProcessingDescription:
|
|
'Por favor espera mientras completamos tu inicio de sesión...',
|
|
spaceLoginSuccessDescription: 'Redirigiendo a LangBot...',
|
|
spaceLoginError: 'Error de inicio de sesión',
|
|
spaceLoginNoCode: 'Falta el código de autorización',
|
|
backToLogin: 'Volver al inicio de sesión',
|
|
backToHome: 'Volver al inicio',
|
|
spaceAccountCannotChangePassword:
|
|
'Las cuentas de LangBot no pueden cambiar la contraseña aquí',
|
|
theme: 'Tema',
|
|
changePassword: 'Cambiar contraseña',
|
|
currentPassword: 'Contraseña actual',
|
|
newPassword: 'Nueva contraseña',
|
|
confirmNewPassword: 'Confirmar nueva contraseña',
|
|
enterCurrentPassword: 'Introduce la contraseña actual',
|
|
enterNewPassword: 'Introduce la nueva contraseña',
|
|
enterConfirmPassword: 'Confirma la nueva contraseña',
|
|
currentPasswordRequired: 'La contraseña actual es obligatoria',
|
|
newPasswordRequired: 'La nueva contraseña es obligatoria',
|
|
confirmPasswordRequired: 'La confirmación de contraseña es obligatoria',
|
|
passwordsDoNotMatch: 'Las contraseñas no coinciden',
|
|
changePasswordSuccess: 'Contraseña cambiada correctamente',
|
|
changePasswordFailed:
|
|
'Error al cambiar la contraseña, por favor verifica tu contraseña actual',
|
|
apiIntegration: 'Integración API',
|
|
apiIntegrationDescription:
|
|
'Gestiona las claves API y los webhooks para el acceso externo',
|
|
apiKeys: 'Claves API',
|
|
manageApiIntegration: 'Gestionar integración API',
|
|
manageApiKeys: 'Gestionar claves API',
|
|
createApiKey: 'Crear clave API',
|
|
apiKeyName: 'Nombre de la clave API',
|
|
apiKeyDescription: 'Descripción de la clave API',
|
|
apiKeyValue: 'Valor de la clave API',
|
|
apiKeyCreated: 'Clave API creada correctamente',
|
|
apiKeyDeleted: 'Clave API eliminada correctamente',
|
|
apiKeyDeleteConfirm: '¿Estás seguro de que deseas eliminar esta clave API?',
|
|
apiKeyNameRequired: 'El nombre de la clave API es obligatorio',
|
|
copyApiKey: 'Copiar clave API',
|
|
apiKeyCopied: 'Clave API copiada al portapapeles',
|
|
noApiKeys: 'No hay claves API configuradas',
|
|
apiKeyHint:
|
|
'Las claves API permiten a sistemas externos acceder a las API del servicio LangBot',
|
|
mcpTab: 'MCP',
|
|
mcpHint:
|
|
'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
|
|
mcpEndpoint: 'MCP Endpoint',
|
|
mcpAuthTitle: 'Authentication',
|
|
mcpAuthDesc:
|
|
'Authenticate with any API key from the API Keys tab, sent as a header:',
|
|
mcpGlobalKeyNote:
|
|
'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
|
|
mcpClientConfigTitle: 'Example MCP client config',
|
|
webhooks: 'Webhooks',
|
|
createWebhook: 'Crear Webhook',
|
|
webhookName: 'Nombre del Webhook',
|
|
webhookUrl: 'URL del Webhook',
|
|
webhookDescription: 'Descripción del Webhook',
|
|
webhookEnabled: 'Activado',
|
|
webhookCreated: 'Webhook creado correctamente',
|
|
webhookDeleted: 'Webhook eliminado correctamente',
|
|
webhookDeleteConfirm: '¿Estás seguro de que deseas eliminar este Webhook?',
|
|
webhookNameRequired: 'El nombre del Webhook es obligatorio',
|
|
webhookUrlRequired: 'La URL del Webhook es obligatoria',
|
|
noWebhooks: 'No hay Webhooks configurados',
|
|
webhookHint:
|
|
'Los Webhooks permiten a LangBot enviar eventos de mensajes personales y grupales a sistemas externos',
|
|
actions: 'Acciones',
|
|
apiKeyCreatedMessage:
|
|
'Por favor copia esta clave API, si el botón no funciona, cópiala manualmente.',
|
|
apiKeyStoredSecurely: 'Secret shown only when created',
|
|
none: 'Ninguno',
|
|
more: 'Más ({{count}})',
|
|
less: 'Menos',
|
|
noItems: 'Sin elementos',
|
|
},
|
|
notFound: {
|
|
title: 'Página no encontrada',
|
|
description: 'La página que buscas no existe.',
|
|
back: 'Volver',
|
|
home: 'Inicio',
|
|
help: 'Obtener ayuda',
|
|
},
|
|
models: {
|
|
codex: {
|
|
account: 'Suscripción de ChatGPT',
|
|
description:
|
|
'Inicia sesión con tu cuenta de ChatGPT. La suscripción es independiente de la facturación de la API de OpenAI; los modelos y límites dependen de tu plan.',
|
|
disconnected: 'Sin conexión',
|
|
loading: 'Comprobando conexión…',
|
|
starting: 'Iniciando sesión…',
|
|
pending: 'Esperando autorización',
|
|
connected: 'Conectado',
|
|
expired: 'El inicio de sesión ha caducado. Solicita un nuevo código.',
|
|
error:
|
|
'No se pudo iniciar sesión. Comprueba la conexión e inténtalo de nuevo.',
|
|
canceling: 'Cancelando inicio de sesión…',
|
|
saveAndSignIn: 'Guardar e iniciar sesión',
|
|
done: 'Listo',
|
|
instructions:
|
|
'Introduce este código en la página de OpenAI. Mantén este diálogo abierto hasta completar el inicio de sesión.',
|
|
copyCode: 'Copiar código',
|
|
copied: 'Copiado',
|
|
copyManually: 'Selecciona y copia el código manualmente.',
|
|
continueAtOpenAI: 'Continuar en OpenAI',
|
|
expiresAt: 'El código caduca a las {{time}}.',
|
|
retrying: 'Conexión interrumpida. Reintentando automáticamente…',
|
|
cancelSignIn: 'Cancelar inicio de sesión',
|
|
tryAgain: 'Reintentar',
|
|
signIn: 'Iniciar sesión',
|
|
reconnect: 'Reconectar',
|
|
disconnect: 'Desconectar',
|
|
disconnectConfirm:
|
|
'¿Desconectar este proveedor? Sus modelos dejarán de funcionar hasta que vuelvas a iniciar sesión. Esto no cancela tu suscripción de ChatGPT.',
|
|
confirmDisconnect: 'Confirmar desconexión',
|
|
},
|
|
title: 'Modelos',
|
|
description:
|
|
'Configura y gestiona los modelos que se pueden usar en los Pipelines',
|
|
createModel: 'Crear modelo',
|
|
editModel: 'Editar modelo',
|
|
getModelListError: 'Error al obtener la lista de modelos: ',
|
|
modelName: 'Nombre del modelo',
|
|
modelProvider: 'Proveedor del modelo',
|
|
modelBaseURL: 'URL base',
|
|
modelAbilities: 'Capacidades del modelo',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar: ',
|
|
createSuccess: 'Creado correctamente',
|
|
createError: 'Error al crear: ',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteError: 'Error al eliminar: ',
|
|
deleteConfirmation: '¿Estás seguro de que deseas eliminar este modelo?',
|
|
modelNameRequired: 'El nombre del modelo no puede estar vacío',
|
|
modelProviderRequired: 'El proveedor del modelo no puede estar vacío',
|
|
requestURLRequired: 'La URL de solicitud no puede estar vacía',
|
|
apiKeyRequired: 'La clave API no puede estar vacía',
|
|
keyNameRequired: 'El nombre de la clave no puede estar vacío',
|
|
mustBeValidNumber: 'Debe ser un número válido',
|
|
mustBeTrueOrFalse: 'Debe ser verdadero o falso',
|
|
requestURL: 'URL de solicitud',
|
|
scanURL: 'URL de escaneo de modelos',
|
|
scanURLPlaceholder: 'Déjalo vacío para usar URL de solicitud + /models',
|
|
scanURLDescription:
|
|
'Ingresa el endpoint real de la lista de modelos cuando el escaneo de modelos no utiliza la misma dirección que la invocación del modelo.',
|
|
apiKey: 'Clave API',
|
|
abilities: 'Capacidades',
|
|
selectModelAbilities: 'Seleccionar capacidades del modelo',
|
|
visionAbility: 'Capacidad de visión',
|
|
functionCallAbility: 'Llamada a funciones',
|
|
reasoningAbility: 'Razonamiento',
|
|
reasoningLevel: 'Nivel de razonamiento',
|
|
reasoningLevels: {
|
|
providerDefault: 'Usar valor predeterminado del proveedor',
|
|
disabled: 'Desactivado',
|
|
enabled: 'Activado',
|
|
minimal: 'Mínimo',
|
|
low: 'Bajo',
|
|
medium: 'Medio',
|
|
high: 'Alto',
|
|
xhigh: 'Extra alto',
|
|
max: 'Máximo',
|
|
},
|
|
contextLength: 'Ventana de contexto',
|
|
contextLengthPlaceholder: 'Desconocido',
|
|
contextLengthInvalid: 'La ventana de contexto debe ser un entero positivo',
|
|
extraParameters: 'Parámetros adicionales',
|
|
addParameter: 'Añadir parámetro',
|
|
keyName: 'Nombre de la clave',
|
|
type: 'Tipo',
|
|
value: 'Valor',
|
|
string: 'Cadena',
|
|
number: 'Número',
|
|
boolean: 'Booleano',
|
|
object: 'Objeto',
|
|
objectJsonPlaceholder: '{ "type": "disabled" }',
|
|
invalidJsonObject: 'El valor debe ser un objeto JSON válido',
|
|
selectModelProvider: 'Seleccionar proveedor del modelo',
|
|
modelProviderDescription:
|
|
'Por favor, introduce el nombre del modelo proporcionado por el proveedor',
|
|
modelManufacturer: 'Fabricante del modelo',
|
|
aggregationPlatform: 'Plataforma de agregación',
|
|
selfDeployed: 'Autoalojado',
|
|
builtin: 'Integrado',
|
|
selectModel: 'Seleccionar modelo',
|
|
testSuccess: 'Prueba exitosa',
|
|
testError:
|
|
'Error en la prueba, por favor verifica la configuración del modelo',
|
|
llmModels: 'Modelos LLM',
|
|
localProvider: 'Local',
|
|
localProviderDescription: 'Modelos configurados y gestionados localmente',
|
|
spaceProviderDescription:
|
|
'Modelos sincronizados desde tu cuenta de LangBot',
|
|
spaceDisabledForLocalAccount:
|
|
'Inicia sesión con una cuenta de LangBot para usar modelos en la nube',
|
|
syncModels: 'Sincronizar',
|
|
syncSuccess:
|
|
'Sincronización completa: {{created}} creados, {{updated}} actualizados',
|
|
syncError: 'Error de sincronización: ',
|
|
spaceModelReadOnly: 'Los modelos de Space son de solo lectura',
|
|
noSpaceModels:
|
|
'No hay modelos de Space. Haz clic en Sincronizar para obtener modelos de Space.',
|
|
noLocalModels:
|
|
'No hay modelos locales. Haz clic en Crear para añadir un modelo.',
|
|
providerCount: '{{count}} proveedores',
|
|
addModel: 'Añadir modelo',
|
|
manualAdd: 'Manual',
|
|
scanAdd: 'Escanear',
|
|
scanModels: 'Escanear modelos',
|
|
scanModelsHint:
|
|
'Lee los modelos disponibles del proveedor actual y luego elige cuáles agregar.',
|
|
scannedModels: 'Modelos detectados',
|
|
scanDebug: 'Información de depuración',
|
|
searchScannedModels: 'Buscar modelos detectados',
|
|
noScannedModels:
|
|
'Todavía no hay resultados. Pulsa el botón superior para escanear.',
|
|
noScannedModelsMatch: 'No hay modelos coincidentes',
|
|
addSelectedModels: 'Agregar seleccionados',
|
|
addSelectedModelsSuccess: 'Se agregaron {{count}} modelo(s)',
|
|
selectAll: 'Seleccionar todo',
|
|
alreadyAdded: 'Ya agregado',
|
|
addLLMModel: 'Añadir modelo LLM',
|
|
addEmbeddingModel: 'Añadir modelo Embedding',
|
|
provider: 'Proveedor',
|
|
existingProvider: 'Proveedor existente',
|
|
newProvider: 'Nuevo proveedor',
|
|
selectProvider: 'Seleccionar proveedor',
|
|
requester: 'Tipo de proveedor',
|
|
selectRequester: 'Seleccionar tipo de proveedor',
|
|
searchProviders: 'Buscar proveedores...',
|
|
langbotModelsDescription: 'Modelos en la nube impulsados por LangBot Space',
|
|
credits: 'Créditos',
|
|
loginWithSpace: 'Iniciar sesión con una cuenta de LangBot',
|
|
loginToUseModels:
|
|
'Inicia sesión con una cuenta de LangBot para usar modelos en la nube',
|
|
ownerMustBindSpace:
|
|
'The Workspace owner must connect a LangBot Account for LangBot Models.',
|
|
usesOwnerSpaceBilling:
|
|
"Uses the Workspace owner's LangBot Account billing and credits.",
|
|
noModels: 'No hay modelos configurados',
|
|
availability: {
|
|
available: 'Disponible en la última comprobación',
|
|
unavailable: 'No disponible en la última comprobación',
|
|
notChecked: 'Sin resultado de comprobación',
|
|
lastChecked: 'Comprobado {{time}}',
|
|
},
|
|
pricing: {
|
|
compact: '{{input}} / {{output}}',
|
|
inline: 'Entrada {{input}} · salida {{output}}',
|
|
title: 'Créditos por 1 M de tokens',
|
|
input: 'Entrada: {{credits}} créditos',
|
|
output: 'Salida: {{credits}} créditos',
|
|
unavailable:
|
|
'No se encontró el precio. Es posible que el modelo haya sido retirado.',
|
|
},
|
|
langbotModels: 'Modelos LangBot',
|
|
spaceTrialTooltip:
|
|
'¡Créditos de prueba gratuitos disponibles! Inicia sesión con una cuenta de LangBot para acceder a modelos en la nube sin configuración.',
|
|
unlockModels: 'Inicia sesión para usar',
|
|
editProvider: 'Editar proveedor',
|
|
addProvider: 'Añadir proveedor',
|
|
addProviderHint: 'Añade proveedores para usar modelos de otras fuentes',
|
|
addProviderHintSimple: 'Añade proveedores para usar modelos',
|
|
noProviders: 'Aún no hay proveedores',
|
|
providerName: 'Nombre del proveedor',
|
|
providerNameRequired: 'El nombre del proveedor es obligatorio',
|
|
requesterRequired: 'El tipo de proveedor es obligatorio',
|
|
providerSaved: 'Proveedor guardado',
|
|
providerCreated: 'Proveedor creado',
|
|
providerSaveError: 'Error al guardar el proveedor: ',
|
|
providerDeleted: 'Proveedor eliminado',
|
|
providerDeleteError: 'Error al eliminar el proveedor: ',
|
|
deleteProviderCascadeConfirmation:
|
|
'¿Eliminar este proveedor y TODOS los modelos que contiene? Esta acción es irreversible y no se puede deshacer.',
|
|
deleteProviderConfirmation:
|
|
'¿Estás seguro de que deseas eliminar este proveedor?',
|
|
loadError: 'Error al cargar datos',
|
|
chat: 'Chat',
|
|
embedding: 'Embedding',
|
|
rerank: 'Reordenar',
|
|
rerankUrlTooltip:
|
|
'URL completa para el endpoint de reordenación (ej: https://dashscope.aliyuncs.com/compatible-api/v1/reranks)',
|
|
rerankPathTooltip:
|
|
'Ruta añadida a la URL base (predeterminado: rerank, algunos servicios usan reranks)',
|
|
modelsCount: '{{count}} modelo(s)',
|
|
expandModels: 'Expandir',
|
|
collapseModels: 'Contraer',
|
|
fallback: {
|
|
primary: 'Modelo principal',
|
|
fallbackList: 'Modelos de respaldo',
|
|
addFallback: 'Añadir modelo de respaldo',
|
|
},
|
|
},
|
|
bots: {
|
|
pluginSubscriptions: {
|
|
incompleteEvents:
|
|
'Este bot solo admite algunos de los eventos suscritos ({{events}}). El procesador podría no comportarse como se espera en todos los casos.',
|
|
description:
|
|
'Recibe automáticamente los eventos declarados por el plugin, de forma independiente de las rutas anteriores.',
|
|
empty: 'No hay procesadores vinculados.',
|
|
add: 'Añadir procesador de plugin',
|
|
existing: 'Elegir configuración',
|
|
new: 'Nueva configuración',
|
|
noExisting: 'No hay configuraciones disponibles. Crea una.',
|
|
shared:
|
|
'Los bots que usan la misma configuración comparten ajustes y estado de ejecución.',
|
|
saveHint: 'Guarda el bot para activar el vínculo.',
|
|
createAndBind: 'Crear y vincular',
|
|
created: 'Configuración creada. Guarda el bot para activar el vínculo.',
|
|
enable: 'Activar {{name}}',
|
|
remove: 'Desvincular {{name}}',
|
|
configure: 'Configurar',
|
|
logs: 'Ver registros',
|
|
},
|
|
applyFailed: 'Configuración guardada, pero no se pudo aplicar',
|
|
internalErrorHint:
|
|
'Se produjo un error interno. Consulta los registros del servidor con esta referencia.',
|
|
errorReference: 'Referencia del error: {{id}}',
|
|
title: 'Bots',
|
|
description:
|
|
'Crea y gestiona Bots, que son los puntos de entrada para que LangBot se conecte con diversas plataformas',
|
|
createBot: 'Crear Bot',
|
|
selectFromSidebar: 'Selecciona un Bot de la barra lateral',
|
|
editBot: 'Editar Bot',
|
|
getBotListError: 'Error al obtener la lista de Bots: ',
|
|
botName: 'Nombre del Bot',
|
|
botDescription: 'Descripción del Bot',
|
|
botNameRequired: 'El nombre del Bot no puede estar vacío',
|
|
botDescriptionRequired: 'La descripción del Bot no puede estar vacía',
|
|
adapterRequired: 'El adaptador no puede estar vacío',
|
|
connectionMode: 'Método de conexión',
|
|
connectionModeDescription:
|
|
'Elige un método de conexión compatible con este adaptador.',
|
|
connectionWebhook: 'Webhook',
|
|
connectionWebhookDescription:
|
|
'La plataforma envía eventos a una URL generada por LangBot.',
|
|
connectionPersistent: 'Conexión persistente',
|
|
connectionPersistentDescription:
|
|
'LangBot mantiene abierta una conexión saliente de socket o streaming.',
|
|
noAdaptersForConnectionMode:
|
|
'Ningún adaptador instalado admite este método de conexión.',
|
|
defaultDescription: 'Un Bot',
|
|
getBotConfigError: 'Error al obtener la configuración del Bot: ',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar: ',
|
|
createSuccess: 'Creado correctamente. Configura el enrutamiento de eventos',
|
|
createError: 'Error al crear: ',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteError: 'Error al eliminar: ',
|
|
deleteConfirmation: '¿Estás seguro de que deseas eliminar este Bot?',
|
|
platformAdapter: 'Selección de plataforma/adaptador',
|
|
selectAdapter: 'Seleccionar adaptador',
|
|
legacyAdapters: 'Adaptadores heredados',
|
|
legacyAdapterBadge: 'Heredado',
|
|
legacyAdaptersHint:
|
|
'Estos adaptadores tienen versiones nuevas orientadas a eventos.\nSe mantienen solo para configuraciones existentes y no se recomiendan para Bots nuevos.',
|
|
adapterConfig: 'Configuración del adaptador',
|
|
viewAdapterDocs: 'Ver documentación',
|
|
bindPipeline: 'Vincular Pipeline',
|
|
selectPipeline: 'Seleccionar Pipeline',
|
|
selectBot: 'Seleccionar Bot',
|
|
botLogTitle: 'Registro del Bot',
|
|
enableAutoRefresh: 'Activar actualización automática',
|
|
session: 'Sesión',
|
|
yesterday: 'Ayer',
|
|
earlier: 'Anterior',
|
|
dateFormat: '{{day}}/{{month}}',
|
|
setBotEnableError: 'Error al establecer el estado de activación del Bot',
|
|
log: 'Registro',
|
|
configuration: 'Configuración',
|
|
logs: 'Registros',
|
|
basicInfo: 'Información básica',
|
|
basicInfoDescription: 'Establece el nombre y la descripción del Bot',
|
|
routingConnection: 'Enrutamiento y conexión',
|
|
routingConnectionDescription:
|
|
'Vincula el Pipeline que procesa los mensajes de este Bot',
|
|
eventRouting: 'Enrutamiento de eventos',
|
|
eventRoutingDescription:
|
|
'Elige qué procesador maneja cada evento recibido por este Bot. Edita la lógica en la configuración del Agent o Pipeline correspondiente. Los Pipelines solo admiten eventos de mensaje.',
|
|
eventBindings: 'Rutas de eventos',
|
|
addEventBinding: 'Añadir ruta',
|
|
addBehavior: 'Añadir comportamiento',
|
|
commonScenarios: 'Escenarios habituales',
|
|
dragEventRoute: 'Arrastrar ruta {{index}}',
|
|
behaviorReplyMessages: 'Responder a mensajes',
|
|
behaviorReplyMessagesDescription:
|
|
'Envía los mensajes entrantes a un procesador.',
|
|
behaviorWelcomeMembers: 'Dar la bienvenida a nuevos miembros',
|
|
behaviorWelcomeMembersDescription:
|
|
'Ejecuta un procesador cuando alguien se une a un grupo.',
|
|
behaviorHandleDepartures: 'Gestionar salidas de miembros',
|
|
behaviorHandleDeparturesDescription:
|
|
'Ejecuta un procesador cuando alguien sale o es expulsado.',
|
|
behaviorReviewFriendRequests: 'Revisar solicitudes de amistad',
|
|
behaviorReviewFriendRequestsDescription:
|
|
'Envía las nuevas solicitudes de amistad a un procesador.',
|
|
behaviorHandleModeration: 'Gestionar eventos de moderación',
|
|
behaviorHandleModerationDescription:
|
|
'Ejecuta un procesador cuando se restringe a un miembro del grupo.',
|
|
behaviorCustom: 'Configurar otro evento',
|
|
behaviorCustomDescription:
|
|
'Añade una ruta y elige entre los eventos admitidos por este adaptador.',
|
|
eventPattern: 'Evento',
|
|
eventPatternPlaceholder: 'Seleccionar evento',
|
|
targetType: 'Tipo de destino',
|
|
target: 'Procesador',
|
|
targetAgent: 'Agent',
|
|
targetPipeline: 'Flujo',
|
|
targetDiscard: 'Descartar',
|
|
selectTarget: 'Seleccionar procesador',
|
|
searchTarget: 'Buscar procesadores…',
|
|
noTargetFound: 'No se encontraron procesadores compatibles',
|
|
priority: 'Prioridad',
|
|
enabled: 'Activado',
|
|
eventBindingDescriptionPlaceholder: 'Descripción de la regla',
|
|
noEventBindings: 'No hay rutas de eventos',
|
|
unsupportedPipelineEvent: 'Los flujos solo admiten eventos message.*',
|
|
disable: 'Desactivar',
|
|
enable: 'Activar',
|
|
disabledBindings: 'Desactivado',
|
|
adapterEventsTitle: 'Eventos admitidos',
|
|
adapterEventsDescription: '{{count}} tipos de evento',
|
|
adapterEventsMore: '{{count}} más',
|
|
advancedEventValues: 'Ver todos',
|
|
eventGroup: 'Grupo',
|
|
eventGroupNames: {
|
|
bot: 'Estado del bot',
|
|
feedback: 'Comentarios',
|
|
friend: 'Amigos',
|
|
group: 'Grupos',
|
|
message: 'Mensajes',
|
|
platform: 'Plataforma',
|
|
},
|
|
routeConflictTitle: 'Algunas rutas se superponen',
|
|
routeConflictShadowed:
|
|
'{{shadowed}} podría no ejecutarse porque {{winner}} procesa primero los mismos eventos.',
|
|
routeConflictMore: 'Hay {{count}} conflictos de rutas adicionales.',
|
|
routeFallbackCatchAll: '{{route}} es la ruta general.',
|
|
routeFallbackIgnored:
|
|
'Se ignoran los eventos sin ruta coincidente. Añade una ruta general solo si todos los eventos necesitan un resultado explícito.',
|
|
testRoute: 'Comprobar ruta',
|
|
adapterEventDebugAction: 'Probar escucha',
|
|
adapterEventDebugTitle: 'Depuración de eventos de plataforma',
|
|
adapterEventDebugDescription:
|
|
'Genera un evento en {{platform}}. Aparecerá aquí cuando lo reciba el adaptador.',
|
|
adapterEventObserveOnly:
|
|
'Esta ventana solo observa eventos. Los eventos entrantes siguen las rutas actuales.',
|
|
adapterEventPreparing: 'Preparando',
|
|
adapterEventListening: 'Escuchando',
|
|
adapterEventListenerUnavailable: 'Escucha interrumpida',
|
|
adapterEventLoadFailed:
|
|
'No se pudieron leer los eventos. Comprueba que el bot está en ejecución y vuelve a intentarlo.',
|
|
adapterEventReceivedCount: '{{count}} eventos recibidos',
|
|
adapterEventClear: 'Limpiar',
|
|
adapterEventEmptyTitle: 'Esperando un evento de plataforma',
|
|
adapterEventEmptyDescription:
|
|
'Envía un mensaje o genera un evento en {{platform}}.',
|
|
adapterEventData: 'Ver datos del evento',
|
|
adapterEventNeedsSavedBot: 'Guarda el bot antes de escuchar eventos.',
|
|
adapterEventCurrentPlatform: 'la plataforma actual',
|
|
adapterConfigurationTest: 'Probar la configuración del adaptador',
|
|
adapterConfigurationTestDescription:
|
|
'Guarda y activa el bot; después genera un evento para comprobar la configuración.',
|
|
refreshRouteStatus: 'Actualizar estado',
|
|
routeStatusIdle: 'Aún sin ejecuciones',
|
|
routeStatusRefreshFailed: 'No se pudo actualizar el estado de la ruta.',
|
|
routeStatus: {
|
|
matched: 'Coincide',
|
|
delivered: 'Entregado',
|
|
discarded: 'Descartado',
|
|
failed: 'Fallido',
|
|
not_matched: 'Sin coincidencia',
|
|
},
|
|
routeStatusDetail: {
|
|
matched: 'Esta ruta coincide con el evento.',
|
|
delivered: 'El procesador recibió el evento.',
|
|
discarded: 'El evento se descartó intencionadamente.',
|
|
failed: 'La ruta no pudo completarse.',
|
|
not_matched: 'Ninguna ruta configurada coincide con el evento.',
|
|
},
|
|
routeFailure: {
|
|
binding_disabled: 'Esta ruta está desactivada.',
|
|
event_pattern_mismatch: 'El evento no coincide con esta ruta.',
|
|
filters_mismatch:
|
|
'Los datos de prueba no cumplen las condiciones de la ruta.',
|
|
lower_priority: 'Otra ruta coincidente tiene mayor prioridad.',
|
|
route_not_found: 'Ninguna ruta coincide con este evento.',
|
|
processor_incompatible:
|
|
'El procesador seleccionado no admite este evento.',
|
|
processor_not_found: 'El procesador seleccionado no está disponible.',
|
|
runner_failed: 'El ejecutor del Agent falló al procesar el evento.',
|
|
delivery_failed: 'El procesador terminó, pero la entrega falló.',
|
|
},
|
|
dryRunTitle: 'Comprobar ruta de eventos',
|
|
dryRunDescription:
|
|
'Elige un evento para ver con qué ruta y procesador coincide.',
|
|
dryRunEventType: 'Tipo de evento',
|
|
dryRunSampleReady: 'Evento de ejemplo listo',
|
|
dryRunSampleDescription:
|
|
'LangBot ha preparado datos de ejemplo para {{event}}. Normalmente puedes usarlos sin cambios.',
|
|
dryRunEditPayload: 'Datos de prueba',
|
|
dryRunHidePayload: 'Ocultar datos',
|
|
dryRunPayload: 'Datos de prueba (JSON)',
|
|
dryRunPayloadHint:
|
|
'Úsalos para probar condiciones de mensajes y conversaciones.',
|
|
dryRunPayloadJsonError: 'Introduce un JSON válido.',
|
|
dryRunPayloadObjectError: 'Los datos deben ser un objeto JSON.',
|
|
dryRunNeedsSavedBot: 'Guarda el bot antes de comprobar las rutas.',
|
|
dryRunFailed: 'No se pudo comprobar la ruta. Inténtalo más tarde.',
|
|
dryRunAction: 'Ver coincidencia',
|
|
dryRunRunning: 'Comprobando…',
|
|
dryRunMatched: 'Ruta coincidente',
|
|
dryRunNotMatched: 'Ninguna ruta coincide',
|
|
dryRunTarget: 'Procesador de destino',
|
|
dryRunNoTarget: 'Sin destino',
|
|
dryRunMatchedRule: 'Regla coincidente',
|
|
dryRunRuleIndex: 'Ruta {{index}}',
|
|
dryRunNoRule: 'Ninguna regla coincide',
|
|
dryRunDiagnostics: 'Pasos de diagnóstico',
|
|
dryRunDiagnosticSelected: 'Se seleccionó {{route}}.',
|
|
dryRunDiagnosticMatched: '{{route}} coincide. {{reason}}',
|
|
dryRunDiagnosticSkipped: 'Se omitió {{route}}. {{reason}}',
|
|
eventCustom: 'Evento personalizado',
|
|
eventWildcard: 'Todos los eventos',
|
|
eventNamespaceWildcard: '{{namespace}}.*',
|
|
eventNames: {
|
|
message_received: 'Mensaje recibido',
|
|
message_edited: 'Mensaje editado',
|
|
message_deleted: 'Mensaje eliminado',
|
|
message_reaction: 'Reacción a un mensaje',
|
|
feedback_received: 'Comentarios recibidos',
|
|
friend_request_received: 'Solicitud de amistad recibida',
|
|
friend_added: 'Amigo añadido',
|
|
group_member_joined: 'Miembro unido al grupo',
|
|
group_member_left: 'Miembro salió del grupo',
|
|
group_member_banned: 'Miembro bloqueado',
|
|
bot_invited_to_group: 'Bot invitado al grupo',
|
|
bot_removed_from_group: 'Bot eliminado del grupo',
|
|
bot_muted: 'Bot silenciado',
|
|
bot_unmuted: 'Bot ya no silenciado',
|
|
platform_specific: 'Evento específico de la plataforma',
|
|
},
|
|
eventDescriptions: {
|
|
all: 'Coincide con todos los eventos recibidos por este adaptador.',
|
|
namespace: 'Coincide con todos los eventos de {{group}}.',
|
|
namespace_bot:
|
|
'Coincide con invitaciones, expulsiones, silencios y otros cambios de estado del bot.',
|
|
namespace_feedback:
|
|
'Coincide con comentarios recibidos de la plataforma o de usuarios.',
|
|
namespace_friend: 'Coincide con solicitudes y cambios de amistad.',
|
|
namespace_group:
|
|
'Coincide con entradas, salidas, expulsiones y otros eventos de grupo.',
|
|
namespace_message:
|
|
'Coincide con mensajes recibidos, editados, eliminados y reacciones.',
|
|
namespace_platform:
|
|
'Coincide con eventos específicos de plataforma proporcionados por un adaptador.',
|
|
custom: 'Evento personalizado o aún sin descripción.',
|
|
message_received: 'Un usuario o grupo envía un nuevo mensaje al bot.',
|
|
message_edited:
|
|
'La plataforma informa de un cambio en un mensaje existente.',
|
|
message_deleted: 'La plataforma informa de la eliminación de un mensaje.',
|
|
message_reaction: 'Un usuario añade o elimina una reacción a un mensaje.',
|
|
feedback_received:
|
|
'Se reciben comentarios de la plataforma o de un usuario.',
|
|
friend_request_received: 'Alguien solicita añadir al bot como amigo.',
|
|
friend_added: 'Se ha creado una relación de amistad.',
|
|
group_member_joined: 'Un miembro se une a un grupo donde está el bot.',
|
|
group_member_left: 'Un miembro abandona un grupo donde está el bot.',
|
|
group_member_banned: 'Un miembro del grupo es bloqueado o expulsado.',
|
|
bot_invited_to_group: 'El bot es invitado a un grupo.',
|
|
bot_removed_from_group: 'El bot es expulsado de un grupo.',
|
|
bot_muted: 'El bot es silenciado en un grupo.',
|
|
bot_unmuted: 'Se retira el silencio del bot en un grupo.',
|
|
platform_specific: 'Evento de plataforma específico del adaptador.',
|
|
},
|
|
conditions: 'Condiciones',
|
|
conditionsDescription:
|
|
'Deben cumplirse todas las condiciones. Déjalo vacío para activar siempre.',
|
|
conditionsEmpty: 'Sin condiciones: siempre se activa.',
|
|
addFilter: 'Añadir condición',
|
|
filterChatType: 'Tipo de sesión',
|
|
filterChatId: 'ID de sesión',
|
|
filterMessageText: 'Texto del mensaje',
|
|
filterMessageElement: 'Elemento del mensaje',
|
|
operator_eq: 'es igual a',
|
|
operator_neq: 'no es igual a',
|
|
operator_contains: 'contiene',
|
|
operator_not_contains: 'no contiene',
|
|
operator_starts_with: 'empieza por',
|
|
operator_regex: 'expresión regular',
|
|
routingRules: 'Reglas de enrutamiento condicional',
|
|
routingRulesDescription:
|
|
'Las reglas se evalúan en orden; la primera coincidencia enruta a su pipeline. Si ninguna coincide, se usa el pipeline predeterminado.',
|
|
addRoutingRule: 'Agregar regla',
|
|
ruleTypeLauncherType: 'Tipo de sesión',
|
|
ruleTypeLauncherId: 'ID de sesión',
|
|
ruleTypeMessageContent: 'Contenido del mensaje',
|
|
operatorEq: 'Igual a',
|
|
operatorNeq: 'No igual a',
|
|
operatorContains: 'Contiene',
|
|
operatorNotContains: 'No contiene',
|
|
operatorStartsWith: 'Comienza con',
|
|
operatorRegex: 'Regex',
|
|
operatorHas: 'Tiene',
|
|
operatorNotHas: 'No tiene',
|
|
ruleTypeMessageHasElement: 'Elemento del mensaje',
|
|
ruleValueElementPlaceholder: 'Seleccionar tipo de elemento',
|
|
elementImage: 'Imagen',
|
|
elementVoice: 'Voz',
|
|
elementFile: 'Archivo',
|
|
elementForward: 'Reenvío',
|
|
elementFace: 'Emoji',
|
|
elementAt: '@Mención',
|
|
elementAtAll: '@Todos',
|
|
elementQuote: 'Cita',
|
|
ruleValuePlaceholder: 'Valor de coincidencia',
|
|
ruleValueLauncherIdPlaceholder: 'ID de grupo o usuario',
|
|
ruleValueMessagePlaceholder: 'Texto del mensaje',
|
|
ruleValuePrefixPlaceholder: 'ej. !draw',
|
|
ruleValueRegexpPlaceholder: 'ej. ^/help',
|
|
pipelineDiscard: 'Descartar mensaje',
|
|
sessionTypePerson: 'Chat privado',
|
|
sessionTypeGroup: 'Chat grupal',
|
|
adapterConfigDescription:
|
|
'Configura el adaptador de plataforma seleccionado',
|
|
dangerZone: 'Zona de peligro',
|
|
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
|
deleteBotAction: 'Eliminar este Bot',
|
|
deleteBotHint:
|
|
'Una vez eliminado, toda la configuración asociada se eliminará permanentemente.',
|
|
webhookUrl: 'URL de callback Webhook',
|
|
webhookUrlCopied: 'URL del Webhook copiada',
|
|
webhookUrlHint:
|
|
'Haz clic en el campo para seleccionar todo, luego presiona Ctrl+C (Mac: Cmd+C) para copiar, o haz clic en el botón',
|
|
webhookUrlHintEither:
|
|
'Usa cualquiera de las dos URL anteriores en la configuración de tu plataforma',
|
|
webhookSaasHint:
|
|
'Webhook requiere un dominio accesible públicamente. LangBot Cloud proporciona un punto de acceso público listo para usar para tu Bot.',
|
|
webhookSaasLink: 'Más información sobre LangBot Cloud',
|
|
adapterCategory: {
|
|
popular: 'Popular',
|
|
china: 'China',
|
|
global: 'Global',
|
|
protocol: 'Protocolo',
|
|
},
|
|
logLevel: 'Nivel de registro',
|
|
allLevels: 'Todos los niveles',
|
|
selectLevel: 'Seleccionar nivel',
|
|
levelsSelected: 'niveles seleccionados',
|
|
viewDetailedLogs: 'Ver registros detallados',
|
|
viewDetails: 'Detalles',
|
|
collapse: 'Contraer',
|
|
imagesAttached: 'imagen(es) adjunta(s)',
|
|
noLogs: 'Aún no hay registros',
|
|
sessionMonitor: {
|
|
title: 'Sesiones',
|
|
sessions: 'Sesiones',
|
|
noSessions: 'No se encontraron sesiones',
|
|
selectSession: 'Selecciona una sesión para ver los mensajes',
|
|
noMessages: 'No hay mensajes en esta sesión',
|
|
messages: 'mensajes',
|
|
messageCount: '{{count}} mensajes',
|
|
loading: 'Cargando...',
|
|
loadingSessions: 'Cargando sesiones...',
|
|
loadingMessages: 'Cargando mensajes...',
|
|
user: 'Usuario',
|
|
variables: 'Variables',
|
|
platform: 'Plataforma',
|
|
lastActive: 'Última actividad',
|
|
refresh: 'Actualizar',
|
|
active: 'Activo',
|
|
inactive: 'Inactivo',
|
|
discarded: 'Descartado',
|
|
userMessage: 'Usuario',
|
|
botMessage: 'Asistente',
|
|
totalSessions: '{{count}} sesiones',
|
|
userSearch: 'ID o nombre de usuario',
|
|
startDate: 'Fecha de inicio',
|
|
endDate: 'Fecha de fin',
|
|
},
|
|
admins: {
|
|
title: 'Admins',
|
|
description:
|
|
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
|
addAdmin: 'Add Admin',
|
|
launcherType: 'Type',
|
|
launcherId: 'ID',
|
|
typePerson: 'Person',
|
|
typeGroup: 'Group',
|
|
placeholderId: 'User or group ID',
|
|
addSuccess: 'Admin added',
|
|
addError: 'Failed to add admin: ',
|
|
deleteSuccess: 'Admin removed',
|
|
deleteError: 'Failed to remove admin: ',
|
|
noAdmins: 'No admins configured',
|
|
setAdminTitle: 'Set as admin',
|
|
adminBadge: 'Admin',
|
|
configureAdmins: 'Manage Admins',
|
|
removeAdminTitle: 'Remove admin',
|
|
},
|
|
},
|
|
agents: {
|
|
monitoring: {
|
|
description:
|
|
'Consulta el evento, la salida del modelo y las herramientas de cada tarea.',
|
|
empty:
|
|
'Sin ejecuciones. Activa un evento o ejecuta una prueba de depuración.',
|
|
input: 'Entrada inicial',
|
|
eventData: 'Datos del evento',
|
|
execution: 'Pasos de ejecución',
|
|
rawEvents: 'Eventos sin procesar',
|
|
inputUnavailable: 'No se registró la entrada de esta ejecución.',
|
|
},
|
|
eventProcessor: {
|
|
configurations: 'Configuraciones de procesadores de plugins',
|
|
configTab: 'Configuración',
|
|
logsTab: 'Registros',
|
|
noSettings: 'Este procesador de plugin no requiere configuración.',
|
|
createPageTitle: 'Crear procesador de eventos',
|
|
processWithPlugin: 'Procesar con código del plugin',
|
|
pluginSettings: 'Ajustes del plugin',
|
|
pluginSettingsDescription: 'Parámetros definidos por este plugin.',
|
|
selectToDebug: 'Selecciona un plugin arriba para iniciar la depuración.',
|
|
debugOutput: 'Salida del procesador',
|
|
debugDescription:
|
|
'Eventos de entrada, registros del plugin y resultados de acciones de esta prueba.',
|
|
debugNotice:
|
|
'El plugin procesa un evento de prueba. Las acciones de plataforma usan Mock y no envían mensajes reales; las demás herramientas se ejecutan según su configuración.',
|
|
create: 'Crear procesador de plugin',
|
|
type: 'Procesador de plugin',
|
|
description:
|
|
'Procesa eventos con código y lógica definidos por un plugin.',
|
|
component: 'Procesador de plugin',
|
|
selectComponent: 'Seleccionar un procesador de plugin',
|
|
unavailable: 'Componente no disponible',
|
|
noComponents: 'No hay plugins instalados que proporcionen procesadores.',
|
|
installPlugin: 'Instalar un plugin',
|
|
loadError: 'No se pudieron cargar los detalles.',
|
|
refresh: 'Actualizar',
|
|
runs: 'Ejecuciones',
|
|
noRuns: 'Sin ejecuciones. Vincula este procesador a un bot para empezar.',
|
|
bindBot: 'Vincular a un bot',
|
|
trace: 'Registros y flujo de mensajes',
|
|
selectRun: 'Selecciona una ejecución para ver los detalles.',
|
|
input: 'Evento recibido',
|
|
destination: 'Destino de entrega',
|
|
loadMore: 'Cargar más',
|
|
activation:
|
|
'Instala un plugin, crea una configuración de procesador y vincula un bot.',
|
|
status_timeout: 'Tiempo agotado',
|
|
status_pending: 'Pendiente',
|
|
status_running: 'En ejecución',
|
|
status_completed: 'Completado',
|
|
status_failed: 'Error',
|
|
status_cancelled: 'Cancelado',
|
|
status_queued: 'En cola',
|
|
trace_run_completed: 'Ejecución completada',
|
|
trace_run_failed: 'Ejecución fallida',
|
|
trace_tool_call_started: 'Acción iniciada',
|
|
trace_tool_call_completed: 'Resultado de la acción',
|
|
},
|
|
debugData: {
|
|
chatId: 'ID del chat',
|
|
feedbackType:
|
|
'Tipo de valoración (1: positiva, 2: negativa, 3: cancelar)',
|
|
title: 'Datos del evento',
|
|
form: 'Campos comunes',
|
|
json: 'JSON completo',
|
|
groupId: 'ID del grupo',
|
|
memberId: 'ID del miembro',
|
|
memberName: 'Nombre del miembro',
|
|
userId: 'ID del usuario',
|
|
userName: 'Nombre del usuario',
|
|
requesterId: 'ID del solicitante',
|
|
requesterName: 'Nombre del solicitante',
|
|
messageId: 'ID del mensaje',
|
|
duration: 'Duración (segundos)',
|
|
message: 'Contenido del mensaje',
|
|
newMessage: 'Contenido editado',
|
|
verificationMessage: 'Mensaje de verificación',
|
|
reaction: 'Reacción',
|
|
groupName: 'Nombre del grupo',
|
|
feedback: 'Comentarios',
|
|
rating: 'Puntuación',
|
|
eventName: 'Nombre del evento',
|
|
privateChat: 'Vacío para chat privado',
|
|
sampleUser: 'Usuario de prueba',
|
|
sampleMessage: 'Hola',
|
|
sampleFeedback: 'Muy útil',
|
|
invalidField: 'Revisa {{field}}',
|
|
},
|
|
title: 'Procesadores',
|
|
description:
|
|
'Crea procesadores reutilizables y úsalos en el enrutamiento de eventos del bot',
|
|
create: 'Crear procesador',
|
|
editAgent: 'Editar Agent',
|
|
selectFromSidebar: 'Selecciona un procesador en la barra lateral',
|
|
agentType: 'Agent',
|
|
agentTypeDescription:
|
|
'Usa un runner para procesar mensajes, miembros de grupo, amigos, retroalimentación y otros eventos de plataforma.',
|
|
pipelineType: 'Flujo de trabajo',
|
|
kindBadgeAgent: 'Agent',
|
|
kindBadgePipeline: 'Pipeline',
|
|
groupByKind: 'Agrupar por tipo',
|
|
groupByKindShort: 'Agrupar',
|
|
pipelineTypeDescription:
|
|
'Sigue un flujo fijo: recibir un mensaje, consultar a la IA y responder al usuario, con bases de conocimiento y plugins configurables. Solo procesa eventos de mensaje, para tareas con pasos claros y control del proceso.',
|
|
allEvents: 'Compatible con todos los eventos',
|
|
messageEventsOnly: 'Solo eventos de mensaje',
|
|
chooseType: 'Elegir cómo funciona',
|
|
chooseTypeDescription:
|
|
'Elige primero el tipo de procesador. Podrás configurarlo después de crearlo.',
|
|
diagramHint: 'Cómo funciona',
|
|
agentDiagramTitle: 'Agent: decidir y actuar',
|
|
agentDiagramDescription:
|
|
'Un Agent recibe diversos eventos, usa modelos y herramientas para comprender la situación y decide qué hacer.',
|
|
pipelineDiagramTitle: 'Flujo: seguir pasos definidos',
|
|
pipelineDiagramDescription:
|
|
'Un flujo solo procesa eventos de mensajes y ejecuta los pasos en el orden configurado.',
|
|
pipelineDiagramFlow: 'Los mensajes siguen una secuencia fija',
|
|
diagramEvents: 'Eventos de plataforma',
|
|
diagramAgentCanUse: 'Disponible para el Agent',
|
|
diagramMessages: 'Mensajes',
|
|
diagramMembers: 'Miembros',
|
|
diagramFeedback: 'Comentarios',
|
|
diagramDecide: 'Comprender y decidir',
|
|
diagramModel: 'Usar modelo',
|
|
diagramTools: 'Usar herramientas',
|
|
diagramActions: 'Actuar',
|
|
diagramMessage: 'Mensaje',
|
|
diagramPreprocess: 'Preparar',
|
|
diagramAI: 'IA',
|
|
diagramPostprocess: 'Refinar',
|
|
diagramOutput: 'Salida',
|
|
basicInfo: 'Información básica',
|
|
basicInfoDescription: 'Establece el nombre, icono y descripción',
|
|
runnerSettings: 'Runner',
|
|
advanced: 'Avanzado',
|
|
eventsAndTools: 'Eventos y herramientas',
|
|
eventsAndToolsDescription:
|
|
'Define los eventos de activación y las herramientas disponibles.',
|
|
bindableEvents: 'Rango de eventos vinculables',
|
|
bindableEventsDescription:
|
|
'Limita qué rutas de eventos del bot pueden seleccionar este Agent. El valor predeterminado sirve para la mayoría de los casos.',
|
|
configuredEvents: 'Eventos añadidos',
|
|
configuredEventsCount: '{{count}} en total',
|
|
addEvent: 'Añadir evento',
|
|
removeEvent: 'Eliminar evento',
|
|
eventActions: 'Herramientas activadas automáticamente',
|
|
eventToolEnabled: 'Activado',
|
|
eventToolsEnabledCount: '{{count}} herramientas activadas',
|
|
noEventActions: 'No hay acciones disponibles para este evento.',
|
|
noEventsConfigured: 'No hay eventos añadidos',
|
|
noEventsConfiguredDescription: 'Ningún evento puede activar este Agent.',
|
|
noEventsConfiguredBadge: 'Sin eventos',
|
|
apiTools: 'Acceso a herramientas',
|
|
apiToolsDescription: 'Elige qué herramientas puede llamar este Agent.',
|
|
otherTools: 'Otras herramientas',
|
|
otherToolsDescription:
|
|
'Elige herramientas de plataforma, sandbox, MCP, plugins y habilidades.',
|
|
apiToolsSelected: '{{count}} seleccionadas',
|
|
apiToolsSecurityHint:
|
|
'Activa solo las herramientas que necesita este Agent.',
|
|
apiToolsSearch: 'Buscar herramientas…',
|
|
eventApiTools: 'Herramientas de eventos',
|
|
eventToolUnavailable: 'No disponible',
|
|
eventApiToolsDescription:
|
|
'Los destinos se fijan a partir del evento actual. El Agent solo proporciona los parámetros de acción.',
|
|
platformApiTools: 'Herramientas de plataforma',
|
|
platformApiToolsDescription:
|
|
'El Agent puede elegir los ID de usuario, grupo o mensaje. Concede solo lo necesario.',
|
|
apiToolEvents: 'Eventos',
|
|
apiToolParameters: 'Parámetros del Agent',
|
|
apiToolSource: 'Origen',
|
|
apiToolNoParameters: 'ninguno',
|
|
sandboxTools: 'Sandbox',
|
|
mcpTools: 'MCP',
|
|
pluginTools: 'Plugins',
|
|
skillTools: 'Habilidades',
|
|
langbotBuiltIn: 'LangBot',
|
|
apiToolDetails: 'Detalles',
|
|
apiToolHideDetails: 'Ocultar',
|
|
apiToolsNoResults: 'Ninguna API o herramienta coincide',
|
|
apiToolsCatalogUnavailable:
|
|
'El backend de LangBot no devolvió el catálogo de herramientas API. Comprueba que esté actualizado y reiniciado; esto no significa que la plataforma no tenga herramientas.',
|
|
hostToolsCatalogUnavailable:
|
|
'El catálogo de herramientas no está disponible temporalmente.',
|
|
apiToolRisk: {
|
|
read: 'Solo lectura',
|
|
write: 'Acción',
|
|
dangerous: 'Sensible',
|
|
},
|
|
supportedEvents: 'Rango de eventos',
|
|
supportedEventsDescription:
|
|
'Elige todos los eventos, un grupo o eventos concretos. Las rutas del bot solo mostrarán este Agent para los eventos compatibles.',
|
|
searchEvents: 'Buscar eventos…',
|
|
noEventsFound: 'No se encontraron eventos',
|
|
nameRequired: 'El nombre no puede estar vacío',
|
|
createSuccess: 'Creado correctamente',
|
|
createError: 'Error al crear: ',
|
|
loadError: 'Error al cargar: ',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar: ',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteError: 'Error al eliminar: ',
|
|
deleteConfirmation: '¿Estás seguro de que deseas eliminar este Agent?',
|
|
dangerZone: 'Zona de peligro',
|
|
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
|
deleteAgentAction: 'Eliminar este Agent',
|
|
deleteAgentHint:
|
|
'Una vez eliminado, los eventos vinculados a él ya no podrán ejecutarse.',
|
|
noRunnerMetadata: 'No hay metadatos de Runner disponibles actualmente.',
|
|
runnerStatusLoading: 'Comprobando estado del ejecutor',
|
|
runnerStatusCheckFailed: 'No se pudo comprobar el estado del ejecutor',
|
|
runnerStatusCheckFailedDescription:
|
|
'Vuelve a comprobarlo. Si sigue fallando, revisa el backend y el entorno de ejecución de plugins.',
|
|
noRunnersAvailable: 'No hay ejecutores disponibles',
|
|
noRunnersAvailableDescription:
|
|
'Instala y activa una extensión de ejecutor antes de configurar este Agent.',
|
|
installedRunners: 'Ejecutores instalados',
|
|
marketplaceRunners: 'Plugins de ejecutores en el mercado',
|
|
viewMarketplace: 'Ver mercado',
|
|
restoringRunnerInstall:
|
|
'Restaurando la instalación del plugin y esperando al ejecutor…',
|
|
noInstalledRunners: 'Aún no hay extensiones de ejecutor instaladas.',
|
|
installingRunner: 'Instalando {{runner}}...',
|
|
runnerInstallSuccess:
|
|
'{{runner}} está instalado y listo para seleccionarse',
|
|
selectedRunnerUnavailable: 'El ejecutor seleccionado no está disponible',
|
|
selectedRunnerUnavailableDescription:
|
|
'{{runner}} no está registrado actualmente. Elige otro ejecutor o restaura su extensión.',
|
|
noRunnerSelected: 'Ningún ejecutor seleccionado',
|
|
runnerConfigIncomplete: 'Configuración del ejecutor incompleta',
|
|
runnerConfigIncompleteDescription:
|
|
'Completa los campos obligatorios: {{fields}}',
|
|
runnerReady: 'Ejecutor listo',
|
|
runnerReadyDescription:
|
|
'{{runner}} está registrado y el entorno de ejecución de plugins está conectado.',
|
|
debugTab: 'Depuración de eventos',
|
|
debugTitle: 'Depuración de eventos del Agent',
|
|
debugDescription:
|
|
'Ejecuta el Agent actual con un mensaje o evento de plataforma y revisa el resultado real.',
|
|
debugResetSession: 'Restablecer sesión',
|
|
debugEventType: 'Tipo de evento',
|
|
debugNoEventsTitle: 'No hay eventos para depurar',
|
|
debugNoEventsDescription:
|
|
'Añade primero un evento en Eventos y herramientas.',
|
|
debugMessageReceived: 'Mensaje recibido',
|
|
debugGroupMemberJoined: 'Miembro añadido al grupo',
|
|
debugGroupMemberLeft: 'Miembro salió del grupo',
|
|
debugFriendRequested: 'Solicitud de amistad recibida',
|
|
debugFeedbackReceived: 'Comentarios recibidos',
|
|
debugCustomEvent: 'Evento personalizado',
|
|
debugCustomEventType: 'Nombre del evento personalizado',
|
|
debugMessageInput: 'Entrada de conversación',
|
|
debugEventSummary: 'Resumen del evento',
|
|
debugInputPlaceholder: 'Introduce lo que debe procesar el Agent',
|
|
debugEventPayload: 'Datos del evento (JSON)',
|
|
debugSupportedEvents: 'El Agent admite',
|
|
debugRun: 'Ejecutar prueba',
|
|
debugSaveAndRun: 'Guardar y ejecutar',
|
|
debugRunning: 'En ejecución',
|
|
debugTranscript: 'Registro de depuración',
|
|
debugTranscriptDescription:
|
|
'Entradas y respuestas del Agent de esta sesión de depuración.',
|
|
debugEmptyTitle: 'Comprobar el comportamiento del Agent',
|
|
debugEmptyTranscript:
|
|
'Elige un evento, introduce datos de prueba y pulsa «Ejecutar prueba». Los resultados permanecen en esta página.',
|
|
debugAgentOutput: 'Salida del Agent',
|
|
debugReasoning: 'Pensando',
|
|
debugTextOutput: 'Salida de texto',
|
|
debugPlatformNotice:
|
|
'Las herramientas de plataforma usan Mock: el Agent realiza llamadas reales, pero las acciones se simulan sin enviar mensajes reales. Las demás herramientas se ejecutan según su configuración.',
|
|
debugToolSimulated: 'Simulación correcta · Mock',
|
|
debugStop: 'Detener depuración',
|
|
debugMockOptions: 'Escenario Mock (JSON)',
|
|
debugInvalidMock: 'El escenario Mock debe ser un objeto JSON válido.',
|
|
debugToolMockFailed: 'Fallo simulado · Mock',
|
|
debugMockOptionsHelp:
|
|
'De forma predeterminada, las llamadas tienen éxito. Asigna errores por nombre de herramienta en errors, datos de consulta en results y API no admitidas en unsupported_apis. Ejemplo: {"errors":{"event_reply":"Fallo de envío simulado"}}',
|
|
debugCancelled:
|
|
'Depuración detenida. Se conservan los registros anteriores.',
|
|
debugNoToolCalls:
|
|
'No se registraron llamadas a herramientas. Generar texto no implica haber enviado un mensaje.',
|
|
debugToolCount:
|
|
'{{count}} llamadas a herramientas registradas. Consulta su estado y resultados debajo.',
|
|
debugToolRunning: 'En ejecución',
|
|
debugToolCompleted: 'Completado',
|
|
debugToolFailed: 'Fallido',
|
|
debugToolInterrupted: 'Sin resultado devuelto',
|
|
debugToolArguments: 'Argumentos',
|
|
debugToolResult: 'Resultado',
|
|
debugTestInput: 'Entrada de prueba',
|
|
debugNoTextOutput: 'La ejecución terminó sin salida de texto.',
|
|
debugEventTypeRequired: 'Introduce un tipo de evento',
|
|
debugInputRequired: 'Introduce una entrada de conversación',
|
|
debugInvalidPayload: 'Los datos del evento deben ser un objeto JSON válido',
|
|
debugUnsupportedEvent: 'Este evento no está entre los que admite el Agent',
|
|
debugRunnerConfigInvalidDescription:
|
|
'La configuración del ejecutor está incompleta: {{message}}',
|
|
debugRunnerExecutionFailedDescription:
|
|
'La ejecución falló. Revisa el modelo y la configuración del ejecutor e inténtalo de nuevo.',
|
|
debugRunnerTimeoutDescription:
|
|
'Se agotó el tiempo de ejecución. Inténtalo más tarde o ajusta el tiempo límite del ejecutor.',
|
|
debugApiKeyRequired: 'Falta la clave API',
|
|
debugOpenRunnerConfig: 'Abrir configuración del ejecutor',
|
|
debugReviewRunnerConfig: 'Revisar configuración del ejecutor',
|
|
debugErrorDetails: 'Ver detalles del error',
|
|
debugRunFailed: 'Falló la depuración del Agent',
|
|
},
|
|
plugins: {
|
|
title: 'Extensiones',
|
|
description:
|
|
'Instala y configura plugins para ampliar la funcionalidad, selecciónalos en la configuración del Pipeline',
|
|
createPlugin: 'Crear plugin',
|
|
editPlugin: 'Editar plugin',
|
|
installed: 'Instalados',
|
|
marketplace: 'Tienda',
|
|
arrange: 'Ordenar plugins',
|
|
install: 'Instalar',
|
|
installPlugin: 'Instalar plugin',
|
|
newPlugin: 'Nuevo Plugin',
|
|
onlySupportGithub: 'Actualmente solo se admite la instalación desde GitHub',
|
|
enterGithubLink: 'Introduce el enlace de GitHub del plugin',
|
|
installing: 'Instalando plugin...',
|
|
installSuccess: 'Plugin instalado correctamente',
|
|
installFailed: 'Error en la instalación del plugin:',
|
|
searchPlugin: 'Buscar plugins',
|
|
sortBy: 'Ordenar por',
|
|
mostStars: 'Más estrellas',
|
|
recentlyAdded: 'Añadidos recientemente',
|
|
recentlyUpdated: 'Actualizados recientemente',
|
|
noMatchingPlugins: 'No se encontraron plugins coincidentes',
|
|
loading: 'Cargando...',
|
|
getPluginListError: 'Error al obtener la lista de plugins:',
|
|
noPluginInstalled: 'No hay plugins instalados',
|
|
noExtensionInstalled: 'No hay extensiones instaladas',
|
|
searchInstalled: 'Buscar extensiones instaladas',
|
|
noMatchingExtensions: 'Ninguna extensión coincide con "{{query}}"',
|
|
loadingExtensions: 'Cargando extensiones...',
|
|
groupByType: 'Agrupar por formato',
|
|
groupByTypeShort: 'Agrupar',
|
|
pluginConfig: 'Configuración del plugin',
|
|
pluginSort: 'Orden de plugins',
|
|
pluginSortDescription:
|
|
'El orden de los plugins afecta el orden de procesamiento dentro del mismo evento, arrastra la tarjeta del plugin para ordenar',
|
|
pluginSortSuccess: 'Orden de plugins aplicado correctamente',
|
|
pluginSortError: 'Error al ordenar plugins: ',
|
|
pluginNoConfig: 'El plugin no tiene elementos de configuración.',
|
|
systemDisabled: 'Sistema de plugins desactivado',
|
|
systemDisabledDesc:
|
|
'El sistema de plugins no está activado, por favor modifica la configuración según la documentación',
|
|
connectionError: 'Error de conexión del sistema de plugins',
|
|
connectionErrorDesc:
|
|
'Verifica la configuración del sistema de plugins o contacta al administrador.',
|
|
errorDetails: 'Detalles del error',
|
|
loadingStatus: 'Comprobando el estado del sistema de plugins...',
|
|
failedToGetStatus: 'Error al obtener el estado del sistema de plugins',
|
|
pluginSystemNotReady:
|
|
'El sistema de plugins no está listo, no se puede realizar esta operación',
|
|
debugInfo: 'Información de depuración',
|
|
debugInfoTitle: 'Información de depuración del plugin',
|
|
debugUrl: 'URL de depuración',
|
|
debugKey: 'Clave de depuración',
|
|
debugKeyExpires:
|
|
'Rota a las {{time}}; cada Workspace tiene una clave distinta',
|
|
noDebugKey: '(No establecida)',
|
|
debugKeyDisabled:
|
|
'La credencial de depuración no está disponible temporalmente',
|
|
boxStatusTitle: 'Box Runtime',
|
|
boxStatus: 'Estado',
|
|
boxConnected: 'Conectado',
|
|
boxUnavailable: 'No disponible',
|
|
boxBackend: 'Backend',
|
|
boxProfile: 'Perfil',
|
|
boxSandboxes: 'Sandboxes',
|
|
boxErrors: 'Errores',
|
|
boxSessionImage: 'Imagen',
|
|
boxSessionBackend: 'Backend',
|
|
boxSessionResources: 'Recursos',
|
|
boxSessionNetwork: 'Red',
|
|
boxStatusLoadFailed: 'Error al cargar el estado de Box',
|
|
failedToGetDebugInfo: 'Error al obtener la información de depuración',
|
|
copiedToClipboard: 'Copiado al portapapeles',
|
|
deleting: 'Eliminando...',
|
|
deletePlugin: 'Eliminar plugin',
|
|
cancel: 'Cancelar',
|
|
saveConfig: 'Guardar configuración',
|
|
saving: 'Guardando...',
|
|
confirmDeletePlugin:
|
|
'¿Estás seguro de que deseas eliminar el plugin ({{author}}/{{name}})?',
|
|
deleteDataCheckbox:
|
|
'También eliminar la configuración y el almacenamiento persistente del plugin',
|
|
confirmDelete: 'Confirmar eliminación',
|
|
deleteError: 'Error al eliminar: ',
|
|
close: 'Cerrar',
|
|
deleteConfirm: 'Confirmación de eliminación',
|
|
deleteSuccess: 'Eliminación exitosa',
|
|
dangerZone: 'Zona de peligro',
|
|
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
|
modifyFailed: 'Error al modificar: ',
|
|
componentName: {
|
|
Tool: 'Herramienta',
|
|
EventListener: 'Listener de eventos',
|
|
Command: 'Comando',
|
|
KnowledgeEngine: 'Motor de conocimiento',
|
|
Parser: 'Analizador',
|
|
Page: 'Página',
|
|
Runner: 'Ejecutor',
|
|
},
|
|
uploadLocal: 'Subir local',
|
|
debugging: 'Depuración',
|
|
uploadLocalPlugin: 'Subir plugin local',
|
|
localPreview: {
|
|
title: 'Previsualizar paquete de plugin local',
|
|
unpacking: 'Descomprimiendo vista previa del paquete...',
|
|
unpackComplete: 'Vista previa del paquete lista',
|
|
failed: 'No se pudo previsualizar el paquete',
|
|
pluginInfo: 'Información del plugin',
|
|
packageInfo: 'Información del paquete',
|
|
name: 'Nombre',
|
|
author: 'Autor',
|
|
version: 'Versión',
|
|
fileCount: 'Archivos',
|
|
dependencies: 'Dependencias',
|
|
components: 'Componentes',
|
|
ready:
|
|
'El paquete del plugin está descomprimido. Confirma para iniciar la instalación.',
|
|
},
|
|
uploadPluginOnly: 'Solo se admiten paquetes de plugin .lbpkg',
|
|
dragToUpload: 'Arrastra el archivo del plugin aquí para subirlo',
|
|
unsupportedFileType:
|
|
'Tipo de archivo no soportado, solo se admiten archivos .lbpkg y .zip',
|
|
uploadingPlugin: 'Subiendo plugin...',
|
|
uploadSuccess: 'Subida exitosa',
|
|
uploadFailed: 'Error en la subida',
|
|
selectFileToUpload: 'Selecciona el archivo del plugin para subir',
|
|
askConfirm: '¿Estás seguro de instalar el plugin "{{name}}" ({{version}})?',
|
|
askConfirmNoVersion: '¿Estás seguro de instalar el plugin "{{name}}"?',
|
|
fromGithub: 'Desde GitHub',
|
|
fromLocal: 'Desde local',
|
|
fromMarketplace: 'Desde la tienda',
|
|
componentsList: 'Componentes: ',
|
|
noComponents: 'Sin componentes',
|
|
delete: 'Eliminar plugin',
|
|
update: 'Actualizar plugin',
|
|
new: 'Nuevo',
|
|
updateConfirm: 'Confirmación de actualización',
|
|
confirmUpdatePlugin:
|
|
'¿Estás seguro de que deseas actualizar el plugin ({{author}}/{{name}})?',
|
|
confirmUpdate: 'Confirmar actualización',
|
|
updating: 'Actualizando...',
|
|
updateSuccess: 'Plugin actualizado correctamente',
|
|
updateError: 'Error al actualizar: ',
|
|
saveConfigSuccessNormal: 'Configuración guardada correctamente',
|
|
saveConfigError: 'Error al guardar la configuración: ',
|
|
config: 'Configuración',
|
|
readme: 'Documentación',
|
|
viewSource: 'Ver código fuente',
|
|
loadingReadme: 'Cargando documentación...',
|
|
noReadme: 'Este plugin no proporciona documentación README',
|
|
tabDocs: 'Documentación',
|
|
tabLogs: 'Registros',
|
|
logsLevelAll: 'Todos los niveles',
|
|
logsRefresh: 'Actualizar',
|
|
logsAutoRefresh: 'Auto-actualizar',
|
|
logsEmpty:
|
|
'Aún no hay registros. Los registros que el plugin imprima mediante logger aparecerán aquí.',
|
|
fileUpload: {
|
|
tooLarge: 'El tamaño del archivo supera el límite de 10MB',
|
|
success: 'Archivo subido correctamente',
|
|
failed: 'Error al subir el archivo',
|
|
uploading: 'Subiendo...',
|
|
chooseFile: 'Elegir archivo',
|
|
addFile: 'Añadir archivo',
|
|
},
|
|
installFromGithub: 'Desde GitHub',
|
|
enterRepoUrl: 'Introduce la URL del repositorio de GitHub',
|
|
repoUrlPlaceholder: 'p. ej., https://github.com/owner/repo',
|
|
fetchingReleases: 'Obteniendo versiones...',
|
|
selectRelease: 'Seleccionar versión',
|
|
noReleasesFound: 'No se encontraron versiones',
|
|
fetchReleasesError: 'Error al obtener versiones: ',
|
|
selectAsset: 'Seleccionar archivo a instalar',
|
|
noAssetsFound: 'No hay archivos .lbpkg disponibles en esta versión',
|
|
fetchAssetsError: 'Error al obtener archivos: ',
|
|
backToReleases: 'Volver a versiones',
|
|
backToRepoUrl: 'Volver a la URL del repositorio',
|
|
backToAssets: 'Volver a archivos',
|
|
releaseTag: 'Etiqueta: {{tag}}',
|
|
releaseName: 'Nombre: {{name}}',
|
|
publishedAt: 'Publicado el: {{date}}',
|
|
prerelease: 'Pre-lanzamiento',
|
|
assetSize: 'Tamaño: {{size}}',
|
|
confirmInstall: 'Confirmar instalación',
|
|
installFromGithubDesc: 'Instalar plugin desde GitHub Release',
|
|
goToMarketplace: 'Ir a la tienda',
|
|
installProgress: {
|
|
title: 'Instalando {{name}}',
|
|
updateTitle: 'Actualizando {{name}}',
|
|
titleGeneric: 'Instalación de Plugin',
|
|
titlePlugin: 'Instalando plugin {{name}}',
|
|
titleMCP: 'Instalando servidor MCP {{name}}',
|
|
titleSkill: 'Instalando skill {{name}}',
|
|
overallProgress: 'Progreso general',
|
|
checkingUpdate: 'Buscando actualizaciones',
|
|
downloading: 'Descargando Plugin',
|
|
validating: 'Validando paquete',
|
|
installingDeps: 'Instalando dependencias',
|
|
applyingUpdate: 'Aplicando actualización',
|
|
activating: 'Iniciando y actualizando componentes',
|
|
initializing: 'Inicializando configuración',
|
|
launching: 'Iniciando Plugin',
|
|
completed: 'Completado',
|
|
failed: 'Fallido',
|
|
downloadSize: 'Tamaño del paquete: {{size}}',
|
|
depsInfo: '{{count}} dependencias por instalar',
|
|
depsProgress:
|
|
'{{installed}}/{{total}} instaladas · {{remaining}} restantes',
|
|
installComplete: 'Plugin instalado correctamente',
|
|
updateComplete: 'Plugin actualizado correctamente',
|
|
installCompletePlugin: 'Plugin instalado correctamente',
|
|
installCompleteMCP: 'Servidor MCP instalado correctamente',
|
|
installCompleteSkill: 'Skill instalada correctamente',
|
|
dismiss: 'Descartar',
|
|
background: 'Ejecutar en segundo plano',
|
|
taskQueue: 'Tareas de instalación',
|
|
clearCompleted: 'Limpiar completados',
|
|
noTasks: 'No hay tareas de instalación',
|
|
},
|
|
},
|
|
market: {
|
|
runnerUsage: 'Uso del ejecutor',
|
|
runnerUsageAll: 'Todos',
|
|
runnerUsageAgent: 'Agent / Flujo',
|
|
runnerUsageEvent: 'Procesador de plugin',
|
|
searchPlaceholder: 'Buscar plugins...',
|
|
searchPlaceholderCount:
|
|
'Buscar {{count}} extensiones, capacidades o casos de uso...',
|
|
searchResults: 'Se encontraron {{count}} extensiones',
|
|
totalPlugins: 'Total {{count}} extensiones',
|
|
noPlugins: 'No hay plugins disponibles',
|
|
noResults: 'No se encontraron plugins relevantes',
|
|
loadingMore: 'Cargando más...',
|
|
loading: 'Cargando...',
|
|
allLoaded: 'Todos los plugins mostrados',
|
|
allLoadedCount: 'Se muestran las {{count}} extensiones',
|
|
install: 'Instalar',
|
|
installCard: 'Instalar {{name}}',
|
|
installedCard: '{{name}} instalado',
|
|
installed: 'Instalado',
|
|
updateAvailable: 'Actualización disponible',
|
|
installConfirm:
|
|
'¿Estás seguro de que deseas instalar el plugin "{{name}}" ({{version}})?',
|
|
downloadComplete: 'Descarga del plugin "{{name}}" completada',
|
|
installFailed: 'Error en la instalación, por favor inténtalo más tarde',
|
|
loadFailed:
|
|
'Error al obtener la lista de plugins, por favor inténtalo más tarde',
|
|
noDescription: 'No hay descripción disponible',
|
|
recommendation: {
|
|
pause: 'Pausar rotación automática',
|
|
resume: 'Reanudar rotación automática',
|
|
},
|
|
notFound: 'No se encontró la información del plugin',
|
|
sortBy: 'Ordenar por',
|
|
sort: {
|
|
hottest: 'Más populares',
|
|
recentlyAdded: 'Añadidos recientemente',
|
|
recentlyUpdated: 'Actualizados recientemente',
|
|
mostDownloads: 'Más descargas',
|
|
leastDownloads: 'Menos descargas',
|
|
},
|
|
downloads: 'descargas',
|
|
download: 'Descargar',
|
|
like: 'Me gusta',
|
|
unlike: 'Ya no me gusta',
|
|
likeFailed: 'No se pudo actualizar el Me gusta. Inténtalo de nuevo.',
|
|
repository: 'Repositorio',
|
|
downloadFailed: 'Error en la descarga',
|
|
noReadme: 'Este plugin no proporciona documentación README',
|
|
description: 'Descripción',
|
|
tagLabel: 'Etiquetas',
|
|
submissionTitle: 'Tienes un envío de plugin en revisión: {{name}}',
|
|
submissionPending: 'Tu envío de plugin está en revisión: {{name}}',
|
|
submissionApproved: 'Tu envío de plugin ha sido aprobado: {{name}}',
|
|
submissionRejected: 'Tu envío de plugin ha sido rechazado: {{name}}',
|
|
clickToRevoke: 'Revocar',
|
|
revokeSuccess: 'Revocación exitosa',
|
|
revokeFailed: 'Error en la revocación',
|
|
submissionDetails: 'Detalles del envío del plugin',
|
|
markAsRead: 'Marcar como leído',
|
|
markAsReadSuccess: 'Marcado como leído',
|
|
markAsReadFailed: 'Error al marcar como leído',
|
|
filterByComponent: 'Componente del plugin',
|
|
filterByComponentHint:
|
|
'Los tipos de capacidad que ofrece un plugin: herramienta (Tool), comando (Command), escucha de eventos (EventListener), etc., usados para ampliar las capacidades de LangBot. Filtra por componente para ver solo los plugins que ofrecen esa capacidad.',
|
|
allComponents: 'Todos los componentes',
|
|
componentName: {
|
|
Tool: 'Herramienta',
|
|
EventListener: 'Listener de eventos',
|
|
Command: 'Comando',
|
|
KnowledgeEngine: 'Motor de conocimiento',
|
|
Parser: 'Analizador',
|
|
Page: 'Página',
|
|
Runner: 'Ejecutor',
|
|
},
|
|
filterByType: 'Tipo',
|
|
allTypes: 'Todos los tipos',
|
|
typePlugin: 'Plugin',
|
|
typeMCP: 'MCP',
|
|
typeSkill: 'Habilidad',
|
|
requestPlugin: 'Solicitar plugin',
|
|
viewDetails: 'Ver detalles',
|
|
deprecated: 'Obsoleto',
|
|
deprecatedTooltip:
|
|
'Por favor, instala el plugin de motor de conocimiento correspondiente.',
|
|
filters: {
|
|
allFormats: 'Todos los tipos',
|
|
more: 'Más',
|
|
advancedTitle: 'Filtros avanzados',
|
|
advancedDescription: 'Filtrar por tipo de extensión',
|
|
technicalType: 'Tipo técnico',
|
|
},
|
|
allExtensions: 'Todas las extensiones',
|
|
tags: {
|
|
filterByTags: 'Filtrar por etiquetas',
|
|
selected: 'seleccionadas',
|
|
selectTags: 'Seleccionar etiquetas',
|
|
clearAll: 'Borrar todo',
|
|
noTags: 'No hay etiquetas disponibles',
|
|
},
|
|
},
|
|
mcp: {
|
|
title: 'MCP',
|
|
createServer: 'Añadir servidor MCP',
|
|
addMCPServer: 'Añadir servidor MCP',
|
|
editServer: 'Editar servidor MCP',
|
|
deleteServer: 'Eliminar servidor MCP',
|
|
confirmDeleteServer:
|
|
'¿Estás seguro de que deseas eliminar este servidor MCP?',
|
|
confirmDeleteTitle: 'Eliminar servidor MCP',
|
|
getServerListError: 'Error al obtener la lista de servidores MCP: ',
|
|
serverName: 'Nombre del servidor',
|
|
serverMode: 'Modo de conexión',
|
|
selectMode: 'Seleccionar modo',
|
|
stdio: 'Modo Stdio',
|
|
sse: 'Modo SSE',
|
|
http: 'Modo HTTP',
|
|
local: 'Local (Stdio)',
|
|
remote: 'Remoto',
|
|
localModeDescription:
|
|
'Ejecuta un servidor MCP localmente como subproceso dentro del sandbox de Box.',
|
|
remoteModeDescription:
|
|
'Conéctate a un servidor MCP remoto por URL. El transporte (Streamable HTTP o SSE) se detecta automáticamente.',
|
|
remoteUrlPlaceholder: 'https://example.com/mcp',
|
|
remoteUrlDescription:
|
|
'Pega la URL del servidor MCP. Se admiten tanto endpoints Streamable HTTP como SSE heredados.',
|
|
noServerInstalled: 'No hay servidores MCP configurados',
|
|
serverNameRequired: 'El nombre del servidor no puede estar vacío',
|
|
commandRequired: 'El comando no puede estar vacío',
|
|
urlRequired: 'La URL no puede estar vacía',
|
|
timeoutMustBePositive: 'El tiempo de espera debe ser un número positivo',
|
|
command: 'Comando',
|
|
args: 'Argumentos',
|
|
env: 'Variables de entorno',
|
|
url: 'URL',
|
|
headers: 'Encabezados',
|
|
timeout: 'Tiempo de espera',
|
|
toolCallTimeout: 'Tiempo de espera de herramienta (segundos)',
|
|
toolCallTimeoutDescription:
|
|
'Espera máxima para una llamada de herramienta. Use 0 para no limitar. El valor predeterminado es 300 segundos.',
|
|
addArgument: 'Añadir argumento',
|
|
addEnvVar: 'Añadir variable de entorno',
|
|
addHeader: 'Añadir encabezado',
|
|
keyName: 'Nombre de la clave',
|
|
value: 'Valor',
|
|
testing: 'Probando...',
|
|
connecting: 'Conectando...',
|
|
testSuccess: 'Prueba exitosa',
|
|
testFailed: 'Error en la prueba: ',
|
|
testError: 'Error de prueba',
|
|
refreshSuccess: 'Actualización exitosa',
|
|
refreshFailed: 'Error en la actualización: ',
|
|
connectionSuccess: 'Conexión exitosa',
|
|
connectionFailed: 'Error de conexión, por favor verifica la URL',
|
|
connectionFailedStatus: 'Conexión fallida',
|
|
connectionUnreachable:
|
|
'No se puede acceder al servidor MCP. Compruebe que esté iniciado y accesible.',
|
|
connectionTimeout:
|
|
'El servidor MCP no respondió a tiempo. Compruebe el servicio o aumente el tiempo de espera.',
|
|
connectionHttpError:
|
|
'El servidor MCP devolvió HTTP {{status}}. Compruebe los requisitos de acceso y los registros del servidor.',
|
|
oauthAuthorizationRequired: 'Se requiere autorización OAuth',
|
|
oauthAuthorizationRequiredSuggestion:
|
|
'Este servidor MCP requiere inicio de sesión con OAuth. Aún no está disponible; agregue manualmente un encabezado Authorization si el servidor lo permite.',
|
|
boxDisabledStdioRefused:
|
|
'Los servidores MCP en modo stdio requieren el sandbox de Box, desactivado en la configuración (box.enabled = false).',
|
|
boxUnavailableStdioRefused:
|
|
'Los servidores MCP en modo stdio requieren el sandbox de Box, actualmente no accesible.',
|
|
boxStdioRefusedSuggestion:
|
|
'Active Box (box.enabled = true) y asegúrese de que el runtime está conectado, o cambie este servidor a modo http/sse.',
|
|
boxRequired: 'requiere Box',
|
|
disabledByPolicy: 'desactivado por la política',
|
|
stdioDisabledByPolicy:
|
|
'Stdio MCP está deshabilitado en este despliegue. Use un servidor MCP remoto.',
|
|
stdioBlockedByBoxToast:
|
|
'No se puede guardar el MCP en modo stdio mientras el sandbox de Box está desactivado o no disponible. Active Box o seleccione modo http/sse.',
|
|
toolsFound: 'herramientas',
|
|
unknownError: 'Error desconocido',
|
|
noToolsFound: 'No se encontraron herramientas',
|
|
noResourcesFound: 'No se encontraron recursos',
|
|
tabTools: 'Herramientas',
|
|
tabResources: 'Recursos',
|
|
tabDocs: 'Documentación',
|
|
tabLogs: 'Registros',
|
|
logsLevelAll: 'Todos los niveles',
|
|
logsRefresh: 'Actualizar',
|
|
logsAutoRefresh: 'Actualización automática',
|
|
logsEmpty:
|
|
'Aún no hay registros. Los registros de ejecución del servidor MCP aparecerán aquí.',
|
|
noReadme: 'No hay documentación disponible',
|
|
parseResultFailed: 'Error al analizar el resultado de la prueba',
|
|
noResultReturned: 'La prueba no devolvió resultados',
|
|
getTaskFailed: 'Error al obtener el estado de la tarea',
|
|
noTaskId: 'No se obtuvo el ID de la tarea',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteFailed: 'Error al eliminar: ',
|
|
deleteError: 'Error al eliminar: ',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar: ',
|
|
createSuccess: 'Creado correctamente',
|
|
createFailed: 'Error al crear: ',
|
|
createError: 'Error al crear: ',
|
|
loadFailed: 'Error al cargar',
|
|
modifyFailed: 'Error al modificar: ',
|
|
toolCount: 'Herramientas: {{count}}',
|
|
parameterCount: 'Parámetros: {{count}}',
|
|
noParameters: 'Sin parámetros',
|
|
resourceCount: 'Recursos: {{count}}',
|
|
resourceBinaryContent: 'Contenido binario (no se puede mostrar)',
|
|
resourceBinaryOmitted:
|
|
'Contenido binario omitido por la política de seguridad de recursos',
|
|
resourceTruncated: 'Contenido truncado por límites de bytes o tokens',
|
|
resourceReadFailed: 'Error al leer el contenido del recurso',
|
|
statusConnected: 'Conectado',
|
|
statusDisconnected: 'Desconectado',
|
|
statusError: 'Error de conexión',
|
|
statusDisabled: 'Desactivado',
|
|
loading: 'Cargando...',
|
|
starCount: 'Estrellas: {{count}}',
|
|
install: 'Instalar',
|
|
installFromGithub: 'Instalar servidor MCP desde GitHub',
|
|
add: 'Añadir',
|
|
name: 'Nombre',
|
|
nameRequired: 'El nombre no puede estar vacío',
|
|
sseTimeout: 'Tiempo de espera SSE',
|
|
sseTimeoutDescription: 'Tiempo de espera para establecer la conexión SSE',
|
|
extraParametersDescription:
|
|
'Parámetros adicionales para configurar el comportamiento específico del servidor MCP',
|
|
timeoutMustBeNumber: 'El tiempo de espera debe ser un número',
|
|
timeoutNonNegative: 'El tiempo de espera no puede ser negativo',
|
|
sseTimeoutMustBeNumber: 'El tiempo de espera SSE debe ser un número',
|
|
sseTimeoutNonNegative: 'El tiempo de espera SSE no puede ser negativo',
|
|
updateSuccess: 'Actualizado correctamente',
|
|
updateFailed: 'Error al actualizar: ',
|
|
selectFromSidebar: 'Selecciona un servidor MCP de la barra lateral',
|
|
dangerZone: 'Zona de peligro',
|
|
dangerZoneDescription:
|
|
'Acciones irreversibles y destructivas para este servidor MCP.',
|
|
deleteMCPAction: 'Eliminar este servidor MCP',
|
|
deleteMCPHint:
|
|
'Una vez eliminada, la configuración de este servidor MCP no se podrá recuperar.',
|
|
},
|
|
pipelines: {
|
|
title: 'Flujos',
|
|
description:
|
|
'Los Pipelines definen el flujo de procesamiento de eventos de mensajes, se usan para vincular a los Bots',
|
|
createPipeline: 'Crear Pipeline',
|
|
selectFromSidebar: 'Selecciona un Pipeline de la barra lateral',
|
|
editPipeline: 'Editar Pipeline',
|
|
chat: 'Chat',
|
|
configuration: 'Configuración',
|
|
debugChat: 'Chat de depuración',
|
|
getPipelineListError: 'Error al obtener la lista de Pipelines: ',
|
|
daysAgo: 'días atrás',
|
|
today: 'Hoy',
|
|
updateTime: 'Actualizado ',
|
|
defaultBadge: 'Predeterminado',
|
|
sortBy: 'Ordenar por',
|
|
newestCreated: 'Más recientes',
|
|
earliestCreated: 'Más antiguos',
|
|
recentlyEdited: 'Editados recientemente',
|
|
earliestEdited: 'Editados más antiguos',
|
|
basicInfo: 'Información básica',
|
|
basicInfoDescription:
|
|
'Establece el nombre, icono y descripción del Pipeline',
|
|
managementDescription: 'Copia o elimina este flujo.',
|
|
aiCapabilities: 'IA',
|
|
triggerConditions: 'Disparador',
|
|
safetyControls: 'Seguridad',
|
|
outputProcessing: 'Salida',
|
|
nameRequired: 'El nombre no puede estar vacío',
|
|
descriptionRequired: 'La descripción no puede estar vacía',
|
|
createSuccess:
|
|
'Creado correctamente. Por favor, edita los parámetros del Pipeline',
|
|
createError: 'Error al crear: ',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar: ',
|
|
copySuffix: ' Copia',
|
|
deleteConfirmation:
|
|
'¿Estás seguro de que deseas eliminar este Pipeline? Los Bots vinculados a este Pipeline dejarán de funcionar.',
|
|
defaultPipelineCannotDelete:
|
|
'El Pipeline predeterminado no se puede eliminar',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteError: 'Error al eliminar: ',
|
|
copyConfirmTitle: 'Confirmar copia',
|
|
copyConfirmation:
|
|
'¿Estás seguro de que deseas copiar este Pipeline? Esto creará un nuevo Pipeline con todas las configuraciones.',
|
|
unsavedChanges: 'Tienes cambios sin guardar',
|
|
dangerZone: 'Zona de peligro',
|
|
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
|
deletePipelineAction: 'Eliminar este Pipeline',
|
|
deletePipelineHint:
|
|
'Una vez eliminado, los Bots vinculados a este Pipeline dejarán de funcionar.',
|
|
copyPipelineAction: 'Copiar este Pipeline',
|
|
copyPipelineHint:
|
|
'Crear un nuevo Pipeline con todas las configuraciones duplicadas.',
|
|
extensions: {
|
|
title: 'Extensiones',
|
|
loadError: 'Error al cargar plugins',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar',
|
|
noPluginsAvailable: 'No hay plugins disponibles',
|
|
disabled: 'Desactivado',
|
|
noPluginsSelected: 'No hay plugins seleccionados',
|
|
addPlugin: 'Añadir plugin',
|
|
selectPlugins: 'Seleccionar plugins',
|
|
pluginsTitle: 'Plugins',
|
|
mcpServersTitle: 'Servidores MCP',
|
|
mcpResourcesTitle: 'Recursos MCP',
|
|
noMCPServersSelected: 'No hay servidores MCP seleccionados',
|
|
noMCPResourcesAvailable: 'No hay recursos MCP disponibles',
|
|
addMCPServer: 'Añadir servidor MCP',
|
|
selectMCPServers: 'Seleccionar servidores MCP',
|
|
enableMCPResourceAgentRead: 'Permitir lectura del modelo',
|
|
toolCount: '{{count}} herramientas',
|
|
noPluginsInstalled: 'No hay plugins instalados',
|
|
noMCPServersConfigured: 'No hay servidores MCP configurados',
|
|
selectAll: 'Seleccionar todo',
|
|
enableAllPlugins: 'Activar todos los plugins',
|
|
enableAllMCPServers: 'Activar todos los servidores MCP',
|
|
enableAllSkills: 'Activar todas las skills',
|
|
allPluginsEnabled: 'Todos los plugins activados',
|
|
allMCPServersEnabled: 'Todos los servidores MCP activados',
|
|
allSkillsEnabled: 'Todas las skills están activadas',
|
|
skillsTitle: 'Skills',
|
|
noSkillsSelected: 'No hay skills seleccionadas',
|
|
addSkill: 'Añadir skill',
|
|
selectSkills: 'Seleccionar skills',
|
|
noSkillsAvailable: 'No hay skills disponibles',
|
|
mcpServersScopeTooltip:
|
|
'Aquí solo se controla qué servidores MCP se vinculan al Pipeline. Las herramientas y recursos MCP concretos se eligen en AI Feature > Runner.',
|
|
enableAllMCPServersTooltip:
|
|
'Al activarlo, todos los servidores MCP configurados y habilitados serán candidatos para herramientas y recursos MCP en AI Feature.',
|
|
},
|
|
runner: {
|
|
toolsTitle: 'Herramientas',
|
|
toolsDescription:
|
|
'Selecciona las herramientas de plugins, MCP e integradas disponibles para este Runner.',
|
|
toolsScopeTooltip:
|
|
'Las herramientas MCP solo provienen de servidores MCP vinculados en Extensiones. Vincula allí otro servidor para poder seleccionarlo aquí.',
|
|
enableAllTools: 'Activar todas las herramientas',
|
|
allToolsEnabled: 'Todas las herramientas disponibles están activadas',
|
|
noToolsSelected: 'No hay herramientas seleccionadas',
|
|
editTools: 'Editar herramientas',
|
|
builtinTools: 'Herramientas integradas',
|
|
pluginTools: 'Herramientas de plugin',
|
|
skillTools: 'Herramientas de skill',
|
|
mcpTools: 'Herramientas MCP',
|
|
mcpToolsScopeTooltip:
|
|
'Aquí solo se muestran herramientas de servidores MCP permitidos actualmente en Extensiones.',
|
|
skillToolsScopeTooltip:
|
|
'Las herramientas de skill aparecen cuando el servicio de skills de LangBot y el backend de sandbox Box están disponibles. Permiten al agente activar o registrar skills.',
|
|
selectTools: 'Seleccionar herramientas',
|
|
resourcesTitle: 'Recursos',
|
|
resourcesDescription:
|
|
'Selecciona los recursos MCP y bases de conocimiento disponibles para este Runner.',
|
|
knowledgeBases: 'Bases de conocimiento',
|
|
mcpResources: 'Recursos MCP',
|
|
mcpResourcesScopeTooltip:
|
|
'Aquí solo se muestran recursos expuestos por servidores MCP permitidos actualmente en Extensiones.',
|
|
enableMCPResourceRead: 'Permitir que el modelo lea recursos MCP',
|
|
mcpResourceReadTooltip:
|
|
'Si se desactiva, los recursos MCP seleccionados no se inyectarán en el contexto del modelo.',
|
|
noMCPResourcesAvailable: 'No hay recursos MCP disponibles',
|
|
selectKnowledgeBases: 'Seleccionar bases de conocimiento',
|
|
},
|
|
debugDialog: {
|
|
title: 'Chat del Pipeline',
|
|
selectPipeline: 'Seleccionar Pipeline',
|
|
sessionType: 'Tipo de sesión',
|
|
privateChat: 'Chat privado',
|
|
groupChat: 'Chat grupal',
|
|
send: 'Enviar',
|
|
saveAndSend: 'Guardar y enviar',
|
|
reset: 'Reiniciar conversación',
|
|
inputPlaceholder: 'Enviar mensaje {{type}}...',
|
|
noMessages: 'Sin mensajes',
|
|
userMessage: 'Usuario',
|
|
botMessage: 'Bot',
|
|
sendFailed: 'Error al enviar',
|
|
resetSuccess: 'Conversación reiniciada correctamente',
|
|
resetFailed: 'Error al reiniciar',
|
|
loadMessagesFailed: 'Error al cargar mensajes',
|
|
loadPipelinesFailed: 'Error al cargar Pipelines',
|
|
atTips: 'Mencionar al Bot',
|
|
streaming: 'Transmisión',
|
|
streamOutput: 'Transmisión',
|
|
connected: 'Conectado',
|
|
disconnected: 'Desconectado',
|
|
connectionError: 'Error de conexión WebSocket',
|
|
connectionFailed: 'Conexión WebSocket fallida',
|
|
notConnected: 'WebSocket no conectado, por favor inténtalo más tarde',
|
|
imageUploadFailed: 'Error al subir imagen',
|
|
reply: 'Responder',
|
|
replyTo: 'Responder a',
|
|
showMarkdown: 'Mostrar Markdown',
|
|
showRaw: 'Mostrar sin formato',
|
|
allMembers: 'Todos los miembros',
|
|
file: 'Archivo',
|
|
voice: 'Voz',
|
|
uploadImage: 'Subir imagen',
|
|
uploading: 'Subiendo...',
|
|
},
|
|
monitoring: {
|
|
title: 'Registros de ejecución',
|
|
workbench: 'Configurar y depurar',
|
|
description:
|
|
'Ver registros de ejecución y errores de este Pipeline (últimas 24 horas)',
|
|
detailedLogs: 'Registros detallados',
|
|
},
|
|
},
|
|
knowledge: {
|
|
title: 'Conocimiento',
|
|
createKnowledgeBase: 'Crear base de conocimiento',
|
|
selectFromSidebar:
|
|
'Selecciona una base de conocimiento de la barra lateral',
|
|
editKnowledgeBase: 'Editar base de conocimiento',
|
|
selectKnowledgeBase: 'Seleccionar base de conocimiento',
|
|
selectKnowledgeBases: 'Seleccionar bases de conocimiento',
|
|
addKnowledgeBase: 'Añadir base de conocimiento',
|
|
noKnowledgeBaseSelected: 'No hay bases de conocimiento seleccionadas',
|
|
empty: 'Vacío',
|
|
editDocument: 'Documentos',
|
|
description:
|
|
'Configurar bases de conocimiento para mejorar las respuestas del LLM',
|
|
metadata: 'Metadatos',
|
|
documents: 'Documentos',
|
|
kbNameRequired: 'El nombre de la base de conocimiento no puede estar vacío',
|
|
kbDescriptionRequired:
|
|
'La descripción de la base de conocimiento no puede estar vacía',
|
|
embeddingModelUUIDRequired: 'El modelo Embedding no puede estar vacío',
|
|
daysAgo: 'días atrás',
|
|
today: 'Hoy',
|
|
kbName: 'Nombre de la base de conocimiento',
|
|
kbDescription: 'Descripción de la base de conocimiento',
|
|
topK: 'Top K',
|
|
topKRequired: 'Top K no puede estar vacío',
|
|
topKMax: 'El valor máximo de Top K es 30',
|
|
topKdescription:
|
|
'Se usa para especificar el número de documentos relevantes a recuperar, con un rango de 1 a 30.',
|
|
defaultDescription: 'Una base de conocimiento',
|
|
embeddingModelUUID: 'Modelo Embedding',
|
|
selectEmbeddingModel: 'Seleccionar modelo Embedding',
|
|
embeddingModelDescription:
|
|
'Se usa para vectorizar el texto, puedes configurarlo en la página de Modelos',
|
|
updateTime: 'Actualizado ',
|
|
cannotChangeEmbeddingModel:
|
|
'El modelo Embedding no se puede modificar una vez creada la base de conocimiento',
|
|
updateKnowledgeBaseSuccess:
|
|
'Base de conocimiento actualizada correctamente',
|
|
updateKnowledgeBaseFailed: 'Error al actualizar la base de conocimiento: ',
|
|
documentsTab: {
|
|
name: 'Nombre',
|
|
status: 'Estado',
|
|
noResults: 'No hay documentos',
|
|
dragAndDrop: 'Arrastra y suelta archivos aquí o haz clic para subir',
|
|
uploading: 'Subiendo...',
|
|
supportedFormats:
|
|
'Admite PDF, Word, TXT, Markdown, HTML, ZIP y otros formatos de documentos',
|
|
uploadSuccess: '¡Archivo subido correctamente!',
|
|
uploadError: 'Error al subir el archivo: ',
|
|
uploadingFile: 'Subiendo archivo...',
|
|
fileSizeExceeded:
|
|
'El tamaño del archivo supera el límite de 10MB. Por favor, divídelo en archivos más pequeños.',
|
|
actions: 'Acciones',
|
|
delete: 'Eliminar archivo',
|
|
fileDeleteSuccess: 'Archivo eliminado correctamente',
|
|
fileDeleteFailed: 'Error al eliminar el archivo: ',
|
|
processing: 'Procesando',
|
|
completed: 'Completado',
|
|
failed: 'Fallido',
|
|
selectParser: 'Seleccionar analizador',
|
|
builtInParser: 'Proporcionado por el motor de conocimiento',
|
|
noParserAvailable:
|
|
'Ningún analizador admite este tipo de archivo. Por favor, instala un plugin de analizador que pueda manejar este formato.',
|
|
installParserHint: 'Buscar plugins de analizador en el Marketplace →',
|
|
confirmUpload: 'Subir',
|
|
cancelUpload: 'Cancelar',
|
|
},
|
|
deleteKnowledgeBaseConfirmation:
|
|
'¿Estás seguro de que deseas eliminar esta base de conocimiento? Todos los documentos de esta base se eliminarán.',
|
|
retrieve: 'Prueba de recuperación',
|
|
retrieveTest: 'Prueba de recuperación',
|
|
query: 'Consulta',
|
|
queryPlaceholder: 'Introduce el texto de consulta...',
|
|
distance: 'Distancia',
|
|
content: 'Contenido',
|
|
fileName: 'Nombre del archivo',
|
|
noResults: 'Sin resultados',
|
|
retrieveError: 'Error en la recuperación: ',
|
|
unknownEngine: 'Motor desconocido',
|
|
knowledgeEngine: 'Motor de conocimiento',
|
|
knowledgeEngineRequired: 'El motor de conocimiento es obligatorio',
|
|
selectKnowledgeEngine: 'Seleccionar motor de conocimiento',
|
|
installedEngines: 'Motores de conocimiento instalados',
|
|
noInstalledEngines:
|
|
'Aún no hay plugins de motores de conocimiento instalados.',
|
|
marketplaceEngines: 'Plugins de motores de conocimiento en el mercado',
|
|
noMarketplaceEngines:
|
|
'No hay plugins de motores de conocimiento disponibles.',
|
|
loadingEngineCatalog: 'Cargando plugins del mercado…',
|
|
engineCatalogUnavailable:
|
|
'El mercado no está disponible temporalmente. Vuelve a abrir el selector para reintentar.',
|
|
viewMarketplace: 'Ver mercado',
|
|
installingEngine: 'Instalando {{engine}}…',
|
|
engineInstallSuccess:
|
|
'{{engine}} está instalado y listo para seleccionarse',
|
|
engineInstallFailed: 'Falló la instalación del motor. Inténtalo de nuevo.',
|
|
engineVersionUnavailable: 'Este plugin no tiene una versión instalable.',
|
|
engineInstallTimeout:
|
|
'La instalación continúa. Actualiza la página para comprobar el estado.',
|
|
engineRegistrationTimeout:
|
|
'El plugin está instalado, pero su motor aún no está listo.',
|
|
builtInEngine: 'Motor integrado',
|
|
cannotChangeKnowledgeEngine:
|
|
'El motor de conocimiento no se puede cambiar después de la creación',
|
|
basicInfo: 'Información básica',
|
|
basicInfoDescription:
|
|
'Establece el nombre, icono y descripción de la base de conocimiento',
|
|
engineSettings: 'Configuración del motor',
|
|
engineSettingsDescription:
|
|
'Configuración del motor de conocimiento seleccionado',
|
|
engineSettingsReadonly: 'solo lectura en modo de edición',
|
|
engineSettingsInvalid:
|
|
'La configuración del motor no es válida, verifique los campos obligatorios',
|
|
retrievalSettingsInvalid:
|
|
'La configuración de recuperación no es válida, verifique los campos obligatorios',
|
|
retrievalSettings: 'Configuración de recuperación',
|
|
retrievalSettingsDescription:
|
|
'Configura cómo se recuperan los documentos de esta base de conocimiento',
|
|
dangerZone: 'Zona de peligro',
|
|
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
|
deleteKbAction: 'Eliminar esta base de conocimiento',
|
|
deleteKbHint:
|
|
'Una vez eliminada, todos los documentos y datos de esta base de conocimiento se eliminarán permanentemente.',
|
|
noEnginesAvailable: 'No hay motores de base de conocimiento disponibles',
|
|
installEngineHint:
|
|
'Por favor, instala primero un plugin de "Motor de conocimiento"',
|
|
createKnowledgeBaseFailed: 'Error al crear la base de conocimiento: ',
|
|
loadKnowledgeBaseFailed: 'Error al cargar la base de conocimiento: ',
|
|
deleteKnowledgeBaseFailed: 'Error al eliminar la base de conocimiento: ',
|
|
getKnowledgeBaseListError:
|
|
'Error al obtener la lista de bases de conocimiento: ',
|
|
embeddingModel: 'Modelo Embedding',
|
|
embeddingModelRequired:
|
|
'El modelo Embedding es obligatorio para este motor',
|
|
addExternal: 'Añadir base de conocimiento externa',
|
|
createExternalSuccess: 'Base de conocimiento externa creada correctamente',
|
|
updateExternalSuccess:
|
|
'Base de conocimiento externa actualizada correctamente',
|
|
deleteExternalSuccess:
|
|
'Base de conocimiento externa eliminada correctamente',
|
|
retriever: 'Recuperador',
|
|
selectRetriever: 'Seleccionar un recuperador...',
|
|
retrieverConfiguration: 'Configuración del recuperador',
|
|
retrieverInstallInfo:
|
|
'Puedes instalar plugins de recuperador de conocimiento desde',
|
|
retrieverMarketLink: 'aquí',
|
|
migration: {
|
|
title: 'Migración de base de conocimiento',
|
|
description:
|
|
'La nueva versión ha refactorizado la base de conocimiento en una arquitectura basada en plugins, unificando las bases de conocimiento internas y externas como plugins de "Motor de conocimiento". Se requiere la migración de los datos heredados. Tus datos antiguos se han respaldado automáticamente en la base de datos.',
|
|
detected:
|
|
'Se encontraron {{total}} base(s) de conocimiento para migrar ({{internal}} internas, {{external}} externas).',
|
|
startWithInstall: 'Auto-instalar plugin y migrar',
|
|
startDataOnly: 'Migrar solo datos',
|
|
dataOnlyHint:
|
|
'"Migrar solo datos" es para entornos sin conexión/intranet. Instala el plugin correspondiente manualmente después de la migración.',
|
|
dismiss: 'Descartar datos originales',
|
|
running: 'Migrando bases de conocimiento, por favor espera...',
|
|
success: 'Migración de base de conocimiento completada',
|
|
error: 'Error en la migración de base de conocimiento: ',
|
|
dismissError: 'Error en la operación',
|
|
retry: 'Reintentar',
|
|
},
|
|
},
|
|
register: {
|
|
title: 'Inicializar LangBot 👋',
|
|
description: 'Es tu primera vez iniciando LangBot',
|
|
adminAccountNote:
|
|
'La cuenta que uses aquí se establecerá como cuenta de administrador',
|
|
register: 'Registrarse',
|
|
initWithSpace: 'Inicializar con una cuenta de LangBot',
|
|
spaceRecommended:
|
|
'Recomendado: Usa API de modelos oficiales estables y servicios en la nube',
|
|
spaceInfoTip1:
|
|
'Space proporciona servicios de autenticación unificada de cuentas sin subir ninguna de tu información sensible.',
|
|
spaceInfoTip2:
|
|
'Iniciar sesión con una cuenta de LangBot te da acceso a los modelos de LangBot y otros servicios en la nube, incluyendo créditos gratuitos de llamadas a modelos para ayudarte a comenzar rápidamente.',
|
|
spaceInfoTip3:
|
|
'Tu método de inicio de sesión no afecta otras funciones. Puedes configurar y usar modelos de otras fuentes en cualquier momento.',
|
|
registerLocal: 'Registrar cuenta local',
|
|
registerWithPassword: 'Registrarse con correo electrónico y contraseña',
|
|
initSuccess: 'Inicialización exitosa, por favor inicia sesión',
|
|
initFailed: 'Error en la inicialización: ',
|
|
},
|
|
resetPassword: {
|
|
title: 'Restablecer contraseña 🔐',
|
|
description:
|
|
'Introduce tu clave de recuperación y nueva contraseña para restablecer la contraseña de tu cuenta',
|
|
recoveryKey: 'Clave de recuperación',
|
|
recoveryKeyDescription:
|
|
'Almacenada en `system.recovery_key` del archivo de configuración `data/config.yaml`',
|
|
newPassword: 'Nueva contraseña',
|
|
enterRecoveryKey: 'Introduce la clave de recuperación',
|
|
enterNewPassword: 'Introduce la nueva contraseña',
|
|
recoveryKeyRequired: 'La clave de recuperación no puede estar vacía',
|
|
newPasswordRequired: 'La nueva contraseña no puede estar vacía',
|
|
resetPassword: 'Restablecer contraseña',
|
|
resetting: 'Restableciendo...',
|
|
resetSuccess:
|
|
'Contraseña restablecida correctamente, por favor inicia sesión',
|
|
resetFailed:
|
|
'Error al restablecer la contraseña, por favor verifica tu correo y clave de recuperación',
|
|
secondFactorFailed:
|
|
'La verificación falló, comprueba el código e inténtalo de nuevo',
|
|
backToLogin: 'Volver al inicio de sesión',
|
|
verifyWith: 'Verificar con',
|
|
methodRecoveryKey: 'Clave de recuperación',
|
|
methodTotp: 'Autenticador',
|
|
methodRecoveryCode: 'Código de recuperación',
|
|
totpCode: 'Código del autenticador',
|
|
totpCodeDescription:
|
|
'Introduce el código de 6 dígitos que muestra tu aplicación de autenticación',
|
|
totpCodeRequired: 'El código del autenticador no puede estar vacío',
|
|
enterTotpCode: 'Introduce el código de 6 dígitos',
|
|
recoveryCode: 'Código de recuperación',
|
|
recoveryCodeDescription:
|
|
'Introduce uno de los códigos de recuperación de un solo uso que guardaste al activar la verificación en dos pasos',
|
|
recoveryCodeRequired: 'El código de recuperación no puede estar vacío',
|
|
enterRecoveryCodeValue: 'Introduce el código de recuperación',
|
|
},
|
|
embedding: {
|
|
description: 'Gestionar modelos Embedding para la vectorización de texto',
|
|
createModel: 'Crear modelo Embedding',
|
|
editModel: 'Editar modelo Embedding',
|
|
getModelListError: 'Error al obtener la lista de modelos Embedding: ',
|
|
embeddingModels: 'Embedding',
|
|
extraParametersDescription:
|
|
'Se adjuntarán al cuerpo de la solicitud, como encoding_format, dimensions, etc.',
|
|
},
|
|
llm: {
|
|
description: 'Gestionar modelos LLM para la generación de conversaciones',
|
|
llmModels: 'LLM',
|
|
extraParametersDescription:
|
|
'Se adjuntarán al cuerpo de la solicitud, como max_tokens, temperature, top_p, etc.',
|
|
},
|
|
version: {
|
|
newVersionAvailable: 'Nueva versión disponible',
|
|
viewUpdateGuide: 'Ver guía de actualización',
|
|
noReleaseNotes: 'No hay notas de la versión disponibles',
|
|
},
|
|
account: {
|
|
settings: 'Configuración de la cuenta',
|
|
settingsDescription: 'Gestiona tu contraseña y las cuentas vinculadas',
|
|
setPassword: 'Establecer contraseña',
|
|
passwordSetSuccess: 'Contraseña establecida correctamente',
|
|
passwordStatus: 'Contraseña local',
|
|
passwordSet: 'Establecida',
|
|
passwordNotSet: 'No establecida',
|
|
passwordSetDescription:
|
|
'La contraseña está establecida, puedes iniciar sesión con correo y contraseña',
|
|
spaceStatus: 'Cuenta de LangBot',
|
|
spaceBound: 'Vinculada',
|
|
spaceNotBound: 'No vinculada',
|
|
spaceBoundDescription:
|
|
'Cuenta de LangBot vinculada, API de modelos oficiales y servicios en la nube disponibles',
|
|
bindSpace: 'Vincular cuenta de LangBot',
|
|
bindSpaceDescription:
|
|
'Vincular para usar API de modelos oficiales y servicios en la nube',
|
|
bindSpaceButton: 'Vincular',
|
|
bindSpaceConfirmTitle: 'Confirmar vinculación',
|
|
bindSpaceConfirmDescription:
|
|
'Estás a punto de vincular tu instancia local a una cuenta de LangBot',
|
|
bindSpaceWarning:
|
|
'Después de vincular, tu correo de inicio de sesión se cambiará de {{localEmail}} al correo de la cuenta de LangBot.',
|
|
bindSpaceSuccess: 'Cuenta de LangBot vinculada correctamente',
|
|
passkeySectionTitle: 'Llaves de acceso (Passkeys)',
|
|
passkeySectionDesc:
|
|
'Inicia sesión de forma segura sin contraseñas usando biometría o llaves de seguridad',
|
|
addPasskey: 'Añadir llave de acceso',
|
|
passkeyName: 'Nombre de la llave',
|
|
passkeyNamePlaceholder: 'p. ej., MacBook Touch ID, YubiKey',
|
|
passkeyCreated: 'Creada el {{date}}',
|
|
passkeyLastUsed: 'Último uso: {{date}}',
|
|
noPasskeys: 'No hay llaves de acceso registradas',
|
|
deletePasskeyConfirm:
|
|
'¿Seguro que deseas eliminar esta llave de acceso? Ya no podrás usarla para iniciar sesión.',
|
|
passkeyAddedSuccess: 'Llave de acceso añadida con éxito',
|
|
passkeyDeleteSuccess: 'Llave de acceso eliminada',
|
|
passkeyRenameSuccess: 'Nombre de llave de acceso modificado con éxito',
|
|
totpSectionTitle: 'Verificación en dos pasos',
|
|
totpSectionDesc:
|
|
'Añade una contraseña de un solo uso basada en tiempo como segundo factor de inicio de sesión',
|
|
totpEnabledDesc:
|
|
'Verificación en dos pasos activada · quedan {{count}} códigos de recuperación',
|
|
enableTotp: 'Activar',
|
|
manageTotp: 'Gestionar',
|
|
totpEnrollTitle: 'Activar la verificación en dos pasos',
|
|
totpEnrollDesc:
|
|
'Escanea el código QR con tu aplicación de autenticación y confirma el código generado',
|
|
totpStartEnroll: 'Generar secreto',
|
|
totpGeneratingSecret: 'Generando un nuevo secreto…',
|
|
totpManageTitle: 'Verificación en dos pasos',
|
|
totpManageDesc:
|
|
'Regenera tus códigos de recuperación o desactiva el segundo factor.',
|
|
totpRegenerateCodes: 'Regenerar códigos de recuperación',
|
|
totpRegenerateDesc:
|
|
'Introduce un código actual del autenticador o de recuperación para emitir un conjunto nuevo.',
|
|
totpRecoveryCodesRegenerated: 'Nuevos códigos de recuperación generados',
|
|
totpStatusDisabled: 'No activada',
|
|
totpCodesRemaining: 'Quedan {{count}} códigos de recuperación',
|
|
totpManagerSectionDesc:
|
|
'Los propietarios y administradores pueden revisar y restablecer el segundo factor de cualquier cuenta.',
|
|
revokeTotp: 'Reasignar',
|
|
totpAdminResetTitle: 'Reasignar la verificación en dos pasos de {{user}}',
|
|
totpAdminResetDesc:
|
|
'Pide a la cuenta que escanee el código QR con su autenticador y que introduzca abajo el código de 6 dígitos para finalizar.',
|
|
totpAdminResetWarning:
|
|
'Al iniciar la reasignación, el autenticador actual de {{user}} deja de funcionar de inmediato.',
|
|
totpAdminResetHint:
|
|
'Si la cuenta no puede iniciar sesión ahora, puede escanear este código QR en cualquier aplicación de autenticación.',
|
|
totpAdminHandOverCodes:
|
|
'Entrega estos códigos de recuperación a {{user}}. Solo se muestran una vez.',
|
|
revokeTotpConfirm:
|
|
'¿Desactivar la verificación en dos pasos de {{user}}? Después podrá iniciar sesión solo con la contraseña.',
|
|
revokeTotpSuccess: 'Verificación en dos pasos restablecida',
|
|
you: 'tú',
|
|
noAccounts: 'No hay cuentas que mostrar',
|
|
totpRefreshSecret: 'Regenerar código QR',
|
|
totpQrAlt: 'Código QR de verificación en dos pasos',
|
|
totpEnterCode: 'Código de verificación',
|
|
enterCode: 'Introduce el código',
|
|
totpVerifyAndEnable: 'Verificar y activar',
|
|
totpOrRecoveryCode: 'Código del autenticador o de recuperación',
|
|
totpStatusEnabled: 'Verificación en dos pasos activada',
|
|
totpLastUsed: 'Última verificación: {{date}}',
|
|
totpNeverUsed: 'Aún no usado',
|
|
disableTotp: 'Desactivar la verificación en dos pasos',
|
|
disableTotpDesc:
|
|
'Introduce un código actual del autenticador o un código de recuperación para desactivar la verificación en dos pasos',
|
|
totpEnabledSuccess: 'Verificación en dos pasos activada',
|
|
totpDisabledSuccess: 'Verificación en dos pasos desactivada',
|
|
totpInvalidCode: 'Código no válido, compruébalo e inténtalo de nuevo',
|
|
totpRecoveryCodesTitle: 'Códigos de recuperación',
|
|
totpRecoveryCodesDesc:
|
|
'Guarda estos códigos de recuperación de un solo uso en un lugar seguro. Solo se muestran una vez.',
|
|
totpRecoveryCodesWarning:
|
|
'Cada código funciona una sola vez. Si pierdes el autenticador y estos códigos, perderás el acceso al inicio de sesión.',
|
|
totpSavedCodes: 'He guardado estos códigos',
|
|
regenerateRecoveryCodes: 'Regenerar códigos de recuperación',
|
|
bindSpaceFailed: 'Error al vincular la cuenta de LangBot',
|
|
bindSpaceInvalidState:
|
|
'Solicitud de vinculación no válida. Por favor, inténtalo de nuevo desde la configuración de la cuenta.',
|
|
setPasswordHint:
|
|
'Establece una contraseña para iniciar sesión con correo y contraseña',
|
|
spaceEmailMismatch:
|
|
'El correo de la cuenta de LangBot no coincide con el correo de la cuenta local',
|
|
space_account_not_registeredTitle: 'Account not registered',
|
|
space_account_not_registered:
|
|
'No local account is registered for this LangBot Account email. Ask the Workspace owner for an invitation.',
|
|
space_account_binding_requiredTitle: 'LangBot Account connection required',
|
|
space_account_binding_required:
|
|
'This local account must connect a LangBot Account from Account settings before using LangBot Account login.',
|
|
},
|
|
workspace: {
|
|
title: 'Workspace',
|
|
description: 'Manage members, roles, and invitation links',
|
|
selectTitle: 'Choose a Workspace',
|
|
selectDescription: 'Select where you want to continue in LangBot.',
|
|
selectionLoadFailed:
|
|
'Your Workspaces could not be loaded. Please try again.',
|
|
switchWorkspace: 'Switch Workspace',
|
|
settings: 'Workspace Settings',
|
|
currentPlan: 'Current plan',
|
|
planUnavailable: 'Unavailable',
|
|
upgradePlan: 'Change or upgrade plan',
|
|
ossSingletonDescription:
|
|
'This self-hosted instance has one Workspace and can include multiple users.',
|
|
cloudManagedDescription:
|
|
'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.',
|
|
loadFailed: 'Failed to load Workspace information',
|
|
members: 'Members',
|
|
you: 'You',
|
|
inviteMember: 'Invite a member',
|
|
inviteDescription:
|
|
'Create a one-time link to add another user to this Workspace.',
|
|
emailPlaceholder: 'member@example.com',
|
|
createInvitation: 'Create invitation',
|
|
invitationCreated: 'Invitation created',
|
|
delivery: {
|
|
sent: 'Invitation sent',
|
|
link_only: 'Invitation link created',
|
|
failed: 'Invitation link created, but email could not be sent',
|
|
},
|
|
invitationCreateFailed: 'Failed to create invitation',
|
|
oneTimeLinkWarning: 'Copy this link now. It is shown only once.',
|
|
copyInvitation: 'Copy invitation link',
|
|
invitationCopied: 'Invitation link copied',
|
|
pendingInvitations: 'Pending invitations',
|
|
expiresAt: 'Expires {{date}}',
|
|
revokeInvitation: 'Revoke invitation',
|
|
invitationRevoked: 'Invitation revoked',
|
|
invitationRevokeFailed: 'Failed to revoke invitation',
|
|
acceptInvitation: 'Accept invitation',
|
|
invitedToWorkspace: 'You were invited to {{workspace}}',
|
|
checkingInvitation: 'Checking this invitation...',
|
|
invitationMissing: 'This invitation link is missing required information.',
|
|
invitationExpired: 'This invitation has expired.',
|
|
invitationAlreadyRevoked: 'This invitation was revoked.',
|
|
invitationAlreadyUsed: 'This invitation was already used.',
|
|
invitationInvalid: 'This invitation is invalid or no longer available.',
|
|
invitationAccepted: 'Invitation accepted',
|
|
invitationAcceptFailed: 'Failed to accept invitation',
|
|
invitationEmailMismatch:
|
|
'This invitation belongs to a different email address.',
|
|
existingAccountLoginRequired:
|
|
'An account already exists for this email. Sign in to continue.',
|
|
acceptAsCurrentAccount: 'Accept with current account',
|
|
authenticatedInvitationNotice:
|
|
'Sign out first, then sign in with the invited account. Your invitation will be preserved.',
|
|
logoutAndReturn: 'Sign out and return to this invitation',
|
|
switchAccount: 'Switch account',
|
|
registerAndAccept: 'Create account and accept',
|
|
alreadyHaveAccount: 'I already have an account',
|
|
confirmPassword: 'Confirm password',
|
|
passwordMinimum: 'Password must contain at least 8 characters.',
|
|
passwordMismatch: 'The passwords do not match.',
|
|
backToLogin: 'Back to sign in',
|
|
memberUpdated: 'Member role updated',
|
|
memberUpdateFailed: 'Failed to update member role',
|
|
removeMember: 'Remove member',
|
|
removeMemberConfirm: 'Remove this member from the Workspace?',
|
|
memberRemoved: 'Member removed',
|
|
memberRemoveFailed: 'Failed to remove member',
|
|
transferOwnership: 'Transfer ownership',
|
|
types: {
|
|
personal: 'Personal',
|
|
team: 'Team',
|
|
},
|
|
roles: {
|
|
owner: 'Owner',
|
|
admin: 'Admin',
|
|
developer: 'Developer',
|
|
operator: 'Operator',
|
|
viewer: 'Viewer',
|
|
},
|
|
},
|
|
monitoring: {
|
|
title: 'Panel de control',
|
|
description:
|
|
'Monitorea las actividades de los Bots, llamadas LLM y rendimiento del sistema',
|
|
overview: 'Resumen',
|
|
totalMessages: 'Total de mensajes',
|
|
llmCallsCount: 'Llamadas LLM',
|
|
modelCallsCount: 'Llamadas a modelos',
|
|
successRate: 'Tasa de éxito',
|
|
activeSessions: 'Sesiones activas',
|
|
last24Hours: 'Últimas 24 horas',
|
|
filters: {
|
|
title: 'Filtros',
|
|
bot: 'Bot',
|
|
pipeline: 'Pipeline',
|
|
allBots: 'Todos los Bots',
|
|
selectBot: 'Seleccionar Bot',
|
|
allPipelines: 'Todos los Pipelines',
|
|
selectPipeline: 'Seleccionar Pipeline',
|
|
loading: 'Cargando...',
|
|
timeRange: 'Rango de tiempo',
|
|
customRange: 'Rango personalizado',
|
|
from: 'Desde',
|
|
to: 'Hasta',
|
|
apply: 'Aplicar',
|
|
reset: 'Restablecer filtros',
|
|
lastHour: 'Última hora',
|
|
last6Hours: 'Últimas 6 horas',
|
|
last24Hours: 'Últimas 24 horas',
|
|
last7Days: 'Últimos 7 días',
|
|
last30Days: 'Últimos 30 días',
|
|
},
|
|
tabs: {
|
|
messages: 'Registros de mensajes',
|
|
llmCalls: 'Llamadas LLM',
|
|
embeddingCalls: 'Llamadas Embedding',
|
|
modelCalls: 'Llamadas a modelos',
|
|
tokens: 'Monitoreo de Tokens',
|
|
feedback: 'Comentarios de usuarios',
|
|
sessions: 'Análisis de sesiones',
|
|
errors: 'Registros de errores',
|
|
},
|
|
messageList: {
|
|
timestamp: 'Marca de tiempo',
|
|
bot: 'Bot',
|
|
pipeline: 'Pipeline',
|
|
message: 'Mensaje',
|
|
sessionId: 'ID de sesión',
|
|
status: 'Estado',
|
|
actions: 'Acciones',
|
|
viewDetails: 'Ver detalles',
|
|
copyId: 'Copiar ID',
|
|
noMessages: 'No se encontraron mensajes',
|
|
noMessagesDescription:
|
|
'Intenta ajustar los filtros o vuelve a comprobarlo más tarde',
|
|
loading: 'Cargando mensajes...',
|
|
loadMore: 'Cargar más',
|
|
autoRefresh: 'Actualización automática',
|
|
platform: 'Rol',
|
|
user: 'Usuario',
|
|
level: 'Nivel',
|
|
runner: 'Ejecutor',
|
|
viewConversation: 'Ver conversación',
|
|
turns: '{{count}} turnos de conversación',
|
|
userMessage: 'Usuario',
|
|
noUserMessage: 'No se registró entrada del usuario',
|
|
assistantMessage: 'Asistente',
|
|
assistantMessageCount: 'Asistente +{{count}}',
|
|
noAssistantMessage: 'No se registró respuesta del asistente',
|
|
messageCount: 'Mensajes',
|
|
conversationTrace: 'Flujo de conversación',
|
|
noLlmCalls: 'No se registraron llamadas al modelo',
|
|
roles: {
|
|
user: 'Usuario',
|
|
assistant: 'Asistente',
|
|
message: 'Mensaje',
|
|
},
|
|
},
|
|
llmCalls: {
|
|
title: 'Llamadas LLM',
|
|
model: 'Modelo',
|
|
tokens: 'Tokens',
|
|
duration: 'Duración',
|
|
cost: 'Coste',
|
|
noData: 'No se encontraron llamadas LLM',
|
|
inputTokens: 'Tokens de entrada',
|
|
outputTokens: 'Tokens de salida',
|
|
totalTokens: 'Tokens totales',
|
|
avgDuration: 'Duración promedio',
|
|
calls: 'Llamadas',
|
|
},
|
|
toolCalls: {
|
|
title: 'Llamadas de herramientas',
|
|
totalCalls: 'Llamadas',
|
|
duration: 'Duración de herramientas',
|
|
errorCalls: 'Llamadas fallidas',
|
|
arguments: 'Argumentos',
|
|
result: 'Resultado',
|
|
noToolCalls: 'No se registraron llamadas de herramientas',
|
|
showDetails: 'Mostrar detalles',
|
|
hideDetails: 'Ocultar detalles',
|
|
},
|
|
tokens: {
|
|
totalTokens: 'Tokens totales',
|
|
inputTokens: 'Tokens de entrada',
|
|
outputTokens: 'Tokens de salida',
|
|
avgPerCall: 'Prom. / llamada',
|
|
throughput: 'Rendimiento',
|
|
tokensPerSec: 'tokens/seg',
|
|
errorCalls: 'Llamadas fallidas',
|
|
acrossCalls: 'en {{count}} llamadas',
|
|
ofTotal: 'de {{count}} en total',
|
|
usageOverTime: 'Uso de tokens a lo largo del tiempo',
|
|
byModel: 'Por modelo',
|
|
model: 'Modelo',
|
|
calls: 'Llamadas',
|
|
avgLatency: 'Latencia media',
|
|
noData: 'No hay uso de tokens en el rango de tiempo seleccionado',
|
|
loadError: 'Error al cargar las estadísticas de tokens: {{error}}',
|
|
zeroTokenWarning:
|
|
'{{count}} llamada(s) exitosa(s) reportaron cero uso de tokens. Esto suele significar que el proveedor upstream no devolvió información de uso; revisa la configuración del proveedor del modelo.',
|
|
bucket: {
|
|
hour: 'Por hora',
|
|
day: 'Por día',
|
|
},
|
|
},
|
|
embeddingCalls: {
|
|
title: 'Llamadas Embedding',
|
|
model: 'Modelo',
|
|
tokens: 'Tokens',
|
|
duration: 'Duración',
|
|
noData: 'No se encontraron llamadas Embedding',
|
|
promptTokens: 'Tokens de prompt',
|
|
totalTokens: 'Tokens totales',
|
|
inputCount: 'Cantidad de entradas',
|
|
knowledgeBase: 'Base de conocimiento',
|
|
queryText: 'Consulta',
|
|
},
|
|
modelCalls: {
|
|
title: 'Llamadas a modelos',
|
|
llmModel: 'LLM',
|
|
embeddingModel: 'Embedding',
|
|
embeddingCall: 'Embedding',
|
|
retrieveCall: 'Recuperación',
|
|
noData: 'No se encontraron llamadas a modelos',
|
|
},
|
|
sessions: {
|
|
sessionId: 'ID de sesión',
|
|
messageCount: 'Mensajes',
|
|
duration: 'Duración',
|
|
lastActivity: 'Última actividad',
|
|
noSessions: 'No se encontraron sesiones',
|
|
startTime: 'Hora de inicio',
|
|
messageStats: 'Estadísticas de mensajes',
|
|
totalMessages: 'Total de mensajes',
|
|
successMessages: 'Exitosos',
|
|
errorMessages: 'Fallidos',
|
|
llmStats: 'Estadísticas LLM',
|
|
noData: 'Sesión no encontrada',
|
|
},
|
|
errors: {
|
|
title: 'Errores',
|
|
errorType: 'Tipo de error',
|
|
errorMessage: 'Mensaje de error',
|
|
occurredAt: 'Ocurrido el',
|
|
noErrors: 'No se encontraron errores',
|
|
stackTrace: 'Traza de pila',
|
|
},
|
|
feedback: {
|
|
title: 'Comentarios de usuarios',
|
|
totalFeedback: 'Total de comentarios',
|
|
totalLikes: 'Me gusta',
|
|
totalDislikes: 'No me gusta',
|
|
satisfactionRate: 'Tasa de satisfacción',
|
|
like: 'Me gusta',
|
|
dislike: 'No me gusta',
|
|
noFeedback: 'Aún no hay comentarios',
|
|
noFeedbackDescription: 'Los comentarios de los usuarios aparecerán aquí',
|
|
feedbackList: 'Lista de comentarios',
|
|
feedbackContent: 'Contenido del comentario',
|
|
contextInfo: 'Información de contexto',
|
|
userId: 'ID de usuario',
|
|
messageId: 'ID de mensaje',
|
|
streamId: 'ID de consulta relacionada',
|
|
inaccurateReasons: 'Razones de inexactitud',
|
|
platform: 'Plataforma',
|
|
exportFeedback: 'Exportar comentarios',
|
|
description:
|
|
'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
|
|
placeholder: 'Describe your suggestion, issue, or reproduction steps...',
|
|
attachImage: 'Add image',
|
|
screenshot: 'Screenshot',
|
|
submit: 'Submit feedback',
|
|
privacyHint:
|
|
'Do not include secrets, passwords, or private chat content.',
|
|
contentRequired: 'Please enter feedback first',
|
|
imageOnly: 'Only image attachments are supported',
|
|
imageTooLarge: 'Each image must be under 1MB',
|
|
tooManyImages: 'You can attach up to 3 images',
|
|
screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
|
|
submitSuccess: 'Feedback submitted. Thanks!',
|
|
submitFailed: 'Failed to submit feedback. Please try again later.',
|
|
removeImage: 'Remove image',
|
|
},
|
|
queries: {
|
|
title: 'Consultas',
|
|
},
|
|
messageDetails: {
|
|
noData: 'No hay llamadas LLM ni errores para esta consulta',
|
|
},
|
|
queryVariables: {
|
|
title: 'Variables de consulta',
|
|
},
|
|
loadError: 'No se pudieron cargar los datos de monitoreo',
|
|
partialMessages:
|
|
'Se muestran {{shown}} de {{total}} mensajes. Las trazas de conversación pueden estar incompletas.',
|
|
partialModelCalls: 'Se muestran {{shown}} de {{total}} llamadas al modelo.',
|
|
partialToolCalls:
|
|
'Se muestran {{shown}} de {{total}} llamadas a herramientas. Las trazas de conversación pueden estar incompletas.',
|
|
partialErrors: 'Se muestran {{shown}} de {{total}} errores.',
|
|
trafficChart: {
|
|
unavailable: 'Agregación de tráfico no disponible',
|
|
truncated:
|
|
'Rango de tráfico truncado. Selecciona un intervalo más corto.',
|
|
title: 'Resumen de tráfico',
|
|
messages: 'Mensajes',
|
|
llmCalls: 'Llamadas LLM',
|
|
noData: 'No hay datos de tráfico disponibles',
|
|
},
|
|
viewMonitoring: 'Ver monitoreo',
|
|
refreshData: 'Actualizar datos',
|
|
exportData: 'Exportar datos',
|
|
export: {
|
|
title: 'Exportar datos',
|
|
exporting: 'Exportando...',
|
|
messages: 'Mensajes',
|
|
llmCalls: 'Llamadas LLM',
|
|
embeddingCalls: 'Llamadas Embedding',
|
|
errors: 'Registros de errores',
|
|
sessions: 'Sesiones',
|
|
feedback: 'Comentarios de usuarios',
|
|
},
|
|
systemStatus: 'Estado del sistema',
|
|
pluginRuntime: 'Plugin Runtime',
|
|
boxRuntime: 'Box Runtime',
|
|
connected: 'Conectado',
|
|
disconnected: 'Desconectado',
|
|
disabled: 'Desactivado',
|
|
statusDetail: 'Estado',
|
|
pluginDisabled: 'El sistema de plugins está desactivado',
|
|
boxDisabled:
|
|
'El sandbox de Box está desactivado en la configuración — herramientas de sandbox, alta/edición de skills y MCP stdio no están disponibles',
|
|
boxUnavailable:
|
|
'El sandbox de Box no está disponible — herramientas de sandbox, alta/edición de skills y MCP stdio no están disponibles',
|
|
boxRequiredHint:
|
|
'Esta función requiere el runtime de Box. Actívelo en la configuración (box.enabled = true) y asegúrese de que el runtime está conectado.',
|
|
boxBackend: 'Backend',
|
|
boxProfile: 'Perfil',
|
|
boxSandboxes: 'Sandboxes',
|
|
boxSessionCreated: 'Creado',
|
|
boxSessionLastUsed: 'Último uso',
|
|
},
|
|
settingsDialog: {
|
|
title: 'Configuración',
|
|
nav: {
|
|
workspace: 'Workspace',
|
|
models: 'Modelos',
|
|
api: 'API',
|
|
storage: 'Almacenamiento',
|
|
account: 'Cuenta',
|
|
},
|
|
},
|
|
storageAnalysis: {
|
|
title: 'Análisis de almacenamiento',
|
|
description:
|
|
'Inspecciona el uso de almacenamiento y los candidatos de limpieza',
|
|
openDialog: 'Ver análisis',
|
|
dialogTitle: 'Análisis de almacenamiento',
|
|
generatedAt: 'Generado el {{time}}',
|
|
loading: 'Cargando...',
|
|
refresh: 'Actualizar',
|
|
totalSize: 'Tamaño total',
|
|
binaryStorage: 'Almacenamiento binario de plugins',
|
|
uploadCleanup: 'Subidas caducadas',
|
|
logCleanup: 'Registros caducados',
|
|
sections: 'Secciones de almacenamiento',
|
|
monitoringTables: 'Tablas de monitoreo',
|
|
runtimeTasks: 'Tareas en ejecución',
|
|
cleanupPolicy: 'Política de limpieza',
|
|
uploadRetention: 'Retención de subidas',
|
|
logRetention: 'Retención de registros',
|
|
databaseType: 'Tipo de base de datos',
|
|
days: 'días',
|
|
missing: 'Falta',
|
|
notCreated: 'Aún no creado',
|
|
processStorage: 'Almacenamiento por proceso',
|
|
processStorageDescription:
|
|
'Cada entorno de ejecución mide sus propios directorios. Los detalles ya se incluyen en el total del directorio principal.',
|
|
directory: 'Directorio',
|
|
size: 'Tamaño',
|
|
files: 'Archivos',
|
|
runtimeUnavailable:
|
|
'Las estadísticas de almacenamiento del entorno de ejecución no están disponibles.',
|
|
noManagedDirectories: 'No se informaron directorios administrados.',
|
|
scanWarnings: '{{count}} entradas ilegibles',
|
|
boxActivity: '{{sessions}} sesiones · {{processes}} procesos administrados',
|
|
statusLabels: {
|
|
available: 'Disponible',
|
|
unavailable: 'No disponible',
|
|
disabled: 'Desactivado',
|
|
not_applicable: 'No aplicable',
|
|
},
|
|
sourceLabels: {
|
|
local_process: 'Medido por el proceso LangBot',
|
|
runtime_rpc:
|
|
'Medido por el entorno de ejecución mediante RPC autenticado',
|
|
},
|
|
scopeLabels: {
|
|
runtime_host: 'Host del entorno de ejecución',
|
|
sandbox_sessions: 'Sesiones de sandbox',
|
|
},
|
|
processNames: {
|
|
langbot: 'Proceso principal de LangBot',
|
|
plugin_runtime: 'Entorno de ejecución de plugins',
|
|
box_runtime: 'Entorno de ejecución de Box',
|
|
},
|
|
processDescriptions: {
|
|
langbot:
|
|
'Base de datos, registros, archivos subidos, datos vectoriales y archivos temporales.',
|
|
plugin_runtime:
|
|
'Paquetes de plugins, artefactos verificados, entornos de dependencias y datos privados de instalación.',
|
|
box_runtime:
|
|
'Espacios de trabajo de sandbox, procesos MCP, directorios de intercambio de adjuntos y habilidades.',
|
|
},
|
|
expiredUploads: 'Subidas caducadas',
|
|
expiredLogs: 'Registros caducados',
|
|
noExpiredUploads: 'No hay archivos subidos caducados',
|
|
noExpiredLogs: 'No hay registros caducados',
|
|
sectionNames: {
|
|
database: 'Base de datos',
|
|
logs: 'Registros',
|
|
storage: 'Archivos subidos',
|
|
vector_store: 'Almacén vectorial',
|
|
plugins: 'Plugins',
|
|
mcp: 'MCP',
|
|
temp: 'Archivos temporales',
|
|
legacy_plugins: 'Paquetes de plugins antiguos',
|
|
artifacts: 'Artefactos de plugins verificados',
|
|
dependency_environments: 'Entornos de dependencias',
|
|
installations: 'Datos de instalación de plugins',
|
|
staging: 'Archivos provisionales de plugins',
|
|
rpc_transfer: 'Archivos de transferencia RPC',
|
|
workspace: 'Espacio de trabajo de sandbox',
|
|
inbox: 'Adjuntos entrantes',
|
|
outbox: 'Adjuntos salientes',
|
|
skills: 'Habilidades',
|
|
session_workspaces: 'Espacios de trabajo de sesiones sandbox',
|
|
session_caches: 'Cachés del entorno de sandbox',
|
|
session_temp: 'Archivos temporales de sandbox',
|
|
managed_process_workspaces:
|
|
'Espacios de procesos administrados (incluido MCP)',
|
|
},
|
|
},
|
|
limitation: {
|
|
maxBotsReached:
|
|
'Se ha alcanzado el número máximo de Bots ({{max}}). Por favor, elimina un Bot existente antes de crear uno nuevo.',
|
|
maxPipelinesReached:
|
|
'Se ha alcanzado el número máximo de Pipelines ({{max}}). Por favor, elimina un Pipeline existente antes de crear uno nuevo.',
|
|
maxExtensionsReached:
|
|
'Se ha alcanzado el número máximo de extensiones ({{max}}). Por favor, elimina un servidor MCP o plugin existente antes de añadir uno nuevo.',
|
|
quotaLoadingTooltip:
|
|
'El uso del espacio de trabajo aún se está cargando. Espera antes de crear un recurso.',
|
|
quotaCheckFailed:
|
|
'No se pudo verificar la cuota actual del espacio de trabajo. Inténtalo de nuevo.',
|
|
createDisabledTooltip:
|
|
'Se alcanzó el límite de {{resource}} ({{max}}) de este espacio de trabajo. Elimina uno existente antes de crear otro.',
|
|
},
|
|
skills: {
|
|
title: 'Skills',
|
|
description:
|
|
'Crea y gestiona skills que se pueden activar durante las conversaciones',
|
|
createSkill: 'Crear skill',
|
|
createSkillDescription:
|
|
'Importa un directorio local o crea una skill rellenando la información',
|
|
editSkill: 'Editar skill',
|
|
getSkillListError: 'Error al obtener la lista de skills: ',
|
|
skillName: 'Nombre de la skill',
|
|
displayName: 'Nombre de la skill',
|
|
displayNamePlaceholder: 'Nombre visible (admite cualquier idioma)',
|
|
skillSlug: 'Nombre del directorio',
|
|
skillSlugPlaceholder: 'english-name-only',
|
|
skillSlugHelp:
|
|
'Se usa como nombre del directorio de la skill. Solo letras, números, guiones y guiones bajos.',
|
|
skillDescription: 'Descripción de la skill',
|
|
skillInstructions: 'Instrucciones',
|
|
saveSuccess: 'Guardado correctamente',
|
|
saveError: 'Error al guardar: ',
|
|
createSuccess: 'Creado correctamente',
|
|
createError: 'Error al crear: ',
|
|
deleteSuccess: 'Eliminado correctamente',
|
|
deleteError: 'Error al eliminar: ',
|
|
deleteConfirmation: '¿Seguro que quieres eliminar esta skill?',
|
|
delete: 'Eliminar skill',
|
|
skillNameRequired: 'El nombre de la skill no puede estar vacío',
|
|
skillDescriptionRequired: 'La descripción de la skill no puede estar vacía',
|
|
packageRootRequired: 'La ruta raíz del paquete no puede estar vacía',
|
|
scan: 'Escanear',
|
|
scanSuccess: 'Directorio escaneado correctamente',
|
|
scanError: 'Error al escanear el directorio: ',
|
|
noSkills: 'No hay skills configuradas',
|
|
preview: 'Vista previa',
|
|
previewInstructions: 'Vista previa del contenido de SKILL.md',
|
|
instructionsPlaceholder:
|
|
'Introduce las instrucciones de la skill en formato Markdown...',
|
|
descriptionPlaceholder:
|
|
'Breve descripción de lo que hace esta skill (se muestra al LLM)',
|
|
packageRoot: 'Directorio del paquete',
|
|
packageRootHelp:
|
|
'Opcional. Solo se necesita al importar un directorio de skill existente. Déjalo vacío para skills nuevas. El escaneo revisa el directorio actual y subdirectorios hasta 2 niveles.',
|
|
importLocalDirectory: 'Importar directorio local de skill',
|
|
chooseSkillDirectory: 'Elegir directorio de SKILL.md',
|
|
chooseAnotherDirectory: 'Elegir otro directorio',
|
|
importingDirectory: 'Generando vista previa...',
|
|
clearDirectoryPreview: 'Borrar directorio seleccionado',
|
|
noSkillMdInDirectory:
|
|
'No se encontró SKILL.md en el directorio seleccionado',
|
|
multipleSkillMdInDirectory:
|
|
'El directorio seleccionado contiene varios SKILL.md. Elige directamente un único directorio de skill.',
|
|
importDirectoryError: 'Error al importar el directorio: ',
|
|
advancedSettings: 'Configuración avanzada',
|
|
searchSkills: 'Buscar skills...',
|
|
selectSkills: 'Seleccionar skills',
|
|
addSkill: 'Añadir skill',
|
|
builtin: 'Integrada',
|
|
importFromGithub: 'Instalar skill desde GitHub',
|
|
createManually: 'Crear manualmente',
|
|
uploadZip: 'Subir paquete ZIP',
|
|
uploadZipOnly: 'Solo se admiten paquetes de skill .zip',
|
|
installSuccess: 'Skill instalada correctamente',
|
|
installError: 'Error al instalar la skill: ',
|
|
enterRepoUrl: 'Introduce la URL del repositorio de GitHub',
|
|
repoUrlPlaceholder: 'p. ej., https://github.com/owner/repo',
|
|
fetchingReleases: 'Obteniendo releases...',
|
|
selectRelease: 'Seleccionar release',
|
|
noReleasesFound: 'No se encontraron releases',
|
|
fetchReleasesError: 'Error al obtener releases: ',
|
|
selectAsset: 'Selecciona el archivo para instalar',
|
|
sourceArchive: 'Código fuente (zip)',
|
|
noAssetsFound: 'No hay archivos instalables en esta release',
|
|
fetchAssetsError: 'Error al obtener archivos: ',
|
|
backToReleases: 'Volver a releases',
|
|
backToRepoUrl: 'Volver a la URL del repositorio',
|
|
backToAssets: 'Volver a archivos',
|
|
releaseTag: 'Etiqueta: {{tag}}',
|
|
publishedAt: 'Publicado el: {{date}}',
|
|
prerelease: 'Pre-release',
|
|
assetSize: 'Tamaño: {{size}}',
|
|
confirmInstall: 'Confirmar instalación',
|
|
installing: 'Instalando skill...',
|
|
loading: 'Cargando...',
|
|
previewLoadError: 'Error al cargar la vista previa',
|
|
selectFromSidebar: 'Selecciona una skill en la barra lateral',
|
|
dangerZone: 'Zona peligrosa',
|
|
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
|
files: 'Archivos',
|
|
noFiles: 'No se encontraron archivos',
|
|
loadFilesError: 'Error al cargar archivos: ',
|
|
readFileError: 'Error al leer el archivo: ',
|
|
saveFile: 'Guardar archivo',
|
|
saveFileSuccess: 'Archivo guardado correctamente',
|
|
saveFileError: 'Error al guardar el archivo: ',
|
|
},
|
|
wizard: {
|
|
sidebarDescription: 'Crea un Bot con pasos guiados',
|
|
loading: 'Cargando asistente...',
|
|
loadError: 'Error al cargar los datos del asistente',
|
|
skip: 'Omitir',
|
|
skipConfirmMessage:
|
|
'Puedes volver a acceder al asistente de inicio rápido desde el menú de cuenta más tarde, o crear un Bot manualmente.',
|
|
skipConfirmOk: 'Aceptar',
|
|
prev: 'Anterior',
|
|
next: 'Siguiente',
|
|
finish: 'Crear y desplegar',
|
|
confirmCreateBot: 'Confirmar, crear Bot',
|
|
createSuccess: '¡Pipeline creado y vinculado al Bot correctamente!',
|
|
botCreateSuccess: '¡Bot creado correctamente!',
|
|
botSaveSuccess: '¡Configuración del Bot guardada y activada!',
|
|
createError: 'Error al crear los recursos',
|
|
skipSaveError:
|
|
'Error al guardar el estado de omisión. Por favor, inténtalo de nuevo.',
|
|
completeSaveError:
|
|
'Error al guardar el estado de finalización. Por favor, inténtalo de nuevo.',
|
|
step: {
|
|
platform: 'Plataforma',
|
|
botConfig: 'Configuración del Bot',
|
|
aiEngine: 'Motor de IA',
|
|
done: 'Listo',
|
|
},
|
|
platform: {
|
|
title: 'Selecciona una plataforma',
|
|
description:
|
|
'Elige la plataforma de mensajería a la que se conectará tu Bot.',
|
|
},
|
|
botConfig: {
|
|
title: 'Configura tu Bot',
|
|
description:
|
|
'Configura tu Bot y verifica que funcione antes de continuar.',
|
|
saveBot: 'Guardar y activar Bot',
|
|
resaveBot: 'Volver a guardar configuración',
|
|
botSaved:
|
|
'Configuración del Bot guardada y activada. Consulta los registros para verificar la conexión.',
|
|
waitingForMessage:
|
|
'El Bot está activado. Envíale un mensaje desde tu plataforma de mensajería para continuar.',
|
|
messageReceived:
|
|
'El Bot recibió un mensaje. Puedes continuar al siguiente paso.',
|
|
messageReceivedLocalAccountWarning:
|
|
'La conexión del Bot está configurada correctamente y recibió un mensaje. Como no has iniciado sesión con una cuenta de LangBot, las llamadas al modelo pueden fallar; continúa al siguiente paso para añadir tu propio modelo.',
|
|
pageBotPreviewFailed:
|
|
'No se pudo cargar el chat de prueba. Guarda la configuración de nuevo para reintentar.',
|
|
pageBotTestPrompt:
|
|
'El Bot de página está activado. Haz clic en la burbuja de chat de la esquina inferior derecha y envía un mensaje para verificar el flujo completo de la conversación.',
|
|
pageBotTestNotice:
|
|
'Solo para pruebas. Inserta el código en una página web externa real.',
|
|
webhookTestPrompt:
|
|
'La URL de devolución de llamada está lista. Configúrala en la plataforma externa y envía un mensaje real al Bot.',
|
|
httpTestPrompt:
|
|
'El Bot HTTP está activado. Envía aquí un mensaje entrante real para verificar la conexión.',
|
|
httpTestDefaultMessage: 'Hola, este es un mensaje de prueba de conexión.',
|
|
sendHttpTest: 'Enviar mensaje de prueba',
|
|
httpTestAccepted:
|
|
'El mensaje de prueba fue aceptado. Aparecerá en el registro en breve.',
|
|
httpTestMissingSecret:
|
|
'Introduce un secreto de firma entrante y guarda primero la configuración.',
|
|
httpTestFailed: 'No se pudo enviar el mensaje de prueba: {{error}}',
|
|
logsTitle: 'Registros del Bot',
|
|
logsDescription:
|
|
'Monitorea la actividad del Bot para verificar que la conexión con la plataforma funcione.',
|
|
},
|
|
aiEngine: {
|
|
defaultModelUnavailable:
|
|
'No hay un modelo predeterminado disponible. Inténtalo de nuevo.',
|
|
defaultRunnerUnavailable:
|
|
'Local Agent aún no está listo. Inténtalo de nuevo.',
|
|
preparingDefault: 'Preparando la IA predeterminada…',
|
|
title: 'Configura el motor de IA',
|
|
description:
|
|
'Elige el motor de IA que impulsará la inteligencia de tu Bot.',
|
|
optionalDescription:
|
|
'La IA ya está configurada. Puedes usarla o cambiar la conexión.',
|
|
externalTitle: 'Conectar un Agent de una plataforma externa',
|
|
externalDescription:
|
|
'Conecta Dify, n8n, Coze u otro Agent externo mediante un plugin Runner.',
|
|
ownModelTitle: 'Usar mi propio modelo',
|
|
ownModelDescription:
|
|
'Añade un proveedor y luego escanea o introduce manualmente un modelo para completar la configuración.',
|
|
ownModelSetupTitle: 'Añade tu propio modelo',
|
|
ownModelSetupDescription:
|
|
'Añade un proveedor de modelos. Los modelos de chat se detectan automáticamente, o puedes introducir un ID de modelo manualmente.',
|
|
addProviderTitle: 'Añadir proveedor',
|
|
addProviderDescription:
|
|
'Introduce los datos del proveedor y la clave de API usados para conectar y detectar modelos.',
|
|
selectModelTitle: 'Elige un modelo',
|
|
selectScannedModelTitle: 'Elige un modelo',
|
|
selectScannedModelDescription:
|
|
'El modelo seleccionado sustituirá al modelo principal del pipeline de este bot.',
|
|
scanModelMode: 'Detectar modelos',
|
|
manualModelMode: 'Añadir manualmente',
|
|
scanningModels: 'Detectando modelos disponibles…',
|
|
noScannedModels:
|
|
'No se encontraron modelos de chat disponibles. Revisa la configuración del proveedor.',
|
|
scanModelsFailed:
|
|
'No se pudieron detectar los modelos. Revisa la URL y la clave de API e inténtalo de nuevo.',
|
|
manualFallbackFailed:
|
|
'La detección automática falló. Introduce un ID de modelo compatible con el proveedor.',
|
|
manualFallbackEmpty:
|
|
'No se encontraron modelos. Introduce un ID de modelo compatible con el proveedor.',
|
|
manualModelId: 'ID del modelo',
|
|
manualModelIdPlaceholder: 'Por ejemplo: gpt-4o',
|
|
manualModelIdDescription:
|
|
'Introduce el parámetro de modelo utilizado en las solicitudes.',
|
|
manualModelOptions: 'Capacidades opcionales del modelo',
|
|
editProvider: 'Editar proveedor',
|
|
rescanModels: 'Volver a detectar modelos',
|
|
moreFeaturesTitle: 'Usar la configuración predeterminada',
|
|
moreFeaturesDescription:
|
|
'Usa Local Agent y el modelo recomendado. Podrás añadir herramientas y bases de conocimiento después.',
|
|
runnerDescription:
|
|
'Selecciona un Runner para el Agent externo y configura su conexión.',
|
|
backToChoices: 'Volver a las opciones',
|
|
backToList: 'Volver a la lista',
|
|
createExternal: 'Crear y vincular',
|
|
finishWithModel: 'Usar el modelo seleccionado y finalizar',
|
|
openWorkbench: 'Abrir área de trabajo',
|
|
loadingCatalog: 'Cargando extensiones de ejecutores...',
|
|
catalogUnavailable: 'El catálogo de ejecutores no está disponible',
|
|
catalogUnavailableDescription:
|
|
'Los ejecutores instalados siguen disponibles. Reintenta cargar el catálogo o explora las extensiones.',
|
|
noMarketplaceRunners: 'Ningún plugin de ejecutor coincide con este uso',
|
|
noMarketplaceRunnersDescription:
|
|
'Usa un ejecutor instalado o inténtalo más tarde.',
|
|
browseRunners: 'Explorar extensiones de ejecutores',
|
|
installAndContinue: 'Instalar y continuar',
|
|
installing: 'Instalando...',
|
|
useInstalled: 'Usar este ejecutor',
|
|
installedUnavailable: 'Instalado, ejecutor no disponible',
|
|
installSuccess: '{{runner}} instalado y seleccionado',
|
|
installFailed: 'No se pudo instalar la extensión de ejecutor',
|
|
versionUnavailable: 'El mercado no devolvió ninguna versión instalable.',
|
|
installTimeout:
|
|
'La instalación del ejecutor agotó el tiempo de espera. Revisa la tarea en Extensiones.',
|
|
registrationTimeout:
|
|
'La extensión se instaló, pero el ejecutor no se registró. Revisa el entorno de ejecución de plugins y reinténtalo.',
|
|
},
|
|
config: {
|
|
botInfo: 'Información del Bot',
|
|
botNamePlaceholder: 'Introduce el nombre del Bot',
|
|
botDescPlaceholder: 'Introduce la descripción del Bot (opcional)',
|
|
platformConfig: 'Configuración de {{platform}}',
|
|
aiConfig: 'Configuración de {{engine}}',
|
|
},
|
|
done: {
|
|
title: '¡Todo listo!',
|
|
description:
|
|
'Tu Bot ha sido creado y conectado al Pipeline de IA. Ahora puedes gestionarlo desde el panel de trabajo.',
|
|
backToWorkbench: 'Volver al panel de trabajo',
|
|
},
|
|
},
|
|
addExtension: {
|
|
installTitle: 'Instalar {{type}}',
|
|
installConfirm: '¿Instalar {{type}} "{{name}}"?',
|
|
installInfoType: 'Tipo',
|
|
installInfoId: 'ID',
|
|
installInfoVersion: 'Versión',
|
|
installSuccess: 'Instalado correctamente',
|
|
installStage: {
|
|
mcpInstalling: 'Añadiendo y conectando el servidor MCP…',
|
|
skillInstalling: 'Instalando la skill…',
|
|
installed: 'Listo',
|
|
},
|
|
manualAdd: 'Añadir manualmente',
|
|
uploadExtension: 'Arrastra y suelta o haz clic para subir',
|
|
uploadHint: 'Admite archivos .zip (skills) y .lbpkg (plugins)',
|
|
orContinueWith: 'o elige una acción abajo',
|
|
addMCPServerHint: 'Conectar una extensión de servidor de herramientas MCP',
|
|
installFromGithub: 'Instalar desde GitHub',
|
|
installFromGithubHint: 'Paquete de plugin o skill (SKILL.md)',
|
|
githubUrlHelp: 'Pega una URL de GitHub',
|
|
githubUrlTooltip:
|
|
'Plugin: pega una URL de repositorio, Release o Tag. Skill: pega la URL de la página SKILL.md dentro del directorio de la skill.',
|
|
githubUrlPlaceholder: 'Repositorio de GitHub, Release o enlace SKILL.md',
|
|
githubUrlRequired: 'Introduce una URL de GitHub',
|
|
previewSkill: 'Previsualizar skill',
|
|
noSkillPreviewFound: 'No se encontró ninguna skill importable',
|
|
createSkill: 'Crear nueva skill',
|
|
createSkillHint: 'Importar desde un directorio local o crear manualmente',
|
|
unsupportedFileType:
|
|
'Tipo de archivo no admitido. Solo se admiten archivos .zip y .lbpkg',
|
|
},
|
|
errorPage: {
|
|
unexpectedError: 'Algo salió mal',
|
|
unexpectedErrorDescription:
|
|
'Ocurrió un error inesperado. Por favor, inténtelo de nuevo más tarde.',
|
|
notFound: 'Página no encontrada',
|
|
notFoundDescription: 'La página que buscas no existe o ha sido movida.',
|
|
backendUnavailableStatus: 'Backend no disponible',
|
|
goBack: 'Volver',
|
|
backToHome: 'Ir al inicio',
|
|
backToLogin: 'Volver al inicio de sesión',
|
|
retrying: 'Reintentando',
|
|
retryFailed:
|
|
'Aún no se puede conectar con el backend. Inicia el servicio e inténtalo de nuevo.',
|
|
},
|
|
feishu: {
|
|
createApp: 'Crear aplicación de Feishu con un clic',
|
|
scanQRCode:
|
|
'Escanea el código QR de abajo con Feishu para autorizar y crear la aplicación automáticamente',
|
|
waitingForScan: 'Esperando escaneo',
|
|
createSuccess:
|
|
'¡Aplicación creada correctamente! Las credenciales se han rellenado automáticamente',
|
|
createFailed: 'Error al crear la aplicación',
|
|
connecting: 'Conectando con el servicio de Feishu...',
|
|
expired: 'El código QR ha caducado. Inténtalo de nuevo',
|
|
denied: 'El usuario rechazó la autorización',
|
|
connectionLost: 'Se perdió la conexión. Inténtalo de nuevo',
|
|
reconnecting: 'Reconectando...',
|
|
retry: 'Reintentar',
|
|
},
|
|
weixin: {
|
|
scanLogin: 'Iniciar sesión en WeChat con QR',
|
|
scanQRCode:
|
|
'Escanea el código QR de abajo con WeChat para autorizar e introducir el token automáticamente',
|
|
loginSuccess:
|
|
'¡Inicio de sesión correcto! El token se ha rellenado automáticamente',
|
|
loginFailed: 'Error al iniciar sesión',
|
|
connecting: 'Conectando con el servicio de WeChat...',
|
|
waitingForScan: 'Esperando escaneo',
|
|
retry: 'Reintentar',
|
|
},
|
|
dingtalk: {
|
|
createApp: 'Crear aplicación de DingTalk con un clic',
|
|
scanQRCode:
|
|
'Escanea el código QR de abajo con DingTalk para autorizar y crear la aplicación automáticamente',
|
|
waitingForScan: 'Esperando escaneo',
|
|
createSuccess:
|
|
'¡Aplicación creada correctamente! Las credenciales se han rellenado automáticamente',
|
|
createFailed: 'Error al crear la aplicación',
|
|
connecting: 'Conectando con el servicio de DingTalk...',
|
|
retry: 'Reintentar',
|
|
robotCodeNote:
|
|
'El código del robot no puede obtenerse automáticamente. Ve al panel de desarrolladores de DingTalk > Configuración del robot para copiarlo manualmente. Es necesario para funciones como reconocimiento de imágenes y carga de archivos.',
|
|
},
|
|
wecombot: {
|
|
createBot: 'Crear bot de WeCom con un clic',
|
|
scanQRCode:
|
|
'Escanea el código QR de abajo con WeCom para autorizar y crear el bot automáticamente',
|
|
waitingForScan: 'Esperando escaneo',
|
|
createSuccess:
|
|
'¡Bot creado correctamente! Las credenciales se han rellenado automáticamente',
|
|
createFailed: 'Error al crear el bot',
|
|
connecting: 'Conectando con el servicio de WeCom...',
|
|
retry: 'Reintentar',
|
|
robotNameNote:
|
|
'El nombre del robot no puede obtenerse automáticamente. Introdúcelo manualmente.',
|
|
},
|
|
qqofficial: {
|
|
createBinding: 'Vinculación QR con un clic para el bot oficial de QQ',
|
|
scanQRCode:
|
|
'Escanea el código QR siguiente con QQ móvil y autoriza la vinculación en «QQ Bot Assistant»',
|
|
waitingForScan: 'Esperando escaneo',
|
|
bindSuccess:
|
|
'¡Vinculación correcta! AppID y Secret se han rellenado automáticamente',
|
|
bindFailed: 'Error en la vinculación',
|
|
connecting: 'Conectando con el servicio de QQ...',
|
|
retry: 'Reintentar',
|
|
tokenNote:
|
|
'El campo Token no es utilizado por el adaptador actual; puedes dejarlo vacío.',
|
|
boundBy: 'Vinculado por el usuario QQ {{openid}}',
|
|
},
|
|
pluginPages: {
|
|
selectFromSidebar: 'Selecciona una página de plugin en la barra lateral',
|
|
invalidPage: 'Página de plugin no válida',
|
|
},
|
|
};
|
|
export default esES;
|