Files
LangBot/web/src/i18n/locales/es-ES.ts
T
RockChinQ 5bfa38cbf2 feat(plugins): show plugin logs on detail page via Docs/Logs tablist
Add a Logs tab beside Documentation on the plugin detail page, showing
the output a plugin prints through the standard Python logger (per the
wiki style guide). Logs are captured from the plugin's stderr by the
plugin runtime and fetched on demand.

- Bump langbot-plugin pin to 0.4.4 (adds GET_PLUGIN_LOGS action)
- plugin_connector/handler: get_plugin_logs RPC client
- HTTP route GET /api/v1/plugins/<author>/<name>/logs (limit + level)
- Frontend: wrap detail right panel in Docs/Logs Tabs; PluginLogs
  component with level filter, manual + 3s auto refresh, bottom-follow
- i18n: 7 new keys across all 8 locales
2026-06-13 08:01:18 -04:00

1730 lines
74 KiB
TypeScript

const esES = {
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: {
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',
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',
delete: 'Eliminar',
add: 'Añadir',
select: 'Seleccionar',
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',
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://link.langbot.app/en/docs/data-policy',
loading: 'Cargando...',
fieldRequired: 'Este campo es obligatorio',
or: 'o',
loginWithSpace: 'Iniciar sesión con Space',
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',
spaceLoginTitle: 'Iniciar sesión con Space',
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 Space',
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 Space',
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 Space 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',
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',
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.',
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: {
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',
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 Space',
spaceDisabledForLocalAccount:
'Inicia sesión con Space 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 Space',
loginToUseModels: 'Inicia sesión con Space para usar modelos en la nube',
noModels: 'No hay modelos configurados',
langbotModels: 'Modelos LangBot',
spaceTrialTooltip:
'¡Créditos de prueba gratuitos disponibles! Inicia sesión con Space 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: ',
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: {
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',
defaultDescription: 'Un Bot',
getBotConfigError: 'Error al obtener la configuración del Bot: ',
saveSuccess: 'Guardado correctamente',
saveError: 'Error al guardar: ',
createSuccess:
'Creado correctamente. Por favor, activa o modifica el Pipeline vinculado',
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',
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',
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',
},
},
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',
loadingExtensions: 'Cargando extensiones...',
groupByType: 'Agrupar por formato',
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',
noDebugKey: '(No establecida)',
debugKeyDisabled:
'La clave de depuración no está configurada, la depuración del plugin no requiere autenticación',
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',
},
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.',
},
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',
logsAutoRefreshOn: 'Auto-actualizar: Activado',
logsAutoRefreshOff: 'Auto-actualizar: Desactivado',
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}}',
titleGeneric: 'Instalación de Plugin',
overallProgress: 'Progreso general',
downloading: 'Descargando Plugin',
installingDeps: 'Instalando dependencias',
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',
dismiss: 'Descartar',
background: 'Ejecutar en segundo plano',
taskQueue: 'Tareas de instalación',
clearCompleted: 'Limpiar completados',
noTasks: 'No hay tareas de instalación',
titlePlugin: 'Instalando plugin {{name}}',
titleMCP: 'Instalando servidor MCP {{name}}',
titleSkill: 'Instalando skill {{name}}',
installCompletePlugin: 'Plugin instalado correctamente',
installCompleteMCP: 'Servidor MCP instalado correctamente',
installCompleteSkill: 'Skill instalada correctamente',
},
uploadPluginOnly: 'Solo se admiten paquetes de plugin .lbpkg',
},
market: {
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',
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',
notFound: 'No se encontró la información del plugin',
sortBy: 'Ordenar por',
sort: {
recentlyAdded: 'Añadidos recientemente',
recentlyUpdated: 'Actualizados recientemente',
mostDownloads: 'Más descargas',
leastDownloads: 'Menos descargas',
},
downloads: 'descargas',
download: 'Descargar',
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',
},
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',
},
installCard: 'Instalar {{name}}',
},
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',
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',
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',
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',
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',
tabTools: 'Herramientas',
tabDocs: 'Documentación',
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',
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: 'Pipelines',
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',
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',
noMCPServersSelected: 'No hay servidores MCP seleccionados',
addMCPServer: 'Añadir servidor MCP',
selectMCPServers: 'Seleccionar servidores MCP',
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',
allPluginsEnabled: 'Todos los plugins activados',
allMCPServersEnabled: 'Todos los servidores MCP activados',
enableAllSkills: 'Activar todas las skills',
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',
},
debugDialog: {
title: 'Chat del Pipeline',
selectPipeline: 'Seleccionar Pipeline',
sessionType: 'Tipo de sesión',
privateChat: 'Chat privado',
groupChat: 'Chat grupal',
send: '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: 'WebSocket conectado',
disconnected: 'WebSocket 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: 'Panel de control',
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',
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 Space',
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 Space 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',
backToLogin: 'Volver al inicio de sesió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',
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 Space',
spaceBound: 'Vinculada',
spaceNotBound: 'No vinculada',
spaceBoundDescription:
'Cuenta de Space vinculada, API de modelos oficiales y servicios en la nube disponibles',
bindSpace: 'Vincular cuenta de Space',
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 Space',
bindSpaceWarning:
'Después de vincular, tu correo de inicio de sesión se cambiará de {{localEmail}} al correo de la cuenta de Space.',
bindSpaceSuccess: 'Cuenta de Space vinculada correctamente',
bindSpaceFailed: 'Error al vincular la cuenta de Space',
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 inicio de sesión de Space no coincide con el correo de la cuenta local',
},
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',
sessions: 'Análisis de sesiones',
feedback: 'Comentarios de usuarios',
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',
},
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',
},
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',
},
queries: {
title: 'Consultas',
},
messageDetails: {
noData: 'No hay llamadas LLM ni errores para esta consulta',
},
queryVariables: {
title: 'Variables de consulta',
},
trafficChart: {
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',
},
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',
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',
},
},
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.',
},
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',
spaceAuthError: 'Error al iniciar la autorización de Space',
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.',
logsTitle: 'Registros del Bot',
logsDescription:
'Monitorea la actividad del Bot para verificar que la conexión con la plataforma funcione.',
},
aiEngine: {
title: 'Selecciona un motor de IA',
description:
'Elige el motor de IA que impulsará la inteligencia de tu Bot.',
},
spaceBanner: {
message:
'¡Conéctate a LangBot Space para obtener créditos de prueba gratuitos y configuración instantánea sin esfuerzo!',
action: 'Autorizar con Space',
},
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',
},
},
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',
},
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.',
},
pluginPages: {
selectFromSidebar: 'Selecciona una página de plugin en la barra lateral',
invalidPage: 'Página de plugin no válida',
},
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: ',
},
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',
},
};
export default esES;