mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-07-15 08:56:07 +00:00
Merge remote-tracking branch 'origin/master' into feat/card_dify_human_input
This commit is contained in:
+454
-15
@@ -2,12 +2,16 @@ const enUS = {
|
||||
sidebar: {
|
||||
home: 'Home',
|
||||
extensions: 'Extensions',
|
||||
installedPlugins: 'Installed Plugins',
|
||||
pluginMarket: 'Marketplace',
|
||||
installedPlugins: 'Installed',
|
||||
pluginMarket: 'Extension Market',
|
||||
mcpServers: 'MCP Servers',
|
||||
addExtension: 'Add Extension',
|
||||
pluginPages: 'Plugin Pages',
|
||||
pluginPagesTooltip: 'Visual pages provided by installed plugins',
|
||||
quickStart: 'Quick Start',
|
||||
scrollToBottom: 'Scroll to bottom',
|
||||
editionCommunity: 'Community',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: 'Login',
|
||||
@@ -31,13 +35,15 @@ const enUS = {
|
||||
emptyPassword: 'Please enter your password',
|
||||
language: 'Language',
|
||||
helpDocs: 'Get Help',
|
||||
featureRequest: 'Feature Request',
|
||||
featureRequest: 'Feedback',
|
||||
starOnGitHub: 'Star on GitHub',
|
||||
joinDiscord: 'Join our Discord',
|
||||
create: 'Create',
|
||||
edit: 'Edit',
|
||||
delete: 'Delete',
|
||||
add: 'Add',
|
||||
select: 'Select',
|
||||
skill: 'Skill',
|
||||
cancel: 'Cancel',
|
||||
submit: 'Submit',
|
||||
error: 'Error',
|
||||
@@ -66,6 +72,7 @@ const enUS = {
|
||||
test: 'Test',
|
||||
forgotPassword: 'Forgot Password?',
|
||||
agreementNotice: 'By continuing, you agree to our',
|
||||
termsOfService: 'Terms of Service',
|
||||
privacyPolicy: 'Privacy Policy',
|
||||
and: 'and',
|
||||
dataCollectionPolicy: 'Data Collection Policy',
|
||||
@@ -115,6 +122,8 @@ const enUS = {
|
||||
changePasswordFailed:
|
||||
'Failed to change password, please check your current password',
|
||||
apiIntegration: 'API Integration',
|
||||
apiIntegrationDescription:
|
||||
'Manage API keys and webhooks for external access',
|
||||
apiKeys: 'API Keys',
|
||||
manageApiIntegration: 'Manage API Integration',
|
||||
manageApiKeys: 'Manage API Keys',
|
||||
@@ -131,6 +140,16 @@ const enUS = {
|
||||
noApiKeys: 'No API keys configured',
|
||||
apiKeyHint:
|
||||
'API keys allow external systems to access LangBot Service APIs',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
|
||||
mcpEndpoint: 'MCP Endpoint',
|
||||
mcpAuthTitle: 'Authentication',
|
||||
mcpAuthDesc:
|
||||
'Authenticate with any API key from the API Keys tab, sent as a header:',
|
||||
mcpGlobalKeyNote:
|
||||
'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
|
||||
mcpClientConfigTitle: 'Example MCP client config',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: 'Create Webhook',
|
||||
webhookName: 'Webhook Name',
|
||||
@@ -194,6 +213,9 @@ const enUS = {
|
||||
selectModelAbilities: 'Select model abilities',
|
||||
visionAbility: 'Vision Ability',
|
||||
functionCallAbility: 'Function Call',
|
||||
contextLength: 'Context Window',
|
||||
contextLengthPlaceholder: 'Unknown',
|
||||
contextLengthInvalid: 'Context window must be a positive integer',
|
||||
extraParameters: 'Extra Parameters',
|
||||
addParameter: 'Add Parameter',
|
||||
keyName: 'Key Name',
|
||||
@@ -251,6 +273,7 @@ const enUS = {
|
||||
selectProvider: 'Select Provider',
|
||||
requester: 'Provider Type',
|
||||
selectRequester: 'Select Provider Type',
|
||||
searchProviders: 'Search providers...',
|
||||
langbotModelsDescription: 'Cloud models powered by LangBot Space',
|
||||
credits: 'Credits',
|
||||
loginWithSpace: 'Login with Space',
|
||||
@@ -421,6 +444,26 @@ const enUS = {
|
||||
userMessage: 'User',
|
||||
botMessage: 'Assistant',
|
||||
},
|
||||
admins: {
|
||||
title: 'Admins',
|
||||
description:
|
||||
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
||||
addAdmin: 'Add Admin',
|
||||
launcherType: 'Type',
|
||||
launcherId: 'ID',
|
||||
typePerson: 'Person',
|
||||
typeGroup: 'Group',
|
||||
placeholderId: 'User or group ID',
|
||||
addSuccess: 'Admin added',
|
||||
addError: 'Failed to add admin: ',
|
||||
deleteSuccess: 'Admin removed',
|
||||
deleteError: 'Failed to remove admin: ',
|
||||
noAdmins: 'No admins configured',
|
||||
setAdminTitle: 'Set as admin',
|
||||
adminBadge: 'Admin',
|
||||
configureAdmins: 'Manage Admins',
|
||||
removeAdminTitle: 'Remove admin',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: 'Extensions',
|
||||
@@ -429,10 +472,11 @@ const enUS = {
|
||||
createPlugin: 'Create Plugin',
|
||||
editPlugin: 'Edit Plugin',
|
||||
installed: 'Installed',
|
||||
marketplace: 'Marketplace',
|
||||
marketplace: 'Extension Market',
|
||||
arrange: 'Sort Plugins',
|
||||
install: 'Install',
|
||||
installPlugin: 'Install Plugin',
|
||||
newPlugin: 'New Plugin',
|
||||
onlySupportGithub: 'Currently only supports installation from GitHub',
|
||||
enterGithubLink: 'Enter GitHub link of the plugin',
|
||||
installing: 'Installing plugin...',
|
||||
@@ -447,6 +491,9 @@ const enUS = {
|
||||
loading: 'Loading...',
|
||||
getPluginListError: 'Failed to get plugin list:',
|
||||
noPluginInstalled: 'No plugins installed',
|
||||
noExtensionInstalled: 'No extensions installed',
|
||||
loadingExtensions: 'Loading extensions...',
|
||||
groupByType: 'Group by format',
|
||||
pluginConfig: 'Plugin Configuration',
|
||||
pluginSort: 'Plugin Sort',
|
||||
pluginSortDescription:
|
||||
@@ -472,6 +519,19 @@ const enUS = {
|
||||
noDebugKey: '(Not Set)',
|
||||
debugKeyDisabled:
|
||||
'Debug key is not set, plugin debugging does not require authentication',
|
||||
boxStatusTitle: 'Box Runtime',
|
||||
boxStatus: 'Status',
|
||||
boxConnected: 'Connected',
|
||||
boxUnavailable: 'Unavailable',
|
||||
boxBackend: 'Backend',
|
||||
boxProfile: 'Profile',
|
||||
boxSandboxes: 'Sandboxes',
|
||||
boxErrors: 'Errors',
|
||||
boxSessionImage: 'Image',
|
||||
boxSessionBackend: 'Backend',
|
||||
boxSessionResources: 'Resources',
|
||||
boxSessionNetwork: 'Network',
|
||||
boxStatusLoadFailed: 'Failed to load Box status',
|
||||
failedToGetDebugInfo: 'Failed to get debug information',
|
||||
copiedToClipboard: 'Copied to clipboard',
|
||||
deleting: 'Deleting...',
|
||||
@@ -488,6 +548,8 @@ const enUS = {
|
||||
close: 'Close',
|
||||
deleteConfirm: 'Delete Confirmation',
|
||||
deleteSuccess: 'Delete successful',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDescription: 'Irreversible and destructive actions',
|
||||
modifyFailed: 'Modify failed: ',
|
||||
componentName: {
|
||||
Tool: 'Tool',
|
||||
@@ -500,14 +562,31 @@ const enUS = {
|
||||
uploadLocal: 'Upload Local',
|
||||
debugging: 'Debugging',
|
||||
uploadLocalPlugin: 'Upload Local Plugin',
|
||||
localPreview: {
|
||||
title: 'Preview Local Plugin Package',
|
||||
unpacking: 'Unpacking package preview...',
|
||||
unpackComplete: 'Package preview ready',
|
||||
failed: 'Failed to preview package',
|
||||
pluginInfo: 'Plugin Info',
|
||||
packageInfo: 'Package Info',
|
||||
name: 'Name',
|
||||
author: 'Author',
|
||||
version: 'Version',
|
||||
fileCount: 'Files',
|
||||
dependencies: 'Dependencies',
|
||||
components: 'Components',
|
||||
ready: 'The plugin package is unpacked. Confirm to start installation.',
|
||||
},
|
||||
uploadPluginOnly: 'Only .lbpkg files are supported',
|
||||
dragToUpload: 'Drag plugin file here to upload',
|
||||
unsupportedFileType:
|
||||
'Unsupported file type, only .lbpkg and .zip files are supported',
|
||||
'Unsupported file type, only .lbpkg files are supported',
|
||||
uploadingPlugin: 'Uploading plugin...',
|
||||
uploadSuccess: 'Upload successful',
|
||||
uploadFailed: 'Upload failed',
|
||||
selectFileToUpload: 'Select plugin file to upload',
|
||||
askConfirm: 'Are you sure to install plugin "{{name}}" ({{version}})?',
|
||||
askConfirmNoVersion: 'Are you sure to install plugin "{{name}}"?',
|
||||
fromGithub: 'From GitHub',
|
||||
fromLocal: 'From Local',
|
||||
fromMarketplace: 'From Marketplace',
|
||||
@@ -530,6 +609,13 @@ const enUS = {
|
||||
viewSource: 'View Source',
|
||||
loadingReadme: 'Loading documentation...',
|
||||
noReadme: 'This plugin does not provide README documentation',
|
||||
tabDocs: 'Documentation',
|
||||
tabLogs: 'Logs',
|
||||
logsLevelAll: 'All levels',
|
||||
logsRefresh: 'Refresh',
|
||||
logsAutoRefresh: 'Auto-refresh',
|
||||
logsEmpty:
|
||||
'No logs yet. Logs printed by the plugin via logger will appear here.',
|
||||
fileUpload: {
|
||||
tooLarge: 'File size exceeds 10MB limit',
|
||||
success: 'File uploaded successfully',
|
||||
@@ -558,22 +644,28 @@ const enUS = {
|
||||
assetSize: 'Size: {{size}}',
|
||||
confirmInstall: 'Confirm Install',
|
||||
installFromGithubDesc: 'Install plugin from GitHub Release',
|
||||
goToMarketplace: 'Go to Marketplace',
|
||||
goToMarketplace: 'Go to Extension Market',
|
||||
installProgress: {
|
||||
title: 'Installing {{name}}',
|
||||
titleGeneric: 'Plugin Installation',
|
||||
titleGeneric: 'Extension Installation',
|
||||
titlePlugin: 'Installing Plugin {{name}}',
|
||||
titleMCP: 'Installing MCP Server {{name}}',
|
||||
titleSkill: 'Installing Skill {{name}}',
|
||||
overallProgress: 'Overall Progress',
|
||||
downloading: 'Downloading Plugin',
|
||||
downloading: 'Downloading',
|
||||
installingDeps: 'Installing Dependencies',
|
||||
initializing: 'Initializing Settings',
|
||||
launching: 'Launching Plugin',
|
||||
launching: 'Launching',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
downloadSize: 'Package size: {{size}}',
|
||||
depsInfo: '{{count}} dependencies to install',
|
||||
depsProgress:
|
||||
'{{installed}}/{{total}} installed · {{remaining}} remaining',
|
||||
installComplete: 'Plugin installed successfully',
|
||||
installComplete: 'Installation successful',
|
||||
installCompletePlugin: 'Plugin installed successfully',
|
||||
installCompleteMCP: 'MCP Server installed successfully',
|
||||
installCompleteSkill: 'Skill installed successfully',
|
||||
dismiss: 'Dismiss',
|
||||
background: 'Run in Background',
|
||||
taskQueue: 'Install Tasks',
|
||||
@@ -583,20 +675,28 @@ const enUS = {
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: 'Search plugins...',
|
||||
searchResults: 'Found {{count}} plugins',
|
||||
totalPlugins: 'Total {{count}} plugins',
|
||||
searchPlaceholderCount:
|
||||
'Search {{count}} extensions, capabilities, or use cases...',
|
||||
searchResults: 'Found {{count}} extensions',
|
||||
totalPlugins: 'Total {{count}} extensions',
|
||||
noPlugins: 'No plugins available',
|
||||
noResults: 'No relevant plugins found',
|
||||
loadingMore: 'Loading more...',
|
||||
loading: 'Loading...',
|
||||
allLoaded: 'All plugins displayed',
|
||||
allLoadedCount: 'All {{count}} extensions displayed',
|
||||
install: 'Install',
|
||||
installCard: 'Install {{name}}',
|
||||
installConfirm:
|
||||
'Are you sure you want to install plugin "{{name}}" ({{version}})?',
|
||||
downloadComplete: 'Plugin "{{name}}" download completed',
|
||||
installFailed: 'Installation failed, please try again later',
|
||||
loadFailed: 'Failed to get plugin list, please try again later',
|
||||
noDescription: 'No description available',
|
||||
recommendation: {
|
||||
pause: 'Pause auto-rotation',
|
||||
resume: 'Resume auto-rotation',
|
||||
},
|
||||
notFound: 'Plugin information not found',
|
||||
sortBy: 'Sort by',
|
||||
sort: {
|
||||
@@ -623,13 +723,37 @@ const enUS = {
|
||||
markAsRead: 'Mark as Read',
|
||||
markAsReadSuccess: 'Marked as read',
|
||||
markAsReadFailed: 'Mark as read failed',
|
||||
filterByComponent: 'Component',
|
||||
filterByComponent: 'Plugin Component',
|
||||
filterByComponentHint:
|
||||
'The capability types a plugin provides — Tool, Command, EventListener, etc. — used to extend LangBot in various ways. Filter by component to show only plugins offering that capability.',
|
||||
allComponents: 'All Components',
|
||||
componentName: {
|
||||
Tool: 'Tool',
|
||||
EventListener: 'Event Listener',
|
||||
Command: 'Command',
|
||||
KnowledgeEngine: 'Knowledge Engine',
|
||||
Parser: 'Parser',
|
||||
Page: 'Page',
|
||||
},
|
||||
filterByType: 'Type',
|
||||
allTypes: 'All Types',
|
||||
typePlugin: 'Plugin',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: 'Skill',
|
||||
requestPlugin: 'Request Plugin',
|
||||
viewDetails: 'View Details',
|
||||
deprecated: 'Deprecated',
|
||||
deprecatedTooltip:
|
||||
'Please install the corresponding Knowledge Engine plugin.',
|
||||
filters: {
|
||||
allFormats: 'All formats',
|
||||
more: 'Filters',
|
||||
advancedTitle: 'Advanced filters',
|
||||
advancedDescription:
|
||||
'Most users do not need these. Use them only when you know the extension format you want.',
|
||||
technicalType: 'Extension format',
|
||||
},
|
||||
allExtensions: 'All Extensions',
|
||||
tags: {
|
||||
filterByTags: 'Filter by Tags',
|
||||
selected: 'selected',
|
||||
@@ -641,6 +765,7 @@ const enUS = {
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: 'Add MCP Server',
|
||||
addMCPServer: 'Add MCP Server',
|
||||
editServer: 'Edit MCP Server',
|
||||
deleteServer: 'Delete MCP Server',
|
||||
confirmDeleteServer: 'Are you sure you want to delete this MCP server?',
|
||||
@@ -652,6 +777,15 @@ const enUS = {
|
||||
stdio: 'Stdio Mode',
|
||||
sse: 'SSE Mode',
|
||||
http: 'HTTP Mode',
|
||||
local: 'Local (Stdio)',
|
||||
remote: 'Remote',
|
||||
localModeDescription:
|
||||
'Run an MCP server locally as a subprocess inside the Box sandbox.',
|
||||
remoteModeDescription:
|
||||
'Connect to a remote MCP server by URL. The transport (Streamable HTTP or SSE) is detected automatically.',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'Paste the MCP server URL. Both Streamable HTTP and legacy SSE endpoints are supported.',
|
||||
noServerInstalled: 'No MCP servers configured',
|
||||
serverNameRequired: 'Server name cannot be empty',
|
||||
commandRequired: 'Command cannot be empty',
|
||||
@@ -678,9 +812,29 @@ const enUS = {
|
||||
connectionSuccess: 'Connection successful',
|
||||
connectionFailed: 'Connection failed, please check URL',
|
||||
connectionFailedStatus: 'Connection Failed',
|
||||
boxDisabledStdioRefused:
|
||||
'Stdio MCP servers require the Box sandbox, which is disabled in config (box.enabled = false).',
|
||||
boxUnavailableStdioRefused:
|
||||
'Stdio MCP servers require the Box sandbox, which is currently unreachable.',
|
||||
boxStdioRefusedSuggestion:
|
||||
'Enable Box (box.enabled = true) and ensure the runtime is healthy, or switch this server to http/sse mode.',
|
||||
boxRequired: 'requires Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'Stdio MCP cannot be saved while the Box sandbox is disabled or unreachable. Enable Box or pick http/sse.',
|
||||
toolsFound: 'tools',
|
||||
unknownError: 'Unknown error',
|
||||
noToolsFound: 'No tools found',
|
||||
noResourcesFound: 'No resources found',
|
||||
tabTools: 'Tools',
|
||||
tabResources: 'Resources',
|
||||
tabDocs: 'Docs',
|
||||
tabLogs: 'Logs',
|
||||
logsLevelAll: 'All levels',
|
||||
logsRefresh: 'Refresh',
|
||||
logsAutoRefresh: 'Auto refresh',
|
||||
logsEmpty:
|
||||
'No logs yet. Runtime logs from the MCP server will appear here.',
|
||||
noReadme: 'No documentation available',
|
||||
parseResultFailed: 'Failed to parse test result',
|
||||
noResultReturned: 'Test returned no result',
|
||||
getTaskFailed: 'Failed to get task status',
|
||||
@@ -696,6 +850,13 @@ const enUS = {
|
||||
loadFailed: 'Load failed',
|
||||
modifyFailed: 'Modify failed: ',
|
||||
toolCount: 'Tools: {{count}}',
|
||||
parameterCount: 'Parameters: {{count}}',
|
||||
noParameters: 'No parameters',
|
||||
resourceCount: 'Resources: {{count}}',
|
||||
resourceBinaryContent: 'Binary content (cannot be displayed)',
|
||||
resourceBinaryOmitted: 'Binary content omitted by resource safety policy',
|
||||
resourceTruncated: 'Content truncated by byte or token limits',
|
||||
resourceReadFailed: 'Failed to read resource content',
|
||||
statusConnected: 'Connected',
|
||||
statusDisconnected: 'Disconnected',
|
||||
statusError: 'Connection Error',
|
||||
@@ -787,17 +948,63 @@ const enUS = {
|
||||
selectPlugins: 'Select Plugins',
|
||||
pluginsTitle: 'Plugins',
|
||||
mcpServersTitle: 'MCP Servers',
|
||||
mcpResourcesTitle: 'MCP Resources',
|
||||
noMCPServersSelected: 'No MCP servers selected',
|
||||
noMCPResourcesAvailable: 'No MCP resources available',
|
||||
addMCPServer: 'Add MCP Server',
|
||||
selectMCPServers: 'Select MCP Servers',
|
||||
enableMCPResourceAgentRead: 'Agent read',
|
||||
toolCount: '{{count}} tools',
|
||||
noPluginsInstalled: 'No installed plugins',
|
||||
noMCPServersConfigured: 'No configured MCP servers',
|
||||
selectAll: 'Select All',
|
||||
enableAllPlugins: 'Enable All Plugins',
|
||||
enableAllMCPServers: 'Enable All MCP Servers',
|
||||
enableAllSkills: 'Enable All Skills',
|
||||
allPluginsEnabled: 'All plugins enabled',
|
||||
allMCPServersEnabled: 'All MCP servers enabled',
|
||||
allSkillsEnabled: 'All skills enabled',
|
||||
skillsTitle: 'Skills',
|
||||
noSkillsSelected: 'No skills selected',
|
||||
addSkill: 'Add Skill',
|
||||
selectSkills: 'Select Skills',
|
||||
noSkillsAvailable: 'No skills available',
|
||||
mcpServersScopeTooltip:
|
||||
'This only controls which MCP servers are bound to the pipeline. Choose exact MCP tools and resources in AI Feature > Local Agent.',
|
||||
enableAllMCPServersTooltip:
|
||||
'When enabled, all configured and enabled MCP servers become candidates for MCP tools and resources in AI Feature.',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: 'Tools',
|
||||
toolsDescription:
|
||||
'Select plugin, MCP, skill, and built-in tools available to this Local Agent.',
|
||||
toolsScopeTooltip:
|
||||
'MCP tools only come from MCP servers bound in Extensions. Bind another MCP server there to make its tools selectable here.',
|
||||
enableAllTools: 'Enable all tools',
|
||||
allToolsEnabled: 'All available tools are enabled',
|
||||
noToolsSelected: 'No tools selected',
|
||||
editTools: 'Edit tools',
|
||||
builtinTools: 'Built-in tools',
|
||||
pluginTools: 'Plugin tools',
|
||||
skillTools: 'Skill tools',
|
||||
mcpTools: 'MCP tools',
|
||||
mcpToolsScopeTooltip:
|
||||
'Only tools from MCP servers currently allowed in Extensions are shown here.',
|
||||
skillToolsScopeTooltip:
|
||||
'Skill tools are available when LangBot skill service and the Box sandbox backend are ready. They let the agent activate or register skills.',
|
||||
selectTools: 'Select tools',
|
||||
resourcesTitle: 'Resources',
|
||||
resourcesDescription:
|
||||
'Select MCP resources and knowledge bases available to this Local Agent.',
|
||||
knowledgeBases: 'Knowledge bases',
|
||||
mcpResources: 'MCP resources',
|
||||
mcpResourcesScopeTooltip:
|
||||
'Only resources exposed by MCP servers currently allowed in Extensions are shown here.',
|
||||
enableMCPResourceRead: 'Allow model to read MCP resources',
|
||||
mcpResourceReadTooltip:
|
||||
'When disabled, selected MCP resources are not injected into model context.',
|
||||
noMCPResourcesAvailable: 'No MCP resources available',
|
||||
selectKnowledgeBases: 'Select knowledge bases',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Pipeline Chat',
|
||||
@@ -902,7 +1109,7 @@ const enUS = {
|
||||
builtInParser: 'Provided by Knowledge engine',
|
||||
noParserAvailable:
|
||||
'No parser supports this file type. Please install a parser plugin that can handle this format.',
|
||||
installParserHint: 'Browse parser plugins in Marketplace →',
|
||||
installParserHint: 'Browse parser plugins in Extension Market →',
|
||||
confirmUpload: 'Upload',
|
||||
cancelUpload: 'Cancel',
|
||||
},
|
||||
@@ -1038,6 +1245,7 @@ const enUS = {
|
||||
},
|
||||
account: {
|
||||
settings: 'Account Settings',
|
||||
settingsDescription: 'Manage your password and linked accounts',
|
||||
setPassword: 'Set Password',
|
||||
passwordSetSuccess: 'Password set successfully',
|
||||
passwordStatus: 'Local Password',
|
||||
@@ -1102,6 +1310,7 @@ const enUS = {
|
||||
llmCalls: 'LLM Calls',
|
||||
embeddingCalls: 'Embedding Calls',
|
||||
modelCalls: 'Model Calls',
|
||||
tokens: 'Token Monitoring',
|
||||
feedback: 'User Feedback',
|
||||
sessions: 'Session Analysis',
|
||||
errors: 'Error Logs',
|
||||
@@ -1126,6 +1335,20 @@ const enUS = {
|
||||
level: 'Level',
|
||||
runner: 'Runner',
|
||||
viewConversation: 'View Conversation',
|
||||
turns: '{{count}} conversation turns',
|
||||
userMessage: 'User',
|
||||
noUserMessage: 'No user input recorded',
|
||||
assistantMessage: 'Assistant',
|
||||
assistantMessageCount: 'Assistant +{{count}}',
|
||||
noAssistantMessage: 'No assistant reply recorded',
|
||||
messageCount: 'Messages',
|
||||
conversationTrace: 'Conversation Trace',
|
||||
noLlmCalls: 'No model calls recorded',
|
||||
roles: {
|
||||
user: 'User',
|
||||
assistant: 'Assistant',
|
||||
message: 'Message',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'LLM Calls',
|
||||
@@ -1140,6 +1363,39 @@ const enUS = {
|
||||
avgDuration: 'Avg Duration',
|
||||
calls: 'Calls',
|
||||
},
|
||||
toolCalls: {
|
||||
title: 'Tool Calls',
|
||||
totalCalls: 'Calls',
|
||||
duration: 'Tool Duration',
|
||||
errorCalls: 'Failed Calls',
|
||||
arguments: 'Arguments',
|
||||
result: 'Result',
|
||||
noToolCalls: 'No tool calls recorded',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: 'Total Tokens',
|
||||
inputTokens: 'Input Tokens',
|
||||
outputTokens: 'Output Tokens',
|
||||
avgPerCall: 'Avg / Call',
|
||||
throughput: 'Throughput',
|
||||
tokensPerSec: 'tokens/sec',
|
||||
errorCalls: 'Failed Calls',
|
||||
acrossCalls: 'across {{count}} calls',
|
||||
ofTotal: 'of {{count}} total',
|
||||
usageOverTime: 'Token Usage Over Time',
|
||||
byModel: 'By Model',
|
||||
model: 'Model',
|
||||
calls: 'Calls',
|
||||
avgLatency: 'Avg Latency',
|
||||
noData: 'No token usage in the selected time range',
|
||||
loadError: 'Failed to load token statistics: {{error}}',
|
||||
zeroTokenWarning:
|
||||
'{{count}} successful call(s) reported zero token usage. This usually means the upstream provider did not return usage info — check the model provider configuration.',
|
||||
bucket: {
|
||||
hour: 'Hourly',
|
||||
day: 'Daily',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding Calls',
|
||||
model: 'Model',
|
||||
@@ -1201,6 +1457,22 @@ const enUS = {
|
||||
inaccurateReasons: 'Inaccurate Reasons',
|
||||
platform: 'Platform',
|
||||
exportFeedback: 'Export Feedback',
|
||||
description:
|
||||
'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
|
||||
placeholder: 'Describe your suggestion, issue, or reproduction steps...',
|
||||
attachImage: 'Add image',
|
||||
screenshot: 'Screenshot',
|
||||
submit: 'Submit feedback',
|
||||
privacyHint:
|
||||
'Do not include secrets, passwords, or private chat content.',
|
||||
contentRequired: 'Please enter feedback first',
|
||||
imageOnly: 'Only image attachments are supported',
|
||||
imageTooLarge: 'Each image must be under 1MB',
|
||||
tooManyImages: 'You can attach up to 3 images',
|
||||
screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
|
||||
submitSuccess: 'Feedback submitted. Thanks!',
|
||||
submitFailed: 'Failed to submit feedback. Please try again later.',
|
||||
removeImage: 'Remove image',
|
||||
},
|
||||
queries: {
|
||||
title: 'Queries',
|
||||
@@ -1230,6 +1502,34 @@ const enUS = {
|
||||
sessions: 'Sessions',
|
||||
feedback: 'User Feedback',
|
||||
},
|
||||
systemStatus: 'System Status',
|
||||
pluginRuntime: 'Plugin Runtime',
|
||||
boxRuntime: 'Box Runtime',
|
||||
connected: 'Connected',
|
||||
disconnected: 'Disconnected',
|
||||
disabled: 'Disabled',
|
||||
statusDetail: 'Status',
|
||||
pluginDisabled: 'Plugin system is disabled',
|
||||
boxDisabled:
|
||||
'Box sandbox is disabled in config — sandbox tools, skill add/edit, and stdio MCP are unavailable',
|
||||
boxUnavailable:
|
||||
'Box sandbox is unavailable — sandbox tools, skill add/edit, and stdio MCP are unavailable',
|
||||
boxRequiredHint:
|
||||
'This feature requires the Box runtime. Enable it in config (box.enabled = true) and ensure the runtime is healthy.',
|
||||
boxBackend: 'Backend',
|
||||
boxProfile: 'Profile',
|
||||
boxSandboxes: 'Sandboxes',
|
||||
boxSessionCreated: 'Created',
|
||||
boxSessionLastUsed: 'Last used',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: 'Settings',
|
||||
nav: {
|
||||
models: 'Models',
|
||||
api: 'API',
|
||||
storage: 'Storage',
|
||||
account: 'Account',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: 'Storage Analysis',
|
||||
@@ -1272,7 +1572,100 @@ const enUS = {
|
||||
maxPipelinesReached:
|
||||
'Maximum number of pipelines ({{max}}) reached. Please remove an existing pipeline before creating a new one.',
|
||||
maxExtensionsReached:
|
||||
'Maximum number of extensions ({{max}}) reached. Please remove an existing MCP server or plugin before adding a new one.',
|
||||
'Maximum number of extensions ({{max}}) reached. Please remove an existing extension before adding a new one.',
|
||||
},
|
||||
skills: {
|
||||
title: 'Skills',
|
||||
description:
|
||||
'Create and manage skills that can be activated during conversations',
|
||||
createSkill: 'Create Skill',
|
||||
createSkillDescription:
|
||||
'Import a local directory or create one by filling in details',
|
||||
editSkill: 'Edit Skill',
|
||||
getSkillListError: 'Failed to get skill list: ',
|
||||
skillName: 'Skill Name',
|
||||
displayName: 'Skill Name',
|
||||
displayNamePlaceholder: 'Display name (supports any language)',
|
||||
skillSlug: 'Directory Name',
|
||||
skillSlugPlaceholder: 'english-name-only',
|
||||
skillSlugHelp:
|
||||
'Used as the skill directory name. Only letters, numbers, hyphens and underscores.',
|
||||
skillDescription: 'Skill Description',
|
||||
skillInstructions: 'Instructions',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Save failed: ',
|
||||
createSuccess: 'Created successfully',
|
||||
createError: 'Creation failed: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Delete failed: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this skill?',
|
||||
delete: 'Delete Skill',
|
||||
skillNameRequired: 'Skill name cannot be empty',
|
||||
skillDescriptionRequired: 'Skill description cannot be empty',
|
||||
packageRootRequired: 'Package root path cannot be empty',
|
||||
scan: 'Scan',
|
||||
scanSuccess: 'Directory scanned successfully',
|
||||
scanError: 'Failed to scan directory: ',
|
||||
noSkills: 'No skills configured',
|
||||
preview: 'Preview',
|
||||
previewInstructions: 'SKILL.md Content Preview',
|
||||
instructionsPlaceholder: 'Enter skill instructions in Markdown format...',
|
||||
descriptionPlaceholder:
|
||||
'A brief description of what this skill does (shown to the LLM)',
|
||||
packageRoot: 'Package Directory',
|
||||
packageRootHelp:
|
||||
'Optional. Only needed when importing an existing skill directory. Leave empty for new skills. Scanning checks the current directory and subdirectories up to 2 levels deep.',
|
||||
importLocalDirectory: 'Import Local Skill Directory',
|
||||
chooseSkillDirectory: 'Choose SKILL.md Directory',
|
||||
chooseAnotherDirectory: 'Choose Another Directory',
|
||||
importingDirectory: 'Previewing...',
|
||||
clearDirectoryPreview: 'Clear Selected Directory',
|
||||
noSkillMdInDirectory: 'No SKILL.md was found in the selected directory',
|
||||
multipleSkillMdInDirectory:
|
||||
'The selected directory contains multiple SKILL.md files. Choose a single skill directory directly.',
|
||||
importDirectoryError: 'Failed to import directory: ',
|
||||
advancedSettings: 'Advanced Settings',
|
||||
searchSkills: 'Search skills...',
|
||||
selectSkills: 'Select Skills',
|
||||
addSkill: 'Add Skill',
|
||||
builtin: 'Built-in',
|
||||
importFromGithub: 'Install Skill from GitHub',
|
||||
createManually: 'Create Manually',
|
||||
uploadZip: 'Upload ZIP Package',
|
||||
uploadZipOnly: 'Only .zip skill packages are supported',
|
||||
installSuccess: 'Skill installed successfully',
|
||||
installError: 'Failed to install skill: ',
|
||||
enterRepoUrl: 'Enter GitHub repository URL',
|
||||
repoUrlPlaceholder: 'e.g., https://github.com/owner/repo',
|
||||
fetchingReleases: 'Fetching releases...',
|
||||
selectRelease: 'Select Release',
|
||||
noReleasesFound: 'No releases found',
|
||||
fetchReleasesError: 'Failed to fetch releases: ',
|
||||
selectAsset: 'Select file to install',
|
||||
sourceArchive: 'Source code (zip)',
|
||||
noAssetsFound: 'No installable files available in this release',
|
||||
fetchAssetsError: 'Failed to fetch assets: ',
|
||||
backToReleases: 'Back to releases',
|
||||
backToRepoUrl: 'Back to repository URL',
|
||||
backToAssets: 'Back to assets',
|
||||
releaseTag: 'Tag: {{tag}}',
|
||||
publishedAt: 'Published at: {{date}}',
|
||||
prerelease: 'Pre-release',
|
||||
assetSize: 'Size: {{size}}',
|
||||
confirmInstall: 'Confirm Install',
|
||||
installing: 'Installing skill...',
|
||||
loading: 'Loading...',
|
||||
previewLoadError: 'Failed to load preview',
|
||||
selectFromSidebar: 'Select a skill from the sidebar',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDescription: 'Irreversible and destructive actions',
|
||||
files: 'Files',
|
||||
noFiles: 'No files found',
|
||||
loadFilesError: 'Failed to load files: ',
|
||||
readFileError: 'Failed to read file: ',
|
||||
saveFile: 'Save File',
|
||||
saveFileSuccess: 'File saved successfully',
|
||||
saveFileError: 'Failed to save file: ',
|
||||
},
|
||||
wizard: {
|
||||
sidebarDescription: 'Create a bot with guided steps',
|
||||
@@ -1338,6 +1731,52 @@ const enUS = {
|
||||
backToWorkbench: 'Back to Workbench',
|
||||
},
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: 'Install {{type}}',
|
||||
installConfirm: 'Install {{type}} "{{name}}"?',
|
||||
installInfoType: 'Type',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: 'Version',
|
||||
installSuccess: 'Installed successfully',
|
||||
installStage: {
|
||||
mcpInstalling: 'Adding and connecting the MCP server…',
|
||||
skillInstalling: 'Installing the skill…',
|
||||
installed: 'Done',
|
||||
},
|
||||
manualAdd: 'Manual Add',
|
||||
uploadExtension: 'Drag & drop or click to upload',
|
||||
uploadHint: 'Supports .zip (skills) and .lbpkg (plugins) files',
|
||||
orContinueWith: 'or choose an action below',
|
||||
addMCPServerHint: 'Connect an MCP tool server extension',
|
||||
installFromGithub: 'Install from GitHub',
|
||||
installFromGithubHint: 'Plugin package or Skill (SKILL.md)',
|
||||
githubUrlHelp: 'Paste a GitHub URL',
|
||||
githubUrlTooltip:
|
||||
'Plugin: paste a repository, Release, or Tag URL. Skill: paste the SKILL.md page URL inside the skill directory.',
|
||||
githubUrlPlaceholder: 'GitHub repository, Release, or SKILL.md link',
|
||||
githubUrlRequired: 'Enter a GitHub URL',
|
||||
previewSkill: 'Preview Skill',
|
||||
noSkillPreviewFound: 'No importable Skill found',
|
||||
createSkill: 'Create New Skill',
|
||||
createSkillHint: 'Import from a local directory or create manually',
|
||||
unsupportedFileType:
|
||||
'Unsupported file type. Only .zip and .lbpkg files are supported',
|
||||
},
|
||||
errorPage: {
|
||||
unexpectedError: 'Something went wrong',
|
||||
unexpectedErrorDescription:
|
||||
'An unexpected error occurred. Please try again later.',
|
||||
notFound: 'Page not found',
|
||||
notFoundDescription:
|
||||
'The page you are looking for does not exist or has been moved.',
|
||||
backendUnavailableStatus: 'Backend unavailable',
|
||||
goBack: 'Go Back',
|
||||
backToHome: 'Back to Home',
|
||||
backToLogin: 'Back to Login',
|
||||
retrying: 'Retrying',
|
||||
retryFailed:
|
||||
'Still cannot connect to the backend. Start the service and try again.',
|
||||
},
|
||||
feishu: {
|
||||
createApp: 'One-Click Create Feishu App',
|
||||
scanQRCode:
|
||||
|
||||
@@ -2,13 +2,17 @@ const esES = {
|
||||
sidebar: {
|
||||
home: 'Inicio',
|
||||
extensions: 'Extensiones',
|
||||
installedPlugins: 'Plugins instalados',
|
||||
installedPlugins: 'Instalados',
|
||||
pluginMarket: 'Tienda',
|
||||
mcpServers: 'Servidores MCP',
|
||||
addExtension: 'Añadir extensión',
|
||||
pluginPages: 'Páginas de plugins',
|
||||
pluginPagesTooltip:
|
||||
'Páginas visuales proporcionadas por los plugins instalados',
|
||||
quickStart: 'Inicio rápido',
|
||||
scrollToBottom: 'Desplazar al final',
|
||||
editionCommunity: 'Comunidad',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: 'Iniciar sesión',
|
||||
@@ -36,11 +40,13 @@ const esES = {
|
||||
helpDocs: 'Obtener ayuda',
|
||||
featureRequest: 'Solicitar función',
|
||||
starOnGitHub: 'Dar estrella en GitHub',
|
||||
joinDiscord: 'Únete a Discord',
|
||||
create: 'Crear',
|
||||
edit: 'Editar',
|
||||
delete: 'Eliminar',
|
||||
add: 'Añadir',
|
||||
select: 'Seleccionar',
|
||||
skill: 'Habilidad',
|
||||
cancel: 'Cancelar',
|
||||
submit: 'Enviar',
|
||||
error: 'Error',
|
||||
@@ -68,7 +74,8 @@ const esES = {
|
||||
copyFailed: 'Error al copiar',
|
||||
test: 'Probar',
|
||||
forgotPassword: '¿Olvidaste tu contraseña?',
|
||||
agreementNotice: 'Al continuar, aceptas nuestra',
|
||||
agreementNotice: 'Al continuar, aceptas nuestros',
|
||||
termsOfService: 'Términos de servicio',
|
||||
privacyPolicy: 'Política de privacidad',
|
||||
and: 'y',
|
||||
dataCollectionPolicy: 'Política de recopilación de datos',
|
||||
@@ -119,6 +126,8 @@ const esES = {
|
||||
changePasswordFailed:
|
||||
'Error al cambiar la contraseña, por favor verifica tu contraseña actual',
|
||||
apiIntegration: 'Integración API',
|
||||
apiIntegrationDescription:
|
||||
'Gestiona las claves API y los webhooks para el acceso externo',
|
||||
apiKeys: 'Claves API',
|
||||
manageApiIntegration: 'Gestionar integración API',
|
||||
manageApiKeys: 'Gestionar claves API',
|
||||
@@ -135,6 +144,16 @@ const esES = {
|
||||
noApiKeys: 'No hay claves API configuradas',
|
||||
apiKeyHint:
|
||||
'Las claves API permiten a sistemas externos acceder a las API del servicio LangBot',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
|
||||
mcpEndpoint: 'MCP Endpoint',
|
||||
mcpAuthTitle: 'Authentication',
|
||||
mcpAuthDesc:
|
||||
'Authenticate with any API key from the API Keys tab, sent as a header:',
|
||||
mcpGlobalKeyNote:
|
||||
'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
|
||||
mcpClientConfigTitle: 'Example MCP client config',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: 'Crear Webhook',
|
||||
webhookName: 'Nombre del Webhook',
|
||||
@@ -199,6 +218,9 @@ const esES = {
|
||||
selectModelAbilities: 'Seleccionar capacidades del modelo',
|
||||
visionAbility: 'Capacidad de visión',
|
||||
functionCallAbility: 'Llamada a funciones',
|
||||
contextLength: 'Ventana de contexto',
|
||||
contextLengthPlaceholder: 'Desconocido',
|
||||
contextLengthInvalid: 'La ventana de contexto debe ser un entero positivo',
|
||||
extraParameters: 'Parámetros adicionales',
|
||||
addParameter: 'Añadir parámetro',
|
||||
keyName: 'Nombre de la clave',
|
||||
@@ -237,7 +259,6 @@ const esES = {
|
||||
noLocalModels:
|
||||
'No hay modelos locales. Haz clic en Crear para añadir un modelo.',
|
||||
providerCount: '{{count}} proveedores',
|
||||
// New keys for provider-based structure
|
||||
addModel: 'Añadir modelo',
|
||||
manualAdd: 'Manual',
|
||||
scanAdd: 'Escanear',
|
||||
@@ -262,6 +283,7 @@ const esES = {
|
||||
selectProvider: 'Seleccionar proveedor',
|
||||
requester: 'Tipo de proveedor',
|
||||
selectRequester: 'Seleccionar tipo de proveedor',
|
||||
searchProviders: 'Buscar proveedores...',
|
||||
langbotModelsDescription: 'Modelos en la nube impulsados por LangBot Space',
|
||||
credits: 'Créditos',
|
||||
loginWithSpace: 'Iniciar sesión con Space',
|
||||
@@ -434,6 +456,26 @@ const esES = {
|
||||
userMessage: 'Usuario',
|
||||
botMessage: 'Asistente',
|
||||
},
|
||||
admins: {
|
||||
title: 'Admins',
|
||||
description:
|
||||
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
||||
addAdmin: 'Add Admin',
|
||||
launcherType: 'Type',
|
||||
launcherId: 'ID',
|
||||
typePerson: 'Person',
|
||||
typeGroup: 'Group',
|
||||
placeholderId: 'User or group ID',
|
||||
addSuccess: 'Admin added',
|
||||
addError: 'Failed to add admin: ',
|
||||
deleteSuccess: 'Admin removed',
|
||||
deleteError: 'Failed to remove admin: ',
|
||||
noAdmins: 'No admins configured',
|
||||
setAdminTitle: 'Set as admin',
|
||||
removeAdminTitle: 'Remove admin',
|
||||
adminBadge: 'Admin',
|
||||
configureAdmins: 'Manage Admins',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: 'Extensiones',
|
||||
@@ -446,6 +488,7 @@ const esES = {
|
||||
arrange: 'Ordenar plugins',
|
||||
install: 'Instalar',
|
||||
installPlugin: 'Instalar plugin',
|
||||
newPlugin: 'Nuevo Plugin',
|
||||
onlySupportGithub: 'Actualmente solo se admite la instalación desde GitHub',
|
||||
enterGithubLink: 'Introduce el enlace de GitHub del plugin',
|
||||
installing: 'Instalando plugin...',
|
||||
@@ -460,6 +503,9 @@ const esES = {
|
||||
loading: 'Cargando...',
|
||||
getPluginListError: 'Error al obtener la lista de plugins:',
|
||||
noPluginInstalled: 'No hay plugins instalados',
|
||||
noExtensionInstalled: 'No hay extensiones instaladas',
|
||||
loadingExtensions: 'Cargando extensiones...',
|
||||
groupByType: 'Agrupar por formato',
|
||||
pluginConfig: 'Configuración del plugin',
|
||||
pluginSort: 'Orden de plugins',
|
||||
pluginSortDescription:
|
||||
@@ -485,6 +531,19 @@ const esES = {
|
||||
noDebugKey: '(No establecida)',
|
||||
debugKeyDisabled:
|
||||
'La clave de depuración no está configurada, la depuración del plugin no requiere autenticación',
|
||||
boxStatusTitle: 'Box Runtime',
|
||||
boxStatus: 'Estado',
|
||||
boxConnected: 'Conectado',
|
||||
boxUnavailable: 'No disponible',
|
||||
boxBackend: 'Backend',
|
||||
boxProfile: 'Perfil',
|
||||
boxSandboxes: 'Sandboxes',
|
||||
boxErrors: 'Errores',
|
||||
boxSessionImage: 'Imagen',
|
||||
boxSessionBackend: 'Backend',
|
||||
boxSessionResources: 'Recursos',
|
||||
boxSessionNetwork: 'Red',
|
||||
boxStatusLoadFailed: 'Error al cargar el estado de Box',
|
||||
failedToGetDebugInfo: 'Error al obtener la información de depuración',
|
||||
copiedToClipboard: 'Copiado al portapapeles',
|
||||
deleting: 'Eliminando...',
|
||||
@@ -501,6 +560,8 @@ const esES = {
|
||||
close: 'Cerrar',
|
||||
deleteConfirm: 'Confirmación de eliminación',
|
||||
deleteSuccess: 'Eliminación exitosa',
|
||||
dangerZone: 'Zona de peligro',
|
||||
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
||||
modifyFailed: 'Error al modificar: ',
|
||||
componentName: {
|
||||
Tool: 'Herramienta',
|
||||
@@ -513,6 +574,22 @@ const esES = {
|
||||
uploadLocal: 'Subir local',
|
||||
debugging: 'Depuración',
|
||||
uploadLocalPlugin: 'Subir plugin local',
|
||||
localPreview: {
|
||||
title: 'Previsualizar paquete de plugin local',
|
||||
unpacking: 'Descomprimiendo vista previa del paquete...',
|
||||
unpackComplete: 'Vista previa del paquete lista',
|
||||
failed: 'No se pudo previsualizar el paquete',
|
||||
pluginInfo: 'Información del plugin',
|
||||
packageInfo: 'Información del paquete',
|
||||
name: 'Nombre',
|
||||
author: 'Autor',
|
||||
version: 'Versión',
|
||||
fileCount: 'Archivos',
|
||||
dependencies: 'Dependencias',
|
||||
components: 'Componentes',
|
||||
ready:
|
||||
'El paquete del plugin está descomprimido. Confirma para iniciar la instalación.',
|
||||
},
|
||||
dragToUpload: 'Arrastra el archivo del plugin aquí para subirlo',
|
||||
unsupportedFileType:
|
||||
'Tipo de archivo no soportado, solo se admiten archivos .lbpkg y .zip',
|
||||
@@ -521,6 +598,7 @@ const esES = {
|
||||
uploadFailed: 'Error en la subida',
|
||||
selectFileToUpload: 'Selecciona el archivo del plugin para subir',
|
||||
askConfirm: '¿Estás seguro de instalar el plugin "{{name}}" ({{version}})?',
|
||||
askConfirmNoVersion: '¿Estás seguro de instalar el plugin "{{name}}"?',
|
||||
fromGithub: 'Desde GitHub',
|
||||
fromLocal: 'Desde local',
|
||||
fromMarketplace: 'Desde la tienda',
|
||||
@@ -543,6 +621,13 @@ const esES = {
|
||||
viewSource: 'Ver código fuente',
|
||||
loadingReadme: 'Cargando documentación...',
|
||||
noReadme: 'Este plugin no proporciona documentación README',
|
||||
tabDocs: 'Documentación',
|
||||
tabLogs: 'Registros',
|
||||
logsLevelAll: 'Todos los niveles',
|
||||
logsRefresh: 'Actualizar',
|
||||
logsAutoRefresh: 'Auto-actualizar',
|
||||
logsEmpty:
|
||||
'Aún no hay registros. Los registros que el plugin imprima mediante logger aparecerán aquí.',
|
||||
fileUpload: {
|
||||
tooLarge: 'El tamaño del archivo supera el límite de 10MB',
|
||||
success: 'Archivo subido correctamente',
|
||||
@@ -592,17 +677,27 @@ const esES = {
|
||||
taskQueue: 'Tareas de instalación',
|
||||
clearCompleted: 'Limpiar completados',
|
||||
noTasks: 'No hay tareas de instalación',
|
||||
titlePlugin: 'Instalando plugin {{name}}',
|
||||
titleMCP: 'Instalando servidor MCP {{name}}',
|
||||
titleSkill: 'Instalando skill {{name}}',
|
||||
installCompletePlugin: 'Plugin instalado correctamente',
|
||||
installCompleteMCP: 'Servidor MCP instalado correctamente',
|
||||
installCompleteSkill: 'Skill instalada correctamente',
|
||||
},
|
||||
uploadPluginOnly: 'Solo se admiten paquetes de plugin .lbpkg',
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: 'Buscar plugins...',
|
||||
searchResults: 'Se encontraron {{count}} plugins',
|
||||
totalPlugins: 'Total {{count}} plugins',
|
||||
searchPlaceholderCount:
|
||||
'Buscar {{count}} extensiones, capacidades o casos de uso...',
|
||||
searchResults: 'Se encontraron {{count}} extensiones',
|
||||
totalPlugins: 'Total {{count}} extensiones',
|
||||
noPlugins: 'No hay plugins disponibles',
|
||||
noResults: 'No se encontraron plugins relevantes',
|
||||
loadingMore: 'Cargando más...',
|
||||
loading: 'Cargando...',
|
||||
allLoaded: 'Todos los plugins mostrados',
|
||||
allLoadedCount: 'Se muestran las {{count}} extensiones',
|
||||
install: 'Instalar',
|
||||
installConfirm:
|
||||
'¿Estás seguro de que deseas instalar el plugin "{{name}}" ({{version}})?',
|
||||
@@ -611,6 +706,10 @@ const esES = {
|
||||
loadFailed:
|
||||
'Error al obtener la lista de plugins, por favor inténtalo más tarde',
|
||||
noDescription: 'No hay descripción disponible',
|
||||
recommendation: {
|
||||
pause: 'Pausar rotación automática',
|
||||
resume: 'Reanudar rotación automática',
|
||||
},
|
||||
notFound: 'No se encontró la información del plugin',
|
||||
sortBy: 'Ordenar por',
|
||||
sort: {
|
||||
@@ -637,13 +736,36 @@ const esES = {
|
||||
markAsRead: 'Marcar como leído',
|
||||
markAsReadSuccess: 'Marcado como leído',
|
||||
markAsReadFailed: 'Error al marcar como leído',
|
||||
filterByComponent: 'Componente',
|
||||
filterByComponent: 'Componente del plugin',
|
||||
filterByComponentHint:
|
||||
'Los tipos de capacidad que ofrece un plugin: herramienta (Tool), comando (Command), escucha de eventos (EventListener), etc., usados para ampliar las capacidades de LangBot. Filtra por componente para ver solo los plugins que ofrecen esa capacidad.',
|
||||
allComponents: 'Todos los componentes',
|
||||
componentName: {
|
||||
Tool: 'Herramienta',
|
||||
EventListener: 'Listener de eventos',
|
||||
Command: 'Comando',
|
||||
KnowledgeEngine: 'Motor de conocimiento',
|
||||
Parser: 'Analizador',
|
||||
Page: 'Página',
|
||||
},
|
||||
filterByType: 'Tipo',
|
||||
allTypes: 'Todos los tipos',
|
||||
typePlugin: 'Plugin',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: 'Habilidad',
|
||||
requestPlugin: 'Solicitar plugin',
|
||||
viewDetails: 'Ver detalles',
|
||||
deprecated: 'Obsoleto',
|
||||
deprecatedTooltip:
|
||||
'Por favor, instala el plugin de motor de conocimiento correspondiente.',
|
||||
filters: {
|
||||
allFormats: 'Todos los tipos',
|
||||
more: 'Más',
|
||||
advancedTitle: 'Filtros avanzados',
|
||||
advancedDescription: 'Filtrar por tipo de extensión',
|
||||
technicalType: 'Tipo técnico',
|
||||
},
|
||||
allExtensions: 'Todas las extensiones',
|
||||
tags: {
|
||||
filterByTags: 'Filtrar por etiquetas',
|
||||
selected: 'seleccionadas',
|
||||
@@ -651,10 +773,12 @@ const esES = {
|
||||
clearAll: 'Borrar todo',
|
||||
noTags: 'No hay etiquetas disponibles',
|
||||
},
|
||||
installCard: 'Instalar {{name}}',
|
||||
},
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: 'Añadir servidor MCP',
|
||||
addMCPServer: 'Añadir servidor MCP',
|
||||
editServer: 'Editar servidor MCP',
|
||||
deleteServer: 'Eliminar servidor MCP',
|
||||
confirmDeleteServer:
|
||||
@@ -667,6 +791,15 @@ const esES = {
|
||||
stdio: 'Modo Stdio',
|
||||
sse: 'Modo SSE',
|
||||
http: 'Modo HTTP',
|
||||
local: 'Local (Stdio)',
|
||||
remote: 'Remoto',
|
||||
localModeDescription:
|
||||
'Ejecuta un servidor MCP localmente como subproceso dentro del sandbox de Box.',
|
||||
remoteModeDescription:
|
||||
'Conéctate a un servidor MCP remoto por URL. El transporte (Streamable HTTP o SSE) se detecta automáticamente.',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'Pega la URL del servidor MCP. Se admiten tanto endpoints Streamable HTTP como SSE heredados.',
|
||||
noServerInstalled: 'No hay servidores MCP configurados',
|
||||
serverNameRequired: 'El nombre del servidor no puede estar vacío',
|
||||
commandRequired: 'El comando no puede estar vacío',
|
||||
@@ -693,9 +826,29 @@ const esES = {
|
||||
connectionSuccess: 'Conexión exitosa',
|
||||
connectionFailed: 'Error de conexión, por favor verifica la URL',
|
||||
connectionFailedStatus: 'Conexión fallida',
|
||||
boxDisabledStdioRefused:
|
||||
'Los servidores MCP en modo stdio requieren el sandbox de Box, desactivado en la configuración (box.enabled = false).',
|
||||
boxUnavailableStdioRefused:
|
||||
'Los servidores MCP en modo stdio requieren el sandbox de Box, actualmente no accesible.',
|
||||
boxStdioRefusedSuggestion:
|
||||
'Active Box (box.enabled = true) y asegúrese de que el runtime está conectado, o cambie este servidor a modo http/sse.',
|
||||
boxRequired: 'requiere Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'No se puede guardar el MCP en modo stdio mientras el sandbox de Box está desactivado o no disponible. Active Box o seleccione modo http/sse.',
|
||||
toolsFound: 'herramientas',
|
||||
unknownError: 'Error desconocido',
|
||||
noToolsFound: 'No se encontraron herramientas',
|
||||
noResourcesFound: 'No se encontraron recursos',
|
||||
tabTools: 'Herramientas',
|
||||
tabResources: 'Recursos',
|
||||
tabDocs: 'Documentación',
|
||||
tabLogs: 'Registros',
|
||||
logsLevelAll: 'Todos los niveles',
|
||||
logsRefresh: 'Actualizar',
|
||||
logsAutoRefresh: 'Actualización automática',
|
||||
logsEmpty:
|
||||
'Aún no hay registros. Los registros de ejecución del servidor MCP aparecerán aquí.',
|
||||
noReadme: 'No hay documentación disponible',
|
||||
parseResultFailed: 'Error al analizar el resultado de la prueba',
|
||||
noResultReturned: 'La prueba no devolvió resultados',
|
||||
getTaskFailed: 'Error al obtener el estado de la tarea',
|
||||
@@ -711,6 +864,14 @@ const esES = {
|
||||
loadFailed: 'Error al cargar',
|
||||
modifyFailed: 'Error al modificar: ',
|
||||
toolCount: 'Herramientas: {{count}}',
|
||||
parameterCount: 'Parámetros: {{count}}',
|
||||
noParameters: 'Sin parámetros',
|
||||
resourceCount: 'Recursos: {{count}}',
|
||||
resourceBinaryContent: 'Contenido binario (no se puede mostrar)',
|
||||
resourceBinaryOmitted:
|
||||
'Contenido binario omitido por la política de seguridad de recursos',
|
||||
resourceTruncated: 'Contenido truncado por límites de bytes o tokens',
|
||||
resourceReadFailed: 'Error al leer el contenido del recurso',
|
||||
statusConnected: 'Conectado',
|
||||
statusDisconnected: 'Desconectado',
|
||||
statusError: 'Error de conexión',
|
||||
@@ -741,7 +902,7 @@ const esES = {
|
||||
'Una vez eliminada, la configuración de este servidor MCP no se podrá recuperar.',
|
||||
},
|
||||
pipelines: {
|
||||
title: 'Pipelines',
|
||||
title: 'Flujos',
|
||||
description:
|
||||
'Los Pipelines definen el flujo de procesamiento de eventos de mensajes, se usan para vincular a los Bots',
|
||||
createPipeline: 'Crear Pipeline',
|
||||
@@ -805,9 +966,12 @@ const esES = {
|
||||
selectPlugins: 'Seleccionar plugins',
|
||||
pluginsTitle: 'Plugins',
|
||||
mcpServersTitle: 'Servidores MCP',
|
||||
mcpResourcesTitle: 'Recursos MCP',
|
||||
noMCPServersSelected: 'No hay servidores MCP seleccionados',
|
||||
noMCPResourcesAvailable: 'No hay recursos MCP disponibles',
|
||||
addMCPServer: 'Añadir servidor MCP',
|
||||
selectMCPServers: 'Seleccionar servidores MCP',
|
||||
enableMCPResourceAgentRead: 'Permitir lectura del modelo',
|
||||
toolCount: '{{count}} herramientas',
|
||||
noPluginsInstalled: 'No hay plugins instalados',
|
||||
noMCPServersConfigured: 'No hay servidores MCP configurados',
|
||||
@@ -816,6 +980,49 @@ const esES = {
|
||||
enableAllMCPServers: 'Activar todos los servidores MCP',
|
||||
allPluginsEnabled: 'Todos los plugins activados',
|
||||
allMCPServersEnabled: 'Todos los servidores MCP activados',
|
||||
enableAllSkills: 'Activar todas las skills',
|
||||
allSkillsEnabled: 'Todas las skills están activadas',
|
||||
skillsTitle: 'Skills',
|
||||
noSkillsSelected: 'No hay skills seleccionadas',
|
||||
addSkill: 'Añadir skill',
|
||||
selectSkills: 'Seleccionar skills',
|
||||
noSkillsAvailable: 'No hay skills disponibles',
|
||||
mcpServersScopeTooltip:
|
||||
'Aquí solo se controla qué servidores MCP se vinculan al Pipeline. Las herramientas y recursos MCP concretos se eligen en AI Feature > Local Agent.',
|
||||
enableAllMCPServersTooltip:
|
||||
'Al activarlo, todos los servidores MCP configurados y habilitados serán candidatos para herramientas y recursos MCP en AI Feature.',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: 'Herramientas',
|
||||
toolsDescription:
|
||||
'Selecciona las herramientas de plugins, MCP e integradas disponibles para este Local Agent.',
|
||||
toolsScopeTooltip:
|
||||
'Las herramientas MCP solo provienen de servidores MCP vinculados en Extensiones. Vincula allí otro servidor para poder seleccionarlo aquí.',
|
||||
enableAllTools: 'Activar todas las herramientas',
|
||||
allToolsEnabled: 'Todas las herramientas disponibles están activadas',
|
||||
noToolsSelected: 'No hay herramientas seleccionadas',
|
||||
editTools: 'Editar herramientas',
|
||||
builtinTools: 'Herramientas integradas',
|
||||
pluginTools: 'Herramientas de plugin',
|
||||
skillTools: 'Herramientas de skill',
|
||||
mcpTools: 'Herramientas MCP',
|
||||
mcpToolsScopeTooltip:
|
||||
'Aquí solo se muestran herramientas de servidores MCP permitidos actualmente en Extensiones.',
|
||||
skillToolsScopeTooltip:
|
||||
'Las herramientas de skill aparecen cuando el servicio de skills de LangBot y el backend de sandbox Box están disponibles. Permiten al agente activar o registrar skills.',
|
||||
selectTools: 'Seleccionar herramientas',
|
||||
resourcesTitle: 'Recursos',
|
||||
resourcesDescription:
|
||||
'Selecciona los recursos MCP y bases de conocimiento disponibles para este Local Agent.',
|
||||
knowledgeBases: 'Bases de conocimiento',
|
||||
mcpResources: 'Recursos MCP',
|
||||
mcpResourcesScopeTooltip:
|
||||
'Aquí solo se muestran recursos expuestos por servidores MCP permitidos actualmente en Extensiones.',
|
||||
enableMCPResourceRead: 'Permitir que el modelo lea recursos MCP',
|
||||
mcpResourceReadTooltip:
|
||||
'Si se desactiva, los recursos MCP seleccionados no se inyectarán en el contexto del modelo.',
|
||||
noMCPResourcesAvailable: 'No hay recursos MCP disponibles',
|
||||
selectKnowledgeBases: 'Seleccionar bases de conocimiento',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Chat del Pipeline',
|
||||
@@ -1068,6 +1275,7 @@ const esES = {
|
||||
},
|
||||
account: {
|
||||
settings: 'Configuración de la cuenta',
|
||||
settingsDescription: 'Gestiona tu contraseña y las cuentas vinculadas',
|
||||
setPassword: 'Establecer contraseña',
|
||||
passwordSetSuccess: 'Contraseña establecida correctamente',
|
||||
passwordStatus: 'Contraseña local',
|
||||
@@ -1135,6 +1343,7 @@ const esES = {
|
||||
llmCalls: 'Llamadas LLM',
|
||||
embeddingCalls: 'Llamadas Embedding',
|
||||
modelCalls: 'Llamadas a modelos',
|
||||
tokens: 'Monitoreo de Tokens',
|
||||
sessions: 'Análisis de sesiones',
|
||||
feedback: 'Comentarios de usuarios',
|
||||
errors: 'Registros de errores',
|
||||
@@ -1160,6 +1369,20 @@ const esES = {
|
||||
level: 'Nivel',
|
||||
runner: 'Ejecutor',
|
||||
viewConversation: 'Ver conversación',
|
||||
turns: '{{count}} turnos de conversación',
|
||||
userMessage: 'Usuario',
|
||||
noUserMessage: 'No se registró entrada del usuario',
|
||||
assistantMessage: 'Asistente',
|
||||
assistantMessageCount: 'Asistente +{{count}}',
|
||||
noAssistantMessage: 'No se registró respuesta del asistente',
|
||||
messageCount: 'Mensajes',
|
||||
conversationTrace: 'Flujo de conversación',
|
||||
noLlmCalls: 'No se registraron llamadas al modelo',
|
||||
roles: {
|
||||
user: 'Usuario',
|
||||
assistant: 'Asistente',
|
||||
message: 'Mensaje',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'Llamadas LLM',
|
||||
@@ -1174,6 +1397,39 @@ const esES = {
|
||||
avgDuration: 'Duración promedio',
|
||||
calls: 'Llamadas',
|
||||
},
|
||||
toolCalls: {
|
||||
title: 'Llamadas de herramientas',
|
||||
totalCalls: 'Llamadas',
|
||||
duration: 'Duración de herramientas',
|
||||
errorCalls: 'Llamadas fallidas',
|
||||
arguments: 'Argumentos',
|
||||
result: 'Resultado',
|
||||
noToolCalls: 'No se registraron llamadas de herramientas',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: 'Tokens totales',
|
||||
inputTokens: 'Tokens de entrada',
|
||||
outputTokens: 'Tokens de salida',
|
||||
avgPerCall: 'Prom. / llamada',
|
||||
throughput: 'Rendimiento',
|
||||
tokensPerSec: 'tokens/seg',
|
||||
errorCalls: 'Llamadas fallidas',
|
||||
acrossCalls: 'en {{count}} llamadas',
|
||||
ofTotal: 'de {{count}} en total',
|
||||
usageOverTime: 'Uso de tokens a lo largo del tiempo',
|
||||
byModel: 'Por modelo',
|
||||
model: 'Modelo',
|
||||
calls: 'Llamadas',
|
||||
avgLatency: 'Latencia media',
|
||||
noData: 'No hay uso de tokens en el rango de tiempo seleccionado',
|
||||
loadError: 'Error al cargar las estadísticas de tokens: {{error}}',
|
||||
zeroTokenWarning:
|
||||
'{{count}} llamada(s) exitosa(s) reportaron cero uso de tokens. Esto suele significar que el proveedor upstream no devolvió información de uso; revisa la configuración del proveedor del modelo.',
|
||||
bucket: {
|
||||
hour: 'Por hora',
|
||||
day: 'Por día',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Llamadas Embedding',
|
||||
model: 'Modelo',
|
||||
@@ -1235,6 +1491,22 @@ const esES = {
|
||||
inaccurateReasons: 'Razones de inexactitud',
|
||||
platform: 'Plataforma',
|
||||
exportFeedback: 'Exportar comentarios',
|
||||
description:
|
||||
'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
|
||||
placeholder: 'Describe your suggestion, issue, or reproduction steps...',
|
||||
attachImage: 'Add image',
|
||||
screenshot: 'Screenshot',
|
||||
submit: 'Submit feedback',
|
||||
privacyHint:
|
||||
'Do not include secrets, passwords, or private chat content.',
|
||||
contentRequired: 'Please enter feedback first',
|
||||
imageOnly: 'Only image attachments are supported',
|
||||
imageTooLarge: 'Each image must be under 1MB',
|
||||
tooManyImages: 'You can attach up to 3 images',
|
||||
screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
|
||||
submitSuccess: 'Feedback submitted. Thanks!',
|
||||
submitFailed: 'Failed to submit feedback. Please try again later.',
|
||||
removeImage: 'Remove image',
|
||||
},
|
||||
queries: {
|
||||
title: 'Consultas',
|
||||
@@ -1264,6 +1536,34 @@ const esES = {
|
||||
sessions: 'Sesiones',
|
||||
feedback: 'Comentarios de usuarios',
|
||||
},
|
||||
systemStatus: 'Estado del sistema',
|
||||
pluginRuntime: 'Plugin Runtime',
|
||||
boxRuntime: 'Box Runtime',
|
||||
connected: 'Conectado',
|
||||
disconnected: 'Desconectado',
|
||||
disabled: 'Desactivado',
|
||||
statusDetail: 'Estado',
|
||||
pluginDisabled: 'El sistema de plugins está desactivado',
|
||||
boxDisabled:
|
||||
'El sandbox de Box está desactivado en la configuración — herramientas de sandbox, alta/edición de skills y MCP stdio no están disponibles',
|
||||
boxUnavailable:
|
||||
'El sandbox de Box no está disponible — herramientas de sandbox, alta/edición de skills y MCP stdio no están disponibles',
|
||||
boxRequiredHint:
|
||||
'Esta función requiere el runtime de Box. Actívelo en la configuración (box.enabled = true) y asegúrese de que el runtime está conectado.',
|
||||
boxBackend: 'Backend',
|
||||
boxProfile: 'Perfil',
|
||||
boxSandboxes: 'Sandboxes',
|
||||
boxSessionCreated: 'Creado',
|
||||
boxSessionLastUsed: 'Último uso',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: 'Configuración',
|
||||
nav: {
|
||||
models: 'Modelos',
|
||||
api: 'API',
|
||||
storage: 'Almacenamiento',
|
||||
account: 'Cuenta',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: 'Análisis de almacenamiento',
|
||||
@@ -1377,6 +1677,20 @@ const esES = {
|
||||
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:
|
||||
@@ -1444,6 +1758,132 @@ const esES = {
|
||||
selectFromSidebar: 'Selecciona una página de plugin en la barra lateral',
|
||||
invalidPage: 'Página de plugin no válida',
|
||||
},
|
||||
skills: {
|
||||
title: 'Skills',
|
||||
description:
|
||||
'Crea y gestiona skills que se pueden activar durante las conversaciones',
|
||||
createSkill: 'Crear skill',
|
||||
createSkillDescription:
|
||||
'Importa un directorio local o crea una skill rellenando la información',
|
||||
editSkill: 'Editar skill',
|
||||
getSkillListError: 'Error al obtener la lista de skills: ',
|
||||
skillName: 'Nombre de la skill',
|
||||
displayName: 'Nombre de la skill',
|
||||
displayNamePlaceholder: 'Nombre visible (admite cualquier idioma)',
|
||||
skillSlug: 'Nombre del directorio',
|
||||
skillSlugPlaceholder: 'english-name-only',
|
||||
skillSlugHelp:
|
||||
'Se usa como nombre del directorio de la skill. Solo letras, números, guiones y guiones bajos.',
|
||||
skillDescription: 'Descripción de la skill',
|
||||
skillInstructions: 'Instrucciones',
|
||||
saveSuccess: 'Guardado correctamente',
|
||||
saveError: 'Error al guardar: ',
|
||||
createSuccess: 'Creado correctamente',
|
||||
createError: 'Error al crear: ',
|
||||
deleteSuccess: 'Eliminado correctamente',
|
||||
deleteError: 'Error al eliminar: ',
|
||||
deleteConfirmation: '¿Seguro que quieres eliminar esta skill?',
|
||||
delete: 'Eliminar skill',
|
||||
skillNameRequired: 'El nombre de la skill no puede estar vacío',
|
||||
skillDescriptionRequired: 'La descripción de la skill no puede estar vacía',
|
||||
packageRootRequired: 'La ruta raíz del paquete no puede estar vacía',
|
||||
scan: 'Escanear',
|
||||
scanSuccess: 'Directorio escaneado correctamente',
|
||||
scanError: 'Error al escanear el directorio: ',
|
||||
noSkills: 'No hay skills configuradas',
|
||||
preview: 'Vista previa',
|
||||
previewInstructions: 'Vista previa del contenido de SKILL.md',
|
||||
instructionsPlaceholder:
|
||||
'Introduce las instrucciones de la skill en formato Markdown...',
|
||||
descriptionPlaceholder:
|
||||
'Breve descripción de lo que hace esta skill (se muestra al LLM)',
|
||||
packageRoot: 'Directorio del paquete',
|
||||
packageRootHelp:
|
||||
'Opcional. Solo se necesita al importar un directorio de skill existente. Déjalo vacío para skills nuevas. El escaneo revisa el directorio actual y subdirectorios hasta 2 niveles.',
|
||||
importLocalDirectory: 'Importar directorio local de skill',
|
||||
chooseSkillDirectory: 'Elegir directorio de SKILL.md',
|
||||
chooseAnotherDirectory: 'Elegir otro directorio',
|
||||
importingDirectory: 'Generando vista previa...',
|
||||
clearDirectoryPreview: 'Borrar directorio seleccionado',
|
||||
noSkillMdInDirectory:
|
||||
'No se encontró SKILL.md en el directorio seleccionado',
|
||||
multipleSkillMdInDirectory:
|
||||
'El directorio seleccionado contiene varios SKILL.md. Elige directamente un único directorio de skill.',
|
||||
importDirectoryError: 'Error al importar el directorio: ',
|
||||
advancedSettings: 'Configuración avanzada',
|
||||
searchSkills: 'Buscar skills...',
|
||||
selectSkills: 'Seleccionar skills',
|
||||
addSkill: 'Añadir skill',
|
||||
builtin: 'Integrada',
|
||||
importFromGithub: 'Instalar skill desde GitHub',
|
||||
createManually: 'Crear manualmente',
|
||||
uploadZip: 'Subir paquete ZIP',
|
||||
uploadZipOnly: 'Solo se admiten paquetes de skill .zip',
|
||||
installSuccess: 'Skill instalada correctamente',
|
||||
installError: 'Error al instalar la skill: ',
|
||||
enterRepoUrl: 'Introduce la URL del repositorio de GitHub',
|
||||
repoUrlPlaceholder: 'p. ej., https://github.com/owner/repo',
|
||||
fetchingReleases: 'Obteniendo releases...',
|
||||
selectRelease: 'Seleccionar release',
|
||||
noReleasesFound: 'No se encontraron releases',
|
||||
fetchReleasesError: 'Error al obtener releases: ',
|
||||
selectAsset: 'Selecciona el archivo para instalar',
|
||||
sourceArchive: 'Código fuente (zip)',
|
||||
noAssetsFound: 'No hay archivos instalables en esta release',
|
||||
fetchAssetsError: 'Error al obtener archivos: ',
|
||||
backToReleases: 'Volver a releases',
|
||||
backToRepoUrl: 'Volver a la URL del repositorio',
|
||||
backToAssets: 'Volver a archivos',
|
||||
releaseTag: 'Etiqueta: {{tag}}',
|
||||
publishedAt: 'Publicado el: {{date}}',
|
||||
prerelease: 'Pre-release',
|
||||
assetSize: 'Tamaño: {{size}}',
|
||||
confirmInstall: 'Confirmar instalación',
|
||||
installing: 'Instalando skill...',
|
||||
loading: 'Cargando...',
|
||||
previewLoadError: 'Error al cargar la vista previa',
|
||||
selectFromSidebar: 'Selecciona una skill en la barra lateral',
|
||||
dangerZone: 'Zona peligrosa',
|
||||
dangerZoneDescription: 'Acciones irreversibles y destructivas',
|
||||
files: 'Archivos',
|
||||
noFiles: 'No se encontraron archivos',
|
||||
loadFilesError: 'Error al cargar archivos: ',
|
||||
readFileError: 'Error al leer el archivo: ',
|
||||
saveFile: 'Guardar archivo',
|
||||
saveFileSuccess: 'Archivo guardado correctamente',
|
||||
saveFileError: 'Error al guardar el archivo: ',
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: 'Instalar {{type}}',
|
||||
installConfirm: '¿Instalar {{type}} "{{name}}"?',
|
||||
installInfoType: 'Tipo',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: 'Versión',
|
||||
installSuccess: 'Instalado correctamente',
|
||||
installStage: {
|
||||
mcpInstalling: 'Añadiendo y conectando el servidor MCP…',
|
||||
skillInstalling: 'Instalando la skill…',
|
||||
installed: 'Listo',
|
||||
},
|
||||
manualAdd: 'Añadir manualmente',
|
||||
uploadExtension: 'Arrastra y suelta o haz clic para subir',
|
||||
uploadHint: 'Admite archivos .zip (skills) y .lbpkg (plugins)',
|
||||
orContinueWith: 'o elige una acción abajo',
|
||||
addMCPServerHint: 'Conectar una extensión de servidor de herramientas MCP',
|
||||
installFromGithub: 'Instalar desde GitHub',
|
||||
installFromGithubHint: 'Paquete de plugin o skill (SKILL.md)',
|
||||
githubUrlHelp: 'Pega una URL de GitHub',
|
||||
githubUrlTooltip:
|
||||
'Plugin: pega una URL de repositorio, Release o Tag. Skill: pega la URL de la página SKILL.md dentro del directorio de la skill.',
|
||||
githubUrlPlaceholder: 'Repositorio de GitHub, Release o enlace SKILL.md',
|
||||
githubUrlRequired: 'Introduce una URL de GitHub',
|
||||
previewSkill: 'Previsualizar skill',
|
||||
noSkillPreviewFound: 'No se encontró ninguna skill importable',
|
||||
createSkill: 'Crear nueva skill',
|
||||
createSkillHint: 'Importar desde un directorio local o crear manualmente',
|
||||
unsupportedFileType:
|
||||
'Tipo de archivo no admitido. Solo se admiten archivos .zip y .lbpkg',
|
||||
},
|
||||
};
|
||||
|
||||
export default esES;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
const jaJP = {
|
||||
const jaJP = {
|
||||
sidebar: {
|
||||
home: 'ホーム',
|
||||
extensions: '拡張機能',
|
||||
installedPlugins: 'インストール済みプラグイン',
|
||||
installedPlugins: 'インストール済み',
|
||||
pluginMarket: 'プラグインマーケット',
|
||||
mcpServers: 'MCPサーバー',
|
||||
addExtension: '拡張機能を追加',
|
||||
pluginPages: 'プラグインページ',
|
||||
pluginPagesTooltip: 'インストール済みプラグインが提供するビジュアルページ',
|
||||
quickStart: 'クイックスタート',
|
||||
scrollToBottom: '一番下までスクロール',
|
||||
editionCommunity: 'コミュニティ版',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: 'ログイン',
|
||||
@@ -32,13 +36,15 @@
|
||||
emptyPassword: 'パスワードを入力してください',
|
||||
language: '言語',
|
||||
helpDocs: 'ヘルプドキュメント',
|
||||
featureRequest: '機能リクエスト',
|
||||
featureRequest: 'フィードバック',
|
||||
starOnGitHub: 'GitHubでStarする',
|
||||
joinDiscord: 'Discord に参加',
|
||||
create: '作成',
|
||||
edit: '編集',
|
||||
delete: '削除',
|
||||
add: '追加',
|
||||
select: '選択してください',
|
||||
skill: 'スキル',
|
||||
cancel: 'キャンセル',
|
||||
submit: '送信',
|
||||
error: 'エラー',
|
||||
@@ -67,6 +73,7 @@
|
||||
test: 'テスト',
|
||||
forgotPassword: 'パスワードを忘れた?',
|
||||
agreementNotice: '続行することで、以下に同意したものとみなされます:',
|
||||
termsOfService: '利用規約',
|
||||
privacyPolicy: 'プライバシーポリシー',
|
||||
and: 'および',
|
||||
dataCollectionPolicy: 'データ収集ポリシー',
|
||||
@@ -117,6 +124,8 @@
|
||||
changePasswordFailed:
|
||||
'パスワードの変更に失敗しました。現在のパスワードを確認してください',
|
||||
apiIntegration: 'API統合',
|
||||
apiIntegrationDescription:
|
||||
'外部アクセス用の API キーと Webhook を管理します',
|
||||
apiKeys: 'API キー',
|
||||
manageApiIntegration: 'API統合の管理',
|
||||
manageApiKeys: 'API キーの管理',
|
||||
@@ -133,6 +142,16 @@
|
||||
noApiKeys: 'API キーが設定されていません',
|
||||
apiKeyHint:
|
||||
'API キーを使用すると、外部システムが LangBot Service API にアクセスできます',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot は MCP(Model Context Protocol)サーバーを提供し、AI エージェントがこのインスタンスを管理できます。Service API と同じ API キーを使用します。',
|
||||
mcpEndpoint: 'MCP エンドポイント',
|
||||
mcpAuthTitle: '認証',
|
||||
mcpAuthDesc:
|
||||
'「API キー」タブの任意のキーを、ヘッダーで送信して認証します:',
|
||||
mcpGlobalKeyNote:
|
||||
'config.yaml にグローバル API キー(api.global_api_key)を設定すると、ログインなしで使用できます。',
|
||||
mcpClientConfigTitle: 'MCP クライアント設定の例',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: 'Webhook を作成',
|
||||
webhookName: 'Webhook 名',
|
||||
@@ -197,6 +216,10 @@
|
||||
selectModelAbilities: 'モデル機能を選択',
|
||||
visionAbility: '視覚機能',
|
||||
functionCallAbility: '関数呼び出し',
|
||||
contextLength: 'コンテキストウィンドウ',
|
||||
contextLengthPlaceholder: '不明',
|
||||
contextLengthInvalid:
|
||||
'コンテキストウィンドウは正の整数である必要があります',
|
||||
extraParameters: '追加パラメータ',
|
||||
addParameter: 'パラメータを追加',
|
||||
keyName: 'キー名',
|
||||
@@ -255,6 +278,7 @@
|
||||
selectProvider: 'プロバイダーを選択',
|
||||
requester: 'プロバイダータイプ',
|
||||
selectRequester: 'プロバイダータイプを選択',
|
||||
searchProviders: 'プロバイダーを検索...',
|
||||
langbotModelsDescription: 'LangBot Space が提供するクラウドモデル',
|
||||
credits: 'クレジット',
|
||||
loginWithSpace: 'Space でログイン',
|
||||
@@ -426,6 +450,26 @@
|
||||
userMessage: 'ユーザー',
|
||||
botMessage: 'アシスタント',
|
||||
},
|
||||
admins: {
|
||||
title: 'Admins',
|
||||
description:
|
||||
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
||||
addAdmin: 'Add Admin',
|
||||
launcherType: 'Type',
|
||||
launcherId: 'ID',
|
||||
typePerson: 'Person',
|
||||
typeGroup: 'Group',
|
||||
placeholderId: 'User or group ID',
|
||||
addSuccess: 'Admin added',
|
||||
addError: 'Failed to add admin: ',
|
||||
deleteSuccess: 'Admin removed',
|
||||
deleteError: 'Failed to remove admin: ',
|
||||
noAdmins: 'No admins configured',
|
||||
setAdminTitle: 'Set as admin',
|
||||
removeAdminTitle: 'Remove admin',
|
||||
adminBadge: 'Admin',
|
||||
configureAdmins: 'Manage Admins',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: '拡張機能',
|
||||
@@ -438,6 +482,7 @@
|
||||
arrange: '並び替え',
|
||||
install: 'インストール',
|
||||
installPlugin: 'プラグインをインストール',
|
||||
newPlugin: '新規プラグイン',
|
||||
onlySupportGithub: '現在はGitHubからのインストールのみサポートしています',
|
||||
enterGithubLink: 'プラグインのGitHubリンクを入力してください',
|
||||
installing: 'プラグインをインストール中...',
|
||||
@@ -452,6 +497,9 @@
|
||||
loading: '読み込み中...',
|
||||
getPluginListError: 'プラグインリストの取得に失敗しました:',
|
||||
noPluginInstalled: 'プラグインがインストールされていません',
|
||||
noExtensionInstalled: '拡張機能がインストールされていません',
|
||||
loadingExtensions: '拡張機能を読み込み中...',
|
||||
groupByType: '形式でグループ化',
|
||||
pluginConfig: 'プラグイン設定',
|
||||
pluginSort: 'プラグインの並び替え',
|
||||
pluginSortDescription:
|
||||
@@ -477,6 +525,19 @@
|
||||
noDebugKey: '(未設定)',
|
||||
debugKeyDisabled:
|
||||
'デバッグキーが設定されていません。プラグインデバッグには認証が不要です',
|
||||
boxStatusTitle: 'Box ランタイム',
|
||||
boxStatus: 'ステータス',
|
||||
boxConnected: '接続済み',
|
||||
boxUnavailable: '利用不可',
|
||||
boxBackend: 'バックエンド',
|
||||
boxProfile: 'プロファイル',
|
||||
boxSandboxes: 'サンドボックス',
|
||||
boxErrors: 'エラー',
|
||||
boxSessionImage: 'イメージ',
|
||||
boxSessionBackend: 'バックエンド',
|
||||
boxSessionResources: 'リソース',
|
||||
boxSessionNetwork: 'ネットワーク',
|
||||
boxStatusLoadFailed: 'Box ステータスの読み込みに失敗しました',
|
||||
failedToGetDebugInfo: 'デバッグ情報の取得に失敗しました',
|
||||
copiedToClipboard: 'クリップボードにコピーしました',
|
||||
deleting: '削除中...',
|
||||
@@ -492,6 +553,8 @@
|
||||
close: '閉じる',
|
||||
deleteConfirm: '削除の確認',
|
||||
deleteSuccess: '削除に成功しました',
|
||||
dangerZone: '危険ゾーン',
|
||||
dangerZoneDescription: '取り消しできない操作です',
|
||||
modifyFailed: '変更に失敗しました:',
|
||||
componentName: {
|
||||
Tool: 'ツール',
|
||||
@@ -504,6 +567,22 @@
|
||||
uploadLocal: 'ローカルアップロード',
|
||||
debugging: 'デバッグ中',
|
||||
uploadLocalPlugin: 'ローカルプラグインのアップロード',
|
||||
localPreview: {
|
||||
title: 'ローカルプラグインパッケージをプレビュー',
|
||||
unpacking: 'パッケージを展開してプレビュー中...',
|
||||
unpackComplete: 'パッケージのプレビュー準備完了',
|
||||
failed: 'パッケージのプレビューに失敗しました',
|
||||
pluginInfo: 'プラグイン情報',
|
||||
packageInfo: 'パッケージ情報',
|
||||
name: '名前',
|
||||
author: '作者',
|
||||
version: 'バージョン',
|
||||
fileCount: 'ファイル数',
|
||||
dependencies: '依存関係',
|
||||
components: 'コンポーネント',
|
||||
ready:
|
||||
'プラグインパッケージを展開しました。確認するとインストールを開始します。',
|
||||
},
|
||||
dragToUpload: 'ファイルをここにドラッグしてアップロード',
|
||||
unsupportedFileType:
|
||||
'サポートされていないファイルタイプです。.lbpkg と .zip ファイルのみサポートされています',
|
||||
@@ -512,6 +591,7 @@
|
||||
uploadFailed: 'アップロード失敗',
|
||||
selectFileToUpload: 'アップロードするプラグインファイルを選択',
|
||||
askConfirm: 'プラグイン "{{name}}" ({{version}}) をインストールしますか?',
|
||||
askConfirmNoVersion: 'プラグイン "{{name}}" をインストールしますか?',
|
||||
fromGithub: 'GitHubから',
|
||||
fromLocal: 'ローカルから',
|
||||
fromMarketplace: 'プラグインマーケットから',
|
||||
@@ -534,6 +614,13 @@
|
||||
viewSource: 'ソースを表示',
|
||||
loadingReadme: 'ドキュメントを読み込み中...',
|
||||
noReadme: 'このプラグインはREADMEドキュメントを提供していません',
|
||||
tabDocs: 'ドキュメント',
|
||||
tabLogs: 'ログ',
|
||||
logsLevelAll: 'すべてのレベル',
|
||||
logsRefresh: '更新',
|
||||
logsAutoRefresh: '自動更新',
|
||||
logsEmpty:
|
||||
'ログはまだありません。プラグインが logger で出力したログがここに表示されます。',
|
||||
fileUpload: {
|
||||
tooLarge: 'ファイルサイズが 10MB の制限を超えています',
|
||||
success: 'ファイルのアップロードに成功しました',
|
||||
@@ -583,17 +670,27 @@
|
||||
taskQueue: 'インストールタスク',
|
||||
clearCompleted: '完了を消去',
|
||||
noTasks: 'インストールタスクはありません',
|
||||
titlePlugin: 'プラグイン {{name}} をインストール中',
|
||||
titleMCP: 'MCP サーバー {{name}} をインストール中',
|
||||
titleSkill: 'スキル {{name}} をインストール中',
|
||||
installCompletePlugin: 'プラグインをインストールしました',
|
||||
installCompleteMCP: 'MCP サーバーをインストールしました',
|
||||
installCompleteSkill: 'スキルをインストールしました',
|
||||
},
|
||||
uploadPluginOnly: '.lbpkg プラグインパッケージのみ対応しています',
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: 'プラグインを検索...',
|
||||
searchResults: '{{count}} 個のプラグインが見つかりました',
|
||||
totalPlugins: '合計 {{count}} 個のプラグイン',
|
||||
searchPlaceholderCount:
|
||||
'{{count}} 個の拡張機能・機能・ユースケースを検索...',
|
||||
searchResults: '{{count}} 個の拡張機能が見つかりました',
|
||||
totalPlugins: '合計 {{count}} 個の拡張機能',
|
||||
noPlugins: '利用可能なプラグインがありません',
|
||||
noResults: '関連するプラグインが見つかりません',
|
||||
loadingMore: 'さらに読み込み中...',
|
||||
loading: '読み込み中...',
|
||||
allLoaded: 'すべてのプラグインが表示されました',
|
||||
allLoadedCount: '{{count}} 個の拡張機能をすべて表示しました',
|
||||
install: 'インストール',
|
||||
installConfirm:
|
||||
'プラグイン "{{name}}" ({{version}}) をインストールしますか?',
|
||||
@@ -602,6 +699,10 @@
|
||||
loadFailed:
|
||||
'プラグインリストの取得に失敗しました。後でもう一度お試しください',
|
||||
noDescription: '説明がありません',
|
||||
recommendation: {
|
||||
pause: '自動ローテーションを一時停止',
|
||||
resume: '自動ローテーションを再開',
|
||||
},
|
||||
notFound: 'プラグイン情報が見つかりません',
|
||||
sortBy: '並び順',
|
||||
sort: {
|
||||
@@ -628,8 +729,23 @@
|
||||
markAsRead: '既読',
|
||||
markAsReadSuccess: '既読に設定しました',
|
||||
markAsReadFailed: '既読に設定に失敗しました',
|
||||
filterByComponent: 'コンポーネント',
|
||||
filterByComponent: 'プラグインコンポーネント',
|
||||
filterByComponentHint:
|
||||
'プラグインが提供する機能の種類です(ツール、コマンド、イベントリスナーなど)。LangBot のさまざまな機能を拡張するために使われます。コンポーネントで絞り込むと、その機能を提供するプラグインのみを表示できます。',
|
||||
allComponents: '全部コンポーネント',
|
||||
componentName: {
|
||||
Tool: 'ツール',
|
||||
EventListener: 'イベント監視器',
|
||||
Command: 'コマンド',
|
||||
KnowledgeEngine: '知識エンジン',
|
||||
Parser: 'パーサー',
|
||||
Page: 'ページ',
|
||||
},
|
||||
filterByType: 'タイプ',
|
||||
allTypes: '全部',
|
||||
typePlugin: 'プラグイン',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: 'スキル',
|
||||
requestPlugin: 'プラグインをリクエスト',
|
||||
tags: {
|
||||
filterByTags: 'タグで絞り込み',
|
||||
@@ -638,14 +754,24 @@
|
||||
clearAll: 'クリア',
|
||||
noTags: 'タグがありません',
|
||||
},
|
||||
filters: {
|
||||
allFormats: 'すべての種類',
|
||||
more: 'もっと',
|
||||
advancedTitle: '高度なフィルター',
|
||||
advancedDescription: '拡張子タイプでフィルター',
|
||||
technicalType: '技術タイプ',
|
||||
},
|
||||
allExtensions: 'すべての拡張機能',
|
||||
viewDetails: '詳細を表示',
|
||||
deprecated: '非推奨',
|
||||
deprecatedTooltip:
|
||||
'対応する「ナレッジエンジン」プラグインをインストールしてください。',
|
||||
installCard: '{{name}} をインストール',
|
||||
},
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: 'MCPサーバーを追加',
|
||||
addMCPServer: 'MCPサーバーを追加',
|
||||
editServer: 'MCPサーバーを編集',
|
||||
deleteServer: 'MCPサーバーを削除',
|
||||
confirmDeleteServer: 'このMCPサーバーを削除してもよろしいですか?',
|
||||
@@ -656,6 +782,15 @@
|
||||
stdio: 'Stdioモード',
|
||||
sse: 'SSEモード',
|
||||
http: 'HTTPモード',
|
||||
local: 'ローカル(Stdio)',
|
||||
remote: 'リモート',
|
||||
localModeDescription:
|
||||
'Box サンドボックス内でサブプロセスとして MCP サーバーをローカル実行します。',
|
||||
remoteModeDescription:
|
||||
'URL でリモート MCP サーバーに接続します。トランスポート(Streamable HTTP または SSE)は自動検出されます。',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'MCP サーバーの URL を貼り付けてください。Streamable HTTP と従来の SSE エンドポイントの両方に対応しています。',
|
||||
selectMode: '接続モードを選択',
|
||||
noServerInstalled: 'MCPサーバーが設定されていません',
|
||||
serverNameRequired: 'サーバー名は必須です',
|
||||
@@ -683,9 +818,28 @@
|
||||
connectionSuccess: '接続に成功しました',
|
||||
connectionFailed: '接続に失敗しました,URLを確認してください',
|
||||
connectionFailedStatus: '接続失敗',
|
||||
boxDisabledStdioRefused:
|
||||
'Stdio モードの MCP サーバーは Box サンドボックスを必要としますが、設定で無効化されています(box.enabled = false)。',
|
||||
boxUnavailableStdioRefused:
|
||||
'Stdio モードの MCP サーバーは Box サンドボックスを必要としますが、現在接続できません。',
|
||||
boxStdioRefusedSuggestion:
|
||||
'Box を有効化(box.enabled = true)してランタイムの接続を確認するか、このサーバーを http/sse モードに切り替えてください。',
|
||||
boxRequired: 'Box が必要',
|
||||
stdioBlockedByBoxToast:
|
||||
'Box サンドボックスが無効または利用できないため、stdio モードの MCP は保存できません。Box を有効化するか、http/sse モードに切り替えてください。',
|
||||
toolsFound: '個のツール',
|
||||
unknownError: '不明なエラー',
|
||||
noToolsFound: 'ツールが見つかりません',
|
||||
noResourcesFound: 'リソースが見つかりません',
|
||||
tabTools: 'ツール',
|
||||
tabResources: 'リソース',
|
||||
tabDocs: 'ドキュメント',
|
||||
tabLogs: 'ログ',
|
||||
logsLevelAll: 'すべてのレベル',
|
||||
logsRefresh: '更新',
|
||||
logsAutoRefresh: '自動更新',
|
||||
logsEmpty: 'ログはありません。MCPサーバーの実行ログがここに表示されます。',
|
||||
noReadme: 'ドキュメントがありません',
|
||||
parseResultFailed: 'テスト結果の解析に失敗しました',
|
||||
noResultReturned: 'テスト結果が返されませんでした',
|
||||
getTaskFailed: 'タスクステータスの取得に失敗しました',
|
||||
@@ -701,6 +855,14 @@
|
||||
loadFailed: '読み込みに失敗しました',
|
||||
modifyFailed: '変更に失敗しました:',
|
||||
toolCount: 'ツール:{{count}}',
|
||||
parameterCount: 'パラメータ:{{count}}',
|
||||
noParameters: 'パラメータなし',
|
||||
resourceCount: 'リソース:{{count}}',
|
||||
resourceBinaryContent: 'バイナリコンテンツ(表示できません)',
|
||||
resourceBinaryOmitted:
|
||||
'リソース安全ポリシーによりバイナリコンテンツを省略しました',
|
||||
resourceTruncated: 'バイトまたはトークンの上限により内容を切り詰めました',
|
||||
resourceReadFailed: 'リソースの読み込みに失敗しました',
|
||||
statusConnected: '接続済み',
|
||||
statusDisconnected: '未接続',
|
||||
statusError: '接続エラー',
|
||||
@@ -790,9 +952,12 @@
|
||||
selectPlugins: 'プラグインを選択',
|
||||
pluginsTitle: 'プラグイン',
|
||||
mcpServersTitle: 'MCPサーバー',
|
||||
mcpResourcesTitle: 'MCPリソース',
|
||||
noMCPServersSelected: 'MCPサーバーが選択されていません',
|
||||
noMCPResourcesAvailable: '利用可能なMCPリソースがありません',
|
||||
addMCPServer: 'MCPサーバーを追加',
|
||||
selectMCPServers: 'MCPサーバーを選択',
|
||||
enableMCPResourceAgentRead: 'モデルの読み取りを許可',
|
||||
toolCount: '{{count}}個のツール',
|
||||
noPluginsInstalled: 'インストールされているプラグインがありません',
|
||||
noMCPServersConfigured: '設定されているMCPサーバーがありません',
|
||||
@@ -801,6 +966,49 @@
|
||||
enableAllMCPServers: 'すべてのMCPサーバーを有効にする',
|
||||
allPluginsEnabled: 'すべてのプラグインが有効になっています',
|
||||
allMCPServersEnabled: 'すべてのMCPサーバーが有効になっています',
|
||||
enableAllSkills: 'すべてのスキルを有効化',
|
||||
allSkillsEnabled: 'すべてのスキルが有効です',
|
||||
skillsTitle: 'スキル',
|
||||
noSkillsSelected: 'スキルが選択されていません',
|
||||
addSkill: 'スキルを追加',
|
||||
selectSkills: 'スキルを選択',
|
||||
noSkillsAvailable: '利用可能なスキルがありません',
|
||||
mcpServersScopeTooltip:
|
||||
'ここでは、このパイプラインに紐付ける MCP サーバーだけを管理します。個別の MCP ツールとリソースは AI 機能の Local Agent で選択します。',
|
||||
enableAllMCPServersTooltip:
|
||||
'有効にすると、設定済みで有効なすべての MCP サーバーが AI 機能の MCP ツールとリソース候補になります。',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: 'ツール',
|
||||
toolsDescription:
|
||||
'この Local Agent が使用できるプラグイン、MCP、組み込みツールを選択します。',
|
||||
toolsScopeTooltip:
|
||||
'MCP ツールは拡張機能で紐付けられた MCP サーバーからのみ表示されます。追加するには先に拡張機能でサーバーを紐付けてください。',
|
||||
enableAllTools: 'すべてのツールを有効化',
|
||||
allToolsEnabled: '利用可能なすべてのツールが有効です',
|
||||
noToolsSelected: 'ツールが選択されていません',
|
||||
editTools: 'ツールを編集',
|
||||
builtinTools: '組み込みツール',
|
||||
pluginTools: 'プラグインツール',
|
||||
skillTools: 'スキルツール',
|
||||
mcpTools: 'MCP ツール',
|
||||
mcpToolsScopeTooltip:
|
||||
'拡張機能で現在許可されている MCP サーバーのツールだけが表示されます。',
|
||||
skillToolsScopeTooltip:
|
||||
'スキルツールは LangBot のスキルサービスと Box サンドボックスバックエンドが利用可能なときに表示され、Agent がスキルを有効化または登録できるようにします。',
|
||||
selectTools: 'ツールを選択',
|
||||
resourcesTitle: 'リソース',
|
||||
resourcesDescription:
|
||||
'この Local Agent が読み取れる MCP リソースとナレッジベースを選択します。',
|
||||
knowledgeBases: 'ナレッジベース',
|
||||
mcpResources: 'MCP リソース',
|
||||
mcpResourcesScopeTooltip:
|
||||
'拡張機能で現在許可されている MCP サーバーのリソースだけが表示されます。',
|
||||
enableMCPResourceRead: 'モデルによる MCP リソース読み取りを許可',
|
||||
mcpResourceReadTooltip:
|
||||
'無効にすると、選択済みの MCP リソースもモデルコンテキストに注入されません。',
|
||||
noMCPResourcesAvailable: '利用可能な MCP リソースがありません',
|
||||
selectKnowledgeBases: 'ナレッジベースを選択',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'パイプラインのチャット',
|
||||
@@ -1041,6 +1249,7 @@
|
||||
},
|
||||
account: {
|
||||
settings: 'アカウント設定',
|
||||
settingsDescription: 'パスワードと連携アカウントを管理します',
|
||||
setPassword: 'パスワードを設定',
|
||||
passwordSetSuccess: 'パスワードの設定に成功しました',
|
||||
passwordStatus: 'ローカルパスワード',
|
||||
@@ -1107,6 +1316,7 @@
|
||||
llmCalls: 'LLM呼び出し',
|
||||
embeddingCalls: 'Embedding呼び出し',
|
||||
modelCalls: 'モデル呼び出し',
|
||||
tokens: 'トークン監視',
|
||||
sessions: 'セッション分析',
|
||||
feedback: 'ユーザーフィードバック',
|
||||
errors: 'エラーログ',
|
||||
@@ -1131,6 +1341,20 @@
|
||||
level: 'レベル',
|
||||
runner: 'ランナー',
|
||||
viewConversation: '会話詳細を表示',
|
||||
turns: '{{count}} 会話ターン',
|
||||
userMessage: 'ユーザー',
|
||||
noUserMessage: 'ユーザー入力は記録されていません',
|
||||
assistantMessage: 'アシスタント',
|
||||
assistantMessageCount: 'アシスタント +{{count}}',
|
||||
noAssistantMessage: 'アシスタントの返信は記録されていません',
|
||||
messageCount: 'メッセージ数',
|
||||
conversationTrace: '会話トレース',
|
||||
noLlmCalls: 'モデル呼び出しは記録されていません',
|
||||
roles: {
|
||||
user: 'ユーザー',
|
||||
assistant: 'アシスタント',
|
||||
message: 'メッセージ',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'LLM呼び出し',
|
||||
@@ -1145,6 +1369,39 @@
|
||||
avgDuration: '平均期間',
|
||||
calls: '呼び出し',
|
||||
},
|
||||
toolCalls: {
|
||||
title: 'ツール呼び出し',
|
||||
totalCalls: '呼び出し',
|
||||
duration: 'ツール時間',
|
||||
errorCalls: '失敗した呼び出し',
|
||||
arguments: '引数',
|
||||
result: '結果',
|
||||
noToolCalls: 'ツール呼び出しは記録されていません',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: '総トークン数',
|
||||
inputTokens: '入力トークン',
|
||||
outputTokens: '出力トークン',
|
||||
avgPerCall: '平均 / 呼び出し',
|
||||
throughput: 'スループット',
|
||||
tokensPerSec: 'トークン/秒',
|
||||
errorCalls: '失敗した呼び出し',
|
||||
acrossCalls: '{{count}} 回の呼び出し',
|
||||
ofTotal: '合計 {{count}} 回',
|
||||
usageOverTime: 'トークン使用量の推移',
|
||||
byModel: 'モデル別',
|
||||
model: 'モデル',
|
||||
calls: '呼び出し回数',
|
||||
avgLatency: '平均レイテンシ',
|
||||
noData: '選択した期間にトークン使用量がありません',
|
||||
loadError: 'トークン統計の読み込みに失敗しました: {{error}}',
|
||||
zeroTokenWarning:
|
||||
'{{count}} 件の成功した呼び出しでトークン使用量が 0 と報告されました。通常これは上流プロバイダーが使用量情報を返さなかったことを意味します。モデルプロバイダーの設定を確認してください。',
|
||||
bucket: {
|
||||
hour: '時間単位',
|
||||
day: '日単位',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding呼び出し',
|
||||
model: 'モデル',
|
||||
@@ -1206,6 +1463,22 @@
|
||||
inaccurateReasons: '不正確な理由',
|
||||
platform: 'プラットフォーム',
|
||||
exportFeedback: 'フィードバックをエクスポート',
|
||||
description:
|
||||
'問題点や改善案を教えてください。診断のため、インスタンス UUID、ログインアカウント、ページ情報も送信されます。',
|
||||
placeholder: '提案、問題、再現手順を入力してください...',
|
||||
attachImage: '画像を追加',
|
||||
screenshot: 'スクリーンショット',
|
||||
submit: '送信',
|
||||
privacyHint: '秘密鍵、パスワード、個人的な会話内容は含めないでください。',
|
||||
contentRequired: 'フィードバック内容を入力してください',
|
||||
imageOnly: '画像のみ添付できます',
|
||||
imageTooLarge: '画像は 1 枚 2MB 未満にしてください',
|
||||
tooManyImages: '画像は最大 3 枚まで添付できます',
|
||||
screenshotFailed:
|
||||
'スクリーンショットに失敗しました。貼り付けまたはアップロードを試してください。',
|
||||
submitSuccess: 'フィードバックを送信しました。ありがとうございます!',
|
||||
submitFailed: '送信に失敗しました。後でもう一度お試しください。',
|
||||
removeImage: '画像を削除',
|
||||
},
|
||||
messageDetails: {
|
||||
noData: 'このクエリにはLLM呼び出しやエラーがありません',
|
||||
@@ -1235,6 +1508,34 @@
|
||||
sessions: 'セッション',
|
||||
feedback: 'ユーザーフィードバック',
|
||||
},
|
||||
systemStatus: 'システム状態',
|
||||
pluginRuntime: 'プラグインランタイム',
|
||||
boxRuntime: 'Box ランタイム',
|
||||
connected: '接続済み',
|
||||
disconnected: '未接続',
|
||||
disabled: '無効',
|
||||
statusDetail: 'ステータス',
|
||||
pluginDisabled: 'プラグインシステムが無効です',
|
||||
boxDisabled:
|
||||
'Box サンドボックスは設定で無効化されています — サンドボックスツール / スキルの追加・編集 / stdio MCP は利用できません',
|
||||
boxUnavailable:
|
||||
'Box サンドボックスは利用できません — サンドボックスツール / スキルの追加・編集 / stdio MCP は利用できません',
|
||||
boxRequiredHint:
|
||||
'この機能には Box ランタイムが必要です。設定で有効化(box.enabled = true)し、ランタイムが正常に接続できることを確認してください。',
|
||||
boxBackend: 'バックエンド',
|
||||
boxProfile: 'プロファイル',
|
||||
boxSandboxes: 'サンドボックス',
|
||||
boxSessionCreated: '作成日時',
|
||||
boxSessionLastUsed: '最終使用',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: '設定',
|
||||
nav: {
|
||||
models: 'モデル',
|
||||
api: 'API',
|
||||
storage: 'ストレージ',
|
||||
account: 'アカウント',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: 'ストレージ分析',
|
||||
@@ -1345,6 +1646,53 @@
|
||||
backToWorkbench: 'ワークベンチに戻る',
|
||||
},
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: '{{type}}をインストール',
|
||||
installConfirm: '{{type}}「{{name}}」をインストールしますか?',
|
||||
installInfoType: 'タイプ',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: 'バージョン',
|
||||
installSuccess: 'インストールに成功しました',
|
||||
installStage: {
|
||||
mcpInstalling: 'MCPサーバーを追加して接続しています…',
|
||||
skillInstalling: 'スキルをインストールしています…',
|
||||
installed: '完了',
|
||||
},
|
||||
manualAdd: '手動追加',
|
||||
uploadExtension: 'ドラッグ&ドロップまたはクリックしてアップロード',
|
||||
uploadHint: '.zip(スキル)と.lbpkg(プラグイン)ファイルに対応',
|
||||
orContinueWith: 'または以下の操作を選択',
|
||||
addMCPServerHint: 'MCPツールサーバー拡張を接続',
|
||||
installFromGithub: 'GitHubからプラグインをインストール',
|
||||
installFromGithubHint: 'GitHub Releaseからプラグイン拡張をインストール',
|
||||
createSkill: '新しいスキルを作成',
|
||||
createSkillHint: '新しいスキル拡張を手動で作成',
|
||||
unsupportedFileType:
|
||||
'サポートされていないファイルタイプです。.zipと.lbpkgファイルのみサポートされています',
|
||||
githubUrlHelp: 'GitHub URL を貼り付けてください',
|
||||
githubUrlTooltip:
|
||||
'プラグイン: リポジトリ、Release、Tag の URL を貼り付けます。スキル: スキルディレクトリ内の SKILL.md ページ URL を貼り付けます。',
|
||||
githubUrlPlaceholder:
|
||||
'GitHub リポジトリ、Release、または SKILL.md のリンク',
|
||||
githubUrlRequired: 'GitHub URL を入力してください',
|
||||
previewSkill: 'スキルをプレビュー',
|
||||
noSkillPreviewFound: 'インポート可能なスキルが見つかりません',
|
||||
},
|
||||
errorPage: {
|
||||
unexpectedError: 'エラーが発生しました',
|
||||
unexpectedErrorDescription:
|
||||
'予期しないエラーが発生しました。しばらくしてからもう一度お試しください。',
|
||||
notFound: 'ページが見つかりません',
|
||||
notFoundDescription:
|
||||
'お探しのページは存在しないか、移動された可能性があります。',
|
||||
backendUnavailableStatus: 'バックエンドを利用できません',
|
||||
goBack: '戻る',
|
||||
backToHome: 'ホームに戻る',
|
||||
backToLogin: 'ログインに戻る',
|
||||
retrying: '再試行中',
|
||||
retryFailed:
|
||||
'バックエンドにまだ接続できません。サービスを起動してからもう一度お試しください。',
|
||||
},
|
||||
feishu: {
|
||||
createApp: 'ワンクリックでFeishuアプリ作成',
|
||||
scanQRCode: '以下のQRコードをFeishuでスキャンし、アプリを自動作成',
|
||||
@@ -1402,6 +1750,97 @@
|
||||
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;
|
||||
|
||||
@@ -2,13 +2,17 @@ const ruRU = {
|
||||
sidebar: {
|
||||
home: 'Главная',
|
||||
extensions: 'Расширения',
|
||||
installedPlugins: 'Установленные плагины',
|
||||
installedPlugins: 'Установленные',
|
||||
pluginMarket: 'Маркетплейс',
|
||||
mcpServers: 'MCP-серверы',
|
||||
addExtension: 'Добавить расширение',
|
||||
pluginPages: 'Страницы плагинов',
|
||||
pluginPagesTooltip:
|
||||
'Визуальные страницы, предоставляемые установленными плагинами',
|
||||
quickStart: 'Быстрый старт',
|
||||
scrollToBottom: 'Прокрутить вниз',
|
||||
editionCommunity: 'Сообщество',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: 'Войти',
|
||||
@@ -34,11 +38,13 @@ const ruRU = {
|
||||
helpDocs: 'Помощь',
|
||||
featureRequest: 'Запрос функции',
|
||||
starOnGitHub: 'Поставить звезду на GitHub',
|
||||
joinDiscord: 'Присоединиться к Discord',
|
||||
create: 'Создать',
|
||||
edit: 'Редактировать',
|
||||
delete: 'Удалить',
|
||||
add: 'Добавить',
|
||||
select: 'Выбрать',
|
||||
skill: 'Навык',
|
||||
cancel: 'Отмена',
|
||||
submit: 'Отправить',
|
||||
error: 'Ошибка',
|
||||
@@ -116,6 +122,8 @@ const ruRU = {
|
||||
changePasswordFailed:
|
||||
'Не удалось изменить пароль, проверьте текущий пароль',
|
||||
apiIntegration: 'API-интеграция',
|
||||
apiIntegrationDescription:
|
||||
'Управление API-ключами и вебхуками для внешнего доступа',
|
||||
apiKeys: 'API-ключи',
|
||||
manageApiIntegration: 'Управление API-интеграцией',
|
||||
manageApiKeys: 'Управление API-ключами',
|
||||
@@ -132,6 +140,16 @@ const ruRU = {
|
||||
noApiKeys: 'API-ключи не настроены',
|
||||
apiKeyHint:
|
||||
'API-ключи позволяют внешним системам получать доступ к API сервисов LangBot',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
|
||||
mcpEndpoint: 'MCP Endpoint',
|
||||
mcpAuthTitle: 'Authentication',
|
||||
mcpAuthDesc:
|
||||
'Authenticate with any API key from the API Keys tab, sent as a header:',
|
||||
mcpGlobalKeyNote:
|
||||
'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
|
||||
mcpClientConfigTitle: 'Example MCP client config',
|
||||
webhooks: 'Вебхуки',
|
||||
createWebhook: 'Создать вебхук',
|
||||
webhookName: 'Имя вебхука',
|
||||
@@ -153,6 +171,7 @@ const ruRU = {
|
||||
more: 'Ещё ({{count}})',
|
||||
less: 'Свернуть',
|
||||
noItems: 'Нет элементов',
|
||||
termsOfService: 'Условия обслуживания',
|
||||
},
|
||||
notFound: {
|
||||
title: 'Страница не найдена',
|
||||
@@ -196,6 +215,10 @@ const ruRU = {
|
||||
selectModelAbilities: 'Выберите возможности модели',
|
||||
visionAbility: 'Распознавание изображений',
|
||||
functionCallAbility: 'Вызов функций',
|
||||
contextLength: 'Контекстное окно',
|
||||
contextLengthPlaceholder: 'Неизвестно',
|
||||
contextLengthInvalid:
|
||||
'Контекстное окно должно быть положительным целым числом',
|
||||
extraParameters: 'Дополнительные параметры',
|
||||
addParameter: 'Добавить параметр',
|
||||
keyName: 'Имя ключа',
|
||||
@@ -258,6 +281,7 @@ const ruRU = {
|
||||
selectProvider: 'Выберите провайдера',
|
||||
requester: 'Тип провайдера',
|
||||
selectRequester: 'Выберите тип провайдера',
|
||||
searchProviders: 'Поиск провайдеров...',
|
||||
langbotModelsDescription: 'Облачные модели на базе LangBot Space',
|
||||
credits: 'Кредиты',
|
||||
loginWithSpace: 'Войти через Space',
|
||||
@@ -430,6 +454,26 @@ const ruRU = {
|
||||
userMessage: 'Пользователь',
|
||||
botMessage: 'Ассистент',
|
||||
},
|
||||
admins: {
|
||||
title: 'Admins',
|
||||
description:
|
||||
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
||||
addAdmin: 'Add Admin',
|
||||
launcherType: 'Type',
|
||||
launcherId: 'ID',
|
||||
typePerson: 'Person',
|
||||
typeGroup: 'Group',
|
||||
placeholderId: 'User or group ID',
|
||||
addSuccess: 'Admin added',
|
||||
addError: 'Failed to add admin: ',
|
||||
deleteSuccess: 'Admin removed',
|
||||
deleteError: 'Failed to remove admin: ',
|
||||
noAdmins: 'No admins configured',
|
||||
setAdminTitle: 'Set as admin',
|
||||
removeAdminTitle: 'Remove admin',
|
||||
adminBadge: 'Admin',
|
||||
configureAdmins: 'Manage Admins',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: 'Расширения',
|
||||
@@ -442,6 +486,7 @@ const ruRU = {
|
||||
arrange: 'Сортировка плагинов',
|
||||
install: 'Установить',
|
||||
installPlugin: 'Установить плагин',
|
||||
newPlugin: 'Новый плагин',
|
||||
onlySupportGithub:
|
||||
'В настоящее время поддерживается установка только с GitHub',
|
||||
enterGithubLink: 'Введите ссылку на GitHub плагина',
|
||||
@@ -457,6 +502,9 @@ const ruRU = {
|
||||
loading: 'Загрузка...',
|
||||
getPluginListError: 'Не удалось получить список плагинов:',
|
||||
noPluginInstalled: 'Плагины не установлены',
|
||||
noExtensionInstalled: 'Расширения не установлены',
|
||||
loadingExtensions: 'Загрузка расширений...',
|
||||
groupByType: 'Группировать по формату',
|
||||
pluginConfig: 'Настройка плагина',
|
||||
pluginSort: 'Порядок плагинов',
|
||||
pluginSortDescription:
|
||||
@@ -482,6 +530,19 @@ const ruRU = {
|
||||
noDebugKey: '(Не задан)',
|
||||
debugKeyDisabled:
|
||||
'Ключ отладки не задан, аутентификация при отладке плагина не требуется',
|
||||
boxStatusTitle: 'Box Runtime',
|
||||
boxStatus: 'Статус',
|
||||
boxConnected: 'Подключено',
|
||||
boxUnavailable: 'Недоступно',
|
||||
boxBackend: 'Бэкенд',
|
||||
boxProfile: 'Профиль',
|
||||
boxSandboxes: 'Песочницы',
|
||||
boxErrors: 'Ошибки',
|
||||
boxSessionImage: 'Образ',
|
||||
boxSessionBackend: 'Бэкенд',
|
||||
boxSessionResources: 'Ресурсы',
|
||||
boxSessionNetwork: 'Сеть',
|
||||
boxStatusLoadFailed: 'Не удалось загрузить статус Box',
|
||||
failedToGetDebugInfo: 'Не удалось получить отладочную информацию',
|
||||
copiedToClipboard: 'Скопировано в буфер обмена',
|
||||
deleting: 'Удаление...',
|
||||
@@ -498,6 +559,8 @@ const ruRU = {
|
||||
close: 'Закрыть',
|
||||
deleteConfirm: 'Подтверждение удаления',
|
||||
deleteSuccess: 'Удаление успешно',
|
||||
dangerZone: 'Опасная зона',
|
||||
dangerZoneDescription: 'Необратимые и разрушительные действия',
|
||||
modifyFailed: 'Ошибка изменения: ',
|
||||
componentName: {
|
||||
Tool: 'Инструмент',
|
||||
@@ -510,6 +573,21 @@ const ruRU = {
|
||||
uploadLocal: 'Загрузить локально',
|
||||
debugging: 'Отладка',
|
||||
uploadLocalPlugin: 'Загрузить локальный плагин',
|
||||
localPreview: {
|
||||
title: 'Предпросмотр локального пакета плагина',
|
||||
unpacking: 'Распаковка пакета для предпросмотра...',
|
||||
unpackComplete: 'Предпросмотр пакета готов',
|
||||
failed: 'Не удалось выполнить предпросмотр пакета',
|
||||
pluginInfo: 'Информация о плагине',
|
||||
packageInfo: 'Информация о пакете',
|
||||
name: 'Название',
|
||||
author: 'Автор',
|
||||
version: 'Версия',
|
||||
fileCount: 'Файлы',
|
||||
dependencies: 'Зависимости',
|
||||
components: 'Компоненты',
|
||||
ready: 'Пакет плагина распакован. Подтвердите, чтобы начать установку.',
|
||||
},
|
||||
dragToUpload: 'Перетащите файл плагина сюда для загрузки',
|
||||
unsupportedFileType:
|
||||
'Неподдерживаемый тип файла, поддерживаются только файлы .lbpkg и .zip',
|
||||
@@ -519,6 +597,7 @@ const ruRU = {
|
||||
selectFileToUpload: 'Выберите файл плагина для загрузки',
|
||||
askConfirm:
|
||||
'Вы уверены, что хотите установить плагин "{{name}}" ({{version}})?',
|
||||
askConfirmNoVersion: 'Вы уверены, что хотите установить плагин "{{name}}"?',
|
||||
fromGithub: 'С GitHub',
|
||||
fromLocal: 'Из локального файла',
|
||||
fromMarketplace: 'Из маркетплейса',
|
||||
@@ -541,6 +620,13 @@ const ruRU = {
|
||||
viewSource: 'Исходный код',
|
||||
loadingReadme: 'Загрузка документации...',
|
||||
noReadme: 'Этот плагин не предоставляет документацию README',
|
||||
tabDocs: 'Документация',
|
||||
tabLogs: 'Журналы',
|
||||
logsLevelAll: 'Все уровни',
|
||||
logsRefresh: 'Обновить',
|
||||
logsAutoRefresh: 'Автообновление',
|
||||
logsEmpty:
|
||||
'Журналов пока нет. Здесь появятся логи, выводимые плагином через logger.',
|
||||
fileUpload: {
|
||||
tooLarge: 'Размер файла превышает лимит 10 МБ',
|
||||
success: 'Файл успешно загружен',
|
||||
@@ -590,17 +676,27 @@ const ruRU = {
|
||||
taskQueue: 'Задачи установки',
|
||||
clearCompleted: 'Очистить завершённые',
|
||||
noTasks: 'Нет задач установки',
|
||||
titlePlugin: 'Установка плагина {{name}}',
|
||||
titleMCP: 'Установка сервера MCP {{name}}',
|
||||
titleSkill: 'Установка навыка {{name}}',
|
||||
installCompletePlugin: 'Плагин успешно установлен',
|
||||
installCompleteMCP: 'Сервер MCP успешно установлен',
|
||||
installCompleteSkill: 'Навык успешно установлен',
|
||||
},
|
||||
uploadPluginOnly: 'Поддерживаются только пакеты плагинов .lbpkg',
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: 'Поиск плагинов...',
|
||||
searchResults: 'Найдено {{count}} плагинов',
|
||||
totalPlugins: 'Всего {{count}} плагинов',
|
||||
searchPlaceholderCount:
|
||||
'Поиск среди {{count}} расширений, возможностей или сценариев...',
|
||||
searchResults: 'Найдено {{count}} расширений',
|
||||
totalPlugins: 'Всего {{count}} расширений',
|
||||
noPlugins: 'Нет доступных плагинов',
|
||||
noResults: 'Подходящие плагины не найдены',
|
||||
loadingMore: 'Загрузка ещё...',
|
||||
loading: 'Загрузка...',
|
||||
allLoaded: 'Все плагины отображены',
|
||||
allLoadedCount: 'Показаны все {{count}} расширений',
|
||||
install: 'Установить',
|
||||
installConfirm:
|
||||
'Вы уверены, что хотите установить плагин "{{name}}" ({{version}})?',
|
||||
@@ -608,6 +704,10 @@ const ruRU = {
|
||||
installFailed: 'Ошибка установки, попробуйте позже',
|
||||
loadFailed: 'Не удалось получить список плагинов, попробуйте позже',
|
||||
noDescription: 'Описание отсутствует',
|
||||
recommendation: {
|
||||
pause: 'Приостановить авто-прокрутку',
|
||||
resume: 'Возобновить авто-прокрутку',
|
||||
},
|
||||
notFound: 'Информация о плагине не найдена',
|
||||
sortBy: 'Сортировать по',
|
||||
sort: {
|
||||
@@ -634,13 +734,36 @@ const ruRU = {
|
||||
markAsRead: 'Отметить как прочитанное',
|
||||
markAsReadSuccess: 'Отмечено как прочитанное',
|
||||
markAsReadFailed: 'Не удалось отметить как прочитанное',
|
||||
filterByComponent: 'Компонент',
|
||||
filterByComponent: 'Компонент плагина',
|
||||
filterByComponentHint:
|
||||
'Типы возможностей, которые предоставляет плагин — инструмент (Tool), команда (Command), обработчик событий (EventListener) и т. д., — расширяющие функции LangBot. Фильтруйте по компоненту, чтобы видеть только плагины с нужной возможностью.',
|
||||
allComponents: 'Все компоненты',
|
||||
componentName: {
|
||||
Tool: 'Инструмент',
|
||||
EventListener: 'Обработчик событий',
|
||||
Command: 'Команда',
|
||||
KnowledgeEngine: 'Движок знаний',
|
||||
Parser: 'Парсер',
|
||||
Page: 'Страница',
|
||||
},
|
||||
filterByType: 'Тип',
|
||||
allTypes: 'Все типы',
|
||||
typePlugin: 'Плагин',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: 'Навык',
|
||||
requestPlugin: 'Запросить плагин',
|
||||
viewDetails: 'Подробнее',
|
||||
deprecated: 'Устаревший',
|
||||
deprecatedTooltip:
|
||||
'Пожалуйста, установите соответствующий плагин движка знаний.',
|
||||
filters: {
|
||||
allFormats: 'Все типы',
|
||||
more: 'Ещё',
|
||||
advancedTitle: 'Расширенные фильтры',
|
||||
advancedDescription: 'Фильтр по типу расширения',
|
||||
technicalType: 'Технический тип',
|
||||
},
|
||||
allExtensions: 'Все расширения',
|
||||
tags: {
|
||||
filterByTags: 'Фильтр по тегам',
|
||||
selected: 'выбрано',
|
||||
@@ -648,10 +771,12 @@ const ruRU = {
|
||||
clearAll: 'Очистить всё',
|
||||
noTags: 'Нет доступных тегов',
|
||||
},
|
||||
installCard: 'Установить {{name}}',
|
||||
},
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: 'Добавить MCP-сервер',
|
||||
addMCPServer: 'Добавить MCP-сервер',
|
||||
editServer: 'Редактировать MCP-сервер',
|
||||
deleteServer: 'Удалить MCP-сервер',
|
||||
confirmDeleteServer: 'Вы уверены, что хотите удалить этот MCP-сервер?',
|
||||
@@ -663,6 +788,15 @@ const ruRU = {
|
||||
stdio: 'Режим Stdio',
|
||||
sse: 'Режим SSE',
|
||||
http: 'Режим HTTP',
|
||||
local: 'Локально (Stdio)',
|
||||
remote: 'Удалённо',
|
||||
localModeDescription:
|
||||
'Запуск MCP-сервера локально как подпроцесса внутри песочницы Box.',
|
||||
remoteModeDescription:
|
||||
'Подключение к удалённому MCP-серверу по URL. Транспорт (Streamable HTTP или SSE) определяется автоматически.',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'Вставьте URL MCP-сервера. Поддерживаются как Streamable HTTP, так и устаревшие SSE-эндпоинты.',
|
||||
noServerInstalled: 'MCP-серверы не настроены',
|
||||
serverNameRequired: 'Имя сервера не может быть пустым',
|
||||
commandRequired: 'Команда не может быть пустой',
|
||||
@@ -689,9 +823,29 @@ const ruRU = {
|
||||
connectionSuccess: 'Подключение успешно',
|
||||
connectionFailed: 'Не удалось подключиться, проверьте URL',
|
||||
connectionFailedStatus: 'Ошибка подключения',
|
||||
boxDisabledStdioRefused:
|
||||
'MCP-серверы в режиме stdio требуют песочницу Box, которая отключена в конфигурации (box.enabled = false).',
|
||||
boxUnavailableStdioRefused:
|
||||
'MCP-серверы в режиме stdio требуют песочницу Box, которая сейчас недоступна.',
|
||||
boxStdioRefusedSuggestion:
|
||||
'Включите Box (box.enabled = true) и убедитесь, что среда работает, либо переключите этот сервер в режим http/sse.',
|
||||
boxRequired: 'требуется Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'Сохранить MCP в режиме stdio нельзя: песочница Box отключена или недоступна. Включите Box либо выберите режим http/sse.',
|
||||
toolsFound: 'инструментов',
|
||||
unknownError: 'Неизвестная ошибка',
|
||||
noToolsFound: 'Инструменты не найдены',
|
||||
noResourcesFound: 'Ресурсы не найдены',
|
||||
tabTools: 'Инструменты',
|
||||
tabResources: 'Ресурсы',
|
||||
tabDocs: 'Документация',
|
||||
tabLogs: 'Журнал',
|
||||
logsLevelAll: 'Все уровни',
|
||||
logsRefresh: 'Обновить',
|
||||
logsAutoRefresh: 'Автообновление',
|
||||
logsEmpty:
|
||||
'Журналов пока нет. Здесь будут отображаться журналы выполнения MCP-сервера.',
|
||||
noReadme: 'Документация отсутствует',
|
||||
parseResultFailed: 'Не удалось разобрать результат теста',
|
||||
noResultReturned: 'Тест не вернул результат',
|
||||
getTaskFailed: 'Не удалось получить статус задачи',
|
||||
@@ -707,6 +861,14 @@ const ruRU = {
|
||||
loadFailed: 'Ошибка загрузки',
|
||||
modifyFailed: 'Ошибка изменения: ',
|
||||
toolCount: 'Инструменты: {{count}}',
|
||||
parameterCount: 'Параметры: {{count}}',
|
||||
noParameters: 'Нет параметров',
|
||||
resourceCount: 'Ресурсы: {{count}}',
|
||||
resourceBinaryContent: 'Двоичное содержимое (невозможно отобразить)',
|
||||
resourceBinaryOmitted:
|
||||
'Двоичное содержимое опущено согласно политике безопасности ресурсов',
|
||||
resourceTruncated: 'Содержимое усечено по лимитам байтов или токенов',
|
||||
resourceReadFailed: 'Не удалось прочитать содержимое ресурса',
|
||||
statusConnected: 'Подключён',
|
||||
statusDisconnected: 'Отключён',
|
||||
statusError: 'Ошибка подключения',
|
||||
@@ -797,9 +959,12 @@ const ruRU = {
|
||||
selectPlugins: 'Выберите плагины',
|
||||
pluginsTitle: 'Плагины',
|
||||
mcpServersTitle: 'MCP-серверы',
|
||||
mcpResourcesTitle: 'MCP-ресурсы',
|
||||
noMCPServersSelected: 'MCP-серверы не выбраны',
|
||||
noMCPResourcesAvailable: 'Нет доступных MCP-ресурсов',
|
||||
addMCPServer: 'Добавить MCP-сервер',
|
||||
selectMCPServers: 'Выберите MCP-серверы',
|
||||
enableMCPResourceAgentRead: 'Разрешить модели чтение',
|
||||
toolCount: '{{count}} инструментов',
|
||||
noPluginsInstalled: 'Нет установленных плагинов',
|
||||
noMCPServersConfigured: 'Нет настроенных MCP-серверов',
|
||||
@@ -808,6 +973,49 @@ const ruRU = {
|
||||
enableAllMCPServers: 'Включить все MCP-серверы',
|
||||
allPluginsEnabled: 'Все плагины включены',
|
||||
allMCPServersEnabled: 'Все MCP-серверы включены',
|
||||
enableAllSkills: 'Включить все навыки',
|
||||
allSkillsEnabled: 'Все навыки включены',
|
||||
skillsTitle: 'Навыки',
|
||||
noSkillsSelected: 'Навыки не выбраны',
|
||||
addSkill: 'Добавить навык',
|
||||
selectSkills: 'Выбрать навыки',
|
||||
noSkillsAvailable: 'Нет доступных навыков',
|
||||
mcpServersScopeTooltip:
|
||||
'Здесь задаётся только привязка MCP-серверов к конвейеру. Конкретные MCP-инструменты и ресурсы выбираются в AI Feature > Local Agent.',
|
||||
enableAllMCPServersTooltip:
|
||||
'Если включено, все настроенные и включённые MCP-серверы станут кандидатами для инструментов и ресурсов MCP в AI Feature.',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: 'Инструменты',
|
||||
toolsDescription:
|
||||
'Выберите инструменты плагинов, MCP и встроенные инструменты для этого Local Agent.',
|
||||
toolsScopeTooltip:
|
||||
'MCP-инструменты берутся только из MCP-серверов, привязанных в Расширениях. Чтобы добавить источник, сначала привяжите там сервер.',
|
||||
enableAllTools: 'Включить все инструменты',
|
||||
allToolsEnabled: 'Все доступные инструменты включены',
|
||||
noToolsSelected: 'Инструменты не выбраны',
|
||||
editTools: 'Редактировать инструменты',
|
||||
builtinTools: 'Встроенные инструменты',
|
||||
pluginTools: 'Инструменты плагинов',
|
||||
skillTools: 'Инструменты навыков',
|
||||
mcpTools: 'Инструменты MCP',
|
||||
mcpToolsScopeTooltip:
|
||||
'Здесь показаны только инструменты MCP-серверов, разрешённых сейчас в Расширениях.',
|
||||
skillToolsScopeTooltip:
|
||||
'Инструменты навыков доступны, когда сервис навыков LangBot и backend песочницы Box готовы. Они позволяют агенту активировать или регистрировать навыки.',
|
||||
selectTools: 'Выбрать инструменты',
|
||||
resourcesTitle: 'Ресурсы',
|
||||
resourcesDescription:
|
||||
'Выберите MCP-ресурсы и базы знаний для этого Local Agent.',
|
||||
knowledgeBases: 'Базы знаний',
|
||||
mcpResources: 'MCP-ресурсы',
|
||||
mcpResourcesScopeTooltip:
|
||||
'Здесь показаны только ресурсы MCP-серверов, разрешённых сейчас в Расширениях.',
|
||||
enableMCPResourceRead: 'Разрешить модели читать MCP-ресурсы',
|
||||
mcpResourceReadTooltip:
|
||||
'Если выключено, выбранные MCP-ресурсы не будут добавляться в контекст модели.',
|
||||
noMCPResourcesAvailable: 'Нет доступных MCP-ресурсов',
|
||||
selectKnowledgeBases: 'Выбрать базы знаний',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Чат конвейера',
|
||||
@@ -1045,6 +1253,7 @@ const ruRU = {
|
||||
},
|
||||
account: {
|
||||
settings: 'Настройки аккаунта',
|
||||
settingsDescription: 'Управление паролем и связанными аккаунтами',
|
||||
setPassword: 'Установить пароль',
|
||||
passwordSetSuccess: 'Пароль успешно установлен',
|
||||
passwordStatus: 'Локальный пароль',
|
||||
@@ -1111,6 +1320,7 @@ const ruRU = {
|
||||
llmCalls: 'Вызовы LLM',
|
||||
embeddingCalls: 'Вызовы Embedding',
|
||||
modelCalls: 'Вызовы моделей',
|
||||
tokens: 'Мониторинг токенов',
|
||||
feedback: 'Обратная связь',
|
||||
sessions: 'Анализ сессий',
|
||||
errors: 'Журнал ошибок',
|
||||
@@ -1135,6 +1345,20 @@ const ruRU = {
|
||||
level: 'Уровень',
|
||||
runner: 'Обработчик',
|
||||
viewConversation: 'Просмотр диалога',
|
||||
turns: '{{count}} диалоговых ходов',
|
||||
userMessage: 'Пользователь',
|
||||
noUserMessage: 'Ввод пользователя не записан',
|
||||
assistantMessage: 'Ассистент',
|
||||
assistantMessageCount: 'Ассистент +{{count}}',
|
||||
noAssistantMessage: 'Ответ ассистента не записан',
|
||||
messageCount: 'Сообщения',
|
||||
conversationTrace: 'Ход диалога',
|
||||
noLlmCalls: 'Вызовы модели не записаны',
|
||||
roles: {
|
||||
user: 'Пользователь',
|
||||
assistant: 'Ассистент',
|
||||
message: 'Сообщение',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'Вызовы LLM',
|
||||
@@ -1149,6 +1373,39 @@ const ruRU = {
|
||||
avgDuration: 'Средняя длительность',
|
||||
calls: 'Вызовы',
|
||||
},
|
||||
toolCalls: {
|
||||
title: 'Вызовы инструментов',
|
||||
totalCalls: 'Вызовы',
|
||||
duration: 'Длительность инструментов',
|
||||
errorCalls: 'Неудачные вызовы',
|
||||
arguments: 'Аргументы',
|
||||
result: 'Результат',
|
||||
noToolCalls: 'Вызовы инструментов не записаны',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: 'Всего токенов',
|
||||
inputTokens: 'Входные токены',
|
||||
outputTokens: 'Выходные токены',
|
||||
avgPerCall: 'Сред. / вызов',
|
||||
throughput: 'Пропускная способность',
|
||||
tokensPerSec: 'токенов/сек',
|
||||
errorCalls: 'Неуспешные вызовы',
|
||||
acrossCalls: 'за {{count}} вызов(ов)',
|
||||
ofTotal: 'из {{count}} всего',
|
||||
usageOverTime: 'Использование токенов со временем',
|
||||
byModel: 'По модели',
|
||||
model: 'Модель',
|
||||
calls: 'Вызовы',
|
||||
avgLatency: 'Сред. задержка',
|
||||
noData: 'Нет использования токенов в выбранном диапазоне времени',
|
||||
loadError: 'Не удалось загрузить статистику токенов: {{error}}',
|
||||
zeroTokenWarning:
|
||||
'{{count}} успешный(ых) вызов(ов) сообщили о нулевом использовании токенов. Обычно это означает, что вышестоящий провайдер не вернул информацию об использовании — проверьте настройки провайдера модели.',
|
||||
bucket: {
|
||||
hour: 'По часам',
|
||||
day: 'По дням',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Вызовы Embedding',
|
||||
model: 'Модель',
|
||||
@@ -1210,6 +1467,22 @@ const ruRU = {
|
||||
inaccurateReasons: 'Причины неточности',
|
||||
platform: 'Платформа',
|
||||
exportFeedback: 'Экспорт отзывов',
|
||||
description:
|
||||
'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
|
||||
placeholder: 'Describe your suggestion, issue, or reproduction steps...',
|
||||
attachImage: 'Add image',
|
||||
screenshot: 'Screenshot',
|
||||
submit: 'Submit feedback',
|
||||
privacyHint:
|
||||
'Do not include secrets, passwords, or private chat content.',
|
||||
contentRequired: 'Please enter feedback first',
|
||||
imageOnly: 'Only image attachments are supported',
|
||||
imageTooLarge: 'Each image must be under 1MB',
|
||||
tooManyImages: 'You can attach up to 3 images',
|
||||
screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
|
||||
submitSuccess: 'Feedback submitted. Thanks!',
|
||||
submitFailed: 'Failed to submit feedback. Please try again later.',
|
||||
removeImage: 'Remove image',
|
||||
},
|
||||
queries: {
|
||||
title: 'Запросы',
|
||||
@@ -1239,6 +1512,34 @@ const ruRU = {
|
||||
sessions: 'Сессии',
|
||||
feedback: 'Отзывы пользователей',
|
||||
},
|
||||
systemStatus: 'Состояние системы',
|
||||
pluginRuntime: 'Среда плагинов',
|
||||
boxRuntime: 'Среда Box',
|
||||
connected: 'Подключено',
|
||||
disconnected: 'Отключено',
|
||||
disabled: 'Отключено',
|
||||
statusDetail: 'Статус',
|
||||
pluginDisabled: 'Система плагинов отключена',
|
||||
boxDisabled:
|
||||
'Песочница Box отключена в конфигурации — инструменты песочницы, добавление/редактирование навыков и stdio MCP недоступны',
|
||||
boxUnavailable:
|
||||
'Песочница Box недоступна — инструменты песочницы, добавление/редактирование навыков и stdio MCP недоступны',
|
||||
boxRequiredHint:
|
||||
'Для этой функции требуется среда Box. Включите её в конфигурации (box.enabled = true) и убедитесь, что соединение работает.',
|
||||
boxBackend: 'Бэкенд',
|
||||
boxProfile: 'Профиль',
|
||||
boxSandboxes: 'Песочницы',
|
||||
boxSessionCreated: 'Создано',
|
||||
boxSessionLastUsed: 'Последнее использование',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: 'Настройки',
|
||||
nav: {
|
||||
models: 'Модели',
|
||||
api: 'API',
|
||||
storage: 'Хранилище',
|
||||
account: 'Аккаунт',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: 'Анализ хранилища',
|
||||
@@ -1348,6 +1649,21 @@ const ruRU = {
|
||||
backToWorkbench: 'Вернуться к рабочей панели',
|
||||
},
|
||||
},
|
||||
errorPage: {
|
||||
unexpectedError: 'Что-то пошло не так',
|
||||
unexpectedErrorDescription:
|
||||
'Произошла непредвиденная ошибка. Повторите попытку позже.',
|
||||
notFound: 'Страница не найдена',
|
||||
notFoundDescription:
|
||||
'Страница, которую вы ищете, не существует или была перемещена.',
|
||||
backendUnavailableStatus: 'Бэкенд недоступен',
|
||||
goBack: 'Назад',
|
||||
backToHome: 'На главную',
|
||||
backToLogin: 'Вернуться к входу',
|
||||
retrying: 'Повторяем',
|
||||
retryFailed:
|
||||
'По-прежнему не удается подключиться к бэкенду. Запустите сервис и повторите попытку.',
|
||||
},
|
||||
feishu: {
|
||||
createApp: 'Создать приложение Feishu в один клик',
|
||||
scanQRCode:
|
||||
@@ -1412,6 +1728,130 @@ const ruRU = {
|
||||
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: 'Введите URL репозитория GitHub',
|
||||
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: 'Не удалось сохранить файл: ',
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: 'Установить {{type}}',
|
||||
installConfirm: 'Установить {{type}} «{{name}}»?',
|
||||
installInfoType: 'Тип',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: 'Версия',
|
||||
installSuccess: 'Успешно установлено',
|
||||
installStage: {
|
||||
mcpInstalling: 'Добавление и подключение сервера MCP…',
|
||||
skillInstalling: 'Установка навыка…',
|
||||
installed: 'Готово',
|
||||
},
|
||||
manualAdd: 'Добавить вручную',
|
||||
uploadExtension: 'Перетащите файл сюда или нажмите для загрузки',
|
||||
uploadHint: 'Поддерживаются файлы .zip (навыки) и .lbpkg (плагины)',
|
||||
orContinueWith: 'или выберите действие ниже',
|
||||
addMCPServerHint: 'Подключить расширение сервера инструментов MCP',
|
||||
installFromGithub: 'Установить из GitHub',
|
||||
installFromGithubHint: 'Пакет плагина или навык (SKILL.md)',
|
||||
githubUrlHelp: 'Вставьте URL GitHub',
|
||||
githubUrlTooltip:
|
||||
'Плагин: вставьте URL репозитория, Release или Tag. Навык: вставьте URL страницы SKILL.md внутри каталога навыка.',
|
||||
githubUrlPlaceholder: 'Репозиторий GitHub, Release или ссылка SKILL.md',
|
||||
githubUrlRequired: 'Введите URL GitHub',
|
||||
previewSkill: 'Предпросмотр навыка',
|
||||
noSkillPreviewFound: 'Импортируемый навык не найден',
|
||||
createSkill: 'Создать новый навык',
|
||||
createSkillHint: 'Импортировать из локального каталога или создать вручную',
|
||||
unsupportedFileType:
|
||||
'Неподдерживаемый тип файла. Поддерживаются только файлы .zip и .lbpkg',
|
||||
},
|
||||
};
|
||||
|
||||
export default ruRU;
|
||||
|
||||
@@ -2,12 +2,16 @@ const thTH = {
|
||||
sidebar: {
|
||||
home: 'หน้าแรก',
|
||||
extensions: 'ส่วนขยาย',
|
||||
installedPlugins: 'ปลั๊กอินที่ติดตั้ง',
|
||||
installedPlugins: 'ที่ติดตั้งแล้ว',
|
||||
pluginMarket: 'ตลาดปลั๊กอิน',
|
||||
mcpServers: 'เซิร์ฟเวอร์ MCP',
|
||||
addExtension: 'เพิ่มส่วนขยาย',
|
||||
pluginPages: 'หน้าปลั๊กอิน',
|
||||
pluginPagesTooltip: 'หน้าเว็บที่จัดทำโดยปลั๊กอินที่ติดตั้ง',
|
||||
quickStart: 'เริ่มต้นอย่างรวดเร็ว',
|
||||
scrollToBottom: 'เลื่อนไปด้านล่าง',
|
||||
editionCommunity: 'รุ่นชุมชน',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: 'เข้าสู่ระบบ',
|
||||
@@ -33,11 +37,13 @@ const thTH = {
|
||||
helpDocs: 'ขอความช่วยเหลือ',
|
||||
featureRequest: 'ขอฟีเจอร์ใหม่',
|
||||
starOnGitHub: 'ให้ดาวบน GitHub',
|
||||
joinDiscord: 'เข้าร่วม Discord',
|
||||
create: 'สร้าง',
|
||||
edit: 'แก้ไข',
|
||||
delete: 'ลบ',
|
||||
add: 'เพิ่ม',
|
||||
select: 'เลือก',
|
||||
skill: 'สกิล',
|
||||
cancel: 'ยกเลิก',
|
||||
submit: 'ส่ง',
|
||||
error: 'ข้อผิดพลาด',
|
||||
@@ -66,6 +72,7 @@ const thTH = {
|
||||
test: 'ทดสอบ',
|
||||
forgotPassword: 'ลืมรหัสผ่าน?',
|
||||
agreementNotice: 'การดำเนินการต่อแสดงว่าคุณยอมรับ',
|
||||
termsOfService: 'ข้อกำหนดการให้บริการ',
|
||||
privacyPolicy: 'นโยบายความเป็นส่วนตัว',
|
||||
and: 'และ',
|
||||
dataCollectionPolicy: 'นโยบายการเก็บรวบรวมข้อมูล',
|
||||
@@ -113,6 +120,8 @@ const thTH = {
|
||||
changePasswordSuccess: 'เปลี่ยนรหัสผ่านสำเร็จ',
|
||||
changePasswordFailed: 'เปลี่ยนรหัสผ่านล้มเหลว กรุณาตรวจสอบรหัสผ่านปัจจุบัน',
|
||||
apiIntegration: 'การเชื่อมต่อ API',
|
||||
apiIntegrationDescription:
|
||||
'จัดการ API key และ webhook สำหรับการเข้าถึงจากภายนอก',
|
||||
apiKeys: 'คีย์ API',
|
||||
manageApiIntegration: 'จัดการการเชื่อมต่อ API',
|
||||
manageApiKeys: 'จัดการคีย์ API',
|
||||
@@ -129,6 +138,16 @@ const thTH = {
|
||||
noApiKeys: 'ยังไม่มีคีย์ API ที่กำหนดค่า',
|
||||
apiKeyHint:
|
||||
'คีย์ API ช่วยให้ระบบภายนอกสามารถเข้าถึง API บริการของ LangBot ได้',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
|
||||
mcpEndpoint: 'MCP Endpoint',
|
||||
mcpAuthTitle: 'Authentication',
|
||||
mcpAuthDesc:
|
||||
'Authenticate with any API key from the API Keys tab, sent as a header:',
|
||||
mcpGlobalKeyNote:
|
||||
'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
|
||||
mcpClientConfigTitle: 'Example MCP client config',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: 'สร้าง Webhook',
|
||||
webhookName: 'ชื่อ Webhook',
|
||||
@@ -192,6 +211,9 @@ const thTH = {
|
||||
selectModelAbilities: 'เลือกความสามารถของโมเดล',
|
||||
visionAbility: 'ความสามารถด้านภาพ',
|
||||
functionCallAbility: 'การเรียกฟังก์ชัน',
|
||||
contextLength: 'หน้าต่างบริบท',
|
||||
contextLengthPlaceholder: 'ไม่ทราบ',
|
||||
contextLengthInvalid: 'หน้าต่างบริบทต้องเป็นจำนวนเต็มบวก',
|
||||
extraParameters: 'พารามิเตอร์เพิ่มเติม',
|
||||
addParameter: 'เพิ่มพารามิเตอร์',
|
||||
keyName: 'ชื่อคีย์',
|
||||
@@ -248,6 +270,7 @@ const thTH = {
|
||||
selectProvider: 'เลือกผู้ให้บริการ',
|
||||
requester: 'ประเภทผู้ให้บริการ',
|
||||
selectRequester: 'เลือกประเภทผู้ให้บริการ',
|
||||
searchProviders: 'ค้นหาผู้ให้บริการ...',
|
||||
langbotModelsDescription: 'โมเดลคลาวด์ขับเคลื่อนโดย LangBot Space',
|
||||
credits: 'เครดิต',
|
||||
loginWithSpace: 'เข้าสู่ระบบด้วย Space',
|
||||
@@ -289,7 +312,7 @@ const thTH = {
|
||||
},
|
||||
},
|
||||
bots: {
|
||||
title: 'Bot',
|
||||
title: 'บอท',
|
||||
description:
|
||||
'สร้างและจัดการ Bot ซึ่งเป็นจุดเชื่อมต่อของ LangBot กับแพลตฟอร์มต่างๆ',
|
||||
createBot: 'สร้าง Bot',
|
||||
@@ -417,6 +440,26 @@ const thTH = {
|
||||
userMessage: 'ผู้ใช้',
|
||||
botMessage: 'ผู้ช่วย',
|
||||
},
|
||||
admins: {
|
||||
title: 'Admins',
|
||||
description:
|
||||
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
||||
addAdmin: 'Add Admin',
|
||||
launcherType: 'Type',
|
||||
launcherId: 'ID',
|
||||
typePerson: 'Person',
|
||||
typeGroup: 'Group',
|
||||
placeholderId: 'User or group ID',
|
||||
addSuccess: 'Admin added',
|
||||
addError: 'Failed to add admin: ',
|
||||
deleteSuccess: 'Admin removed',
|
||||
deleteError: 'Failed to remove admin: ',
|
||||
noAdmins: 'No admins configured',
|
||||
setAdminTitle: 'Set as admin',
|
||||
removeAdminTitle: 'Remove admin',
|
||||
adminBadge: 'Admin',
|
||||
configureAdmins: 'Manage Admins',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: 'ส่วนขยาย',
|
||||
@@ -429,6 +472,7 @@ const thTH = {
|
||||
arrange: 'เรียงลำดับปลั๊กอิน',
|
||||
install: 'ติดตั้ง',
|
||||
installPlugin: 'ติดตั้งปลั๊กอิน',
|
||||
newPlugin: 'สร้างปลั๊กอินใหม่',
|
||||
onlySupportGithub: 'ปัจจุบันรองรับเฉพาะการติดตั้งจาก GitHub',
|
||||
enterGithubLink: 'กรอกลิงก์ GitHub ของปลั๊กอิน',
|
||||
installing: 'กำลังติดตั้งปลั๊กอิน...',
|
||||
@@ -443,6 +487,9 @@ const thTH = {
|
||||
loading: 'กำลังโหลด...',
|
||||
getPluginListError: 'ไม่สามารถดึงรายการปลั๊กอินได้:',
|
||||
noPluginInstalled: 'ยังไม่มีปลั๊กอินที่ติดตั้ง',
|
||||
noExtensionInstalled: 'ยังไม่มีส่วนขยายที่ติดตั้ง',
|
||||
loadingExtensions: 'กำลังโหลดส่วนขยาย...',
|
||||
groupByType: 'จัดกลุ่มตามรูปแบบ',
|
||||
pluginConfig: 'การกำหนดค่าปลั๊กอิน',
|
||||
pluginSort: 'เรียงลำดับปลั๊กอิน',
|
||||
pluginSortDescription:
|
||||
@@ -467,6 +514,19 @@ const thTH = {
|
||||
noDebugKey: '(ไม่ได้ตั้งค่า)',
|
||||
debugKeyDisabled:
|
||||
'ไม่ได้ตั้งค่าคีย์ดีบัก การดีบักปลั๊กอินไม่ต้องยืนยันตัวตน',
|
||||
boxStatusTitle: 'Box Runtime',
|
||||
boxStatus: 'สถานะ',
|
||||
boxConnected: 'เชื่อมต่อแล้ว',
|
||||
boxUnavailable: 'ไม่พร้อมใช้งาน',
|
||||
boxBackend: 'แบ็กเอนด์',
|
||||
boxProfile: 'โปรไฟล์',
|
||||
boxSandboxes: 'แซนด์บ็อกซ์',
|
||||
boxErrors: 'ข้อผิดพลาด',
|
||||
boxSessionImage: 'อิมเมจ',
|
||||
boxSessionBackend: 'แบ็กเอนด์',
|
||||
boxSessionResources: 'ทรัพยากร',
|
||||
boxSessionNetwork: 'เครือข่าย',
|
||||
boxStatusLoadFailed: 'โหลดสถานะ Box ล้มเหลว',
|
||||
failedToGetDebugInfo: 'ไม่สามารถดึงข้อมูลดีบักได้',
|
||||
copiedToClipboard: 'คัดลอกไปยังคลิปบอร์ดแล้ว',
|
||||
deleting: 'กำลังลบ...',
|
||||
@@ -482,6 +542,8 @@ const thTH = {
|
||||
close: 'ปิด',
|
||||
deleteConfirm: 'ยืนยันการลบ',
|
||||
deleteSuccess: 'ลบสำเร็จ',
|
||||
dangerZone: 'พื้นที่อันตราย',
|
||||
dangerZoneDescription: 'การดำเนินการที่ไม่สามารถย้อนกลับได้',
|
||||
modifyFailed: 'แก้ไขล้มเหลว: ',
|
||||
componentName: {
|
||||
Tool: 'เครื่องมือ',
|
||||
@@ -494,6 +556,21 @@ const thTH = {
|
||||
uploadLocal: 'อัปโหลดจากเครื่อง',
|
||||
debugging: 'ดีบัก',
|
||||
uploadLocalPlugin: 'อัปโหลดปลั๊กอินจากเครื่อง',
|
||||
localPreview: {
|
||||
title: 'ดูตัวอย่างแพ็กเกจปลั๊กอินในเครื่อง',
|
||||
unpacking: 'กำลังแตกแพ็กเกจเพื่อดูตัวอย่าง...',
|
||||
unpackComplete: 'พร้อมดูตัวอย่างแพ็กเกจแล้ว',
|
||||
failed: 'ดูตัวอย่างแพ็กเกจไม่สำเร็จ',
|
||||
pluginInfo: 'ข้อมูลปลั๊กอิน',
|
||||
packageInfo: 'ข้อมูลแพ็กเกจ',
|
||||
name: 'ชื่อ',
|
||||
author: 'ผู้เขียน',
|
||||
version: 'เวอร์ชัน',
|
||||
fileCount: 'จำนวนไฟล์',
|
||||
dependencies: 'แพ็กเกจที่ต้องใช้',
|
||||
components: 'คอมโพเนนต์',
|
||||
ready: 'แตกแพ็กเกจปลั๊กอินแล้ว ยืนยันเพื่อเริ่มติดตั้ง',
|
||||
},
|
||||
dragToUpload: 'ลากไฟล์ปลั๊กอินมาวางที่นี่เพื่ออัปโหลด',
|
||||
unsupportedFileType: 'ประเภทไฟล์ไม่รองรับ รองรับเฉพาะไฟล์ .lbpkg และ .zip',
|
||||
uploadingPlugin: 'กำลังอัปโหลดปลั๊กอิน...',
|
||||
@@ -501,6 +578,7 @@ const thTH = {
|
||||
uploadFailed: 'อัปโหลดล้มเหลว',
|
||||
selectFileToUpload: 'เลือกไฟล์ปลั๊กอินเพื่ออัปโหลด',
|
||||
askConfirm: 'คุณแน่ใจหรือไม่ที่จะติดตั้งปลั๊กอิน "{{name}}" ({{version}})?',
|
||||
askConfirmNoVersion: 'คุณแน่ใจหรือไม่ที่จะติดตั้งปลั๊กอิน "{{name}}"?',
|
||||
fromGithub: 'จาก GitHub',
|
||||
fromLocal: 'จากเครื่อง',
|
||||
fromMarketplace: 'จากตลาดปลั๊กอิน',
|
||||
@@ -523,6 +601,12 @@ const thTH = {
|
||||
viewSource: 'ดูซอร์สโค้ด',
|
||||
loadingReadme: 'กำลังโหลดเอกสาร...',
|
||||
noReadme: 'ปลั๊กอินนี้ไม่มีเอกสาร README',
|
||||
tabDocs: 'เอกสาร',
|
||||
tabLogs: 'บันทึก',
|
||||
logsLevelAll: 'ทุกระดับ',
|
||||
logsRefresh: 'รีเฟรช',
|
||||
logsAutoRefresh: 'รีเฟรชอัตโนมัติ',
|
||||
logsEmpty: 'ยังไม่มีบันทึก บันทึกที่ปลั๊กอินพิมพ์ผ่าน logger จะแสดงที่นี่',
|
||||
fileUpload: {
|
||||
tooLarge: 'ขนาดไฟล์เกินขีดจำกัด 10MB',
|
||||
success: 'อัปโหลดไฟล์สำเร็จ',
|
||||
@@ -571,17 +655,27 @@ const thTH = {
|
||||
taskQueue: 'งานติดตั้ง',
|
||||
clearCompleted: 'ล้างที่เสร็จแล้ว',
|
||||
noTasks: 'ไม่มีงานติดตั้ง',
|
||||
titlePlugin: 'กำลังติดตั้งปลั๊กอิน {{name}}',
|
||||
titleMCP: 'กำลังติดตั้งเซิร์ฟเวอร์ MCP {{name}}',
|
||||
titleSkill: 'กำลังติดตั้งสกิล {{name}}',
|
||||
installCompletePlugin: 'ติดตั้งปลั๊กอินสำเร็จ',
|
||||
installCompleteMCP: 'ติดตั้งเซิร์ฟเวอร์ MCP สำเร็จ',
|
||||
installCompleteSkill: 'ติดตั้งสกิลสำเร็จ',
|
||||
},
|
||||
uploadPluginOnly: 'รองรับเฉพาะแพ็กเกจปลั๊กอิน .lbpkg',
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: 'ค้นหาปลั๊กอิน...',
|
||||
searchResults: 'พบ {{count}} ปลั๊กอิน',
|
||||
totalPlugins: 'ทั้งหมด {{count}} ปลั๊กอิน',
|
||||
searchPlaceholderCount:
|
||||
'ค้นหา {{count}} ส่วนขยาย ความสามารถ หรือกรณีใช้งาน...',
|
||||
searchResults: 'พบ {{count}} ส่วนขยาย',
|
||||
totalPlugins: 'ทั้งหมด {{count}} ส่วนขยาย',
|
||||
noPlugins: 'ไม่มีปลั๊กอินที่พร้อมใช้งาน',
|
||||
noResults: 'ไม่พบปลั๊กอินที่เกี่ยวข้อง',
|
||||
loadingMore: 'กำลังโหลดเพิ่มเติม...',
|
||||
loading: 'กำลังโหลด...',
|
||||
allLoaded: 'แสดงปลั๊กอินทั้งหมดแล้ว',
|
||||
allLoadedCount: 'แสดงส่วนขยายทั้งหมด {{count}} รายการแล้ว',
|
||||
install: 'ติดตั้ง',
|
||||
installConfirm:
|
||||
'คุณแน่ใจหรือไม่ว่าต้องการติดตั้งปลั๊กอิน "{{name}}" ({{version}})?',
|
||||
@@ -589,6 +683,10 @@ const thTH = {
|
||||
installFailed: 'ติดตั้งล้มเหลว กรุณาลองใหม่ภายหลัง',
|
||||
loadFailed: 'ไม่สามารถดึงรายการปลั๊กอินได้ กรุณาลองใหม่ภายหลัง',
|
||||
noDescription: 'ไม่มีคำอธิบาย',
|
||||
recommendation: {
|
||||
pause: 'หยุดการหมุนอัตโนมัติชั่วคราว',
|
||||
resume: 'เล่นการหมุนอัตโนมัติต่อ',
|
||||
},
|
||||
notFound: 'ไม่พบข้อมูลปลั๊กอิน',
|
||||
sortBy: 'เรียงตาม',
|
||||
sort: {
|
||||
@@ -615,12 +713,35 @@ const thTH = {
|
||||
markAsRead: 'ทำเครื่องหมายว่าอ่านแล้ว',
|
||||
markAsReadSuccess: 'ทำเครื่องหมายว่าอ่านแล้ว',
|
||||
markAsReadFailed: 'ทำเครื่องหมายว่าอ่านแล้วล้มเหลว',
|
||||
filterByComponent: 'ส่วนประกอบ',
|
||||
filterByComponent: 'ส่วนประกอบปลั๊กอิน',
|
||||
filterByComponentHint:
|
||||
'ประเภทความสามารถที่ปลั๊กอินมีให้ เช่น เครื่องมือ (Tool) คำสั่ง (Command) ตัวรับฟังเหตุการณ์ (EventListener) เป็นต้น ใช้เพื่อขยายความสามารถต่าง ๆ ของ LangBot กรองตามส่วนประกอบเพื่อแสดงเฉพาะปลั๊กอินที่มีความสามารถนั้น',
|
||||
allComponents: 'ส่วนประกอบทั้งหมด',
|
||||
componentName: {
|
||||
Tool: 'เครื่องมือ',
|
||||
EventListener: 'ตัวรับฟังเหตุการณ์',
|
||||
Command: 'คำสั่ง',
|
||||
KnowledgeEngine: 'เครื่องมือความรู้',
|
||||
Parser: 'ตัวแยกวิเคราะห์',
|
||||
Page: 'หน้า',
|
||||
},
|
||||
filterByType: 'ประเภท',
|
||||
allTypes: 'ทุกประเภท',
|
||||
typePlugin: 'ปลั๊กอิน',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: 'สกิล',
|
||||
requestPlugin: 'ขอปลั๊กอิน',
|
||||
viewDetails: 'ดูรายละเอียด',
|
||||
deprecated: 'เลิกใช้แล้ว',
|
||||
deprecatedTooltip: 'กรุณาติดตั้งปลั๊กอินเครื่องมือความรู้ที่เกี่ยวข้อง',
|
||||
filters: {
|
||||
allFormats: 'ทุกประเภท',
|
||||
more: 'เพิ่มเติม',
|
||||
advancedTitle: 'ตัวกรองขั้นสูง',
|
||||
advancedDescription: 'กรองตามประเภทส่วนขยาย',
|
||||
technicalType: 'ประเภทเทคนิค',
|
||||
},
|
||||
allExtensions: 'ส่วนขยายทั้งหมด',
|
||||
tags: {
|
||||
filterByTags: 'กรองตามแท็ก',
|
||||
selected: 'เลือกแล้ว',
|
||||
@@ -628,10 +749,12 @@ const thTH = {
|
||||
clearAll: 'ล้างทั้งหมด',
|
||||
noTags: 'ไม่มีแท็กที่พร้อมใช้งาน',
|
||||
},
|
||||
installCard: 'ติดตั้ง {{name}}',
|
||||
},
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: 'เพิ่มเซิร์ฟเวอร์ MCP',
|
||||
addMCPServer: 'เพิ่มเซิร์ฟเวอร์ MCP',
|
||||
editServer: 'แก้ไขเซิร์ฟเวอร์ MCP',
|
||||
deleteServer: 'ลบเซิร์ฟเวอร์ MCP',
|
||||
confirmDeleteServer: 'คุณแน่ใจหรือไม่ว่าต้องการลบเซิร์ฟเวอร์ MCP นี้?',
|
||||
@@ -643,6 +766,15 @@ const thTH = {
|
||||
stdio: 'โหมด Stdio',
|
||||
sse: 'โหมด SSE',
|
||||
http: 'โหมด HTTP',
|
||||
local: 'ภายในเครื่อง (Stdio)',
|
||||
remote: 'ระยะไกล',
|
||||
localModeDescription:
|
||||
'รันเซิร์ฟเวอร์ MCP ภายในเครื่องเป็นโปรเซสย่อยภายในแซนด์บ็อกซ์ Box',
|
||||
remoteModeDescription:
|
||||
'เชื่อมต่อกับเซิร์ฟเวอร์ MCP ระยะไกลด้วย URL ระบบจะตรวจจับการขนส่ง (Streamable HTTP หรือ SSE) โดยอัตโนมัติ',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'วาง URL ของเซิร์ฟเวอร์ MCP รองรับทั้งเอนด์พอยต์ Streamable HTTP และ SSE แบบเดิม',
|
||||
noServerInstalled: 'ยังไม่มีเซิร์ฟเวอร์ MCP ที่กำหนดค่า',
|
||||
serverNameRequired: 'ชื่อเซิร์ฟเวอร์ต้องไม่ว่างเปล่า',
|
||||
commandRequired: 'คำสั่งต้องไม่ว่างเปล่า',
|
||||
@@ -669,9 +801,28 @@ const thTH = {
|
||||
connectionSuccess: 'เชื่อมต่อสำเร็จ',
|
||||
connectionFailed: 'เชื่อมต่อล้มเหลว กรุณาตรวจสอบ URL',
|
||||
connectionFailedStatus: 'เชื่อมต่อล้มเหลว',
|
||||
boxDisabledStdioRefused:
|
||||
'MCP server แบบ stdio ต้องใช้ Sandbox Box ซึ่งถูกปิดใช้งานในการตั้งค่า (box.enabled = false)',
|
||||
boxUnavailableStdioRefused:
|
||||
'MCP server แบบ stdio ต้องใช้ Sandbox Box ซึ่งขณะนี้เชื่อมต่อไม่ได้',
|
||||
boxStdioRefusedSuggestion:
|
||||
'กรุณาเปิดใช้งาน Box (box.enabled = true) และตรวจสอบว่ารันไทม์ทำงานปกติ หรือเปลี่ยน MCP server เป็นโหมด http/sse',
|
||||
boxRequired: 'ต้องใช้ Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'ไม่สามารถบันทึก MCP โหมด stdio เนื่องจาก Sandbox Box ถูกปิดใช้งานหรือไม่พร้อมใช้งาน กรุณาเปิดใช้งาน Box หรือเลือกโหมด http/sse',
|
||||
toolsFound: 'เครื่องมือ',
|
||||
unknownError: 'ข้อผิดพลาดที่ไม่ทราบสาเหตุ',
|
||||
noToolsFound: 'ไม่พบเครื่องมือ',
|
||||
noResourcesFound: 'ไม่พบทรัพยากร',
|
||||
tabTools: 'เครื่องมือ',
|
||||
tabResources: 'ทรัพยากร',
|
||||
tabDocs: 'เอกสาร',
|
||||
tabLogs: 'บันทึก',
|
||||
logsLevelAll: 'ทุกระดับ',
|
||||
logsRefresh: 'รีเฟรช',
|
||||
logsAutoRefresh: 'รีเฟรชอัตโนมัติ',
|
||||
logsEmpty: 'ยังไม่มีบันทึก บันทึกการทำงานของ MCP Server จะแสดงที่นี่',
|
||||
noReadme: 'ไม่มีเอกสาร',
|
||||
parseResultFailed: 'ไม่สามารถแยกวิเคราะห์ผลการทดสอบได้',
|
||||
noResultReturned: 'การทดสอบไม่ส่งผลลัพธ์กลับมา',
|
||||
getTaskFailed: 'ไม่สามารถดึงสถานะงานได้',
|
||||
@@ -687,6 +838,13 @@ const thTH = {
|
||||
loadFailed: 'โหลดล้มเหลว',
|
||||
modifyFailed: 'แก้ไขล้มเหลว: ',
|
||||
toolCount: 'เครื่องมือ: {{count}}',
|
||||
parameterCount: 'พารามิเตอร์: {{count}}',
|
||||
noParameters: 'ไม่มีพารามิเตอร์',
|
||||
resourceCount: 'ทรัพยากร: {{count}}',
|
||||
resourceBinaryContent: 'เนื้อหาไบนารี (ไม่สามารถแสดงได้)',
|
||||
resourceBinaryOmitted: 'ละเว้นเนื้อหาไบนารีตามนโยบายความปลอดภัยของทรัพยากร',
|
||||
resourceTruncated: 'ตัดเนื้อหาตามขีดจำกัดไบต์หรือโทเคน',
|
||||
resourceReadFailed: 'ไม่สามารถอ่านเนื้อหาทรัพยากรได้',
|
||||
statusConnected: 'เชื่อมต่อแล้ว',
|
||||
statusDisconnected: 'ไม่ได้เชื่อมต่อ',
|
||||
statusError: 'ข้อผิดพลาดการเชื่อมต่อ',
|
||||
@@ -717,7 +875,7 @@ const thTH = {
|
||||
'เมื่อลบแล้ว การกำหนดค่าเซิร์ฟเวอร์ MCP นี้จะไม่สามารถกู้คืนได้',
|
||||
},
|
||||
pipelines: {
|
||||
title: 'Pipeline',
|
||||
title: 'ไปป์ไลน์',
|
||||
description:
|
||||
'Pipeline กำหนดกระบวนการประมวลผลเหตุการณ์ข้อความ ใช้เพื่อผูกกับ Bot',
|
||||
createPipeline: 'สร้าง Pipeline',
|
||||
@@ -776,9 +934,12 @@ const thTH = {
|
||||
selectPlugins: 'เลือกปลั๊กอิน',
|
||||
pluginsTitle: 'ปลั๊กอิน',
|
||||
mcpServersTitle: 'เซิร์ฟเวอร์ MCP',
|
||||
mcpResourcesTitle: 'ทรัพยากร MCP',
|
||||
noMCPServersSelected: 'ไม่ได้เลือกเซิร์ฟเวอร์ MCP',
|
||||
noMCPResourcesAvailable: 'ไม่มีทรัพยากร MCP ที่พร้อมใช้งาน',
|
||||
addMCPServer: 'เพิ่มเซิร์ฟเวอร์ MCP',
|
||||
selectMCPServers: 'เลือกเซิร์ฟเวอร์ MCP',
|
||||
enableMCPResourceAgentRead: 'อนุญาตให้โมเดลอ่าน',
|
||||
toolCount: '{{count}} เครื่องมือ',
|
||||
noPluginsInstalled: 'ไม่มีปลั๊กอินที่ติดตั้ง',
|
||||
noMCPServersConfigured: 'ไม่มีเซิร์ฟเวอร์ MCP ที่กำหนดค่า',
|
||||
@@ -787,6 +948,49 @@ const thTH = {
|
||||
enableAllMCPServers: 'เปิดใช้งานเซิร์ฟเวอร์ MCP ทั้งหมด',
|
||||
allPluginsEnabled: 'เปิดใช้งานปลั๊กอินทั้งหมดแล้ว',
|
||||
allMCPServersEnabled: 'เปิดใช้งานเซิร์ฟเวอร์ MCP ทั้งหมดแล้ว',
|
||||
enableAllSkills: 'เปิดใช้สกิลทั้งหมด',
|
||||
allSkillsEnabled: 'เปิดใช้สกิลทั้งหมดแล้ว',
|
||||
skillsTitle: 'สกิล',
|
||||
noSkillsSelected: 'ยังไม่ได้เลือกสกิล',
|
||||
addSkill: 'เพิ่มสกิล',
|
||||
selectSkills: 'เลือกสกิล',
|
||||
noSkillsAvailable: 'ไม่มีสกิลที่พร้อมใช้งาน',
|
||||
mcpServersScopeTooltip:
|
||||
'ส่วนนี้ใช้ควบคุมว่า Pipeline ผูกกับเซิร์ฟเวอร์ MCP ใดเท่านั้น ส่วนเครื่องมือและทรัพยากร MCP รายตัวให้เลือกใน AI Feature > Local Agent',
|
||||
enableAllMCPServersTooltip:
|
||||
'เมื่อเปิดใช้ เซิร์ฟเวอร์ MCP ที่ตั้งค่าและเปิดใช้งานทั้งหมดจะเป็นตัวเลือกสำหรับเครื่องมือและทรัพยากร MCP ใน AI Feature',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: 'เครื่องมือ',
|
||||
toolsDescription:
|
||||
'เลือกเครื่องมือจากปลั๊กอิน MCP และเครื่องมือในตัวสำหรับ Local Agent นี้',
|
||||
toolsScopeTooltip:
|
||||
'เครื่องมือ MCP จะแสดงจากเซิร์ฟเวอร์ MCP ที่ผูกไว้ในส่วนขยายเท่านั้น หากต้องการเพิ่มแหล่งเครื่องมือ ให้ไปผูกเซิร์ฟเวอร์ที่นั่นก่อน',
|
||||
enableAllTools: 'เปิดใช้เครื่องมือทั้งหมด',
|
||||
allToolsEnabled: 'เปิดใช้เครื่องมือที่มีทั้งหมดแล้ว',
|
||||
noToolsSelected: 'ยังไม่ได้เลือกเครื่องมือ',
|
||||
editTools: 'แก้ไขเครื่องมือ',
|
||||
builtinTools: 'เครื่องมือในตัว',
|
||||
pluginTools: 'เครื่องมือปลั๊กอิน',
|
||||
skillTools: 'เครื่องมือสกิล',
|
||||
mcpTools: 'เครื่องมือ MCP',
|
||||
mcpToolsScopeTooltip:
|
||||
'ที่นี่จะแสดงเฉพาะเครื่องมือจากเซิร์ฟเวอร์ MCP ที่อนุญาตอยู่ในส่วนขยาย',
|
||||
skillToolsScopeTooltip:
|
||||
'เครื่องมือสกิลจะแสดงเมื่อบริการสกิลของ LangBot และแบ็กเอนด์แซนด์บ็อกซ์ Box พร้อมใช้งาน เพื่อให้ Agent เปิดใช้หรือลงทะเบียนสกิลได้',
|
||||
selectTools: 'เลือกเครื่องมือ',
|
||||
resourcesTitle: 'ทรัพยากร',
|
||||
resourcesDescription:
|
||||
'เลือกทรัพยากร MCP และคลังความรู้สำหรับ Local Agent นี้',
|
||||
knowledgeBases: 'คลังความรู้',
|
||||
mcpResources: 'ทรัพยากร MCP',
|
||||
mcpResourcesScopeTooltip:
|
||||
'ที่นี่จะแสดงเฉพาะทรัพยากรจากเซิร์ฟเวอร์ MCP ที่อนุญาตอยู่ในส่วนขยาย',
|
||||
enableMCPResourceRead: 'อนุญาตให้โมเดลอ่านทรัพยากร MCP',
|
||||
mcpResourceReadTooltip:
|
||||
'เมื่อปิด ทรัพยากร MCP ที่เลือกไว้จะไม่ถูกใส่เข้าไปในบริบทของโมเดล',
|
||||
noMCPResourcesAvailable: 'ไม่มีทรัพยากร MCP ที่พร้อมใช้งาน',
|
||||
selectKnowledgeBases: 'เลือกคลังความรู้',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'แชท Pipeline',
|
||||
@@ -1021,6 +1225,7 @@ const thTH = {
|
||||
},
|
||||
account: {
|
||||
settings: 'การตั้งค่าบัญชี',
|
||||
settingsDescription: 'จัดการรหัสผ่านและบัญชีที่เชื่อมโยงของคุณ',
|
||||
setPassword: 'ตั้งรหัสผ่าน',
|
||||
passwordSetSuccess: 'ตั้งรหัสผ่านสำเร็จ',
|
||||
passwordStatus: 'รหัสผ่านท้องถิ่น',
|
||||
@@ -1082,6 +1287,7 @@ const thTH = {
|
||||
llmCalls: 'การเรียก LLM',
|
||||
embeddingCalls: 'การเรียก Embedding',
|
||||
modelCalls: 'การเรียกโมเดล',
|
||||
tokens: 'การติดตาม Token',
|
||||
sessions: 'การวิเคราะห์เซสชัน',
|
||||
feedback: 'ความคิดเห็นผู้ใช้',
|
||||
errors: 'บันทึกข้อผิดพลาด',
|
||||
@@ -1106,6 +1312,20 @@ const thTH = {
|
||||
level: 'ระดับ',
|
||||
runner: 'ตัวประมวลผล',
|
||||
viewConversation: 'ดูการสนทนา',
|
||||
turns: '{{count}} รอบการสนทนา',
|
||||
userMessage: 'ผู้ใช้',
|
||||
noUserMessage: 'ยังไม่มีการบันทึกข้อความจากผู้ใช้',
|
||||
assistantMessage: 'ผู้ช่วย',
|
||||
assistantMessageCount: 'ผู้ช่วย +{{count}}',
|
||||
noAssistantMessage: 'ยังไม่มีการบันทึกคำตอบจากผู้ช่วย',
|
||||
messageCount: 'จำนวนข้อความ',
|
||||
conversationTrace: 'ลำดับการสนทนา',
|
||||
noLlmCalls: 'ยังไม่มีการบันทึกการเรียกโมเดล',
|
||||
roles: {
|
||||
user: 'ผู้ใช้',
|
||||
assistant: 'ผู้ช่วย',
|
||||
message: 'ข้อความ',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'การเรียก LLM',
|
||||
@@ -1120,6 +1340,39 @@ const thTH = {
|
||||
avgDuration: 'ระยะเวลาเฉลี่ย',
|
||||
calls: 'การเรียก',
|
||||
},
|
||||
toolCalls: {
|
||||
title: 'การเรียกใช้เครื่องมือ',
|
||||
totalCalls: 'การเรียก',
|
||||
duration: 'ระยะเวลาเครื่องมือ',
|
||||
errorCalls: 'การเรียกที่ล้มเหลว',
|
||||
arguments: 'อาร์กิวเมนต์',
|
||||
result: 'ผลลัพธ์',
|
||||
noToolCalls: 'ยังไม่มีการบันทึกการเรียกใช้เครื่องมือ',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: 'Token ทั้งหมด',
|
||||
inputTokens: 'Token อินพุต',
|
||||
outputTokens: 'Token เอาต์พุต',
|
||||
avgPerCall: 'เฉลี่ย / การเรียก',
|
||||
throughput: 'ปริมาณงาน',
|
||||
tokensPerSec: 'tokens/วินาที',
|
||||
errorCalls: 'การเรียกที่ล้มเหลว',
|
||||
acrossCalls: 'จาก {{count}} การเรียก',
|
||||
ofTotal: 'จากทั้งหมด {{count}}',
|
||||
usageOverTime: 'การใช้ Token ตามช่วงเวลา',
|
||||
byModel: 'ตามโมเดล',
|
||||
model: 'โมเดล',
|
||||
calls: 'การเรียก',
|
||||
avgLatency: 'เวลาแฝงเฉลี่ย',
|
||||
noData: 'ไม่มีการใช้ Token ในช่วงเวลาที่เลือก',
|
||||
loadError: 'โหลดสถิติ Token ล้มเหลว: {{error}}',
|
||||
zeroTokenWarning:
|
||||
'มีการเรียกที่สำเร็จ {{count}} ครั้งรายงานการใช้ Token เป็นศูนย์ โดยปกติหมายความว่าผู้ให้บริการต้นทางไม่ได้ส่งข้อมูลการใช้งานกลับมา โปรดตรวจสอบการตั้งค่าผู้ให้บริการโมเดล',
|
||||
bucket: {
|
||||
hour: 'รายชั่วโมง',
|
||||
day: 'รายวัน',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'การเรียก Embedding',
|
||||
model: 'โมเดล',
|
||||
@@ -1181,6 +1434,22 @@ const thTH = {
|
||||
inaccurateReasons: 'เหตุผลที่ไม่ถูกต้อง',
|
||||
platform: 'แพลตฟอร์ม',
|
||||
exportFeedback: 'ส่งออกความคิดเห็น',
|
||||
description:
|
||||
'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
|
||||
placeholder: 'Describe your suggestion, issue, or reproduction steps...',
|
||||
attachImage: 'Add image',
|
||||
screenshot: 'Screenshot',
|
||||
submit: 'Submit feedback',
|
||||
privacyHint:
|
||||
'Do not include secrets, passwords, or private chat content.',
|
||||
contentRequired: 'Please enter feedback first',
|
||||
imageOnly: 'Only image attachments are supported',
|
||||
imageTooLarge: 'Each image must be under 1MB',
|
||||
tooManyImages: 'You can attach up to 3 images',
|
||||
screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
|
||||
submitSuccess: 'Feedback submitted. Thanks!',
|
||||
submitFailed: 'Failed to submit feedback. Please try again later.',
|
||||
removeImage: 'Remove image',
|
||||
},
|
||||
queries: {
|
||||
title: 'คำค้นหา',
|
||||
@@ -1210,6 +1479,34 @@ const thTH = {
|
||||
sessions: 'เซสชัน',
|
||||
feedback: 'ความคิดเห็นผู้ใช้',
|
||||
},
|
||||
systemStatus: 'สถานะระบบ',
|
||||
pluginRuntime: 'Plugin Runtime',
|
||||
boxRuntime: 'Box Runtime',
|
||||
connected: 'เชื่อมต่อแล้ว',
|
||||
disconnected: 'ไม่ได้เชื่อมต่อ',
|
||||
disabled: 'ปิดใช้งาน',
|
||||
statusDetail: 'สถานะ',
|
||||
pluginDisabled: 'ระบบปลั๊กอินถูกปิดใช้งาน',
|
||||
boxDisabled:
|
||||
'Sandbox Box ถูกปิดใช้งานในการตั้งค่า — เครื่องมือ sandbox, การเพิ่ม/แก้ไข skill และ stdio MCP ใช้งานไม่ได้',
|
||||
boxUnavailable:
|
||||
'Sandbox Box ไม่พร้อมใช้งาน — เครื่องมือ sandbox, การเพิ่ม/แก้ไข skill และ stdio MCP ใช้งานไม่ได้',
|
||||
boxRequiredHint:
|
||||
'ฟีเจอร์นี้ต้องใช้ Box runtime กรุณาเปิดใช้งานในการตั้งค่า (box.enabled = true) และตรวจสอบว่าการเชื่อมต่อปกติ',
|
||||
boxBackend: 'แบ็กเอนด์',
|
||||
boxProfile: 'โปรไฟล์',
|
||||
boxSandboxes: 'แซนด์บ็อกซ์',
|
||||
boxSessionCreated: 'สร้างเมื่อ',
|
||||
boxSessionLastUsed: 'ใช้ล่าสุด',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: 'การตั้งค่า',
|
||||
nav: {
|
||||
models: 'โมเดล',
|
||||
api: 'API',
|
||||
storage: 'พื้นที่จัดเก็บ',
|
||||
account: 'บัญชี',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: 'วิเคราะห์พื้นที่จัดเก็บ',
|
||||
@@ -1317,6 +1614,20 @@ const thTH = {
|
||||
backToWorkbench: 'กลับไปหน้าทำงาน',
|
||||
},
|
||||
},
|
||||
errorPage: {
|
||||
unexpectedError: 'เกิดข้อผิดพลาด',
|
||||
unexpectedErrorDescription:
|
||||
'เกิดข้อผิดพลาดที่ไม่คาดคิด กรุณาลองใหม่อีกครั้งในภายหลัง',
|
||||
notFound: 'ไม่พบหน้า',
|
||||
notFoundDescription: 'หน้าที่คุณกำลังมองหาไม่มีอยู่หรือถูกย้ายแล้ว',
|
||||
backendUnavailableStatus: 'แบ็กเอนด์ไม่พร้อมใช้งาน',
|
||||
goBack: 'ย้อนกลับ',
|
||||
backToHome: 'กลับหน้าหลัก',
|
||||
backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
|
||||
retrying: 'กำลังลองใหม่',
|
||||
retryFailed:
|
||||
'ยังไม่สามารถเชื่อมต่อแบ็กเอนด์ได้ โปรดเริ่มบริการแล้วลองใหม่อีกครั้ง',
|
||||
},
|
||||
feishu: {
|
||||
createApp: 'สร้างแอป Feishu ด้วยคลิกเดียว',
|
||||
scanQRCode:
|
||||
@@ -1377,6 +1688,127 @@ const thTH = {
|
||||
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: 'ป้อน URL รีโพสitory GitHub',
|
||||
repoUrlPlaceholder: 'เช่น https://github.com/owner/repo',
|
||||
fetchingReleases: 'กำลังดึงรีลีส...',
|
||||
selectRelease: 'เลือกรีลีส',
|
||||
noReleasesFound: 'ไม่พบรีลีส',
|
||||
fetchReleasesError: 'ดึงรีลีสไม่สำเร็จ: ',
|
||||
selectAsset: 'เลือกไฟล์ที่จะติดตั้ง',
|
||||
sourceArchive: 'ซอร์สโค้ด (zip)',
|
||||
noAssetsFound: 'ไม่มีไฟล์ที่ติดตั้งได้ในรีลีสนี้',
|
||||
fetchAssetsError: 'ดึงไฟล์ไม่สำเร็จ: ',
|
||||
backToReleases: 'กลับไปที่รีลีส',
|
||||
backToRepoUrl: 'กลับไปที่ URL รีโพสitory',
|
||||
backToAssets: 'กลับไปที่ไฟล์',
|
||||
releaseTag: 'แท็ก: {{tag}}',
|
||||
publishedAt: 'เผยแพร่เมื่อ: {{date}}',
|
||||
prerelease: 'พรีรีลีส',
|
||||
assetSize: 'ขนาด: {{size}}',
|
||||
confirmInstall: 'ยืนยันการติดตั้ง',
|
||||
installing: 'กำลังติดตั้งสกิล...',
|
||||
loading: 'กำลังโหลด...',
|
||||
previewLoadError: 'โหลดตัวอย่างไม่สำเร็จ',
|
||||
selectFromSidebar: 'เลือกสกิลจากแถบด้านข้าง',
|
||||
dangerZone: 'พื้นที่อันตราย',
|
||||
dangerZoneDescription: 'การกระทำที่ย้อนกลับไม่ได้และทำลายข้อมูล',
|
||||
files: 'ไฟล์',
|
||||
noFiles: 'ไม่พบไฟล์',
|
||||
loadFilesError: 'โหลดไฟล์ไม่สำเร็จ: ',
|
||||
readFileError: 'อ่านไฟล์ไม่สำเร็จ: ',
|
||||
saveFile: 'บันทึกไฟล์',
|
||||
saveFileSuccess: 'บันทึกไฟล์สำเร็จ',
|
||||
saveFileError: 'บันทึกไฟล์ไม่สำเร็จ: ',
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: 'ติดตั้ง {{type}}',
|
||||
installConfirm: 'ติดตั้ง {{type}} "{{name}}" หรือไม่?',
|
||||
installInfoType: 'ประเภท',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: 'เวอร์ชัน',
|
||||
installSuccess: 'ติดตั้งสำเร็จ',
|
||||
installStage: {
|
||||
mcpInstalling: 'กำลังเพิ่มและเชื่อมต่อเซิร์ฟเวอร์ MCP…',
|
||||
skillInstalling: 'กำลังติดตั้งสกิล…',
|
||||
installed: 'เสร็จสิ้น',
|
||||
},
|
||||
manualAdd: 'เพิ่มด้วยตนเอง',
|
||||
uploadExtension: 'ลากแล้ววางหรือคลิกเพื่ออัปโหลด',
|
||||
uploadHint: 'รองรับไฟล์ .zip (สกิล) และ .lbpkg (ปลั๊กอิน)',
|
||||
orContinueWith: 'หรือเลือกการทำงานด้านล่าง',
|
||||
addMCPServerHint: 'เชื่อมต่อส่วนขยายเซิร์ฟเวอร์เครื่องมือ MCP',
|
||||
installFromGithub: 'ติดตั้งจาก GitHub',
|
||||
installFromGithubHint: 'แพ็กเกจปลั๊กอินหรือสกิล (SKILL.md)',
|
||||
githubUrlHelp: 'วาง URL GitHub',
|
||||
githubUrlTooltip:
|
||||
'ปลั๊กอิน: วาง URL รีโพสitory, Release หรือ Tag สกิล: วาง URL หน้า SKILL.md ภายในไดเรกทอรีสกิล',
|
||||
githubUrlPlaceholder: 'รีโพสitory GitHub, Release หรือลิงก์ SKILL.md',
|
||||
githubUrlRequired: 'ป้อน URL GitHub',
|
||||
previewSkill: 'ดูตัวอย่างสกิล',
|
||||
noSkillPreviewFound: 'ไม่พบสกิลที่นำเข้าได้',
|
||||
createSkill: 'สร้างสกิลใหม่',
|
||||
createSkillHint: 'นำเข้าจากไดเรกทอรีในเครื่องหรือสร้างด้วยตนเอง',
|
||||
unsupportedFileType: 'ประเภทไฟล์ไม่รองรับ รองรับเฉพาะไฟล์ .zip และ .lbpkg',
|
||||
},
|
||||
};
|
||||
|
||||
export default thTH;
|
||||
|
||||
@@ -2,13 +2,17 @@ const viVN = {
|
||||
sidebar: {
|
||||
home: 'Trang chủ',
|
||||
extensions: 'Tiện ích mở rộng',
|
||||
installedPlugins: 'Plugin đã cài đặt',
|
||||
installedPlugins: 'Đã cài đặt',
|
||||
pluginMarket: 'Chợ ứng dụng',
|
||||
mcpServers: 'Máy chủ MCP',
|
||||
addExtension: 'Thêm tiện ích mở rộng',
|
||||
pluginPages: 'Trang plugin',
|
||||
pluginPagesTooltip:
|
||||
'Các trang trực quan được cung cấp bởi plugin đã cài đặt',
|
||||
quickStart: 'Bắt đầu nhanh',
|
||||
scrollToBottom: 'Cuộn xuống cuối',
|
||||
editionCommunity: 'Bản cộng đồng',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: 'Đăng nhập',
|
||||
@@ -34,11 +38,13 @@ const viVN = {
|
||||
helpDocs: 'Trợ giúp',
|
||||
featureRequest: 'Yêu cầu tính năng',
|
||||
starOnGitHub: 'Star trên GitHub',
|
||||
joinDiscord: 'Tham gia Discord',
|
||||
create: 'Tạo',
|
||||
edit: 'Chỉnh sửa',
|
||||
delete: 'Xóa',
|
||||
add: 'Thêm',
|
||||
select: 'Chọn',
|
||||
skill: 'Kỹ năng',
|
||||
cancel: 'Hủy',
|
||||
submit: 'Gửi',
|
||||
error: 'Lỗi',
|
||||
@@ -67,6 +73,7 @@ const viVN = {
|
||||
test: 'Kiểm tra',
|
||||
forgotPassword: 'Quên mật khẩu?',
|
||||
agreementNotice: 'Bằng việc tiếp tục, bạn đồng ý với',
|
||||
termsOfService: 'Điều khoản dịch vụ',
|
||||
privacyPolicy: 'Chính sách bảo mật',
|
||||
and: 'và',
|
||||
dataCollectionPolicy: 'Chính sách thu thập dữ liệu',
|
||||
@@ -116,6 +123,8 @@ const viVN = {
|
||||
changePasswordFailed:
|
||||
'Đổi mật khẩu thất bại, vui lòng kiểm tra mật khẩu hiện tại',
|
||||
apiIntegration: 'Tích hợp API',
|
||||
apiIntegrationDescription:
|
||||
'Quản lý API key và webhook cho truy cập từ bên ngoài',
|
||||
apiKeys: 'Khóa API',
|
||||
manageApiIntegration: 'Quản lý tích hợp API',
|
||||
manageApiKeys: 'Quản lý khóa API',
|
||||
@@ -132,6 +141,16 @@ const viVN = {
|
||||
noApiKeys: 'Chưa cấu hình khóa API nào',
|
||||
apiKeyHint:
|
||||
'Khóa API cho phép các hệ thống bên ngoài truy cập API dịch vụ LangBot',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
|
||||
mcpEndpoint: 'MCP Endpoint',
|
||||
mcpAuthTitle: 'Authentication',
|
||||
mcpAuthDesc:
|
||||
'Authenticate with any API key from the API Keys tab, sent as a header:',
|
||||
mcpGlobalKeyNote:
|
||||
'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
|
||||
mcpClientConfigTitle: 'Example MCP client config',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: 'Tạo Webhook',
|
||||
webhookName: 'Tên Webhook',
|
||||
@@ -196,6 +215,9 @@ const viVN = {
|
||||
selectModelAbilities: 'Chọn khả năng mô hình',
|
||||
visionAbility: 'Khả năng thị giác',
|
||||
functionCallAbility: 'Gọi hàm',
|
||||
contextLength: 'Cửa sổ ngữ cảnh',
|
||||
contextLengthPlaceholder: 'Không rõ',
|
||||
contextLengthInvalid: 'Cửa sổ ngữ cảnh phải là số nguyên dương',
|
||||
extraParameters: 'Tham số bổ sung',
|
||||
addParameter: 'Thêm tham số',
|
||||
keyName: 'Tên khóa',
|
||||
@@ -256,6 +278,7 @@ const viVN = {
|
||||
selectProvider: 'Chọn nhà cung cấp',
|
||||
requester: 'Loại nhà cung cấp',
|
||||
selectRequester: 'Chọn loại nhà cung cấp',
|
||||
searchProviders: 'Tìm kiếm nhà cung cấp...',
|
||||
langbotModelsDescription: 'Mô hình đám mây được cung cấp bởi LangBot Space',
|
||||
credits: 'Tín dụng',
|
||||
loginWithSpace: 'Đăng nhập với Space',
|
||||
@@ -427,6 +450,26 @@ const viVN = {
|
||||
userMessage: 'Người dùng',
|
||||
botMessage: 'Trợ lý',
|
||||
},
|
||||
admins: {
|
||||
title: 'Admins',
|
||||
description:
|
||||
"Launchers (person/group IDs) that have admin privilege for this bot's commands",
|
||||
addAdmin: 'Add Admin',
|
||||
launcherType: 'Type',
|
||||
launcherId: 'ID',
|
||||
typePerson: 'Person',
|
||||
typeGroup: 'Group',
|
||||
placeholderId: 'User or group ID',
|
||||
addSuccess: 'Admin added',
|
||||
addError: 'Failed to add admin: ',
|
||||
deleteSuccess: 'Admin removed',
|
||||
deleteError: 'Failed to remove admin: ',
|
||||
noAdmins: 'No admins configured',
|
||||
setAdminTitle: 'Set as admin',
|
||||
removeAdminTitle: 'Remove admin',
|
||||
adminBadge: 'Admin',
|
||||
configureAdmins: 'Manage Admins',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: 'Tiện ích mở rộng',
|
||||
@@ -439,6 +482,7 @@ const viVN = {
|
||||
arrange: 'Sắp xếp Plugin',
|
||||
install: 'Cài đặt',
|
||||
installPlugin: 'Cài đặt Plugin',
|
||||
newPlugin: 'Plugin mới',
|
||||
onlySupportGithub: 'Hiện chỉ hỗ trợ cài đặt từ GitHub',
|
||||
enterGithubLink: 'Nhập liên kết GitHub của plugin',
|
||||
installing: 'Đang cài đặt plugin...',
|
||||
@@ -453,6 +497,9 @@ const viVN = {
|
||||
loading: 'Đang tải...',
|
||||
getPluginListError: 'Lấy danh sách plugin thất bại:',
|
||||
noPluginInstalled: 'Chưa cài đặt plugin nào',
|
||||
noExtensionInstalled: 'Chưa cài đặt tiện ích mở rộng nào',
|
||||
loadingExtensions: 'Đang tải tiện ích mở rộng...',
|
||||
groupByType: 'Nhóm theo định dạng',
|
||||
pluginConfig: 'Cấu hình Plugin',
|
||||
pluginSort: 'Sắp xếp Plugin',
|
||||
pluginSortDescription:
|
||||
@@ -478,6 +525,19 @@ const viVN = {
|
||||
noDebugKey: '(Chưa đặt)',
|
||||
debugKeyDisabled:
|
||||
'Khóa gỡ lỗi chưa được đặt, gỡ lỗi plugin không yêu cầu xác thực',
|
||||
boxStatusTitle: 'Box Runtime',
|
||||
boxStatus: 'Trạng thái',
|
||||
boxConnected: 'Đã kết nối',
|
||||
boxUnavailable: 'Không khả dụng',
|
||||
boxBackend: 'Backend',
|
||||
boxProfile: 'Hồ sơ',
|
||||
boxSandboxes: 'Sandbox',
|
||||
boxErrors: 'Lỗi',
|
||||
boxSessionImage: 'Image',
|
||||
boxSessionBackend: 'Backend',
|
||||
boxSessionResources: 'Tài nguyên',
|
||||
boxSessionNetwork: 'Mạng',
|
||||
boxStatusLoadFailed: 'Tải trạng thái Box thất bại',
|
||||
failedToGetDebugInfo: 'Lấy thông tin gỡ lỗi thất bại',
|
||||
copiedToClipboard: 'Đã sao chép vào clipboard',
|
||||
deleting: 'Đang xóa...',
|
||||
@@ -493,6 +553,8 @@ const viVN = {
|
||||
close: 'Đóng',
|
||||
deleteConfirm: 'Xác nhận xóa',
|
||||
deleteSuccess: 'Xóa thành công',
|
||||
dangerZone: 'Vùng nguy hiểm',
|
||||
dangerZoneDescription: 'Các thao tác không thể hoàn tác',
|
||||
modifyFailed: 'Sửa đổi thất bại: ',
|
||||
componentName: {
|
||||
Tool: 'Công cụ',
|
||||
@@ -505,6 +567,21 @@ const viVN = {
|
||||
uploadLocal: 'Tải lên cục bộ',
|
||||
debugging: 'Gỡ lỗi',
|
||||
uploadLocalPlugin: 'Tải lên Plugin cục bộ',
|
||||
localPreview: {
|
||||
title: 'Xem trước gói plugin cục bộ',
|
||||
unpacking: 'Đang giải nén để xem trước gói...',
|
||||
unpackComplete: 'Bản xem trước gói đã sẵn sàng',
|
||||
failed: 'Không thể xem trước gói',
|
||||
pluginInfo: 'Thông tin plugin',
|
||||
packageInfo: 'Thông tin gói',
|
||||
name: 'Tên',
|
||||
author: 'Tác giả',
|
||||
version: 'Phiên bản',
|
||||
fileCount: 'Tệp',
|
||||
dependencies: 'Phụ thuộc',
|
||||
components: 'Thành phần',
|
||||
ready: 'Gói plugin đã được giải nén. Xác nhận để bắt đầu cài đặt.',
|
||||
},
|
||||
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',
|
||||
@@ -514,6 +591,8 @@ const viVN = {
|
||||
selectFileToUpload: 'Chọn tệp plugin để tải lên',
|
||||
askConfirm:
|
||||
'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" ({{version}}) không?',
|
||||
askConfirmNoVersion:
|
||||
'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" không?',
|
||||
fromGithub: 'Từ GitHub',
|
||||
fromLocal: 'Từ cục bộ',
|
||||
fromMarketplace: 'Từ chợ ứng dụng',
|
||||
@@ -536,6 +615,13 @@ const viVN = {
|
||||
viewSource: 'Xem mã nguồn',
|
||||
loadingReadme: 'Đang tải tài liệu...',
|
||||
noReadme: 'Plugin này không cung cấp tài liệu README',
|
||||
tabDocs: 'Tài liệu',
|
||||
tabLogs: 'Nhật ký',
|
||||
logsLevelAll: 'Tất cả cấp độ',
|
||||
logsRefresh: 'Làm mới',
|
||||
logsAutoRefresh: 'Tự động làm mới',
|
||||
logsEmpty:
|
||||
'Chưa có nhật ký. Nhật ký do plugin in qua logger sẽ hiển thị ở đây.',
|
||||
fileUpload: {
|
||||
tooLarge: 'Kích thước tệp vượt quá giới hạn 10MB',
|
||||
success: 'Tải tệp lên thành công',
|
||||
@@ -584,17 +670,27 @@ const viVN = {
|
||||
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: {
|
||||
searchPlaceholder: 'Tìm kiếm plugin...',
|
||||
searchResults: 'Tìm thấy {{count}} plugin',
|
||||
totalPlugins: 'Tổng cộng {{count}} plugin',
|
||||
searchPlaceholderCount:
|
||||
'Tìm kiếm {{count}} tiện ích mở rộng, khả năng hoặc tình huống...',
|
||||
searchResults: 'Tìm thấy {{count}} tiện ích mở rộng',
|
||||
totalPlugins: 'Tổng cộng {{count}} tiện ích mở rộng',
|
||||
noPlugins: 'Không có plugin nào',
|
||||
noResults: 'Không tìm thấy plugin liên quan',
|
||||
loadingMore: 'Đang tải thêm...',
|
||||
loading: 'Đang tải...',
|
||||
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',
|
||||
installConfirm:
|
||||
'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" ({{version}}) không?',
|
||||
@@ -602,6 +698,10 @@ const viVN = {
|
||||
installFailed: 'Cài đặt thất bại, vui lòng thử lại sau',
|
||||
loadFailed: 'Lấy danh sách plugin thất bại, vui lòng thử lại sau',
|
||||
noDescription: 'Không có mô tả',
|
||||
recommendation: {
|
||||
pause: 'Tạm dừng tự động xoay',
|
||||
resume: 'Tiếp tục tự động xoay',
|
||||
},
|
||||
notFound: 'Không tìm thấy thông tin plugin',
|
||||
sortBy: 'Sắp xếp theo',
|
||||
sort: {
|
||||
@@ -628,12 +728,35 @@ const viVN = {
|
||||
markAsRead: 'Đánh dấu đã đọc',
|
||||
markAsReadSuccess: 'Đã đánh dấu đã đọc',
|
||||
markAsReadFailed: 'Đánh dấu đã đọc thất bại',
|
||||
filterByComponent: 'Thành phần',
|
||||
filterByComponent: 'Thành phần plugin',
|
||||
filterByComponentHint:
|
||||
'Các loại năng lực mà plugin cung cấp — Công cụ (Tool), Lệnh (Command), Trình lắng nghe sự kiện (EventListener), v.v. — dùng để mở rộng các khả năng của LangBot. Lọc theo thành phần để chỉ xem những plugin cung cấp năng lực đó.',
|
||||
allComponents: 'Tất cả thành phần',
|
||||
componentName: {
|
||||
Tool: 'Công cụ',
|
||||
EventListener: 'Trình lắng nghe sự kiện',
|
||||
Command: 'Lệnh',
|
||||
KnowledgeEngine: 'Công cụ tri thức',
|
||||
Parser: 'Trình phân tích',
|
||||
Page: 'Trang',
|
||||
},
|
||||
filterByType: 'Loại',
|
||||
allTypes: 'Tất cả loại',
|
||||
typePlugin: 'Plugin',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: 'Kỹ năng',
|
||||
requestPlugin: 'Yêu cầu Plugin',
|
||||
viewDetails: 'Xem chi tiết',
|
||||
deprecated: 'Không còn hỗ trợ',
|
||||
deprecatedTooltip: 'Vui lòng cài đặt plugin Công cụ tri thức tương ứng.',
|
||||
filters: {
|
||||
allFormats: 'Tất cả loại',
|
||||
more: 'Thêm',
|
||||
advancedTitle: 'Bộ lọc nâng cao',
|
||||
advancedDescription: 'Lọc theo loại phần mở rộng',
|
||||
technicalType: 'Loại kỹ thuật',
|
||||
},
|
||||
allExtensions: 'Tất cả phần mở rộng',
|
||||
tags: {
|
||||
filterByTags: 'Lọc theo thẻ',
|
||||
selected: 'đã chọn',
|
||||
@@ -641,10 +764,12 @@ const viVN = {
|
||||
clearAll: 'Xóa tất cả',
|
||||
noTags: 'Không có thẻ nào',
|
||||
},
|
||||
installCard: 'Cài đặt {{name}}',
|
||||
},
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: 'Thêm máy chủ MCP',
|
||||
addMCPServer: 'Thêm máy chủ MCP',
|
||||
editServer: 'Chỉnh sửa máy chủ MCP',
|
||||
deleteServer: 'Xóa máy chủ MCP',
|
||||
confirmDeleteServer: 'Bạn có chắc chắn muốn xóa máy chủ MCP này không?',
|
||||
@@ -656,6 +781,15 @@ const viVN = {
|
||||
stdio: 'Chế độ Stdio',
|
||||
sse: 'Chế độ SSE',
|
||||
http: 'Chế độ HTTP',
|
||||
local: 'Cục bộ (Stdio)',
|
||||
remote: 'Từ xa',
|
||||
localModeDescription:
|
||||
'Chạy máy chủ MCP cục bộ dưới dạng tiến trình con bên trong sandbox Box.',
|
||||
remoteModeDescription:
|
||||
'Kết nối đến máy chủ MCP từ xa bằng URL. Phương thức truyền tải (Streamable HTTP hoặc SSE) được phát hiện tự động.',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'Dán URL của máy chủ MCP. Hỗ trợ cả endpoint Streamable HTTP và SSE cũ.',
|
||||
noServerInstalled: 'Chưa cấu hình máy chủ MCP nào',
|
||||
serverNameRequired: 'Tên máy chủ không được để trống',
|
||||
commandRequired: 'Lệnh không được để trống',
|
||||
@@ -682,9 +816,29 @@ const viVN = {
|
||||
connectionSuccess: 'Kết nối thành công',
|
||||
connectionFailed: 'Kết nối thất bại, vui lòng kiểm tra URL',
|
||||
connectionFailedStatus: 'Kết nối thất bại',
|
||||
boxDisabledStdioRefused:
|
||||
'MCP server ở chế độ stdio cần Sandbox Box, hiện đã bị tắt trong cấu hình (box.enabled = false).',
|
||||
boxUnavailableStdioRefused:
|
||||
'MCP server ở chế độ stdio cần Sandbox Box, hiện không thể kết nối.',
|
||||
boxStdioRefusedSuggestion:
|
||||
'Hãy bật Box (box.enabled = true) và đảm bảo runtime hoạt động, hoặc chuyển server này sang chế độ http/sse.',
|
||||
boxRequired: 'cần Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'Không thể lưu MCP ở chế độ stdio khi Sandbox Box bị tắt hoặc không khả dụng. Hãy bật Box hoặc chọn chế độ http/sse.',
|
||||
toolsFound: 'công cụ',
|
||||
unknownError: 'Lỗi không xác định',
|
||||
noToolsFound: 'Không tìm thấy công cụ nào',
|
||||
noResourcesFound: 'Không tìm thấy tài nguyên nào',
|
||||
tabTools: 'Công cụ',
|
||||
tabResources: 'Tài nguyên',
|
||||
tabDocs: 'Tài liệu',
|
||||
tabLogs: 'Nhật ký',
|
||||
logsLevelAll: 'Tất cả cấp độ',
|
||||
logsRefresh: 'Làm mới',
|
||||
logsAutoRefresh: 'Tự động làm mới',
|
||||
logsEmpty:
|
||||
'Chưa có nhật ký. Nhật ký chạy của MCP Server sẽ hiển thị ở đây.',
|
||||
noReadme: 'Không có tài liệu',
|
||||
parseResultFailed: 'Phân tích kết quả kiểm tra thất bại',
|
||||
noResultReturned: 'Kiểm tra không trả về kết quả',
|
||||
getTaskFailed: 'Lấy trạng thái tác vụ thất bại',
|
||||
@@ -700,6 +854,14 @@ const viVN = {
|
||||
loadFailed: 'Tải thất bại',
|
||||
modifyFailed: 'Sửa đổi thất bại: ',
|
||||
toolCount: 'Công cụ: {{count}}',
|
||||
parameterCount: 'Tham số: {{count}}',
|
||||
noParameters: 'Không có tham số',
|
||||
resourceCount: 'Tài nguyên: {{count}}',
|
||||
resourceBinaryContent: 'Nội dung nhị phân (không thể hiển thị)',
|
||||
resourceBinaryOmitted:
|
||||
'Nội dung nhị phân đã bị lược bỏ theo chính sách an toàn tài nguyên',
|
||||
resourceTruncated: 'Nội dung đã bị cắt theo giới hạn byte hoặc token',
|
||||
resourceReadFailed: 'Không thể đọc nội dung tài nguyên',
|
||||
statusConnected: 'Đã kết nối',
|
||||
statusDisconnected: 'Đã ngắt kết nối',
|
||||
statusError: 'Lỗi kết nối',
|
||||
@@ -729,7 +891,7 @@ 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: {
|
||||
title: 'Pipeline',
|
||||
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',
|
||||
createPipeline: 'Tạo Pipeline',
|
||||
@@ -789,9 +951,12 @@ const viVN = {
|
||||
selectPlugins: 'Chọn Plugin',
|
||||
pluginsTitle: 'Plugin',
|
||||
mcpServersTitle: 'Máy chủ MCP',
|
||||
mcpResourcesTitle: 'Tài nguyên MCP',
|
||||
noMCPServersSelected: 'Chưa chọn máy chủ MCP nào',
|
||||
noMCPResourcesAvailable: 'Không có tài nguyên MCP nào',
|
||||
addMCPServer: 'Thêm máy chủ MCP',
|
||||
selectMCPServers: 'Chọn máy chủ MCP',
|
||||
enableMCPResourceAgentRead: 'Cho phép mô hình đọc',
|
||||
toolCount: '{{count}} công cụ',
|
||||
noPluginsInstalled: 'Chưa cài đặt plugin nào',
|
||||
noMCPServersConfigured: 'Chưa cấu hình máy chủ MCP nào',
|
||||
@@ -800,6 +965,49 @@ const viVN = {
|
||||
enableAllMCPServers: 'Bật tất cả máy chủ MCP',
|
||||
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',
|
||||
addSkill: 'Thêm kỹ năng',
|
||||
selectSkills: 'Chọn kỹ năng',
|
||||
noSkillsAvailable: 'Không có kỹ năng khả dụng',
|
||||
mcpServersScopeTooltip:
|
||||
'Tại đây chỉ kiểm soát máy chủ MCP được liên kết với Pipeline. Công cụ và tài nguyên MCP cụ thể được chọn trong AI Feature > Local Agent.',
|
||||
enableAllMCPServersTooltip:
|
||||
'Khi bật, mọi máy chủ MCP đã cấu hình và bật sẽ trở thành ứng viên cho công cụ và tài nguyên MCP trong AI Feature.',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: 'Công cụ',
|
||||
toolsDescription:
|
||||
'Chọn công cụ plugin, MCP và công cụ tích hợp sẵn cho Local Agent này.',
|
||||
toolsScopeTooltip:
|
||||
'Công cụ MCP chỉ đến từ máy chủ MCP đã liên kết trong Tiện ích mở rộng. Hãy liên kết máy chủ tại đó trước nếu muốn chọn thêm tại đây.',
|
||||
enableAllTools: 'Bật tất cả công cụ',
|
||||
allToolsEnabled: 'Tất cả công cụ khả dụng đã được bật',
|
||||
noToolsSelected: 'Chưa chọn công cụ nào',
|
||||
editTools: 'Sửa công cụ',
|
||||
builtinTools: 'Công cụ tích hợp sẵn',
|
||||
pluginTools: 'Công cụ plugin',
|
||||
skillTools: 'Công cụ kỹ năng',
|
||||
mcpTools: 'Công cụ MCP',
|
||||
mcpToolsScopeTooltip:
|
||||
'Tại đây chỉ hiển thị công cụ từ máy chủ MCP hiện được cho phép trong Tiện ích mở rộng.',
|
||||
skillToolsScopeTooltip:
|
||||
'Công cụ kỹ năng khả dụng khi dịch vụ kỹ năng LangBot và backend sandbox Box đã sẵn sàng. Chúng cho phép Agent kích hoạt hoặc đăng ký kỹ năng.',
|
||||
selectTools: 'Chọn công cụ',
|
||||
resourcesTitle: 'Tài nguyên',
|
||||
resourcesDescription:
|
||||
'Chọn tài nguyên MCP và kho tri thức cho Local Agent này.',
|
||||
knowledgeBases: 'Kho tri thức',
|
||||
mcpResources: 'Tài nguyên MCP',
|
||||
mcpResourcesScopeTooltip:
|
||||
'Tại đây chỉ hiển thị tài nguyên từ máy chủ MCP hiện được cho phép trong Tiện ích mở rộng.',
|
||||
enableMCPResourceRead: 'Cho phép mô hình đọc tài nguyên MCP',
|
||||
mcpResourceReadTooltip:
|
||||
'Khi tắt, tài nguyên MCP đã chọn sẽ không được đưa vào ngữ cảnh mô hình.',
|
||||
noMCPResourcesAvailable: 'Không có tài nguyên MCP nào',
|
||||
selectKnowledgeBases: 'Chọn kho tri thức',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Trò chuyện Pipeline',
|
||||
@@ -1039,6 +1247,7 @@ const viVN = {
|
||||
},
|
||||
account: {
|
||||
settings: 'Cài đặt tài khoản',
|
||||
settingsDescription: 'Quản lý mật khẩu và các tài khoản liên kết của bạn',
|
||||
setPassword: 'Đặt mật khẩu',
|
||||
passwordSetSuccess: 'Đặt mật khẩu thành công',
|
||||
passwordStatus: 'Mật khẩu cục bộ',
|
||||
@@ -1104,6 +1313,7 @@ const viVN = {
|
||||
llmCalls: 'Cuộc gọi LLM',
|
||||
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',
|
||||
errors: 'Nhật ký lỗi',
|
||||
@@ -1128,6 +1338,20 @@ const viVN = {
|
||||
level: 'Mức',
|
||||
runner: 'Trình chạy',
|
||||
viewConversation: 'Xem cuộc trò chuyện',
|
||||
turns: '{{count}} lượt hội thoại',
|
||||
userMessage: 'Người dùng',
|
||||
noUserMessage: 'Chưa ghi nhận đầu vào người dùng',
|
||||
assistantMessage: 'Trợ lý',
|
||||
assistantMessageCount: 'Trợ lý +{{count}}',
|
||||
noAssistantMessage: 'Chưa ghi nhận phản hồi của trợ lý',
|
||||
messageCount: 'Số tin nhắn',
|
||||
conversationTrace: 'Luồng hội thoại',
|
||||
noLlmCalls: 'Chưa ghi nhận lệnh gọi mô hình',
|
||||
roles: {
|
||||
user: 'Người dùng',
|
||||
assistant: 'Trợ lý',
|
||||
message: 'Tin nhắn',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'Cuộc gọi LLM',
|
||||
@@ -1142,6 +1366,39 @@ const viVN = {
|
||||
avgDuration: 'Thời lượng trung bình',
|
||||
calls: 'Cuộc gọi',
|
||||
},
|
||||
toolCalls: {
|
||||
title: 'Lượt gọi công cụ',
|
||||
totalCalls: 'Lượt gọi',
|
||||
duration: 'Thời lượng công cụ',
|
||||
errorCalls: 'Lượt gọi thất bại',
|
||||
arguments: 'Tham số',
|
||||
result: 'Kết quả',
|
||||
noToolCalls: 'Chưa ghi nhận lượt gọi công cụ',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: 'Tổng số Token',
|
||||
inputTokens: 'Token đầu vào',
|
||||
outputTokens: 'Token đầu ra',
|
||||
avgPerCall: 'TB / lượt gọi',
|
||||
throughput: 'Thông lượng',
|
||||
tokensPerSec: 'token/giây',
|
||||
errorCalls: 'Lượt gọi thất bại',
|
||||
acrossCalls: 'trong {{count}} lượt gọi',
|
||||
ofTotal: 'trên tổng {{count}}',
|
||||
usageOverTime: 'Mức sử dụng Token theo thời gian',
|
||||
byModel: 'Theo mô hình',
|
||||
model: 'Mô hình',
|
||||
calls: 'Lượt gọi',
|
||||
avgLatency: 'Độ trễ trung bình',
|
||||
noData: 'Không có mức sử dụng Token trong khoảng thời gian đã chọn',
|
||||
loadError: 'Không thể tải thống kê Token: {{error}}',
|
||||
zeroTokenWarning:
|
||||
'{{count}} lượt gọi thành công báo cáo mức sử dụng Token bằng 0. Điều này thường có nghĩa là nhà cung cấp thượng nguồn không trả về thông tin sử dụng — hãy kiểm tra cấu hình nhà cung cấp mô hình.',
|
||||
bucket: {
|
||||
hour: 'Theo giờ',
|
||||
day: 'Theo ngày',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Cuộc gọi Embedding',
|
||||
model: 'Mô hình',
|
||||
@@ -1203,6 +1460,22 @@ const viVN = {
|
||||
inaccurateReasons: 'Lý do không chính xác',
|
||||
platform: 'Nền tảng',
|
||||
exportFeedback: 'Xuất phản hồi',
|
||||
description:
|
||||
'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
|
||||
placeholder: 'Describe your suggestion, issue, or reproduction steps...',
|
||||
attachImage: 'Add image',
|
||||
screenshot: 'Screenshot',
|
||||
submit: 'Submit feedback',
|
||||
privacyHint:
|
||||
'Do not include secrets, passwords, or private chat content.',
|
||||
contentRequired: 'Please enter feedback first',
|
||||
imageOnly: 'Only image attachments are supported',
|
||||
imageTooLarge: 'Each image must be under 1MB',
|
||||
tooManyImages: 'You can attach up to 3 images',
|
||||
screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
|
||||
submitSuccess: 'Feedback submitted. Thanks!',
|
||||
submitFailed: 'Failed to submit feedback. Please try again later.',
|
||||
removeImage: 'Remove image',
|
||||
},
|
||||
queries: {
|
||||
title: 'Truy vấn',
|
||||
@@ -1232,6 +1505,34 @@ const viVN = {
|
||||
sessions: 'Phiên',
|
||||
feedback: 'Phản hồi người dùng',
|
||||
},
|
||||
systemStatus: 'Trạng thái hệ thống',
|
||||
pluginRuntime: 'Plugin Runtime',
|
||||
boxRuntime: 'Box Runtime',
|
||||
connected: 'Đã kết nối',
|
||||
disconnected: 'Chưa kết nối',
|
||||
disabled: 'Đã tắt',
|
||||
statusDetail: 'Trạng thái',
|
||||
pluginDisabled: 'Hệ thống plugin đã tắt',
|
||||
boxDisabled:
|
||||
'Sandbox Box đã tắt trong cấu hình — công cụ sandbox, thêm/chỉnh sửa skill và stdio MCP đều không khả dụng',
|
||||
boxUnavailable:
|
||||
'Sandbox Box không khả dụng — công cụ sandbox, thêm/chỉnh sửa skill và stdio MCP đều không khả dụng',
|
||||
boxRequiredHint:
|
||||
'Tính năng này cần Box runtime. Hãy bật trong cấu hình (box.enabled = true) và đảm bảo runtime đang hoạt động.',
|
||||
boxBackend: 'Backend',
|
||||
boxProfile: 'Hồ sơ',
|
||||
boxSandboxes: 'Sandbox',
|
||||
boxSessionCreated: 'Đã tạo',
|
||||
boxSessionLastUsed: 'Lần cuối sử dụng',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: 'Cài đặt',
|
||||
nav: {
|
||||
models: 'Mô hình',
|
||||
api: 'API',
|
||||
storage: 'Lưu trữ',
|
||||
account: 'Tài khoản',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: 'Phân tích lưu trữ',
|
||||
@@ -1339,6 +1640,21 @@ const viVN = {
|
||||
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:
|
||||
@@ -1402,6 +1718,131 @@ const viVN = {
|
||||
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:
|
||||
'Tạo và quản lý các kỹ năng có thể được kích hoạt trong cuộc trò chuyện',
|
||||
createSkill: 'Tạo kỹ năng',
|
||||
createSkillDescription:
|
||||
'Nhập thư mục cục bộ hoặc tạo bằng cách điền thông tin',
|
||||
editSkill: 'Chỉnh sửa kỹ năng',
|
||||
getSkillListError: 'Không thể lấy danh sách kỹ năng: ',
|
||||
skillName: 'Tên kỹ năng',
|
||||
displayName: 'Tên kỹ năng',
|
||||
displayNamePlaceholder: 'Tên hiển thị (hỗ trợ mọi ngôn ngữ)',
|
||||
skillSlug: 'Tên thư mục',
|
||||
skillSlugPlaceholder: 'english-name-only',
|
||||
skillSlugHelp:
|
||||
'Dùng làm tên thư mục kỹ năng. Chỉ hỗ trợ chữ cái, số, dấu gạch nối và dấu gạch dưới.',
|
||||
skillDescription: 'Mô tả kỹ năng',
|
||||
skillInstructions: 'Hướng dẫn',
|
||||
saveSuccess: 'Đã lưu thành công',
|
||||
saveError: 'Lưu thất bại: ',
|
||||
createSuccess: 'Đã tạo thành công',
|
||||
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 muốn xóa kỹ năng này không?',
|
||||
delete: 'Xóa kỹ năng',
|
||||
skillNameRequired: 'Tên kỹ năng không được để trống',
|
||||
skillDescriptionRequired: 'Mô tả kỹ năng không được để trống',
|
||||
packageRootRequired: 'Đường dẫn gốc của gói không được để trống',
|
||||
scan: 'Quét',
|
||||
scanSuccess: 'Đã quét thư mục thành công',
|
||||
scanError: 'Quét thư mục thất bại: ',
|
||||
noSkills: 'Chưa cấu hình kỹ năng nào',
|
||||
preview: 'Xem trước',
|
||||
previewInstructions: 'Xem trước nội dung SKILL.md',
|
||||
instructionsPlaceholder:
|
||||
'Nhập hướng dẫn kỹ năng theo định dạng Markdown...',
|
||||
descriptionPlaceholder:
|
||||
'Mô tả ngắn về chức năng của kỹ năng này (hiển thị cho LLM)',
|
||||
packageRoot: 'Thư mục gói',
|
||||
packageRootHelp:
|
||||
'Tùy chọn. Chỉ cần khi nhập một thư mục kỹ năng hiện có. Để trống với kỹ năng mới. Quá trình quét kiểm tra thư mục hiện tại và thư mục con sâu tối đa 2 cấp.',
|
||||
importLocalDirectory: 'Nhập thư mục kỹ năng cục bộ',
|
||||
chooseSkillDirectory: 'Chọn thư mục chứa SKILL.md',
|
||||
chooseAnotherDirectory: 'Chọn thư mục khác',
|
||||
importingDirectory: 'Đang tạo bản xem trước...',
|
||||
clearDirectoryPreview: 'Xóa thư mục đã chọn',
|
||||
noSkillMdInDirectory: 'Không tìm thấy SKILL.md trong thư mục đã chọn',
|
||||
multipleSkillMdInDirectory:
|
||||
'Thư mục đã chọn chứa nhiều tệp SKILL.md. Vui lòng chọn trực tiếp một thư mục kỹ năng duy nhất.',
|
||||
importDirectoryError: 'Nhập thư mục thất bại: ',
|
||||
advancedSettings: 'Cài đặt nâng cao',
|
||||
searchSkills: 'Tìm kiếm kỹ năng...',
|
||||
selectSkills: 'Chọn kỹ năng',
|
||||
addSkill: 'Thêm kỹ năng',
|
||||
builtin: 'Tích hợp sẵn',
|
||||
importFromGithub: 'Cài đặt kỹ năng từ GitHub',
|
||||
createManually: 'Tạo thủ công',
|
||||
uploadZip: 'Tải lên gói ZIP',
|
||||
uploadZipOnly: 'Chỉ hỗ trợ gói kỹ năng .zip',
|
||||
installSuccess: 'Đã cài đặt kỹ năng thành công',
|
||||
installError: 'Cài đặt kỹ năng thất bại: ',
|
||||
enterRepoUrl: 'Nhập URL kho GitHub',
|
||||
repoUrlPlaceholder: 'ví dụ: https://github.com/owner/repo',
|
||||
fetchingReleases: 'Đang tải release...',
|
||||
selectRelease: 'Chọn release',
|
||||
noReleasesFound: 'Không tìm thấy release',
|
||||
fetchReleasesError: 'Không thể tải release: ',
|
||||
selectAsset: 'Chọn tệp để cài đặt',
|
||||
sourceArchive: 'Mã nguồn (zip)',
|
||||
noAssetsFound: 'Không có tệp có thể cài đặt trong release này',
|
||||
fetchAssetsError: 'Không thể tải tệp: ',
|
||||
backToReleases: 'Quay lại release',
|
||||
backToRepoUrl: 'Quay lại URL kho',
|
||||
backToAssets: 'Quay lại tệp',
|
||||
releaseTag: 'Thẻ: {{tag}}',
|
||||
publishedAt: 'Phát hành lúc: {{date}}',
|
||||
prerelease: 'Bản phát hành trước',
|
||||
assetSize: 'Kích thước: {{size}}',
|
||||
confirmInstall: 'Xác nhận cài đặt',
|
||||
installing: 'Đang cài đặt kỹ năng...',
|
||||
loading: 'Đang tải...',
|
||||
previewLoadError: 'Không thể tải bản xem trước',
|
||||
selectFromSidebar: 'Chọn một kỹ năng từ thanh bên',
|
||||
dangerZone: 'Vùng nguy hiểm',
|
||||
dangerZoneDescription: 'Các thao tác không thể hoàn tác và có tính phá hủy',
|
||||
files: 'Tệp',
|
||||
noFiles: 'Không tìm thấy tệp',
|
||||
loadFilesError: 'Không thể tải tệp: ',
|
||||
readFileError: 'Không thể đọc tệp: ',
|
||||
saveFile: 'Lưu tệp',
|
||||
saveFileSuccess: 'Đã lưu tệp thành công',
|
||||
saveFileError: 'Lưu tệp thất bại: ',
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: 'Cài đặt {{type}}',
|
||||
installConfirm: 'Cài đặt {{type}} "{{name}}"?',
|
||||
installInfoType: 'Loại',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: 'Phiên bản',
|
||||
installSuccess: 'Cài đặt thành công',
|
||||
installStage: {
|
||||
mcpInstalling: 'Đang thêm và kết nối máy chủ MCP…',
|
||||
skillInstalling: 'Đang cài đặt kỹ năng…',
|
||||
installed: 'Hoàn tất',
|
||||
},
|
||||
manualAdd: 'Thêm thủ công',
|
||||
uploadExtension: 'Kéo thả hoặc nhấp để tải lên',
|
||||
uploadHint: 'Hỗ trợ tệp .zip (kỹ năng) và .lbpkg (plugin)',
|
||||
orContinueWith: 'hoặc chọn một thao tác bên dưới',
|
||||
addMCPServerHint: 'Kết nối tiện ích máy chủ công cụ MCP',
|
||||
installFromGithub: 'Cài đặt từ GitHub',
|
||||
installFromGithubHint: 'Gói plugin hoặc kỹ năng (SKILL.md)',
|
||||
githubUrlHelp: 'Dán URL GitHub',
|
||||
githubUrlTooltip:
|
||||
'Plugin: dán URL kho, Release hoặc Tag. Kỹ năng: dán URL trang SKILL.md trong thư mục kỹ năng.',
|
||||
githubUrlPlaceholder: 'Kho GitHub, Release hoặc liên kết SKILL.md',
|
||||
githubUrlRequired: 'Nhập URL GitHub',
|
||||
previewSkill: 'Xem trước kỹ năng',
|
||||
noSkillPreviewFound: 'Không tìm thấy kỹ năng có thể nhập',
|
||||
createSkill: 'Tạo kỹ năng mới',
|
||||
createSkillHint: 'Nhập từ thư mục cục bộ hoặc tạo thủ công',
|
||||
unsupportedFileType:
|
||||
'Loại tệp không được hỗ trợ. Chỉ hỗ trợ tệp .zip và .lbpkg',
|
||||
},
|
||||
};
|
||||
|
||||
export default viVN;
|
||||
|
||||
+439
-17
@@ -2,12 +2,16 @@ const zhHans = {
|
||||
sidebar: {
|
||||
home: '首页',
|
||||
extensions: '扩展',
|
||||
installedPlugins: '已安装插件',
|
||||
pluginMarket: '插件市场',
|
||||
installedPlugins: '已安装',
|
||||
pluginMarket: '扩展市场',
|
||||
mcpServers: 'MCP 服务器',
|
||||
addExtension: '添加扩展',
|
||||
pluginPages: '插件页面',
|
||||
pluginPagesTooltip: '由已安装的插件提供的可视化页面',
|
||||
quickStart: '快速开始向导',
|
||||
scrollToBottom: '滚动到底部',
|
||||
editionCommunity: '社区版',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: '登录',
|
||||
@@ -30,13 +34,15 @@ const zhHans = {
|
||||
emptyPassword: '请输入密码',
|
||||
language: '语言',
|
||||
helpDocs: '帮助文档',
|
||||
featureRequest: '需求建议',
|
||||
featureRequest: '建议反馈',
|
||||
starOnGitHub: '在 GitHub 上 Star',
|
||||
joinDiscord: '加入 Discord 社区',
|
||||
create: '创建',
|
||||
edit: '编辑',
|
||||
delete: '删除',
|
||||
add: '添加',
|
||||
select: '请选择',
|
||||
skill: '技能',
|
||||
cancel: '取消',
|
||||
submit: '提交',
|
||||
error: '错误',
|
||||
@@ -65,6 +71,7 @@ const zhHans = {
|
||||
test: '测试',
|
||||
forgotPassword: '忘记密码?',
|
||||
agreementNotice: '继续即表示您同意我们的',
|
||||
termsOfService: '服务条款',
|
||||
privacyPolicy: '隐私政策',
|
||||
and: '和',
|
||||
dataCollectionPolicy: '数据收集政策',
|
||||
@@ -109,6 +116,7 @@ const zhHans = {
|
||||
changePasswordSuccess: '密码修改成功',
|
||||
changePasswordFailed: '密码修改失败,请检查当前密码是否正确',
|
||||
apiIntegration: 'API 集成',
|
||||
apiIntegrationDescription: '管理用于外部访问的 API 密钥和 Webhook',
|
||||
apiKeys: 'API 密钥',
|
||||
manageApiIntegration: '管理 API 集成',
|
||||
manageApiKeys: '管理 API 密钥',
|
||||
@@ -124,6 +132,15 @@ const zhHans = {
|
||||
apiKeyCopied: 'API 密钥已复制到剪贴板',
|
||||
noApiKeys: '暂无 API 密钥',
|
||||
apiKeyHint: 'API 密钥允许外部系统访问 LangBot 的 Service API',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot 提供 MCP(Model Context Protocol)服务,让 AI Agent 管理本实例,复用与 Service API 相同的 API 密钥。',
|
||||
mcpEndpoint: 'MCP 接入地址',
|
||||
mcpAuthTitle: '鉴权方式',
|
||||
mcpAuthDesc: '使用「API 密钥」标签页中的任意密钥,通过请求头传入:',
|
||||
mcpGlobalKeyNote:
|
||||
'也可在 config.yaml 中设置全局 API 密钥(api.global_api_key),无需登录即可使用。',
|
||||
mcpClientConfigTitle: 'MCP 客户端配置示例',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: '创建 Webhook',
|
||||
webhookName: 'Webhook 名称',
|
||||
@@ -186,6 +203,9 @@ const zhHans = {
|
||||
selectModelAbilities: '选择模型能力',
|
||||
visionAbility: '视觉能力',
|
||||
functionCallAbility: '函数调用',
|
||||
contextLength: '上下文窗口',
|
||||
contextLengthPlaceholder: '未知',
|
||||
contextLengthInvalid: '上下文窗口必须是正整数',
|
||||
extraParameters: '额外参数',
|
||||
addParameter: '添加参数',
|
||||
keyName: '键名',
|
||||
@@ -241,6 +261,7 @@ const zhHans = {
|
||||
selectProvider: '选择供应商',
|
||||
requester: '供应商类型',
|
||||
selectRequester: '选择供应商类型',
|
||||
searchProviders: '搜索供应商...',
|
||||
langbotModelsDescription: 'LangBot Space 提供的云端模型',
|
||||
credits: '积分',
|
||||
loginWithSpace: '通过 Space 登录',
|
||||
@@ -405,6 +426,25 @@ const zhHans = {
|
||||
userMessage: '用户',
|
||||
botMessage: '助手',
|
||||
},
|
||||
admins: {
|
||||
title: '管理员',
|
||||
description: '拥有此机器人命令管理员权限的会话(用户/群组 ID)',
|
||||
addAdmin: '添加管理员',
|
||||
launcherType: '类型',
|
||||
launcherId: 'ID',
|
||||
typePerson: '私聊',
|
||||
typeGroup: '群聊',
|
||||
placeholderId: '用户或群组 ID',
|
||||
addSuccess: '添加成功',
|
||||
addError: '添加失败:',
|
||||
deleteSuccess: '已移除',
|
||||
deleteError: '移除失败:',
|
||||
noAdmins: '暂无管理员',
|
||||
setAdminTitle: '设为管理员',
|
||||
adminBadge: '管理员',
|
||||
configureAdmins: '配置管理员',
|
||||
removeAdminTitle: '移除管理员权限',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: '插件扩展',
|
||||
@@ -412,10 +452,11 @@ const zhHans = {
|
||||
createPlugin: '创建插件',
|
||||
editPlugin: '编辑插件',
|
||||
installed: '已安装',
|
||||
marketplace: '插件市场',
|
||||
marketplace: '扩展市场',
|
||||
arrange: '编排',
|
||||
install: '安装',
|
||||
installPlugin: '安装插件',
|
||||
newPlugin: '新建插件',
|
||||
onlySupportGithub: '目前仅支持从 GitHub 安装',
|
||||
enterGithubLink: '请输入插件的Github链接',
|
||||
installing: '正在安装插件...',
|
||||
@@ -431,6 +472,9 @@ const zhHans = {
|
||||
getPluginListError: '获取插件列表失败:',
|
||||
pluginConfig: '插件配置',
|
||||
noPluginInstalled: '暂未安装任何插件',
|
||||
noExtensionInstalled: '暂未安装任何扩展',
|
||||
loadingExtensions: '正在加载扩展...',
|
||||
groupByType: '按格式分组',
|
||||
pluginSort: '插件排序',
|
||||
pluginSortDescription:
|
||||
'插件顺序会影响同一事件内的处理顺序,请拖动插件卡片排序',
|
||||
@@ -451,6 +495,19 @@ const zhHans = {
|
||||
debugKey: '调试密钥',
|
||||
noDebugKey: '(未设置)',
|
||||
debugKeyDisabled: '未设置调试密钥,插件调试无需认证',
|
||||
boxStatusTitle: 'Box 运行时',
|
||||
boxStatus: '状态',
|
||||
boxConnected: '已连接',
|
||||
boxUnavailable: '不可用',
|
||||
boxBackend: '后端',
|
||||
boxProfile: '配置',
|
||||
boxSandboxes: '沙箱数',
|
||||
boxErrors: '错误数',
|
||||
boxSessionImage: '镜像',
|
||||
boxSessionBackend: '后端',
|
||||
boxSessionResources: '资源',
|
||||
boxSessionNetwork: '网络',
|
||||
boxStatusLoadFailed: '加载 Box 状态失败',
|
||||
failedToGetDebugInfo: '获取调试信息失败',
|
||||
copiedToClipboard: '已复制到剪贴板',
|
||||
deleting: '删除中...',
|
||||
@@ -465,6 +522,8 @@ const zhHans = {
|
||||
close: '关闭',
|
||||
deleteConfirm: '删除确认',
|
||||
deleteSuccess: '删除成功',
|
||||
dangerZone: '危险区域',
|
||||
dangerZoneDescription: '不可逆的操作',
|
||||
modifyFailed: '修改失败:',
|
||||
componentName: {
|
||||
Tool: '工具',
|
||||
@@ -477,13 +536,30 @@ const zhHans = {
|
||||
uploadLocal: '本地上传',
|
||||
debugging: '调试中',
|
||||
uploadLocalPlugin: '上传本地插件',
|
||||
localPreview: {
|
||||
title: '预览本地插件包',
|
||||
unpacking: '正在解包预览...',
|
||||
unpackComplete: '解包预览完成',
|
||||
failed: '解包预览失败',
|
||||
pluginInfo: '插件信息',
|
||||
packageInfo: '包信息',
|
||||
name: '名称',
|
||||
author: '作者',
|
||||
version: '版本',
|
||||
fileCount: '文件数',
|
||||
dependencies: '依赖',
|
||||
components: '组件',
|
||||
ready: '插件包已解包,确认后开始安装。',
|
||||
},
|
||||
uploadPluginOnly: '仅支持 .lbpkg 文件',
|
||||
dragToUpload: '拖拽文件到此处上传',
|
||||
unsupportedFileType: '不支持的文件类型,仅支持 .lbpkg 和 .zip 文件',
|
||||
unsupportedFileType: '不支持的文件类型,仅支持 .lbpkg 文件',
|
||||
uploadingPlugin: '正在上传插件...',
|
||||
uploadSuccess: '上传成功',
|
||||
uploadFailed: '上传失败',
|
||||
selectFileToUpload: '选择要上传的插件文件',
|
||||
askConfirm: '确定要安装插件 "{{name}}" ({{version}}) 吗?',
|
||||
askConfirmNoVersion: '确定要安装插件 "{{name}}" 吗?',
|
||||
fromGithub: '来自 GitHub',
|
||||
fromLocal: '本地安装',
|
||||
fromMarketplace: '来自市场',
|
||||
@@ -505,6 +581,12 @@ const zhHans = {
|
||||
viewSource: '查看来源',
|
||||
loadingReadme: '正在加载文档...',
|
||||
noReadme: '该插件没有提供 README 文档',
|
||||
tabDocs: '文档',
|
||||
tabLogs: '日志',
|
||||
logsLevelAll: '全部级别',
|
||||
logsRefresh: '刷新',
|
||||
logsAutoRefresh: '自动刷新',
|
||||
logsEmpty: '暂无日志。插件通过 logger 打印的日志会显示在这里。',
|
||||
fileUpload: {
|
||||
tooLarge: '文件大小超过 10MB 限制',
|
||||
success: '文件上传成功',
|
||||
@@ -533,21 +615,27 @@ const zhHans = {
|
||||
assetSize: '大小: {{size}}',
|
||||
confirmInstall: '确认安装',
|
||||
installFromGithubDesc: '从 GitHub Release 安装插件',
|
||||
goToMarketplace: '前往插件市场',
|
||||
goToMarketplace: '前往扩展市场',
|
||||
installProgress: {
|
||||
title: '正在安装 {{name}}',
|
||||
titleGeneric: '插件安装',
|
||||
titleGeneric: '扩展安装',
|
||||
titlePlugin: '正在安装插件 {{name}}',
|
||||
titleMCP: '正在安装 MCP 服务器 {{name}}',
|
||||
titleSkill: '正在安装技能 {{name}}',
|
||||
overallProgress: '总体进度',
|
||||
downloading: '下载插件',
|
||||
downloading: '下载中',
|
||||
installingDeps: '安装依赖',
|
||||
initializing: '初始化配置',
|
||||
launching: '启动插件',
|
||||
launching: '启动中',
|
||||
completed: '已完成',
|
||||
failed: '安装失败',
|
||||
downloadSize: '包大小: {{size}}',
|
||||
depsInfo: '共 {{count}} 个依赖需要安装',
|
||||
depsProgress: '已安装 {{installed}}/{{total}} · 剩余 {{remaining}} 个',
|
||||
installComplete: '插件安装成功',
|
||||
installComplete: '安装成功',
|
||||
installCompletePlugin: '插件安装成功',
|
||||
installCompleteMCP: 'MCP 服务器安装成功',
|
||||
installCompleteSkill: '技能安装成功',
|
||||
dismiss: '关闭',
|
||||
background: '后台运行',
|
||||
taskQueue: '安装任务',
|
||||
@@ -557,19 +645,26 @@ const zhHans = {
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: '搜索插件...',
|
||||
searchResults: '搜索到 {{count}} 个插件',
|
||||
totalPlugins: '共 {{count}} 个插件',
|
||||
searchPlaceholderCount: '搜索 {{count}} 个扩展、能力或场景...',
|
||||
searchResults: '搜索到 {{count}} 个扩展',
|
||||
totalPlugins: '共 {{count}} 个扩展',
|
||||
noPlugins: '暂无插件',
|
||||
noResults: '未找到相关插件',
|
||||
loadingMore: '加载更多...',
|
||||
loading: '加载中...',
|
||||
allLoaded: '已显示全部插件',
|
||||
allLoadedCount: '已显示全部 {{count}} 个扩展',
|
||||
install: '安装',
|
||||
installCard: '安装 {{name}}',
|
||||
installConfirm: '确定要安装插件 "{{name}}" ({{version}}) 吗?',
|
||||
downloadComplete: '插件 "{{name}}" 下载完成',
|
||||
installFailed: '安装失败,请稍后重试',
|
||||
loadFailed: '获取插件列表失败,请稍后重试',
|
||||
noDescription: '暂无描述',
|
||||
recommendation: {
|
||||
pause: '暂停自动轮播',
|
||||
resume: '继续自动轮播',
|
||||
},
|
||||
notFound: '插件信息未找到',
|
||||
sortBy: '排序方式',
|
||||
sort: {
|
||||
@@ -596,8 +691,23 @@ const zhHans = {
|
||||
markAsRead: '已读',
|
||||
markAsReadSuccess: '已标记为已读',
|
||||
markAsReadFailed: '标记为已读失败',
|
||||
filterByComponent: '组件',
|
||||
filterByComponent: '插件组件',
|
||||
filterByComponentHint:
|
||||
'插件提供的能力类型,如工具(Tool)、命令(Command)、事件监听器(EventListener)等,用于扩展 LangBot 的各项能力。按组件筛选可只看提供对应能力的插件。',
|
||||
allComponents: '全部组件',
|
||||
componentName: {
|
||||
Tool: '工具',
|
||||
EventListener: '事件监听器',
|
||||
Command: '命令',
|
||||
KnowledgeEngine: '知识引擎',
|
||||
Parser: '解析器',
|
||||
Page: '页面',
|
||||
},
|
||||
filterByType: '类型',
|
||||
allTypes: '全部类型',
|
||||
typePlugin: '插件',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: '技能',
|
||||
requestPlugin: '请求插件',
|
||||
tags: {
|
||||
filterByTags: '按标签筛选',
|
||||
@@ -606,6 +716,15 @@ const zhHans = {
|
||||
clearAll: '清空',
|
||||
noTags: '暂无标签',
|
||||
},
|
||||
filters: {
|
||||
allFormats: '全部格式',
|
||||
more: '筛选',
|
||||
advancedTitle: '高级筛选',
|
||||
advancedDescription:
|
||||
'普通用户通常不需要选择这些类型;仅在你明确知道扩展格式时使用。',
|
||||
technicalType: '扩展格式',
|
||||
},
|
||||
allExtensions: '全部扩展',
|
||||
viewDetails: '查看详情',
|
||||
deprecated: '已弃用',
|
||||
deprecatedTooltip: '请安装对应「知识引擎」插件',
|
||||
@@ -613,6 +732,7 @@ const zhHans = {
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: '添加 MCP 服务器',
|
||||
addMCPServer: '添加 MCP 服务器',
|
||||
editServer: '修改 MCP 服务器',
|
||||
deleteServer: '删除 MCP 服务器',
|
||||
confirmDeleteServer: '你确定要删除此 MCP 服务器吗?',
|
||||
@@ -624,6 +744,14 @@ const zhHans = {
|
||||
stdio: 'Stdio模式',
|
||||
sse: 'SSE模式',
|
||||
http: 'HTTP模式',
|
||||
local: '本地(Stdio)',
|
||||
remote: '远程',
|
||||
localModeDescription: '在 Box 沙箱中以子进程方式本地运行 MCP 服务器。',
|
||||
remoteModeDescription:
|
||||
'通过 URL 连接远程 MCP 服务器,传输方式(Streamable HTTP 或 SSE)将自动检测。',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'粘贴 MCP 服务器链接即可,同时支持 Streamable HTTP 和旧版 SSE 端点。',
|
||||
noServerInstalled: '暂未配置任何 MCP 服务器',
|
||||
serverNameRequired: '服务器名称不能为空',
|
||||
commandRequired: '命令不能为空',
|
||||
@@ -650,9 +778,28 @@ const zhHans = {
|
||||
connectionSuccess: '连接成功',
|
||||
connectionFailed: '连接失败,请检查URL',
|
||||
connectionFailedStatus: '连接失败',
|
||||
boxDisabledStdioRefused:
|
||||
'Stdio 模式的 MCP 服务器依赖 Box 沙箱,目前已在配置中禁用(box.enabled = false)。',
|
||||
boxUnavailableStdioRefused:
|
||||
'Stdio 模式的 MCP 服务器依赖 Box 沙箱,目前无法连接。',
|
||||
boxStdioRefusedSuggestion:
|
||||
'请启用 Box(box.enabled = true)并确认运行时连接正常,或将此服务器切换到 http/sse 模式。',
|
||||
boxRequired: '需要 Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'Box 沙箱已禁用或不可用,无法保存 stdio 模式的 MCP。请启用 Box 或改为 http/sse 模式。',
|
||||
toolsFound: '个工具',
|
||||
unknownError: '未知错误',
|
||||
noToolsFound: '未找到任何工具',
|
||||
noResourcesFound: '未找到任何资源',
|
||||
tabTools: '工具',
|
||||
tabResources: '资源',
|
||||
tabDocs: '文档',
|
||||
tabLogs: '日志',
|
||||
logsLevelAll: '全部级别',
|
||||
logsRefresh: '刷新',
|
||||
logsAutoRefresh: '自动刷新',
|
||||
logsEmpty: '暂无日志。MCP 服务器的运行日志会显示在这里。',
|
||||
noReadme: '暂无文档',
|
||||
parseResultFailed: '解析测试结果失败',
|
||||
noResultReturned: '测试未返回结果',
|
||||
getTaskFailed: '获取任务状态失败',
|
||||
@@ -668,8 +815,15 @@ const zhHans = {
|
||||
loadFailed: '加载失败',
|
||||
modifyFailed: '修改失败:',
|
||||
toolCount: '工具:{{count}}',
|
||||
statusConnected: '已打开',
|
||||
statusDisconnected: '未打开',
|
||||
parameterCount: '参数:{{count}}',
|
||||
noParameters: '无参数',
|
||||
resourceCount: '资源:{{count}}',
|
||||
resourceBinaryContent: '二进制内容(无法显示)',
|
||||
resourceBinaryOmitted: '二进制内容已按资源安全策略省略',
|
||||
resourceTruncated: '内容已按字节或 token 限制截断',
|
||||
resourceReadFailed: '读取资源内容失败',
|
||||
statusConnected: '已连接',
|
||||
statusDisconnected: '未连接',
|
||||
statusError: '连接错误',
|
||||
statusDisabled: '已禁用',
|
||||
loading: '加载中...',
|
||||
@@ -753,17 +907,62 @@ const zhHans = {
|
||||
selectPlugins: '选择插件',
|
||||
pluginsTitle: '插件',
|
||||
mcpServersTitle: 'MCP 服务器',
|
||||
mcpResourcesTitle: 'MCP 资源',
|
||||
noMCPServersSelected: '未选择任何 MCP 服务器',
|
||||
noMCPResourcesAvailable: '暂无可用 MCP 资源',
|
||||
addMCPServer: '添加 MCP 服务器',
|
||||
selectMCPServers: '选择 MCP 服务器',
|
||||
enableMCPResourceAgentRead: '允许模型读取',
|
||||
toolCount: '{{count}} 个工具',
|
||||
noPluginsInstalled: '无已安装的插件',
|
||||
noMCPServersConfigured: '无已配置的 MCP 服务器',
|
||||
selectAll: '全选',
|
||||
enableAllPlugins: '启用所有插件',
|
||||
enableAllMCPServers: '启用所有 MCP 服务器',
|
||||
enableAllSkills: '启用所有技能',
|
||||
allPluginsEnabled: '已启用所有插件',
|
||||
allMCPServersEnabled: '已启用所有 MCP 服务器',
|
||||
allSkillsEnabled: '已启用所有技能',
|
||||
skillsTitle: '技能',
|
||||
noSkillsSelected: '未选择任何技能',
|
||||
addSkill: '添加技能',
|
||||
selectSkills: '选择技能',
|
||||
noSkillsAvailable: '暂无可用技能',
|
||||
mcpServersScopeTooltip:
|
||||
'这里仅控制此流水线绑定哪些 MCP 服务器;具体 MCP 工具和资源在 AI 能力的内置 Agent 表单中选择。',
|
||||
enableAllMCPServersTooltip:
|
||||
'开启后,所有已配置且启用的 MCP 服务器都会进入 AI 能力里的 MCP 工具和资源候选范围。',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: '工具',
|
||||
toolsDescription:
|
||||
'选择此内置 Agent 可以调用的插件、MCP、技能和内置工具。',
|
||||
toolsScopeTooltip:
|
||||
'MCP 工具只会从扩展集成中已绑定的 MCP 服务器里出现;如需增加 MCP 工具来源,请先到扩展集成绑定对应服务器。',
|
||||
enableAllTools: '启用所有工具',
|
||||
allToolsEnabled: '已启用所有可用工具',
|
||||
noToolsSelected: '未选择任何工具',
|
||||
editTools: '编辑工具',
|
||||
builtinTools: '内置工具',
|
||||
pluginTools: '插件工具',
|
||||
skillTools: '技能工具',
|
||||
mcpTools: 'MCP 工具',
|
||||
mcpToolsScopeTooltip:
|
||||
'这里仅展示扩展集成当前允许的 MCP 服务器提供的工具。',
|
||||
skillToolsScopeTooltip:
|
||||
'技能工具会在 LangBot 技能服务和 Box 沙箱后端可用时出现,用于让 Agent 激活或注册技能。',
|
||||
selectTools: '选择工具',
|
||||
resourcesTitle: '资源',
|
||||
resourcesDescription: '选择此内置 Agent 可以读取的 MCP 资源和知识库。',
|
||||
knowledgeBases: '知识库',
|
||||
mcpResources: 'MCP 资源',
|
||||
mcpResourcesScopeTooltip:
|
||||
'这里仅展示扩展集成当前允许的 MCP 服务器暴露的资源。',
|
||||
enableMCPResourceRead: '允许模型读取 MCP 资源',
|
||||
mcpResourceReadTooltip:
|
||||
'关闭后,即使已选择资源,也不会把 MCP 资源内容注入给模型。',
|
||||
noMCPResourcesAvailable: '暂无可用 MCP 资源',
|
||||
selectKnowledgeBases: '选择知识库',
|
||||
},
|
||||
debugDialog: {
|
||||
title: '流水线对话',
|
||||
@@ -862,7 +1061,7 @@ const zhHans = {
|
||||
builtInParser: '由知识引擎提供',
|
||||
noParserAvailable:
|
||||
'没有解析器支持此文件类型,请安装支持该格式的解析器插件。',
|
||||
installParserHint: '前往插件市场安装解析器 →',
|
||||
installParserHint: '前往扩展市场安装解析器 →',
|
||||
confirmUpload: '上传',
|
||||
cancelUpload: '取消',
|
||||
},
|
||||
@@ -987,6 +1186,7 @@ const zhHans = {
|
||||
},
|
||||
account: {
|
||||
settings: '账户设置',
|
||||
settingsDescription: '管理你的密码和关联账户',
|
||||
setPassword: '设置密码',
|
||||
passwordSetSuccess: '密码设置成功',
|
||||
passwordStatus: '本地密码',
|
||||
@@ -1046,6 +1246,7 @@ const zhHans = {
|
||||
llmCalls: 'LLM调用',
|
||||
embeddingCalls: 'Embedding调用',
|
||||
modelCalls: '模型调用',
|
||||
tokens: 'Token 监控',
|
||||
feedback: '用户反馈',
|
||||
sessions: '会话分析',
|
||||
errors: '错误日志',
|
||||
@@ -1070,6 +1271,20 @@ const zhHans = {
|
||||
level: '级别',
|
||||
runner: '执行器',
|
||||
viewConversation: '显示对话详情',
|
||||
turns: '{{count}} 轮对话',
|
||||
userMessage: '用户',
|
||||
noUserMessage: '未记录用户输入',
|
||||
assistantMessage: '助手',
|
||||
assistantMessageCount: '助手 +{{count}}',
|
||||
noAssistantMessage: '未记录助手回复',
|
||||
messageCount: '消息数',
|
||||
conversationTrace: '消息链路',
|
||||
noLlmCalls: '未记录模型调用',
|
||||
roles: {
|
||||
user: '用户',
|
||||
assistant: '助手',
|
||||
message: '消息',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'LLM调用',
|
||||
@@ -1084,6 +1299,39 @@ const zhHans = {
|
||||
avgDuration: '平均耗时',
|
||||
calls: '调用次数',
|
||||
},
|
||||
toolCalls: {
|
||||
title: '工具调用',
|
||||
totalCalls: '调用次数',
|
||||
duration: '工具耗时',
|
||||
errorCalls: '失败次数',
|
||||
arguments: '参数',
|
||||
result: '结果',
|
||||
noToolCalls: '未记录工具调用',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: '总 Token 数',
|
||||
inputTokens: '输入 Token',
|
||||
outputTokens: '输出 Token',
|
||||
avgPerCall: '平均每次调用',
|
||||
throughput: '吞吐量',
|
||||
tokensPerSec: 'Token/秒',
|
||||
errorCalls: '失败调用',
|
||||
acrossCalls: '共 {{count}} 次调用',
|
||||
ofTotal: '共 {{count}} 次',
|
||||
usageOverTime: 'Token 用量趋势',
|
||||
byModel: '按模型统计',
|
||||
model: '模型',
|
||||
calls: '调用次数',
|
||||
avgLatency: '平均延迟',
|
||||
noData: '所选时间范围内暂无 Token 用量数据',
|
||||
loadError: '加载 Token 统计失败:{{error}}',
|
||||
zeroTokenWarning:
|
||||
'检测到 {{count}} 次成功调用未上报 Token 用量(记为 0)。这通常表示上游未返回 usage 信息,请检查模型供应商配置。',
|
||||
bucket: {
|
||||
hour: '按小时',
|
||||
day: '按天',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding调用',
|
||||
model: '模型',
|
||||
@@ -1145,6 +1393,21 @@ const zhHans = {
|
||||
inaccurateReasons: '不准确原因',
|
||||
platform: '平台',
|
||||
exportFeedback: '导出反馈',
|
||||
description:
|
||||
'告诉我们遇到的问题或想要的改进。提交时会附带实例 UUID 和登录账号,方便定位。',
|
||||
placeholder: '请描述你的建议、问题或复现步骤...',
|
||||
attachImage: '添加图片',
|
||||
screenshot: '截图',
|
||||
submit: '提交反馈',
|
||||
privacyHint: '请勿提交敏感密钥、密码或私人聊天内容。',
|
||||
contentRequired: '请先填写反馈内容',
|
||||
imageOnly: '仅支持图片附件',
|
||||
imageTooLarge: '单张图片不能超过 1MB',
|
||||
tooManyImages: '最多添加 3 张图片',
|
||||
screenshotFailed: '截图失败,请尝试粘贴或上传图片',
|
||||
submitSuccess: '反馈已提交,感谢!',
|
||||
submitFailed: '反馈提交失败,请稍后重试',
|
||||
removeImage: '移除图片',
|
||||
},
|
||||
queries: {
|
||||
title: '查询记录',
|
||||
@@ -1174,6 +1437,34 @@ const zhHans = {
|
||||
sessions: '会话记录',
|
||||
feedback: '用户反馈',
|
||||
},
|
||||
systemStatus: '系统状态',
|
||||
pluginRuntime: '插件运行时',
|
||||
boxRuntime: 'Box 运行时',
|
||||
connected: '已连接',
|
||||
disconnected: '未连接',
|
||||
disabled: '已禁用',
|
||||
statusDetail: '状态',
|
||||
pluginDisabled: '插件系统已禁用',
|
||||
boxDisabled:
|
||||
'Box 沙箱已在配置中禁用——沙箱工具、技能添加/编辑与 stdio MCP 均不可用',
|
||||
boxUnavailable:
|
||||
'Box 沙箱不可用——沙箱工具、技能添加/编辑与 stdio MCP 均不可用',
|
||||
boxRequiredHint:
|
||||
'此功能依赖 Box 运行时。请在配置中启用(box.enabled = true)并确认运行时连接正常。',
|
||||
boxBackend: '后端',
|
||||
boxProfile: '配置',
|
||||
boxSandboxes: '沙箱数',
|
||||
boxSessionCreated: '创建时间',
|
||||
boxSessionLastUsed: '最后使用',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: '设置',
|
||||
nav: {
|
||||
models: '模型',
|
||||
api: 'API',
|
||||
storage: '存储',
|
||||
account: '账户',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: '存储分析',
|
||||
@@ -1216,7 +1507,96 @@ const zhHans = {
|
||||
maxPipelinesReached:
|
||||
'已达到流水线数量上限({{max}}个)。请先删除已有流水线后再创建新的。',
|
||||
maxExtensionsReached:
|
||||
'已达到扩展数量上限({{max}}个)。请先删除已有的 MCP 服务器或插件后再添加新的。',
|
||||
'已达到扩展数量上限({{max}}个)。请先删除已有扩展后再添加新的。',
|
||||
},
|
||||
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:
|
||||
'非必填。仅在导入已有技能目录时需要填写,新建技能可留空。扫描会检查当前目录及两级子目录。',
|
||||
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: '返回仓库地址',
|
||||
backToAssets: '返回文件列表',
|
||||
releaseTag: '标签:{{tag}}',
|
||||
publishedAt: '发布于:{{date}}',
|
||||
prerelease: '预发布',
|
||||
assetSize: '大小:{{size}}',
|
||||
confirmInstall: '确认安装',
|
||||
installing: '正在安装技能...',
|
||||
loading: '加载中...',
|
||||
previewLoadError: '加载预览失败',
|
||||
selectFromSidebar: '从侧边栏选择一个技能',
|
||||
dangerZone: '危险区域',
|
||||
dangerZoneDescription: '不可逆的操作',
|
||||
files: '文件',
|
||||
noFiles: '暂无文件',
|
||||
loadFilesError: '加载文件失败:',
|
||||
readFileError: '读取文件失败:',
|
||||
saveFile: '保存文件',
|
||||
saveFileSuccess: '文件保存成功',
|
||||
saveFileError: '保存文件失败:',
|
||||
},
|
||||
wizard: {
|
||||
sidebarDescription: '通过引导步骤创建机器人',
|
||||
@@ -1278,6 +1658,48 @@ const zhHans = {
|
||||
backToWorkbench: '返回工作台',
|
||||
},
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: '安装{{type}}',
|
||||
installConfirm: '确定要安装{{type}} "{{name}}" 吗?',
|
||||
installInfoType: '类型',
|
||||
installInfoId: '标识',
|
||||
installInfoVersion: '版本',
|
||||
installSuccess: '安装成功',
|
||||
installStage: {
|
||||
mcpInstalling: '正在添加并连接 MCP 服务器…',
|
||||
skillInstalling: '正在安装技能…',
|
||||
installed: '已完成',
|
||||
},
|
||||
manualAdd: '手动添加',
|
||||
uploadExtension: '拖拽或点击上传扩展包',
|
||||
uploadHint: '支持 .zip(技能)和 .lbpkg(插件)文件',
|
||||
orContinueWith: '或选择以下操作',
|
||||
addMCPServerHint: '连接一个 MCP 工具服务器扩展',
|
||||
installFromGithub: '从 GitHub 安装',
|
||||
installFromGithubHint: '插件包或技能(SKILL.md)',
|
||||
githubUrlHelp: '粘贴 GitHub 地址',
|
||||
githubUrlTooltip:
|
||||
'插件:粘贴仓库、Release 或 Tag 地址。技能:粘贴技能目录里的 SKILL.md 页面地址。',
|
||||
githubUrlPlaceholder: 'GitHub 仓库、Release 或 SKILL.md 链接',
|
||||
githubUrlRequired: '请输入 GitHub 地址',
|
||||
previewSkill: '预览技能',
|
||||
noSkillPreviewFound: '未找到可导入的技能',
|
||||
createSkill: '创建新的技能',
|
||||
createSkillHint: '从本地目录导入或手动创建',
|
||||
unsupportedFileType: '不支持的文件类型,仅支持 .zip 和 .lbpkg 文件',
|
||||
},
|
||||
errorPage: {
|
||||
unexpectedError: '出错了',
|
||||
unexpectedErrorDescription: '发生了意外错误,请稍后重试。',
|
||||
notFound: '页面未找到',
|
||||
notFoundDescription: '你访问的页面不存在或已被移动。',
|
||||
backendUnavailableStatus: '后端服务不可用',
|
||||
goBack: '返回上页',
|
||||
backToHome: '返回首页',
|
||||
backToLogin: '返回登录',
|
||||
retrying: '正在重试',
|
||||
retryFailed: '仍然无法连接后端,请确认服务已启动后再重试。',
|
||||
},
|
||||
feishu: {
|
||||
createApp: '一键创建飞书应用',
|
||||
scanQRCode: '请使用飞书扫描以下二维码,授权后将自动创建应用并填写凭据',
|
||||
|
||||
@@ -2,12 +2,16 @@ const zhHant = {
|
||||
sidebar: {
|
||||
home: '首頁',
|
||||
extensions: '擴展',
|
||||
installedPlugins: '已安裝外掛',
|
||||
installedPlugins: '已安裝',
|
||||
pluginMarket: '外掛市場',
|
||||
mcpServers: 'MCP 伺服器',
|
||||
addExtension: '添加擴展',
|
||||
pluginPages: '插件頁面',
|
||||
pluginPagesTooltip: '由已安裝的插件提供的視覺化頁面',
|
||||
quickStart: '快速開始',
|
||||
scrollToBottom: '捲動到底部',
|
||||
editionCommunity: '社區版',
|
||||
editionCloud: 'Cloud',
|
||||
},
|
||||
common: {
|
||||
login: '登入',
|
||||
@@ -32,11 +36,13 @@ const zhHant = {
|
||||
helpDocs: '輔助說明',
|
||||
featureRequest: '需求建議',
|
||||
starOnGitHub: '在 GitHub 上 Star',
|
||||
joinDiscord: '加入 Discord 社群',
|
||||
create: '建立',
|
||||
edit: '編輯',
|
||||
delete: '刪除',
|
||||
add: '新增',
|
||||
select: '請選擇',
|
||||
skill: '技能',
|
||||
cancel: '取消',
|
||||
submit: '提交',
|
||||
error: '錯誤',
|
||||
@@ -65,6 +71,7 @@ const zhHant = {
|
||||
test: '測試',
|
||||
forgotPassword: '忘記密碼?',
|
||||
agreementNotice: '繼續即表示您同意我們的',
|
||||
termsOfService: '服務條款',
|
||||
privacyPolicy: '隱私政策',
|
||||
and: '和',
|
||||
dataCollectionPolicy: '數據收集政策',
|
||||
@@ -109,6 +116,7 @@ const zhHant = {
|
||||
changePasswordSuccess: '密碼修改成功',
|
||||
changePasswordFailed: '密碼修改失敗,請檢查當前密碼是否正確',
|
||||
apiIntegration: 'API 整合',
|
||||
apiIntegrationDescription: '管理用於外部存取的 API 金鑰和 Webhook',
|
||||
apiKeys: 'API 金鑰',
|
||||
manageApiIntegration: '管理 API 整合',
|
||||
manageApiKeys: '管理 API 金鑰',
|
||||
@@ -124,6 +132,15 @@ const zhHant = {
|
||||
apiKeyCopied: 'API 金鑰已複製到剪貼簿',
|
||||
noApiKeys: '暫無 API 金鑰',
|
||||
apiKeyHint: 'API 金鑰允許外部系統訪問 LangBot 的 Service API',
|
||||
mcpTab: 'MCP',
|
||||
mcpHint:
|
||||
'LangBot 提供 MCP(Model Context Protocol)服務,讓 AI Agent 管理本實例,複用與 Service API 相同的 API 金鑰。',
|
||||
mcpEndpoint: 'MCP 接入位址',
|
||||
mcpAuthTitle: '驗證方式',
|
||||
mcpAuthDesc: '使用「API 金鑰」標籤頁中的任意金鑰,透過請求標頭傳入:',
|
||||
mcpGlobalKeyNote:
|
||||
'也可在 config.yaml 中設定全域 API 金鑰(api.global_api_key),無需登入即可使用。',
|
||||
mcpClientConfigTitle: 'MCP 用戶端設定範例',
|
||||
webhooks: 'Webhooks',
|
||||
createWebhook: '建立 Webhook',
|
||||
webhookName: 'Webhook 名稱',
|
||||
@@ -186,6 +203,9 @@ const zhHant = {
|
||||
selectModelAbilities: '選擇模型能力',
|
||||
visionAbility: '視覺能力',
|
||||
functionCallAbility: '函數呼叫',
|
||||
contextLength: '上下文視窗',
|
||||
contextLengthPlaceholder: '未知',
|
||||
contextLengthInvalid: '上下文視窗必須是正整數',
|
||||
extraParameters: '額外參數',
|
||||
addParameter: '新增參數',
|
||||
keyName: '鍵名',
|
||||
@@ -240,6 +260,7 @@ const zhHant = {
|
||||
selectProvider: '選擇供應商',
|
||||
requester: '供應商類型',
|
||||
selectRequester: '選擇供應商類型',
|
||||
searchProviders: '搜尋供應商...',
|
||||
langbotModelsDescription: '由 LangBot Space 提供的雲端模型',
|
||||
credits: '積分',
|
||||
loginWithSpace: '使用 Space 登入',
|
||||
@@ -405,6 +426,25 @@ const zhHant = {
|
||||
userMessage: '使用者',
|
||||
botMessage: '助手',
|
||||
},
|
||||
admins: {
|
||||
title: '管理員',
|
||||
description: '擁有此機器人指令管理員權限的會話(使用者/群組 ID)',
|
||||
addAdmin: '新增管理員',
|
||||
launcherType: '類型',
|
||||
launcherId: 'ID',
|
||||
typePerson: '私聊',
|
||||
typeGroup: '群組',
|
||||
placeholderId: '使用者或群組 ID',
|
||||
addSuccess: '新增成功',
|
||||
addError: '新增失敗:',
|
||||
deleteSuccess: '已移除',
|
||||
deleteError: '移除失敗:',
|
||||
noAdmins: '尚無管理員',
|
||||
setAdminTitle: '設為管理員',
|
||||
removeAdminTitle: '移除管理員權限',
|
||||
adminBadge: '管理員',
|
||||
configureAdmins: '設定管理員',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: '外掛擴展',
|
||||
@@ -416,6 +456,7 @@ const zhHant = {
|
||||
arrange: '編排',
|
||||
install: '安裝',
|
||||
installPlugin: '安裝外掛',
|
||||
newPlugin: '新建外掛',
|
||||
installFromGithub: '來自 GitHub',
|
||||
onlySupportGithub: '目前僅支援從 GitHub 安裝',
|
||||
enterGithubLink: '請輸入外掛的Github連結',
|
||||
@@ -432,6 +473,9 @@ const zhHant = {
|
||||
getPluginListError: '取得外掛清單失敗:',
|
||||
pluginConfig: '外掛設定',
|
||||
noPluginInstalled: '暫未安裝任何外掛',
|
||||
noExtensionInstalled: '暫未安裝任何擴充功能',
|
||||
loadingExtensions: '正在載入擴充功能...',
|
||||
groupByType: '依格式分組',
|
||||
pluginSort: '外掛排序',
|
||||
pluginSortDescription:
|
||||
'外掛順序會影響同一事件內的處理順序,請拖曳外掛卡片排序',
|
||||
@@ -452,6 +496,19 @@ const zhHant = {
|
||||
debugKey: '偵錯金鑰',
|
||||
noDebugKey: '(未設定)',
|
||||
debugKeyDisabled: '未設定偵錯金鑰,外掛偵錯無需認證',
|
||||
boxStatusTitle: 'Box 執行時',
|
||||
boxStatus: '狀態',
|
||||
boxConnected: '已連線',
|
||||
boxUnavailable: '不可用',
|
||||
boxBackend: '後端',
|
||||
boxProfile: '設定檔',
|
||||
boxSandboxes: '沙箱數',
|
||||
boxErrors: '錯誤數',
|
||||
boxSessionImage: '映像檔',
|
||||
boxSessionBackend: '後端',
|
||||
boxSessionResources: '資源',
|
||||
boxSessionNetwork: '網路',
|
||||
boxStatusLoadFailed: '載入 Box 狀態失敗',
|
||||
failedToGetDebugInfo: '取得偵錯資訊失敗',
|
||||
copiedToClipboard: '已複製到剪貼簿',
|
||||
deleting: '刪除中...',
|
||||
@@ -466,6 +523,8 @@ const zhHant = {
|
||||
close: '關閉',
|
||||
deleteConfirm: '刪除確認',
|
||||
deleteSuccess: '刪除成功',
|
||||
dangerZone: '危險區域',
|
||||
dangerZoneDescription: '不可逆的操作',
|
||||
modifyFailed: '修改失敗:',
|
||||
componentName: {
|
||||
Tool: '工具',
|
||||
@@ -478,6 +537,21 @@ const zhHant = {
|
||||
uploadLocal: '本地上傳',
|
||||
debugging: '調試中',
|
||||
uploadLocalPlugin: '上傳本地插件',
|
||||
localPreview: {
|
||||
title: '預覽本地外掛包',
|
||||
unpacking: '正在解包預覽...',
|
||||
unpackComplete: '解包預覽完成',
|
||||
failed: '解包預覽失敗',
|
||||
pluginInfo: '外掛資訊',
|
||||
packageInfo: '包資訊',
|
||||
name: '名稱',
|
||||
author: '作者',
|
||||
version: '版本',
|
||||
fileCount: '檔案數',
|
||||
dependencies: '依賴',
|
||||
components: '元件',
|
||||
ready: '外掛包已解包,確認後開始安裝。',
|
||||
},
|
||||
dragToUpload: '拖拽文件到此處上傳',
|
||||
unsupportedFileType: '不支持的文件類型,僅支持 .lbpkg 和 .zip 文件',
|
||||
uploadingPlugin: '正在上傳插件...',
|
||||
@@ -485,6 +559,7 @@ const zhHant = {
|
||||
uploadFailed: '上傳失敗',
|
||||
selectFileToUpload: '選擇要上傳的插件文件',
|
||||
askConfirm: '確定要安裝插件 "{{name}}" ({{version}}) 嗎?',
|
||||
askConfirmNoVersion: '確定要安裝插件 "{{name}}" 嗎?',
|
||||
fromGithub: '來自 GitHub',
|
||||
fromLocal: '本地安裝',
|
||||
fromMarketplace: '來自市場',
|
||||
@@ -506,6 +581,12 @@ const zhHant = {
|
||||
viewSource: '查看來源',
|
||||
loadingReadme: '正在載入文件...',
|
||||
noReadme: '該插件沒有提供 README 文件',
|
||||
tabDocs: '文件',
|
||||
tabLogs: '日誌',
|
||||
logsLevelAll: '全部級別',
|
||||
logsRefresh: '重新整理',
|
||||
logsAutoRefresh: '自動重新整理',
|
||||
logsEmpty: '暫無日誌。外掛透過 logger 列印的日誌會顯示在這裡。',
|
||||
fileUpload: {
|
||||
tooLarge: '檔案大小超過 10MB 限制',
|
||||
success: '檔案上傳成功',
|
||||
@@ -553,23 +634,37 @@ const zhHant = {
|
||||
taskQueue: '安裝任務',
|
||||
clearCompleted: '清除已完成',
|
||||
noTasks: '暫無安裝任務',
|
||||
titlePlugin: '正在安裝外掛 {{name}}',
|
||||
titleMCP: '正在安裝 MCP 伺服器 {{name}}',
|
||||
titleSkill: '正在安裝技能 {{name}}',
|
||||
installCompletePlugin: '外掛安裝成功',
|
||||
installCompleteMCP: 'MCP 伺服器安裝成功',
|
||||
installCompleteSkill: '技能安裝成功',
|
||||
},
|
||||
uploadPluginOnly: '僅支援 .lbpkg 外掛包',
|
||||
},
|
||||
market: {
|
||||
searchPlaceholder: '搜尋插件...',
|
||||
searchResults: '搜尋到 {{count}} 個插件',
|
||||
totalPlugins: '共 {{count}} 個插件',
|
||||
searchPlaceholderCount: '搜尋 {{count}} 個擴展、能力或場景...',
|
||||
searchResults: '搜尋到 {{count}} 個擴展',
|
||||
totalPlugins: '共 {{count}} 個擴展',
|
||||
noPlugins: '暫無插件',
|
||||
noResults: '未找到相關插件',
|
||||
loadingMore: '載入更多...',
|
||||
loading: '載入中...',
|
||||
allLoaded: '已顯示全部插件',
|
||||
allLoadedCount: '已顯示全部 {{count}} 個擴展',
|
||||
install: '安裝',
|
||||
installCard: '安裝 {{name}}',
|
||||
installConfirm: '確定要安裝插件 "{{name}}" ({{version}}) 嗎?',
|
||||
downloadComplete: '插件 "{{name}}" 下載完成',
|
||||
installFailed: '安裝失敗,請稍後重試',
|
||||
loadFailed: '取得插件列表失敗,請稍後重試',
|
||||
noDescription: '暫無描述',
|
||||
recommendation: {
|
||||
pause: '暫停自動輪播',
|
||||
resume: '繼續自動輪播',
|
||||
},
|
||||
notFound: '插件資訊未找到',
|
||||
sortBy: '排序方式',
|
||||
sort: {
|
||||
@@ -596,8 +691,23 @@ const zhHant = {
|
||||
markAsRead: '已讀',
|
||||
markAsReadSuccess: '已標記為已讀',
|
||||
markAsReadFailed: '標記為已讀失敗',
|
||||
filterByComponent: '組件',
|
||||
filterByComponent: '插件組件',
|
||||
filterByComponentHint:
|
||||
'插件提供的能力類型,如工具(Tool)、命令(Command)、事件監聽器(EventListener)等,用於擴展 LangBot 的各項能力。按組件篩選可只看提供對應能力的插件。',
|
||||
allComponents: '全部組件',
|
||||
componentName: {
|
||||
Tool: '工具',
|
||||
EventListener: '事件監聽器',
|
||||
Command: '命令',
|
||||
KnowledgeEngine: '知識引擎',
|
||||
Parser: '解析器',
|
||||
Page: '擴展頁',
|
||||
},
|
||||
filterByType: '類型',
|
||||
allTypes: '全部類型',
|
||||
typePlugin: '插件',
|
||||
typeMCP: 'MCP',
|
||||
typeSkill: '技能',
|
||||
requestPlugin: '請求插件',
|
||||
tags: {
|
||||
filterByTags: '按標籤篩選',
|
||||
@@ -606,6 +716,14 @@ const zhHant = {
|
||||
clearAll: '清空',
|
||||
noTags: '暫無標籤',
|
||||
},
|
||||
filters: {
|
||||
allFormats: '全部類型',
|
||||
more: '更多',
|
||||
advancedTitle: '高級篩選',
|
||||
advancedDescription: '按擴展類型篩選',
|
||||
technicalType: '技術類型',
|
||||
},
|
||||
allExtensions: '全部擴展',
|
||||
viewDetails: '查看詳情',
|
||||
deprecated: '已棄用',
|
||||
deprecatedTooltip: '請安裝對應「知識引擎」插件',
|
||||
@@ -613,6 +731,7 @@ const zhHant = {
|
||||
mcp: {
|
||||
title: 'MCP',
|
||||
createServer: '新增MCP伺服器',
|
||||
addMCPServer: '新增 MCP 伺服器',
|
||||
editServer: '編輯MCP伺服器',
|
||||
deleteServer: '刪除MCP伺服器',
|
||||
confirmDeleteServer: '您確定要刪除此MCP伺服器嗎?',
|
||||
@@ -624,6 +743,14 @@ const zhHant = {
|
||||
sse: 'SSE模式',
|
||||
selectMode: '選擇連接模式',
|
||||
http: 'HTTP模式',
|
||||
local: '本機(Stdio)',
|
||||
remote: '遠端',
|
||||
localModeDescription: '在 Box 沙箱中以子程序方式於本機執行 MCP 伺服器。',
|
||||
remoteModeDescription:
|
||||
'透過 URL 連接遠端 MCP 伺服器,傳輸方式(Streamable HTTP 或 SSE)將自動偵測。',
|
||||
remoteUrlPlaceholder: 'https://example.com/mcp',
|
||||
remoteUrlDescription:
|
||||
'貼上 MCP 伺服器連結即可,同時支援 Streamable HTTP 與舊版 SSE 端點。',
|
||||
noServerInstalled: '暫未設定任何MCP伺服器',
|
||||
serverNameRequired: '伺服器名稱不能為空',
|
||||
commandRequired: '命令不能為空',
|
||||
@@ -650,9 +777,28 @@ const zhHant = {
|
||||
connectionSuccess: '連接成功',
|
||||
connectionFailed: '連接失敗,請檢查URL',
|
||||
connectionFailedStatus: '連接失敗',
|
||||
boxDisabledStdioRefused:
|
||||
'Stdio 模式的 MCP 伺服器依賴 Box 沙箱,目前已在設定中停用(box.enabled = false)。',
|
||||
boxUnavailableStdioRefused:
|
||||
'Stdio 模式的 MCP 伺服器依賴 Box 沙箱,目前無法連線。',
|
||||
boxStdioRefusedSuggestion:
|
||||
'請啟用 Box(box.enabled = true)並確認執行時連線正常,或將此伺服器切換到 http/sse 模式。',
|
||||
boxRequired: '需要 Box',
|
||||
stdioBlockedByBoxToast:
|
||||
'Box 沙箱已停用或無法使用,無法儲存 stdio 模式的 MCP。請啟用 Box 或改為 http/sse 模式。',
|
||||
toolsFound: '個工具',
|
||||
unknownError: '未知錯誤',
|
||||
noToolsFound: '未找到任何工具',
|
||||
noResourcesFound: '未找到任何資源',
|
||||
tabTools: '工具',
|
||||
tabResources: '資源',
|
||||
tabDocs: '文件',
|
||||
tabLogs: '日誌',
|
||||
logsLevelAll: '全部級別',
|
||||
logsRefresh: '重新整理',
|
||||
logsAutoRefresh: '自動重新整理',
|
||||
logsEmpty: '暫無日誌。MCP 服務器的運行日誌會顯示在這裡。',
|
||||
noReadme: '暫無文件',
|
||||
parseResultFailed: '解析測試結果失敗',
|
||||
noResultReturned: '測試未返回結果',
|
||||
getTaskFailed: '獲取任務狀態失敗',
|
||||
@@ -668,8 +814,15 @@ const zhHant = {
|
||||
loadFailed: '載入失敗',
|
||||
modifyFailed: '修改失敗:',
|
||||
toolCount: '工具:{{count}}',
|
||||
statusConnected: '已開啟',
|
||||
statusDisconnected: '未開啟',
|
||||
parameterCount: '參數:{{count}}',
|
||||
noParameters: '無參數',
|
||||
resourceCount: '資源:{{count}}',
|
||||
resourceBinaryContent: '二進位內容(無法顯示)',
|
||||
resourceBinaryOmitted: '二進位內容已依資源安全策略省略',
|
||||
resourceTruncated: '內容已依位元組或 token 限制截斷',
|
||||
resourceReadFailed: '讀取資源內容失敗',
|
||||
statusConnected: '已連線',
|
||||
statusDisconnected: '未連線',
|
||||
statusError: '連接錯誤',
|
||||
statusDisabled: '已停用',
|
||||
loading: '載入中...',
|
||||
@@ -753,9 +906,12 @@ const zhHant = {
|
||||
selectPlugins: '選擇插件',
|
||||
pluginsTitle: '插件',
|
||||
mcpServersTitle: 'MCP 伺服器',
|
||||
mcpResourcesTitle: 'MCP 資源',
|
||||
noMCPServersSelected: '未選擇任何 MCP 伺服器',
|
||||
noMCPResourcesAvailable: '暫無可用 MCP 資源',
|
||||
addMCPServer: '新增 MCP 伺服器',
|
||||
selectMCPServers: '選擇 MCP 伺服器',
|
||||
enableMCPResourceAgentRead: '允許模型讀取',
|
||||
toolCount: '{{count}} 個工具',
|
||||
noPluginsInstalled: '無已安裝的插件',
|
||||
noMCPServersConfigured: '無已配置的 MCP 伺服器',
|
||||
@@ -764,6 +920,47 @@ const zhHant = {
|
||||
enableAllMCPServers: '啟用所有 MCP 伺服器',
|
||||
allPluginsEnabled: '已啟用所有插件',
|
||||
allMCPServersEnabled: '已啟用所有 MCP 伺服器',
|
||||
enableAllSkills: '啟用全部技能',
|
||||
allSkillsEnabled: '已啟用全部技能',
|
||||
skillsTitle: '技能',
|
||||
noSkillsSelected: '未選擇技能',
|
||||
addSkill: '新增技能',
|
||||
selectSkills: '選擇技能',
|
||||
noSkillsAvailable: '暫無可用技能',
|
||||
mcpServersScopeTooltip:
|
||||
'這裡僅控制此流程線綁定哪些 MCP 伺服器;具體 MCP 工具和資源在 AI 能力的內建 Agent 表單中選擇。',
|
||||
enableAllMCPServersTooltip:
|
||||
'啟用後,所有已配置且啟用的 MCP 伺服器都會進入 AI 能力中的 MCP 工具和資源候選範圍。',
|
||||
},
|
||||
localAgent: {
|
||||
toolsTitle: '工具',
|
||||
toolsDescription: '選擇此內建 Agent 可以調用的插件、MCP 和內建工具。',
|
||||
toolsScopeTooltip:
|
||||
'MCP 工具只會從擴展集成中已綁定的 MCP 伺服器裡出現;如需增加 MCP 工具來源,請先到擴展集成綁定對應伺服器。',
|
||||
enableAllTools: '啟用所有工具',
|
||||
allToolsEnabled: '已啟用所有可用工具',
|
||||
noToolsSelected: '未選擇任何工具',
|
||||
editTools: '編輯工具',
|
||||
builtinTools: '內建工具',
|
||||
pluginTools: '插件工具',
|
||||
skillTools: '技能工具',
|
||||
mcpTools: 'MCP 工具',
|
||||
mcpToolsScopeTooltip:
|
||||
'這裡僅展示擴展集成目前允許的 MCP 伺服器提供的工具。',
|
||||
skillToolsScopeTooltip:
|
||||
'技能工具會在 LangBot 技能服務和 Box 沙箱後端可用時出現,用於讓 Agent 啟用或註冊技能。',
|
||||
selectTools: '選擇工具',
|
||||
resourcesTitle: '資源',
|
||||
resourcesDescription: '選擇此內建 Agent 可以讀取的 MCP 資源和知識庫。',
|
||||
knowledgeBases: '知識庫',
|
||||
mcpResources: 'MCP 資源',
|
||||
mcpResourcesScopeTooltip:
|
||||
'這裡僅展示擴展集成目前允許的 MCP 伺服器暴露的資源。',
|
||||
enableMCPResourceRead: '允許模型讀取 MCP 資源',
|
||||
mcpResourceReadTooltip:
|
||||
'關閉後,即使已選擇資源,也不會把 MCP 資源內容注入給模型。',
|
||||
noMCPResourcesAvailable: '暫無可用 MCP 資源',
|
||||
selectKnowledgeBases: '選擇知識庫',
|
||||
},
|
||||
debugDialog: {
|
||||
title: '流程線對話',
|
||||
@@ -987,6 +1184,7 @@ const zhHant = {
|
||||
},
|
||||
account: {
|
||||
settings: '帳戶設定',
|
||||
settingsDescription: '管理你的密碼和關聯帳戶',
|
||||
setPassword: '設定密碼',
|
||||
passwordSetSuccess: '密碼設定成功',
|
||||
passwordStatus: '本地密碼',
|
||||
@@ -1046,6 +1244,7 @@ const zhHant = {
|
||||
llmCalls: 'LLM調用',
|
||||
embeddingCalls: 'Embedding調用',
|
||||
modelCalls: '模型調用',
|
||||
tokens: 'Token 監控',
|
||||
sessions: '會話分析',
|
||||
feedback: '使用者反饋',
|
||||
errors: '錯誤日誌',
|
||||
@@ -1070,6 +1269,20 @@ const zhHant = {
|
||||
level: '級別',
|
||||
runner: '執行器',
|
||||
viewConversation: '顯示對話詳情',
|
||||
turns: '{{count}} 輪對話',
|
||||
userMessage: '使用者',
|
||||
noUserMessage: '未記錄使用者輸入',
|
||||
assistantMessage: '助手',
|
||||
assistantMessageCount: '助手 +{{count}}',
|
||||
noAssistantMessage: '未記錄助手回覆',
|
||||
messageCount: '訊息數',
|
||||
conversationTrace: '訊息鏈路',
|
||||
noLlmCalls: '未記錄模型呼叫',
|
||||
roles: {
|
||||
user: '使用者',
|
||||
assistant: '助手',
|
||||
message: '訊息',
|
||||
},
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'LLM呼叫',
|
||||
@@ -1084,6 +1297,39 @@ const zhHant = {
|
||||
avgDuration: '平均持續時間',
|
||||
calls: '呼叫次數',
|
||||
},
|
||||
toolCalls: {
|
||||
title: '工具呼叫',
|
||||
totalCalls: '呼叫次數',
|
||||
duration: '工具耗時',
|
||||
errorCalls: '失敗次數',
|
||||
arguments: '參數',
|
||||
result: '結果',
|
||||
noToolCalls: '未記錄工具呼叫',
|
||||
},
|
||||
tokens: {
|
||||
totalTokens: '總 Token 數',
|
||||
inputTokens: '輸入 Token',
|
||||
outputTokens: '輸出 Token',
|
||||
avgPerCall: '平均每次呼叫',
|
||||
throughput: '吞吐量',
|
||||
tokensPerSec: 'Token/秒',
|
||||
errorCalls: '失敗呼叫',
|
||||
acrossCalls: '共 {{count}} 次呼叫',
|
||||
ofTotal: '共 {{count}} 次',
|
||||
usageOverTime: 'Token 用量趨勢',
|
||||
byModel: '按模型統計',
|
||||
model: '模型',
|
||||
calls: '呼叫次數',
|
||||
avgLatency: '平均延遲',
|
||||
noData: '所選時間範圍內暫無 Token 用量資料',
|
||||
loadError: '載入 Token 統計失敗:{{error}}',
|
||||
zeroTokenWarning:
|
||||
'偵測到 {{count}} 次成功呼叫未上報 Token 用量(記為 0)。這通常表示上游未返回 usage 資訊,請檢查模型供應商設定。',
|
||||
bucket: {
|
||||
hour: '按小時',
|
||||
day: '按天',
|
||||
},
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding調用',
|
||||
model: '模型',
|
||||
@@ -1145,6 +1391,21 @@ const zhHant = {
|
||||
inaccurateReasons: '不準確原因',
|
||||
platform: '平台',
|
||||
exportFeedback: '匯出反饋',
|
||||
description:
|
||||
'告訴我們遇到的問題或想要的改進。提交時會附帶實例 UUID 和登入帳號,方便定位。',
|
||||
placeholder: '請描述你的建議、問題或重現步驟...',
|
||||
attachImage: '新增圖片',
|
||||
screenshot: '截圖',
|
||||
submit: '提交反饋',
|
||||
privacyHint: '請勿提交敏感金鑰、密碼或私人聊天內容。',
|
||||
contentRequired: '請先填寫反饋內容',
|
||||
imageOnly: '僅支援圖片附件',
|
||||
imageTooLarge: '單張圖片不能超過 1MB',
|
||||
tooManyImages: '最多新增 3 張圖片',
|
||||
screenshotFailed: '截圖失敗,請嘗試貼上或上傳圖片',
|
||||
submitSuccess: '反饋已提交,感謝!',
|
||||
submitFailed: '反饋提交失敗,請稍後再試',
|
||||
removeImage: '移除圖片',
|
||||
},
|
||||
messageDetails: {
|
||||
noData: '此查詢沒有LLM調用或錯誤記錄',
|
||||
@@ -1174,6 +1435,34 @@ const zhHant = {
|
||||
sessions: '會話記錄',
|
||||
feedback: '使用者回饋',
|
||||
},
|
||||
systemStatus: '系統狀態',
|
||||
pluginRuntime: '外掛執行時',
|
||||
boxRuntime: 'Box 執行時',
|
||||
connected: '已連線',
|
||||
disconnected: '未連線',
|
||||
disabled: '已停用',
|
||||
statusDetail: '狀態',
|
||||
pluginDisabled: '外掛系統已停用',
|
||||
boxDisabled:
|
||||
'Box 沙箱已在設定中停用——沙箱工具、技能新增/編輯與 stdio MCP 均無法使用',
|
||||
boxUnavailable:
|
||||
'Box 沙箱無法使用——沙箱工具、技能新增/編輯與 stdio MCP 均無法使用',
|
||||
boxRequiredHint:
|
||||
'此功能需要 Box 執行時。請在設定中啟用(box.enabled = true)並確認執行時連線正常。',
|
||||
boxBackend: '後端',
|
||||
boxProfile: '設定檔',
|
||||
boxSandboxes: '沙箱數',
|
||||
boxSessionCreated: '建立時間',
|
||||
boxSessionLastUsed: '最後使用',
|
||||
},
|
||||
settingsDialog: {
|
||||
title: '設定',
|
||||
nav: {
|
||||
models: '模型',
|
||||
api: 'API',
|
||||
storage: '儲存',
|
||||
account: '帳戶',
|
||||
},
|
||||
},
|
||||
storageAnalysis: {
|
||||
title: '儲存分析',
|
||||
@@ -1216,7 +1505,7 @@ const zhHant = {
|
||||
maxPipelinesReached:
|
||||
'已達到流水線數量上限({{max}}個)。請先刪除已有流水線後再建立新的。',
|
||||
maxExtensionsReached:
|
||||
'已達到擴充功能數量上限({{max}}個)。請先刪除已有的 MCP 伺服器或外掛後再新增。',
|
||||
'已達到擴充功能數量上限({{max}}個)。請先刪除已有擴充功能後再新增。',
|
||||
},
|
||||
wizard: {
|
||||
sidebarDescription: '透過引導步驟建立機器人',
|
||||
@@ -1278,6 +1567,48 @@ const zhHant = {
|
||||
backToWorkbench: '返回工作台',
|
||||
},
|
||||
},
|
||||
addExtension: {
|
||||
installTitle: '安裝{{type}}',
|
||||
installConfirm: '確定要安裝{{type}}「{{name}}」嗎?',
|
||||
installInfoType: '類型',
|
||||
installInfoId: 'ID',
|
||||
installInfoVersion: '版本',
|
||||
installSuccess: '安裝成功',
|
||||
installStage: {
|
||||
mcpInstalling: '正在新增並連接 MCP 伺服器…',
|
||||
skillInstalling: '正在安裝技能…',
|
||||
installed: '完成',
|
||||
},
|
||||
manualAdd: '手動新增',
|
||||
uploadExtension: '拖拽或點擊上傳擴充套件',
|
||||
uploadHint: '支援 .zip(技能)和 .lbpkg(插件)檔案',
|
||||
orContinueWith: '或選擇以下操作',
|
||||
addMCPServerHint: '連接一個 MCP 工具伺服器擴充',
|
||||
installFromGithub: '從 GitHub 安裝',
|
||||
installFromGithubHint: '插件包或技能(SKILL.md)',
|
||||
githubUrlHelp: '貼上 GitHub 地址',
|
||||
githubUrlTooltip:
|
||||
'插件:貼上倉庫、Release 或 Tag 地址。技能:貼上技能目錄裡的 SKILL.md 頁面地址。',
|
||||
githubUrlPlaceholder: 'GitHub 倉庫、Release 或 SKILL.md 連結',
|
||||
githubUrlRequired: '請輸入 GitHub 地址',
|
||||
previewSkill: '預覽技能',
|
||||
noSkillPreviewFound: '未找到可匯入的技能',
|
||||
createSkill: '建立新的技能',
|
||||
createSkillHint: '從本地目錄匯入或手動建立',
|
||||
unsupportedFileType: '不支援的檔案類型,僅支援 .zip 和 .lbpkg 檔案',
|
||||
},
|
||||
errorPage: {
|
||||
unexpectedError: '出錯了',
|
||||
unexpectedErrorDescription: '發生了意外錯誤,請稍後重試。',
|
||||
notFound: '頁面未找到',
|
||||
notFoundDescription: '你訪問的頁面不存在或已被移動。',
|
||||
backendUnavailableStatus: '後端服務不可用',
|
||||
goBack: '返回上頁',
|
||||
backToHome: '返回首頁',
|
||||
backToLogin: '返回登入',
|
||||
retrying: '正在重試',
|
||||
retryFailed: '仍然無法連接後端,請確認服務已啟動後再重試。',
|
||||
},
|
||||
feishu: {
|
||||
createApp: '一鍵建立飛書應用',
|
||||
scanQRCode: '請使用飛書掃描以下 QR Code,授權後將自動建立應用並填寫憑證',
|
||||
@@ -1334,6 +1665,94 @@ 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: '檔案儲存失敗:',
|
||||
},
|
||||
};
|
||||
|
||||
export default zhHant;
|
||||
|
||||
Reference in New Issue
Block a user