- {t('monitoring.toolCalls.result', {
- defaultValue: '结果',
- })}
+ {t('monitoring.toolCalls.result')}
{truncateToolDetail(call.result)}
@@ -1083,11 +1069,7 @@ const BotSessionMonitor = forwardRef<
)}
-
- {t('monitoring.toolCalls.title', {
- defaultValue: '工具调用',
- })}
-
+ {t('monitoring.toolCalls.title')}
{formatTime(call.timestamp)}
@@ -1096,18 +1078,8 @@ const BotSessionMonitor = forwardRef<
·
{expandedToolCall
- ? t(
- 'monitoring.toolCalls.hideDetails',
- {
- defaultValue: '隐藏详情',
- },
- )
- : t(
- 'monitoring.toolCalls.showDetails',
- {
- defaultValue: '查看详情',
- },
- )}
+ ? t('monitoring.toolCalls.hideDetails')
+ : t('monitoring.toolCalls.showDetails')}
>
)}
@@ -1151,12 +1123,8 @@ const BotSessionMonitor = forwardRef<
>
{isUser
- ? t('bots.sessionMonitor.userMessage', {
- defaultValue: 'User',
- })
- : t('bots.sessionMonitor.botMessage', {
- defaultValue: 'Assistant',
- })}
+ ? t('bots.sessionMonitor.userMessage')
+ : t('bots.sessionMonitor.botMessage')}
{formatTime(msg.timestamp)}
@@ -1164,9 +1132,7 @@ const BotSessionMonitor = forwardRef<
{isDiscarded ? (
- {t('bots.sessionMonitor.discarded', {
- defaultValue: 'Discarded',
- })}
+ {t('bots.sessionMonitor.discarded')}
) : msg.pipeline_name ? (
@@ -1225,7 +1191,7 @@ const BotSessionMonitor = forwardRef<
className="inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-accent disabled:opacity-40"
>
- {t('common.previous', { defaultValue: 'Previous' })}
+ {t('common.previous')}
{messagePage + 1} / {messagePageCount} · {messageTotal}
@@ -1238,7 +1204,7 @@ const BotSessionMonitor = forwardRef<
onClick={() => setMessagePage((page) => page + 1)}
className="inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-accent disabled:opacity-40"
>
- {t('common.next', { defaultValue: 'Next' })}
+ {t('common.next')}
diff --git a/web/src/i18n/locales/en-US.ts b/web/src/i18n/locales/en-US.ts
index 1694c4e3f..c9388cc4f 100644
--- a/web/src/i18n/locales/en-US.ts
+++ b/web/src/i18n/locales/en-US.ts
@@ -306,6 +306,7 @@ const enUS = {
common: {
customValue: 'Custom',
loadFailed: 'Failed to load. Please try again.',
+ search: 'Search',
login: 'Login',
logout: 'Logout',
accountOptions: 'Settings',
@@ -1076,6 +1077,10 @@ const enUS = {
discarded: 'Discarded',
userMessage: 'User',
botMessage: 'Assistant',
+ totalSessions: '{{count}} sessions',
+ userSearch: 'User ID or name',
+ startDate: 'Start date',
+ endDate: 'End date',
},
admins: {
title: 'Admins',
@@ -2546,6 +2551,8 @@ const enUS = {
arguments: 'Arguments',
result: 'Result',
noToolCalls: 'No tool calls recorded',
+ showDetails: 'Show details',
+ hideDetails: 'Hide details',
},
tokens: {
totalTokens: 'Total Tokens',
diff --git a/web/src/i18n/locales/es-ES.ts b/web/src/i18n/locales/es-ES.ts
index bcd00de6a..34ae4b818 100644
--- a/web/src/i18n/locales/es-ES.ts
+++ b/web/src/i18n/locales/es-ES.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/es-ES';
-
const esES = {
assistant: {
modelHint: 'Cambia el modelo del asistente para el próximo mensaje',
@@ -98,82 +97,9 @@ const esES = {
},
},
},
-
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.',
-
- 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.',
- },
- },
- 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.',
- },
- },
-
pipeline: {
trigger: {
title: 'Elegir qué mensajes responder',
@@ -246,12 +172,49 @@ const esES = {
'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}}',
- previous: 'Anterior',
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',
@@ -290,6 +253,39 @@ const esES = {
'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: {
@@ -308,15 +304,9 @@ const esES = {
editionCloud: 'Cloud',
},
common: {
- loadFailed: 'No se pudo cargar. Inténtalo de nuevo.',
- showSecret: 'Mostrar secreto',
- hideSecret: 'Ocultar secreto',
- 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',
-
customValue: 'Personalizado',
+ loadFailed: 'No se pudo cargar. Inténtalo de nuevo.',
+ search: 'Buscar',
login: 'Iniciar sesión',
logout: 'Cerrar sesión',
accountOptions: 'Configuración',
@@ -333,6 +323,8 @@ const esES = {
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:
@@ -345,6 +337,10 @@ const esES = {
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',
@@ -494,12 +490,11 @@ const esES = {
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',
-
- apiKeyStoredSecurely: 'Secret shown only when created',
},
notFound: {
title: 'Página no encontrada',
@@ -660,6 +655,10 @@ const esES = {
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',
@@ -713,13 +712,44 @@ const esES = {
fallbackList: 'Modelos de respaldo',
addFallback: 'Añadir modelo de respaldo',
},
-
- ownerMustBindSpace:
- 'The Workspace owner must connect a LangBot Account for LangBot Models.',
- usesOwnerSpaceBilling:
- "Uses the Workspace owner's LangBot Account billing and credits.",
},
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.',
@@ -731,6 +761,44 @@ const esES = {
'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',
@@ -793,6 +861,7 @@ const esES = {
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.',
@@ -874,6 +943,25 @@ const esES = {
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}}.',
@@ -922,102 +1010,6 @@ const esES = {
operator_not_contains: 'no contiene',
operator_starts_with: 'empieza por',
operator_regex: 'expresión regular',
-
- 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',
- },
- 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}}',
-
- adapterEventDebugAction: 'Probar escucha',
- 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. 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.',
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.',
@@ -1103,6 +1095,10 @@ const esES = {
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',
@@ -1120,12 +1116,119 @@ const esES = {
deleteError: 'Failed to remove admin: ',
noAdmins: 'No admins configured',
setAdminTitle: 'Set as admin',
- removeAdminTitle: 'Remove 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.',
@@ -1151,9 +1254,16 @@ const esES = {
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',
@@ -1202,6 +1312,26 @@ const esES = {
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:
@@ -1299,144 +1429,6 @@ const esES = {
debugReviewRunnerConfig: 'Revisar configuración del ejecutor',
debugErrorDetails: 'Ver detalles del error',
debugRunFailed: 'Falló la depuración del Agent',
-
- 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',
- basicInfo: 'Información básica',
- basicInfoDescription: 'Establece el nombre, icono y descripción',
- runnerSettings: 'Runner',
- advanced: 'Avanzado',
- 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.',
- 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.',
},
plugins: {
title: 'Extensiones',
@@ -1557,6 +1549,7 @@ const esES = {
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',
@@ -1625,18 +1618,19 @@ const esES = {
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',
- updateComplete: 'Plugin actualizado correctamente',
-
- 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',
@@ -1646,26 +1640,22 @@ const esES = {
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',
- 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: {
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...',
@@ -1678,6 +1668,10 @@ const esES = {
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',
@@ -1757,10 +1751,6 @@ const esES = {
clearAll: 'Borrar todo',
noTags: 'No hay etiquetas disponibles',
},
- installCard: 'Instalar {{name}}',
- installedCard: '{{name}} instalado',
- installed: 'Instalado',
- updateAvailable: 'Actualización disponible',
},
mcp: {
title: 'MCP',
@@ -1904,8 +1894,6 @@ const esES = {
'Una vez eliminada, la configuración de este servidor MCP no se podrá recuperar.',
},
pipelines: {
- managementDescription: 'Copia o elimina este flujo.',
-
title: 'Flujos',
description:
'Los Pipelines definen el flujo de procesamiento de eventos de mensajes, se usan para vincular a los Bots',
@@ -1928,6 +1916,7 @@ const esES = {
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',
@@ -1982,9 +1971,9 @@ const esES = {
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',
- enableAllSkills: 'Activar todas las skills',
allSkillsEnabled: 'Todas las skills están activadas',
skillsTitle: 'Skills',
noSkillsSelected: 'No hay skills seleccionadas',
@@ -2029,14 +2018,13 @@ const esES = {
selectKnowledgeBases: 'Seleccionar bases de conocimiento',
},
debugDialog: {
- saveAndSend: 'Guardar y enviar',
-
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',
@@ -2075,26 +2063,6 @@ const esES = {
},
},
knowledge: {
- 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.',
-
title: 'Conocimiento',
createKnowledgeBase: 'Crear base de conocimiento',
selectFromSidebar:
@@ -2177,6 +2145,25 @@ const esES = {
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',
@@ -2278,9 +2265,9 @@ const esES = {
'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',
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',
@@ -2422,7 +2409,6 @@ const esES = {
'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.',
@@ -2430,6 +2416,89 @@ const esES = {
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:
@@ -2468,8 +2537,8 @@ const esES = {
embeddingCalls: 'Llamadas Embedding',
modelCalls: 'Llamadas a modelos',
tokens: 'Monitoreo de Tokens',
- sessions: 'Análisis de sesiones',
feedback: 'Comentarios de usuarios',
+ sessions: 'Análisis de sesiones',
errors: 'Registros de errores',
},
messageList: {
@@ -2529,6 +2598,8 @@ const esES = {
arguments: 'Argumentos',
result: 'Resultado',
noToolCalls: 'No se registraron llamadas de herramientas',
+ showDetails: 'Mostrar detalles',
+ hideDetails: 'Ocultar detalles',
},
tokens: {
totalTokens: 'Tokens totales',
@@ -2693,15 +2764,35 @@ const esES = {
settingsDialog: {
title: 'Configuración',
nav: {
+ workspace: 'Workspace',
models: 'Modelos',
api: 'API',
storage: 'Almacenamiento',
account: 'Cuenta',
-
- workspace: 'Workspace',
},
},
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:
@@ -2742,33 +2833,18 @@ const esES = {
box_runtime:
'Espacios de trabajo de sandbox, procesos MCP, directorios de intercambio de adjuntos y habilidades.',
},
-
- 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',
legacy_plugins: 'Paquetes de plugins antiguos',
artifacts: 'Artefactos de plugins verificados',
dependency_environments: 'Entornos de dependencias',
@@ -2784,14 +2860,6 @@ const esES = {
session_temp: 'Archivos temporales de sandbox',
managed_process_workspaces:
'Espacios de procesos administrados (incluido MCP)',
-
- database: 'Base de datos',
- logs: 'Registros',
- storage: 'Archivos subidos',
- vector_store: 'Almacén vectorial',
- plugins: 'Plugins',
- mcp: 'MCP',
- temp: 'Archivos temporales',
},
},
limitation: {
@@ -2808,246 +2876,6 @@ const esES = {
createDisabledTooltip:
'Se alcanzó el límite de {{resource}} ({{max}}) de este espacio de trabajo. Elimina uno existente antes de crear otro.',
},
- 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: {
- 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.',
-
- 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',
- },
- 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',
- 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',
- },
skills: {
title: 'Skills',
description:
@@ -3143,6 +2971,161 @@ const esES = {
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}}"?',
@@ -3174,90 +3157,89 @@ const esES = {
unsupportedFileType:
'Tipo de archivo no admitido. Solo se admiten archivos .zip y .lbpkg',
},
-
- 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',
- },
+ 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;
diff --git a/web/src/i18n/locales/ja-JP.ts b/web/src/i18n/locales/ja-JP.ts
index 978e0fef3..d1b629b4b 100644
--- a/web/src/i18n/locales/ja-JP.ts
+++ b/web/src/i18n/locales/ja-JP.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/ja-JP';
-
const jaJP = {
assistant: {
modelHint: '次のメッセージからモデルを切り替え',
@@ -99,9 +98,6 @@ const jaJP = {
guidedTour: {
eventDebugDescription:
'対応するイベントを選び、テストデータを入力して出力とツールの結果を確認します。プラットフォーム操作は模擬実行され、モデルや他のツールは設定に従って実行されます。',
-
- skip: 'スキップ',
-
pipeline: {
trigger: {
title: '返信するメッセージを選ぶ',
@@ -179,13 +175,8 @@ const jaJP = {
progress: 'ステップ {{current}} / {{total}}',
next: '次へ',
finish: 'ガイドを完了',
+ skip: 'スキップ',
bot: {
- save: {
- title: 'ボット設定を保存する',
- description:
- '接続パラメーターとイベントルーティングを確認して保存します。準備ができたらボットを有効にできます。',
- },
-
connection: {
title: '接続方式を選択',
description:
@@ -211,6 +202,11 @@ const jaJP = {
description:
'各イベントを処理するプロセッサーを選びます。作成後にもルートを追加できます。',
},
+ save: {
+ title: 'ボット設定を保存する',
+ description:
+ '接続パラメーターとイベントルーティングを確認して保存します。準備ができたらボットを有効にできます。',
+ },
submit: {
title: 'ボットを作成',
description:
@@ -256,11 +252,6 @@ const jaJP = {
},
},
knowledge: {
- save: {
- title: 'ナレッジベースの設定を保存する',
- description: 'エンジンのパラメーターと検索設定を確認して保存します。',
- },
-
basic: {
title: 'ナレッジベース情報を入力',
description:
@@ -282,6 +273,10 @@ const jaJP = {
description:
'関連コンテンツの検索方法とプロセッサーへの返却方法を設定します。',
},
+ save: {
+ title: 'ナレッジベースの設定を保存する',
+ description: 'エンジンのパラメーターと検索設定を確認して保存します。',
+ },
submit: {
title: 'ナレッジベースを作成',
description:
@@ -307,6 +302,7 @@ const jaJP = {
common: {
customValue: 'カスタム',
loadFailed: '読み込みに失敗しました。再試行してください。',
+ search: '検索',
login: 'ログイン',
logout: 'ログアウト',
accountOptions: 'システム設定',
@@ -729,7 +725,6 @@ const jaJP = {
internalErrorHint:
'内部エラーが発生しました。エラー番号でバックエンドのログを確認してください。',
errorReference: 'エラー番号: {{id}}',
-
title: 'ボット',
description:
'ボットの作成と管理を行います。LangBotと各プラットフォームを接続するためのエントリーポイントです',
@@ -1088,6 +1083,10 @@ const jaJP = {
discarded: '破棄済み',
userMessage: 'ユーザー',
botMessage: 'アシスタント',
+ totalSessions: '{{count}} セッション',
+ userSearch: 'ユーザーIDまたは名前',
+ startDate: '開始日',
+ endDate: '終了日',
},
admins: {
title: 'Admins',
@@ -1105,113 +1104,12 @@ const jaJP = {
deleteError: 'Failed to remove admin: ',
noAdmins: 'No admins configured',
setAdminTitle: 'Set as admin',
- removeAdminTitle: 'Remove admin',
adminBadge: 'Admin',
configureAdmins: 'Manage Admins',
+ removeAdminTitle: 'Remove admin',
},
},
agents: {
- eventsAndTools: 'イベントとツール',
- eventsAndToolsDescription: '起動イベントと利用できるツールを設定します。',
- configuredEvents: '追加済みのイベント',
- configuredEventsCount: '合計 {{count}} 件',
- addEvent: 'イベントを追加',
- removeEvent: 'イベントを削除',
- eventActions: '自動で有効になるツール',
- eventToolEnabled: '有効',
- eventToolsEnabledCount: '{{count}} 個のツールが有効',
- noEventActions: 'このイベントで利用できるアクションはありません。',
- noEventsConfigured: 'イベントが未追加です',
- noEventsConfiguredDescription:
- 'この Agent を起動できるイベントがありません。',
- noEventsConfiguredBadge: 'イベントなし',
- apiTools: 'ツールへのアクセス',
- apiToolsDescription: 'この Agent が呼び出せるツールを選びます。',
- otherTools: 'その他のツール',
- otherToolsDescription:
- 'プラットフォーム、サンドボックス、MCP、プラグイン、スキルのツールを選びます。',
- apiToolsSelected: '{{count}} 個を選択中',
- apiToolsSecurityHint: 'この Agent に必要なツールだけを有効にしてください。',
- apiToolsSearch: 'ツールを検索…',
- eventApiTools: 'イベントツール',
- eventToolUnavailable: '利用不可',
- eventApiToolsDescription:
- '操作対象は現在のイベントから決まります。Agent はアクションのパラメーターのみを指定します。',
- platformApiTools: 'プラットフォームツール',
- platformApiToolsDescription:
- 'Agent はユーザー、グループ、メッセージの ID を選べます。必要な権限だけを付与してください。',
- apiToolEvents: 'イベント',
- apiToolParameters: 'Agent のパラメーター',
- apiToolSource: '提供元',
- apiToolNoParameters: 'なし',
- sandboxTools: 'サンドボックス',
- mcpTools: 'MCP',
- pluginTools: 'プラグイン',
- skillTools: 'スキル',
- langbotBuiltIn: 'LangBot',
- apiToolDetails: '詳細',
- apiToolHideDetails: '非表示',
- apiToolsNoResults: '一致する API やツールはありません',
- apiToolsCatalogUnavailable:
- 'LangBot サーバーが API ツール一覧を返しませんでした。サーバーを更新して再起動したか確認してください。プラットフォームにツールがないという意味ではありません。',
- hostToolsCatalogUnavailable: 'ツール一覧は一時的に利用できません。',
- apiToolRisk: {
- read: '読み取り専用',
- write: 'アクション',
- dangerous: '機密性の高い操作',
- },
- runnerConfigIncomplete: 'ランナー設定が未完了です',
- runnerConfigIncompleteDescription: '必須項目を入力してください:{{fields}}',
- debugTab: 'イベントデバッグ',
- debugTitle: 'Agent のイベントデバッグ',
- debugDescription:
- '現在の Agent にメッセージやプラットフォームイベントを渡して実行し、実際の出力を確認します。',
- debugResetSession: 'セッションをリセット',
- debugEventType: 'イベントの種類',
- debugNoEventsTitle: 'デバッグできるイベントがありません',
- debugNoEventsDescription:
- 'まず「イベントとツール」でイベントを追加してください。',
- debugMessageReceived: 'メッセージ受信',
- debugGroupMemberJoined: 'メンバーのグループ参加',
- debugGroupMemberLeft: 'メンバーのグループ退出',
- debugFriendRequested: '友達申請の受信',
- debugFeedbackReceived: 'フィードバック受信',
- debugCustomEvent: 'カスタムイベント',
- debugCustomEventType: 'カスタムイベント名',
- debugMessageInput: '会話の入力',
- debugEventSummary: 'イベントの概要',
- debugInputPlaceholder: 'Agent に処理させる内容を入力',
- debugEventPayload: 'イベントデータ(JSON)',
- debugSupportedEvents: 'Agent が対応するイベント',
- debugRun: 'テストを実行',
- debugSaveAndRun: '保存して実行',
- debugRunning: '実行中',
- debugTranscript: 'デバッグ記録',
- debugTranscriptDescription:
- '現在のデバッグセッションの入力と Agent の出力です。',
- debugEmptyTitle: 'この Agent の動作を確認する',
- debugEmptyTranscript:
- 'イベントを選び、テスト内容を入力して「テストを実行」を押します。結果はこのページに表示されます。',
- debugAgentOutput: 'Agent の出力',
- debugTestInput: 'テスト入力',
- debugNoTextOutput: 'テキスト出力なしで実行が完了しました。',
- debugEventTypeRequired: 'イベントの種類を入力してください',
- debugInputRequired: '会話の入力を記入してください',
- debugInvalidPayload:
- 'イベントデータは有効な JSON オブジェクトである必要があります',
- debugUnsupportedEvent: 'このイベントは Agent に紐付けできる範囲外です',
- debugRunnerConfigInvalidDescription:
- 'ランナー設定が未完了です:{{message}}',
- debugRunnerExecutionFailedDescription:
- '実行に失敗しました。選択したモデルとランナー設定を確認し、再試行してください。',
- debugRunnerTimeoutDescription:
- '実行がタイムアウトしました。後で再試行するか、ランナーのタイムアウト設定を変更してください。',
- debugApiKeyRequired: 'API キーがありません',
- debugOpenRunnerConfig: 'ランナー設定を開く',
- debugReviewRunnerConfig: 'ランナー設定を確認',
- debugErrorDetails: 'エラーの詳細を表示',
- debugRunFailed: 'Agent のデバッグ実行に失敗しました',
-
monitoring: {
description:
'各タスクのトリガーイベント、モデル出力、ツール実行を確認します。',
@@ -1233,13 +1131,11 @@ const jaJP = {
pluginSettings: 'プラグイン設定',
pluginSettingsDescription: 'このプラグインが定義するパラメーターです。',
selectToDebug: '上でプラグインを選択してデバッグを開始してください。',
-
debugOutput: 'プロセッサー出力',
debugDescription:
'このテストの入力イベント、プラグインログ、アクション結果。',
debugNotice:
'プラグインはテストイベントを実際に処理します。返信や送信などは Mock を使用し、実際のメッセージは送信しません。他のツールは設定どおりに実行されます。',
-
create: 'プラグインプロセッサーを作成',
type: 'プラグインプロセッサー',
description:
@@ -1277,7 +1173,6 @@ const jaJP = {
debugData: {
chatId: 'チャット ID',
feedbackType: 'フィードバック種別(1: 高評価、2: 低評価、3: 取消)',
-
title: 'イベントデータ',
form: '基本項目',
json: '完全な JSON',
@@ -1304,30 +1199,6 @@ const jaJP = {
sampleFeedback: 'とても役立ちました',
invalidField: '{{field}}を確認してください',
},
- debugReasoning: '思考内容',
- debugTextOutput: 'テキスト出力',
- debugPlatformNotice:
- 'プラットフォームツールは Mock を使用します。Agent は実際にツールを呼び出し、返信・送信などは模擬実行されます。他のツールは設定どおりに実行されます。',
- debugToolSimulated: '模擬実行成功 · Mock',
- debugStop: 'デバッグを停止',
- debugMockOptions: 'Mock シナリオ(JSON)',
- debugInvalidMock:
- 'Mock シナリオは有効な JSON オブジェクトで指定してください。',
- debugToolMockFailed: '模擬実行失敗 · Mock',
- debugMockOptionsHelp:
- '既定は成功です。errors にツール別エラー、results に結果、unsupported_apis に未対応 API を指定します。例:{"errors":{"event_reply":"送信失敗"}}',
- debugCancelled:
- 'デバッグを停止しました。それまでの実行記録は保持されます。',
- debugNoToolCalls:
- 'ツール呼び出しの記録はありません。テキストの生成は送信完了を意味しません。',
- debugToolCount:
- '{{count}} 件のツール呼び出しを記録しました。実行状態と結果は以下をご確認ください。',
- debugToolRunning: '実行中',
- debugToolCompleted: '完了',
- debugToolFailed: '失敗',
- debugToolInterrupted: '結果なし',
- debugToolArguments: '引数',
- debugToolResult: '実行結果',
title: 'プロセッサー',
description:
'再利用可能なプロセッサーを作成し、ボットのイベントルーティングで使用します',
@@ -1375,9 +1246,58 @@ const jaJP = {
basicInfoDescription: '名前、アイコン、説明を設定します',
runnerSettings: 'Runner',
advanced: '詳細',
+ eventsAndTools: 'イベントとツール',
+ eventsAndToolsDescription: '起動イベントと利用できるツールを設定します。',
bindableEvents: '紐付け可能なイベント範囲',
bindableEventsDescription:
'この Agent を選択できるボットイベントルートの範囲を制限します。通常は既定値のままで問題ありません。',
+ configuredEvents: '追加済みのイベント',
+ configuredEventsCount: '合計 {{count}} 件',
+ addEvent: 'イベントを追加',
+ removeEvent: 'イベントを削除',
+ eventActions: '自動で有効になるツール',
+ eventToolEnabled: '有効',
+ eventToolsEnabledCount: '{{count}} 個のツールが有効',
+ noEventActions: 'このイベントで利用できるアクションはありません。',
+ noEventsConfigured: 'イベントが未追加です',
+ noEventsConfiguredDescription:
+ 'この Agent を起動できるイベントがありません。',
+ noEventsConfiguredBadge: 'イベントなし',
+ apiTools: 'ツールへのアクセス',
+ apiToolsDescription: 'この Agent が呼び出せるツールを選びます。',
+ otherTools: 'その他のツール',
+ otherToolsDescription:
+ 'プラットフォーム、サンドボックス、MCP、プラグイン、スキルのツールを選びます。',
+ apiToolsSelected: '{{count}} 個を選択中',
+ apiToolsSecurityHint: 'この Agent に必要なツールだけを有効にしてください。',
+ apiToolsSearch: 'ツールを検索…',
+ eventApiTools: 'イベントツール',
+ eventToolUnavailable: '利用不可',
+ eventApiToolsDescription:
+ '操作対象は現在のイベントから決まります。Agent はアクションのパラメーターのみを指定します。',
+ platformApiTools: 'プラットフォームツール',
+ platformApiToolsDescription:
+ 'Agent はユーザー、グループ、メッセージの ID を選べます。必要な権限だけを付与してください。',
+ apiToolEvents: 'イベント',
+ apiToolParameters: 'Agent のパラメーター',
+ apiToolSource: '提供元',
+ apiToolNoParameters: 'なし',
+ sandboxTools: 'サンドボックス',
+ mcpTools: 'MCP',
+ pluginTools: 'プラグイン',
+ skillTools: 'スキル',
+ langbotBuiltIn: 'LangBot',
+ apiToolDetails: '詳細',
+ apiToolHideDetails: '非表示',
+ apiToolsNoResults: '一致する API やツールはありません',
+ apiToolsCatalogUnavailable:
+ 'LangBot サーバーが API ツール一覧を返しませんでした。サーバーを更新して再起動したか確認してください。プラットフォームにツールがないという意味ではありません。',
+ hostToolsCatalogUnavailable: 'ツール一覧は一時的に利用できません。',
+ apiToolRisk: {
+ read: '読み取り専用',
+ write: 'アクション',
+ dangerous: '機密性の高い操作',
+ },
supportedEvents: 'イベント範囲',
supportedEventsDescription:
'すべてのイベント、イベントグループ、または個別のイベントを選択します。ボットルートでは一致するイベントにのみこの Agent が表示されます。',
@@ -1417,9 +1337,84 @@ const jaJP = {
selectedRunnerUnavailableDescription:
'{{runner}} は現在登録されていません。別の Runner を選択するか、対応する拡張機能を復元してください。',
noRunnerSelected: 'Runner が選択されていません',
+ runnerConfigIncomplete: 'ランナー設定が未完了です',
+ runnerConfigIncompleteDescription: '必須項目を入力してください:{{fields}}',
runnerReady: 'Runner の準備完了',
runnerReadyDescription:
'{{runner}} は登録済みで、プラグインランタイムに接続されています。',
+ debugTab: 'イベントデバッグ',
+ debugTitle: 'Agent のイベントデバッグ',
+ debugDescription:
+ '現在の Agent にメッセージやプラットフォームイベントを渡して実行し、実際の出力を確認します。',
+ debugResetSession: 'セッションをリセット',
+ debugEventType: 'イベントの種類',
+ debugNoEventsTitle: 'デバッグできるイベントがありません',
+ debugNoEventsDescription:
+ 'まず「イベントとツール」でイベントを追加してください。',
+ debugMessageReceived: 'メッセージ受信',
+ debugGroupMemberJoined: 'メンバーのグループ参加',
+ debugGroupMemberLeft: 'メンバーのグループ退出',
+ debugFriendRequested: '友達申請の受信',
+ debugFeedbackReceived: 'フィードバック受信',
+ debugCustomEvent: 'カスタムイベント',
+ debugCustomEventType: 'カスタムイベント名',
+ debugMessageInput: '会話の入力',
+ debugEventSummary: 'イベントの概要',
+ debugInputPlaceholder: 'Agent に処理させる内容を入力',
+ debugEventPayload: 'イベントデータ(JSON)',
+ debugSupportedEvents: 'Agent が対応するイベント',
+ debugRun: 'テストを実行',
+ debugSaveAndRun: '保存して実行',
+ debugRunning: '実行中',
+ debugTranscript: 'デバッグ記録',
+ debugTranscriptDescription:
+ '現在のデバッグセッションの入力と Agent の出力です。',
+ debugEmptyTitle: 'この Agent の動作を確認する',
+ debugEmptyTranscript:
+ 'イベントを選び、テスト内容を入力して「テストを実行」を押します。結果はこのページに表示されます。',
+ debugAgentOutput: 'Agent の出力',
+ debugReasoning: '思考内容',
+ debugTextOutput: 'テキスト出力',
+ debugPlatformNotice:
+ 'プラットフォームツールは Mock を使用します。Agent は実際にツールを呼び出し、返信・送信などは模擬実行されます。他のツールは設定どおりに実行されます。',
+ debugToolSimulated: '模擬実行成功 · Mock',
+ debugStop: 'デバッグを停止',
+ debugMockOptions: 'Mock シナリオ(JSON)',
+ debugInvalidMock:
+ 'Mock シナリオは有効な JSON オブジェクトで指定してください。',
+ debugToolMockFailed: '模擬実行失敗 · Mock',
+ debugMockOptionsHelp:
+ '既定は成功です。errors にツール別エラー、results に結果、unsupported_apis に未対応 API を指定します。例:{"errors":{"event_reply":"送信失敗"}}',
+ debugCancelled:
+ 'デバッグを停止しました。それまでの実行記録は保持されます。',
+ debugNoToolCalls:
+ 'ツール呼び出しの記録はありません。テキストの生成は送信完了を意味しません。',
+ debugToolCount:
+ '{{count}} 件のツール呼び出しを記録しました。実行状態と結果は以下をご確認ください。',
+ debugToolRunning: '実行中',
+ debugToolCompleted: '完了',
+ debugToolFailed: '失敗',
+ debugToolInterrupted: '結果なし',
+ debugToolArguments: '引数',
+ debugToolResult: '実行結果',
+ debugTestInput: 'テスト入力',
+ debugNoTextOutput: 'テキスト出力なしで実行が完了しました。',
+ debugEventTypeRequired: 'イベントの種類を入力してください',
+ debugInputRequired: '会話の入力を記入してください',
+ debugInvalidPayload:
+ 'イベントデータは有効な JSON オブジェクトである必要があります',
+ debugUnsupportedEvent: 'このイベントは Agent に紐付けできる範囲外です',
+ debugRunnerConfigInvalidDescription:
+ 'ランナー設定が未完了です:{{message}}',
+ debugRunnerExecutionFailedDescription:
+ '実行に失敗しました。選択したモデルとランナー設定を確認し、再試行してください。',
+ debugRunnerTimeoutDescription:
+ '実行がタイムアウトしました。後で再試行するか、ランナーのタイムアウト設定を変更してください。',
+ debugApiKeyRequired: 'API キーがありません',
+ debugOpenRunnerConfig: 'ランナー設定を開く',
+ debugReviewRunnerConfig: 'ランナー設定を確認',
+ debugErrorDetails: 'エラーの詳細を表示',
+ debugRunFailed: 'Agent のデバッグ実行に失敗しました',
},
plugins: {
title: '拡張機能',
@@ -1538,6 +1533,7 @@ const jaJP = {
ready:
'プラグインパッケージを展開しました。確認するとインストールを開始します。',
},
+ uploadPluginOnly: '.lbpkg プラグインパッケージのみ対応しています',
dragToUpload: 'ファイルをここにドラッグしてアップロード',
unsupportedFileType:
'サポートされていないファイルタイプです。.lbpkg と .zip ファイルのみサポートされています',
@@ -1609,6 +1605,9 @@ const jaJP = {
title: '{{name}} をインストール中',
updateTitle: '{{name}} を更新中',
titleGeneric: 'プラグインのインストール',
+ titlePlugin: 'プラグイン {{name}} をインストール中',
+ titleMCP: 'MCP サーバー {{name}} をインストール中',
+ titleSkill: 'スキル {{name}} をインストール中',
overallProgress: '全体の進捗',
checkingUpdate: '最新バージョンを確認中',
downloading: 'プラグインをダウンロード中',
@@ -1626,26 +1625,21 @@ const jaJP = {
'{{installed}}/{{total}} インストール済み · 残り {{remaining}} 個',
installComplete: 'プラグインのインストール完了',
updateComplete: 'プラグインの更新が完了しました',
+ installCompletePlugin: 'プラグインをインストールしました',
+ installCompleteMCP: 'MCP サーバーをインストールしました',
+ installCompleteSkill: 'スキルをインストールしました',
dismiss: '閉じる',
background: 'バックグラウンドで実行',
taskQueue: 'プラグインタスク',
clearCompleted: '完了を消去',
noTasks: 'プラグインタスクはありません',
- titlePlugin: 'プラグイン {{name}} をインストール中',
- titleMCP: 'MCP サーバー {{name}} をインストール中',
- titleSkill: 'スキル {{name}} をインストール中',
- installCompletePlugin: 'プラグインをインストールしました',
- installCompleteMCP: 'MCP サーバーをインストールしました',
- installCompleteSkill: 'スキルをインストールしました',
},
- uploadPluginOnly: '.lbpkg プラグインパッケージのみ対応しています',
},
market: {
runnerUsage: 'ランナーの用途',
runnerUsageAll: 'すべて',
runnerUsageAgent: 'Agent / パイプライン',
runnerUsageEvent: 'プラグインプロセッサー',
-
searchPlaceholder: 'プラグインを検索...',
searchPlaceholderCount:
'{{count}} 個の拡張機能・機能・ユースケースを検索...',
@@ -1658,6 +1652,10 @@ const jaJP = {
allLoaded: 'すべてのプラグインが表示されました',
allLoadedCount: '{{count}} 個の拡張機能をすべて表示しました',
install: 'インストール',
+ installCard: '{{name}} をインストール',
+ installedCard: '{{name}} はインストール済み',
+ installed: 'インストール済み',
+ updateAvailable: '更新があります',
installConfirm:
'プラグイン "{{name}}" ({{version}}) をインストールしますか?',
downloadComplete: 'プラグイン "{{name}}" のダウンロードが完了しました',
@@ -1718,13 +1716,10 @@ const jaJP = {
typeMCP: 'MCP',
typeSkill: 'スキル',
requestPlugin: 'プラグインをリクエスト',
- tags: {
- filterByTags: 'タグで絞り込み',
- selected: '選択済み',
- selectTags: 'タグを選択',
- clearAll: 'クリア',
- noTags: 'タグがありません',
- },
+ viewDetails: '詳細を表示',
+ deprecated: '非推奨',
+ deprecatedTooltip:
+ '対応する「ナレッジエンジン」プラグインをインストールしてください。',
filters: {
allFormats: 'すべての種類',
more: 'もっと',
@@ -1733,14 +1728,13 @@ const jaJP = {
technicalType: '技術タイプ',
},
allExtensions: 'すべての拡張機能',
- viewDetails: '詳細を表示',
- deprecated: '非推奨',
- deprecatedTooltip:
- '対応する「ナレッジエンジン」プラグインをインストールしてください。',
- installCard: '{{name}} をインストール',
- installedCard: '{{name}} はインストール済み',
- installed: 'インストール済み',
- updateAvailable: '更新があります',
+ tags: {
+ filterByTags: 'タグで絞り込み',
+ selected: '選択済み',
+ selectTags: 'タグを選択',
+ clearAll: 'クリア',
+ noTags: 'タグがありません',
+ },
},
mcp: {
title: 'MCP',
@@ -1753,6 +1747,7 @@ const jaJP = {
getServerListError: 'MCPサーバーリストの取得に失敗しました:',
serverName: 'サーバー名',
serverMode: '接続モード',
+ selectMode: '接続モードを選択',
stdio: 'Stdioモード',
sse: 'SSEモード',
http: 'HTTPモード',
@@ -1765,7 +1760,6 @@ const jaJP = {
remoteUrlPlaceholder: 'https://example.com/mcp',
remoteUrlDescription:
'MCP サーバーの URL を貼り付けてください。Streamable HTTP と従来の SSE エンドポイントの両方に対応しています。',
- selectMode: '接続モードを選択',
noServerInstalled: 'MCPサーバーが設定されていません',
serverNameRequired: 'サーバー名は必須です',
commandRequired: 'コマンドは必須です',
@@ -1954,9 +1948,9 @@ const jaJP = {
selectAll: 'すべて選択',
enableAllPlugins: 'すべてのプラグインを有効にする',
enableAllMCPServers: 'すべてのMCPサーバーを有効にする',
+ enableAllSkills: 'すべてのスキルを有効化',
allPluginsEnabled: 'すべてのプラグインが有効になっています',
allMCPServersEnabled: 'すべてのMCPサーバーが有効になっています',
- enableAllSkills: 'すべてのスキルを有効化',
allSkillsEnabled: 'すべてのスキルが有効です',
skillsTitle: 'スキル',
noSkillsSelected: 'スキルが選択されていません',
@@ -2001,14 +1995,13 @@ const jaJP = {
selectKnowledgeBases: 'ナレッジベースを選択',
},
debugDialog: {
- saveAndSend: '保存して送信',
-
title: 'パイプラインのチャット',
selectPipeline: 'パイプラインを選択',
sessionType: 'セッションタイプ',
privateChat: 'プライベートチャット',
groupChat: 'グループチャット',
send: '送信',
+ saveAndSend: '保存して送信',
reset: '会話をリセット',
inputPlaceholder: '{{type}}メッセージを送信...',
noMessages: 'メッセージがありません',
@@ -2122,25 +2115,6 @@ const jaJP = {
fileName: 'ファイル名',
noResults: '検索結果がありません',
retrieveError: '検索に失敗しました:',
- basicInfo: '基本情報',
- basicInfoDescription: 'ナレッジベースの名前、アイコン、説明を設定',
- engineSettings: 'エンジン設定',
- engineSettingsDescription: '選択したナレッジエンジンの設定',
- engineSettingsReadonly: '編集モードでは変更できません',
- engineSettingsInvalid:
- 'エンジン設定の検証に失敗しました、必須項目を確認してください',
- retrievalSettingsInvalid:
- '検索設定の検証に失敗しました、必須項目を確認してください',
- retrievalSettings: '検索設定',
- retrievalSettingsDescription: 'このナレッジベースからの文書検索方法を設定',
- dangerZone: '危険ゾーン',
- dangerZoneDescription: '元に戻せない操作',
- deleteKbAction: 'このナレッジベースを削除',
- deleteKbHint:
- '削除すると、このナレッジベース内のすべての文書とデータが完全に削除されます。',
- noEnginesAvailable: '利用可能なナレッジエンジンがありません',
- installEngineHint:
- '先に「ナレッジエンジン」プラグインをインストールしてください',
unknownEngine: '不明なエンジン',
knowledgeEngine: 'ナレッジエンジン',
knowledgeEngineRequired: 'ナレッジエンジンは必須です',
@@ -2169,6 +2143,25 @@ const jaJP = {
builtInEngine: '組み込みエンジン',
cannotChangeKnowledgeEngine:
'作成後にナレッジエンジンを変更することはできません',
+ basicInfo: '基本情報',
+ basicInfoDescription: 'ナレッジベースの名前、アイコン、説明を設定',
+ engineSettings: 'エンジン設定',
+ engineSettingsDescription: '選択したナレッジエンジンの設定',
+ engineSettingsReadonly: '編集モードでは変更できません',
+ engineSettingsInvalid:
+ 'エンジン設定の検証に失敗しました、必須項目を確認してください',
+ retrievalSettingsInvalid:
+ '検索設定の検証に失敗しました、必須項目を確認してください',
+ retrievalSettings: '検索設定',
+ retrievalSettingsDescription: 'このナレッジベースからの文書検索方法を設定',
+ dangerZone: '危険ゾーン',
+ dangerZoneDescription: '元に戻せない操作',
+ deleteKbAction: 'このナレッジベースを削除',
+ deleteKbHint:
+ '削除すると、このナレッジベース内のすべての文書とデータが完全に削除されます。',
+ noEnginesAvailable: '利用可能なナレッジエンジンがありません',
+ installEngineHint:
+ '先に「ナレッジエンジン」プラグインをインストールしてください',
createKnowledgeBaseFailed: 'ナレッジベースの作成に失敗しました:',
loadKnowledgeBaseFailed: 'ナレッジベースの読み込みに失敗しました:',
deleteKnowledgeBaseFailed: 'ナレッジベースの削除に失敗しました:',
@@ -2239,9 +2232,9 @@ const jaJP = {
resetSuccess: 'パスワードのリセットに成功しました。ログインしてください',
resetFailed:
'パスワードのリセットに失敗しました。メールアドレスと復旧キーを確認してください',
- backToLogin: 'ログインに戻る',
secondFactorFailed:
'確認に失敗しました。コードを確認して再試行してください',
+ backToLogin: 'ログインに戻る',
verifyWith: '確認方法',
methodRecoveryKey: 'リカバリーキー',
methodTotp: '認証アプリ',
@@ -2395,6 +2388,10 @@ const jaJP = {
selectionLoadFailed:
'ワークスペースを読み込めませんでした。もう一度お試しください。',
switchWorkspace: 'ワークスペースを切り替え',
+ settings: 'Workspace Settings',
+ currentPlan: 'Current plan',
+ planUnavailable: 'Unavailable',
+ upgradePlan: 'Change or upgrade plan',
ossSingletonDescription:
'このセルフホストインスタンスには1つのワークスペースがあり、複数のユーザーを追加できます。',
cloudManagedDescription:
@@ -2465,11 +2462,6 @@ const jaJP = {
operator: 'オペレーター',
viewer: '閲覧者',
},
-
- settings: 'Workspace Settings',
- currentPlan: 'Current plan',
- planUnavailable: 'Unavailable',
- upgradePlan: 'Change or upgrade plan',
},
monitoring: {
title: 'ダッシュボード',
@@ -2509,8 +2501,8 @@ const jaJP = {
embeddingCalls: 'Embedding呼び出し',
modelCalls: 'モデル呼び出し',
tokens: 'トークン監視',
- sessions: 'セッション分析',
feedback: 'ユーザーフィードバック',
+ sessions: 'セッション分析',
errors: 'エラーログ',
},
messageList: {
@@ -2569,6 +2561,8 @@ const jaJP = {
arguments: '引数',
result: '結果',
noToolCalls: 'ツール呼び出しは記録されていません',
+ showDetails: '詳細を表示',
+ hideDetails: '詳細を非表示',
},
tokens: {
totalTokens: '総トークン数',
@@ -2629,12 +2623,12 @@ const jaJP = {
noData: 'セッションが見つかりません',
},
errors: {
+ title: 'エラー',
errorType: 'エラータイプ',
errorMessage: 'エラーメッセージ',
occurredAt: '発生時刻',
noErrors: 'エラーが見つかりません',
stackTrace: 'スタックトレース',
- title: 'エラー',
},
feedback: {
title: 'ユーザーフィードバック',
@@ -2672,12 +2666,12 @@ const jaJP = {
submitFailed: '送信に失敗しました。後でもう一度お試しください。',
removeImage: '画像を削除',
},
- messageDetails: {
- noData: 'このクエリにはLLM呼び出しやエラーがありません',
- },
queries: {
title: 'クエリ',
},
+ messageDetails: {
+ noData: 'このクエリにはLLM呼び出しやエラーがありません',
+ },
queryVariables: {
title: 'クエリ変数',
},
@@ -2741,6 +2735,26 @@ const jaJP = {
},
},
storageAnalysis: {
+ title: 'ストレージ分析',
+ description: 'ストレージ使用量とクリーンアップ候補を確認します',
+ openDialog: '分析を表示',
+ dialogTitle: 'ストレージ分析',
+ generatedAt: '生成日時 {{time}}',
+ loading: '読み込み中...',
+ refresh: '更新',
+ totalSize: '合計サイズ',
+ binaryStorage: 'プラグインバイナリストレージ',
+ uploadCleanup: '期限切れアップロード',
+ logCleanup: '期限切れログ',
+ sections: 'ストレージセクション',
+ monitoringTables: '監視テーブル',
+ runtimeTasks: '実行タスク',
+ cleanupPolicy: 'クリーンアップポリシー',
+ uploadRetention: 'アップロード保持期間',
+ logRetention: 'ログ保持期間',
+ databaseType: 'データベース種別',
+ days: '日',
+ missing: 'なし',
notCreated: '未作成',
processStorage: 'プロセス別ストレージ',
processStorageDescription:
@@ -2779,32 +2793,18 @@ const jaJP = {
box_runtime:
'サンドボックスと MCP プロセスのワークスペース、添付ファイル交換ディレクトリ、スキル。',
},
-
- title: 'ストレージ分析',
- description: 'ストレージ使用量とクリーンアップ候補を確認します',
- openDialog: '分析を表示',
- dialogTitle: 'ストレージ分析',
- generatedAt: '生成日時 {{time}}',
- loading: '読み込み中...',
- refresh: '更新',
- totalSize: '合計サイズ',
- binaryStorage: 'プラグインバイナリストレージ',
- uploadCleanup: '期限切れアップロード',
- logCleanup: '期限切れログ',
- sections: 'ストレージセクション',
- monitoringTables: '監視テーブル',
- runtimeTasks: '実行タスク',
- cleanupPolicy: 'クリーンアップポリシー',
- uploadRetention: 'アップロード保持期間',
- logRetention: 'ログ保持期間',
- databaseType: 'データベース種別',
- days: '日',
- missing: 'なし',
expiredUploads: '期限切れアップロード',
expiredLogs: '期限切れログ',
noExpiredUploads: '期限切れのアップロードファイルはありません',
noExpiredLogs: '期限切れのログファイルはありません',
sectionNames: {
+ database: 'データベース',
+ logs: 'ログ',
+ storage: 'アップロードファイル',
+ vector_store: 'ベクターストア',
+ plugins: 'プラグイン',
+ mcp: 'MCP',
+ temp: '一時ファイル',
legacy_plugins: '旧プラグインパッケージ',
artifacts: '検証済みプラグイン成果物',
dependency_environments: '依存関係の環境',
@@ -2819,14 +2819,6 @@ const jaJP = {
session_caches: 'サンドボックスランタイムのキャッシュ',
session_temp: 'サンドボックスの一時ファイル',
managed_process_workspaces: '管理プロセスのワークスペース(MCP を含む)',
-
- database: 'データベース',
- logs: 'ログ',
- storage: 'アップロードファイル',
- vector_store: 'ベクターストア',
- plugins: 'プラグイン',
- mcp: 'MCP',
- temp: '一時ファイル',
},
},
limitation: {
@@ -2843,6 +2835,97 @@ const jaJP = {
createDisabledTooltip:
'このワークスペースの{{resource}}数が上限({{max}}個)に達しました。新しく作成する前に既存の{{resource}}を削除してください。',
},
+ skills: {
+ title: 'スキル',
+ description: '会話中に有効化できるスキルを作成・管理します',
+ createSkill: 'スキルを作成',
+ createSkillDescription:
+ 'ローカルディレクトリをインポートするか、情報を入力して作成します',
+ editSkill: 'スキルを編集',
+ getSkillListError: 'スキル一覧の取得に失敗しました: ',
+ skillName: 'スキル名',
+ displayName: 'スキル名',
+ displayNamePlaceholder: '表示名(任意の言語に対応)',
+ skillSlug: 'ディレクトリ名',
+ skillSlugPlaceholder: 'english-name-only',
+ skillSlugHelp:
+ 'スキルのディレクトリ名として使用します。英字、数字、ハイフン、アンダースコアのみ使用できます。',
+ skillDescription: 'スキルの説明',
+ skillInstructions: '指示内容',
+ saveSuccess: '保存しました',
+ saveError: '保存に失敗しました: ',
+ createSuccess: '作成しました',
+ createError: '作成に失敗しました: ',
+ deleteSuccess: '削除しました',
+ deleteError: '削除に失敗しました: ',
+ deleteConfirmation: 'このスキルを削除してもよろしいですか?',
+ delete: 'スキルを削除',
+ skillNameRequired: 'スキル名は必須です',
+ skillDescriptionRequired: 'スキルの説明は必須です',
+ packageRootRequired: 'パッケージルートパスは必須です',
+ scan: 'スキャン',
+ scanSuccess: 'ディレクトリをスキャンしました',
+ scanError: 'ディレクトリのスキャンに失敗しました: ',
+ noSkills: '設定済みのスキルはありません',
+ preview: 'プレビュー',
+ previewInstructions: 'SKILL.md 内容プレビュー',
+ instructionsPlaceholder: 'Markdown 形式でスキルの指示を入力...',
+ descriptionPlaceholder: 'このスキルの概要(LLM に表示されます)',
+ packageRoot: 'パッケージディレクトリ',
+ packageRootHelp:
+ '任意。既存のスキルディレクトリをインポートする場合のみ必要です。新規スキルでは空のままにしてください。スキャンは現在のディレクトリと最大 2 階層下まで確認します。',
+ importLocalDirectory: 'ローカルスキルディレクトリをインポート',
+ chooseSkillDirectory: 'SKILL.md のディレクトリを選択',
+ chooseAnotherDirectory: '別のディレクトリを選択',
+ importingDirectory: 'プレビュー中...',
+ clearDirectoryPreview: '選択したディレクトリをクリア',
+ noSkillMdInDirectory: '選択したディレクトリに SKILL.md が見つかりません',
+ multipleSkillMdInDirectory:
+ '選択したディレクトリに複数の SKILL.md があります。単一のスキルディレクトリを直接選択してください。',
+ importDirectoryError: 'ディレクトリのインポートに失敗しました: ',
+ advancedSettings: '詳細設定',
+ searchSkills: 'スキルを検索...',
+ selectSkills: 'スキルを選択',
+ addSkill: 'スキルを追加',
+ builtin: '組み込み',
+ importFromGithub: 'GitHub からスキルをインストール',
+ createManually: '手動で作成',
+ uploadZip: 'ZIP パッケージをアップロード',
+ uploadZipOnly: '.zip スキルパッケージのみ対応しています',
+ installSuccess: 'スキルをインストールしました',
+ installError: 'スキルのインストールに失敗しました: ',
+ enterRepoUrl: 'GitHub リポジトリ URL を入力',
+ repoUrlPlaceholder: '例: https://github.com/owner/repo',
+ fetchingReleases: 'リリースを取得中...',
+ selectRelease: 'リリースを選択',
+ noReleasesFound: 'リリースが見つかりません',
+ fetchReleasesError: 'リリースの取得に失敗しました: ',
+ selectAsset: 'インストールするファイルを選択',
+ sourceArchive: 'ソースコード (zip)',
+ noAssetsFound: 'このリリースにはインストール可能なファイルがありません',
+ fetchAssetsError: 'ファイルの取得に失敗しました: ',
+ backToReleases: 'リリースへ戻る',
+ backToRepoUrl: 'リポジトリ URL へ戻る',
+ backToAssets: 'ファイル一覧へ戻る',
+ releaseTag: 'タグ: {{tag}}',
+ publishedAt: '公開日時: {{date}}',
+ prerelease: 'プレリリース',
+ assetSize: 'サイズ: {{size}}',
+ confirmInstall: 'インストールを確認',
+ installing: 'スキルをインストール中...',
+ loading: '読み込み中...',
+ previewLoadError: 'プレビューの読み込みに失敗しました',
+ selectFromSidebar: 'サイドバーからスキルを選択してください',
+ dangerZone: '危険な操作',
+ dangerZoneDescription: '元に戻せない破壊的な操作',
+ files: 'ファイル',
+ noFiles: 'ファイルが見つかりません',
+ loadFilesError: 'ファイルの読み込みに失敗しました: ',
+ readFileError: 'ファイルの読み取りに失敗しました: ',
+ saveFile: 'ファイルを保存',
+ saveFileSuccess: 'ファイルを保存しました',
+ saveFileError: 'ファイルの保存に失敗しました: ',
+ },
wizard: {
sidebarDescription: 'ガイド付きステップでボットを作成',
loading: 'ウィザードを読み込み中...',
@@ -3015,10 +3098,6 @@ const jaJP = {
addMCPServerHint: 'MCPツールサーバー拡張を接続',
installFromGithub: 'GitHubからプラグインをインストール',
installFromGithubHint: 'GitHub Releaseからプラグイン拡張をインストール',
- createSkill: '新しいスキルを作成',
- createSkillHint: '新しいスキル拡張を手動で作成',
- unsupportedFileType:
- 'サポートされていないファイルタイプです。.zipと.lbpkgファイルのみサポートされています',
githubUrlHelp: 'GitHub URL を貼り付けてください',
githubUrlTooltip:
'プラグイン: リポジトリ、Release、Tag の URL を貼り付けます。スキル: スキルディレクトリ内の SKILL.md ページ URL を貼り付けます。',
@@ -3027,6 +3106,10 @@ const jaJP = {
githubUrlRequired: 'GitHub URL を入力してください',
previewSkill: 'スキルをプレビュー',
noSkillPreviewFound: 'インポート可能なスキルが見つかりません',
+ createSkill: '新しいスキルを作成',
+ createSkillHint: '新しいスキル拡張を手動で作成',
+ unsupportedFileType:
+ 'サポートされていないファイルタイプです。.zipと.lbpkgファイルのみサポートされています',
},
errorPage: {
unexpectedError: 'エラーが発生しました',
@@ -3103,97 +3186,5 @@ const jaJP = {
selectFromSidebar: 'サイドバーからプラグインページを選択してください',
invalidPage: '無効なプラグインページ',
},
- skills: {
- title: 'スキル',
- description: '会話中に有効化できるスキルを作成・管理します',
- createSkill: 'スキルを作成',
- createSkillDescription:
- 'ローカルディレクトリをインポートするか、情報を入力して作成します',
- editSkill: 'スキルを編集',
- getSkillListError: 'スキル一覧の取得に失敗しました: ',
- skillName: 'スキル名',
- displayName: 'スキル名',
- displayNamePlaceholder: '表示名(任意の言語に対応)',
- skillSlug: 'ディレクトリ名',
- skillSlugPlaceholder: 'english-name-only',
- skillSlugHelp:
- 'スキルのディレクトリ名として使用します。英字、数字、ハイフン、アンダースコアのみ使用できます。',
- skillDescription: 'スキルの説明',
- skillInstructions: '指示内容',
- saveSuccess: '保存しました',
- saveError: '保存に失敗しました: ',
- createSuccess: '作成しました',
- createError: '作成に失敗しました: ',
- deleteSuccess: '削除しました',
- deleteError: '削除に失敗しました: ',
- deleteConfirmation: 'このスキルを削除してもよろしいですか?',
- delete: 'スキルを削除',
- skillNameRequired: 'スキル名は必須です',
- skillDescriptionRequired: 'スキルの説明は必須です',
- packageRootRequired: 'パッケージルートパスは必須です',
- scan: 'スキャン',
- scanSuccess: 'ディレクトリをスキャンしました',
- scanError: 'ディレクトリのスキャンに失敗しました: ',
- noSkills: '設定済みのスキルはありません',
- preview: 'プレビュー',
- previewInstructions: 'SKILL.md 内容プレビュー',
- instructionsPlaceholder: 'Markdown 形式でスキルの指示を入力...',
- descriptionPlaceholder: 'このスキルの概要(LLM に表示されます)',
- packageRoot: 'パッケージディレクトリ',
- packageRootHelp:
- '任意。既存のスキルディレクトリをインポートする場合のみ必要です。新規スキルでは空のままにしてください。スキャンは現在のディレクトリと最大 2 階層下まで確認します。',
- importLocalDirectory: 'ローカルスキルディレクトリをインポート',
- chooseSkillDirectory: 'SKILL.md のディレクトリを選択',
- chooseAnotherDirectory: '別のディレクトリを選択',
- importingDirectory: 'プレビュー中...',
- clearDirectoryPreview: '選択したディレクトリをクリア',
- noSkillMdInDirectory: '選択したディレクトリに SKILL.md が見つかりません',
- multipleSkillMdInDirectory:
- '選択したディレクトリに複数の SKILL.md があります。単一のスキルディレクトリを直接選択してください。',
- importDirectoryError: 'ディレクトリのインポートに失敗しました: ',
- advancedSettings: '詳細設定',
- searchSkills: 'スキルを検索...',
- selectSkills: 'スキルを選択',
- addSkill: 'スキルを追加',
- builtin: '組み込み',
- importFromGithub: 'GitHub からスキルをインストール',
- createManually: '手動で作成',
- uploadZip: 'ZIP パッケージをアップロード',
- uploadZipOnly: '.zip スキルパッケージのみ対応しています',
- installSuccess: 'スキルをインストールしました',
- installError: 'スキルのインストールに失敗しました: ',
- enterRepoUrl: 'GitHub リポジトリ URL を入力',
- repoUrlPlaceholder: '例: https://github.com/owner/repo',
- fetchingReleases: 'リリースを取得中...',
- selectRelease: 'リリースを選択',
- noReleasesFound: 'リリースが見つかりません',
- fetchReleasesError: 'リリースの取得に失敗しました: ',
- selectAsset: 'インストールするファイルを選択',
- sourceArchive: 'ソースコード (zip)',
- noAssetsFound: 'このリリースにはインストール可能なファイルがありません',
- fetchAssetsError: 'ファイルの取得に失敗しました: ',
- backToReleases: 'リリースへ戻る',
- backToRepoUrl: 'リポジトリ URL へ戻る',
- backToAssets: 'ファイル一覧へ戻る',
- releaseTag: 'タグ: {{tag}}',
- publishedAt: '公開日時: {{date}}',
- prerelease: 'プレリリース',
- assetSize: 'サイズ: {{size}}',
- confirmInstall: 'インストールを確認',
- installing: 'スキルをインストール中...',
- loading: '読み込み中...',
- previewLoadError: 'プレビューの読み込みに失敗しました',
- selectFromSidebar: 'サイドバーからスキルを選択してください',
- dangerZone: '危険な操作',
- dangerZoneDescription: '元に戻せない破壊的な操作',
- files: 'ファイル',
- noFiles: 'ファイルが見つかりません',
- loadFilesError: 'ファイルの読み込みに失敗しました: ',
- readFileError: 'ファイルの読み取りに失敗しました: ',
- saveFile: 'ファイルを保存',
- saveFileSuccess: 'ファイルを保存しました',
- saveFileError: 'ファイルの保存に失敗しました: ',
- },
};
-
export default jaJP;
diff --git a/web/src/i18n/locales/ru-RU.ts b/web/src/i18n/locales/ru-RU.ts
index ddfbd8419..fd686b2a7 100644
--- a/web/src/i18n/locales/ru-RU.ts
+++ b/web/src/i18n/locales/ru-RU.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/ru-RU';
-
const ruRU = {
assistant: {
modelHint: 'Сменить модель ассистента для следующего сообщения',
@@ -96,83 +95,9 @@ const ruRU = {
},
},
},
-
guidedTour: {
eventDebugDescription:
'Выберите поддерживаемое событие, введите тестовые данные и проверьте вывод и результаты инструментов. Действия платформы имитируются; модели и другие инструменты выполняются согласно настройкам.',
-
- bot: {
- connection: {
- title: 'Выберите способ подключения',
- description:
- 'Выберите способ подключения, поддерживаемый адаптером. Его параметры обновятся автоматически.',
- },
- basic: {
- title: 'Задайте имя бота',
- description:
- 'Задайте понятное имя, чтобы находить подключение в маршрутах и журналах.',
- },
- adapter: {
- title: 'Выберите адаптер платформы',
- description:
- 'Выберите адаптер бота. Способ подключения и параметры платформы настраиваются после создания.',
- },
- parameters: {
- title: 'Настройте платформу',
- description:
- 'Введите учётные данные и параметры платформы. Настройки на стороне платформы описаны в документации адаптера.',
- action: 'Открыть документацию адаптера',
- },
- routing: {
- title: 'Настройте маршруты входящих событий',
- description:
- 'Выберите обработчик для каждого события, получаемого ботом.',
- },
- save: {
- title: 'Сохраните настройки бота',
- description:
- 'Проверьте параметры подключения и маршруты событий, затем сохраните настройки. После этого можно включить бота.',
- },
- submit: {
- title: 'Создайте бота',
- description:
- 'Создайте выключенного бота, затем настройте подключение и параметры платформы на его странице.',
- },
- },
- knowledge: {
- basic: {
- title: 'Опишите базу знаний',
- description:
- 'Задайте понятное имя и необязательное описание перед выбором движка хранения и поиска.',
- },
- engine: {
- title: 'Проверьте движок знаний',
- description:
- 'Проверьте движок этой базы знаний. Его параметры и настройки поиска задаются ниже.',
- action: 'Открыть магазин движков знаний',
- },
- parameters: {
- title: 'Настройте параметры движка',
- description:
- 'Заполните требуемые движком настройки хранения, модели, учётных данных или внешнего сервиса.',
- },
- retrieval: {
- title: 'Настройте поиск',
- description:
- 'Определите, как движок ищет и возвращает подходящий контент обработчикам.',
- },
- save: {
- title: 'Сохраните настройки базы знаний',
- description:
- 'Проверьте параметры движка и поиска, затем сохраните настройки.',
- },
- submit: {
- title: 'Создайте базу знаний',
- description:
- 'Создайте базу знаний, затем добавьте документы или подключите источники, поддерживаемые движком.',
- },
- },
-
pipeline: {
trigger: {
title: 'Выберите сообщения для ответа',
@@ -245,12 +170,50 @@ const ruRU = {
'После сохранения добавьте конфигурацию в раздел обработчиков плагинов на странице бота. Заявленные события поступают автоматически, без настройки отдельных маршрутов.',
},
},
+ previous: 'Назад',
label: 'Руководство',
progress: 'Шаг {{current}} из {{total}}',
- previous: 'Назад',
next: 'Далее',
finish: 'Завершить руководство',
skip: 'Пропустить',
+ bot: {
+ connection: {
+ title: 'Выберите способ подключения',
+ description:
+ 'Выберите способ подключения, поддерживаемый адаптером. Его параметры обновятся автоматически.',
+ },
+ basic: {
+ title: 'Задайте имя бота',
+ description:
+ 'Задайте понятное имя, чтобы находить подключение в маршрутах и журналах.',
+ },
+ adapter: {
+ title: 'Выберите адаптер платформы',
+ description:
+ 'Выберите адаптер бота. Способ подключения и параметры платформы настраиваются после создания.',
+ },
+ parameters: {
+ title: 'Настройте платформу',
+ description:
+ 'Введите учётные данные и параметры платформы. Настройки на стороне платформы описаны в документации адаптера.',
+ action: 'Открыть документацию адаптера',
+ },
+ routing: {
+ title: 'Настройте маршруты входящих событий',
+ description:
+ 'Выберите обработчик для каждого события, получаемого ботом.',
+ },
+ save: {
+ title: 'Сохраните настройки бота',
+ description:
+ 'Проверьте параметры подключения и маршруты событий, затем сохраните настройки. После этого можно включить бота.',
+ },
+ submit: {
+ title: 'Создайте бота',
+ description:
+ 'Создайте выключенного бота, затем настройте подключение и параметры платформы на его странице.',
+ },
+ },
processorCreate: {
type: {
title: 'Выберите тип обработчика',
@@ -289,6 +252,39 @@ const ruRU = {
'Откройте вкладку событий и инструментов, чтобы выбрать события для агента и разрешённые инструменты платформы или LangBot.',
},
},
+ knowledge: {
+ basic: {
+ title: 'Опишите базу знаний',
+ description:
+ 'Задайте понятное имя и необязательное описание перед выбором движка хранения и поиска.',
+ },
+ engine: {
+ title: 'Проверьте движок знаний',
+ description:
+ 'Проверьте движок этой базы знаний. Его параметры и настройки поиска задаются ниже.',
+ action: 'Открыть магазин движков знаний',
+ },
+ parameters: {
+ title: 'Настройте параметры движка',
+ description:
+ 'Заполните требуемые движком настройки хранения, модели, учётных данных или внешнего сервиса.',
+ },
+ retrieval: {
+ title: 'Настройте поиск',
+ description:
+ 'Определите, как движок ищет и возвращает подходящий контент обработчикам.',
+ },
+ save: {
+ title: 'Сохраните настройки базы знаний',
+ description:
+ 'Проверьте параметры движка и поиска, затем сохраните настройки.',
+ },
+ submit: {
+ title: 'Создайте базу знаний',
+ description:
+ 'Создайте базу знаний, затем добавьте документы или подключите источники, поддерживаемые движком.',
+ },
+ },
},
pipelineMigration,
sidebar: {
@@ -307,15 +303,9 @@ const ruRU = {
editionCloud: 'Cloud',
},
common: {
- loadFailed: 'Не удалось загрузить. Попробуйте ещё раз.',
- showSecret: 'Показать секрет',
- hideSecret: 'Скрыть секрет',
- editBasicInfo: 'Изменить основные сведения',
- editBasicInfoDescription: 'Измените имя, описание и значок.',
- editBasicInfoDescriptionNoIcon: 'Измените имя и описание.',
- management: 'Управление',
-
customValue: 'Свой вариант',
+ loadFailed: 'Не удалось загрузить. Попробуйте ещё раз.',
+ search: 'Поиск',
login: 'Войти',
logout: 'Выйти',
accountOptions: 'Настройки',
@@ -331,6 +321,8 @@ const ruRU = {
loginLoadErrorDesc:
'Не удалось подключиться к серверу LangBot. Убедитесь, что сервис запущен, и повторите попытку.',
retry: 'Повторить',
+ showSecret: 'Показать секрет',
+ hideSecret: 'Скрыть секрет',
enterEmail: 'Введите адрес электронной почты',
enterPassword: 'Введите пароль',
invalidEmail: 'Пожалуйста, введите корректный адрес электронной почты',
@@ -342,6 +334,10 @@ const ruRU = {
joinDiscord: 'Присоединиться к Discord',
create: 'Создать',
edit: 'Редактировать',
+ editBasicInfo: 'Изменить основные сведения',
+ editBasicInfoDescription: 'Измените имя, описание и значок.',
+ editBasicInfoDescriptionNoIcon: 'Измените имя и описание.',
+ management: 'Управление',
delete: 'Удалить',
add: 'Добавить',
select: 'Выбрать',
@@ -376,6 +372,7 @@ const ruRU = {
test: 'Тест',
forgotPassword: 'Забыли пароль?',
agreementNotice: 'Продолжая, вы соглашаетесь с нашей',
+ termsOfService: 'Условия обслуживания',
privacyPolicy: 'Политикой конфиденциальности',
and: 'и',
dataCollectionPolicy: 'Политикой сбора данных',
@@ -489,13 +486,11 @@ const ruRU = {
actions: 'Действия',
apiKeyCreatedMessage:
'Пожалуйста, скопируйте этот API-ключ. Если кнопка не работает, скопируйте вручную.',
+ apiKeyStoredSecurely: 'Secret shown only when created',
none: 'Нет',
more: 'Ещё ({{count}})',
less: 'Свернуть',
noItems: 'Нет элементов',
- termsOfService: 'Условия обслуживания',
-
- apiKeyStoredSecurely: 'Secret shown only when created',
},
notFound: {
title: 'Страница не найдена',
@@ -655,6 +650,10 @@ const ruRU = {
loginWithSpace: 'Войти с аккаунтом LangBot',
loginToUseModels:
'Войдите с аккаунтом LangBot, чтобы использовать облачные модели',
+ ownerMustBindSpace:
+ 'The Workspace owner must connect a LangBot Account for LangBot Models.',
+ usesOwnerSpaceBilling:
+ "Uses the Workspace owner's LangBot Account billing and credits.",
noModels: 'Модели не настроены',
availability: {
available: 'Доступна при последней проверке',
@@ -708,13 +707,44 @@ const ruRU = {
fallbackList: 'Резервные модели',
addFallback: 'Добавить резервную модель',
},
-
- ownerMustBindSpace:
- 'The Workspace owner must connect a LangBot Account for LangBot Models.',
- usesOwnerSpaceBilling:
- "Uses the Workspace owner's LangBot Account billing and credits.",
},
bots: {
+ pluginSubscriptions: {
+ incompleteEvents:
+ 'Этот бот поддерживает только часть отслеживаемых событий ({{events}}). Обработчик может работать не во всех случаях так, как ожидается.',
+ description:
+ 'Автоматически получает события, объявленные плагином, независимо от маршрутов выше.',
+ empty: 'Обработчики плагинов не привязаны.',
+ add: 'Добавить обработчик плагина',
+ existing: 'Выбрать конфигурацию',
+ new: 'Новая конфигурация',
+ noExisting: 'Нет доступных конфигураций. Создайте новую.',
+ shared:
+ 'Боты с общей конфигурацией используют общие настройки и состояние выполнения.',
+ saveHint: 'Сохраните бота, чтобы активировать привязку.',
+ createAndBind: 'Создать и привязать',
+ created: 'Конфигурация создана. Сохраните бота для активации привязки.',
+ enable: 'Включить {{name}}',
+ remove: 'Отвязать {{name}}',
+ configure: 'Настроить',
+ logs: 'Журнал',
+ },
+ applyFailed: 'Настройки сохранены, но не применены',
+ internalErrorHint:
+ 'Внутренняя ошибка. Проверьте журналы сервера по указанному идентификатору.',
+ errorReference: 'Идентификатор ошибки: {{id}}',
+ title: 'Боты',
+ description:
+ 'Создание и управление ботами — точками входа LangBot для подключения к различным платформам',
+ createBot: 'Создать бота',
+ selectFromSidebar: 'Выберите бота из боковой панели',
+ editBot: 'Редактировать бота',
+ getBotListError: 'Не удалось получить список ботов: ',
+ botName: 'Имя бота',
+ botDescription: 'Описание бота',
+ botNameRequired: 'Имя бота не может быть пустым',
+ botDescriptionRequired: 'Описание бота не может быть пустым',
+ adapterRequired: 'Адаптер не может быть пустым',
connectionMode: 'Способ подключения',
connectionModeDescription:
'Выберите способ подключения, поддерживаемый адаптером.',
@@ -726,6 +756,44 @@ const ruRU = {
'LangBot поддерживает исходящее сокетное или потоковое соединение.',
noAdaptersForConnectionMode:
'Ни один установленный адаптер не поддерживает этот способ подключения.',
+ defaultDescription: 'Бот',
+ getBotConfigError: 'Не удалось получить конфигурацию бота: ',
+ saveSuccess: 'Успешно сохранено',
+ saveError: 'Ошибка сохранения: ',
+ createSuccess: 'Успешно создано. Настройте маршрутизацию событий',
+ createError: 'Ошибка создания: ',
+ deleteSuccess: 'Успешно удалено',
+ deleteError: 'Ошибка удаления: ',
+ deleteConfirmation: 'Вы уверены, что хотите удалить этого бота?',
+ platformAdapter: 'Выбор платформы/адаптера',
+ selectAdapter: 'Выберите адаптер',
+ legacyAdapters: 'Устаревшие адаптеры',
+ legacyAdapterBadge: 'Устаревший',
+ legacyAdaptersHint:
+ 'У этих адаптеров есть новые событийные версии.\nОни сохранены только для существующих конфигураций и не рекомендуются для новых ботов.',
+ adapterConfig: 'Настройка адаптера',
+ viewAdapterDocs: 'Документация',
+ bindPipeline: 'Привязать конвейер',
+ selectPipeline: 'Выберите конвейер',
+ selectBot: 'Выберите бота',
+ botLogTitle: 'Журнал бота',
+ enableAutoRefresh: 'Автообновление',
+ session: 'Сессия',
+ yesterday: 'Вчера',
+ earlier: 'Ранее',
+ dateFormat: '{{day}}.{{month}}',
+ setBotEnableError: 'Не удалось изменить статус бота',
+ log: 'Журнал',
+ configuration: 'Настройки',
+ logs: 'Журналы',
+ basicInfo: 'Основная информация',
+ basicInfoDescription: 'Задайте имя и описание бота',
+ routingConnection: 'Маршрутизация и подключение',
+ routingConnectionDescription:
+ 'Привяжите конвейер, обрабатывающий сообщения для этого бота',
+ eventRouting: 'Маршрутизация событий',
+ eventRoutingDescription:
+ 'Выберите обработчик для каждого события бота. Изменяйте логику в настройках соответствующего Agent или Pipeline. Pipeline поддерживает только события сообщений.',
eventBindings: 'Маршруты событий',
addEventBinding: 'Добавить маршрут',
addBehavior: 'Добавить поведение',
@@ -788,6 +856,7 @@ const ruRU = {
routeFallbackIgnored:
'События без подходящего маршрута игнорируются. Добавляйте общий маршрут, только если каждое событие требует явного результата.',
testRoute: 'Проверить маршрут',
+ adapterEventDebugAction: 'Тест прослушивания',
adapterEventDebugTitle: 'Отладка событий платформы',
adapterEventDebugDescription:
'Вызовите событие в {{platform}}. Оно появится здесь после получения адаптером.',
@@ -870,6 +939,25 @@ const ruRU = {
dryRunDiagnosticMatched: '{{route}} соответствует. {{reason}}',
dryRunDiagnosticSkipped: '{{route}} пропущен. {{reason}}',
eventCustom: 'Пользовательское событие',
+ eventWildcard: 'Все события',
+ eventNamespaceWildcard: '{{namespace}}.*',
+ eventNames: {
+ message_received: 'Получено сообщение',
+ message_edited: 'Сообщение изменено',
+ message_deleted: 'Сообщение удалено',
+ message_reaction: 'Реакция на сообщение',
+ feedback_received: 'Получен отзыв',
+ friend_request_received: 'Получен запрос в друзья',
+ friend_added: 'Друг добавлен',
+ group_member_joined: 'Участник вступил в группу',
+ group_member_left: 'Участник покинул группу',
+ group_member_banned: 'Участник заблокирован',
+ bot_invited_to_group: 'Бот приглашён в группу',
+ bot_removed_from_group: 'Бот удалён из группы',
+ bot_muted: 'Боту запрещено отправлять сообщения',
+ bot_unmuted: 'Боту разрешено отправлять сообщения',
+ platform_specific: 'Событие конкретной платформы',
+ },
eventDescriptions: {
all: 'Соответствует всем событиям, полученным адаптером.',
namespace: 'Соответствует всем событиям {{group}}.',
@@ -921,102 +1009,6 @@ const ruRU = {
operator_not_contains: 'не содержит',
operator_starts_with: 'начинается с',
operator_regex: 'регулярное выражение',
-
- eventWildcard: 'Все события',
- eventNamespaceWildcard: '{{namespace}}.*',
- eventNames: {
- message_received: 'Получено сообщение',
- message_edited: 'Сообщение изменено',
- message_deleted: 'Сообщение удалено',
- message_reaction: 'Реакция на сообщение',
- feedback_received: 'Получен отзыв',
- friend_request_received: 'Получен запрос в друзья',
- friend_added: 'Друг добавлен',
- group_member_joined: 'Участник вступил в группу',
- group_member_left: 'Участник покинул группу',
- group_member_banned: 'Участник заблокирован',
- bot_invited_to_group: 'Бот приглашён в группу',
- bot_removed_from_group: 'Бот удалён из группы',
- bot_muted: 'Боту запрещено отправлять сообщения',
- bot_unmuted: 'Боту разрешено отправлять сообщения',
- platform_specific: 'Событие конкретной платформы',
- },
- pluginSubscriptions: {
- incompleteEvents:
- 'Этот бот поддерживает только часть отслеживаемых событий ({{events}}). Обработчик может работать не во всех случаях так, как ожидается.',
- description:
- 'Автоматически получает события, объявленные плагином, независимо от маршрутов выше.',
- empty: 'Обработчики плагинов не привязаны.',
- add: 'Добавить обработчик плагина',
- existing: 'Выбрать конфигурацию',
- new: 'Новая конфигурация',
- noExisting: 'Нет доступных конфигураций. Создайте новую.',
- shared:
- 'Боты с общей конфигурацией используют общие настройки и состояние выполнения.',
- saveHint: 'Сохраните бота, чтобы активировать привязку.',
- createAndBind: 'Создать и привязать',
- created: 'Конфигурация создана. Сохраните бота для активации привязки.',
- enable: 'Включить {{name}}',
- remove: 'Отвязать {{name}}',
- configure: 'Настроить',
- logs: 'Журнал',
- },
- applyFailed: 'Настройки сохранены, но не применены',
- internalErrorHint:
- 'Внутренняя ошибка. Проверьте журналы сервера по указанному идентификатору.',
- errorReference: 'Идентификатор ошибки: {{id}}',
-
- adapterEventDebugAction: 'Тест прослушивания',
- title: 'Боты',
- description:
- 'Создание и управление ботами — точками входа LangBot для подключения к различным платформам',
- createBot: 'Создать бота',
- selectFromSidebar: 'Выберите бота из боковой панели',
- editBot: 'Редактировать бота',
- getBotListError: 'Не удалось получить список ботов: ',
- botName: 'Имя бота',
- botDescription: 'Описание бота',
- botNameRequired: 'Имя бота не может быть пустым',
- botDescriptionRequired: 'Описание бота не может быть пустым',
- adapterRequired: 'Адаптер не может быть пустым',
- defaultDescription: 'Бот',
- getBotConfigError: 'Не удалось получить конфигурацию бота: ',
- saveSuccess: 'Успешно сохранено',
- saveError: 'Ошибка сохранения: ',
- createSuccess: 'Успешно создано. Настройте маршрутизацию событий',
- createError: 'Ошибка создания: ',
- deleteSuccess: 'Успешно удалено',
- deleteError: 'Ошибка удаления: ',
- deleteConfirmation: 'Вы уверены, что хотите удалить этого бота?',
- platformAdapter: 'Выбор платформы/адаптера',
- selectAdapter: 'Выберите адаптер',
- legacyAdapters: 'Устаревшие адаптеры',
- legacyAdapterBadge: 'Устаревший',
- legacyAdaptersHint:
- 'У этих адаптеров есть новые событийные версии.\nОни сохранены только для существующих конфигураций и не рекомендуются для новых ботов.',
- adapterConfig: 'Настройка адаптера',
- viewAdapterDocs: 'Документация',
- bindPipeline: 'Привязать конвейер',
- selectPipeline: 'Выберите конвейер',
- selectBot: 'Выберите бота',
- botLogTitle: 'Журнал бота',
- enableAutoRefresh: 'Автообновление',
- session: 'Сессия',
- yesterday: 'Вчера',
- earlier: 'Ранее',
- dateFormat: '{{day}}.{{month}}',
- setBotEnableError: 'Не удалось изменить статус бота',
- log: 'Журнал',
- configuration: 'Настройки',
- logs: 'Журналы',
- basicInfo: 'Основная информация',
- basicInfoDescription: 'Задайте имя и описание бота',
- routingConnection: 'Маршрутизация и подключение',
- routingConnectionDescription:
- 'Привяжите конвейер, обрабатывающий сообщения для этого бота',
- eventRouting: 'Маршрутизация событий',
- eventRoutingDescription:
- 'Выберите обработчик для каждого события бота. Изменяйте логику в настройках соответствующего Agent или Pipeline. Pipeline поддерживает только события сообщений.',
routingRules: 'Правила условной маршрутизации',
routingRulesDescription:
'Правила проверяются по порядку; первое совпадение направляет в соответствующий конвейер. При отсутствии совпадений используется конвейер по умолчанию.',
@@ -1101,6 +1093,10 @@ const ruRU = {
discarded: 'Отклонена',
userMessage: 'Пользователь',
botMessage: 'Ассистент',
+ totalSessions: 'Сеансов: {{count}}',
+ userSearch: 'ID или имя пользователя',
+ startDate: 'Дата начала',
+ endDate: 'Дата окончания',
},
admins: {
title: 'Admins',
@@ -1118,12 +1114,117 @@ const ruRU = {
deleteError: 'Failed to remove admin: ',
noAdmins: 'No admins configured',
setAdminTitle: 'Set as admin',
- removeAdminTitle: 'Remove admin',
adminBadge: 'Admin',
configureAdmins: 'Manage Admins',
+ removeAdminTitle: 'Remove admin',
},
},
agents: {
+ monitoring: {
+ description:
+ 'Просмотр события, ответа модели и вызовов инструментов для каждой задачи.',
+ empty:
+ 'Запусков пока нет. Вызовите событие платформы или запустите отладку.',
+ input: 'Входные данные',
+ eventData: 'Данные события',
+ execution: 'Ход выполнения',
+ rawEvents: 'Исходные события',
+ inputUnavailable: 'Входные данные этого запуска не записаны.',
+ },
+ eventProcessor: {
+ configurations: 'Конфигурации обработчиков плагинов',
+ configTab: 'Настройки',
+ logsTab: 'Журнал',
+ noSettings: 'Этот обработчик плагина не требует настройки.',
+ createPageTitle: 'Создать обработчик событий',
+ processWithPlugin: 'Обработка кодом плагина',
+ pluginSettings: 'Настройки плагина',
+ pluginSettingsDescription: 'Параметры, объявленные этим плагином.',
+ selectToDebug: 'Выберите плагин выше, чтобы начать отладку.',
+ debugOutput: 'Вывод обработчика',
+ debugDescription:
+ 'Входные события, журналы плагина и результаты действий этой проверки.',
+ debugNotice:
+ 'Плагин обрабатывает тестовое событие. Действия платформы используют Mock и не отправляют реальные сообщения; остальные инструменты работают согласно настройкам.',
+ create: 'Создать обработчик плагина',
+ type: 'Обработчик плагина',
+ description: 'Обрабатывает события с помощью кода и логики плагина.',
+ component: 'Обработчик плагина',
+ selectComponent: 'Выберите обработчик плагина',
+ unavailable: 'Компонент недоступен',
+ noComponents: 'Плагины с обработчиками не установлены.',
+ installPlugin: 'Установить плагин',
+ loadError: 'Не удалось загрузить данные.',
+ refresh: 'Обновить',
+ runs: 'Запуски',
+ noRuns: 'Запусков пока нет. Привяжите обработчик к боту.',
+ bindBot: 'Привязать к боту',
+ trace: 'Журнал и поток сообщений',
+ selectRun: 'Выберите запуск для просмотра.',
+ input: 'Входящее событие',
+ destination: 'Получатель',
+ loadMore: 'Загрузить ещё',
+ activation:
+ 'Установите плагин, создайте конфигурацию обработчика и привяжите бота.',
+ status_timeout: 'Время истекло',
+ status_pending: 'Ожидание',
+ status_running: 'Выполняется',
+ status_completed: 'Завершено',
+ status_failed: 'Ошибка',
+ status_cancelled: 'Отменено',
+ status_queued: 'В очереди',
+ trace_run_completed: 'Выполнение завершено',
+ trace_run_failed: 'Ошибка выполнения',
+ trace_tool_call_started: 'Действие начато',
+ trace_tool_call_completed: 'Результат действия',
+ },
+ debugData: {
+ chatId: 'ID чата',
+ feedbackType: 'Тип отзыва (1: нравится, 2: не нравится, 3: отмена)',
+ title: 'Данные события',
+ form: 'Основные поля',
+ json: 'Полный JSON',
+ groupId: 'ID группы',
+ memberId: 'ID участника',
+ memberName: 'Имя участника',
+ userId: 'ID пользователя',
+ userName: 'Имя пользователя',
+ requesterId: 'ID заявителя',
+ requesterName: 'Имя заявителя',
+ messageId: 'ID сообщения',
+ duration: 'Длительность (секунды)',
+ message: 'Текст сообщения',
+ newMessage: 'Новый текст',
+ verificationMessage: 'Текст заявки',
+ reaction: 'Реакция',
+ groupName: 'Название группы',
+ feedback: 'Отзыв',
+ rating: 'Оценка',
+ eventName: 'Название события',
+ privateChat: 'Пусто для личного чата',
+ sampleUser: 'Тестовый пользователь',
+ sampleMessage: 'Привет',
+ sampleFeedback: 'Очень полезно',
+ invalidField: 'Проверьте {{field}}',
+ },
+ title: 'Обработчики',
+ description:
+ 'Создавайте переиспользуемые обработчики и используйте их в маршрутизации событий бота',
+ create: 'Создать обработчик',
+ editAgent: 'Редактировать Agent',
+ selectFromSidebar: 'Выберите обработчик на боковой панели',
+ agentType: 'Agent',
+ agentTypeDescription:
+ 'Используйте runner для обработки сообщений, участников групп, друзей, обратной связи и других событий платформы.',
+ pipelineType: 'Конвейер',
+ kindBadgeAgent: 'Agent',
+ kindBadgePipeline: 'Pipeline',
+ groupByKind: 'Группировать по типу',
+ groupByKindShort: 'Группа',
+ pipelineTypeDescription:
+ 'Работает по заданному процессу: получить сообщение, вызвать AI и ответить пользователю. Поддерживает настройку баз знаний и плагинов; обрабатывает только события сообщений и подходит для задач с четкими шагами и контролем обработки.',
+ allEvents: 'Поддерживает все события',
+ messageEventsOnly: 'Только события сообщений',
chooseType: 'Выберите способ работы',
chooseTypeDescription:
'Сначала выберите тип обработчика. Остальные настройки доступны после создания.',
@@ -1149,9 +1250,16 @@ const ruRU = {
diagramAI: 'ИИ',
diagramPostprocess: 'Обработка результата',
diagramOutput: 'Вывод',
+ basicInfo: 'Основная информация',
+ basicInfoDescription: 'Задайте имя, иконку и описание',
+ runnerSettings: 'Runner',
+ advanced: 'Дополнительно',
eventsAndTools: 'События и инструменты',
eventsAndToolsDescription:
'Задайте события запуска и доступные инструменты.',
+ bindableEvents: 'Диапазон привязываемых событий',
+ bindableEventsDescription:
+ 'Ограничьте, какие маршруты событий бота могут выбирать этот Agent. Обычно достаточно значения по умолчанию.',
configuredEvents: 'Добавленные события',
configuredEventsCount: 'Всего: {{count}}',
addEvent: 'Добавить событие',
@@ -1201,6 +1309,26 @@ const ruRU = {
write: 'Действие',
dangerous: 'Чувствительное',
},
+ supportedEvents: 'Диапазон событий',
+ supportedEventsDescription:
+ 'Выберите все события, группу или отдельные события. В маршрутах бота этот Agent будет доступен только для подходящих событий.',
+ searchEvents: 'Поиск событий…',
+ noEventsFound: 'Подходящие события не найдены',
+ nameRequired: 'Имя не может быть пустым',
+ createSuccess: 'Успешно создано',
+ createError: 'Ошибка создания: ',
+ loadError: 'Ошибка загрузки: ',
+ saveSuccess: 'Успешно сохранено',
+ saveError: 'Ошибка сохранения: ',
+ deleteSuccess: 'Успешно удалено',
+ deleteError: 'Ошибка удаления: ',
+ deleteConfirmation: 'Вы уверены, что хотите удалить этот Agent?',
+ dangerZone: 'Опасная зона',
+ dangerZoneDescription: 'Необратимые и деструктивные действия',
+ deleteAgentAction: 'Удалить этот Agent',
+ deleteAgentHint:
+ 'После удаления события, привязанные к ней, больше не смогут выполняться.',
+ noRunnerMetadata: 'Метаданные Runner в данный момент недоступны.',
runnerStatusLoading: 'Проверка состояния исполнителя',
runnerStatusCheckFailed: 'Не удалось проверить состояние исполнителя',
runnerStatusCheckFailedDescription:
@@ -1298,142 +1426,6 @@ const ruRU = {
debugReviewRunnerConfig: 'Проверить настройки исполнителя',
debugErrorDetails: 'Показать подробности ошибки',
debugRunFailed: 'Ошибка отладки Agent',
-
- monitoring: {
- description:
- 'Просмотр события, ответа модели и вызовов инструментов для каждой задачи.',
- empty:
- 'Запусков пока нет. Вызовите событие платформы или запустите отладку.',
- input: 'Входные данные',
- eventData: 'Данные события',
- execution: 'Ход выполнения',
- rawEvents: 'Исходные события',
- inputUnavailable: 'Входные данные этого запуска не записаны.',
- },
- eventProcessor: {
- configurations: 'Конфигурации обработчиков плагинов',
- configTab: 'Настройки',
- logsTab: 'Журнал',
- noSettings: 'Этот обработчик плагина не требует настройки.',
- createPageTitle: 'Создать обработчик событий',
- processWithPlugin: 'Обработка кодом плагина',
- pluginSettings: 'Настройки плагина',
- pluginSettingsDescription: 'Параметры, объявленные этим плагином.',
- selectToDebug: 'Выберите плагин выше, чтобы начать отладку.',
-
- debugOutput: 'Вывод обработчика',
- debugDescription:
- 'Входные события, журналы плагина и результаты действий этой проверки.',
- debugNotice:
- 'Плагин обрабатывает тестовое событие. Действия платформы используют Mock и не отправляют реальные сообщения; остальные инструменты работают согласно настройкам.',
-
- create: 'Создать обработчик плагина',
- type: 'Обработчик плагина',
- description: 'Обрабатывает события с помощью кода и логики плагина.',
- component: 'Обработчик плагина',
- selectComponent: 'Выберите обработчик плагина',
- unavailable: 'Компонент недоступен',
- noComponents: 'Плагины с обработчиками не установлены.',
- installPlugin: 'Установить плагин',
- loadError: 'Не удалось загрузить данные.',
- refresh: 'Обновить',
- runs: 'Запуски',
- noRuns: 'Запусков пока нет. Привяжите обработчик к боту.',
- bindBot: 'Привязать к боту',
- trace: 'Журнал и поток сообщений',
- selectRun: 'Выберите запуск для просмотра.',
- input: 'Входящее событие',
- destination: 'Получатель',
- loadMore: 'Загрузить ещё',
- activation:
- 'Установите плагин, создайте конфигурацию обработчика и привяжите бота.',
- status_timeout: 'Время истекло',
- status_pending: 'Ожидание',
- status_running: 'Выполняется',
- status_completed: 'Завершено',
- status_failed: 'Ошибка',
- status_cancelled: 'Отменено',
- status_queued: 'В очереди',
- trace_run_completed: 'Выполнение завершено',
- trace_run_failed: 'Ошибка выполнения',
- trace_tool_call_started: 'Действие начато',
- trace_tool_call_completed: 'Результат действия',
- },
- debugData: {
- chatId: 'ID чата',
- feedbackType: 'Тип отзыва (1: нравится, 2: не нравится, 3: отмена)',
-
- title: 'Данные события',
- form: 'Основные поля',
- json: 'Полный JSON',
- groupId: 'ID группы',
- memberId: 'ID участника',
- memberName: 'Имя участника',
- userId: 'ID пользователя',
- userName: 'Имя пользователя',
- requesterId: 'ID заявителя',
- requesterName: 'Имя заявителя',
- messageId: 'ID сообщения',
- duration: 'Длительность (секунды)',
- message: 'Текст сообщения',
- newMessage: 'Новый текст',
- verificationMessage: 'Текст заявки',
- reaction: 'Реакция',
- groupName: 'Название группы',
- feedback: 'Отзыв',
- rating: 'Оценка',
- eventName: 'Название события',
- privateChat: 'Пусто для личного чата',
- sampleUser: 'Тестовый пользователь',
- sampleMessage: 'Привет',
- sampleFeedback: 'Очень полезно',
- invalidField: 'Проверьте {{field}}',
- },
- title: 'Обработчики',
- description:
- 'Создавайте переиспользуемые обработчики и используйте их в маршрутизации событий бота',
- create: 'Создать обработчик',
- editAgent: 'Редактировать Agent',
- selectFromSidebar: 'Выберите обработчик на боковой панели',
- agentType: 'Agent',
- agentTypeDescription:
- 'Используйте runner для обработки сообщений, участников групп, друзей, обратной связи и других событий платформы.',
- pipelineType: 'Конвейер',
- kindBadgeAgent: 'Agent',
- kindBadgePipeline: 'Pipeline',
- groupByKind: 'Группировать по типу',
- groupByKindShort: 'Группа',
- pipelineTypeDescription:
- 'Работает по заданному процессу: получить сообщение, вызвать AI и ответить пользователю. Поддерживает настройку баз знаний и плагинов; обрабатывает только события сообщений и подходит для задач с четкими шагами и контролем обработки.',
- allEvents: 'Поддерживает все события',
- messageEventsOnly: 'Только события сообщений',
- basicInfo: 'Основная информация',
- basicInfoDescription: 'Задайте имя, иконку и описание',
- runnerSettings: 'Runner',
- advanced: 'Дополнительно',
- bindableEvents: 'Диапазон привязываемых событий',
- bindableEventsDescription:
- 'Ограничьте, какие маршруты событий бота могут выбирать этот Agent. Обычно достаточно значения по умолчанию.',
- supportedEvents: 'Диапазон событий',
- supportedEventsDescription:
- 'Выберите все события, группу или отдельные события. В маршрутах бота этот Agent будет доступен только для подходящих событий.',
- searchEvents: 'Поиск событий…',
- noEventsFound: 'Подходящие события не найдены',
- nameRequired: 'Имя не может быть пустым',
- createSuccess: 'Успешно создано',
- createError: 'Ошибка создания: ',
- loadError: 'Ошибка загрузки: ',
- saveSuccess: 'Успешно сохранено',
- saveError: 'Ошибка сохранения: ',
- deleteSuccess: 'Успешно удалено',
- deleteError: 'Ошибка удаления: ',
- deleteConfirmation: 'Вы уверены, что хотите удалить этот Agent?',
- dangerZone: 'Опасная зона',
- dangerZoneDescription: 'Необратимые и деструктивные действия',
- deleteAgentAction: 'Удалить этот Agent',
- deleteAgentHint:
- 'После удаления события, привязанные к ней, больше не смогут выполняться.',
- noRunnerMetadata: 'Метаданные Runner в данный момент недоступны.',
},
plugins: {
title: 'Расширения',
@@ -1552,6 +1544,7 @@ const ruRU = {
components: 'Компоненты',
ready: 'Пакет плагина распакован. Подтвердите, чтобы начать установку.',
},
+ uploadPluginOnly: 'Поддерживаются только пакеты плагинов .lbpkg',
dragToUpload: 'Перетащите файл плагина сюда для загрузки',
unsupportedFileType:
'Неподдерживаемый тип файла, поддерживаются только файлы .lbpkg и .zip',
@@ -1621,18 +1614,19 @@ const ruRU = {
installFromGithubDesc: 'Установить плагин из GitHub Release',
goToMarketplace: 'Перейти в маркетплейс',
installProgress: {
+ title: 'Установка {{name}}',
updateTitle: 'Обновление {{name}}',
+ titleGeneric: 'Установка плагина',
+ titlePlugin: 'Установка плагина {{name}}',
+ titleMCP: 'Установка сервера MCP {{name}}',
+ titleSkill: 'Установка навыка {{name}}',
+ overallProgress: 'Общий прогресс',
checkingUpdate: 'Проверка обновлений',
+ downloading: 'Загрузка плагина',
validating: 'Проверка пакета',
+ installingDeps: 'Установка зависимостей',
applyingUpdate: 'Применение обновления',
activating: 'Запуск и обновление компонентов',
- updateComplete: 'Плагин успешно обновлён',
-
- title: 'Установка {{name}}',
- titleGeneric: 'Установка плагина',
- overallProgress: 'Общий прогресс',
- downloading: 'Загрузка плагина',
- installingDeps: 'Установка зависимостей',
initializing: 'Инициализация настроек',
launching: 'Запуск плагина',
completed: 'Завершено',
@@ -1642,26 +1636,22 @@ const ruRU = {
depsProgress:
'{{installed}}/{{total}} установлено · {{remaining}} осталось',
installComplete: 'Плагин успешно установлен',
+ updateComplete: 'Плагин успешно обновлён',
+ installCompletePlugin: 'Плагин успешно установлен',
+ installCompleteMCP: 'Сервер MCP успешно установлен',
+ installCompleteSkill: 'Навык успешно установлен',
dismiss: 'Закрыть',
background: 'В фоновом режиме',
taskQueue: 'Задачи установки',
clearCompleted: 'Очистить завершённые',
noTasks: 'Нет задач установки',
- titlePlugin: 'Установка плагина {{name}}',
- titleMCP: 'Установка сервера MCP {{name}}',
- titleSkill: 'Установка навыка {{name}}',
- installCompletePlugin: 'Плагин успешно установлен',
- installCompleteMCP: 'Сервер MCP успешно установлен',
- installCompleteSkill: 'Навык успешно установлен',
},
- uploadPluginOnly: 'Поддерживаются только пакеты плагинов .lbpkg',
},
market: {
runnerUsage: 'Назначение исполнителя',
runnerUsageAll: 'Все',
runnerUsageAgent: 'Agent / Конвейер',
runnerUsageEvent: 'Обработчик плагина',
-
searchPlaceholder: 'Поиск плагинов...',
searchPlaceholderCount:
'Поиск среди {{count}} расширений, возможностей или сценариев...',
@@ -1674,6 +1664,10 @@ const ruRU = {
allLoaded: 'Все плагины отображены',
allLoadedCount: 'Показаны все {{count}} расширений',
install: 'Установить',
+ installCard: 'Установить {{name}}',
+ installedCard: '{{name}} установлен',
+ installed: 'Установлено',
+ updateAvailable: 'Доступно обновление',
installConfirm:
'Вы уверены, что хотите установить плагин "{{name}}" ({{version}})?',
downloadComplete: 'Плагин "{{name}}" загружен',
@@ -1752,10 +1746,6 @@ const ruRU = {
clearAll: 'Очистить всё',
noTags: 'Нет доступных тегов',
},
- installCard: 'Установить {{name}}',
- installedCard: '{{name}} установлен',
- installed: 'Установлено',
- updateAvailable: 'Доступно обновление',
},
mcp: {
title: 'MCP',
@@ -1898,8 +1888,6 @@ const ruRU = {
'После удаления конфигурация этого MCP-сервера не может быть восстановлена.',
},
pipelines: {
- managementDescription: 'Скопируйте или удалите этот конвейер.',
-
title: 'Конвейеры',
description:
'Конвейеры определяют поток обработки событий сообщений и привязываются к ботам',
@@ -1921,6 +1909,7 @@ const ruRU = {
earliestEdited: 'Давно изменённые',
basicInfo: 'Основная информация',
basicInfoDescription: 'Задайте название, иконку и описание конвейера',
+ managementDescription: 'Скопируйте или удалите этот конвейер.',
aiCapabilities: 'ИИ',
triggerConditions: 'Триггер',
safetyControls: 'Безопасность',
@@ -1972,9 +1961,9 @@ const ruRU = {
selectAll: 'Выбрать все',
enableAllPlugins: 'Включить все плагины',
enableAllMCPServers: 'Включить все MCP-серверы',
+ enableAllSkills: 'Включить все навыки',
allPluginsEnabled: 'Все плагины включены',
allMCPServersEnabled: 'Все MCP-серверы включены',
- enableAllSkills: 'Включить все навыки',
allSkillsEnabled: 'Все навыки включены',
skillsTitle: 'Навыки',
noSkillsSelected: 'Навыки не выбраны',
@@ -2019,14 +2008,13 @@ const ruRU = {
selectKnowledgeBases: 'Выбрать базы знаний',
},
debugDialog: {
- saveAndSend: 'Сохранить и отправить',
-
title: 'Чат конвейера',
selectPipeline: 'Выберите конвейер',
sessionType: 'Тип сессии',
privateChat: 'Личный чат',
groupChat: 'Групповой чат',
send: 'Отправить',
+ saveAndSend: 'Сохранить и отправить',
reset: 'Сбросить диалог',
inputPlaceholder: 'Отправить {{type}} сообщение...',
noMessages: 'Нет сообщений',
@@ -2065,25 +2053,6 @@ const ruRU = {
},
},
knowledge: {
- installedEngines: 'Установленные движки знаний',
- noInstalledEngines: 'Плагины движков знаний ещё не установлены.',
- marketplaceEngines: 'Плагины движков знаний в магазине',
- noMarketplaceEngines: 'Нет доступных плагинов движков знаний.',
- loadingEngineCatalog: 'Загрузка плагинов из магазина…',
- engineCatalogUnavailable:
- 'Магазин временно недоступен. Откройте список выбора заново для повтора.',
- viewMarketplace: 'Открыть магазин',
- installingEngine: 'Установка {{engine}}…',
- engineInstallSuccess: '{{engine}} установлен и доступен для выбора',
- engineInstallFailed:
- 'Не удалось установить движок знаний. Повторите попытку.',
- engineVersionUnavailable:
- 'У этого плагина нет доступной для установки версии.',
- engineInstallTimeout:
- 'Установка продолжается. Обновите страницу для проверки.',
- engineRegistrationTimeout:
- 'Плагин установлен, но движок знаний ещё не готов.',
-
title: 'Знания',
createKnowledgeBase: 'Создать базу знаний',
selectFromSidebar: 'Выберите базу знаний из боковой панели',
@@ -2162,6 +2131,24 @@ const ruRU = {
knowledgeEngine: 'Движок знаний',
knowledgeEngineRequired: 'Движок знаний обязателен',
selectKnowledgeEngine: 'Выберите движок знаний',
+ installedEngines: 'Установленные движки знаний',
+ noInstalledEngines: 'Плагины движков знаний ещё не установлены.',
+ marketplaceEngines: 'Плагины движков знаний в магазине',
+ noMarketplaceEngines: 'Нет доступных плагинов движков знаний.',
+ loadingEngineCatalog: 'Загрузка плагинов из магазина…',
+ engineCatalogUnavailable:
+ 'Магазин временно недоступен. Откройте список выбора заново для повтора.',
+ viewMarketplace: 'Открыть магазин',
+ installingEngine: 'Установка {{engine}}…',
+ engineInstallSuccess: '{{engine}} установлен и доступен для выбора',
+ engineInstallFailed:
+ 'Не удалось установить движок знаний. Повторите попытку.',
+ engineVersionUnavailable:
+ 'У этого плагина нет доступной для установки версии.',
+ engineInstallTimeout:
+ 'Установка продолжается. Обновите страницу для проверки.',
+ engineRegistrationTimeout:
+ 'Плагин установлен, но движок знаний ещё не готов.',
builtInEngine: 'Встроенный движок',
cannotChangeKnowledgeEngine: 'Движок знаний нельзя изменить после создания',
basicInfo: 'Основная информация',
@@ -2252,8 +2239,8 @@ const ruRU = {
resetting: 'Сброс...',
resetSuccess: 'Пароль успешно сброшен, пожалуйста, войдите',
resetFailed: 'Ошибка сброса пароля, проверьте email и ключ восстановления',
- backToLogin: 'Вернуться к входу',
secondFactorFailed: 'Проверка не удалась, проверьте код и попробуйте снова',
+ backToLogin: 'Вернуться к входу',
verifyWith: 'Способ проверки',
methodRecoveryKey: 'Ключ восстановления',
methodTotp: 'Аутентификатор',
@@ -2394,7 +2381,6 @@ const ruRU = {
setPasswordHint: 'Установите пароль для входа с email и паролем',
spaceEmailMismatch:
'Email входа с аккаунтом LangBot не совпадает с email локальной учётной записи',
-
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.',
@@ -2402,6 +2388,89 @@ const ruRU = {
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: 'Мониторинг',
description:
@@ -2500,6 +2569,8 @@ const ruRU = {
arguments: 'Аргументы',
result: 'Результат',
noToolCalls: 'Вызовы инструментов не записаны',
+ showDetails: 'Показать детали',
+ hideDetails: 'Скрыть детали',
},
tokens: {
totalTokens: 'Всего токенов',
@@ -2663,15 +2734,34 @@ const ruRU = {
settingsDialog: {
title: 'Настройки',
nav: {
+ workspace: 'Workspace',
models: 'Модели',
api: 'API',
storage: 'Хранилище',
account: 'Аккаунт',
-
- workspace: 'Workspace',
},
},
storageAnalysis: {
+ title: 'Анализ хранилища',
+ description: 'Проверьте использование хранилища и кандидатов на очистку',
+ openDialog: 'Открыть анализ',
+ dialogTitle: 'Анализ хранилища',
+ generatedAt: 'Создано {{time}}',
+ loading: 'Загрузка...',
+ refresh: 'Обновить',
+ totalSize: 'Общий размер',
+ binaryStorage: 'Бинарное хранилище плагинов',
+ uploadCleanup: 'Просроченные загрузки',
+ logCleanup: 'Просроченные журналы',
+ sections: 'Разделы хранилища',
+ monitoringTables: 'Таблицы мониторинга',
+ runtimeTasks: 'Задачи runtime',
+ cleanupPolicy: 'Политика очистки',
+ uploadRetention: 'Хранение загрузок',
+ logRetention: 'Хранение журналов',
+ databaseType: 'Тип базы данных',
+ days: 'дн.',
+ missing: 'Нет',
notCreated: 'Ещё не создано',
processStorage: 'Хранилище по процессам',
processStorageDescription:
@@ -2710,32 +2800,18 @@ const ruRU = {
box_runtime:
'Рабочие каталоги песочницы и процессов MCP, каталоги обмена вложениями и навыки.',
},
-
- title: 'Анализ хранилища',
- description: 'Проверьте использование хранилища и кандидатов на очистку',
- openDialog: 'Открыть анализ',
- dialogTitle: 'Анализ хранилища',
- generatedAt: 'Создано {{time}}',
- loading: 'Загрузка...',
- refresh: 'Обновить',
- totalSize: 'Общий размер',
- binaryStorage: 'Бинарное хранилище плагинов',
- uploadCleanup: 'Просроченные загрузки',
- logCleanup: 'Просроченные журналы',
- sections: 'Разделы хранилища',
- monitoringTables: 'Таблицы мониторинга',
- runtimeTasks: 'Задачи runtime',
- cleanupPolicy: 'Политика очистки',
- uploadRetention: 'Хранение загрузок',
- logRetention: 'Хранение журналов',
- databaseType: 'Тип базы данных',
- days: 'дн.',
- missing: 'Нет',
expiredUploads: 'Просроченные загрузки',
expiredLogs: 'Просроченные журналы',
noExpiredUploads: 'Нет просроченных загруженных файлов',
noExpiredLogs: 'Нет просроченных журналов',
sectionNames: {
+ database: 'База данных',
+ logs: 'Журналы',
+ storage: 'Загруженные файлы',
+ vector_store: 'Векторное хранилище',
+ plugins: 'Плагины',
+ mcp: 'MCP',
+ temp: 'Временные файлы',
legacy_plugins: 'Старые пакеты плагинов',
artifacts: 'Проверенные артефакты плагинов',
dependency_environments: 'Окружения зависимостей',
@@ -2751,14 +2827,6 @@ const ruRU = {
session_temp: 'Временные файлы песочницы',
managed_process_workspaces:
'Рабочие каталоги управляемых процессов (включая MCP)',
-
- database: 'База данных',
- logs: 'Журналы',
- storage: 'Загруженные файлы',
- vector_store: 'Векторное хранилище',
- plugins: 'Плагины',
- mcp: 'MCP',
- temp: 'Временные файлы',
},
},
limitation: {
@@ -2775,241 +2843,6 @@ const ruRU = {
createDisabledTooltip:
'Достигнут лимит {{resource}} ({{max}}) для этого рабочего пространства. Удалите существующий ресурс перед созданием нового.',
},
- wizard: {
- sidebarDescription: 'Создать бота с пошаговым руководством',
- loading: 'Загрузка мастера...',
- loadError: 'Не удалось загрузить данные мастера',
- skip: 'Пропустить',
- skipConfirmMessage:
- 'Вы можете вернуться к мастеру быстрого старта из меню аккаунта позже или создать бота вручную.',
- skipConfirmOk: 'ОК',
- prev: 'Назад',
- next: 'Далее',
- finish: 'Создать и развернуть',
- confirmCreateBot: 'Подтвердить, создать бота',
- createSuccess: 'Конвейер создан и привязан к боту!',
- botCreateSuccess: 'Бот успешно создан!',
- botSaveSuccess: 'Конфигурация бота сохранена и включена!',
- createError: 'Не удалось создать ресурсы',
- skipSaveError: 'Не удалось сохранить статус пропуска. Повторите попытку.',
- completeSaveError:
- 'Не удалось сохранить статус завершения. Повторите попытку.',
- step: {
- platform: 'Платформа',
- botConfig: 'Настройка бота',
- aiEngine: 'ИИ-движок',
- done: 'Готово',
- },
- platform: {
- title: 'Выберите платформу',
- description: 'Выберите мессенджер, к которому подключится ваш бот.',
- },
- botConfig: {
- title: 'Настройте бота',
- description: 'Настройте бота и проверьте его работу перед продолжением.',
- saveBot: 'Сохранить и включить бота',
- resaveBot: 'Пересохранить конфигурацию',
- botSaved:
- 'Конфигурация бота сохранена и включена. Проверьте журналы для подтверждения подключения.',
- waitingForMessage:
- 'Бот включён. Отправьте ему сообщение из мессенджера, чтобы продолжить.',
- messageReceived:
- 'Бот получил сообщение. Можно перейти к следующему шагу.',
- messageReceivedLocalAccountWarning:
- 'Подключение бота настроено правильно, и сообщение получено. Поскольку вход выполнен не через аккаунт LangBot, вызовы модели могут завершаться ошибкой; перейдите к следующему шагу, чтобы добавить собственную модель.',
- pageBotPreviewFailed:
- 'Не удалось загрузить тестовый чат. Сохраните настройки ещё раз, чтобы повторить попытку.',
- pageBotTestPrompt:
- 'Бот для веб-страницы включён. Нажмите на значок чата в правом нижнем углу и отправьте сообщение, чтобы проверить полный сценарий диалога.',
- pageBotTestNotice:
- 'Только для тестирования. Встройте код в настоящую внешнюю веб-страницу.',
- webhookTestPrompt:
- 'URL обратного вызова готов. Настройте его на внешней платформе, затем отправьте боту настоящее сообщение.',
- httpTestPrompt:
- 'HTTP-бот включён. Отправьте сюда настоящее входящее сообщение, чтобы проверить подключение.',
- httpTestDefaultMessage:
- 'Здравствуйте, это тестовое сообщение подключения.',
- sendHttpTest: 'Отправить тестовое сообщение',
- httpTestAccepted:
- 'Тестовое сообщение принято. Оно скоро появится в журнале.',
- httpTestMissingSecret:
- 'Введите секрет подписи входящих запросов и сначала сохраните конфигурацию.',
- httpTestFailed: 'Не удалось отправить тестовое сообщение: {{error}}',
- logsTitle: 'Журналы бота',
- logsDescription:
- 'Отслеживайте активность бота для проверки подключения к платформе.',
- },
- aiEngine: {
- loadingCatalog: 'Загрузка расширений исполнителей...',
- catalogUnavailable: 'Каталог исполнителей недоступен',
- catalogUnavailableDescription:
- 'Установленные исполнители доступны. Повторите загрузку каталога или откройте расширения.',
- noMarketplaceRunners: 'Нет плагинов исполнителей для этого назначения',
- noMarketplaceRunnersDescription:
- 'Используйте установленный исполнитель или повторите позже.',
- browseRunners: 'Открыть расширения исполнителей',
- installAndContinue: 'Установить и продолжить',
- installing: 'Установка...',
- useInstalled: 'Использовать этот исполнитель',
- installedUnavailable: 'Установлено, исполнитель недоступен',
- installSuccess: '{{runner}} установлен и выбран',
- installFailed: 'Не удалось установить расширение исполнителя',
- versionUnavailable: 'Магазин не вернул доступную для установки версию.',
- installTimeout:
- 'Время ожидания установки истекло. Проверьте задачу в разделе расширений.',
- registrationTimeout:
- 'Расширение установлено, но исполнитель не зарегистрирован. Проверьте среду выполнения плагинов и повторите попытку.',
-
- defaultModelUnavailable:
- 'Модель по умолчанию недоступна. Повторите попытку.',
- defaultRunnerUnavailable: 'Local Agent ещё не готов. Повторите попытку.',
- preparingDefault: 'Подготовка ИИ по умолчанию…',
- title: 'Настройте ИИ-движок',
- description:
- 'Выберите ИИ-движок, который будет управлять интеллектом вашего бота.',
- optionalDescription:
- 'ИИ уже настроен. Используйте его или измените способ подключения.',
- externalTitle: 'Подключить Agent внешней платформы',
- externalDescription:
- 'Подключите Dify, n8n, Coze или другой внешний Agent через плагин Runner.',
- ownModelTitle: 'Использовать собственную модель',
- ownModelDescription:
- 'Добавьте провайдера, затем найдите модель автоматически или укажите её вручную, чтобы завершить настройку.',
- ownModelSetupTitle: 'Добавьте собственную модель',
- ownModelSetupDescription:
- 'Добавьте провайдера моделей. Модели чата будут найдены автоматически, либо можно вручную указать ID модели.',
- addProviderTitle: 'Добавить провайдера',
- addProviderDescription:
- 'Введите данные провайдера и API-ключ для подключения и поиска моделей.',
- selectModelTitle: 'Выберите модель',
- selectScannedModelTitle: 'Выберите модель',
- selectScannedModelDescription:
- 'Выбранная модель заменит основную модель в пайплайне этого бота.',
- scanModelMode: 'Найти модели',
- manualModelMode: 'Добавить вручную',
- scanningModels: 'Поиск доступных моделей…',
- noScannedModels:
- 'Доступные модели чата не найдены. Проверьте конфигурацию провайдера.',
- scanModelsFailed:
- 'Не удалось найти модели. Проверьте URL и API-ключ, затем повторите попытку.',
- manualFallbackFailed:
- 'Автоматический поиск не удался. Введите ID модели, поддерживаемой провайдером.',
- manualFallbackEmpty:
- 'Модели не найдены. Введите ID модели, поддерживаемой провайдером.',
- manualModelId: 'ID модели',
- manualModelIdPlaceholder: 'Например: gpt-4o',
- manualModelIdDescription:
- 'Введите параметр модели, используемый в запросах к модели.',
- manualModelOptions: 'Дополнительные возможности модели',
- editProvider: 'Изменить провайдера',
- rescanModels: 'Повторить поиск моделей',
- moreFeaturesTitle: 'Использовать настройки по умолчанию',
- moreFeaturesDescription:
- 'Продолжить с Local Agent и рекомендованной моделью. Инструменты и базы знаний можно добавить позже.',
- runnerDescription:
- 'Выберите Runner для внешнего Agent и настройте подключение.',
- backToChoices: 'Вернуться к вариантам',
- backToList: 'Вернуться к списку',
- createExternal: 'Создать и привязать',
- finishWithModel: 'Использовать выбранную модель и завершить',
- openWorkbench: 'Открыть рабочую панель',
- },
- config: {
- botInfo: 'Информация о боте',
- botNamePlaceholder: 'Введите имя бота',
- botDescPlaceholder: 'Введите описание бота (необязательно)',
- platformConfig: 'Настройка {{platform}}',
- aiConfig: 'Настройка {{engine}}',
- },
- done: {
- title: 'Всё готово!',
- description:
- 'Ваш бот создан и подключён к конвейеру ИИ. Теперь вы можете управлять им из рабочей панели.',
- backToWorkbench: 'Вернуться к рабочей панели',
- },
- },
- errorPage: {
- unexpectedError: 'Что-то пошло не так',
- unexpectedErrorDescription:
- 'Произошла непредвиденная ошибка. Повторите попытку позже.',
- notFound: 'Страница не найдена',
- notFoundDescription:
- 'Страница, которую вы ищете, не существует или была перемещена.',
- backendUnavailableStatus: 'Бэкенд недоступен',
- goBack: 'Назад',
- backToHome: 'На главную',
- backToLogin: 'Вернуться к входу',
- retrying: 'Повторяем',
- retryFailed:
- 'По-прежнему не удается подключиться к бэкенду. Запустите сервис и повторите попытку.',
- },
- feishu: {
- createApp: 'Создать приложение Feishu в один клик',
- scanQRCode:
- 'Отсканируйте QR-код ниже в Feishu, чтобы авторизоваться и автоматически создать приложение',
- waitingForScan: 'Ожидание сканирования',
- createSuccess:
- 'Приложение успешно создано! Учётные данные заполнены автоматически',
- createFailed: 'Не удалось создать приложение',
- connecting: 'Подключение к сервису Feishu...',
- expired: 'Срок действия QR-кода истёк. Повторите попытку',
- denied: 'Пользователь отклонил авторизацию',
- connectionLost: 'Соединение потеряно. Повторите попытку',
- reconnecting: 'Переподключение...',
- retry: 'Повторить',
- },
- weixin: {
- scanLogin: 'Войти в WeChat по QR-коду',
- scanQRCode:
- 'Отсканируйте QR-код ниже в WeChat, чтобы авторизоваться и автоматически заполнить токен',
- loginSuccess: 'Вход выполнен успешно! Токен заполнен автоматически',
- loginFailed: 'Не удалось выполнить вход',
- connecting: 'Подключение к сервису WeChat...',
- waitingForScan: 'Ожидание сканирования',
- retry: 'Повторить',
- },
- dingtalk: {
- createApp: 'Создать приложение DingTalk в один клик',
- scanQRCode:
- 'Отсканируйте QR-код ниже в DingTalk, чтобы авторизоваться и автоматически создать приложение',
- waitingForScan: 'Ожидание сканирования',
- createSuccess:
- 'Приложение успешно создано! Учётные данные заполнены автоматически',
- createFailed: 'Не удалось создать приложение',
- connecting: 'Подключение к сервису DingTalk...',
- retry: 'Повторить',
- robotCodeNote:
- 'Код робота нельзя получить автоматически. Перейдите в консоль разработчика DingTalk > Настройки робота и скопируйте его вручную. Он нужен для таких функций, как распознавание изображений и загрузка файлов.',
- },
- wecombot: {
- createBot: 'Создать бота WeCom в один клик',
- scanQRCode:
- 'Отсканируйте QR-код ниже в WeCom, чтобы авторизоваться и автоматически создать бота',
- waitingForScan: 'Ожидание сканирования',
- createSuccess: 'Бот успешно создан! Учётные данные заполнены автоматически',
- createFailed: 'Не удалось создать бота',
- connecting: 'Подключение к сервису WeCom...',
- retry: 'Повторить',
- robotNameNote:
- 'Имя бота нельзя получить автоматически. Пожалуйста, введите его вручную.',
- },
- qqofficial: {
- createBinding: 'Привязка официального бота QQ по QR-коду',
- scanQRCode:
- 'Отсканируйте QR-код ниже мобильным QQ и подтвердите привязку в «QQ Bot Assistant»',
- waitingForScan: 'Ожидание сканирования',
- bindSuccess: 'Привязка успешна! AppID и Secret заполнены автоматически',
- bindFailed: 'Не удалось выполнить привязку',
- connecting: 'Подключение к сервису QQ...',
- retry: 'Повторить',
- tokenNote:
- 'Поле Token не используется текущим адаптером — его можно оставить пустым.',
- boundBy: 'Привязано пользователем QQ {{openid}}',
- },
- pluginPages: {
- selectFromSidebar: 'Выберите страницу плагина на боковой панели',
- invalidPage: 'Недопустимая страница плагина',
- },
skills: {
title: 'Навыки',
description:
@@ -3103,6 +2936,158 @@ const ruRU = {
saveFileSuccess: 'Файл успешно сохранён',
saveFileError: 'Не удалось сохранить файл: ',
},
+ wizard: {
+ sidebarDescription: 'Создать бота с пошаговым руководством',
+ loading: 'Загрузка мастера...',
+ loadError: 'Не удалось загрузить данные мастера',
+ skip: 'Пропустить',
+ skipConfirmMessage:
+ 'Вы можете вернуться к мастеру быстрого старта из меню аккаунта позже или создать бота вручную.',
+ skipConfirmOk: 'ОК',
+ prev: 'Назад',
+ next: 'Далее',
+ finish: 'Создать и развернуть',
+ confirmCreateBot: 'Подтвердить, создать бота',
+ createSuccess: 'Конвейер создан и привязан к боту!',
+ botCreateSuccess: 'Бот успешно создан!',
+ botSaveSuccess: 'Конфигурация бота сохранена и включена!',
+ createError: 'Не удалось создать ресурсы',
+ skipSaveError: 'Не удалось сохранить статус пропуска. Повторите попытку.',
+ completeSaveError:
+ 'Не удалось сохранить статус завершения. Повторите попытку.',
+ step: {
+ platform: 'Платформа',
+ botConfig: 'Настройка бота',
+ aiEngine: 'ИИ-движок',
+ done: 'Готово',
+ },
+ platform: {
+ title: 'Выберите платформу',
+ description: 'Выберите мессенджер, к которому подключится ваш бот.',
+ },
+ botConfig: {
+ title: 'Настройте бота',
+ description: 'Настройте бота и проверьте его работу перед продолжением.',
+ saveBot: 'Сохранить и включить бота',
+ resaveBot: 'Пересохранить конфигурацию',
+ botSaved:
+ 'Конфигурация бота сохранена и включена. Проверьте журналы для подтверждения подключения.',
+ waitingForMessage:
+ 'Бот включён. Отправьте ему сообщение из мессенджера, чтобы продолжить.',
+ messageReceived:
+ 'Бот получил сообщение. Можно перейти к следующему шагу.',
+ messageReceivedLocalAccountWarning:
+ 'Подключение бота настроено правильно, и сообщение получено. Поскольку вход выполнен не через аккаунт LangBot, вызовы модели могут завершаться ошибкой; перейдите к следующему шагу, чтобы добавить собственную модель.',
+ pageBotPreviewFailed:
+ 'Не удалось загрузить тестовый чат. Сохраните настройки ещё раз, чтобы повторить попытку.',
+ pageBotTestPrompt:
+ 'Бот для веб-страницы включён. Нажмите на значок чата в правом нижнем углу и отправьте сообщение, чтобы проверить полный сценарий диалога.',
+ pageBotTestNotice:
+ 'Только для тестирования. Встройте код в настоящую внешнюю веб-страницу.',
+ webhookTestPrompt:
+ 'URL обратного вызова готов. Настройте его на внешней платформе, затем отправьте боту настоящее сообщение.',
+ httpTestPrompt:
+ 'HTTP-бот включён. Отправьте сюда настоящее входящее сообщение, чтобы проверить подключение.',
+ httpTestDefaultMessage:
+ 'Здравствуйте, это тестовое сообщение подключения.',
+ sendHttpTest: 'Отправить тестовое сообщение',
+ httpTestAccepted:
+ 'Тестовое сообщение принято. Оно скоро появится в журнале.',
+ httpTestMissingSecret:
+ 'Введите секрет подписи входящих запросов и сначала сохраните конфигурацию.',
+ httpTestFailed: 'Не удалось отправить тестовое сообщение: {{error}}',
+ logsTitle: 'Журналы бота',
+ logsDescription:
+ 'Отслеживайте активность бота для проверки подключения к платформе.',
+ },
+ aiEngine: {
+ defaultModelUnavailable:
+ 'Модель по умолчанию недоступна. Повторите попытку.',
+ defaultRunnerUnavailable: 'Local Agent ещё не готов. Повторите попытку.',
+ preparingDefault: 'Подготовка ИИ по умолчанию…',
+ title: 'Настройте ИИ-движок',
+ description:
+ 'Выберите ИИ-движок, который будет управлять интеллектом вашего бота.',
+ optionalDescription:
+ 'ИИ уже настроен. Используйте его или измените способ подключения.',
+ externalTitle: 'Подключить Agent внешней платформы',
+ externalDescription:
+ 'Подключите Dify, n8n, Coze или другой внешний Agent через плагин Runner.',
+ ownModelTitle: 'Использовать собственную модель',
+ ownModelDescription:
+ 'Добавьте провайдера, затем найдите модель автоматически или укажите её вручную, чтобы завершить настройку.',
+ ownModelSetupTitle: 'Добавьте собственную модель',
+ ownModelSetupDescription:
+ 'Добавьте провайдера моделей. Модели чата будут найдены автоматически, либо можно вручную указать ID модели.',
+ addProviderTitle: 'Добавить провайдера',
+ addProviderDescription:
+ 'Введите данные провайдера и API-ключ для подключения и поиска моделей.',
+ selectModelTitle: 'Выберите модель',
+ selectScannedModelTitle: 'Выберите модель',
+ selectScannedModelDescription:
+ 'Выбранная модель заменит основную модель в пайплайне этого бота.',
+ scanModelMode: 'Найти модели',
+ manualModelMode: 'Добавить вручную',
+ scanningModels: 'Поиск доступных моделей…',
+ noScannedModels:
+ 'Доступные модели чата не найдены. Проверьте конфигурацию провайдера.',
+ scanModelsFailed:
+ 'Не удалось найти модели. Проверьте URL и API-ключ, затем повторите попытку.',
+ manualFallbackFailed:
+ 'Автоматический поиск не удался. Введите ID модели, поддерживаемой провайдером.',
+ manualFallbackEmpty:
+ 'Модели не найдены. Введите ID модели, поддерживаемой провайдером.',
+ manualModelId: 'ID модели',
+ manualModelIdPlaceholder: 'Например: gpt-4o',
+ manualModelIdDescription:
+ 'Введите параметр модели, используемый в запросах к модели.',
+ manualModelOptions: 'Дополнительные возможности модели',
+ editProvider: 'Изменить провайдера',
+ rescanModels: 'Повторить поиск моделей',
+ moreFeaturesTitle: 'Использовать настройки по умолчанию',
+ moreFeaturesDescription:
+ 'Продолжить с Local Agent и рекомендованной моделью. Инструменты и базы знаний можно добавить позже.',
+ runnerDescription:
+ 'Выберите Runner для внешнего Agent и настройте подключение.',
+ backToChoices: 'Вернуться к вариантам',
+ backToList: 'Вернуться к списку',
+ createExternal: 'Создать и привязать',
+ finishWithModel: 'Использовать выбранную модель и завершить',
+ openWorkbench: 'Открыть рабочую панель',
+ loadingCatalog: 'Загрузка расширений исполнителей...',
+ catalogUnavailable: 'Каталог исполнителей недоступен',
+ catalogUnavailableDescription:
+ 'Установленные исполнители доступны. Повторите загрузку каталога или откройте расширения.',
+ noMarketplaceRunners: 'Нет плагинов исполнителей для этого назначения',
+ noMarketplaceRunnersDescription:
+ 'Используйте установленный исполнитель или повторите позже.',
+ browseRunners: 'Открыть расширения исполнителей',
+ installAndContinue: 'Установить и продолжить',
+ installing: 'Установка...',
+ useInstalled: 'Использовать этот исполнитель',
+ installedUnavailable: 'Установлено, исполнитель недоступен',
+ installSuccess: '{{runner}} установлен и выбран',
+ installFailed: 'Не удалось установить расширение исполнителя',
+ versionUnavailable: 'Магазин не вернул доступную для установки версию.',
+ installTimeout:
+ 'Время ожидания установки истекло. Проверьте задачу в разделе расширений.',
+ registrationTimeout:
+ 'Расширение установлено, но исполнитель не зарегистрирован. Проверьте среду выполнения плагинов и повторите попытку.',
+ },
+ config: {
+ botInfo: 'Информация о боте',
+ botNamePlaceholder: 'Введите имя бота',
+ botDescPlaceholder: 'Введите описание бота (необязательно)',
+ platformConfig: 'Настройка {{platform}}',
+ aiConfig: 'Настройка {{engine}}',
+ },
+ done: {
+ title: 'Всё готово!',
+ description:
+ 'Ваш бот создан и подключён к конвейеру ИИ. Теперь вы можете управлять им из рабочей панели.',
+ backToWorkbench: 'Вернуться к рабочей панели',
+ },
+ },
addExtension: {
installTitle: 'Установить {{type}}',
installConfirm: 'Установить {{type}} «{{name}}»?',
@@ -3134,90 +3119,87 @@ const ruRU = {
unsupportedFileType:
'Неподдерживаемый тип файла. Поддерживаются только файлы .zip и .lbpkg',
},
-
- 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',
- },
+ errorPage: {
+ unexpectedError: 'Что-то пошло не так',
+ unexpectedErrorDescription:
+ 'Произошла непредвиденная ошибка. Повторите попытку позже.',
+ notFound: 'Страница не найдена',
+ notFoundDescription:
+ 'Страница, которую вы ищете, не существует или была перемещена.',
+ backendUnavailableStatus: 'Бэкенд недоступен',
+ goBack: 'Назад',
+ backToHome: 'На главную',
+ backToLogin: 'Вернуться к входу',
+ retrying: 'Повторяем',
+ retryFailed:
+ 'По-прежнему не удается подключиться к бэкенду. Запустите сервис и повторите попытку.',
+ },
+ feishu: {
+ createApp: 'Создать приложение Feishu в один клик',
+ scanQRCode:
+ 'Отсканируйте QR-код ниже в Feishu, чтобы авторизоваться и автоматически создать приложение',
+ waitingForScan: 'Ожидание сканирования',
+ createSuccess:
+ 'Приложение успешно создано! Учётные данные заполнены автоматически',
+ createFailed: 'Не удалось создать приложение',
+ connecting: 'Подключение к сервису Feishu...',
+ expired: 'Срок действия QR-кода истёк. Повторите попытку',
+ denied: 'Пользователь отклонил авторизацию',
+ connectionLost: 'Соединение потеряно. Повторите попытку',
+ reconnecting: 'Переподключение...',
+ retry: 'Повторить',
+ },
+ weixin: {
+ scanLogin: 'Войти в WeChat по QR-коду',
+ scanQRCode:
+ 'Отсканируйте QR-код ниже в WeChat, чтобы авторизоваться и автоматически заполнить токен',
+ loginSuccess: 'Вход выполнен успешно! Токен заполнен автоматически',
+ loginFailed: 'Не удалось выполнить вход',
+ connecting: 'Подключение к сервису WeChat...',
+ waitingForScan: 'Ожидание сканирования',
+ retry: 'Повторить',
+ },
+ dingtalk: {
+ createApp: 'Создать приложение DingTalk в один клик',
+ scanQRCode:
+ 'Отсканируйте QR-код ниже в DingTalk, чтобы авторизоваться и автоматически создать приложение',
+ waitingForScan: 'Ожидание сканирования',
+ createSuccess:
+ 'Приложение успешно создано! Учётные данные заполнены автоматически',
+ createFailed: 'Не удалось создать приложение',
+ connecting: 'Подключение к сервису DingTalk...',
+ retry: 'Повторить',
+ robotCodeNote:
+ 'Код робота нельзя получить автоматически. Перейдите в консоль разработчика DingTalk > Настройки робота и скопируйте его вручную. Он нужен для таких функций, как распознавание изображений и загрузка файлов.',
+ },
+ wecombot: {
+ createBot: 'Создать бота WeCom в один клик',
+ scanQRCode:
+ 'Отсканируйте QR-код ниже в WeCom, чтобы авторизоваться и автоматически создать бота',
+ waitingForScan: 'Ожидание сканирования',
+ createSuccess: 'Бот успешно создан! Учётные данные заполнены автоматически',
+ createFailed: 'Не удалось создать бота',
+ connecting: 'Подключение к сервису WeCom...',
+ retry: 'Повторить',
+ robotNameNote:
+ 'Имя бота нельзя получить автоматически. Пожалуйста, введите его вручную.',
+ },
+ qqofficial: {
+ createBinding: 'Привязка официального бота QQ по QR-коду',
+ scanQRCode:
+ 'Отсканируйте QR-код ниже мобильным QQ и подтвердите привязку в «QQ Bot Assistant»',
+ waitingForScan: 'Ожидание сканирования',
+ bindSuccess: 'Привязка успешна! AppID и Secret заполнены автоматически',
+ bindFailed: 'Не удалось выполнить привязку',
+ connecting: 'Подключение к сервису QQ...',
+ retry: 'Повторить',
+ tokenNote:
+ 'Поле Token не используется текущим адаптером — его можно оставить пустым.',
+ boundBy: 'Привязано пользователем QQ {{openid}}',
+ },
+ pluginPages: {
+ selectFromSidebar: 'Выберите страницу плагина на боковой панели',
+ invalidPage: 'Недопустимая страница плагина',
},
};
-
export default ruRU;
diff --git a/web/src/i18n/locales/th-TH.ts b/web/src/i18n/locales/th-TH.ts
index 090506b5b..794632ca4 100644
--- a/web/src/i18n/locales/th-TH.ts
+++ b/web/src/i18n/locales/th-TH.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/th-TH';
-
const thTH = {
assistant: {
modelHint: 'สลับโมเดลผู้ช่วยสำหรับข้อความถัดไป',
@@ -96,80 +95,9 @@ const thTH = {
},
},
},
-
guidedTour: {
eventDebugDescription:
'เลือกเหตุการณ์ที่รองรับ ใส่ข้อมูลทดสอบ แล้วดูผลลัพธ์และการเรียกเครื่องมือ การกระทำบนแพลตฟอร์มจะถูกจำลอง ส่วนโมเดลและเครื่องมืออื่นทำงานตามการตั้งค่าจริง',
-
- bot: {
- connection: {
- title: 'เลือกวิธีเชื่อมต่อ',
- description:
- 'เลือกวิธีเชื่อมต่อที่อะแดปเตอร์รองรับ พารามิเตอร์จะปรับโดยอัตโนมัติ',
- },
- basic: {
- title: 'ตั้งชื่อบอท',
- description:
- 'ใช้ชื่อที่จดจำง่ายเพื่อค้นหาการเชื่อมต่อนี้ในเส้นทางและบันทึก',
- },
- adapter: {
- title: 'เลือกอะแดปเตอร์แพลตฟอร์ม',
- description:
- 'เลือกอะแดปเตอร์สำหรับบอท แล้วตั้งค่าวิธีเชื่อมต่อและพารามิเตอร์แพลตฟอร์มหลังสร้าง',
- },
- parameters: {
- title: 'ตั้งค่าแพลตฟอร์ม',
- description:
- 'กรอกข้อมูลรับรองและพารามิเตอร์ ดูเอกสารอะแดปเตอร์สำหรับการตั้งค่าฝั่งแพลตฟอร์ม',
- action: 'เปิดเอกสารอะแดปเตอร์',
- },
- routing: {
- title: 'กำหนดเส้นทางเหตุการณ์ขาเข้า',
- description: 'เลือกตัวประมวลผลสำหรับแต่ละเหตุการณ์ที่บอทได้รับ',
- },
- save: {
- title: 'บันทึกการตั้งค่าบอท',
- description:
- 'ตรวจพารามิเตอร์การเชื่อมต่อและเส้นทางเหตุการณ์แล้วบันทึก จากนั้นเปิดใช้งานบอทเมื่อพร้อม',
- },
- submit: {
- title: 'สร้างบอท',
- description:
- 'สร้างบอทที่ยังไม่เปิดใช้งาน แล้วตั้งค่าการเชื่อมต่อและพารามิเตอร์ในหน้าบอท',
- },
- },
- knowledge: {
- basic: {
- title: 'อธิบายฐานความรู้',
- description:
- 'ตั้งชื่อที่จดจำง่ายและคำอธิบายเพิ่มเติมก่อนเลือกเอนจินจัดเก็บและค้นคืน',
- },
- engine: {
- title: 'ตรวจสอบเอนจินความรู้',
- description:
- 'ยืนยันเอนจินของฐานความรู้นี้ ตั้งค่าพารามิเตอร์และการค้นคืนด้านล่าง',
- action: 'เรียกดูตลาดเอนจินความรู้',
- },
- parameters: {
- title: 'ตั้งค่าพารามิเตอร์เอนจิน',
- description:
- 'กรอกค่าการจัดเก็บ โมเดล ข้อมูลรับรอง หรือบริการภายนอกที่เอนจินต้องการ',
- },
- retrieval: {
- title: 'ตั้งค่าการค้นคืน',
- description: 'ตั้งค่าวิธีค้นหาและส่งเนื้อหาที่เกี่ยวข้องให้ตัวประมวลผล',
- },
- save: {
- title: 'บันทึกการตั้งค่าฐานความรู้',
- description: 'ตรวจพารามิเตอร์เอนจินและการค้นคืนแล้วบันทึก',
- },
- submit: {
- title: 'สร้างฐานความรู้',
- description:
- 'สร้างฐานความรู้ แล้วเพิ่มเอกสารหรือเชื่อมต่อแหล่งข้อมูลที่เอนจินรองรับ',
- },
- },
-
pipeline: {
trigger: {
title: 'เลือกข้อความที่จะตอบ',
@@ -241,12 +169,49 @@ const thTH = {
'หลังบันทึก เพิ่มการตั้งค่านี้ในส่วนตัวประมวลผลปลั๊กอินของหน้าบอท ระบบจะรับเหตุการณ์ที่ปลั๊กอินประกาศโดยอัตโนมัติ ไม่ต้องตั้งเส้นทางแยกแต่ละเหตุการณ์',
},
},
+ previous: 'ขั้นตอนก่อนหน้า',
label: 'คำแนะนำการใช้งาน',
progress: 'ขั้นตอน {{current}} จาก {{total}}',
- previous: 'ขั้นตอนก่อนหน้า',
next: 'ถัดไป',
finish: 'จบคำแนะนำ',
skip: 'ข้าม',
+ bot: {
+ connection: {
+ title: 'เลือกวิธีเชื่อมต่อ',
+ description:
+ 'เลือกวิธีเชื่อมต่อที่อะแดปเตอร์รองรับ พารามิเตอร์จะปรับโดยอัตโนมัติ',
+ },
+ basic: {
+ title: 'ตั้งชื่อบอท',
+ description:
+ 'ใช้ชื่อที่จดจำง่ายเพื่อค้นหาการเชื่อมต่อนี้ในเส้นทางและบันทึก',
+ },
+ adapter: {
+ title: 'เลือกอะแดปเตอร์แพลตฟอร์ม',
+ description:
+ 'เลือกอะแดปเตอร์สำหรับบอท แล้วตั้งค่าวิธีเชื่อมต่อและพารามิเตอร์แพลตฟอร์มหลังสร้าง',
+ },
+ parameters: {
+ title: 'ตั้งค่าแพลตฟอร์ม',
+ description:
+ 'กรอกข้อมูลรับรองและพารามิเตอร์ ดูเอกสารอะแดปเตอร์สำหรับการตั้งค่าฝั่งแพลตฟอร์ม',
+ action: 'เปิดเอกสารอะแดปเตอร์',
+ },
+ routing: {
+ title: 'กำหนดเส้นทางเหตุการณ์ขาเข้า',
+ description: 'เลือกตัวประมวลผลสำหรับแต่ละเหตุการณ์ที่บอทได้รับ',
+ },
+ save: {
+ title: 'บันทึกการตั้งค่าบอท',
+ description:
+ 'ตรวจพารามิเตอร์การเชื่อมต่อและเส้นทางเหตุการณ์แล้วบันทึก จากนั้นเปิดใช้งานบอทเมื่อพร้อม',
+ },
+ submit: {
+ title: 'สร้างบอท',
+ description:
+ 'สร้างบอทที่ยังไม่เปิดใช้งาน แล้วตั้งค่าการเชื่อมต่อและพารามิเตอร์ในหน้าบอท',
+ },
+ },
processorCreate: {
type: {
title: 'เลือกประเภทตัวประมวลผล',
@@ -285,6 +250,37 @@ const thTH = {
'เปิดแท็บเหตุการณ์และเครื่องมือเพื่อเลือกเหตุการณ์ที่ Agent รับได้ และเครื่องมือของแพลตฟอร์มหรือ LangBot ที่อนุญาตให้ใช้',
},
},
+ knowledge: {
+ basic: {
+ title: 'อธิบายฐานความรู้',
+ description:
+ 'ตั้งชื่อที่จดจำง่ายและคำอธิบายเพิ่มเติมก่อนเลือกเอนจินจัดเก็บและค้นคืน',
+ },
+ engine: {
+ title: 'ตรวจสอบเอนจินความรู้',
+ description:
+ 'ยืนยันเอนจินของฐานความรู้นี้ ตั้งค่าพารามิเตอร์และการค้นคืนด้านล่าง',
+ action: 'เรียกดูตลาดเอนจินความรู้',
+ },
+ parameters: {
+ title: 'ตั้งค่าพารามิเตอร์เอนจิน',
+ description:
+ 'กรอกค่าการจัดเก็บ โมเดล ข้อมูลรับรอง หรือบริการภายนอกที่เอนจินต้องการ',
+ },
+ retrieval: {
+ title: 'ตั้งค่าการค้นคืน',
+ description: 'ตั้งค่าวิธีค้นหาและส่งเนื้อหาที่เกี่ยวข้องให้ตัวประมวลผล',
+ },
+ save: {
+ title: 'บันทึกการตั้งค่าฐานความรู้',
+ description: 'ตรวจพารามิเตอร์เอนจินและการค้นคืนแล้วบันทึก',
+ },
+ submit: {
+ title: 'สร้างฐานความรู้',
+ description:
+ 'สร้างฐานความรู้ แล้วเพิ่มเอกสารหรือเชื่อมต่อแหล่งข้อมูลที่เอนจินรองรับ',
+ },
+ },
},
pipelineMigration,
sidebar: {
@@ -302,15 +298,9 @@ const thTH = {
editionCloud: 'Cloud',
},
common: {
- loadFailed: 'โหลดไม่สำเร็จ โปรดลองอีกครั้ง',
- showSecret: 'แสดงข้อมูลลับ',
- hideSecret: 'ซ่อนข้อมูลลับ',
- editBasicInfo: 'แก้ไขข้อมูลพื้นฐาน',
- editBasicInfoDescription: 'เปลี่ยนชื่อ คำอธิบาย และไอคอน',
- editBasicInfoDescriptionNoIcon: 'เปลี่ยนชื่อและคำอธิบาย',
- management: 'การจัดการ',
-
customValue: 'กำหนดเอง',
+ loadFailed: 'โหลดไม่สำเร็จ โปรดลองอีกครั้ง',
+ search: 'ค้นหา',
login: 'เข้าสู่ระบบ',
logout: 'ออกจากระบบ',
accountOptions: 'การตั้งค่า',
@@ -326,6 +316,8 @@ const thTH = {
loginLoadErrorDesc:
'ไม่สามารถเชื่อมต่อกับแบ็กเอนด์ LangBot ได้ กรุณาตรวจสอบว่าบริการกำลังทำงานอยู่แล้วลองใหม่อีกครั้ง',
retry: 'ลองใหม่',
+ showSecret: 'แสดงข้อมูลลับ',
+ hideSecret: 'ซ่อนข้อมูลลับ',
enterEmail: 'กรอกที่อยู่อีเมล',
enterPassword: 'กรอกรหัสผ่าน',
invalidEmail: 'กรุณากรอกที่อยู่อีเมลที่ถูกต้อง',
@@ -337,6 +329,10 @@ const thTH = {
joinDiscord: 'เข้าร่วม Discord',
create: 'สร้าง',
edit: 'แก้ไข',
+ editBasicInfo: 'แก้ไขข้อมูลพื้นฐาน',
+ editBasicInfoDescription: 'เปลี่ยนชื่อ คำอธิบาย และไอคอน',
+ editBasicInfoDescriptionNoIcon: 'เปลี่ยนชื่อและคำอธิบาย',
+ management: 'การจัดการ',
delete: 'ลบ',
add: 'เพิ่ม',
select: 'เลือก',
@@ -480,12 +476,11 @@ const thTH = {
actions: 'การดำเนินการ',
apiKeyCreatedMessage:
'กรุณาคัดลอกคีย์ API นี้ หากปุ่มไม่ทำงาน กรุณาคัดลอกด้วยตนเอง',
+ apiKeyStoredSecurely: 'Secret shown only when created',
none: 'ไม่มี',
more: 'เพิ่มเติม ({{count}})',
less: 'น้อยลง',
noItems: 'ไม่มีรายการ',
-
- apiKeyStoredSecurely: 'Secret shown only when created',
},
notFound: {
title: 'ไม่พบหน้า',
@@ -637,6 +632,10 @@ const thTH = {
credits: 'เครดิต',
loginWithSpace: 'เข้าสู่ระบบด้วยบัญชี LangBot',
loginToUseModels: 'เข้าสู่ระบบด้วยบัญชี LangBot เพื่อใช้โมเดลคลาวด์',
+ ownerMustBindSpace:
+ 'The Workspace owner must connect a LangBot Account for LangBot Models.',
+ usesOwnerSpaceBilling:
+ "Uses the Workspace owner's LangBot Account billing and credits.",
noModels: 'ยังไม่มีโมเดลที่กำหนดค่า',
availability: {
available: 'พร้อมใช้งานในการตรวจสอบล่าสุด',
@@ -688,13 +687,43 @@ const thTH = {
fallbackList: 'โมเดลสำรอง',
addFallback: 'เพิ่มโมเดลสำรอง',
},
-
- ownerMustBindSpace:
- 'The Workspace owner must connect a LangBot Account for LangBot Models.',
- usesOwnerSpaceBilling:
- "Uses the Workspace owner's LangBot Account billing and credits.",
},
bots: {
+ pluginSubscriptions: {
+ incompleteEvents:
+ 'บอตนี้รองรับเพียงบางเหตุการณ์ที่ตัวประมวลผลติดตาม ({{events}}) ตัวประมวลผลอาจทำงานได้ไม่ครบถ้วน',
+ description:
+ 'รับเหตุการณ์ที่ปลั๊กอินประกาศไว้โดยอัตโนมัติ และทำงานแยกจากเส้นทางด้านบน',
+ empty: 'ยังไม่ได้เชื่อมโยงตัวประมวลผลปลั๊กอิน',
+ add: 'เพิ่มตัวประมวลผลปลั๊กอิน',
+ existing: 'เลือกการตั้งค่า',
+ new: 'สร้างการตั้งค่า',
+ noExisting: 'ไม่มีการตั้งค่าที่ใช้ได้ โปรดสร้างใหม่',
+ shared: 'บอทที่ใช้การตั้งค่าเดียวกันจะแชร์การตั้งค่าและสถานะการทำงาน',
+ saveHint: 'บันทึกบอตเพื่อเปิดใช้งานการเชื่อมโยง',
+ createAndBind: 'สร้างและเชื่อมโยง',
+ created: 'สร้างการตั้งค่าแล้ว บันทึกบอทเพื่อเปิดใช้งานการเชื่อมโยง',
+ enable: 'เปิดใช้งาน {{name}}',
+ remove: 'ยกเลิกการเชื่อมโยง {{name}}',
+ configure: 'ตั้งค่า',
+ logs: 'ดูบันทึก',
+ },
+ applyFailed: 'บันทึกการตั้งค่าแล้ว แต่ไม่สามารถนำไปใช้ได้',
+ internalErrorHint:
+ 'เกิดข้อผิดพลาดภายใน โปรดตรวจสอบบันทึกของเซิร์ฟเวอร์ด้วยหมายเลขอ้างอิง',
+ errorReference: 'หมายเลขข้อผิดพลาด: {{id}}',
+ title: 'บอท',
+ description:
+ 'สร้างและจัดการ Bot ซึ่งเป็นจุดเชื่อมต่อของ LangBot กับแพลตฟอร์มต่างๆ',
+ createBot: 'สร้าง Bot',
+ selectFromSidebar: 'เลือก Bot จากแถบด้านข้าง',
+ editBot: 'แก้ไข Bot',
+ getBotListError: 'ไม่สามารถดึงรายการ Bot ได้: ',
+ botName: 'ชื่อ Bot',
+ botDescription: 'คำอธิบาย Bot',
+ botNameRequired: 'ชื่อ Bot ต้องไม่ว่างเปล่า',
+ botDescriptionRequired: 'คำอธิบาย Bot ต้องไม่ว่างเปล่า',
+ adapterRequired: 'อะแดปเตอร์ต้องไม่ว่างเปล่า',
connectionMode: 'วิธีเชื่อมต่อ',
connectionModeDescription: 'เลือกวิธีเชื่อมต่อที่อะแดปเตอร์รองรับ',
connectionWebhook: 'Webhook',
@@ -705,6 +734,44 @@ const thTH = {
'LangBot เปิดการเชื่อมต่อซ็อกเก็ตหรือสตรีมขาออกค้างไว้',
noAdaptersForConnectionMode:
'ไม่มีอะแดปเตอร์ที่ติดตั้งรองรับวิธีเชื่อมต่อนี้',
+ defaultDescription: 'Bot หนึ่งตัว',
+ getBotConfigError: 'ไม่สามารถดึงการกำหนดค่า Bot ได้: ',
+ saveSuccess: 'บันทึกสำเร็จ',
+ saveError: 'บันทึกล้มเหลว: ',
+ createSuccess: 'สร้างสำเร็จ กรุณากำหนดเส้นทางเหตุการณ์',
+ createError: 'สร้างล้มเหลว: ',
+ deleteSuccess: 'ลบสำเร็จ',
+ deleteError: 'ลบล้มเหลว: ',
+ deleteConfirmation: 'คุณแน่ใจหรือไม่ว่าต้องการลบ Bot นี้?',
+ platformAdapter: 'การเลือกแพลตฟอร์ม/อะแดปเตอร์',
+ selectAdapter: 'เลือกอะแดปเตอร์',
+ legacyAdapters: 'อะแดปเตอร์รุ่นเก่า',
+ legacyAdapterBadge: 'เก่า',
+ legacyAdaptersHint:
+ 'อะแดปเตอร์เหล่านี้มีรุ่นใหม่แบบขับเคลื่อนด้วยเหตุการณ์แล้ว\nและเก็บไว้เพื่อความเข้ากันได้กับการตั้งค่าเดิมเท่านั้น ไม่แนะนำสำหรับ Bot ใหม่',
+ adapterConfig: 'การกำหนดค่าอะแดปเตอร์',
+ viewAdapterDocs: 'ดูเอกสาร',
+ bindPipeline: 'ผูก Pipeline',
+ selectPipeline: 'เลือก Pipeline',
+ selectBot: 'เลือก Bot',
+ botLogTitle: 'บันทึก Bot',
+ enableAutoRefresh: 'เปิดการรีเฟรชอัตโนมัติ',
+ session: 'เซสชัน',
+ yesterday: 'เมื่อวาน',
+ earlier: 'ก่อนหน้า',
+ dateFormat: '{{day}}/{{month}}',
+ setBotEnableError: 'ไม่สามารถตั้งค่าสถานะเปิดใช้งาน Bot ได้',
+ log: 'บันทึก',
+ configuration: 'การกำหนดค่า',
+ logs: 'บันทึก',
+ basicInfo: 'ข้อมูลพื้นฐาน',
+ basicInfoDescription: 'ตั้งชื่อและคำอธิบาย Bot',
+ routingConnection: 'การกำหนดเส้นทางและการเชื่อมต่อ',
+ routingConnectionDescription:
+ 'ผูก Pipeline ที่ประมวลผลข้อความสำหรับ Bot นี้',
+ eventRouting: 'การกำหนดเส้นทางเหตุการณ์',
+ eventRoutingDescription:
+ 'เลือกตัวประมวลผลสำหรับแต่ละเหตุการณ์ของ Bot และแก้ไขตรรกะในการตั้งค่า Agent หรือ Pipeline ที่เกี่ยวข้อง โดย Pipeline รองรับเฉพาะเหตุการณ์ข้อความ',
eventBindings: 'เส้นทางเหตุการณ์',
addEventBinding: 'เพิ่มเส้นทาง',
addBehavior: 'เพิ่มพฤติกรรม',
@@ -765,6 +832,7 @@ const thTH = {
routeFallbackIgnored:
'เหตุการณ์ที่ไม่ตรงกับเส้นทางจะถูกละเว้น เพิ่มเส้นทางรับทั้งหมดเฉพาะเมื่อต้องกำหนดผลลัพธ์ให้ทุกเหตุการณ์',
testRoute: 'ตรวจเส้นทาง',
+ adapterEventDebugAction: 'ทดสอบการรับเหตุการณ์',
adapterEventDebugTitle: 'ดีบักเหตุการณ์แพลตฟอร์ม',
adapterEventDebugDescription:
'สร้างเหตุการณ์ใน {{platform}} จะแสดงที่นี่เมื่ออะแดปเตอร์ได้รับ',
@@ -841,6 +909,25 @@ const thTH = {
dryRunDiagnosticMatched: '{{route}} ตรงกัน {{reason}}',
dryRunDiagnosticSkipped: 'ข้าม {{route}} แล้ว {{reason}}',
eventCustom: 'เหตุการณ์กำหนดเอง',
+ eventWildcard: 'ทุกเหตุการณ์',
+ eventNamespaceWildcard: '{{namespace}}.*',
+ eventNames: {
+ message_received: 'ได้รับข้อความ',
+ message_edited: 'แก้ไขข้อความ',
+ message_deleted: 'ลบข้อความ',
+ message_reaction: 'การแสดงความรู้สึกต่อข้อความ',
+ feedback_received: 'ได้รับข้อเสนอแนะ',
+ friend_request_received: 'ได้รับคำขอเป็นเพื่อน',
+ friend_added: 'เพิ่มเพื่อน',
+ group_member_joined: 'สมาชิกเข้าร่วมกลุ่ม',
+ group_member_left: 'สมาชิกออกจากกลุ่ม',
+ group_member_banned: 'สมาชิกถูกแบน',
+ bot_invited_to_group: 'บอตได้รับเชิญเข้ากลุ่ม',
+ bot_removed_from_group: 'บอตถูกนำออกจากกลุ่ม',
+ bot_muted: 'บอตถูกปิดสิทธิ์ส่งข้อความ',
+ bot_unmuted: 'บอตได้รับสิทธิ์ส่งข้อความคืน',
+ platform_specific: 'เหตุการณ์เฉพาะแพลตฟอร์ม',
+ },
eventDescriptions: {
all: 'ตรงกับทุกเหตุการณ์ที่อะแดปเตอร์นี้ได้รับ',
namespace: 'ตรงกับทุกเหตุการณ์ของ {{group}}',
@@ -884,101 +971,6 @@ const thTH = {
operator_not_contains: 'ไม่มี',
operator_starts_with: 'ขึ้นต้นด้วย',
operator_regex: 'นิพจน์ทั่วไป',
-
- eventWildcard: 'ทุกเหตุการณ์',
- eventNamespaceWildcard: '{{namespace}}.*',
- eventNames: {
- message_received: 'ได้รับข้อความ',
- message_edited: 'แก้ไขข้อความ',
- message_deleted: 'ลบข้อความ',
- message_reaction: 'การแสดงความรู้สึกต่อข้อความ',
- feedback_received: 'ได้รับข้อเสนอแนะ',
- friend_request_received: 'ได้รับคำขอเป็นเพื่อน',
- friend_added: 'เพิ่มเพื่อน',
- group_member_joined: 'สมาชิกเข้าร่วมกลุ่ม',
- group_member_left: 'สมาชิกออกจากกลุ่ม',
- group_member_banned: 'สมาชิกถูกแบน',
- bot_invited_to_group: 'บอตได้รับเชิญเข้ากลุ่ม',
- bot_removed_from_group: 'บอตถูกนำออกจากกลุ่ม',
- bot_muted: 'บอตถูกปิดสิทธิ์ส่งข้อความ',
- bot_unmuted: 'บอตได้รับสิทธิ์ส่งข้อความคืน',
- platform_specific: 'เหตุการณ์เฉพาะแพลตฟอร์ม',
- },
- pluginSubscriptions: {
- incompleteEvents:
- 'บอตนี้รองรับเพียงบางเหตุการณ์ที่ตัวประมวลผลติดตาม ({{events}}) ตัวประมวลผลอาจทำงานได้ไม่ครบถ้วน',
- description:
- 'รับเหตุการณ์ที่ปลั๊กอินประกาศไว้โดยอัตโนมัติ และทำงานแยกจากเส้นทางด้านบน',
- empty: 'ยังไม่ได้เชื่อมโยงตัวประมวลผลปลั๊กอิน',
- add: 'เพิ่มตัวประมวลผลปลั๊กอิน',
- existing: 'เลือกการตั้งค่า',
- new: 'สร้างการตั้งค่า',
- noExisting: 'ไม่มีการตั้งค่าที่ใช้ได้ โปรดสร้างใหม่',
- shared: 'บอทที่ใช้การตั้งค่าเดียวกันจะแชร์การตั้งค่าและสถานะการทำงาน',
- saveHint: 'บันทึกบอตเพื่อเปิดใช้งานการเชื่อมโยง',
- createAndBind: 'สร้างและเชื่อมโยง',
- created: 'สร้างการตั้งค่าแล้ว บันทึกบอทเพื่อเปิดใช้งานการเชื่อมโยง',
- enable: 'เปิดใช้งาน {{name}}',
- remove: 'ยกเลิกการเชื่อมโยง {{name}}',
- configure: 'ตั้งค่า',
- logs: 'ดูบันทึก',
- },
- applyFailed: 'บันทึกการตั้งค่าแล้ว แต่ไม่สามารถนำไปใช้ได้',
- internalErrorHint:
- 'เกิดข้อผิดพลาดภายใน โปรดตรวจสอบบันทึกของเซิร์ฟเวอร์ด้วยหมายเลขอ้างอิง',
- errorReference: 'หมายเลขข้อผิดพลาด: {{id}}',
-
- adapterEventDebugAction: 'ทดสอบการรับเหตุการณ์',
- title: 'บอท',
- description:
- 'สร้างและจัดการ Bot ซึ่งเป็นจุดเชื่อมต่อของ LangBot กับแพลตฟอร์มต่างๆ',
- createBot: 'สร้าง Bot',
- selectFromSidebar: 'เลือก Bot จากแถบด้านข้าง',
- editBot: 'แก้ไข Bot',
- getBotListError: 'ไม่สามารถดึงรายการ Bot ได้: ',
- botName: 'ชื่อ Bot',
- botDescription: 'คำอธิบาย Bot',
- botNameRequired: 'ชื่อ Bot ต้องไม่ว่างเปล่า',
- botDescriptionRequired: 'คำอธิบาย Bot ต้องไม่ว่างเปล่า',
- adapterRequired: 'อะแดปเตอร์ต้องไม่ว่างเปล่า',
- defaultDescription: 'Bot หนึ่งตัว',
- getBotConfigError: 'ไม่สามารถดึงการกำหนดค่า Bot ได้: ',
- saveSuccess: 'บันทึกสำเร็จ',
- saveError: 'บันทึกล้มเหลว: ',
- createSuccess: 'สร้างสำเร็จ กรุณากำหนดเส้นทางเหตุการณ์',
- createError: 'สร้างล้มเหลว: ',
- deleteSuccess: 'ลบสำเร็จ',
- deleteError: 'ลบล้มเหลว: ',
- deleteConfirmation: 'คุณแน่ใจหรือไม่ว่าต้องการลบ Bot นี้?',
- platformAdapter: 'การเลือกแพลตฟอร์ม/อะแดปเตอร์',
- selectAdapter: 'เลือกอะแดปเตอร์',
- legacyAdapters: 'อะแดปเตอร์รุ่นเก่า',
- legacyAdapterBadge: 'เก่า',
- legacyAdaptersHint:
- 'อะแดปเตอร์เหล่านี้มีรุ่นใหม่แบบขับเคลื่อนด้วยเหตุการณ์แล้ว\nและเก็บไว้เพื่อความเข้ากันได้กับการตั้งค่าเดิมเท่านั้น ไม่แนะนำสำหรับ Bot ใหม่',
- adapterConfig: 'การกำหนดค่าอะแดปเตอร์',
- viewAdapterDocs: 'ดูเอกสาร',
- bindPipeline: 'ผูก Pipeline',
- selectPipeline: 'เลือก Pipeline',
- selectBot: 'เลือก Bot',
- botLogTitle: 'บันทึก Bot',
- enableAutoRefresh: 'เปิดการรีเฟรชอัตโนมัติ',
- session: 'เซสชัน',
- yesterday: 'เมื่อวาน',
- earlier: 'ก่อนหน้า',
- dateFormat: '{{day}}/{{month}}',
- setBotEnableError: 'ไม่สามารถตั้งค่าสถานะเปิดใช้งาน Bot ได้',
- log: 'บันทึก',
- configuration: 'การกำหนดค่า',
- logs: 'บันทึก',
- basicInfo: 'ข้อมูลพื้นฐาน',
- basicInfoDescription: 'ตั้งชื่อและคำอธิบาย Bot',
- routingConnection: 'การกำหนดเส้นทางและการเชื่อมต่อ',
- routingConnectionDescription:
- 'ผูก Pipeline ที่ประมวลผลข้อความสำหรับ Bot นี้',
- eventRouting: 'การกำหนดเส้นทางเหตุการณ์',
- eventRoutingDescription:
- 'เลือกตัวประมวลผลสำหรับแต่ละเหตุการณ์ของ Bot และแก้ไขตรรกะในการตั้งค่า Agent หรือ Pipeline ที่เกี่ยวข้อง โดย Pipeline รองรับเฉพาะเหตุการณ์ข้อความ',
routingRules: 'กฎการกำหนดเส้นทางตามเงื่อนไข',
routingRulesDescription:
'กฎจะถูกประเมินตามลำดับ การจับคู่แรกจะกำหนดเส้นทางไปยัง Pipeline ที่เกี่ยวข้อง หากไม่ตรงกันจะใช้ Pipeline เริ่มต้นด้านบน',
@@ -1063,6 +1055,10 @@ const thTH = {
discarded: 'ถูกละทิ้ง',
userMessage: 'ผู้ใช้',
botMessage: 'ผู้ช่วย',
+ totalSessions: '{{count}} เซสชัน',
+ userSearch: 'ID หรือชื่อผู้ใช้',
+ startDate: 'วันที่เริ่มต้น',
+ endDate: 'วันที่สิ้นสุด',
},
admins: {
title: 'Admins',
@@ -1080,12 +1076,114 @@ const thTH = {
deleteError: 'Failed to remove admin: ',
noAdmins: 'No admins configured',
setAdminTitle: 'Set as admin',
- removeAdminTitle: 'Remove admin',
adminBadge: 'Admin',
configureAdmins: 'Manage Admins',
+ removeAdminTitle: 'Remove admin',
},
},
agents: {
+ monitoring: {
+ description:
+ 'ดูเหตุการณ์เริ่มต้น ผลลัพธ์โมเดล และการเรียกเครื่องมือของแต่ละงาน',
+ empty: 'ยังไม่มีการทำงาน เริ่มเหตุการณ์หรือทดสอบการดีบักเพื่อดูบันทึก',
+ input: 'ข้อมูลเริ่มต้น',
+ eventData: 'ข้อมูลเหตุการณ์',
+ execution: 'ขั้นตอนการทำงาน',
+ rawEvents: 'เหตุการณ์ดิบ',
+ inputUnavailable: 'ไม่มีการบันทึกข้อมูลเริ่มต้นของการทำงานนี้',
+ },
+ eventProcessor: {
+ configurations: 'การตั้งค่าตัวประมวลผลปลั๊กอิน',
+ configTab: 'การตั้งค่า',
+ logsTab: 'บันทึก',
+ noSettings: 'ตัวประมวลผลปลั๊กอินนี้ไม่ต้องตั้งค่า',
+ createPageTitle: 'สร้างตัวประมวลผลเหตุการณ์',
+ processWithPlugin: 'ประมวลผลด้วยโค้ดปลั๊กอิน',
+ pluginSettings: 'การตั้งค่าปลั๊กอิน',
+ pluginSettingsDescription: 'พารามิเตอร์ที่ประกาศโดยปลั๊กอินนี้',
+ selectToDebug: 'เลือกปลั๊กอินด้านบนเพื่อเริ่มแก้จุดบกพร่อง',
+ debugOutput: 'ผลลัพธ์ตัวประมวลผล',
+ debugDescription:
+ 'เหตุการณ์ขาเข้า บันทึกปลั๊กอิน และผลการดำเนินการของการทดสอบนี้',
+ debugNotice:
+ 'ปลั๊กอินประมวลผลเหตุการณ์ทดสอบจริง การตอบกลับและส่งข้อความใช้ Mock โดยไม่ส่งข้อความจริง เครื่องมืออื่นทำงานตามการตั้งค่า',
+ create: 'สร้างตัวประมวลผลปลั๊กอิน',
+ type: 'ตัวประมวลผลปลั๊กอิน',
+ description: 'ประมวลผลเหตุการณ์ด้วยโค้ดและตรรกะที่ปลั๊กอินกำหนด',
+ component: 'ตัวประมวลผลปลั๊กอิน',
+ selectComponent: 'เลือกตัวประมวลผลปลั๊กอิน',
+ unavailable: 'ส่วนประกอบไม่พร้อมใช้งาน',
+ noComponents: 'ยังไม่ได้ติดตั้งปลั๊กอินที่มีตัวประมวลผล',
+ installPlugin: 'ติดตั้งปลั๊กอิน',
+ loadError: 'ไม่สามารถโหลดรายละเอียดได้',
+ refresh: 'รีเฟรช',
+ runs: 'ประวัติการทำงาน',
+ noRuns: 'ยังไม่มีการทำงาน เชื่อมโยงตัวประมวลผลกับบอทเพื่อเริ่มต้น',
+ bindBot: 'เชื่อมโยงกับบอท',
+ trace: 'บันทึกและเส้นทางข้อความ',
+ selectRun: 'เลือกการทำงานเพื่อดูรายละเอียด',
+ input: 'เหตุการณ์ขาเข้า',
+ destination: 'ปลายทางการส่ง',
+ loadMore: 'โหลดเพิ่มเติม',
+ activation: 'ติดตั้งปลั๊กอิน สร้างการตั้งค่าตัวประมวลผล แล้วเชื่อมโยงบอท',
+ status_timeout: 'หมดเวลา',
+ status_pending: 'รอดำเนินการ',
+ status_running: 'กำลังทำงาน',
+ status_completed: 'เสร็จสิ้น',
+ status_failed: 'ล้มเหลว',
+ status_cancelled: 'ยกเลิกแล้ว',
+ status_queued: 'อยู่ในคิว',
+ trace_run_completed: 'ทำงานเสร็จสิ้น',
+ trace_run_failed: 'การทำงานล้มเหลว',
+ trace_tool_call_started: 'เริ่มดำเนินการ',
+ trace_tool_call_completed: 'ผลการดำเนินการ',
+ },
+ debugData: {
+ chatId: 'ID แชท',
+ feedbackType: 'ประเภทข้อเสนอแนะ (1: ชอบ, 2: ไม่ชอบ, 3: ยกเลิก)',
+ title: 'ข้อมูลเหตุการณ์',
+ form: 'ฟิลด์ทั่วไป',
+ json: 'JSON ทั้งหมด',
+ groupId: 'ID กลุ่ม',
+ memberId: 'ID สมาชิก',
+ memberName: 'ชื่อสมาชิก',
+ userId: 'ID ผู้ใช้',
+ userName: 'ชื่อผู้ใช้',
+ requesterId: 'ID ผู้ส่งคำขอ',
+ requesterName: 'ชื่อผู้ส่งคำขอ',
+ messageId: 'ID ข้อความ',
+ duration: 'ระยะเวลา (วินาที)',
+ message: 'เนื้อหาข้อความ',
+ newMessage: 'เนื้อหาที่แก้ไข',
+ verificationMessage: 'ข้อความยืนยัน',
+ reaction: 'อีโมจิ',
+ groupName: 'ชื่อกลุ่ม',
+ feedback: 'ความคิดเห็น',
+ rating: 'คะแนน',
+ eventName: 'ชื่อเหตุการณ์',
+ privateChat: 'เว้นว่างสำหรับแชทส่วนตัว',
+ sampleUser: 'ผู้ใช้ทดสอบ',
+ sampleMessage: 'สวัสดี',
+ sampleFeedback: 'มีประโยชน์มาก',
+ invalidField: 'โปรดตรวจสอบ {{field}}',
+ },
+ title: 'ตัวประมวลผล',
+ description: 'สร้างตัวประมวลผลที่ใช้ซ้ำได้และใช้ในเส้นทางเหตุการณ์ของบอท',
+ create: 'สร้างตัวประมวลผล',
+ editAgent: 'แก้ไข Agent',
+ selectFromSidebar: 'เลือกตัวประมวลผลจากแถบด้านข้าง',
+ agentType: 'Agent',
+ agentTypeDescription:
+ 'ใช้ runner เพื่อประมวลผลข้อความ สมาชิกกลุ่ม เพื่อน ฟีดแบ็ก และเหตุการณ์แพลตฟอร์มอื่นๆ',
+ pipelineType: 'ไปป์ไลน์',
+ kindBadgeAgent: 'Agent',
+ kindBadgePipeline: 'Pipeline',
+ groupByKind: 'จัดกลุ่มตามประเภท',
+ groupByKindShort: 'จัดกลุ่ม',
+ pipelineTypeDescription:
+ 'ทำงานตามขั้นตอนที่กำหนด: รับข้อความ เรียก AI และตอบกลับผู้ใช้ พร้อมตั้งค่าฐานความรู้และปลั๊กอินได้ รองรับเฉพาะเหตุการณ์ข้อความ เหมาะกับงานที่มีขั้นตอนชัดเจนและต้องการควบคุมกระบวนการประมวลผล',
+ allEvents: 'รองรับทุกเหตุการณ์',
+ messageEventsOnly: 'เฉพาะเหตุการณ์ข้อความ',
chooseType: 'เลือกวิธีทำงาน',
chooseTypeDescription:
'เลือกประเภทตัวประมวลผลก่อน แล้วตั้งค่าเพิ่มเติมหลังสร้าง',
@@ -1111,8 +1209,15 @@ const thTH = {
diagramAI: 'AI',
diagramPostprocess: 'ปรับแต่ง',
diagramOutput: 'ผลลัพธ์',
+ basicInfo: 'ข้อมูลพื้นฐาน',
+ basicInfoDescription: 'ตั้งชื่อ ไอคอน และคำอธิบาย',
+ runnerSettings: 'Runner',
+ advanced: 'ขั้นสูง',
eventsAndTools: 'เหตุการณ์และเครื่องมือ',
eventsAndToolsDescription: 'ตั้งเหตุการณ์กระตุ้นและเครื่องมือที่ใช้ได้',
+ bindableEvents: 'ช่วงเหตุการณ์ที่ผูกได้',
+ bindableEventsDescription:
+ 'จำกัดว่าเส้นทางเหตุการณ์ของบอทใดสามารถเลือก Agent นี้ได้ ค่าเริ่มต้นเหมาะกับกรณีส่วนใหญ่',
configuredEvents: 'เหตุการณ์ที่เพิ่มแล้ว',
configuredEventsCount: 'ทั้งหมด {{count}} รายการ',
addEvent: 'เพิ่มเหตุการณ์',
@@ -1159,6 +1264,26 @@ const thTH = {
write: 'การกระทำ',
dangerous: 'มีความอ่อนไหว',
},
+ supportedEvents: 'ช่วงเหตุการณ์',
+ supportedEventsDescription:
+ 'เลือกเหตุการณ์ทั้งหมด กลุ่มเหตุการณ์ หรือเหตุการณ์ที่ต้องการ เส้นทางบอทจะแสดง Agent นี้เฉพาะเหตุการณ์ที่ตรงกัน',
+ searchEvents: 'ค้นหาเหตุการณ์…',
+ noEventsFound: 'ไม่พบเหตุการณ์ที่ตรงกัน',
+ nameRequired: 'ชื่อต้องไม่ว่างเปล่า',
+ createSuccess: 'สร้างสำเร็จ',
+ createError: 'สร้างล้มเหลว: ',
+ loadError: 'โหลดล้มเหลว: ',
+ saveSuccess: 'บันทึกสำเร็จ',
+ saveError: 'บันทึกล้มเหลว: ',
+ deleteSuccess: 'ลบสำเร็จ',
+ deleteError: 'ลบล้มเหลว: ',
+ deleteConfirmation: 'คุณแน่ใจหรือว่าต้องการลบ Agent นี้?',
+ dangerZone: 'โซนอันตราย',
+ dangerZoneDescription: 'การดำเนินการที่ไม่สามารถย้อนกลับและทำลายข้อมูล',
+ deleteAgentAction: 'ลบ Agent นี้',
+ deleteAgentHint:
+ 'เมื่อลบแล้ว เหตุการณ์ที่เชื่อมกับมันจะไม่สามารถดำเนินการต่อได้',
+ noRunnerMetadata: 'ขณะนี้ไม่มีข้อมูลเมตา Runner ที่พร้อมใช้งาน',
runnerStatusLoading: 'กำลังตรวจสถานะรันเนอร์',
runnerStatusCheckFailed: 'ตรวจสถานะรันเนอร์ไม่สำเร็จ',
runnerStatusCheckFailedDescription:
@@ -1250,139 +1375,6 @@ const thTH = {
debugReviewRunnerConfig: 'ตรวจการตั้งค่ารันเนอร์',
debugErrorDetails: 'ดูรายละเอียดข้อผิดพลาด',
debugRunFailed: 'ดีบัก Agent ไม่สำเร็จ',
-
- monitoring: {
- description:
- 'ดูเหตุการณ์เริ่มต้น ผลลัพธ์โมเดล และการเรียกเครื่องมือของแต่ละงาน',
- empty: 'ยังไม่มีการทำงาน เริ่มเหตุการณ์หรือทดสอบการดีบักเพื่อดูบันทึก',
- input: 'ข้อมูลเริ่มต้น',
- eventData: 'ข้อมูลเหตุการณ์',
- execution: 'ขั้นตอนการทำงาน',
- rawEvents: 'เหตุการณ์ดิบ',
- inputUnavailable: 'ไม่มีการบันทึกข้อมูลเริ่มต้นของการทำงานนี้',
- },
- eventProcessor: {
- configurations: 'การตั้งค่าตัวประมวลผลปลั๊กอิน',
- configTab: 'การตั้งค่า',
- logsTab: 'บันทึก',
- noSettings: 'ตัวประมวลผลปลั๊กอินนี้ไม่ต้องตั้งค่า',
- createPageTitle: 'สร้างตัวประมวลผลเหตุการณ์',
- processWithPlugin: 'ประมวลผลด้วยโค้ดปลั๊กอิน',
- pluginSettings: 'การตั้งค่าปลั๊กอิน',
- pluginSettingsDescription: 'พารามิเตอร์ที่ประกาศโดยปลั๊กอินนี้',
- selectToDebug: 'เลือกปลั๊กอินด้านบนเพื่อเริ่มแก้จุดบกพร่อง',
-
- debugOutput: 'ผลลัพธ์ตัวประมวลผล',
- debugDescription:
- 'เหตุการณ์ขาเข้า บันทึกปลั๊กอิน และผลการดำเนินการของการทดสอบนี้',
- debugNotice:
- 'ปลั๊กอินประมวลผลเหตุการณ์ทดสอบจริง การตอบกลับและส่งข้อความใช้ Mock โดยไม่ส่งข้อความจริง เครื่องมืออื่นทำงานตามการตั้งค่า',
-
- create: 'สร้างตัวประมวลผลปลั๊กอิน',
- type: 'ตัวประมวลผลปลั๊กอิน',
- description: 'ประมวลผลเหตุการณ์ด้วยโค้ดและตรรกะที่ปลั๊กอินกำหนด',
- component: 'ตัวประมวลผลปลั๊กอิน',
- selectComponent: 'เลือกตัวประมวลผลปลั๊กอิน',
- unavailable: 'ส่วนประกอบไม่พร้อมใช้งาน',
- noComponents: 'ยังไม่ได้ติดตั้งปลั๊กอินที่มีตัวประมวลผล',
- installPlugin: 'ติดตั้งปลั๊กอิน',
- loadError: 'ไม่สามารถโหลดรายละเอียดได้',
- refresh: 'รีเฟรช',
- runs: 'ประวัติการทำงาน',
- noRuns: 'ยังไม่มีการทำงาน เชื่อมโยงตัวประมวลผลกับบอทเพื่อเริ่มต้น',
- bindBot: 'เชื่อมโยงกับบอท',
- trace: 'บันทึกและเส้นทางข้อความ',
- selectRun: 'เลือกการทำงานเพื่อดูรายละเอียด',
- input: 'เหตุการณ์ขาเข้า',
- destination: 'ปลายทางการส่ง',
- loadMore: 'โหลดเพิ่มเติม',
- activation: 'ติดตั้งปลั๊กอิน สร้างการตั้งค่าตัวประมวลผล แล้วเชื่อมโยงบอท',
- status_timeout: 'หมดเวลา',
- status_pending: 'รอดำเนินการ',
- status_running: 'กำลังทำงาน',
- status_completed: 'เสร็จสิ้น',
- status_failed: 'ล้มเหลว',
- status_cancelled: 'ยกเลิกแล้ว',
- status_queued: 'อยู่ในคิว',
- trace_run_completed: 'ทำงานเสร็จสิ้น',
- trace_run_failed: 'การทำงานล้มเหลว',
- trace_tool_call_started: 'เริ่มดำเนินการ',
- trace_tool_call_completed: 'ผลการดำเนินการ',
- },
- debugData: {
- chatId: 'ID แชท',
- feedbackType: 'ประเภทข้อเสนอแนะ (1: ชอบ, 2: ไม่ชอบ, 3: ยกเลิก)',
-
- title: 'ข้อมูลเหตุการณ์',
- form: 'ฟิลด์ทั่วไป',
- json: 'JSON ทั้งหมด',
- groupId: 'ID กลุ่ม',
- memberId: 'ID สมาชิก',
- memberName: 'ชื่อสมาชิก',
- userId: 'ID ผู้ใช้',
- userName: 'ชื่อผู้ใช้',
- requesterId: 'ID ผู้ส่งคำขอ',
- requesterName: 'ชื่อผู้ส่งคำขอ',
- messageId: 'ID ข้อความ',
- duration: 'ระยะเวลา (วินาที)',
- message: 'เนื้อหาข้อความ',
- newMessage: 'เนื้อหาที่แก้ไข',
- verificationMessage: 'ข้อความยืนยัน',
- reaction: 'อีโมจิ',
- groupName: 'ชื่อกลุ่ม',
- feedback: 'ความคิดเห็น',
- rating: 'คะแนน',
- eventName: 'ชื่อเหตุการณ์',
- privateChat: 'เว้นว่างสำหรับแชทส่วนตัว',
- sampleUser: 'ผู้ใช้ทดสอบ',
- sampleMessage: 'สวัสดี',
- sampleFeedback: 'มีประโยชน์มาก',
- invalidField: 'โปรดตรวจสอบ {{field}}',
- },
- title: 'ตัวประมวลผล',
- description: 'สร้างตัวประมวลผลที่ใช้ซ้ำได้และใช้ในเส้นทางเหตุการณ์ของบอท',
- create: 'สร้างตัวประมวลผล',
- editAgent: 'แก้ไข Agent',
- selectFromSidebar: 'เลือกตัวประมวลผลจากแถบด้านข้าง',
- agentType: 'Agent',
- agentTypeDescription:
- 'ใช้ runner เพื่อประมวลผลข้อความ สมาชิกกลุ่ม เพื่อน ฟีดแบ็ก และเหตุการณ์แพลตฟอร์มอื่นๆ',
- pipelineType: 'ไปป์ไลน์',
- kindBadgeAgent: 'Agent',
- kindBadgePipeline: 'Pipeline',
- groupByKind: 'จัดกลุ่มตามประเภท',
- groupByKindShort: 'จัดกลุ่ม',
- pipelineTypeDescription:
- 'ทำงานตามขั้นตอนที่กำหนด: รับข้อความ เรียก AI และตอบกลับผู้ใช้ พร้อมตั้งค่าฐานความรู้และปลั๊กอินได้ รองรับเฉพาะเหตุการณ์ข้อความ เหมาะกับงานที่มีขั้นตอนชัดเจนและต้องการควบคุมกระบวนการประมวลผล',
- allEvents: 'รองรับทุกเหตุการณ์',
- messageEventsOnly: 'เฉพาะเหตุการณ์ข้อความ',
- basicInfo: 'ข้อมูลพื้นฐาน',
- basicInfoDescription: 'ตั้งชื่อ ไอคอน และคำอธิบาย',
- runnerSettings: 'Runner',
- advanced: 'ขั้นสูง',
- bindableEvents: 'ช่วงเหตุการณ์ที่ผูกได้',
- bindableEventsDescription:
- 'จำกัดว่าเส้นทางเหตุการณ์ของบอทใดสามารถเลือก Agent นี้ได้ ค่าเริ่มต้นเหมาะกับกรณีส่วนใหญ่',
- supportedEvents: 'ช่วงเหตุการณ์',
- supportedEventsDescription:
- 'เลือกเหตุการณ์ทั้งหมด กลุ่มเหตุการณ์ หรือเหตุการณ์ที่ต้องการ เส้นทางบอทจะแสดง Agent นี้เฉพาะเหตุการณ์ที่ตรงกัน',
- searchEvents: 'ค้นหาเหตุการณ์…',
- noEventsFound: 'ไม่พบเหตุการณ์ที่ตรงกัน',
- nameRequired: 'ชื่อต้องไม่ว่างเปล่า',
- createSuccess: 'สร้างสำเร็จ',
- createError: 'สร้างล้มเหลว: ',
- loadError: 'โหลดล้มเหลว: ',
- saveSuccess: 'บันทึกสำเร็จ',
- saveError: 'บันทึกล้มเหลว: ',
- deleteSuccess: 'ลบสำเร็จ',
- deleteError: 'ลบล้มเหลว: ',
- deleteConfirmation: 'คุณแน่ใจหรือว่าต้องการลบ Agent นี้?',
- dangerZone: 'โซนอันตราย',
- dangerZoneDescription: 'การดำเนินการที่ไม่สามารถย้อนกลับและทำลายข้อมูล',
- deleteAgentAction: 'ลบ Agent นี้',
- deleteAgentHint:
- 'เมื่อลบแล้ว เหตุการณ์ที่เชื่อมกับมันจะไม่สามารถดำเนินการต่อได้',
- noRunnerMetadata: 'ขณะนี้ไม่มีข้อมูลเมตา Runner ที่พร้อมใช้งาน',
},
plugins: {
title: 'ส่วนขยาย',
@@ -1498,6 +1490,7 @@ const thTH = {
components: 'คอมโพเนนต์',
ready: 'แตกแพ็กเกจปลั๊กอินแล้ว ยืนยันเพื่อเริ่มติดตั้ง',
},
+ uploadPluginOnly: 'รองรับเฉพาะแพ็กเกจปลั๊กอิน .lbpkg',
dragToUpload: 'ลากไฟล์ปลั๊กอินมาวางที่นี่เพื่ออัปโหลด',
unsupportedFileType: 'ประเภทไฟล์ไม่รองรับ รองรับเฉพาะไฟล์ .lbpkg และ .zip',
uploadingPlugin: 'กำลังอัปโหลดปลั๊กอิน...',
@@ -1564,18 +1557,19 @@ const thTH = {
installFromGithubDesc: 'ติดตั้งปลั๊กอินจาก GitHub Release',
goToMarketplace: 'ไปที่ตลาดปลั๊กอิน',
installProgress: {
+ title: 'กำลังติดตั้ง {{name}}',
updateTitle: 'กำลังอัปเดต {{name}}',
+ titleGeneric: 'การติดตั้งปลั๊กอิน',
+ titlePlugin: 'กำลังติดตั้งปลั๊กอิน {{name}}',
+ titleMCP: 'กำลังติดตั้งเซิร์ฟเวอร์ MCP {{name}}',
+ titleSkill: 'กำลังติดตั้งสกิล {{name}}',
+ overallProgress: 'ความคืบหน้าโดยรวม',
checkingUpdate: 'กำลังตรวจการอัปเดต',
+ downloading: 'กำลังดาวน์โหลดปลั๊กอิน',
validating: 'กำลังตรวจสอบแพ็กเกจ',
+ installingDeps: 'กำลังติดตั้งแพ็กเกจ',
applyingUpdate: 'กำลังใช้การอัปเดต',
activating: 'กำลังเริ่มและรีเฟรชคอมโพเนนต์',
- updateComplete: 'อัปเดตปลั๊กอินสำเร็จ',
-
- title: 'กำลังติดตั้ง {{name}}',
- titleGeneric: 'การติดตั้งปลั๊กอิน',
- overallProgress: 'ความคืบหน้าโดยรวม',
- downloading: 'กำลังดาวน์โหลดปลั๊กอิน',
- installingDeps: 'กำลังติดตั้งแพ็กเกจ',
initializing: 'กำลังเริ่มต้นการตั้งค่า',
launching: 'กำลังเปิดใช้งานปลั๊กอิน',
completed: 'เสร็จสมบูรณ์',
@@ -1584,26 +1578,22 @@ const thTH = {
depsInfo: '{{count}} แพ็กเกจที่ต้องติดตั้ง',
depsProgress: 'ติดตั้งแล้ว {{installed}}/{{total}} · เหลือ {{remaining}}',
installComplete: 'ติดตั้งปลั๊กอินสำเร็จ',
+ updateComplete: 'อัปเดตปลั๊กอินสำเร็จ',
+ installCompletePlugin: 'ติดตั้งปลั๊กอินสำเร็จ',
+ installCompleteMCP: 'ติดตั้งเซิร์ฟเวอร์ MCP สำเร็จ',
+ installCompleteSkill: 'ติดตั้งสกิลสำเร็จ',
dismiss: 'ปิด',
background: 'ทำงานเบื้องหลัง',
taskQueue: 'งานติดตั้ง',
clearCompleted: 'ล้างที่เสร็จแล้ว',
noTasks: 'ไม่มีงานติดตั้ง',
- titlePlugin: 'กำลังติดตั้งปลั๊กอิน {{name}}',
- titleMCP: 'กำลังติดตั้งเซิร์ฟเวอร์ MCP {{name}}',
- titleSkill: 'กำลังติดตั้งสกิล {{name}}',
- installCompletePlugin: 'ติดตั้งปลั๊กอินสำเร็จ',
- installCompleteMCP: 'ติดตั้งเซิร์ฟเวอร์ MCP สำเร็จ',
- installCompleteSkill: 'ติดตั้งสกิลสำเร็จ',
},
- uploadPluginOnly: 'รองรับเฉพาะแพ็กเกจปลั๊กอิน .lbpkg',
},
market: {
runnerUsage: 'การใช้งานรันเนอร์',
runnerUsageAll: 'ทั้งหมด',
runnerUsageAgent: 'Agent / ไปป์ไลน์',
runnerUsageEvent: 'ตัวประมวลผลปลั๊กอิน',
-
searchPlaceholder: 'ค้นหาปลั๊กอิน...',
searchPlaceholderCount:
'ค้นหา {{count}} ส่วนขยาย ความสามารถ หรือกรณีใช้งาน...',
@@ -1616,6 +1606,10 @@ const thTH = {
allLoaded: 'แสดงปลั๊กอินทั้งหมดแล้ว',
allLoadedCount: 'แสดงส่วนขยายทั้งหมด {{count}} รายการแล้ว',
install: 'ติดตั้ง',
+ installCard: 'ติดตั้ง {{name}}',
+ installedCard: 'ติดตั้ง {{name}} แล้ว',
+ installed: 'ติดตั้งแล้ว',
+ updateAvailable: 'มีอัปเดต',
installConfirm:
'คุณแน่ใจหรือไม่ว่าต้องการติดตั้งปลั๊กอิน "{{name}}" ({{version}})?',
downloadComplete: 'ดาวน์โหลดปลั๊กอิน "{{name}}" เสร็จสมบูรณ์',
@@ -1693,10 +1687,6 @@ const thTH = {
clearAll: 'ล้างทั้งหมด',
noTags: 'ไม่มีแท็กที่พร้อมใช้งาน',
},
- installCard: 'ติดตั้ง {{name}}',
- installedCard: 'ติดตั้ง {{name}} แล้ว',
- installed: 'ติดตั้งแล้ว',
- updateAvailable: 'มีอัปเดต',
},
mcp: {
title: 'MCP',
@@ -1837,8 +1827,6 @@ const thTH = {
'เมื่อลบแล้ว การกำหนดค่าเซิร์ฟเวอร์ MCP นี้จะไม่สามารถกู้คืนได้',
},
pipelines: {
- managementDescription: 'คัดลอกหรือลบไปป์ไลน์นี้',
-
title: 'ไปป์ไลน์',
description:
'Pipeline กำหนดกระบวนการประมวลผลเหตุการณ์ข้อความ ใช้เพื่อผูกกับ Bot',
@@ -1860,6 +1848,7 @@ const thTH = {
earliestEdited: 'แก้ไขเก่าสุด',
basicInfo: 'ข้อมูลพื้นฐาน',
basicInfoDescription: 'ตั้งชื่อ ไอคอน และคำอธิบาย Pipeline',
+ managementDescription: 'คัดลอกหรือลบไปป์ไลน์นี้',
aiCapabilities: 'AI',
triggerConditions: 'ทริกเกอร์',
safetyControls: 'ความปลอดภัย',
@@ -1910,9 +1899,9 @@ const thTH = {
selectAll: 'เลือกทั้งหมด',
enableAllPlugins: 'เปิดใช้งานปลั๊กอินทั้งหมด',
enableAllMCPServers: 'เปิดใช้งานเซิร์ฟเวอร์ MCP ทั้งหมด',
+ enableAllSkills: 'เปิดใช้สกิลทั้งหมด',
allPluginsEnabled: 'เปิดใช้งานปลั๊กอินทั้งหมดแล้ว',
allMCPServersEnabled: 'เปิดใช้งานเซิร์ฟเวอร์ MCP ทั้งหมดแล้ว',
- enableAllSkills: 'เปิดใช้สกิลทั้งหมด',
allSkillsEnabled: 'เปิดใช้สกิลทั้งหมดแล้ว',
skillsTitle: 'สกิล',
noSkillsSelected: 'ยังไม่ได้เลือกสกิล',
@@ -1956,14 +1945,13 @@ const thTH = {
selectKnowledgeBases: 'เลือกคลังความรู้',
},
debugDialog: {
- saveAndSend: 'บันทึกและส่ง',
-
title: 'แชท Pipeline',
selectPipeline: 'เลือก Pipeline',
sessionType: 'ประเภทเซสชัน',
privateChat: 'แชทส่วนตัว',
groupChat: 'แชทกลุ่ม',
send: 'ส่ง',
+ saveAndSend: 'บันทึกและส่ง',
reset: 'รีเซ็ตการสนทนา',
inputPlaceholder: 'ส่งข้อความ{{type}}...',
noMessages: 'ไม่มีข้อความ',
@@ -2002,22 +1990,6 @@ const thTH = {
},
},
knowledge: {
- installedEngines: 'เอนจินความรู้ที่ติดตั้ง',
- noInstalledEngines: 'ยังไม่ได้ติดตั้งปลั๊กอินเอนจินความรู้',
- marketplaceEngines: 'ปลั๊กอินเอนจินความรู้ในตลาด',
- noMarketplaceEngines: 'ไม่มีปลั๊กอินเอนจินความรู้พร้อมใช้งาน',
- loadingEngineCatalog: 'กำลังโหลดปลั๊กอินจากตลาด…',
- engineCatalogUnavailable:
- 'ตลาดไม่พร้อมใช้งานชั่วคราว เปิดตัวเลือกอีกครั้งเพื่อลองใหม่',
- viewMarketplace: 'ดูตลาด',
- installingEngine: 'กำลังติดตั้ง {{engine}}…',
- engineInstallSuccess: 'ติดตั้ง {{engine}} แล้ว พร้อมให้เลือก',
- engineInstallFailed: 'ติดตั้งเอนจินความรู้ไม่สำเร็จ โปรดลองอีกครั้ง',
- engineVersionUnavailable: 'ปลั๊กอินนี้ไม่มีเวอร์ชันที่ติดตั้งได้',
- engineInstallTimeout: 'ยังติดตั้งอยู่ รีเฟรชหน้าเพื่อตรวจอีกครั้ง',
- engineRegistrationTimeout:
- 'ติดตั้งปลั๊กอินแล้ว แต่เอนจินความรู้ยังไม่พร้อม',
-
title: 'ฐานความรู้',
createKnowledgeBase: 'สร้างฐานความรู้',
selectFromSidebar: 'เลือกฐานความรู้จากแถบด้านข้าง',
@@ -2095,6 +2067,21 @@ const thTH = {
knowledgeEngine: 'เครื่องมือความรู้',
knowledgeEngineRequired: 'กรุณาเลือกเครื่องมือความรู้',
selectKnowledgeEngine: 'เลือกเครื่องมือความรู้',
+ installedEngines: 'เอนจินความรู้ที่ติดตั้ง',
+ noInstalledEngines: 'ยังไม่ได้ติดตั้งปลั๊กอินเอนจินความรู้',
+ marketplaceEngines: 'ปลั๊กอินเอนจินความรู้ในตลาด',
+ noMarketplaceEngines: 'ไม่มีปลั๊กอินเอนจินความรู้พร้อมใช้งาน',
+ loadingEngineCatalog: 'กำลังโหลดปลั๊กอินจากตลาด…',
+ engineCatalogUnavailable:
+ 'ตลาดไม่พร้อมใช้งานชั่วคราว เปิดตัวเลือกอีกครั้งเพื่อลองใหม่',
+ viewMarketplace: 'ดูตลาด',
+ installingEngine: 'กำลังติดตั้ง {{engine}}…',
+ engineInstallSuccess: 'ติดตั้ง {{engine}} แล้ว พร้อมให้เลือก',
+ engineInstallFailed: 'ติดตั้งเอนจินความรู้ไม่สำเร็จ โปรดลองอีกครั้ง',
+ engineVersionUnavailable: 'ปลั๊กอินนี้ไม่มีเวอร์ชันที่ติดตั้งได้',
+ engineInstallTimeout: 'ยังติดตั้งอยู่ รีเฟรชหน้าเพื่อตรวจอีกครั้ง',
+ engineRegistrationTimeout:
+ 'ติดตั้งปลั๊กอินแล้ว แต่เอนจินความรู้ยังไม่พร้อม',
builtInEngine: 'เครื่องมือในตัว',
cannotChangeKnowledgeEngine:
'ไม่สามารถเปลี่ยนเครื่องมือความรู้หลังจากสร้างแล้ว',
@@ -2183,8 +2170,8 @@ const thTH = {
resetting: 'กำลังรีเซ็ต...',
resetSuccess: 'รีเซ็ตรหัสผ่านสำเร็จ กรุณาเข้าสู่ระบบ',
resetFailed: 'รีเซ็ตรหัสผ่านล้มเหลว กรุณาตรวจสอบอีเมลและคีย์กู้คืน',
- backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
secondFactorFailed: 'การยืนยันล้มเหลว กรุณาตรวจสอบรหัสแล้วลองใหม่',
+ backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
verifyWith: 'ยืนยันด้วย',
methodRecoveryKey: 'คีย์กู้คืน',
methodTotp: 'แอปยืนยันตัวตน',
@@ -2321,7 +2308,6 @@ const thTH = {
setPasswordHint: 'ตั้งรหัสผ่านเพื่อเข้าสู่ระบบด้วยอีเมลและรหัสผ่าน',
spaceEmailMismatch:
'อีเมลเข้าสู่ระบบด้วยบัญชี LangBot ไม่ตรงกับอีเมลบัญชีท้องถิ่น',
-
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.',
@@ -2329,6 +2315,89 @@ const thTH = {
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: 'แดชบอร์ด',
description: 'ตรวจสอบกิจกรรม Bot, การเรียก LLM และประสิทธิภาพของระบบ',
@@ -2366,8 +2435,8 @@ const thTH = {
embeddingCalls: 'การเรียก Embedding',
modelCalls: 'การเรียกโมเดล',
tokens: 'การติดตาม Token',
- sessions: 'การวิเคราะห์เซสชัน',
feedback: 'ความคิดเห็นผู้ใช้',
+ sessions: 'การวิเคราะห์เซสชัน',
errors: 'บันทึกข้อผิดพลาด',
},
messageList: {
@@ -2426,6 +2495,8 @@ const thTH = {
arguments: 'อาร์กิวเมนต์',
result: 'ผลลัพธ์',
noToolCalls: 'ยังไม่มีการบันทึกการเรียกใช้เครื่องมือ',
+ showDetails: 'แสดงรายละเอียด',
+ hideDetails: 'ซ่อนรายละเอียด',
},
tokens: {
totalTokens: 'Token ทั้งหมด',
@@ -2590,15 +2661,34 @@ const thTH = {
settingsDialog: {
title: 'การตั้งค่า',
nav: {
+ workspace: 'Workspace',
models: 'โมเดล',
api: 'API',
storage: 'พื้นที่จัดเก็บ',
account: 'บัญชี',
-
- workspace: 'Workspace',
},
},
storageAnalysis: {
+ title: 'วิเคราะห์พื้นที่จัดเก็บ',
+ description: 'ตรวจสอบการใช้พื้นที่จัดเก็บและรายการที่สามารถล้างได้',
+ openDialog: 'ดูการวิเคราะห์',
+ dialogTitle: 'วิเคราะห์พื้นที่จัดเก็บ',
+ generatedAt: 'สร้างเมื่อ {{time}}',
+ loading: 'กำลังโหลด...',
+ refresh: 'รีเฟรช',
+ totalSize: 'ขนาดรวม',
+ binaryStorage: 'พื้นที่จัดเก็บไบนารีของปลั๊กอิน',
+ uploadCleanup: 'ไฟล์อัปโหลดที่หมดอายุ',
+ logCleanup: 'บันทึกที่หมดอายุ',
+ sections: 'ส่วนพื้นที่จัดเก็บ',
+ monitoringTables: 'ตารางการตรวจสอบ',
+ runtimeTasks: 'งาน runtime',
+ cleanupPolicy: 'นโยบายการล้างข้อมูล',
+ uploadRetention: 'ระยะเวลาเก็บไฟล์อัปโหลด',
+ logRetention: 'ระยะเวลาเก็บบันทึก',
+ databaseType: 'ชนิดฐานข้อมูล',
+ days: 'วัน',
+ missing: 'ไม่มี',
notCreated: 'ยังไม่ได้สร้าง',
processStorage: 'พื้นที่จัดเก็บตามโพรเซส',
processStorageDescription:
@@ -2636,32 +2726,18 @@ const thTH = {
box_runtime:
'พื้นที่ทำงานแซนด์บ็อกซ์และโพรเซส MCP ไดเรกทอรีแลกเปลี่ยนไฟล์แนบ และทักษะ',
},
-
- title: 'วิเคราะห์พื้นที่จัดเก็บ',
- description: 'ตรวจสอบการใช้พื้นที่จัดเก็บและรายการที่สามารถล้างได้',
- openDialog: 'ดูการวิเคราะห์',
- dialogTitle: 'วิเคราะห์พื้นที่จัดเก็บ',
- generatedAt: 'สร้างเมื่อ {{time}}',
- loading: 'กำลังโหลด...',
- refresh: 'รีเฟรช',
- totalSize: 'ขนาดรวม',
- binaryStorage: 'พื้นที่จัดเก็บไบนารีของปลั๊กอิน',
- uploadCleanup: 'ไฟล์อัปโหลดที่หมดอายุ',
- logCleanup: 'บันทึกที่หมดอายุ',
- sections: 'ส่วนพื้นที่จัดเก็บ',
- monitoringTables: 'ตารางการตรวจสอบ',
- runtimeTasks: 'งาน runtime',
- cleanupPolicy: 'นโยบายการล้างข้อมูล',
- uploadRetention: 'ระยะเวลาเก็บไฟล์อัปโหลด',
- logRetention: 'ระยะเวลาเก็บบันทึก',
- databaseType: 'ชนิดฐานข้อมูล',
- days: 'วัน',
- missing: 'ไม่มี',
expiredUploads: 'ไฟล์อัปโหลดที่หมดอายุ',
expiredLogs: 'บันทึกที่หมดอายุ',
noExpiredUploads: 'ไม่มีไฟล์อัปโหลดที่หมดอายุ',
noExpiredLogs: 'ไม่มีบันทึกที่หมดอายุ',
sectionNames: {
+ database: 'ฐานข้อมูล',
+ logs: 'บันทึก',
+ storage: 'ไฟล์อัปโหลด',
+ vector_store: 'คลังเวกเตอร์',
+ plugins: 'ปลั๊กอิน',
+ mcp: 'MCP',
+ temp: 'ไฟล์ชั่วคราว',
legacy_plugins: 'แพ็กเกจปลั๊กอินรุ่นเก่า',
artifacts: 'อาร์ติแฟกต์ปลั๊กอินที่ตรวจสอบแล้ว',
dependency_environments: 'สภาพแวดล้อมการพึ่งพา',
@@ -2676,14 +2752,6 @@ const thTH = {
session_caches: 'แคชรันไทม์แซนด์บ็อกซ์',
session_temp: 'ไฟล์ชั่วคราวแซนด์บ็อกซ์',
managed_process_workspaces: 'พื้นที่ทำงานโพรเซสที่จัดการ (รวม MCP)',
-
- database: 'ฐานข้อมูล',
- logs: 'บันทึก',
- storage: 'ไฟล์อัปโหลด',
- vector_store: 'คลังเวกเตอร์',
- plugins: 'ปลั๊กอิน',
- mcp: 'MCP',
- temp: 'ไฟล์ชั่วคราว',
},
},
limitation: {
@@ -2700,228 +2768,6 @@ const thTH = {
createDisabledTooltip:
'ถึงขีดจำกัด {{resource}} ({{max}}) ของเวิร์กสเปซนี้แล้ว โปรดลบรายการเดิมก่อนสร้างรายการใหม่',
},
- wizard: {
- sidebarDescription: 'สร้าง Bot ด้วยขั้นตอนที่แนะนำ',
- loading: 'กำลังโหลดตัวช่วย...',
- loadError: 'ไม่สามารถโหลดข้อมูลตัวช่วยได้',
- skip: 'ข้าม',
- skipConfirmMessage:
- 'คุณสามารถเข้าสู่ตัวช่วยเริ่มต้นอย่างรวดเร็วจากเมนูบัญชีในภายหลัง หรือสร้าง Bot ด้วยตนเอง',
- skipConfirmOk: 'ตกลง',
- prev: 'ก่อนหน้า',
- next: 'ถัดไป',
- finish: 'สร้างและติดตั้ง',
- confirmCreateBot: 'ยืนยัน สร้าง Bot',
- createSuccess: 'สร้าง Pipeline และเชื่อมกับ Bot สำเร็จ!',
- botCreateSuccess: 'สร้าง Bot สำเร็จ!',
- botSaveSuccess: 'บันทึกและเปิดใช้งาน Bot สำเร็จ!',
- createError: 'ไม่สามารถสร้างทรัพยากรได้',
- skipSaveError: 'ไม่สามารถบันทึกสถานะการข้ามได้ กรุณาลองใหม่',
- completeSaveError: 'ไม่สามารถบันทึกสถานะการเสร็จสิ้นได้ กรุณาลองใหม่',
- step: {
- platform: 'แพลตฟอร์ม',
- botConfig: 'ตั้งค่า Bot',
- aiEngine: 'เครื่องมือ AI',
- done: 'เสร็จสิ้น',
- },
- platform: {
- title: 'เลือกแพลตฟอร์ม',
- description: 'เลือกแพลตฟอร์มข้อความที่ Bot ของคุณจะเชื่อมต่อ',
- },
- botConfig: {
- title: 'กำหนดค่า Bot ของคุณ',
- description: 'ตั้งค่า Bot ของคุณและตรวจสอบว่าทำงานได้ก่อนดำเนินการต่อ',
- saveBot: 'บันทึกและเปิดใช้งาน Bot',
- resaveBot: 'บันทึกการกำหนดค่าอีกครั้ง',
- botSaved:
- 'บันทึกและเปิดใช้งาน Bot แล้ว ตรวจสอบบันทึกเพื่อยืนยันการเชื่อมต่อ',
- waitingForMessage:
- 'เปิดใช้งาน Bot แล้ว โปรดส่งข้อความจากแพลตฟอร์มแชตเพื่อดำเนินการต่อ',
- messageReceived: 'Bot ได้รับข้อความแล้ว คุณสามารถไปยังขั้นตอนถัดไปได้',
- messageReceivedLocalAccountWarning:
- 'การเชื่อมต่อฝั่ง Bot ได้รับการกำหนดค่าอย่างถูกต้องและได้รับข้อความแล้ว เนื่องจากคุณไม่ได้เข้าสู่ระบบด้วยบัญชี LangBot การเรียกใช้โมเดลอาจล้มเหลว โปรดไปยังขั้นตอนถัดไปเพื่อเพิ่มโมเดลของคุณเอง',
- pageBotPreviewFailed:
- 'โหลดแชททดสอบไม่สำเร็จ โปรดบันทึกการตั้งค่าอีกครั้งเพื่อลองใหม่',
- pageBotTestPrompt:
- 'เปิดใช้งาน Page Bot แล้ว คลิกฟองแชตที่มุมขวาล่างและส่งข้อความเพื่อตรวจสอบขั้นตอนการสนทนาทั้งหมด',
- pageBotTestNotice:
- 'สำหรับการทดสอบเท่านั้น โปรดฝังโค้ดในหน้าเว็บภายนอกจริง',
- webhookTestPrompt:
- 'URL Callback พร้อมแล้ว โปรดกำหนดค่าบนแพลตฟอร์มภายนอก แล้วส่งข้อความจริงถึง Bot',
- httpTestPrompt:
- 'เปิดใช้งาน HTTP Bot แล้ว ส่งข้อความขาเข้าจริงที่นี่เพื่อตรวจสอบการเชื่อมต่อ',
- httpTestDefaultMessage: 'สวัสดี นี่คือข้อความทดสอบการเชื่อมต่อ',
- sendHttpTest: 'ส่งข้อความทดสอบ',
- httpTestAccepted: 'ระบบรับข้อความทดสอบแล้ว และจะแสดงในบันทึกในอีกสักครู่',
- httpTestMissingSecret:
- 'โปรดกรอก Secret สำหรับลงนามข้อความขาเข้าและบันทึกการกำหนดค่าก่อน',
- httpTestFailed: 'ส่งข้อความทดสอบไม่สำเร็จ: {{error}}',
- logsTitle: 'บันทึก Bot',
- logsDescription:
- 'ตรวจสอบกิจกรรม Bot เพื่อยืนยันว่าการเชื่อมต่อแพลตฟอร์มทำงานอยู่',
- },
- aiEngine: {
- loadingCatalog: 'กำลังโหลดส่วนขยายรันเนอร์...',
- catalogUnavailable: 'รายการรันเนอร์ไม่พร้อมใช้งาน',
- catalogUnavailableDescription:
- 'รันเนอร์ที่ติดตั้งยังใช้ได้ ลองโหลดรายการใหม่หรือเรียกดูส่วนขยาย',
- noMarketplaceRunners: 'ไม่มีปลั๊กอินรันเนอร์ตรงกับการใช้งานนี้',
- noMarketplaceRunnersDescription:
- 'ใช้รันเนอร์ที่ติดตั้งแล้วหรือลองภายหลัง',
- browseRunners: 'เรียกดูส่วนขยายรันเนอร์',
- installAndContinue: 'ติดตั้งและดำเนินการต่อ',
- installing: 'กำลังติดตั้ง...',
- useInstalled: 'ใช้รันเนอร์นี้',
- installedUnavailable: 'ติดตั้งแล้ว แต่รันเนอร์ไม่พร้อมใช้',
- installSuccess: 'ติดตั้งและเลือก {{runner}} แล้ว',
- installFailed: 'ติดตั้งส่วนขยายรันเนอร์ไม่สำเร็จ',
- versionUnavailable: 'ตลาดไม่ส่งเวอร์ชันที่ติดตั้งได้กลับมา',
- installTimeout: 'หมดเวลาติดตั้งรันเนอร์ ตรวจงานในส่วนขยาย',
- registrationTimeout:
- 'ติดตั้งส่วนขยายแล้ว แต่รันเนอร์ไม่ได้ลงทะเบียน ตรวจรันไทม์ปลั๊กอินแล้วลองใหม่',
-
- defaultModelUnavailable:
- 'ไม่มีโมเดลเริ่มต้นที่พร้อมใช้งาน โปรดลองอีกครั้ง',
- defaultRunnerUnavailable: 'Local Agent ยังไม่พร้อม โปรดลองอีกครั้ง',
- preparingDefault: 'กำลังเตรียม AI เริ่มต้น…',
- title: 'กำหนดค่าเครื่องมือ AI',
- description: 'เลือกเครื่องมือ AI ที่จะขับเคลื่อนความฉลาดของ Bot',
- optionalDescription:
- 'AI เริ่มต้นพร้อมแล้ว ใช้งานได้ทันทีหรือเลือกวิธีเชื่อมต่ออื่น',
- externalTitle: 'เชื่อมต่อ Agent จากแพลตฟอร์มภายนอก',
- externalDescription:
- 'เชื่อมต่อ Dify, n8n, Coze หรือ Agent ภายนอกผ่านปลั๊กอิน Runner',
- ownModelTitle: 'ใช้โมเดลของฉันเอง',
- ownModelDescription:
- 'เพิ่มผู้ให้บริการ แล้วสแกนหรือกรอกโมเดลด้วยตนเองเพื่อเสร็จสิ้นการตั้งค่า',
- ownModelSetupTitle: 'เพิ่มโมเดลของคุณเอง',
- ownModelSetupDescription:
- 'เพิ่มผู้ให้บริการโมเดล ระบบจะสแกนโมเดลแชตโดยอัตโนมัติ หรือคุณสามารถกรอก ID โมเดลด้วยตนเอง',
- addProviderTitle: 'เพิ่มผู้ให้บริการ',
- addProviderDescription:
- 'กรอกรายละเอียดผู้ให้บริการและ API Key ที่ใช้เชื่อมต่อและสแกนโมเดล',
- selectModelTitle: 'เลือกโมเดล',
- selectScannedModelTitle: 'เลือกโมเดล',
- selectScannedModelDescription:
- 'โมเดลที่เลือกจะแทนที่โมเดลหลักในไปป์ไลน์ของบอทนี้',
- scanModelMode: 'สแกนโมเดล',
- manualModelMode: 'เพิ่มด้วยตนเอง',
- scanningModels: 'กำลังสแกนโมเดลที่พร้อมใช้งาน…',
- noScannedModels:
- 'ไม่พบโมเดลแชตที่พร้อมใช้งาน โปรดตรวจสอบการกำหนดค่าผู้ให้บริการ',
- scanModelsFailed:
- 'สแกนโมเดลไม่สำเร็จ โปรดตรวจสอบ URL และ API Key แล้วลองอีกครั้ง',
- manualFallbackFailed:
- 'การสแกนอัตโนมัติไม่สำเร็จ โปรดกรอก ID โมเดลที่ผู้ให้บริการรองรับ',
- manualFallbackEmpty: 'ไม่พบโมเดล โปรดกรอก ID โมเดลที่ผู้ให้บริการรองรับ',
- manualModelId: 'ID โมเดล',
- manualModelIdPlaceholder: 'ตัวอย่าง: gpt-4o',
- manualModelIdDescription: 'กรอกพารามิเตอร์โมเดลที่ใช้ในคำขอโมเดล',
- manualModelOptions: 'ความสามารถเพิ่มเติมของโมเดล',
- editProvider: 'แก้ไขผู้ให้บริการ',
- rescanModels: 'สแกนโมเดลอีกครั้ง',
- moreFeaturesTitle: 'ใช้การตั้งค่าเริ่มต้น',
- moreFeaturesDescription:
- 'ใช้ Local Agent และโมเดลที่แนะนำต่อไป เพิ่มเครื่องมือและฐานความรู้ได้ภายหลัง',
- runnerDescription:
- 'เลือก Runner สำหรับ Agent ภายนอกและกำหนดค่าการเชื่อมต่อ',
- backToChoices: 'กลับไปยังตัวเลือก',
- backToList: 'กลับไปยังรายการ',
- createExternal: 'สร้างและผูก',
- finishWithModel: 'ใช้โมเดลที่เลือกและเสร็จสิ้น',
- openWorkbench: 'เปิดหน้าทำงาน',
- },
- config: {
- botInfo: 'ข้อมูล Bot',
- botNamePlaceholder: 'กรอกชื่อ Bot',
- botDescPlaceholder: 'กรอกคำอธิบาย Bot (ไม่บังคับ)',
- platformConfig: 'การกำหนดค่า {{platform}}',
- aiConfig: 'การกำหนดค่า {{engine}}',
- },
- done: {
- title: 'เสร็จเรียบร้อย!',
- description:
- 'Bot ของคุณถูกสร้างและเชื่อมต่อกับ Pipeline AI แล้ว คุณสามารถจัดการได้จากหน้าทำงาน',
- backToWorkbench: 'กลับไปหน้าทำงาน',
- },
- },
- errorPage: {
- unexpectedError: 'เกิดข้อผิดพลาด',
- unexpectedErrorDescription:
- 'เกิดข้อผิดพลาดที่ไม่คาดคิด กรุณาลองใหม่อีกครั้งในภายหลัง',
- notFound: 'ไม่พบหน้า',
- notFoundDescription: 'หน้าที่คุณกำลังมองหาไม่มีอยู่หรือถูกย้ายแล้ว',
- backendUnavailableStatus: 'แบ็กเอนด์ไม่พร้อมใช้งาน',
- goBack: 'ย้อนกลับ',
- backToHome: 'กลับหน้าหลัก',
- backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
- retrying: 'กำลังลองใหม่',
- retryFailed:
- 'ยังไม่สามารถเชื่อมต่อแบ็กเอนด์ได้ โปรดเริ่มบริการแล้วลองใหม่อีกครั้ง',
- },
- feishu: {
- createApp: 'สร้างแอป Feishu ด้วยคลิกเดียว',
- scanQRCode:
- 'สแกนคิวอาร์โค้ดด้านล่างด้วย Feishu เพื่ออนุญาตและสร้างแอปโดยอัตโนมัติ',
- waitingForScan: 'กำลังรอสแกน',
- createSuccess: 'สร้างแอปสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
- createFailed: 'สร้างแอปไม่สำเร็จ',
- connecting: 'กำลังเชื่อมต่อบริการ Feishu...',
- expired: 'คิวอาร์โค้ดหมดอายุแล้ว กรุณาลองใหม่',
- denied: 'ผู้ใช้ปฏิเสธการอนุญาต',
- connectionLost: 'การเชื่อมต่อขาดหาย กรุณาลองใหม่',
- reconnecting: 'กำลังเชื่อมต่อใหม่...',
- retry: 'ลองใหม่',
- },
- weixin: {
- scanLogin: 'เข้าสู่ระบบ WeChat ด้วยคิวอาร์โค้ด',
- scanQRCode:
- 'สแกนคิวอาร์โค้ดด้านล่างด้วย WeChat เพื่ออนุญาตและกรอกโทเคนอัตโนมัติ',
- loginSuccess: 'เข้าสู่ระบบสำเร็จ และกรอกโทเคนอัตโนมัติแล้ว',
- loginFailed: 'เข้าสู่ระบบไม่สำเร็จ',
- connecting: 'กำลังเชื่อมต่อบริการ WeChat...',
- waitingForScan: 'กำลังรอการสแกน',
- retry: 'ลองอีกครั้ง',
- },
- dingtalk: {
- createApp: 'สร้างแอป DingTalk ด้วยคลิกเดียว',
- scanQRCode:
- 'สแกนคิวอาร์โค้ดด้านล่างด้วย DingTalk เพื่ออนุญาตและสร้างแอปโดยอัตโนมัติ',
- waitingForScan: 'กำลังรอสแกน',
- createSuccess: 'สร้างแอปสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
- createFailed: 'สร้างแอปไม่สำเร็จ',
- connecting: 'กำลังเชื่อมต่อบริการ DingTalk...',
- retry: 'ลองใหม่',
- robotCodeNote:
- 'ไม่สามารถดึงรหัส Robot ได้โดยอัตโนมัติ กรุณาไปที่หลังบ้านนักพัฒนา DingTalk > การตั้งค่า Robot เพื่อคัดลอกด้วยตนเอง ฟิลด์นี้จำเป็นสำหรับฟังก์ชันอย่างการรู้จำภาพและการอัปโหลดไฟล์',
- },
- wecombot: {
- createBot: 'สร้างบอต WeCom ด้วยคลิกเดียว',
- scanQRCode:
- 'สแกนคิวอาร์โค้ดด้านล่างด้วย WeCom เพื่ออนุญาตและสร้างบอตโดยอัตโนมัติ',
- waitingForScan: 'กำลังรอสแกน',
- createSuccess: 'สร้างบอตสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
- createFailed: 'สร้างบอตไม่สำเร็จ',
- connecting: 'กำลังเชื่อมต่อบริการ WeCom...',
- retry: 'ลองใหม่',
- robotNameNote: 'ไม่สามารถดึงชื่อบอตได้โดยอัตโนมัติ กรุณากรอกด้วยตนเอง',
- },
- qqofficial: {
- createBinding: 'ผูกบอต QQ Official ด้วย QR คลิกเดียว',
- scanQRCode:
- 'สแกนคิวอาร์โค้ดด้านล่างด้วย QQ มือถือ แล้วอนุญาตการผูกใน «QQ Bot Assistant»',
- waitingForScan: 'กำลังรอสแกน',
- bindSuccess: 'ผูกสำเร็จ! AppID และ Secret ถูกกรอกอัตโนมัติแล้ว',
- bindFailed: 'การผูกล้มเหลว',
- connecting: 'กำลังเชื่อมต่อบริการ QQ...',
- retry: 'ลองใหม่',
- tokenNote: 'อะแดปเตอร์ปัจจุบันไม่ได้ใช้ฟิลด์ Token จึงเว้นว่างไว้ได้',
- boundBy: 'ผูกโดยผู้ใช้ QQ {{openid}}',
- },
- pluginPages: {
- selectFromSidebar: 'เลือกหน้าปลั๊กอินจากแถบด้านข้าง',
- invalidPage: 'หน้าปลั๊กอินไม่ถูกต้อง',
- },
skills: {
title: 'สกิล',
description: 'สร้างและจัดการสกิลที่สามารถเปิดใช้ระหว่างการสนทนาได้',
@@ -3013,6 +2859,150 @@ const thTH = {
saveFileSuccess: 'บันทึกไฟล์สำเร็จ',
saveFileError: 'บันทึกไฟล์ไม่สำเร็จ: ',
},
+ wizard: {
+ sidebarDescription: 'สร้าง Bot ด้วยขั้นตอนที่แนะนำ',
+ loading: 'กำลังโหลดตัวช่วย...',
+ loadError: 'ไม่สามารถโหลดข้อมูลตัวช่วยได้',
+ skip: 'ข้าม',
+ skipConfirmMessage:
+ 'คุณสามารถเข้าสู่ตัวช่วยเริ่มต้นอย่างรวดเร็วจากเมนูบัญชีในภายหลัง หรือสร้าง Bot ด้วยตนเอง',
+ skipConfirmOk: 'ตกลง',
+ prev: 'ก่อนหน้า',
+ next: 'ถัดไป',
+ finish: 'สร้างและติดตั้ง',
+ confirmCreateBot: 'ยืนยัน สร้าง Bot',
+ createSuccess: 'สร้าง Pipeline และเชื่อมกับ Bot สำเร็จ!',
+ botCreateSuccess: 'สร้าง Bot สำเร็จ!',
+ botSaveSuccess: 'บันทึกและเปิดใช้งาน Bot สำเร็จ!',
+ createError: 'ไม่สามารถสร้างทรัพยากรได้',
+ skipSaveError: 'ไม่สามารถบันทึกสถานะการข้ามได้ กรุณาลองใหม่',
+ completeSaveError: 'ไม่สามารถบันทึกสถานะการเสร็จสิ้นได้ กรุณาลองใหม่',
+ step: {
+ platform: 'แพลตฟอร์ม',
+ botConfig: 'ตั้งค่า Bot',
+ aiEngine: 'เครื่องมือ AI',
+ done: 'เสร็จสิ้น',
+ },
+ platform: {
+ title: 'เลือกแพลตฟอร์ม',
+ description: 'เลือกแพลตฟอร์มข้อความที่ Bot ของคุณจะเชื่อมต่อ',
+ },
+ botConfig: {
+ title: 'กำหนดค่า Bot ของคุณ',
+ description: 'ตั้งค่า Bot ของคุณและตรวจสอบว่าทำงานได้ก่อนดำเนินการต่อ',
+ saveBot: 'บันทึกและเปิดใช้งาน Bot',
+ resaveBot: 'บันทึกการกำหนดค่าอีกครั้ง',
+ botSaved:
+ 'บันทึกและเปิดใช้งาน Bot แล้ว ตรวจสอบบันทึกเพื่อยืนยันการเชื่อมต่อ',
+ waitingForMessage:
+ 'เปิดใช้งาน Bot แล้ว โปรดส่งข้อความจากแพลตฟอร์มแชตเพื่อดำเนินการต่อ',
+ messageReceived: 'Bot ได้รับข้อความแล้ว คุณสามารถไปยังขั้นตอนถัดไปได้',
+ messageReceivedLocalAccountWarning:
+ 'การเชื่อมต่อฝั่ง Bot ได้รับการกำหนดค่าอย่างถูกต้องและได้รับข้อความแล้ว เนื่องจากคุณไม่ได้เข้าสู่ระบบด้วยบัญชี LangBot การเรียกใช้โมเดลอาจล้มเหลว โปรดไปยังขั้นตอนถัดไปเพื่อเพิ่มโมเดลของคุณเอง',
+ pageBotPreviewFailed:
+ 'โหลดแชททดสอบไม่สำเร็จ โปรดบันทึกการตั้งค่าอีกครั้งเพื่อลองใหม่',
+ pageBotTestPrompt:
+ 'เปิดใช้งาน Page Bot แล้ว คลิกฟองแชตที่มุมขวาล่างและส่งข้อความเพื่อตรวจสอบขั้นตอนการสนทนาทั้งหมด',
+ pageBotTestNotice:
+ 'สำหรับการทดสอบเท่านั้น โปรดฝังโค้ดในหน้าเว็บภายนอกจริง',
+ webhookTestPrompt:
+ 'URL Callback พร้อมแล้ว โปรดกำหนดค่าบนแพลตฟอร์มภายนอก แล้วส่งข้อความจริงถึง Bot',
+ httpTestPrompt:
+ 'เปิดใช้งาน HTTP Bot แล้ว ส่งข้อความขาเข้าจริงที่นี่เพื่อตรวจสอบการเชื่อมต่อ',
+ httpTestDefaultMessage: 'สวัสดี นี่คือข้อความทดสอบการเชื่อมต่อ',
+ sendHttpTest: 'ส่งข้อความทดสอบ',
+ httpTestAccepted: 'ระบบรับข้อความทดสอบแล้ว และจะแสดงในบันทึกในอีกสักครู่',
+ httpTestMissingSecret:
+ 'โปรดกรอก Secret สำหรับลงนามข้อความขาเข้าและบันทึกการกำหนดค่าก่อน',
+ httpTestFailed: 'ส่งข้อความทดสอบไม่สำเร็จ: {{error}}',
+ logsTitle: 'บันทึก Bot',
+ logsDescription:
+ 'ตรวจสอบกิจกรรม Bot เพื่อยืนยันว่าการเชื่อมต่อแพลตฟอร์มทำงานอยู่',
+ },
+ aiEngine: {
+ defaultModelUnavailable:
+ 'ไม่มีโมเดลเริ่มต้นที่พร้อมใช้งาน โปรดลองอีกครั้ง',
+ defaultRunnerUnavailable: 'Local Agent ยังไม่พร้อม โปรดลองอีกครั้ง',
+ preparingDefault: 'กำลังเตรียม AI เริ่มต้น…',
+ title: 'กำหนดค่าเครื่องมือ AI',
+ description: 'เลือกเครื่องมือ AI ที่จะขับเคลื่อนความฉลาดของ Bot',
+ optionalDescription:
+ 'AI เริ่มต้นพร้อมแล้ว ใช้งานได้ทันทีหรือเลือกวิธีเชื่อมต่ออื่น',
+ externalTitle: 'เชื่อมต่อ Agent จากแพลตฟอร์มภายนอก',
+ externalDescription:
+ 'เชื่อมต่อ Dify, n8n, Coze หรือ Agent ภายนอกผ่านปลั๊กอิน Runner',
+ ownModelTitle: 'ใช้โมเดลของฉันเอง',
+ ownModelDescription:
+ 'เพิ่มผู้ให้บริการ แล้วสแกนหรือกรอกโมเดลด้วยตนเองเพื่อเสร็จสิ้นการตั้งค่า',
+ ownModelSetupTitle: 'เพิ่มโมเดลของคุณเอง',
+ ownModelSetupDescription:
+ 'เพิ่มผู้ให้บริการโมเดล ระบบจะสแกนโมเดลแชตโดยอัตโนมัติ หรือคุณสามารถกรอก ID โมเดลด้วยตนเอง',
+ addProviderTitle: 'เพิ่มผู้ให้บริการ',
+ addProviderDescription:
+ 'กรอกรายละเอียดผู้ให้บริการและ API Key ที่ใช้เชื่อมต่อและสแกนโมเดล',
+ selectModelTitle: 'เลือกโมเดล',
+ selectScannedModelTitle: 'เลือกโมเดล',
+ selectScannedModelDescription:
+ 'โมเดลที่เลือกจะแทนที่โมเดลหลักในไปป์ไลน์ของบอทนี้',
+ scanModelMode: 'สแกนโมเดล',
+ manualModelMode: 'เพิ่มด้วยตนเอง',
+ scanningModels: 'กำลังสแกนโมเดลที่พร้อมใช้งาน…',
+ noScannedModels:
+ 'ไม่พบโมเดลแชตที่พร้อมใช้งาน โปรดตรวจสอบการกำหนดค่าผู้ให้บริการ',
+ scanModelsFailed:
+ 'สแกนโมเดลไม่สำเร็จ โปรดตรวจสอบ URL และ API Key แล้วลองอีกครั้ง',
+ manualFallbackFailed:
+ 'การสแกนอัตโนมัติไม่สำเร็จ โปรดกรอก ID โมเดลที่ผู้ให้บริการรองรับ',
+ manualFallbackEmpty: 'ไม่พบโมเดล โปรดกรอก ID โมเดลที่ผู้ให้บริการรองรับ',
+ manualModelId: 'ID โมเดล',
+ manualModelIdPlaceholder: 'ตัวอย่าง: gpt-4o',
+ manualModelIdDescription: 'กรอกพารามิเตอร์โมเดลที่ใช้ในคำขอโมเดล',
+ manualModelOptions: 'ความสามารถเพิ่มเติมของโมเดล',
+ editProvider: 'แก้ไขผู้ให้บริการ',
+ rescanModels: 'สแกนโมเดลอีกครั้ง',
+ moreFeaturesTitle: 'ใช้การตั้งค่าเริ่มต้น',
+ moreFeaturesDescription:
+ 'ใช้ Local Agent และโมเดลที่แนะนำต่อไป เพิ่มเครื่องมือและฐานความรู้ได้ภายหลัง',
+ runnerDescription:
+ 'เลือก Runner สำหรับ Agent ภายนอกและกำหนดค่าการเชื่อมต่อ',
+ backToChoices: 'กลับไปยังตัวเลือก',
+ backToList: 'กลับไปยังรายการ',
+ createExternal: 'สร้างและผูก',
+ finishWithModel: 'ใช้โมเดลที่เลือกและเสร็จสิ้น',
+ openWorkbench: 'เปิดหน้าทำงาน',
+ loadingCatalog: 'กำลังโหลดส่วนขยายรันเนอร์...',
+ catalogUnavailable: 'รายการรันเนอร์ไม่พร้อมใช้งาน',
+ catalogUnavailableDescription:
+ 'รันเนอร์ที่ติดตั้งยังใช้ได้ ลองโหลดรายการใหม่หรือเรียกดูส่วนขยาย',
+ noMarketplaceRunners: 'ไม่มีปลั๊กอินรันเนอร์ตรงกับการใช้งานนี้',
+ noMarketplaceRunnersDescription:
+ 'ใช้รันเนอร์ที่ติดตั้งแล้วหรือลองภายหลัง',
+ browseRunners: 'เรียกดูส่วนขยายรันเนอร์',
+ installAndContinue: 'ติดตั้งและดำเนินการต่อ',
+ installing: 'กำลังติดตั้ง...',
+ useInstalled: 'ใช้รันเนอร์นี้',
+ installedUnavailable: 'ติดตั้งแล้ว แต่รันเนอร์ไม่พร้อมใช้',
+ installSuccess: 'ติดตั้งและเลือก {{runner}} แล้ว',
+ installFailed: 'ติดตั้งส่วนขยายรันเนอร์ไม่สำเร็จ',
+ versionUnavailable: 'ตลาดไม่ส่งเวอร์ชันที่ติดตั้งได้กลับมา',
+ installTimeout: 'หมดเวลาติดตั้งรันเนอร์ ตรวจงานในส่วนขยาย',
+ registrationTimeout:
+ 'ติดตั้งส่วนขยายแล้ว แต่รันเนอร์ไม่ได้ลงทะเบียน ตรวจรันไทม์ปลั๊กอินแล้วลองใหม่',
+ },
+ config: {
+ botInfo: 'ข้อมูล Bot',
+ botNamePlaceholder: 'กรอกชื่อ Bot',
+ botDescPlaceholder: 'กรอกคำอธิบาย Bot (ไม่บังคับ)',
+ platformConfig: 'การกำหนดค่า {{platform}}',
+ aiConfig: 'การกำหนดค่า {{engine}}',
+ },
+ done: {
+ title: 'เสร็จเรียบร้อย!',
+ description:
+ 'Bot ของคุณถูกสร้างและเชื่อมต่อกับ Pipeline AI แล้ว คุณสามารถจัดการได้จากหน้าทำงาน',
+ backToWorkbench: 'กลับไปหน้าทำงาน',
+ },
+ },
addExtension: {
installTitle: 'ติดตั้ง {{type}}',
installConfirm: 'ติดตั้ง {{type}} "{{name}}" หรือไม่?',
@@ -3043,90 +3033,82 @@ const thTH = {
createSkillHint: 'นำเข้าจากไดเรกทอรีในเครื่องหรือสร้างด้วยตนเอง',
unsupportedFileType: 'ประเภทไฟล์ไม่รองรับ รองรับเฉพาะไฟล์ .zip และ .lbpkg',
},
-
- 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',
- },
+ errorPage: {
+ unexpectedError: 'เกิดข้อผิดพลาด',
+ unexpectedErrorDescription:
+ 'เกิดข้อผิดพลาดที่ไม่คาดคิด กรุณาลองใหม่อีกครั้งในภายหลัง',
+ notFound: 'ไม่พบหน้า',
+ notFoundDescription: 'หน้าที่คุณกำลังมองหาไม่มีอยู่หรือถูกย้ายแล้ว',
+ backendUnavailableStatus: 'แบ็กเอนด์ไม่พร้อมใช้งาน',
+ goBack: 'ย้อนกลับ',
+ backToHome: 'กลับหน้าหลัก',
+ backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
+ retrying: 'กำลังลองใหม่',
+ retryFailed:
+ 'ยังไม่สามารถเชื่อมต่อแบ็กเอนด์ได้ โปรดเริ่มบริการแล้วลองใหม่อีกครั้ง',
+ },
+ feishu: {
+ createApp: 'สร้างแอป Feishu ด้วยคลิกเดียว',
+ scanQRCode:
+ 'สแกนคิวอาร์โค้ดด้านล่างด้วย Feishu เพื่ออนุญาตและสร้างแอปโดยอัตโนมัติ',
+ waitingForScan: 'กำลังรอสแกน',
+ createSuccess: 'สร้างแอปสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
+ createFailed: 'สร้างแอปไม่สำเร็จ',
+ connecting: 'กำลังเชื่อมต่อบริการ Feishu...',
+ expired: 'คิวอาร์โค้ดหมดอายุแล้ว กรุณาลองใหม่',
+ denied: 'ผู้ใช้ปฏิเสธการอนุญาต',
+ connectionLost: 'การเชื่อมต่อขาดหาย กรุณาลองใหม่',
+ reconnecting: 'กำลังเชื่อมต่อใหม่...',
+ retry: 'ลองใหม่',
+ },
+ weixin: {
+ scanLogin: 'เข้าสู่ระบบ WeChat ด้วยคิวอาร์โค้ด',
+ scanQRCode:
+ 'สแกนคิวอาร์โค้ดด้านล่างด้วย WeChat เพื่ออนุญาตและกรอกโทเคนอัตโนมัติ',
+ loginSuccess: 'เข้าสู่ระบบสำเร็จ และกรอกโทเคนอัตโนมัติแล้ว',
+ loginFailed: 'เข้าสู่ระบบไม่สำเร็จ',
+ connecting: 'กำลังเชื่อมต่อบริการ WeChat...',
+ waitingForScan: 'กำลังรอการสแกน',
+ retry: 'ลองอีกครั้ง',
+ },
+ dingtalk: {
+ createApp: 'สร้างแอป DingTalk ด้วยคลิกเดียว',
+ scanQRCode:
+ 'สแกนคิวอาร์โค้ดด้านล่างด้วย DingTalk เพื่ออนุญาตและสร้างแอปโดยอัตโนมัติ',
+ waitingForScan: 'กำลังรอสแกน',
+ createSuccess: 'สร้างแอปสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
+ createFailed: 'สร้างแอปไม่สำเร็จ',
+ connecting: 'กำลังเชื่อมต่อบริการ DingTalk...',
+ retry: 'ลองใหม่',
+ robotCodeNote:
+ 'ไม่สามารถดึงรหัส Robot ได้โดยอัตโนมัติ กรุณาไปที่หลังบ้านนักพัฒนา DingTalk > การตั้งค่า Robot เพื่อคัดลอกด้วยตนเอง ฟิลด์นี้จำเป็นสำหรับฟังก์ชันอย่างการรู้จำภาพและการอัปโหลดไฟล์',
+ },
+ wecombot: {
+ createBot: 'สร้างบอต WeCom ด้วยคลิกเดียว',
+ scanQRCode:
+ 'สแกนคิวอาร์โค้ดด้านล่างด้วย WeCom เพื่ออนุญาตและสร้างบอตโดยอัตโนมัติ',
+ waitingForScan: 'กำลังรอสแกน',
+ createSuccess: 'สร้างบอตสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
+ createFailed: 'สร้างบอตไม่สำเร็จ',
+ connecting: 'กำลังเชื่อมต่อบริการ WeCom...',
+ retry: 'ลองใหม่',
+ robotNameNote: 'ไม่สามารถดึงชื่อบอตได้โดยอัตโนมัติ กรุณากรอกด้วยตนเอง',
+ },
+ qqofficial: {
+ createBinding: 'ผูกบอต QQ Official ด้วย QR คลิกเดียว',
+ scanQRCode:
+ 'สแกนคิวอาร์โค้ดด้านล่างด้วย QQ มือถือ แล้วอนุญาตการผูกใน «QQ Bot Assistant»',
+ waitingForScan: 'กำลังรอสแกน',
+ bindSuccess: 'ผูกสำเร็จ! AppID และ Secret ถูกกรอกอัตโนมัติแล้ว',
+ bindFailed: 'การผูกล้มเหลว',
+ connecting: 'กำลังเชื่อมต่อบริการ QQ...',
+ retry: 'ลองใหม่',
+ tokenNote: 'อะแดปเตอร์ปัจจุบันไม่ได้ใช้ฟิลด์ Token จึงเว้นว่างไว้ได้',
+ boundBy: 'ผูกโดยผู้ใช้ QQ {{openid}}',
+ },
+ pluginPages: {
+ selectFromSidebar: 'เลือกหน้าปลั๊กอินจากแถบด้านข้าง',
+ invalidPage: 'หน้าปลั๊กอินไม่ถูกต้อง',
},
};
-
export default thTH;
diff --git a/web/src/i18n/locales/vi-VN.ts b/web/src/i18n/locales/vi-VN.ts
index 0276ae1f2..48a0b896b 100644
--- a/web/src/i18n/locales/vi-VN.ts
+++ b/web/src/i18n/locales/vi-VN.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/vi-VN';
-
const viVN = {
assistant: {
modelHint: 'Đổi mô hình trợ lý cho tin nhắn tiếp theo',
@@ -97,81 +96,9 @@ const viVN = {
},
},
},
-
guidedTour: {
eventDebugDescription:
'Chọn sự kiện được hỗ trợ, nhập dữ liệu thử rồi xem đầu ra và kết quả công cụ. Hành động nền tảng được mô phỏng; mô hình và công cụ khác chạy theo cấu hình.',
-
- bot: {
- connection: {
- title: 'Chọn phương thức kết nối',
- description:
- 'Chọn phương thức được bộ chuyển đổi hỗ trợ. Các tham số tương ứng sẽ tự động cập nhật.',
- },
- basic: {
- title: 'Đặt tên bot',
- description:
- 'Dùng tên dễ nhận biết để tìm kết nối này trong định tuyến và nhật ký.',
- },
- adapter: {
- title: 'Chọn bộ chuyển đổi nền tảng',
- description:
- 'Chọn bộ chuyển đổi cho bot. Phương thức kết nối và tham số nền tảng được cấu hình sau khi tạo.',
- },
- parameters: {
- title: 'Cấu hình nền tảng',
- description:
- 'Nhập thông tin xác thực và tham số. Xem tài liệu bộ chuyển đổi để thiết lập phía nền tảng.',
- action: 'Mở tài liệu bộ chuyển đổi',
- },
- routing: {
- title: 'Định tuyến sự kiện đến',
- description: 'Chọn bộ xử lý cho từng sự kiện bot nhận được.',
- },
- save: {
- title: 'Lưu cấu hình bot',
- description:
- 'Kiểm tra tham số kết nối và định tuyến sự kiện rồi lưu. Sau đó bật bot khi sẵn sàng.',
- },
- submit: {
- title: 'Tạo bot',
- description:
- 'Tạo bot ở trạng thái tắt rồi tiếp tục cấu hình kết nối và tham số trên trang bot.',
- },
- },
- knowledge: {
- basic: {
- title: 'Mô tả cơ sở tri thức',
- description:
- 'Đặt tên dễ nhận biết và mô tả tùy chọn trước khi chọn bộ máy lưu trữ và truy xuất.',
- },
- engine: {
- title: 'Kiểm tra bộ máy tri thức',
- description:
- 'Xác nhận bộ máy của cơ sở tri thức này. Tham số và thiết lập truy xuất nằm bên dưới.',
- action: 'Duyệt chợ bộ máy tri thức',
- },
- parameters: {
- title: 'Cấu hình tham số bộ máy',
- description:
- 'Điền thiết lập lưu trữ, mô hình, thông tin xác thực hoặc dịch vụ bên ngoài mà bộ máy yêu cầu.',
- },
- retrieval: {
- title: 'Cấu hình truy xuất',
- description:
- 'Đặt cách bộ máy tìm và trả về nội dung liên quan cho bộ xử lý.',
- },
- save: {
- title: 'Lưu cấu hình cơ sở tri thức',
- description: 'Kiểm tra tham số bộ máy và thiết lập truy xuất rồi lưu.',
- },
- submit: {
- title: 'Tạo cơ sở tri thức',
- description:
- 'Tạo cơ sở tri thức rồi thêm tài liệu hoặc kết nối nguồn mà bộ máy hỗ trợ.',
- },
- },
-
pipeline: {
trigger: {
title: 'Chọn tin nhắn cần trả lời',
@@ -243,12 +170,49 @@ const viVN = {
'Sau khi lưu, thêm cấu hình vào mục bộ xử lý plugin trên trang bot. Các sự kiện plugin khai báo được nhận tự động, không cần định tuyến riêng từng sự kiện.',
},
},
+ previous: 'Bước trước',
label: 'Hướng dẫn sử dụng',
progress: 'Bước {{current}} / {{total}}',
- previous: 'Bước trước',
next: 'Tiếp theo',
finish: 'Hoàn tất hướng dẫn',
skip: 'Bỏ qua',
+ bot: {
+ connection: {
+ title: 'Chọn phương thức kết nối',
+ description:
+ 'Chọn phương thức được bộ chuyển đổi hỗ trợ. Các tham số tương ứng sẽ tự động cập nhật.',
+ },
+ basic: {
+ title: 'Đặt tên bot',
+ description:
+ 'Dùng tên dễ nhận biết để tìm kết nối này trong định tuyến và nhật ký.',
+ },
+ adapter: {
+ title: 'Chọn bộ chuyển đổi nền tảng',
+ description:
+ 'Chọn bộ chuyển đổi cho bot. Phương thức kết nối và tham số nền tảng được cấu hình sau khi tạo.',
+ },
+ parameters: {
+ title: 'Cấu hình nền tảng',
+ description:
+ 'Nhập thông tin xác thực và tham số. Xem tài liệu bộ chuyển đổi để thiết lập phía nền tảng.',
+ action: 'Mở tài liệu bộ chuyển đổi',
+ },
+ routing: {
+ title: 'Định tuyến sự kiện đến',
+ description: 'Chọn bộ xử lý cho từng sự kiện bot nhận được.',
+ },
+ save: {
+ title: 'Lưu cấu hình bot',
+ description:
+ 'Kiểm tra tham số kết nối và định tuyến sự kiện rồi lưu. Sau đó bật bot khi sẵn sàng.',
+ },
+ submit: {
+ title: 'Tạo bot',
+ description:
+ 'Tạo bot ở trạng thái tắt rồi tiếp tục cấu hình kết nối và tham số trên trang bot.',
+ },
+ },
processorCreate: {
type: {
title: 'Chọn loại bộ xử lý',
@@ -287,6 +251,38 @@ const viVN = {
'Mở thẻ Sự kiện và công cụ để chọn sự kiện Agent nhận và các công cụ nền tảng hoặc LangBot được phép sử dụng.',
},
},
+ knowledge: {
+ basic: {
+ title: 'Mô tả cơ sở tri thức',
+ description:
+ 'Đặt tên dễ nhận biết và mô tả tùy chọn trước khi chọn bộ máy lưu trữ và truy xuất.',
+ },
+ engine: {
+ title: 'Kiểm tra bộ máy tri thức',
+ description:
+ 'Xác nhận bộ máy của cơ sở tri thức này. Tham số và thiết lập truy xuất nằm bên dưới.',
+ action: 'Duyệt chợ bộ máy tri thức',
+ },
+ parameters: {
+ title: 'Cấu hình tham số bộ máy',
+ description:
+ 'Điền thiết lập lưu trữ, mô hình, thông tin xác thực hoặc dịch vụ bên ngoài mà bộ máy yêu cầu.',
+ },
+ retrieval: {
+ title: 'Cấu hình truy xuất',
+ description:
+ 'Đặt cách bộ máy tìm và trả về nội dung liên quan cho bộ xử lý.',
+ },
+ save: {
+ title: 'Lưu cấu hình cơ sở tri thức',
+ description: 'Kiểm tra tham số bộ máy và thiết lập truy xuất rồi lưu.',
+ },
+ submit: {
+ title: 'Tạo cơ sở tri thức',
+ description:
+ 'Tạo cơ sở tri thức rồi thêm tài liệu hoặc kết nối nguồn mà bộ máy hỗ trợ.',
+ },
+ },
},
pipelineMigration,
sidebar: {
@@ -305,15 +301,9 @@ const viVN = {
editionCloud: 'Cloud',
},
common: {
- loadFailed: 'Không tải được. Vui lòng thử lại.',
- showSecret: 'Hiện thông tin bí mật',
- hideSecret: 'Ẩn thông tin bí mật',
- editBasicInfo: 'Sửa thông tin cơ bản',
- editBasicInfoDescription: 'Đổi tên, mô tả và biểu tượng.',
- editBasicInfoDescriptionNoIcon: 'Đổi tên và mô tả.',
- management: 'Quản lý',
-
customValue: 'Tùy chỉnh',
+ loadFailed: 'Không tải được. Vui lòng thử lại.',
+ search: 'Tìm kiếm',
login: 'Đăng nhập',
logout: 'Đăng xuất',
accountOptions: 'Cài đặt',
@@ -329,6 +319,8 @@ const viVN = {
loginLoadErrorDesc:
'Không thể kết nối đến máy chủ LangBot. Vui lòng đảm bảo dịch vụ đang chạy và thử lại.',
retry: 'Thử lại',
+ showSecret: 'Hiện thông tin bí mật',
+ hideSecret: 'Ẩn thông tin bí mật',
enterEmail: 'Nhập địa chỉ email',
enterPassword: 'Nhập mật khẩu',
invalidEmail: 'Vui lòng nhập địa chỉ email hợp lệ',
@@ -340,6 +332,10 @@ const viVN = {
joinDiscord: 'Tham gia Discord',
create: 'Tạo',
edit: 'Chỉnh sửa',
+ editBasicInfo: 'Sửa thông tin cơ bản',
+ editBasicInfoDescription: 'Đổi tên, mô tả và biểu tượng.',
+ editBasicInfoDescriptionNoIcon: 'Đổi tên và mô tả.',
+ management: 'Quản lý',
delete: 'Xóa',
add: 'Thêm',
select: 'Chọn',
@@ -485,12 +481,11 @@ const viVN = {
actions: 'Hành động',
apiKeyCreatedMessage:
'Vui lòng sao chép khóa API này, nếu nút không hoạt động, vui lòng sao chép thủ công.',
+ apiKeyStoredSecurely: 'Secret shown only when created',
none: 'Không có',
more: 'Thêm ({{count}})',
less: 'Thu gọn',
noItems: 'Không có mục nào',
-
- apiKeyStoredSecurely: 'Secret shown only when created',
},
notFound: {
title: 'Không tìm thấy trang',
@@ -647,6 +642,10 @@ const viVN = {
loginWithSpace: 'Đăng nhập bằng tài khoản LangBot',
loginToUseModels:
'Đăng nhập bằng tài khoản LangBot để sử dụng mô hình đám mây',
+ ownerMustBindSpace:
+ 'The Workspace owner must connect a LangBot Account for LangBot Models.',
+ usesOwnerSpaceBilling:
+ "Uses the Workspace owner's LangBot Account billing and credits.",
noModels: 'Chưa cấu hình mô hình nào',
availability: {
available: 'Khả dụng ở lần kiểm tra gần nhất',
@@ -699,13 +698,44 @@ const viVN = {
fallbackList: 'Mô hình dự phòng',
addFallback: 'Thêm mô hình dự phòng',
},
-
- ownerMustBindSpace:
- 'The Workspace owner must connect a LangBot Account for LangBot Models.',
- usesOwnerSpaceBilling:
- "Uses the Workspace owner's LangBot Account billing and credits.",
},
bots: {
+ pluginSubscriptions: {
+ incompleteEvents:
+ 'Bot hiện chỉ hỗ trợ một số sự kiện mà bộ xử lý theo dõi ({{events}}). Bộ xử lý có thể không hoạt động đầy đủ trong mọi trường hợp.',
+ description:
+ 'Tự động nhận sự kiện do plugin khai báo, hoạt động độc lập với các tuyến ở trên.',
+ empty: 'Chưa liên kết bộ xử lý plugin.',
+ add: 'Thêm bộ xử lý plugin',
+ existing: 'Chọn cấu hình',
+ new: 'Cấu hình mới',
+ noExisting: 'Chưa có cấu hình khả dụng. Hãy tạo mới.',
+ shared:
+ 'Các bot dùng chung cấu hình sẽ chia sẻ thiết lập và trạng thái chạy.',
+ saveHint: 'Lưu bot để kích hoạt liên kết.',
+ createAndBind: 'Tạo và liên kết',
+ created: 'Đã tạo cấu hình. Lưu bot để kích hoạt liên kết.',
+ enable: 'Bật {{name}}',
+ remove: 'Hủy liên kết {{name}}',
+ configure: 'Cấu hình',
+ logs: 'Xem nhật ký',
+ },
+ applyFailed: 'Đã lưu cấu hình nhưng không thể áp dụng',
+ internalErrorHint:
+ 'Đã xảy ra lỗi nội bộ. Hãy kiểm tra nhật ký máy chủ bằng mã lỗi.',
+ errorReference: 'Mã lỗi: {{id}}',
+ title: 'Bot',
+ description:
+ 'Tạo và quản lý Bot, là điểm kết nối của LangBot với các nền tảng khác nhau',
+ createBot: 'Tạo Bot',
+ selectFromSidebar: 'Chọn một Bot từ thanh bên',
+ editBot: 'Chỉnh sửa Bot',
+ getBotListError: 'Lấy danh sách Bot thất bại: ',
+ botName: 'Tên Bot',
+ botDescription: 'Mô tả Bot',
+ botNameRequired: 'Tên Bot không được để trống',
+ botDescriptionRequired: 'Mô tả Bot không được để trống',
+ adapterRequired: 'Adapter không được để trống',
connectionMode: 'Phương thức kết nối',
connectionModeDescription:
'Chọn phương thức kết nối được bộ chuyển đổi hỗ trợ.',
@@ -717,6 +747,44 @@ const viVN = {
'LangBot duy trì kết nối socket hoặc luồng đi ra.',
noAdaptersForConnectionMode:
'Không có bộ chuyển đổi đã cài đặt nào hỗ trợ phương thức này.',
+ defaultDescription: 'Một Bot',
+ getBotConfigError: 'Lấy cấu hình Bot thất bại: ',
+ saveSuccess: 'Lưu thành công',
+ saveError: 'Lưu thất bại: ',
+ createSuccess: 'Tạo thành công. Vui lòng cấu hình định tuyến sự kiện',
+ createError: 'Tạo thất bại: ',
+ deleteSuccess: 'Xóa thành công',
+ deleteError: 'Xóa thất bại: ',
+ deleteConfirmation: 'Bạn có chắc chắn muốn xóa Bot này không?',
+ platformAdapter: 'Nền tảng/Lựa chọn Adapter',
+ selectAdapter: 'Chọn Adapter',
+ legacyAdapters: 'Adapter cũ',
+ legacyAdapterBadge: 'Cũ',
+ legacyAdaptersHint:
+ 'Các adapter này đã có phiên bản hướng sự kiện mới hơn.\nChúng chỉ được giữ lại để tương thích với cấu hình hiện có và không được khuyến nghị cho Bot mới.',
+ adapterConfig: 'Cấu hình Adapter',
+ viewAdapterDocs: 'Xem tài liệu',
+ bindPipeline: 'Liên kết Pipeline',
+ selectPipeline: 'Chọn Pipeline',
+ selectBot: 'Chọn Bot',
+ botLogTitle: 'Nhật ký Bot',
+ enableAutoRefresh: 'Bật tự động làm mới',
+ session: 'Phiên',
+ yesterday: 'Hôm qua',
+ earlier: 'Trước đó',
+ dateFormat: '{{day}}/{{month}}',
+ setBotEnableError: 'Thiết lập trạng thái bật Bot thất bại',
+ log: 'Nhật ký',
+ configuration: 'Cấu hình',
+ logs: 'Nhật ký',
+ basicInfo: 'Thông tin cơ bản',
+ basicInfoDescription: 'Đặt tên và mô tả Bot',
+ routingConnection: 'Định tuyến & Kết nối',
+ routingConnectionDescription:
+ 'Liên kết Pipeline xử lý tin nhắn cho Bot này',
+ eventRouting: 'Định tuyến sự kiện',
+ eventRoutingDescription:
+ 'Chọn bộ xử lý cho từng sự kiện của Bot. Chỉnh sửa logic trong cấu hình Agent hoặc Pipeline tương ứng. Pipeline chỉ hỗ trợ sự kiện tin nhắn.',
eventBindings: 'Định tuyến sự kiện',
addEventBinding: 'Thêm tuyến',
addBehavior: 'Thêm hành vi',
@@ -778,6 +846,7 @@ const viVN = {
routeFallbackIgnored:
'Sự kiện không khớp tuyến nào sẽ bị bỏ qua. Chỉ thêm tuyến nhận tất cả khi mọi sự kiện cần kết quả rõ ràng.',
testRoute: 'Kiểm tra tuyến',
+ adapterEventDebugAction: 'Kiểm tra lắng nghe',
adapterEventDebugTitle: 'Gỡ lỗi sự kiện nền tảng',
adapterEventDebugDescription:
'Tạo sự kiện trên {{platform}}. Sự kiện sẽ xuất hiện khi bộ chuyển đổi nhận được.',
@@ -856,6 +925,25 @@ const viVN = {
dryRunDiagnosticMatched: '{{route}} khớp. {{reason}}',
dryRunDiagnosticSkipped: 'Đã bỏ qua {{route}}. {{reason}}',
eventCustom: 'Sự kiện tùy chỉnh',
+ eventWildcard: 'Tất cả sự kiện',
+ eventNamespaceWildcard: '{{namespace}}.*',
+ eventNames: {
+ message_received: 'Nhận tin nhắn',
+ message_edited: 'Tin nhắn được chỉnh sửa',
+ message_deleted: 'Tin nhắn bị xóa',
+ message_reaction: 'Cảm xúc cho tin nhắn',
+ feedback_received: 'Nhận phản hồi',
+ friend_request_received: 'Nhận lời mời kết bạn',
+ friend_added: 'Đã thêm bạn',
+ group_member_joined: 'Thành viên tham gia nhóm',
+ group_member_left: 'Thành viên rời nhóm',
+ group_member_banned: 'Thành viên bị cấm tham gia nhóm',
+ bot_invited_to_group: 'Bot được mời vào nhóm',
+ bot_removed_from_group: 'Bot bị xóa khỏi nhóm',
+ bot_muted: 'Bot bị cấm gửi tin nhắn',
+ bot_unmuted: 'Bot được phép gửi tin nhắn trở lại',
+ platform_specific: 'Sự kiện riêng của nền tảng',
+ },
eventDescriptions: {
all: 'Khớp mọi sự kiện bộ chuyển đổi này nhận được.',
namespace: 'Khớp mọi sự kiện {{group}}.',
@@ -900,102 +988,6 @@ const viVN = {
operator_not_contains: 'không chứa',
operator_starts_with: 'bắt đầu bằng',
operator_regex: 'biểu thức chính quy',
-
- eventWildcard: 'Tất cả sự kiện',
- eventNamespaceWildcard: '{{namespace}}.*',
- eventNames: {
- message_received: 'Nhận tin nhắn',
- message_edited: 'Tin nhắn được chỉnh sửa',
- message_deleted: 'Tin nhắn bị xóa',
- message_reaction: 'Cảm xúc cho tin nhắn',
- feedback_received: 'Nhận phản hồi',
- friend_request_received: 'Nhận lời mời kết bạn',
- friend_added: 'Đã thêm bạn',
- group_member_joined: 'Thành viên tham gia nhóm',
- group_member_left: 'Thành viên rời nhóm',
- group_member_banned: 'Thành viên bị cấm tham gia nhóm',
- bot_invited_to_group: 'Bot được mời vào nhóm',
- bot_removed_from_group: 'Bot bị xóa khỏi nhóm',
- bot_muted: 'Bot bị cấm gửi tin nhắn',
- bot_unmuted: 'Bot được phép gửi tin nhắn trở lại',
- platform_specific: 'Sự kiện riêng của nền tảng',
- },
- pluginSubscriptions: {
- incompleteEvents:
- 'Bot hiện chỉ hỗ trợ một số sự kiện mà bộ xử lý theo dõi ({{events}}). Bộ xử lý có thể không hoạt động đầy đủ trong mọi trường hợp.',
- description:
- 'Tự động nhận sự kiện do plugin khai báo, hoạt động độc lập với các tuyến ở trên.',
- empty: 'Chưa liên kết bộ xử lý plugin.',
- add: 'Thêm bộ xử lý plugin',
- existing: 'Chọn cấu hình',
- new: 'Cấu hình mới',
- noExisting: 'Chưa có cấu hình khả dụng. Hãy tạo mới.',
- shared:
- 'Các bot dùng chung cấu hình sẽ chia sẻ thiết lập và trạng thái chạy.',
- saveHint: 'Lưu bot để kích hoạt liên kết.',
- createAndBind: 'Tạo và liên kết',
- created: 'Đã tạo cấu hình. Lưu bot để kích hoạt liên kết.',
- enable: 'Bật {{name}}',
- remove: 'Hủy liên kết {{name}}',
- configure: 'Cấu hình',
- logs: 'Xem nhật ký',
- },
- applyFailed: 'Đã lưu cấu hình nhưng không thể áp dụng',
- internalErrorHint:
- 'Đã xảy ra lỗi nội bộ. Hãy kiểm tra nhật ký máy chủ bằng mã lỗi.',
- errorReference: 'Mã lỗi: {{id}}',
-
- adapterEventDebugAction: 'Kiểm tra lắng nghe',
- title: 'Bot',
- description:
- 'Tạo và quản lý Bot, là điểm kết nối của LangBot với các nền tảng khác nhau',
- createBot: 'Tạo Bot',
- selectFromSidebar: 'Chọn một Bot từ thanh bên',
- editBot: 'Chỉnh sửa Bot',
- getBotListError: 'Lấy danh sách Bot thất bại: ',
- botName: 'Tên Bot',
- botDescription: 'Mô tả Bot',
- botNameRequired: 'Tên Bot không được để trống',
- botDescriptionRequired: 'Mô tả Bot không được để trống',
- adapterRequired: 'Adapter không được để trống',
- defaultDescription: 'Một Bot',
- getBotConfigError: 'Lấy cấu hình Bot thất bại: ',
- saveSuccess: 'Lưu thành công',
- saveError: 'Lưu thất bại: ',
- createSuccess: 'Tạo thành công. Vui lòng cấu hình định tuyến sự kiện',
- createError: 'Tạo thất bại: ',
- deleteSuccess: 'Xóa thành công',
- deleteError: 'Xóa thất bại: ',
- deleteConfirmation: 'Bạn có chắc chắn muốn xóa Bot này không?',
- platformAdapter: 'Nền tảng/Lựa chọn Adapter',
- selectAdapter: 'Chọn Adapter',
- legacyAdapters: 'Adapter cũ',
- legacyAdapterBadge: 'Cũ',
- legacyAdaptersHint:
- 'Các adapter này đã có phiên bản hướng sự kiện mới hơn.\nChúng chỉ được giữ lại để tương thích với cấu hình hiện có và không được khuyến nghị cho Bot mới.',
- adapterConfig: 'Cấu hình Adapter',
- viewAdapterDocs: 'Xem tài liệu',
- bindPipeline: 'Liên kết Pipeline',
- selectPipeline: 'Chọn Pipeline',
- selectBot: 'Chọn Bot',
- botLogTitle: 'Nhật ký Bot',
- enableAutoRefresh: 'Bật tự động làm mới',
- session: 'Phiên',
- yesterday: 'Hôm qua',
- earlier: 'Trước đó',
- dateFormat: '{{day}}/{{month}}',
- setBotEnableError: 'Thiết lập trạng thái bật Bot thất bại',
- log: 'Nhật ký',
- configuration: 'Cấu hình',
- logs: 'Nhật ký',
- basicInfo: 'Thông tin cơ bản',
- basicInfoDescription: 'Đặt tên và mô tả Bot',
- routingConnection: 'Định tuyến & Kết nối',
- routingConnectionDescription:
- 'Liên kết Pipeline xử lý tin nhắn cho Bot này',
- eventRouting: 'Định tuyến sự kiện',
- eventRoutingDescription:
- 'Chọn bộ xử lý cho từng sự kiện của Bot. Chỉnh sửa logic trong cấu hình Agent hoặc Pipeline tương ứng. Pipeline chỉ hỗ trợ sự kiện tin nhắn.',
routingRules: 'Quy tắc định tuyến có điều kiện',
routingRulesDescription:
'Các quy tắc được đánh giá theo thứ tự; kết quả khớp đầu tiên sẽ định tuyến đến pipeline tương ứng. Nếu không khớp, pipeline mặc định ở trên sẽ được sử dụng.',
@@ -1080,6 +1072,10 @@ const viVN = {
discarded: 'Đã loại bỏ',
userMessage: 'Người dùng',
botMessage: 'Trợ lý',
+ totalSessions: '{{count}} phiên',
+ userSearch: 'ID hoặc tên người dùng',
+ startDate: 'Ngày bắt đầu',
+ endDate: 'Ngày kết thúc',
},
admins: {
title: 'Admins',
@@ -1097,12 +1093,115 @@ const viVN = {
deleteError: 'Failed to remove admin: ',
noAdmins: 'No admins configured',
setAdminTitle: 'Set as admin',
- removeAdminTitle: 'Remove admin',
adminBadge: 'Admin',
configureAdmins: 'Manage Admins',
+ removeAdminTitle: 'Remove admin',
},
},
agents: {
+ monitoring: {
+ description:
+ 'Xem sự kiện kích hoạt, đầu ra mô hình và quá trình gọi công cụ của mỗi tác vụ.',
+ empty: 'Chưa có lượt chạy. Kích hoạt sự kiện hoặc chạy thử gỡ lỗi.',
+ input: 'Đầu vào kích hoạt',
+ eventData: 'Dữ liệu sự kiện',
+ execution: 'Quá trình thực thi',
+ rawEvents: 'Sự kiện gốc',
+ inputUnavailable: 'Đầu vào của lượt chạy này chưa được ghi lại.',
+ },
+ eventProcessor: {
+ configurations: 'Cấu hình bộ xử lý plugin',
+ configTab: 'Cấu hình',
+ logsTab: 'Nhật ký',
+ noSettings: 'Bộ xử lý plugin này không cần cấu hình.',
+ createPageTitle: 'Tạo bộ xử lý sự kiện',
+ processWithPlugin: 'Xử lý bằng mã plugin',
+ pluginSettings: 'Cài đặt plugin',
+ pluginSettingsDescription: 'Tham số do plugin này khai báo.',
+ selectToDebug: 'Chọn plugin ở trên để bắt đầu gỡ lỗi.',
+ debugOutput: 'Đầu ra bộ xử lý',
+ debugDescription:
+ 'Sự kiện đầu vào, nhật ký plugin và kết quả hành động của lần kiểm thử này.',
+ debugNotice:
+ 'Plugin xử lý sự kiện kiểm thử. Hành động nền tảng dùng Mock và không gửi tin nhắn thật; các công cụ khác chạy theo cấu hình.',
+ create: 'Tạo bộ xử lý plugin',
+ type: 'Bộ xử lý plugin',
+ description: 'Xử lý sự kiện bằng mã và logic do plugin cung cấp.',
+ component: 'Bộ xử lý plugin',
+ selectComponent: 'Chọn bộ xử lý plugin',
+ unavailable: 'Thành phần không khả dụng',
+ noComponents: 'Chưa cài plugin cung cấp bộ xử lý.',
+ installPlugin: 'Cài plugin',
+ loadError: 'Không thể tải chi tiết.',
+ refresh: 'Làm mới',
+ runs: 'Lịch sử chạy',
+ noRuns: 'Chưa có lần chạy nào. Liên kết bộ xử lý với bot để bắt đầu.',
+ bindBot: 'Liên kết với bot',
+ trace: 'Nhật ký và luồng tin nhắn',
+ selectRun: 'Chọn một lần chạy để xem chi tiết.',
+ input: 'Sự kiện đầu vào',
+ destination: 'Đích gửi',
+ loadMore: 'Tải thêm',
+ activation: 'Cài plugin, tạo cấu hình bộ xử lý rồi liên kết bot.',
+ status_timeout: 'Hết thời gian',
+ status_pending: 'Đang chờ',
+ status_running: 'Đang chạy',
+ status_completed: 'Hoàn tất',
+ status_failed: 'Thất bại',
+ status_cancelled: 'Đã hủy',
+ status_queued: 'Trong hàng đợi',
+ trace_run_completed: 'Chạy hoàn tất',
+ trace_run_failed: 'Chạy thất bại',
+ trace_tool_call_started: 'Bắt đầu hành động',
+ trace_tool_call_completed: 'Kết quả hành động',
+ },
+ debugData: {
+ chatId: 'ID cuộc trò chuyện',
+ feedbackType: 'Loại phản hồi (1: thích, 2: không thích, 3: hủy)',
+ title: 'Dữ liệu sự kiện',
+ form: 'Trường thường dùng',
+ json: 'JSON đầy đủ',
+ groupId: 'ID nhóm',
+ memberId: 'ID thành viên',
+ memberName: 'Tên thành viên',
+ userId: 'ID người dùng',
+ userName: 'Tên người dùng',
+ requesterId: 'ID người yêu cầu',
+ requesterName: 'Tên người yêu cầu',
+ messageId: 'ID tin nhắn',
+ duration: 'Thời lượng (giây)',
+ message: 'Nội dung tin nhắn',
+ newMessage: 'Nội dung đã sửa',
+ verificationMessage: 'Tin nhắn xác minh',
+ reaction: 'Biểu cảm',
+ groupName: 'Tên nhóm',
+ feedback: 'Phản hồi',
+ rating: 'Đánh giá',
+ eventName: 'Tên sự kiện',
+ privateChat: 'Để trống cho trò chuyện riêng',
+ sampleUser: 'Người dùng thử',
+ sampleMessage: 'Xin chào',
+ sampleFeedback: 'Rất hữu ích',
+ invalidField: 'Kiểm tra {{field}}',
+ },
+ title: 'Bộ xử lý',
+ description:
+ 'Tạo bộ xử lý có thể tái sử dụng và dùng chúng trong định tuyến sự kiện của bot',
+ create: 'Tạo bộ xử lý',
+ editAgent: 'Chỉnh sửa Agent',
+ selectFromSidebar: 'Chọn bộ xử lý từ thanh bên',
+ agentType: 'Agent',
+ agentTypeDescription:
+ 'Dùng runner để xử lý tin nhắn, thành viên nhóm, bạn bè, phản hồi và các sự kiện nền tảng khác.',
+ pipelineType: 'Quy trình',
+ kindBadgeAgent: 'Agent',
+ kindBadgePipeline: 'Pipeline',
+ groupByKind: 'Nhóm theo loại',
+ groupByKindShort: 'Nhóm',
+ pipelineTypeDescription:
+ 'Chạy theo quy trình cố định: nhận tin nhắn, gọi AI và trả lời người dùng, với cơ sở tri thức và plugin có thể cấu hình. Chỉ xử lý sự kiện tin nhắn, phù hợp với tác vụ có các bước rõ ràng và cần kiểm soát quá trình xử lý.',
+ allEvents: 'Hỗ trợ tất cả sự kiện',
+ messageEventsOnly: 'Chỉ sự kiện tin nhắn',
chooseType: 'Chọn cách hoạt động',
chooseTypeDescription:
'Chọn loại bộ xử lý trước. Bạn có thể cấu hình thêm sau khi tạo.',
@@ -1128,8 +1227,15 @@ const viVN = {
diagramAI: 'AI',
diagramPostprocess: 'Tinh chỉnh',
diagramOutput: 'Đầu ra',
+ basicInfo: 'Thông tin cơ bản',
+ basicInfoDescription: 'Đặt tên, biểu tượng và mô tả',
+ runnerSettings: 'Runner',
+ advanced: 'Nâng cao',
eventsAndTools: 'Sự kiện và công cụ',
eventsAndToolsDescription: 'Đặt sự kiện kích hoạt và công cụ có thể dùng.',
+ bindableEvents: 'Phạm vi sự kiện có thể gắn',
+ bindableEventsDescription:
+ 'Giới hạn những tuyến sự kiện bot có thể chọn Agent này. Mặc định phù hợp với hầu hết trường hợp.',
configuredEvents: 'Sự kiện đã thêm',
configuredEventsCount: 'Tổng {{count}}',
addEvent: 'Thêm sự kiện',
@@ -1177,6 +1283,26 @@ const viVN = {
write: 'Hành động',
dangerous: 'Nhạy cảm',
},
+ supportedEvents: 'Phạm vi sự kiện',
+ supportedEventsDescription:
+ 'Chọn tất cả sự kiện, một nhóm hoặc từng sự kiện. Tuyến bot chỉ hiển thị Agent này cho các sự kiện phù hợp.',
+ searchEvents: 'Tìm sự kiện…',
+ noEventsFound: 'Không tìm thấy sự kiện phù hợp',
+ nameRequired: 'Tên không được để trống',
+ createSuccess: 'Tạo thành công',
+ createError: 'Tạo thất bại: ',
+ loadError: 'Tải thất bại: ',
+ saveSuccess: 'Lưu thành công',
+ saveError: 'Lưu thất bại: ',
+ deleteSuccess: 'Xóa thành công',
+ deleteError: 'Xóa thất bại: ',
+ deleteConfirmation: 'Bạn có chắc muốn xóa Agent này không?',
+ dangerZone: 'Vùng nguy hiểm',
+ dangerZoneDescription: 'Hành động không thể hoàn tác và mang tính phá hủy',
+ deleteAgentAction: 'Xóa Agent này',
+ deleteAgentHint:
+ 'Sau khi xóa, các sự kiện đã gắn vào nó sẽ không thể thực thi được nữa.',
+ noRunnerMetadata: 'Hiện chưa có siêu dữ liệu Runner khả dụng.',
runnerStatusLoading: 'Đang kiểm tra trạng thái trình chạy',
runnerStatusCheckFailed: 'Không kiểm tra được trạng thái trình chạy',
runnerStatusCheckFailedDescription:
@@ -1270,140 +1396,6 @@ const viVN = {
debugReviewRunnerConfig: 'Kiểm tra cấu hình trình chạy',
debugErrorDetails: 'Xem chi tiết lỗi',
debugRunFailed: 'Chạy gỡ lỗi Agent thất bại',
-
- monitoring: {
- description:
- 'Xem sự kiện kích hoạt, đầu ra mô hình và quá trình gọi công cụ của mỗi tác vụ.',
- empty: 'Chưa có lượt chạy. Kích hoạt sự kiện hoặc chạy thử gỡ lỗi.',
- input: 'Đầu vào kích hoạt',
- eventData: 'Dữ liệu sự kiện',
- execution: 'Quá trình thực thi',
- rawEvents: 'Sự kiện gốc',
- inputUnavailable: 'Đầu vào của lượt chạy này chưa được ghi lại.',
- },
- eventProcessor: {
- configurations: 'Cấu hình bộ xử lý plugin',
- configTab: 'Cấu hình',
- logsTab: 'Nhật ký',
- noSettings: 'Bộ xử lý plugin này không cần cấu hình.',
- createPageTitle: 'Tạo bộ xử lý sự kiện',
- processWithPlugin: 'Xử lý bằng mã plugin',
- pluginSettings: 'Cài đặt plugin',
- pluginSettingsDescription: 'Tham số do plugin này khai báo.',
- selectToDebug: 'Chọn plugin ở trên để bắt đầu gỡ lỗi.',
-
- debugOutput: 'Đầu ra bộ xử lý',
- debugDescription:
- 'Sự kiện đầu vào, nhật ký plugin và kết quả hành động của lần kiểm thử này.',
- debugNotice:
- 'Plugin xử lý sự kiện kiểm thử. Hành động nền tảng dùng Mock và không gửi tin nhắn thật; các công cụ khác chạy theo cấu hình.',
-
- create: 'Tạo bộ xử lý plugin',
- type: 'Bộ xử lý plugin',
- description: 'Xử lý sự kiện bằng mã và logic do plugin cung cấp.',
- component: 'Bộ xử lý plugin',
- selectComponent: 'Chọn bộ xử lý plugin',
- unavailable: 'Thành phần không khả dụng',
- noComponents: 'Chưa cài plugin cung cấp bộ xử lý.',
- installPlugin: 'Cài plugin',
- loadError: 'Không thể tải chi tiết.',
- refresh: 'Làm mới',
- runs: 'Lịch sử chạy',
- noRuns: 'Chưa có lần chạy nào. Liên kết bộ xử lý với bot để bắt đầu.',
- bindBot: 'Liên kết với bot',
- trace: 'Nhật ký và luồng tin nhắn',
- selectRun: 'Chọn một lần chạy để xem chi tiết.',
- input: 'Sự kiện đầu vào',
- destination: 'Đích gửi',
- loadMore: 'Tải thêm',
- activation: 'Cài plugin, tạo cấu hình bộ xử lý rồi liên kết bot.',
- status_timeout: 'Hết thời gian',
- status_pending: 'Đang chờ',
- status_running: 'Đang chạy',
- status_completed: 'Hoàn tất',
- status_failed: 'Thất bại',
- status_cancelled: 'Đã hủy',
- status_queued: 'Trong hàng đợi',
- trace_run_completed: 'Chạy hoàn tất',
- trace_run_failed: 'Chạy thất bại',
- trace_tool_call_started: 'Bắt đầu hành động',
- trace_tool_call_completed: 'Kết quả hành động',
- },
- debugData: {
- chatId: 'ID cuộc trò chuyện',
- feedbackType: 'Loại phản hồi (1: thích, 2: không thích, 3: hủy)',
-
- title: 'Dữ liệu sự kiện',
- form: 'Trường thường dùng',
- json: 'JSON đầy đủ',
- groupId: 'ID nhóm',
- memberId: 'ID thành viên',
- memberName: 'Tên thành viên',
- userId: 'ID người dùng',
- userName: 'Tên người dùng',
- requesterId: 'ID người yêu cầu',
- requesterName: 'Tên người yêu cầu',
- messageId: 'ID tin nhắn',
- duration: 'Thời lượng (giây)',
- message: 'Nội dung tin nhắn',
- newMessage: 'Nội dung đã sửa',
- verificationMessage: 'Tin nhắn xác minh',
- reaction: 'Biểu cảm',
- groupName: 'Tên nhóm',
- feedback: 'Phản hồi',
- rating: 'Đánh giá',
- eventName: 'Tên sự kiện',
- privateChat: 'Để trống cho trò chuyện riêng',
- sampleUser: 'Người dùng thử',
- sampleMessage: 'Xin chào',
- sampleFeedback: 'Rất hữu ích',
- invalidField: 'Kiểm tra {{field}}',
- },
- title: 'Bộ xử lý',
- description:
- 'Tạo bộ xử lý có thể tái sử dụng và dùng chúng trong định tuyến sự kiện của bot',
- create: 'Tạo bộ xử lý',
- editAgent: 'Chỉnh sửa Agent',
- selectFromSidebar: 'Chọn bộ xử lý từ thanh bên',
- agentType: 'Agent',
- agentTypeDescription:
- 'Dùng runner để xử lý tin nhắn, thành viên nhóm, bạn bè, phản hồi và các sự kiện nền tảng khác.',
- pipelineType: 'Quy trình',
- kindBadgeAgent: 'Agent',
- kindBadgePipeline: 'Pipeline',
- groupByKind: 'Nhóm theo loại',
- groupByKindShort: 'Nhóm',
- pipelineTypeDescription:
- 'Chạy theo quy trình cố định: nhận tin nhắn, gọi AI và trả lời người dùng, với cơ sở tri thức và plugin có thể cấu hình. Chỉ xử lý sự kiện tin nhắn, phù hợp với tác vụ có các bước rõ ràng và cần kiểm soát quá trình xử lý.',
- allEvents: 'Hỗ trợ tất cả sự kiện',
- messageEventsOnly: 'Chỉ sự kiện tin nhắn',
- basicInfo: 'Thông tin cơ bản',
- basicInfoDescription: 'Đặt tên, biểu tượng và mô tả',
- runnerSettings: 'Runner',
- advanced: 'Nâng cao',
- bindableEvents: 'Phạm vi sự kiện có thể gắn',
- bindableEventsDescription:
- 'Giới hạn những tuyến sự kiện bot có thể chọn Agent này. Mặc định phù hợp với hầu hết trường hợp.',
- supportedEvents: 'Phạm vi sự kiện',
- supportedEventsDescription:
- 'Chọn tất cả sự kiện, một nhóm hoặc từng sự kiện. Tuyến bot chỉ hiển thị Agent này cho các sự kiện phù hợp.',
- searchEvents: 'Tìm sự kiện…',
- noEventsFound: 'Không tìm thấy sự kiện phù hợp',
- nameRequired: 'Tên không được để trống',
- createSuccess: 'Tạo thành công',
- createError: 'Tạo thất bại: ',
- loadError: 'Tải thất bại: ',
- saveSuccess: 'Lưu thành công',
- saveError: 'Lưu thất bại: ',
- deleteSuccess: 'Xóa thành công',
- deleteError: 'Xóa thất bại: ',
- deleteConfirmation: 'Bạn có chắc muốn xóa Agent này không?',
- dangerZone: 'Vùng nguy hiểm',
- dangerZoneDescription: 'Hành động không thể hoàn tác và mang tính phá hủy',
- deleteAgentAction: 'Xóa Agent này',
- deleteAgentHint:
- 'Sau khi xóa, các sự kiện đã gắn vào nó sẽ không thể thực thi được nữa.',
- noRunnerMetadata: 'Hiện chưa có siêu dữ liệu Runner khả dụng.',
},
plugins: {
title: 'Tiện ích mở rộng',
@@ -1520,6 +1512,7 @@ const viVN = {
components: 'Thành phần',
ready: 'Gói plugin đã được giải nén. Xác nhận để bắt đầu cài đặt.',
},
+ uploadPluginOnly: 'Chỉ hỗ trợ gói plugin .lbpkg',
dragToUpload: 'Kéo tệp plugin vào đây để tải lên',
unsupportedFileType:
'Loại tệp không được hỗ trợ, chỉ hỗ trợ tệp .lbpkg và .zip',
@@ -1590,18 +1583,19 @@ const viVN = {
installFromGithubDesc: 'Cài đặt plugin từ GitHub Release',
goToMarketplace: 'Đi đến chợ ứng dụng',
installProgress: {
+ title: 'Đang cài đặt {{name}}',
updateTitle: 'Đang cập nhật {{name}}',
+ titleGeneric: 'Cài đặt Plugin',
+ titlePlugin: 'Đang cài đặt plugin {{name}}',
+ titleMCP: 'Đang cài đặt máy chủ MCP {{name}}',
+ titleSkill: 'Đang cài đặt kỹ năng {{name}}',
+ overallProgress: 'Tiến độ tổng thể',
checkingUpdate: 'Đang kiểm tra cập nhật',
+ downloading: 'Đang tải Plugin',
validating: 'Đang xác thực gói',
+ installingDeps: 'Đang cài đặt phụ thuộc',
applyingUpdate: 'Đang áp dụng cập nhật',
activating: 'Đang khởi chạy và làm mới thành phần',
- updateComplete: 'Đã cập nhật plugin thành công',
-
- title: 'Đang cài đặt {{name}}',
- titleGeneric: 'Cài đặt Plugin',
- overallProgress: 'Tiến độ tổng thể',
- downloading: 'Đang tải Plugin',
- installingDeps: 'Đang cài đặt phụ thuộc',
initializing: 'Đang khởi tạo cài đặt',
launching: 'Đang khởi chạy Plugin',
completed: 'Hoàn thành',
@@ -1610,26 +1604,22 @@ const viVN = {
depsInfo: '{{count}} phụ thuộc cần cài đặt',
depsProgress: 'Đã cài {{installed}}/{{total}} · Còn lại {{remaining}}',
installComplete: 'Cài đặt plugin thành công',
+ updateComplete: 'Đã cập nhật plugin thành công',
+ installCompletePlugin: 'Đã cài đặt plugin thành công',
+ installCompleteMCP: 'Đã cài đặt máy chủ MCP thành công',
+ installCompleteSkill: 'Đã cài đặt kỹ năng thành công',
dismiss: 'Bỏ qua',
background: 'Chạy nền',
taskQueue: 'Tác vụ cài đặt',
clearCompleted: 'Xóa đã hoàn thành',
noTasks: 'Không có tác vụ cài đặt',
- titlePlugin: 'Đang cài đặt plugin {{name}}',
- titleMCP: 'Đang cài đặt máy chủ MCP {{name}}',
- titleSkill: 'Đang cài đặt kỹ năng {{name}}',
- installCompletePlugin: 'Đã cài đặt plugin thành công',
- installCompleteMCP: 'Đã cài đặt máy chủ MCP thành công',
- installCompleteSkill: 'Đã cài đặt kỹ năng thành công',
},
- uploadPluginOnly: 'Chỉ hỗ trợ gói plugin .lbpkg',
},
market: {
runnerUsage: 'Mục đích trình chạy',
runnerUsageAll: 'Tất cả',
runnerUsageAgent: 'Agent / Pipeline',
runnerUsageEvent: 'Bộ xử lý plugin',
-
searchPlaceholder: 'Tìm kiếm plugin...',
searchPlaceholderCount:
'Tìm kiếm {{count}} tiện ích mở rộng, khả năng hoặc tình huống...',
@@ -1642,6 +1632,10 @@ const viVN = {
allLoaded: 'Đã hiển thị tất cả plugin',
allLoadedCount: 'Đã hiển thị tất cả {{count}} tiện ích mở rộng',
install: 'Cài đặt',
+ installCard: 'Cài đặt {{name}}',
+ installedCard: 'Đã cài đặt {{name}}',
+ installed: 'Đã cài đặt',
+ updateAvailable: 'Có bản cập nhật',
installConfirm:
'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" ({{version}}) không?',
downloadComplete: 'Tải plugin "{{name}}" hoàn tất',
@@ -1719,10 +1713,6 @@ const viVN = {
clearAll: 'Xóa tất cả',
noTags: 'Không có thẻ nào',
},
- installCard: 'Cài đặt {{name}}',
- installedCard: 'Đã cài đặt {{name}}',
- installed: 'Đã cài đặt',
- updateAvailable: 'Có bản cập nhật',
},
mcp: {
title: 'MCP',
@@ -1864,8 +1854,6 @@ const viVN = {
deleteMCPHint: 'Sau khi xóa, cấu hình máy chủ MCP này không thể khôi phục.',
},
pipelines: {
- managementDescription: 'Sao chép hoặc xóa pipeline này.',
-
title: 'Quy trình',
description:
'Pipeline xác định luồng xử lý sự kiện tin nhắn, dùng để liên kết với Bot',
@@ -1887,6 +1875,7 @@ const viVN = {
earliestEdited: 'Chỉnh sửa sớm nhất',
basicInfo: 'Thông tin cơ bản',
basicInfoDescription: 'Đặt tên, biểu tượng và mô tả Pipeline',
+ managementDescription: 'Sao chép hoặc xóa pipeline này.',
aiCapabilities: 'AI',
triggerConditions: 'Điều kiện kích hoạt',
safetyControls: 'An toàn',
@@ -1938,9 +1927,9 @@ const viVN = {
selectAll: 'Chọn tất cả',
enableAllPlugins: 'Bật tất cả Plugin',
enableAllMCPServers: 'Bật tất cả máy chủ MCP',
+ enableAllSkills: 'Bật tất cả kỹ năng',
allPluginsEnabled: 'Đã bật tất cả plugin',
allMCPServersEnabled: 'Đã bật tất cả máy chủ MCP',
- enableAllSkills: 'Bật tất cả kỹ năng',
allSkillsEnabled: 'Tất cả kỹ năng đã được bật',
skillsTitle: 'Kỹ năng',
noSkillsSelected: 'Chưa chọn kỹ năng',
@@ -1985,14 +1974,13 @@ const viVN = {
selectKnowledgeBases: 'Chọn kho tri thức',
},
debugDialog: {
- saveAndSend: 'Lưu và gửi',
-
title: 'Trò chuyện Pipeline',
selectPipeline: 'Chọn Pipeline',
sessionType: 'Loại phiên',
privateChat: 'Trò chuyện riêng',
groupChat: 'Trò chuyện nhóm',
send: 'Gửi',
+ saveAndSend: 'Lưu và gửi',
reset: 'Đặt lại cuộc trò chuyện',
inputPlaceholder: 'Gửi tin nhắn {{type}}...',
noMessages: 'Không có tin nhắn',
@@ -2030,22 +2018,6 @@ const viVN = {
},
},
knowledge: {
- installedEngines: 'Bộ máy tri thức đã cài đặt',
- noInstalledEngines: 'Chưa cài plugin bộ máy tri thức nào.',
- marketplaceEngines: 'Plugin bộ máy tri thức trên chợ',
- noMarketplaceEngines: 'Không có plugin bộ máy tri thức khả dụng.',
- loadingEngineCatalog: 'Đang tải plugin trên chợ…',
- engineCatalogUnavailable:
- 'Chợ tiện ích tạm thời không khả dụng. Mở lại bộ chọn để thử lại.',
- viewMarketplace: 'Xem chợ tiện ích',
- installingEngine: 'Đang cài {{engine}}…',
- engineInstallSuccess: 'Đã cài {{engine}} và có thể chọn',
- engineInstallFailed: 'Cài bộ máy tri thức thất bại. Vui lòng thử lại.',
- engineVersionUnavailable: 'Plugin này chưa có phiên bản có thể cài đặt.',
- engineInstallTimeout: 'Đang tiếp tục cài đặt. Làm mới trang để kiểm tra.',
- engineRegistrationTimeout:
- 'Đã cài plugin nhưng bộ máy tri thức chưa sẵn sàng.',
-
title: 'Cơ sở tri thức',
createKnowledgeBase: 'Tạo cơ sở tri thức',
selectFromSidebar: 'Chọn một cơ sở tri thức từ thanh bên',
@@ -2124,6 +2096,21 @@ const viVN = {
knowledgeEngine: 'Công cụ tri thức',
knowledgeEngineRequired: 'Công cụ tri thức là bắt buộc',
selectKnowledgeEngine: 'Chọn công cụ tri thức',
+ installedEngines: 'Bộ máy tri thức đã cài đặt',
+ noInstalledEngines: 'Chưa cài plugin bộ máy tri thức nào.',
+ marketplaceEngines: 'Plugin bộ máy tri thức trên chợ',
+ noMarketplaceEngines: 'Không có plugin bộ máy tri thức khả dụng.',
+ loadingEngineCatalog: 'Đang tải plugin trên chợ…',
+ engineCatalogUnavailable:
+ 'Chợ tiện ích tạm thời không khả dụng. Mở lại bộ chọn để thử lại.',
+ viewMarketplace: 'Xem chợ tiện ích',
+ installingEngine: 'Đang cài {{engine}}…',
+ engineInstallSuccess: 'Đã cài {{engine}} và có thể chọn',
+ engineInstallFailed: 'Cài bộ máy tri thức thất bại. Vui lòng thử lại.',
+ engineVersionUnavailable: 'Plugin này chưa có phiên bản có thể cài đặt.',
+ engineInstallTimeout: 'Đang tiếp tục cài đặt. Làm mới trang để kiểm tra.',
+ engineRegistrationTimeout:
+ 'Đã cài plugin nhưng bộ máy tri thức chưa sẵn sàng.',
builtInEngine: 'Công cụ tích hợp',
cannotChangeKnowledgeEngine:
'Không thể thay đổi công cụ tri thức sau khi tạo',
@@ -2217,8 +2204,8 @@ const viVN = {
resetSuccess: 'Đặt lại mật khẩu thành công, vui lòng đăng nhập',
resetFailed:
'Đặt lại mật khẩu thất bại, vui lòng kiểm tra email và khóa khôi phục',
- backToLogin: 'Quay lại đăng nhập',
secondFactorFailed: 'Xác minh thất bại, vui lòng kiểm tra mã và thử lại',
+ backToLogin: 'Quay lại đăng nhập',
verifyWith: 'Xác minh bằng',
methodRecoveryKey: 'Khóa khôi phục',
methodTotp: 'Ứng dụng xác thực',
@@ -2356,7 +2343,6 @@ const viVN = {
setPasswordHint: 'Đặt mật khẩu để đăng nhập bằng email và mật khẩu',
spaceEmailMismatch:
'Email tài khoản LangBot không khớp với email tài khoản cục bộ',
-
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.',
@@ -2364,6 +2350,89 @@ const viVN = {
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: 'Bảng điều khiển',
description: 'Giám sát hoạt động Bot, cuộc gọi LLM và hiệu suất hệ thống',
@@ -2401,8 +2470,8 @@ const viVN = {
embeddingCalls: 'Cuộc gọi Embedding',
modelCalls: 'Cuộc gọi mô hình',
tokens: 'Giám sát Token',
- sessions: 'Phân tích phiên',
feedback: 'Phản hồi người dùng',
+ sessions: 'Phân tích phiên',
errors: 'Nhật ký lỗi',
},
messageList: {
@@ -2461,6 +2530,8 @@ const viVN = {
arguments: 'Tham số',
result: 'Kết quả',
noToolCalls: 'Chưa ghi nhận lượt gọi công cụ',
+ showDetails: 'Hiện chi tiết',
+ hideDetails: 'Ẩn chi tiết',
},
tokens: {
totalTokens: 'Tổng số Token',
@@ -2625,15 +2696,34 @@ const viVN = {
settingsDialog: {
title: 'Cài đặt',
nav: {
+ workspace: 'Workspace',
models: 'Mô hình',
api: 'API',
storage: 'Lưu trữ',
account: 'Tài khoản',
-
- workspace: 'Workspace',
},
},
storageAnalysis: {
+ title: 'Phân tích lưu trữ',
+ description: 'Kiểm tra dung lượng lưu trữ và các mục có thể dọn dẹp',
+ openDialog: 'Xem phân tích',
+ dialogTitle: 'Phân tích lưu trữ',
+ generatedAt: 'Tạo lúc {{time}}',
+ loading: 'Đang tải...',
+ refresh: 'Làm mới',
+ totalSize: 'Tổng dung lượng',
+ binaryStorage: 'Lưu trữ nhị phân plugin',
+ uploadCleanup: 'Tệp tải lên hết hạn',
+ logCleanup: 'Nhật ký hết hạn',
+ sections: 'Khu vực lưu trữ',
+ monitoringTables: 'Bảng giám sát',
+ runtimeTasks: 'Tác vụ runtime',
+ cleanupPolicy: 'Chính sách dọn dẹp',
+ uploadRetention: 'Thời gian giữ tệp tải lên',
+ logRetention: 'Thời gian giữ nhật ký',
+ databaseType: 'Loại cơ sở dữ liệu',
+ days: 'ngày',
+ missing: 'Thiếu',
notCreated: 'Chưa tạo',
processStorage: 'Lưu trữ theo tiến trình',
processStorageDescription:
@@ -2672,32 +2762,18 @@ const viVN = {
box_runtime:
'Không gian sandbox, không gian tiến trình MCP, thư mục trao đổi tệp đính kèm và kỹ năng.',
},
-
- title: 'Phân tích lưu trữ',
- description: 'Kiểm tra dung lượng lưu trữ và các mục có thể dọn dẹp',
- openDialog: 'Xem phân tích',
- dialogTitle: 'Phân tích lưu trữ',
- generatedAt: 'Tạo lúc {{time}}',
- loading: 'Đang tải...',
- refresh: 'Làm mới',
- totalSize: 'Tổng dung lượng',
- binaryStorage: 'Lưu trữ nhị phân plugin',
- uploadCleanup: 'Tệp tải lên hết hạn',
- logCleanup: 'Nhật ký hết hạn',
- sections: 'Khu vực lưu trữ',
- monitoringTables: 'Bảng giám sát',
- runtimeTasks: 'Tác vụ runtime',
- cleanupPolicy: 'Chính sách dọn dẹp',
- uploadRetention: 'Thời gian giữ tệp tải lên',
- logRetention: 'Thời gian giữ nhật ký',
- databaseType: 'Loại cơ sở dữ liệu',
- days: 'ngày',
- missing: 'Thiếu',
expiredUploads: 'Tệp tải lên hết hạn',
expiredLogs: 'Nhật ký hết hạn',
noExpiredUploads: 'Không có tệp tải lên hết hạn',
noExpiredLogs: 'Không có nhật ký hết hạn',
sectionNames: {
+ database: 'Cơ sở dữ liệu',
+ logs: 'Nhật ký',
+ storage: 'Tệp tải lên',
+ vector_store: 'Kho vector',
+ plugins: 'Plugin',
+ mcp: 'MCP',
+ temp: 'Tệp tạm',
legacy_plugins: 'Gói plugin cũ',
artifacts: 'Thành phẩm plugin đã xác minh',
dependency_environments: 'Môi trường phụ thuộc',
@@ -2713,14 +2789,6 @@ const viVN = {
session_temp: 'Tệp tạm sandbox',
managed_process_workspaces:
'Không gian tiến trình được quản lý (bao gồm MCP)',
-
- database: 'Cơ sở dữ liệu',
- logs: 'Nhật ký',
- storage: 'Tệp tải lên',
- vector_store: 'Kho vector',
- plugins: 'Plugin',
- mcp: 'MCP',
- temp: 'Tệp tạm',
},
},
limitation: {
@@ -2737,235 +2805,6 @@ const viVN = {
createDisabledTooltip:
'Đã đạt giới hạn {{resource}} ({{max}}) của workspace này. Hãy xóa một mục hiện có trước khi tạo mới.',
},
- wizard: {
- sidebarDescription: 'Tạo Bot với các bước hướng dẫn',
- loading: 'Đang tải trình hướng dẫn...',
- loadError: 'Tải dữ liệu trình hướng dẫn thất bại',
- skip: 'Bỏ qua',
- skipConfirmMessage:
- 'Bạn có thể vào lại trình hướng dẫn Bắt đầu nhanh từ menu tài khoản sau, hoặc tạo Bot thủ công.',
- skipConfirmOk: 'OK',
- prev: 'Trước',
- next: 'Tiếp',
- finish: 'Tạo & Triển khai',
- confirmCreateBot: 'Xác nhận, Tạo Bot',
- createSuccess: 'Tạo Pipeline và liên kết với Bot thành công!',
- botCreateSuccess: 'Tạo Bot thành công!',
- botSaveSuccess: 'Cấu hình Bot đã lưu và bật!',
- createError: 'Tạo tài nguyên thất bại',
- skipSaveError: 'Lưu trạng thái bỏ qua thất bại. Vui lòng thử lại.',
- completeSaveError: 'Lưu trạng thái hoàn tất thất bại. Vui lòng thử lại.',
- step: {
- platform: 'Nền tảng',
- botConfig: 'Thiết lập Bot',
- aiEngine: 'Công cụ AI',
- done: 'Hoàn tất',
- },
- platform: {
- title: 'Chọn nền tảng',
- description: 'Chọn nền tảng nhắn tin mà Bot của bạn sẽ kết nối.',
- },
- botConfig: {
- title: 'Cấu hình Bot của bạn',
- description: 'Thiết lập Bot và xác minh hoạt động trước khi tiếp tục.',
- saveBot: 'Lưu & Bật Bot',
- resaveBot: 'Lưu lại cấu hình',
- botSaved:
- 'Cấu hình Bot đã lưu và bật. Kiểm tra nhật ký để xác minh kết nối.',
- waitingForMessage:
- 'Bot đã được bật. Hãy gửi cho Bot một tin nhắn từ nền tảng nhắn tin để tiếp tục.',
- messageReceived:
- 'Bot đã nhận được tin nhắn. Bạn có thể tiếp tục sang bước tiếp theo.',
- messageReceivedLocalAccountWarning:
- 'Kết nối phía Bot đã được cấu hình đúng và đã nhận được tin nhắn. Vì bạn không đăng nhập bằng tài khoản LangBot, lệnh gọi mô hình có thể thất bại; hãy tiếp tục sang bước tiếp theo để thêm mô hình của riêng bạn.',
- pageBotPreviewFailed:
- 'Không thể tải cuộc trò chuyện thử nghiệm. Hãy lưu lại cấu hình để thử lại.',
- pageBotTestPrompt:
- 'Page Bot đã được bật. Nhấp vào bong bóng trò chuyện ở góc dưới bên phải và gửi tin nhắn để xác minh toàn bộ luồng hội thoại.',
- pageBotTestNotice:
- 'Chỉ dùng để kiểm thử. Hãy nhúng mã vào một trang web bên ngoài thực tế.',
- webhookTestPrompt:
- 'URL callback đã sẵn sàng. Hãy cấu hình URL này trên nền tảng bên ngoài, sau đó gửi một tin nhắn thực cho Bot.',
- httpTestPrompt:
- 'HTTP Bot đã được bật. Gửi một tin nhắn đến thực tế tại đây để xác minh kết nối.',
- httpTestDefaultMessage: 'Xin chào, đây là tin nhắn kiểm tra kết nối.',
- sendHttpTest: 'Gửi tin nhắn kiểm tra',
- httpTestAccepted:
- 'Tin nhắn kiểm tra đã được chấp nhận và sẽ sớm xuất hiện trong nhật ký.',
- httpTestMissingSecret:
- 'Hãy nhập khóa bí mật ký yêu cầu đến và lưu cấu hình trước.',
- httpTestFailed: 'Không thể gửi tin nhắn kiểm tra: {{error}}',
- logsTitle: 'Nhật ký Bot',
- logsDescription:
- 'Giám sát hoạt động Bot để xác minh kết nối nền tảng đang hoạt động.',
- },
- aiEngine: {
- loadingCatalog: 'Đang tải tiện ích trình chạy...',
- catalogUnavailable: 'Danh mục trình chạy không khả dụng',
- catalogUnavailableDescription:
- 'Trình chạy đã cài vẫn dùng được. Thử tải lại danh mục hoặc duyệt tiện ích.',
- noMarketplaceRunners: 'Không có plugin trình chạy phù hợp mục đích này',
- noMarketplaceRunnersDescription:
- 'Dùng trình chạy đã cài hoặc thử lại sau.',
- browseRunners: 'Duyệt tiện ích trình chạy',
- installAndContinue: 'Cài đặt và tiếp tục',
- installing: 'Đang cài đặt...',
- useInstalled: 'Dùng trình chạy này',
- installedUnavailable: 'Đã cài, trình chạy không khả dụng',
- installSuccess: 'Đã cài và chọn {{runner}}',
- installFailed: 'Không cài được tiện ích trình chạy',
- versionUnavailable: 'Chợ tiện ích không trả về phiên bản có thể cài đặt.',
- installTimeout:
- 'Cài trình chạy hết thời gian chờ. Kiểm tra tác vụ trong mục Tiện ích.',
- registrationTimeout:
- 'Đã cài tiện ích nhưng trình chạy chưa đăng ký. Kiểm tra môi trường chạy plugin rồi thử lại.',
-
- defaultModelUnavailable: 'Chưa có mô hình mặc định. Vui lòng thử lại.',
- defaultRunnerUnavailable: 'Local Agent chưa sẵn sàng. Vui lòng thử lại.',
- preparingDefault: 'Đang chuẩn bị AI mặc định…',
- title: 'Cấu hình công cụ AI',
- description: 'Chọn công cụ AI sẽ cung cấp trí tuệ cho Bot của bạn.',
- optionalDescription:
- 'AI mặc định đã sẵn sàng. Bạn có thể dùng ngay hoặc đổi cách kết nối.',
- externalTitle: 'Kết nối Agent từ nền tảng bên ngoài',
- externalDescription:
- 'Kết nối Dify, n8n, Coze hoặc Agent bên ngoài qua plugin Runner.',
- ownModelTitle: 'Sử dụng mô hình của riêng tôi',
- ownModelDescription:
- 'Thêm nhà cung cấp, sau đó quét hoặc nhập mô hình thủ công để hoàn tất thiết lập.',
- ownModelSetupTitle: 'Thêm mô hình của riêng bạn',
- ownModelSetupDescription:
- 'Thêm nhà cung cấp mô hình. Các mô hình trò chuyện sẽ được quét tự động, hoặc bạn có thể nhập ID mô hình thủ công.',
- addProviderTitle: 'Thêm nhà cung cấp',
- addProviderDescription:
- 'Nhập thông tin nhà cung cấp và API Key dùng để kết nối và quét mô hình.',
- selectModelTitle: 'Chọn mô hình',
- selectScannedModelTitle: 'Chọn mô hình',
- selectScannedModelDescription:
- 'Mô hình đã chọn sẽ thay thế mô hình chính trong pipeline của bot này.',
- scanModelMode: 'Quét mô hình',
- manualModelMode: 'Thêm thủ công',
- scanningModels: 'Đang quét các mô hình khả dụng…',
- noScannedModels:
- 'Không tìm thấy mô hình trò chuyện khả dụng. Hãy kiểm tra cấu hình nhà cung cấp.',
- scanModelsFailed:
- 'Quét mô hình thất bại. Hãy kiểm tra URL và API Key rồi thử lại.',
- manualFallbackFailed:
- 'Quét tự động thất bại. Hãy nhập ID mô hình được nhà cung cấp hỗ trợ.',
- manualFallbackEmpty:
- 'Không tìm thấy mô hình. Hãy nhập ID mô hình được nhà cung cấp hỗ trợ.',
- manualModelId: 'ID mô hình',
- manualModelIdPlaceholder: 'Ví dụ: gpt-4o',
- manualModelIdDescription:
- 'Nhập tham số mô hình được sử dụng trong các yêu cầu mô hình.',
- manualModelOptions: 'Khả năng mô hình tùy chọn',
- editProvider: 'Chỉnh sửa nhà cung cấp',
- rescanModels: 'Quét lại mô hình',
- moreFeaturesTitle: 'Dùng cấu hình mặc định',
- moreFeaturesDescription:
- 'Tiếp tục dùng Local Agent và mô hình đề xuất. Có thể thêm công cụ và cơ sở tri thức sau.',
- runnerDescription: 'Chọn Runner cho Agent bên ngoài và cấu hình kết nối.',
- backToChoices: 'Quay lại các tùy chọn',
- backToList: 'Quay lại danh sách',
- createExternal: 'Tạo và liên kết',
- finishWithModel: 'Sử dụng mô hình đã chọn và hoàn tất',
- openWorkbench: 'Mở bàn làm việc',
- },
- config: {
- botInfo: 'Thông tin Bot',
- botNamePlaceholder: 'Nhập tên Bot',
- botDescPlaceholder: 'Nhập mô tả Bot (tùy chọn)',
- platformConfig: 'Cấu hình {{platform}}',
- aiConfig: 'Cấu hình {{engine}}',
- },
- done: {
- title: 'Hoàn tất!',
- description:
- 'Bot của bạn đã được tạo và kết nối với Pipeline AI. Bạn có thể quản lý nó từ bàn làm việc.',
- backToWorkbench: 'Quay lại bàn làm việc',
- },
- },
- errorPage: {
- unexpectedError: 'Đã xảy ra lỗi',
- unexpectedErrorDescription:
- 'Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau.',
- notFound: 'Không tìm thấy trang',
- notFoundDescription:
- 'Trang bạn tìm kiếm không tồn tại hoặc đã được di chuyển.',
- backendUnavailableStatus: 'Backend không khả dụng',
- goBack: 'Quay lại',
- backToHome: 'Về trang chủ',
- backToLogin: 'Quay lại đăng nhập',
- retrying: 'Đang thử lại',
- retryFailed:
- 'Vẫn không thể kết nối backend. Hãy khởi động dịch vụ rồi thử lại.',
- },
- feishu: {
- createApp: 'Tạo ứng dụng Feishu chỉ với một lần nhấp',
- scanQRCode:
- 'Quét mã QR bên dưới bằng Feishu để ủy quyền và tự động tạo ứng dụng',
- waitingForScan: 'Đang chờ quét',
- createSuccess:
- 'Tạo ứng dụng thành công! Thông tin xác thực đã được điền tự động',
- createFailed: 'Tạo ứng dụng thất bại',
- connecting: 'Đang kết nối tới dịch vụ Feishu...',
- expired: 'Mã QR đã hết hạn, vui lòng thử lại',
- denied: 'Người dùng đã từ chối ủy quyền',
- connectionLost: 'Kết nối đã bị mất, vui lòng thử lại',
- reconnecting: 'Đang kết nối lại...',
- retry: 'Thử lại',
- },
- weixin: {
- scanLogin: 'Đăng nhập WeChat bằng mã QR',
- scanQRCode:
- 'Quét mã QR bên dưới bằng WeChat để ủy quyền và tự động điền token',
- loginSuccess: 'Đăng nhập thành công! Token đã được điền tự động',
- loginFailed: 'Đăng nhập thất bại',
- connecting: 'Đang kết nối tới dịch vụ WeChat...',
- waitingForScan: 'Đang chờ quét mã',
- retry: 'Thử lại',
- },
- dingtalk: {
- createApp: 'Tạo ứng dụng DingTalk chỉ với một lần nhấp',
- scanQRCode:
- 'Quét mã QR bên dưới bằng DingTalk để ủy quyền và tự động tạo ứng dụng',
- waitingForScan: 'Đang chờ quét',
- createSuccess:
- 'Tạo ứng dụng thành công! Thông tin xác thực đã được điền tự động',
- createFailed: 'Tạo ứng dụng thất bại',
- connecting: 'Đang kết nối tới dịch vụ DingTalk...',
- retry: 'Thử lại',
- robotCodeNote:
- 'Không thể tự động lấy Robot Code. Vui lòng vào trang quản trị nhà phát triển DingTalk > Cấu hình robot để sao chép thủ công. Trường này là bắt buộc cho các tính năng như nhận diện hình ảnh và tải tệp lên.',
- },
- wecombot: {
- createBot: 'Tạo bot WeCom chỉ với một lần nhấp',
- scanQRCode: 'Quét mã QR bên dưới bằng WeCom để ủy quyền và tự động tạo bot',
- waitingForScan: 'Đang chờ quét',
- createSuccess:
- 'Tạo bot thành công! Thông tin xác thực đã được điền tự động',
- createFailed: 'Tạo bot thất bại',
- connecting: 'Đang kết nối tới dịch vụ WeCom...',
- retry: 'Thử lại',
- robotNameNote: 'Không thể tự động lấy tên bot. Vui lòng điền thủ công.',
- },
- qqofficial: {
- createBinding: 'Liên kết bot QQ Official bằng QR một chạm',
- scanQRCode:
- 'Quét mã QR bên dưới bằng QQ trên di động và xác nhận liên kết trong «QQ Bot Assistant»',
- waitingForScan: 'Đang chờ quét',
- bindSuccess: 'Liên kết thành công! AppID và Secret đã được điền tự động',
- bindFailed: 'Liên kết thất bại',
- connecting: 'Đang kết nối tới dịch vụ QQ...',
- retry: 'Thử lại',
- tokenNote:
- 'Bộ chuyển đổi hiện tại không dùng trường Token; có thể để trống.',
- boundBy: 'Được liên kết bởi người dùng QQ {{openid}}',
- },
- pluginPages: {
- selectFromSidebar: 'Chọn một trang plugin từ thanh bên',
- invalidPage: 'Trang plugin không hợp lệ',
- },
skills: {
title: 'Kỹ năng',
description:
@@ -3060,6 +2899,153 @@ const viVN = {
saveFileSuccess: 'Đã lưu tệp thành công',
saveFileError: 'Lưu tệp thất bại: ',
},
+ wizard: {
+ sidebarDescription: 'Tạo Bot với các bước hướng dẫn',
+ loading: 'Đang tải trình hướng dẫn...',
+ loadError: 'Tải dữ liệu trình hướng dẫn thất bại',
+ skip: 'Bỏ qua',
+ skipConfirmMessage:
+ 'Bạn có thể vào lại trình hướng dẫn Bắt đầu nhanh từ menu tài khoản sau, hoặc tạo Bot thủ công.',
+ skipConfirmOk: 'OK',
+ prev: 'Trước',
+ next: 'Tiếp',
+ finish: 'Tạo & Triển khai',
+ confirmCreateBot: 'Xác nhận, Tạo Bot',
+ createSuccess: 'Tạo Pipeline và liên kết với Bot thành công!',
+ botCreateSuccess: 'Tạo Bot thành công!',
+ botSaveSuccess: 'Cấu hình Bot đã lưu và bật!',
+ createError: 'Tạo tài nguyên thất bại',
+ skipSaveError: 'Lưu trạng thái bỏ qua thất bại. Vui lòng thử lại.',
+ completeSaveError: 'Lưu trạng thái hoàn tất thất bại. Vui lòng thử lại.',
+ step: {
+ platform: 'Nền tảng',
+ botConfig: 'Thiết lập Bot',
+ aiEngine: 'Công cụ AI',
+ done: 'Hoàn tất',
+ },
+ platform: {
+ title: 'Chọn nền tảng',
+ description: 'Chọn nền tảng nhắn tin mà Bot của bạn sẽ kết nối.',
+ },
+ botConfig: {
+ title: 'Cấu hình Bot của bạn',
+ description: 'Thiết lập Bot và xác minh hoạt động trước khi tiếp tục.',
+ saveBot: 'Lưu & Bật Bot',
+ resaveBot: 'Lưu lại cấu hình',
+ botSaved:
+ 'Cấu hình Bot đã lưu và bật. Kiểm tra nhật ký để xác minh kết nối.',
+ waitingForMessage:
+ 'Bot đã được bật. Hãy gửi cho Bot một tin nhắn từ nền tảng nhắn tin để tiếp tục.',
+ messageReceived:
+ 'Bot đã nhận được tin nhắn. Bạn có thể tiếp tục sang bước tiếp theo.',
+ messageReceivedLocalAccountWarning:
+ 'Kết nối phía Bot đã được cấu hình đúng và đã nhận được tin nhắn. Vì bạn không đăng nhập bằng tài khoản LangBot, lệnh gọi mô hình có thể thất bại; hãy tiếp tục sang bước tiếp theo để thêm mô hình của riêng bạn.',
+ pageBotPreviewFailed:
+ 'Không thể tải cuộc trò chuyện thử nghiệm. Hãy lưu lại cấu hình để thử lại.',
+ pageBotTestPrompt:
+ 'Page Bot đã được bật. Nhấp vào bong bóng trò chuyện ở góc dưới bên phải và gửi tin nhắn để xác minh toàn bộ luồng hội thoại.',
+ pageBotTestNotice:
+ 'Chỉ dùng để kiểm thử. Hãy nhúng mã vào một trang web bên ngoài thực tế.',
+ webhookTestPrompt:
+ 'URL callback đã sẵn sàng. Hãy cấu hình URL này trên nền tảng bên ngoài, sau đó gửi một tin nhắn thực cho Bot.',
+ httpTestPrompt:
+ 'HTTP Bot đã được bật. Gửi một tin nhắn đến thực tế tại đây để xác minh kết nối.',
+ httpTestDefaultMessage: 'Xin chào, đây là tin nhắn kiểm tra kết nối.',
+ sendHttpTest: 'Gửi tin nhắn kiểm tra',
+ httpTestAccepted:
+ 'Tin nhắn kiểm tra đã được chấp nhận và sẽ sớm xuất hiện trong nhật ký.',
+ httpTestMissingSecret:
+ 'Hãy nhập khóa bí mật ký yêu cầu đến và lưu cấu hình trước.',
+ httpTestFailed: 'Không thể gửi tin nhắn kiểm tra: {{error}}',
+ logsTitle: 'Nhật ký Bot',
+ logsDescription:
+ 'Giám sát hoạt động Bot để xác minh kết nối nền tảng đang hoạt động.',
+ },
+ aiEngine: {
+ defaultModelUnavailable: 'Chưa có mô hình mặc định. Vui lòng thử lại.',
+ defaultRunnerUnavailable: 'Local Agent chưa sẵn sàng. Vui lòng thử lại.',
+ preparingDefault: 'Đang chuẩn bị AI mặc định…',
+ title: 'Cấu hình công cụ AI',
+ description: 'Chọn công cụ AI sẽ cung cấp trí tuệ cho Bot của bạn.',
+ optionalDescription:
+ 'AI mặc định đã sẵn sàng. Bạn có thể dùng ngay hoặc đổi cách kết nối.',
+ externalTitle: 'Kết nối Agent từ nền tảng bên ngoài',
+ externalDescription:
+ 'Kết nối Dify, n8n, Coze hoặc Agent bên ngoài qua plugin Runner.',
+ ownModelTitle: 'Sử dụng mô hình của riêng tôi',
+ ownModelDescription:
+ 'Thêm nhà cung cấp, sau đó quét hoặc nhập mô hình thủ công để hoàn tất thiết lập.',
+ ownModelSetupTitle: 'Thêm mô hình của riêng bạn',
+ ownModelSetupDescription:
+ 'Thêm nhà cung cấp mô hình. Các mô hình trò chuyện sẽ được quét tự động, hoặc bạn có thể nhập ID mô hình thủ công.',
+ addProviderTitle: 'Thêm nhà cung cấp',
+ addProviderDescription:
+ 'Nhập thông tin nhà cung cấp và API Key dùng để kết nối và quét mô hình.',
+ selectModelTitle: 'Chọn mô hình',
+ selectScannedModelTitle: 'Chọn mô hình',
+ selectScannedModelDescription:
+ 'Mô hình đã chọn sẽ thay thế mô hình chính trong pipeline của bot này.',
+ scanModelMode: 'Quét mô hình',
+ manualModelMode: 'Thêm thủ công',
+ scanningModels: 'Đang quét các mô hình khả dụng…',
+ noScannedModels:
+ 'Không tìm thấy mô hình trò chuyện khả dụng. Hãy kiểm tra cấu hình nhà cung cấp.',
+ scanModelsFailed:
+ 'Quét mô hình thất bại. Hãy kiểm tra URL và API Key rồi thử lại.',
+ manualFallbackFailed:
+ 'Quét tự động thất bại. Hãy nhập ID mô hình được nhà cung cấp hỗ trợ.',
+ manualFallbackEmpty:
+ 'Không tìm thấy mô hình. Hãy nhập ID mô hình được nhà cung cấp hỗ trợ.',
+ manualModelId: 'ID mô hình',
+ manualModelIdPlaceholder: 'Ví dụ: gpt-4o',
+ manualModelIdDescription:
+ 'Nhập tham số mô hình được sử dụng trong các yêu cầu mô hình.',
+ manualModelOptions: 'Khả năng mô hình tùy chọn',
+ editProvider: 'Chỉnh sửa nhà cung cấp',
+ rescanModels: 'Quét lại mô hình',
+ moreFeaturesTitle: 'Dùng cấu hình mặc định',
+ moreFeaturesDescription:
+ 'Tiếp tục dùng Local Agent và mô hình đề xuất. Có thể thêm công cụ và cơ sở tri thức sau.',
+ runnerDescription: 'Chọn Runner cho Agent bên ngoài và cấu hình kết nối.',
+ backToChoices: 'Quay lại các tùy chọn',
+ backToList: 'Quay lại danh sách',
+ createExternal: 'Tạo và liên kết',
+ finishWithModel: 'Sử dụng mô hình đã chọn và hoàn tất',
+ openWorkbench: 'Mở bàn làm việc',
+ loadingCatalog: 'Đang tải tiện ích trình chạy...',
+ catalogUnavailable: 'Danh mục trình chạy không khả dụng',
+ catalogUnavailableDescription:
+ 'Trình chạy đã cài vẫn dùng được. Thử tải lại danh mục hoặc duyệt tiện ích.',
+ noMarketplaceRunners: 'Không có plugin trình chạy phù hợp mục đích này',
+ noMarketplaceRunnersDescription:
+ 'Dùng trình chạy đã cài hoặc thử lại sau.',
+ browseRunners: 'Duyệt tiện ích trình chạy',
+ installAndContinue: 'Cài đặt và tiếp tục',
+ installing: 'Đang cài đặt...',
+ useInstalled: 'Dùng trình chạy này',
+ installedUnavailable: 'Đã cài, trình chạy không khả dụng',
+ installSuccess: 'Đã cài và chọn {{runner}}',
+ installFailed: 'Không cài được tiện ích trình chạy',
+ versionUnavailable: 'Chợ tiện ích không trả về phiên bản có thể cài đặt.',
+ installTimeout:
+ 'Cài trình chạy hết thời gian chờ. Kiểm tra tác vụ trong mục Tiện ích.',
+ registrationTimeout:
+ 'Đã cài tiện ích nhưng trình chạy chưa đăng ký. Kiểm tra môi trường chạy plugin rồi thử lại.',
+ },
+ config: {
+ botInfo: 'Thông tin Bot',
+ botNamePlaceholder: 'Nhập tên Bot',
+ botDescPlaceholder: 'Nhập mô tả Bot (tùy chọn)',
+ platformConfig: 'Cấu hình {{platform}}',
+ aiConfig: 'Cấu hình {{engine}}',
+ },
+ done: {
+ title: 'Hoàn tất!',
+ description:
+ 'Bot của bạn đã được tạo và kết nối với Pipeline AI. Bạn có thể quản lý nó từ bàn làm việc.',
+ backToWorkbench: 'Quay lại bàn làm việc',
+ },
+ },
addExtension: {
installTitle: 'Cài đặt {{type}}',
installConfirm: 'Cài đặt {{type}} "{{name}}"?',
@@ -3091,90 +3077,86 @@ const viVN = {
unsupportedFileType:
'Loại tệp không được hỗ trợ. Chỉ hỗ trợ tệp .zip và .lbpkg',
},
-
- 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',
- },
+ errorPage: {
+ unexpectedError: 'Đã xảy ra lỗi',
+ unexpectedErrorDescription:
+ 'Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau.',
+ notFound: 'Không tìm thấy trang',
+ notFoundDescription:
+ 'Trang bạn tìm kiếm không tồn tại hoặc đã được di chuyển.',
+ backendUnavailableStatus: 'Backend không khả dụng',
+ goBack: 'Quay lại',
+ backToHome: 'Về trang chủ',
+ backToLogin: 'Quay lại đăng nhập',
+ retrying: 'Đang thử lại',
+ retryFailed:
+ 'Vẫn không thể kết nối backend. Hãy khởi động dịch vụ rồi thử lại.',
+ },
+ feishu: {
+ createApp: 'Tạo ứng dụng Feishu chỉ với một lần nhấp',
+ scanQRCode:
+ 'Quét mã QR bên dưới bằng Feishu để ủy quyền và tự động tạo ứng dụng',
+ waitingForScan: 'Đang chờ quét',
+ createSuccess:
+ 'Tạo ứng dụng thành công! Thông tin xác thực đã được điền tự động',
+ createFailed: 'Tạo ứng dụng thất bại',
+ connecting: 'Đang kết nối tới dịch vụ Feishu...',
+ expired: 'Mã QR đã hết hạn, vui lòng thử lại',
+ denied: 'Người dùng đã từ chối ủy quyền',
+ connectionLost: 'Kết nối đã bị mất, vui lòng thử lại',
+ reconnecting: 'Đang kết nối lại...',
+ retry: 'Thử lại',
+ },
+ weixin: {
+ scanLogin: 'Đăng nhập WeChat bằng mã QR',
+ scanQRCode:
+ 'Quét mã QR bên dưới bằng WeChat để ủy quyền và tự động điền token',
+ loginSuccess: 'Đăng nhập thành công! Token đã được điền tự động',
+ loginFailed: 'Đăng nhập thất bại',
+ connecting: 'Đang kết nối tới dịch vụ WeChat...',
+ waitingForScan: 'Đang chờ quét mã',
+ retry: 'Thử lại',
+ },
+ dingtalk: {
+ createApp: 'Tạo ứng dụng DingTalk chỉ với một lần nhấp',
+ scanQRCode:
+ 'Quét mã QR bên dưới bằng DingTalk để ủy quyền và tự động tạo ứng dụng',
+ waitingForScan: 'Đang chờ quét',
+ createSuccess:
+ 'Tạo ứng dụng thành công! Thông tin xác thực đã được điền tự động',
+ createFailed: 'Tạo ứng dụng thất bại',
+ connecting: 'Đang kết nối tới dịch vụ DingTalk...',
+ retry: 'Thử lại',
+ robotCodeNote:
+ 'Không thể tự động lấy Robot Code. Vui lòng vào trang quản trị nhà phát triển DingTalk > Cấu hình robot để sao chép thủ công. Trường này là bắt buộc cho các tính năng như nhận diện hình ảnh và tải tệp lên.',
+ },
+ wecombot: {
+ createBot: 'Tạo bot WeCom chỉ với một lần nhấp',
+ scanQRCode: 'Quét mã QR bên dưới bằng WeCom để ủy quyền và tự động tạo bot',
+ waitingForScan: 'Đang chờ quét',
+ createSuccess:
+ 'Tạo bot thành công! Thông tin xác thực đã được điền tự động',
+ createFailed: 'Tạo bot thất bại',
+ connecting: 'Đang kết nối tới dịch vụ WeCom...',
+ retry: 'Thử lại',
+ robotNameNote: 'Không thể tự động lấy tên bot. Vui lòng điền thủ công.',
+ },
+ qqofficial: {
+ createBinding: 'Liên kết bot QQ Official bằng QR một chạm',
+ scanQRCode:
+ 'Quét mã QR bên dưới bằng QQ trên di động và xác nhận liên kết trong «QQ Bot Assistant»',
+ waitingForScan: 'Đang chờ quét',
+ bindSuccess: 'Liên kết thành công! AppID và Secret đã được điền tự động',
+ bindFailed: 'Liên kết thất bại',
+ connecting: 'Đang kết nối tới dịch vụ QQ...',
+ retry: 'Thử lại',
+ tokenNote:
+ 'Bộ chuyển đổi hiện tại không dùng trường Token; có thể để trống.',
+ boundBy: 'Được liên kết bởi người dùng QQ {{openid}}',
+ },
+ pluginPages: {
+ selectFromSidebar: 'Chọn một trang plugin từ thanh bên',
+ invalidPage: 'Trang plugin không hợp lệ',
},
};
-
export default viVN;
diff --git a/web/src/i18n/locales/zh-Hans.ts b/web/src/i18n/locales/zh-Hans.ts
index 76c59e386..86037b1c8 100644
--- a/web/src/i18n/locales/zh-Hans.ts
+++ b/web/src/i18n/locales/zh-Hans.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/zh-Hans';
-
const zhHans = {
assistant: {
modelHint: '切换助手模型,从下一条消息生效',
@@ -93,7 +92,6 @@ const zhHans = {
guidedTour: {
eventDebugDescription:
'选择支持的事件并填写测试数据,运行后查看输出和工具调用结果。平台操作仅模拟执行,模型和其他工具按实际配置执行。',
-
pipeline: {
trigger: {
title: '选择要回复的消息',
@@ -288,6 +286,7 @@ const zhHans = {
common: {
customValue: '自定义',
loadFailed: '加载失败,请重试。',
+ search: '搜索',
login: '登录',
logout: '退出登录',
accountOptions: '系统设置',
@@ -685,7 +684,6 @@ const zhHans = {
applyFailed: '配置已保存,但应用失败',
internalErrorHint: '发生内部错误,请通过错误编号查看后端日志。',
errorReference: '错误编号:{{id}}',
-
title: '机器人',
description: '创建和管理机器人,这是 LangBot 与各个平台连接的入口',
createBot: '创建机器人',
@@ -1014,6 +1012,10 @@ const zhHans = {
discarded: '已丢弃',
userMessage: '用户',
botMessage: '助手',
+ totalSessions: '{{count}} 个会话',
+ userSearch: '用户 ID 或名称',
+ startDate: '开始日期',
+ endDate: '结束日期',
},
admins: {
title: '管理员',
@@ -1055,12 +1057,10 @@ const zhHans = {
pluginSettings: '插件设置',
pluginSettingsDescription: '由当前插件声明的参数。',
selectToDebug: '请先在上方选择插件,再开始调试。',
-
debugOutput: '处理器输出',
debugDescription: '当前测试的输入事件、插件日志和动作结果。',
debugNotice:
'插件真实处理测试事件;回复、发送等平台动作使用 Mock,不发送真实消息。其他工具仍按实际配置执行。',
-
create: '创建插件处理器',
type: '插件处理器',
description: '由插件代码处理预先声明的特定事件,按插件编写的逻辑执行。',
@@ -1095,7 +1095,6 @@ const zhHans = {
debugData: {
chatId: '会话 ID',
feedbackType: '反馈类型(1:赞,2:踩,3:取消)',
-
title: '事件数据',
form: '常用字段',
json: '完整 JSON',
@@ -1344,7 +1343,6 @@ const zhHans = {
noMatchingPlugins: '没有找到匹配的插件',
loading: '加载中...',
getPluginListError: '获取插件列表失败:',
- pluginConfig: '插件配置',
noPluginInstalled: '暂未安装任何插件',
noExtensionInstalled: '暂未安装任何扩展',
searchInstalled: '搜索已安装扩展',
@@ -1352,6 +1350,7 @@ const zhHans = {
loadingExtensions: '正在加载扩展...',
groupByType: '按格式分组',
groupByTypeShort: '分组',
+ pluginConfig: '插件配置',
pluginSort: '插件排序',
pluginSortDescription:
'插件顺序会影响同一事件内的处理顺序,请拖动插件卡片排序',
@@ -1533,7 +1532,6 @@ const zhHans = {
runnerUsageAll: '全部',
runnerUsageAgent: 'Agent / 流水线',
runnerUsageEvent: '插件处理器',
-
searchPlaceholder: '搜索插件...',
searchPlaceholderCount: '搜索 {{count}} 个扩展、能力或场景...',
searchResults: '搜索到 {{count}} 个扩展',
@@ -1607,13 +1605,9 @@ const zhHans = {
typeMCP: 'MCP',
typeSkill: '技能',
requestPlugin: '请求插件',
- tags: {
- filterByTags: '按标签筛选',
- selected: '已选',
- selectTags: '选择标签',
- clearAll: '清空',
- noTags: '暂无标签',
- },
+ viewDetails: '查看详情',
+ deprecated: '已弃用',
+ deprecatedTooltip: '请安装对应「知识引擎」插件',
filters: {
allFormats: '全部格式',
more: '筛选',
@@ -1623,9 +1617,13 @@ const zhHans = {
technicalType: '扩展格式',
},
allExtensions: '全部扩展',
- viewDetails: '查看详情',
- deprecated: '已弃用',
- deprecatedTooltip: '请安装对应「知识引擎」插件',
+ tags: {
+ filterByTags: '按标签筛选',
+ selected: '已选',
+ selectTags: '选择标签',
+ clearAll: '清空',
+ noTags: '暂无标签',
+ },
},
mcp: {
title: 'MCP',
@@ -2088,8 +2086,8 @@ const zhHans = {
resetting: '重置中...',
resetSuccess: '密码重置成功,请登录',
resetFailed: '密码重置失败,请检查邮箱和恢复密钥是否正确',
- backToLogin: '返回登录',
secondFactorFailed: '验证失败,请检查验证码后重试',
+ backToLogin: '返回登录',
verifyWith: '验证方式',
methodRecoveryKey: '恢复密钥',
methodTotp: '身份验证器',
@@ -2113,8 +2111,8 @@ const zhHans = {
'将在请求时附加到请求体中,如 encoding_format, dimensions 等',
},
llm: {
- llmModels: '对话模型',
description: '管理 LLM 模型,用于对话消息生成',
+ llmModels: '对话模型',
extraParametersDescription:
'将在请求时附加到请求体中,如 max_tokens, temperature, top_p 等',
},
@@ -2397,6 +2395,8 @@ const zhHans = {
arguments: '参数',
result: '结果',
noToolCalls: '未记录工具调用',
+ showDetails: '查看详情',
+ hideDetails: '隐藏详情',
},
tokens: {
totalTokens: '总 Token 数',
@@ -2711,8 +2711,8 @@ const zhHans = {
advancedSettings: '高级设置',
searchSkills: '搜索技能...',
selectSkills: '选择技能',
- builtin: '内置',
addSkill: '添加技能',
+ builtin: '内置',
importFromGithub: '从 GitHub 安装技能',
createManually: '手动创建',
uploadZip: '上传 ZIP 包',
@@ -2983,5 +2983,4 @@ const zhHans = {
invalidPage: '无效的插件页面',
},
};
-
export default zhHans;
diff --git a/web/src/i18n/locales/zh-Hant.ts b/web/src/i18n/locales/zh-Hant.ts
index 7e4adaaf7..487b24cd2 100644
--- a/web/src/i18n/locales/zh-Hant.ts
+++ b/web/src/i18n/locales/zh-Hant.ts
@@ -1,5 +1,4 @@
import pipelineMigration from './pipeline-migration/zh-Hant';
-
const zhHant = {
assistant: {
modelHint: '切換助手模型,從下一條訊息生效',
@@ -93,9 +92,6 @@ const zhHant = {
guidedTour: {
eventDebugDescription:
'選擇支援的事件並填寫測試資料,執行後查看輸出和工具呼叫結果。平台操作僅模擬執行,模型和其他工具依實際配置執行。',
-
- skip: '跳過',
-
pipeline: {
trigger: {
title: '選擇要回覆的訊息',
@@ -171,12 +167,8 @@ const zhHant = {
progress: '第 {{current}} 步,共 {{total}} 步',
next: '下一步',
finish: '完成指引',
+ skip: '跳過',
bot: {
- save: {
- title: '儲存機器人配置',
- description: '確認接入參數和事件路由後儲存;準備完成後即可啟用機器人。',
- },
-
connection: {
title: '選擇接入方式',
description:
@@ -200,6 +192,10 @@ const zhHant = {
title: '設定事件路由',
description: '選擇各類事件交給哪個處理器;建立後仍可繼續新增路由。',
},
+ save: {
+ title: '儲存機器人配置',
+ description: '確認接入參數和事件路由後儲存;準備完成後即可啟用機器人。',
+ },
submit: {
title: '建立機器人',
description:
@@ -241,11 +237,6 @@ const zhHant = {
},
},
knowledge: {
- save: {
- title: '儲存知識庫配置',
- description: '確認引擎參數和檢索設置後儲存配置。',
- },
-
basic: {
title: '填寫知識庫資訊',
description: '設定容易辨識的名稱和選填說明,再選擇儲存與檢索引擎。',
@@ -263,6 +254,10 @@ const zhHant = {
title: '設定檢索方式',
description: '設定引擎如何搜尋內容,以及如何將相關結果傳回處理器。',
},
+ save: {
+ title: '儲存知識庫配置',
+ description: '確認引擎參數和檢索設置後儲存配置。',
+ },
submit: {
title: '建立知識庫',
description: '建立後即可加入文件,或連接所選引擎支援的外部知識來源。',
@@ -285,15 +280,9 @@ const zhHant = {
editionCloud: 'Cloud',
},
common: {
- loadFailed: '載入失敗,請重試。',
- showSecret: '顯示密鑰',
- hideSecret: '隱藏密鑰',
- editBasicInfo: '編輯基本資訊',
- editBasicInfoDescription: '修改名稱、描述和圖標。',
- editBasicInfoDescriptionNoIcon: '修改名稱和描述。',
- management: '管理',
-
customValue: '自訂',
+ loadFailed: '載入失敗,請重試。',
+ search: '搜尋',
login: '登入',
logout: '登出',
accountOptions: '系統設定',
@@ -308,6 +297,8 @@ const zhHant = {
loginLoadError: '無法連線到伺服器',
loginLoadErrorDesc: '無法連線到 LangBot 後端服務,請確認服務已啟動後重試。',
retry: '重試',
+ showSecret: '顯示密鑰',
+ hideSecret: '隱藏密鑰',
enterEmail: '輸入電子郵件地址',
enterPassword: '輸入密碼',
invalidEmail: '請輸入有效的電子郵件地址',
@@ -319,6 +310,10 @@ const zhHant = {
joinDiscord: '加入 Discord 社群',
create: '建立',
edit: '編輯',
+ editBasicInfo: '編輯基本資訊',
+ editBasicInfoDescription: '修改名稱、描述和圖標。',
+ editBasicInfoDescriptionNoIcon: '修改名稱和描述。',
+ management: '管理',
delete: '刪除',
add: '新增',
select: '請選擇',
@@ -454,12 +449,11 @@ const zhHant = {
webhookHint: 'Webhook 允許 LangBot 將個人訊息和群組訊息事件推送到外部系統',
actions: '操作',
apiKeyCreatedMessage: '請複製此 API 金鑰,若按鈕無效,請手動複製。',
+ apiKeyStoredSecurely: 'Secret shown only when created',
none: '無',
more: '更多 ({{count}})',
less: '收起',
noItems: '暫無內容',
-
- apiKeyStoredSecurely: 'Secret shown only when created',
},
notFound: {
title: '頁面不存在',
@@ -609,6 +603,10 @@ const zhHant = {
credits: '積分',
loginWithSpace: '使用 LangBot 帳號登入',
loginToUseModels: '使用 LangBot 帳號登入以使用雲端模型',
+ ownerMustBindSpace:
+ 'The Workspace owner must connect a LangBot Account for LangBot Models.',
+ usesOwnerSpaceBilling:
+ "Uses the Workspace owner's LangBot Account billing and credits.",
noModels: '暫無模型',
availability: {
available: '上次檢測可用',
@@ -660,13 +658,84 @@ const zhHant = {
fallbackList: '備用模型',
addFallback: '新增備用模型',
},
-
- ownerMustBindSpace:
- 'The Workspace owner must connect a LangBot Account for LangBot Models.',
- usesOwnerSpaceBilling:
- "Uses the Workspace owner's LangBot Account billing and credits.",
},
bots: {
+ pluginSubscriptions: {
+ incompleteEvents:
+ '目前機器人僅支援部分事件({{events}}),處理器表現可能不完整。',
+ description: '自動接收外掛宣告的事件,與上方事件路由獨立執行。',
+ empty: '尚未綁定外掛處理器。',
+ add: '新增外掛處理器',
+ existing: '選擇現有設定',
+ new: '新增設定',
+ noExisting: '沒有可新增的設定,請建立一份。',
+ shared: '使用同一份設定的機器人會共用設定和執行狀態。',
+ saveHint: '新增後儲存機器人設定,綁定才會生效。',
+ createAndBind: '建立並綁定',
+ created: '設定已建立,儲存機器人設定後生效。',
+ enable: '啟用 {{name}}',
+ remove: '解除綁定 {{name}}',
+ configure: '設定',
+ logs: '查看日誌',
+ },
+ applyFailed: '設定已儲存,但套用失敗',
+ internalErrorHint: '發生內部錯誤,請透過錯誤編號查看後端日誌。',
+ errorReference: '錯誤編號:{{id}}',
+ title: '機器人',
+ description: '建立和管理機器人,這是 LangBot 與各個平台連接的入口',
+ createBot: '建立機器人',
+ selectFromSidebar: '從側邊欄選擇一個機器人',
+ editBot: '編輯機器人',
+ getBotListError: '取得機器人清單失敗:',
+ botName: '機器人名稱',
+ botDescription: '機器人描述',
+ botNameRequired: '機器人名稱不能為空',
+ botDescriptionRequired: '機器人描述不能為空',
+ adapterRequired: '適配器不能為空',
+ connectionMode: '接入方式',
+ connectionModeDescription: '從目前適配器支援的接入方式中選擇一種。',
+ connectionWebhook: 'Webhook',
+ connectionWebhookDescription: '平台向 LangBot 產生的位址推送事件。',
+ connectionPersistent: '長連線',
+ connectionPersistentDescription: 'LangBot 主動維持 Socket 或串流連線。',
+ noAdaptersForConnectionMode: '尚未安裝支援此接入方式的適配器。',
+ defaultDescription: '一個機器人',
+ getBotConfigError: '取得機器人設定失敗:',
+ saveSuccess: '儲存成功',
+ saveError: '儲存失敗:',
+ createSuccess: '建立成功,請設定事件路由',
+ createError: '建立失敗:',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ deleteConfirmation: '您確定要刪除這個機器人嗎?',
+ platformAdapter: '平台/適配器選擇',
+ selectAdapter: '選擇適配器',
+ legacyAdapters: '舊版適配器',
+ legacyAdapterBadge: '過時',
+ legacyAdaptersHint:
+ '這些適配器已有對應的事件驅動接入版本,\n僅為相容既有設定保留,不建議新建機器人時使用。',
+ adapterConfig: '適配器設定',
+ viewAdapterDocs: '查看文檔',
+ bindPipeline: '綁定流程線',
+ selectPipeline: '選擇流程線',
+ selectBot: '請選擇機器人',
+ botLogTitle: '機器人日誌',
+ enableAutoRefresh: '開啟自動重新整理',
+ session: '對話',
+ yesterday: '昨天',
+ earlier: '更久之前',
+ dateFormat: '{{month}}月{{day}}日',
+ setBotEnableError: '設定機器人啟用狀態失敗',
+ log: '日誌',
+ configuration: '設定',
+ logs: '日誌',
+ basicInfo: '基礎資訊',
+ basicInfoDescription: '設定機器人名稱和描述',
+ routingConnection: '路由與連接',
+ routingConnectionDescription: '綁定處理此機器人訊息的流程線',
+ eventRouting: '事件路由',
+ eventRoutingDescription:
+ '選擇此機器人收到不同事件時交給哪個處理器。在對應的 Agent 或 Pipeline 設定中編輯處理邏輯;Pipeline 僅支援訊息事件。',
eventBindings: '事件路由',
addEventBinding: '添加路由',
addBehavior: '添加行爲',
@@ -723,6 +792,7 @@ const zhHant = {
routeFallbackIgnored:
'未命中任何路由的事件會被忽略。只有需要爲每個事件指定結果時,才添加全局兜底路由。',
testRoute: '檢查路由',
+ adapterEventDebugAction: '測試監聽',
adapterEventDebugTitle: '平臺事件調試',
adapterEventDebugDescription:
'在 {{platform}} 中觸發事件,適配器收到後會顯示在這裏。',
@@ -799,6 +869,25 @@ const zhHant = {
dryRunDiagnosticMatched: '{{route}}已命中。{{reason}}',
dryRunDiagnosticSkipped: '{{route}}已跳過。{{reason}}',
eventCustom: '自定義事件',
+ eventWildcard: '全部事件',
+ eventNamespaceWildcard: '{{namespace}}.*',
+ eventNames: {
+ message_received: '收到訊息',
+ message_edited: '訊息已編輯',
+ message_deleted: '訊息已刪除',
+ message_reaction: '訊息表情回應',
+ feedback_received: '收到回饋',
+ friend_request_received: '收到好友請求',
+ friend_added: '新增好友',
+ group_member_joined: '成員加入群組',
+ group_member_left: '成員離開群組',
+ group_member_banned: '成員被封禁',
+ bot_invited_to_group: '機器人被邀請加入群組',
+ bot_removed_from_group: '機器人被移出群組',
+ bot_muted: '機器人被禁言',
+ bot_unmuted: '機器人被解除禁言',
+ platform_specific: '平台特定事件',
+ },
eventDescriptions: {
all: '匹配此適配器收到的全部事件。',
namespace: '匹配所有{{group}}事件。',
@@ -839,104 +928,6 @@ const zhHant = {
operator_not_contains: '不包含',
operator_starts_with: '前綴匹配',
operator_regex: '正則匹配',
-
- eventWildcard: '全部事件',
- eventNamespaceWildcard: '{{namespace}}.*',
- eventNames: {
- message_received: '收到訊息',
- message_edited: '訊息已編輯',
- message_deleted: '訊息已刪除',
- message_reaction: '訊息表情回應',
- feedback_received: '收到回饋',
- friend_request_received: '收到好友請求',
- friend_added: '新增好友',
- group_member_joined: '成員加入群組',
- group_member_left: '成員離開群組',
- group_member_banned: '成員被封禁',
- bot_invited_to_group: '機器人被邀請加入群組',
- bot_removed_from_group: '機器人被移出群組',
- bot_muted: '機器人被禁言',
- bot_unmuted: '機器人被解除禁言',
- platform_specific: '平台特定事件',
- },
- pluginSubscriptions: {
- incompleteEvents:
- '目前機器人僅支援部分事件({{events}}),處理器表現可能不完整。',
- description: '自動接收外掛宣告的事件,與上方事件路由獨立執行。',
- empty: '尚未綁定外掛處理器。',
- add: '新增外掛處理器',
- existing: '選擇現有設定',
- new: '新增設定',
- noExisting: '沒有可新增的設定,請建立一份。',
- shared: '使用同一份設定的機器人會共用設定和執行狀態。',
- saveHint: '新增後儲存機器人設定,綁定才會生效。',
- createAndBind: '建立並綁定',
- created: '設定已建立,儲存機器人設定後生效。',
- enable: '啟用 {{name}}',
- remove: '解除綁定 {{name}}',
- configure: '設定',
- logs: '查看日誌',
- },
- applyFailed: '設定已儲存,但套用失敗',
- internalErrorHint: '發生內部錯誤,請透過錯誤編號查看後端日誌。',
- errorReference: '錯誤編號:{{id}}',
-
- adapterEventDebugAction: '測試監聽',
- title: '機器人',
- description: '建立和管理機器人,這是 LangBot 與各個平台連接的入口',
- createBot: '建立機器人',
- selectFromSidebar: '從側邊欄選擇一個機器人',
- editBot: '編輯機器人',
- getBotListError: '取得機器人清單失敗:',
- botName: '機器人名稱',
- botDescription: '機器人描述',
- botNameRequired: '機器人名稱不能為空',
- botDescriptionRequired: '機器人描述不能為空',
- adapterRequired: '適配器不能為空',
- connectionMode: '接入方式',
- connectionModeDescription: '從目前適配器支援的接入方式中選擇一種。',
- connectionWebhook: 'Webhook',
- connectionWebhookDescription: '平台向 LangBot 產生的位址推送事件。',
- connectionPersistent: '長連線',
- connectionPersistentDescription: 'LangBot 主動維持 Socket 或串流連線。',
- noAdaptersForConnectionMode: '尚未安裝支援此接入方式的適配器。',
- defaultDescription: '一個機器人',
- getBotConfigError: '取得機器人設定失敗:',
- saveSuccess: '儲存成功',
- saveError: '儲存失敗:',
- createSuccess: '建立成功,請設定事件路由',
- createError: '建立失敗:',
- deleteSuccess: '刪除成功',
- deleteError: '刪除失敗:',
- deleteConfirmation: '您確定要刪除這個機器人嗎?',
- platformAdapter: '平台/適配器選擇',
- selectAdapter: '選擇適配器',
- legacyAdapters: '舊版適配器',
- legacyAdapterBadge: '過時',
- legacyAdaptersHint:
- '這些適配器已有對應的事件驅動接入版本,\n僅為相容既有設定保留,不建議新建機器人時使用。',
- adapterConfig: '適配器設定',
- viewAdapterDocs: '查看文檔',
- bindPipeline: '綁定流程線',
- selectPipeline: '選擇流程線',
- selectBot: '請選擇機器人',
- botLogTitle: '機器人日誌',
- enableAutoRefresh: '開啟自動重新整理',
- session: '對話',
- yesterday: '昨天',
- earlier: '更久之前',
- dateFormat: '{{month}}月{{day}}日',
- setBotEnableError: '設定機器人啟用狀態失敗',
- log: '日誌',
- configuration: '設定',
- logs: '日誌',
- basicInfo: '基礎資訊',
- basicInfoDescription: '設定機器人名稱和描述',
- routingConnection: '路由與連接',
- routingConnectionDescription: '綁定處理此機器人訊息的流程線',
- eventRouting: '事件路由',
- eventRoutingDescription:
- '選擇此機器人收到不同事件時交給哪個處理器。在對應的 Agent 或 Pipeline 設定中編輯處理邏輯;Pipeline 僅支援訊息事件。',
routingRules: '條件路由規則',
routingRulesDescription:
'按順序匹配,命中第一條規則後路由到對應流程線;都不匹配時使用上方預設流程線',
@@ -1019,6 +1010,10 @@ const zhHant = {
discarded: '已丟棄',
userMessage: '使用者',
botMessage: '助手',
+ totalSessions: '{{count}} 個會話',
+ userSearch: '使用者 ID 或名稱',
+ startDate: '開始日期',
+ endDate: '結束日期',
},
admins: {
title: '管理員',
@@ -1035,12 +1030,111 @@ const zhHant = {
deleteError: '移除失敗:',
noAdmins: '尚無管理員',
setAdminTitle: '設為管理員',
- removeAdminTitle: '移除管理員權限',
adminBadge: '管理員',
configureAdmins: '設定管理員',
+ removeAdminTitle: '移除管理員權限',
},
},
agents: {
+ monitoring: {
+ description: '查看每次任務的觸發事件、模型輸出和工具執行過程。',
+ empty: '尚無執行紀錄。觸發平台事件或執行除錯後,可在此查看。',
+ input: '觸發輸入',
+ eventData: '事件資料',
+ execution: '執行過程',
+ rawEvents: '原始執行事件',
+ inputUnavailable: '此次執行未記錄輸入內容。',
+ },
+ eventProcessor: {
+ configurations: '外掛處理器設定',
+ configTab: '設定',
+ logsTab: '日誌',
+ noSettings: '此外掛處理器無需設定。',
+ createPageTitle: '建立事件處理器',
+ processWithPlugin: '外掛程式碼處理',
+ pluginSettings: '外掛設定',
+ pluginSettingsDescription: '由目前外掛宣告的參數。',
+ selectToDebug: '請先在上方選擇外掛,再開始除錯。',
+ debugOutput: '處理器輸出',
+ debugDescription: '目前測試的輸入事件、外掛日誌和動作結果。',
+ debugNotice:
+ '外掛實際處理測試事件;回覆、傳送等平台動作使用 Mock,不傳送真實訊息。其他工具仍依實際設定執行。',
+ create: '建立外掛處理器',
+ type: '外掛處理器',
+ description: '由外掛中的程式碼處理事件,處理邏輯由外掛實作。',
+ component: '外掛處理器',
+ selectComponent: '選擇外掛處理器',
+ unavailable: '元件無法使用',
+ noComponents: '尚未安裝提供外掛處理器的外掛。',
+ installPlugin: '安裝外掛',
+ loadError: '無法載入處理器詳情。',
+ refresh: '重新整理',
+ runs: '執行記錄',
+ noRuns: '尚無執行記錄,綁定機器人後開始處理。',
+ bindBot: '綁定機器人',
+ trace: '日誌與訊息流向',
+ selectRun: '選擇一筆執行記錄查看詳情。',
+ input: '傳入事件',
+ destination: '傳送目標',
+ loadMore: '載入更多',
+ activation: '安裝外掛、建立處理器設定,再綁定機器人。',
+ status_timeout: '已逾時',
+ status_pending: '待執行',
+ status_running: '執行中',
+ status_completed: '已完成',
+ status_failed: '失敗',
+ status_cancelled: '已取消',
+ status_queued: '排隊中',
+ trace_run_completed: '執行完成',
+ trace_run_failed: '執行失敗',
+ trace_tool_call_started: '開始執行動作',
+ trace_tool_call_completed: '動作結果',
+ },
+ debugData: {
+ chatId: '會話 ID',
+ feedbackType: '回饋類型(1:讚,2:踩,3:取消)',
+ title: '事件資料',
+ form: '常用欄位',
+ json: '完整 JSON',
+ groupId: '群組 ID',
+ memberId: '成員 ID',
+ memberName: '成員暱稱',
+ userId: '使用者 ID',
+ userName: '使用者暱稱',
+ requesterId: '申請者 ID',
+ requesterName: '申請者暱稱',
+ messageId: '訊息 ID',
+ duration: '時長(秒)',
+ message: '訊息內容',
+ newMessage: '修改後的內容',
+ verificationMessage: '驗證訊息',
+ reaction: '表情',
+ groupName: '群組名稱',
+ feedback: '回饋內容',
+ rating: '評分',
+ eventName: '事件名稱',
+ privateChat: '留空為私聊',
+ sampleUser: '測試使用者',
+ sampleMessage: '你好',
+ sampleFeedback: '很有幫助',
+ invalidField: '請檢查{{field}}',
+ },
+ title: '處理器',
+ description: '建立可重用的處理器,並在機器人事件路由中使用',
+ create: '建立處理器',
+ editAgent: '編輯 Agent',
+ selectFromSidebar: '從側邊欄選擇一個處理器',
+ agentType: 'Agent',
+ agentTypeDescription: '透過執行器處理訊息、群成員、好友、回饋等平台事件。',
+ pipelineType: '流程線',
+ kindBadgeAgent: 'Agent',
+ kindBadgePipeline: '流水線',
+ groupByKind: '依類型分組',
+ groupByKindShort: '分組',
+ pipelineTypeDescription:
+ '依「接收訊息、呼叫 AI、回覆使用者」的固定流程執行,可設定知識庫與外掛擴充。僅處理訊息事件,適合步驟明確、需要控制處理過程的場景。',
+ allEvents: '支援全部事件',
+ messageEventsOnly: '僅支援訊息事件',
chooseType: '選擇處理方式',
chooseTypeDescription: '先選擇處理器的工作方式,創建後可繼續完善配置。',
diagramHint: '工作方式示意',
@@ -1065,8 +1159,15 @@ const zhHant = {
diagramAI: 'AI 處理',
diagramPostprocess: '後處理',
diagramOutput: '輸出',
+ basicInfo: '基本資訊',
+ basicInfoDescription: '設定名稱、圖示和描述',
+ runnerSettings: '執行器',
+ advanced: '進階',
eventsAndTools: '事件與工具',
eventsAndToolsDescription: '設置觸發範圍和可用工具。',
+ bindableEvents: '可綁定事件範圍',
+ bindableEventsDescription:
+ '限制此 Agent 可被機器人事件路由選擇的事件範圍。通常保持預設即可。',
configuredEvents: '已添加事件',
configuredEventsCount: '共 {{count}} 項',
addEvent: '添加事件',
@@ -1112,6 +1213,25 @@ const zhHant = {
write: '操作',
dangerous: '敏感',
},
+ supportedEvents: '事件範圍',
+ supportedEventsDescription:
+ '選擇全部事件、事件群組或具體事件。機器人路由只會在符合的事件中顯示此 Agent。',
+ searchEvents: '搜尋事件…',
+ noEventsFound: '沒有符合的事件',
+ nameRequired: '名稱不能為空',
+ createSuccess: '建立成功',
+ createError: '建立失敗:',
+ loadError: '載入失敗:',
+ saveSuccess: '儲存成功',
+ saveError: '儲存失敗:',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ deleteConfirmation: '你確定要刪除這個 Agent 嗎?',
+ dangerZone: '危險區域',
+ dangerZoneDescription: '不可逆的操作',
+ deleteAgentAction: '刪除此 Agent',
+ deleteAgentHint: '刪除後,綁定到它的事件將無法繼續執行。',
+ noRunnerMetadata: '目前沒有可用的運行器中繼資料。',
runnerStatusLoading: '正在檢查運行器狀態',
runnerStatusCheckFailed: '無法檢查運行器狀態',
runnerStatusCheckFailedDescription:
@@ -1196,135 +1316,6 @@ const zhHant = {
debugReviewRunnerConfig: '檢查運行器配置',
debugErrorDetails: '查看詳細錯誤',
debugRunFailed: 'Agent 調試運行失敗',
-
- monitoring: {
- description: '查看每次任務的觸發事件、模型輸出和工具執行過程。',
- empty: '尚無執行紀錄。觸發平台事件或執行除錯後,可在此查看。',
- input: '觸發輸入',
- eventData: '事件資料',
- execution: '執行過程',
- rawEvents: '原始執行事件',
- inputUnavailable: '此次執行未記錄輸入內容。',
- },
- eventProcessor: {
- configurations: '外掛處理器設定',
- configTab: '設定',
- logsTab: '日誌',
- noSettings: '此外掛處理器無需設定。',
- createPageTitle: '建立事件處理器',
- processWithPlugin: '外掛程式碼處理',
- pluginSettings: '外掛設定',
- pluginSettingsDescription: '由目前外掛宣告的參數。',
- selectToDebug: '請先在上方選擇外掛,再開始除錯。',
-
- debugOutput: '處理器輸出',
- debugDescription: '目前測試的輸入事件、外掛日誌和動作結果。',
- debugNotice:
- '外掛實際處理測試事件;回覆、傳送等平台動作使用 Mock,不傳送真實訊息。其他工具仍依實際設定執行。',
-
- create: '建立外掛處理器',
- type: '外掛處理器',
- description: '由外掛中的程式碼處理事件,處理邏輯由外掛實作。',
- component: '外掛處理器',
- selectComponent: '選擇外掛處理器',
- unavailable: '元件無法使用',
- noComponents: '尚未安裝提供外掛處理器的外掛。',
- installPlugin: '安裝外掛',
- loadError: '無法載入處理器詳情。',
- refresh: '重新整理',
- runs: '執行記錄',
- noRuns: '尚無執行記錄,綁定機器人後開始處理。',
- bindBot: '綁定機器人',
- trace: '日誌與訊息流向',
- selectRun: '選擇一筆執行記錄查看詳情。',
- input: '傳入事件',
- destination: '傳送目標',
- loadMore: '載入更多',
- activation: '安裝外掛、建立處理器設定,再綁定機器人。',
- status_timeout: '已逾時',
- status_pending: '待執行',
- status_running: '執行中',
- status_completed: '已完成',
- status_failed: '失敗',
- status_cancelled: '已取消',
- status_queued: '排隊中',
- trace_run_completed: '執行完成',
- trace_run_failed: '執行失敗',
- trace_tool_call_started: '開始執行動作',
- trace_tool_call_completed: '動作結果',
- },
- debugData: {
- chatId: '會話 ID',
- feedbackType: '回饋類型(1:讚,2:踩,3:取消)',
-
- title: '事件資料',
- form: '常用欄位',
- json: '完整 JSON',
- groupId: '群組 ID',
- memberId: '成員 ID',
- memberName: '成員暱稱',
- userId: '使用者 ID',
- userName: '使用者暱稱',
- requesterId: '申請者 ID',
- requesterName: '申請者暱稱',
- messageId: '訊息 ID',
- duration: '時長(秒)',
- message: '訊息內容',
- newMessage: '修改後的內容',
- verificationMessage: '驗證訊息',
- reaction: '表情',
- groupName: '群組名稱',
- feedback: '回饋內容',
- rating: '評分',
- eventName: '事件名稱',
- privateChat: '留空為私聊',
- sampleUser: '測試使用者',
- sampleMessage: '你好',
- sampleFeedback: '很有幫助',
- invalidField: '請檢查{{field}}',
- },
- title: '處理器',
- description: '建立可重用的處理器,並在機器人事件路由中使用',
- create: '建立處理器',
- editAgent: '編輯 Agent',
- selectFromSidebar: '從側邊欄選擇一個處理器',
- agentType: 'Agent',
- agentTypeDescription: '透過執行器處理訊息、群成員、好友、回饋等平台事件。',
- pipelineType: '流程線',
- kindBadgeAgent: 'Agent',
- kindBadgePipeline: '流水線',
- groupByKind: '依類型分組',
- groupByKindShort: '分組',
- pipelineTypeDescription:
- '依「接收訊息、呼叫 AI、回覆使用者」的固定流程執行,可設定知識庫與外掛擴充。僅處理訊息事件,適合步驟明確、需要控制處理過程的場景。',
- allEvents: '支援全部事件',
- messageEventsOnly: '僅支援訊息事件',
- basicInfo: '基本資訊',
- basicInfoDescription: '設定名稱、圖示和描述',
- runnerSettings: '執行器',
- advanced: '進階',
- bindableEvents: '可綁定事件範圍',
- bindableEventsDescription:
- '限制此 Agent 可被機器人事件路由選擇的事件範圍。通常保持預設即可。',
- supportedEvents: '事件範圍',
- supportedEventsDescription:
- '選擇全部事件、事件群組或具體事件。機器人路由只會在符合的事件中顯示此 Agent。',
- searchEvents: '搜尋事件…',
- noEventsFound: '沒有符合的事件',
- nameRequired: '名稱不能為空',
- createSuccess: '建立成功',
- createError: '建立失敗:',
- loadError: '載入失敗:',
- saveSuccess: '儲存成功',
- saveError: '儲存失敗:',
- deleteSuccess: '刪除成功',
- deleteError: '刪除失敗:',
- deleteConfirmation: '你確定要刪除這個 Agent 嗎?',
- dangerZone: '危險區域',
- dangerZoneDescription: '不可逆的操作',
- deleteAgentAction: '刪除此 Agent',
- deleteAgentHint: '刪除後,綁定到它的事件將無法繼續執行。',
- noRunnerMetadata: '目前沒有可用的運行器中繼資料。',
},
plugins: {
title: '外掛擴展',
@@ -1337,7 +1328,6 @@ const zhHant = {
install: '安裝',
installPlugin: '安裝外掛',
newPlugin: '新建外掛',
- installFromGithub: '來自 GitHub',
onlySupportGithub: '目前僅支援從 GitHub 安裝',
enterGithubLink: '請輸入外掛的Github連結',
installing: '正在安裝外掛...',
@@ -1351,7 +1341,6 @@ const zhHant = {
noMatchingPlugins: '沒有找到符合的外掛',
loading: '載入中...',
getPluginListError: '取得外掛清單失敗:',
- pluginConfig: '外掛設定',
noPluginInstalled: '暫未安裝任何外掛',
noExtensionInstalled: '暫未安裝任何擴充功能',
searchInstalled: '搜尋已安裝擴充功能',
@@ -1359,6 +1348,7 @@ const zhHant = {
loadingExtensions: '正在載入擴充功能...',
groupByType: '依格式分組',
groupByTypeShort: '分組',
+ pluginConfig: '外掛設定',
pluginSort: '外掛排序',
pluginSortDescription:
'外掛順序會影響同一事件內的處理順序,請拖曳外掛卡片排序',
@@ -1437,6 +1427,7 @@ const zhHant = {
components: '元件',
ready: '外掛包已解包,確認後開始安裝。',
},
+ uploadPluginOnly: '僅支援 .lbpkg 外掛包',
dragToUpload: '拖拽文件到此處上傳',
unsupportedFileType: '不支持的文件類型,僅支持 .lbpkg 和 .zip 文件',
uploadingPlugin: '正在上傳插件...',
@@ -1480,6 +1471,7 @@ const zhHant = {
chooseFile: '選擇檔案',
addFile: '新增檔案',
},
+ installFromGithub: '來自 GitHub',
enterRepoUrl: '請輸入 GitHub 倉庫地址',
repoUrlPlaceholder: '例如: https://github.com/owner/repo',
fetchingReleases: '正在獲取 Release 列表...',
@@ -1501,18 +1493,19 @@ const zhHant = {
installFromGithubDesc: '從 GitHub Release 安裝插件',
goToMarketplace: '前往外掛市場',
installProgress: {
+ title: '正在安裝 {{name}}',
updateTitle: '正在更新 {{name}}',
+ titleGeneric: '外掛安裝',
+ titlePlugin: '正在安裝外掛 {{name}}',
+ titleMCP: '正在安裝 MCP 伺服器 {{name}}',
+ titleSkill: '正在安裝技能 {{name}}',
+ overallProgress: '整體進度',
checkingUpdate: '檢查最新版本',
+ downloading: '下載外掛',
validating: '校驗插件包',
+ installingDeps: '安裝依賴',
applyingUpdate: '應用插件更新',
activating: '啟動並刷新組件',
- updateComplete: '插件更新成功',
-
- title: '正在安裝 {{name}}',
- titleGeneric: '外掛安裝',
- overallProgress: '整體進度',
- downloading: '下載外掛',
- installingDeps: '安裝依賴',
initializing: '初始化設定',
launching: '啟動外掛',
completed: '已完成',
@@ -1521,26 +1514,22 @@ const zhHant = {
depsInfo: '共 {{count}} 個依賴需要安裝',
depsProgress: '已安裝 {{installed}}/{{total}} · 剩餘 {{remaining}} 個',
installComplete: '外掛安裝成功',
+ updateComplete: '插件更新成功',
+ installCompletePlugin: '外掛安裝成功',
+ installCompleteMCP: 'MCP 伺服器安裝成功',
+ installCompleteSkill: '技能安裝成功',
dismiss: '關閉',
background: '背景執行',
taskQueue: '安裝任務',
clearCompleted: '清除已完成',
noTasks: '暫無安裝任務',
- titlePlugin: '正在安裝外掛 {{name}}',
- titleMCP: '正在安裝 MCP 伺服器 {{name}}',
- titleSkill: '正在安裝技能 {{name}}',
- installCompletePlugin: '外掛安裝成功',
- installCompleteMCP: 'MCP 伺服器安裝成功',
- installCompleteSkill: '技能安裝成功',
},
- uploadPluginOnly: '僅支援 .lbpkg 外掛包',
},
market: {
runnerUsage: '運行器用途',
runnerUsageAll: '全部',
runnerUsageAgent: 'Agent / 流水線',
runnerUsageEvent: '插件處理器',
-
searchPlaceholder: '搜尋插件...',
searchPlaceholderCount: '搜尋 {{count}} 個擴展、能力或場景...',
searchResults: '搜尋到 {{count}} 個擴展',
@@ -1614,13 +1603,9 @@ const zhHant = {
typeMCP: 'MCP',
typeSkill: '技能',
requestPlugin: '請求插件',
- tags: {
- filterByTags: '按標籤篩選',
- selected: '已選',
- selectTags: '選擇標籤',
- clearAll: '清空',
- noTags: '暫無標籤',
- },
+ viewDetails: '查看詳情',
+ deprecated: '已棄用',
+ deprecatedTooltip: '請安裝對應「知識引擎」插件',
filters: {
allFormats: '全部類型',
more: '更多',
@@ -1629,9 +1614,13 @@ const zhHant = {
technicalType: '技術類型',
},
allExtensions: '全部擴展',
- viewDetails: '查看詳情',
- deprecated: '已棄用',
- deprecatedTooltip: '請安裝對應「知識引擎」插件',
+ tags: {
+ filterByTags: '按標籤篩選',
+ selected: '已選',
+ selectTags: '選擇標籤',
+ clearAll: '清空',
+ noTags: '暫無標籤',
+ },
},
mcp: {
title: 'MCP',
@@ -1644,9 +1633,9 @@ const zhHant = {
getServerListError: '取得MCP伺服器清單失敗:',
serverName: '伺服器名稱',
serverMode: '連接模式',
+ selectMode: '選擇連接模式',
stdio: 'Stdio模式',
sse: 'SSE模式',
- selectMode: '選擇連接模式',
http: 'HTTP模式',
local: '本機(Stdio)',
remote: '遠端',
@@ -1766,8 +1755,6 @@ const zhHant = {
deleteMCPHint: '刪除後,此 MCP 伺服器設定將無法恢復。',
},
pipelines: {
- managementDescription: '複製或刪除此流水線。',
-
title: '流程線',
description: '流程線定義了對訊息事件的處理流程,用於綁定到機器人',
createPipeline: '建立流程線',
@@ -1788,6 +1775,7 @@ const zhHant = {
earliestEdited: '最早編輯',
basicInfo: '基本資訊',
basicInfoDescription: '設定流程線名稱、圖示和描述',
+ managementDescription: '複製或刪除此流水線。',
aiCapabilities: 'AI 能力',
triggerConditions: '觸發條件',
safetyControls: '安全控制',
@@ -1838,9 +1826,9 @@ const zhHant = {
selectAll: '全選',
enableAllPlugins: '啟用所有插件',
enableAllMCPServers: '啟用所有 MCP 伺服器',
+ enableAllSkills: '啟用全部技能',
allPluginsEnabled: '已啟用所有插件',
allMCPServersEnabled: '已啟用所有 MCP 伺服器',
- enableAllSkills: '啟用全部技能',
allSkillsEnabled: '已啟用全部技能',
skillsTitle: '技能',
noSkillsSelected: '未選擇技能',
@@ -1883,14 +1871,13 @@ const zhHant = {
selectKnowledgeBases: '選擇知識庫',
},
debugDialog: {
- saveAndSend: '儲存併發送',
-
title: '流程線對話',
selectPipeline: '選擇流程線',
sessionType: '對話類型',
privateChat: '私聊',
groupChat: '群聊',
send: '傳送',
+ saveAndSend: '儲存併發送',
reset: '重設對話',
inputPlaceholder: '傳送 {{type}} 訊息...',
noMessages: '暫無訊息',
@@ -1928,20 +1915,6 @@ const zhHant = {
},
},
knowledge: {
- installedEngines: '已安裝的知識引擎',
- noInstalledEngines: '尚未安裝任何知識引擎插件。',
- marketplaceEngines: '插件市場中的知識引擎插件',
- noMarketplaceEngines: '暫無可安裝的知識引擎插件。',
- loadingEngineCatalog: '正在載入插件市場…',
- engineCatalogUnavailable: '插件市場暫時不可用,重新打開選擇器即可重試。',
- viewMarketplace: '查看市場',
- installingEngine: '正在安裝 {{engine}}…',
- engineInstallSuccess: '{{engine}} 已安裝,可從已安裝列表中選擇',
- engineInstallFailed: '知識引擎安裝失敗,請稍後重試。',
- engineVersionUnavailable: '該插件沒有可安裝的版本。',
- engineInstallTimeout: '安裝仍未完成,請稍後刷新頁面查看。',
- engineRegistrationTimeout: '插件已安裝,但知識引擎組件尚未就緒。',
-
title: '知識庫',
createKnowledgeBase: '建立知識庫',
selectFromSidebar: '從側邊欄選擇一個知識庫',
@@ -2011,6 +1984,25 @@ const zhHant = {
fileName: '文檔名稱',
noResults: '暫無結果',
retrieveError: '檢索失敗:',
+ unknownEngine: '未知引擎',
+ knowledgeEngine: '知識引擎',
+ knowledgeEngineRequired: '知識引擎為必填項',
+ selectKnowledgeEngine: '選擇知識引擎',
+ installedEngines: '已安裝的知識引擎',
+ noInstalledEngines: '尚未安裝任何知識引擎插件。',
+ marketplaceEngines: '插件市場中的知識引擎插件',
+ noMarketplaceEngines: '暫無可安裝的知識引擎插件。',
+ loadingEngineCatalog: '正在載入插件市場…',
+ engineCatalogUnavailable: '插件市場暫時不可用,重新打開選擇器即可重試。',
+ viewMarketplace: '查看市場',
+ installingEngine: '正在安裝 {{engine}}…',
+ engineInstallSuccess: '{{engine}} 已安裝,可從已安裝列表中選擇',
+ engineInstallFailed: '知識引擎安裝失敗,請稍後重試。',
+ engineVersionUnavailable: '該插件沒有可安裝的版本。',
+ engineInstallTimeout: '安裝仍未完成,請稍後刷新頁面查看。',
+ engineRegistrationTimeout: '插件已安裝,但知識引擎組件尚未就緒。',
+ builtInEngine: '內建引擎',
+ cannotChangeKnowledgeEngine: '建立後無法更改知識引擎',
basicInfo: '基本資訊',
basicInfoDescription: '設定知識庫名稱、圖示和描述',
engineSettings: '引擎設定',
@@ -2026,12 +2018,6 @@ const zhHant = {
deleteKbHint: '刪除後,此知識庫中的所有文件和資料將被永久移除。',
noEnginesAvailable: '沒有可用的知識庫引擎',
installEngineHint: '請先安裝「知識引擎」插件',
- unknownEngine: '未知引擎',
- knowledgeEngine: '知識引擎',
- knowledgeEngineRequired: '知識引擎為必填項',
- selectKnowledgeEngine: '選擇知識引擎',
- builtInEngine: '內建引擎',
- cannotChangeKnowledgeEngine: '建立後無法更改知識引擎',
createKnowledgeBaseFailed: '知識庫建立失敗:',
loadKnowledgeBaseFailed: '知識庫載入失敗:',
deleteKnowledgeBaseFailed: '知識庫刪除失敗:',
@@ -2097,8 +2083,8 @@ const zhHant = {
resetting: '重設中...',
resetSuccess: '密碼重設成功,請登入',
resetFailed: '密碼重設失敗,請檢查電子郵件和恢復金鑰是否正確',
- backToLogin: '返回登入',
secondFactorFailed: '驗證失敗,請檢查驗證碼後重試',
+ backToLogin: '返回登入',
verifyWith: '驗證方式',
methodRecoveryKey: '恢復金鑰',
methodTotp: '驗證器',
@@ -2122,8 +2108,8 @@ const zhHant = {
'將在請求時附加到請求體中,如 encoding_format, dimensions 等',
},
llm: {
- llmModels: '對話模型',
description: '管理 LLM 模型,用於對話訊息產生',
+ llmModels: '對話模型',
extraParametersDescription:
'將在請求時附加到請求體中,如 max_tokens, temperature, top_p 等',
},
@@ -2223,7 +2209,6 @@ const zhHant = {
bindSpaceInvalidState: '無效的綁定請求,請從帳戶設定重新發起',
setPasswordHint: '設定密碼後可使用電子郵件密碼登入',
spaceEmailMismatch: 'LangBot 帳號電子郵件與本實例帳號電子郵件不匹配',
-
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.',
@@ -2231,6 +2216,89 @@ const zhHant = {
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: '儀表盤',
description: '監控機器人活動、LLM調用和系統效能',
@@ -2268,8 +2336,8 @@ const zhHant = {
embeddingCalls: 'Embedding調用',
modelCalls: '模型調用',
tokens: 'Token 監控',
- sessions: '會話分析',
feedback: '使用者反饋',
+ sessions: '會話分析',
errors: '錯誤日誌',
},
messageList: {
@@ -2328,6 +2396,8 @@ const zhHant = {
arguments: '參數',
result: '結果',
noToolCalls: '未記錄工具呼叫',
+ showDetails: '查看詳情',
+ hideDetails: '隱藏詳情',
},
tokens: {
totalTokens: '總 Token 數',
@@ -2388,12 +2458,12 @@ const zhHant = {
noData: '未找到會話',
},
errors: {
+ title: '錯誤',
errorType: '錯誤類型',
errorMessage: '錯誤訊息',
occurredAt: '發生時間',
noErrors: '未找到錯誤',
stackTrace: '堆疊追蹤',
- title: '錯誤',
},
feedback: {
title: '使用者反饋',
@@ -2430,12 +2500,12 @@ const zhHant = {
submitFailed: '反饋提交失敗,請稍後再試',
removeImage: '移除圖片',
},
- messageDetails: {
- noData: '此查詢沒有LLM調用或錯誤記錄',
- },
queries: {
title: '查詢',
},
+ messageDetails: {
+ noData: '此查詢沒有LLM調用或錯誤記錄',
+ },
queryVariables: {
title: '查詢變數',
},
@@ -2490,15 +2560,34 @@ const zhHant = {
settingsDialog: {
title: '設定',
nav: {
+ workspace: 'Workspace',
models: '模型',
api: 'API',
storage: '儲存',
account: '帳戶',
-
- workspace: 'Workspace',
},
},
storageAnalysis: {
+ title: '儲存分析',
+ description: '查看儲存占用和可清理檔案',
+ openDialog: '查看分析',
+ dialogTitle: '儲存分析',
+ generatedAt: '生成時間 {{time}}',
+ loading: '載入中...',
+ refresh: '重新整理',
+ totalSize: '總占用',
+ binaryStorage: '插件二進位儲存',
+ uploadCleanup: '過期上傳檔案',
+ logCleanup: '過期日誌',
+ sections: '儲存分區',
+ monitoringTables: '監控表',
+ runtimeTasks: '執行任務',
+ cleanupPolicy: '清理策略',
+ uploadRetention: '上傳檔案保留',
+ logRetention: '日誌保留',
+ databaseType: '資料庫類型',
+ days: '天',
+ missing: '不存在',
notCreated: '尚未創建',
processStorage: '各進程管理的存儲',
processStorageDescription:
@@ -2534,32 +2623,18 @@ const zhHant = {
plugin_runtime: '插件包、校驗後的製品、依賴環境和安裝實例私有資料。',
box_runtime: '沙箱工作區、MCP 進程工作區、附件交換目錄和技能目錄。',
},
-
- title: '儲存分析',
- description: '查看儲存占用和可清理檔案',
- openDialog: '查看分析',
- dialogTitle: '儲存分析',
- generatedAt: '生成時間 {{time}}',
- loading: '載入中...',
- refresh: '重新整理',
- totalSize: '總占用',
- binaryStorage: '插件二進位儲存',
- uploadCleanup: '過期上傳檔案',
- logCleanup: '過期日誌',
- sections: '儲存分區',
- monitoringTables: '監控表',
- runtimeTasks: '執行任務',
- cleanupPolicy: '清理策略',
- uploadRetention: '上傳檔案保留',
- logRetention: '日誌保留',
- databaseType: '資料庫類型',
- days: '天',
- missing: '不存在',
expiredUploads: '過期上傳檔案',
expiredLogs: '過期日誌',
noExpiredUploads: '暫無過期上傳檔案',
noExpiredLogs: '暫無過期日誌',
sectionNames: {
+ database: '資料庫',
+ logs: '日誌',
+ storage: '上傳檔案',
+ vector_store: '向量庫',
+ plugins: '插件',
+ mcp: 'MCP',
+ temp: '暫存檔案',
legacy_plugins: '舊版插件包',
artifacts: '已校驗插件製品',
dependency_environments: '插件依賴環境',
@@ -2574,14 +2649,6 @@ const zhHant = {
session_caches: '沙箱運行時緩存',
session_temp: '沙箱臨時檔案',
managed_process_workspaces: '受管進程工作區(包括 MCP)',
-
- database: '資料庫',
- logs: '日誌',
- storage: '上傳檔案',
- vector_store: '向量庫',
- plugins: '插件',
- mcp: 'MCP',
- temp: '暫存檔案',
},
},
limitation: {
@@ -2596,6 +2663,94 @@ const zhHant = {
createDisabledTooltip:
'目前工作區的{{resource}}數量已達上限({{max}}個)。請先刪除一個現有{{resource}}後再建立。',
},
+ skills: {
+ title: '技能',
+ description: '創建和管理可在對話中激活的技能',
+ createSkill: '創建技能',
+ createSkillDescription: '匯入本機目錄或手動填寫資訊建立',
+ editSkill: '編輯技能',
+ getSkillListError: '獲取技能列表失敗:',
+ skillName: '技能名稱',
+ displayName: '技能名稱',
+ displayNamePlaceholder: '顯示名稱',
+ skillSlug: '目錄名稱',
+ skillSlugPlaceholder: 'english-name-only',
+ skillSlugHelp: '用作技能目錄名,僅支援英文字母、數字、連字符和底線。',
+ skillDescription: '技能描述',
+ skillInstructions: '指令內容',
+ saveSuccess: '儲存成功',
+ saveError: '儲存失敗:',
+ createSuccess: '創建成功',
+ createError: '創建失敗:',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ deleteConfirmation: '你確定要刪除這個技能嗎?',
+ delete: '刪除技能',
+ skillNameRequired: '技能名稱不能為空',
+ skillDescriptionRequired: '技能描述不能為空',
+ packageRootRequired: '技能目錄不能為空',
+ scan: '掃描',
+ scanSuccess: '目錄掃描成功',
+ scanError: '掃描目錄失敗:',
+ noSkills: '暫未配置任何技能',
+ preview: '預覽',
+ previewInstructions: 'SKILL.md 內容預覽',
+ instructionsPlaceholder: '使用 Markdown 格式輸入技能指令...',
+ descriptionPlaceholder: '簡短描述此技能的功能',
+ packageRoot: '技能目錄',
+ packageRootHelp: '非必填。僅在導入已有技能目錄時需要填寫。',
+ importLocalDirectory: '匯入本地技能目錄',
+ chooseSkillDirectory: '選擇 SKILL.md 所在目錄',
+ chooseAnotherDirectory: '重新選擇目錄',
+ importingDirectory: '正在預覽...',
+ clearDirectoryPreview: '清除已選目錄',
+ noSkillMdInDirectory: '選擇的目錄中沒有找到 SKILL.md',
+ multipleSkillMdInDirectory:
+ '選擇的目錄中包含多個 SKILL.md,請直接選擇單個技能目錄。',
+ importDirectoryError: '匯入目錄失敗:',
+ advancedSettings: '進階設定',
+ searchSkills: '搜尋技能...',
+ selectSkills: '選擇技能',
+ addSkill: '添加技能',
+ builtin: '內建',
+ importFromGithub: '從 GitHub 安裝技能',
+ createManually: '手動創建',
+ uploadZip: '上傳 ZIP 包',
+ uploadZipOnly: '僅支援 .zip 技能包',
+ installSuccess: '技能安裝成功',
+ installError: '安裝技能失敗:',
+ enterRepoUrl: '輸入 GitHub 倉庫地址',
+ repoUrlPlaceholder: '例如 https://github.com/owner/repo',
+ fetchingReleases: '正在獲取發布版本...',
+ selectRelease: '選擇發布版本',
+ noReleasesFound: '未找到發布版本',
+ fetchReleasesError: '獲取發布版本失敗:',
+ selectAsset: '選擇要安裝的檔案',
+ sourceArchive: '源碼包 (zip)',
+ noAssetsFound: '此版本暫無可安裝的檔案',
+ fetchAssetsError: '獲取檔案列表失敗:',
+ backToReleases: '返回版本列表',
+ backToRepoUrl: '返回倉庫地址',
+ backToAssets: '返回檔案列表',
+ releaseTag: '標籤:{{tag}}',
+ publishedAt: '發布時間:{{date}}',
+ prerelease: '預發布',
+ assetSize: '大小:{{size}}',
+ confirmInstall: '確認安裝',
+ installing: '正在安裝技能...',
+ loading: '載入中...',
+ previewLoadError: '載入預覽失敗',
+ selectFromSidebar: '從側邊欄選擇一個技能',
+ dangerZone: '危險區域',
+ dangerZoneDescription: '不可逆且具破壞性的操作',
+ files: '檔案',
+ noFiles: '未找到檔案',
+ loadFilesError: '載入檔案失敗:',
+ readFileError: '讀取檔案失敗:',
+ saveFile: '儲存檔案',
+ saveFileSuccess: '檔案儲存成功',
+ saveFileError: '檔案儲存失敗:',
+ },
wizard: {
sidebarDescription: '透過引導步驟建立機器人',
loading: '正在載入嚮導...',
@@ -2651,24 +2806,6 @@ const zhHant = {
logsDescription: '監控機器人活動,確認平台連接是否正常運作。',
},
aiEngine: {
- loadingCatalog: '正在載入運行器擴展...',
- catalogUnavailable: '無法載入運行器目錄',
- catalogUnavailableDescription:
- '已安裝的運行器仍可使用。你可以重試,或前往擴展頁面查看。',
- noMarketplaceRunners: '暫無適用於此用途的運行器插件',
- noMarketplaceRunnersDescription: '可以使用已安裝的運行器,或稍後重試。',
- browseRunners: '瀏覽運行器擴展',
- installAndContinue: '安裝並繼續',
- installing: '正在安裝...',
- useInstalled: '使用此運行器',
- installedUnavailable: '已安裝,運行器不可用',
- installSuccess: '{{runner}} 已安裝並選中',
- installFailed: '運行器擴展安裝失敗',
- versionUnavailable: '擴展市場未返回可安裝版本。',
- installTimeout: '運行器安裝超時,請前往擴展頁面檢查任務。',
- registrationTimeout:
- '擴展已安裝,但運行器未完成註冊。請檢查插件運行時後重試。',
-
defaultModelUnavailable: '暫無可用的預設對話模型,請重試。',
defaultRunnerUnavailable: '本地 Agent 尚未就緒,請重試。',
preparingDefault: '正在準備預設 AI…',
@@ -2713,6 +2850,23 @@ const zhHant = {
createExternal: '建立並關聯',
finishWithModel: '使用所選模型並完成',
openWorkbench: '進入工作台',
+ loadingCatalog: '正在載入運行器擴展...',
+ catalogUnavailable: '無法載入運行器目錄',
+ catalogUnavailableDescription:
+ '已安裝的運行器仍可使用。你可以重試,或前往擴展頁面查看。',
+ noMarketplaceRunners: '暫無適用於此用途的運行器插件',
+ noMarketplaceRunnersDescription: '可以使用已安裝的運行器,或稍後重試。',
+ browseRunners: '瀏覽運行器擴展',
+ installAndContinue: '安裝並繼續',
+ installing: '正在安裝...',
+ useInstalled: '使用此運行器',
+ installedUnavailable: '已安裝,運行器不可用',
+ installSuccess: '{{runner}} 已安裝並選中',
+ installFailed: '運行器擴展安裝失敗',
+ versionUnavailable: '擴展市場未返回可安裝版本。',
+ installTimeout: '運行器安裝超時,請前往擴展頁面檢查任務。',
+ registrationTimeout:
+ '擴展已安裝,但運行器未完成註冊。請檢查插件運行時後重試。',
},
config: {
botInfo: '機器人資訊',
@@ -2829,178 +2983,5 @@ const zhHant = {
selectFromSidebar: '從側邊欄選擇一個插件頁面',
invalidPage: '無效的插件頁面',
},
- skills: {
- title: '技能',
- description: '創建和管理可在對話中激活的技能',
- createSkill: '創建技能',
- createSkillDescription: '匯入本機目錄或手動填寫資訊建立',
- editSkill: '編輯技能',
- getSkillListError: '獲取技能列表失敗:',
- skillName: '技能名稱',
- displayName: '技能名稱',
- displayNamePlaceholder: '顯示名稱',
- skillSlug: '目錄名稱',
- skillSlugPlaceholder: 'english-name-only',
- skillSlugHelp: '用作技能目錄名,僅支援英文字母、數字、連字符和底線。',
- skillDescription: '技能描述',
- skillInstructions: '指令內容',
- saveSuccess: '儲存成功',
- saveError: '儲存失敗:',
- createSuccess: '創建成功',
- createError: '創建失敗:',
- deleteSuccess: '刪除成功',
- deleteError: '刪除失敗:',
- deleteConfirmation: '你確定要刪除這個技能嗎?',
- delete: '刪除技能',
- skillNameRequired: '技能名稱不能為空',
- skillDescriptionRequired: '技能描述不能為空',
- packageRootRequired: '技能目錄不能為空',
- scan: '掃描',
- scanSuccess: '目錄掃描成功',
- scanError: '掃描目錄失敗:',
- noSkills: '暫未配置任何技能',
- preview: '預覽',
- previewInstructions: 'SKILL.md 內容預覽',
- instructionsPlaceholder: '使用 Markdown 格式輸入技能指令...',
- descriptionPlaceholder: '簡短描述此技能的功能',
- packageRoot: '技能目錄',
- packageRootHelp: '非必填。僅在導入已有技能目錄時需要填寫。',
- importLocalDirectory: '匯入本地技能目錄',
- chooseSkillDirectory: '選擇 SKILL.md 所在目錄',
- chooseAnotherDirectory: '重新選擇目錄',
- importingDirectory: '正在預覽...',
- clearDirectoryPreview: '清除已選目錄',
- noSkillMdInDirectory: '選擇的目錄中沒有找到 SKILL.md',
- multipleSkillMdInDirectory:
- '選擇的目錄中包含多個 SKILL.md,請直接選擇單個技能目錄。',
- importDirectoryError: '匯入目錄失敗:',
- advancedSettings: '進階設定',
- searchSkills: '搜尋技能...',
- selectSkills: '選擇技能',
- builtin: '內建',
- addSkill: '添加技能',
- importFromGithub: '從 GitHub 安裝技能',
- createManually: '手動創建',
- uploadZip: '上傳 ZIP 包',
- uploadZipOnly: '僅支援 .zip 技能包',
- installSuccess: '技能安裝成功',
- installError: '安裝技能失敗:',
- enterRepoUrl: '輸入 GitHub 倉庫地址',
- repoUrlPlaceholder: '例如 https://github.com/owner/repo',
- fetchingReleases: '正在獲取發布版本...',
- selectRelease: '選擇發布版本',
- noReleasesFound: '未找到發布版本',
- fetchReleasesError: '獲取發布版本失敗:',
- selectAsset: '選擇要安裝的檔案',
- sourceArchive: '源碼包 (zip)',
- noAssetsFound: '此版本暫無可安裝的檔案',
- fetchAssetsError: '獲取檔案列表失敗:',
- backToReleases: '返回版本列表',
- backToRepoUrl: '返回倉庫地址',
- selectFromSidebar: '從側邊欄選擇一個技能',
- backToAssets: '返回檔案列表',
- releaseTag: '標籤:{{tag}}',
- publishedAt: '發布時間:{{date}}',
- prerelease: '預發布',
- assetSize: '大小:{{size}}',
- confirmInstall: '確認安裝',
- installing: '正在安裝技能...',
- loading: '載入中...',
- previewLoadError: '載入預覽失敗',
- dangerZone: '危險區域',
- dangerZoneDescription: '不可逆且具破壞性的操作',
- files: '檔案',
- noFiles: '未找到檔案',
- loadFilesError: '載入檔案失敗:',
- readFileError: '讀取檔案失敗:',
- saveFile: '儲存檔案',
- saveFileSuccess: '檔案儲存成功',
- saveFileError: '檔案儲存失敗:',
- },
-
- 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',
- },
- },
};
-
export default zhHant;