const enUS = { sidebar: { home: 'Home', extensions: 'Extensions', installedPlugins: 'Installed Plugins', pluginMarket: 'Marketplace', mcpServers: 'MCP Servers', pluginPages: 'Plugin Pages', pluginPagesTooltip: 'Visual pages provided by installed plugins', quickStart: 'Quick Start', }, common: { login: 'Login', logout: 'Logout', accountOptions: 'Settings', account: 'Account', integration: 'Integration', email: 'Email', password: 'Password', welcome: 'Welcome back to LangBot ๐Ÿ‘‹', continueToLogin: 'Login to continue', loginSuccess: 'Login successful', loginFailed: 'Login failed, please check your email and password', loginLoadError: 'Unable to connect to server', loginLoadErrorDesc: 'Unable to connect to the LangBot backend. Please make sure the service is running and try again.', retry: 'Retry', enterEmail: 'Enter email address', enterPassword: 'Enter password', invalidEmail: 'Please enter a valid email address', emptyPassword: 'Please enter your password', language: 'Language', helpDocs: 'Get Help', featureRequest: 'Feature Request', starOnGitHub: 'Star on GitHub', create: 'Create', edit: 'Edit', delete: 'Delete', add: 'Add', select: 'Select', cancel: 'Cancel', submit: 'Submit', next: 'Next', back: 'Back', refresh: 'Refresh', error: 'Error', success: 'Success', save: 'Save', saving: 'Saving...', confirm: 'Confirm', confirmDelete: 'Confirm Delete', deleteConfirmation: 'Are you sure you want to delete this?', selectOption: 'Select an option', selectPreset: 'Select Preset', required: 'Required', enable: 'Enable', name: 'Name', description: 'Description', icon: 'Icon', close: 'Close', deleteSuccess: 'Deleted successfully', deleteError: 'Delete failed: ', addRound: 'Add Round', copy: 'Copy', undo: 'Undo', redo: 'Redo', copySuccess: 'Copy Successfully', copyFailed: 'Copy Failed', test: 'Test', forgotPassword: 'Forgot Password?', agreementNotice: 'By continuing, you agree to our', privacyPolicy: 'Privacy Policy', and: 'and', dataCollectionPolicy: 'Data Collection Policy', dataCollectionPolicyUrl: 'https://link.langbot.app/en/docs/data-policy', loading: 'Loading...', fieldRequired: 'This field is required', or: 'or', loginWithSpace: 'Login with Space', spaceLoginRecommended: 'Recommended: Use official stable model APIs and cloud services', loginLocal: 'Login with local account', loginWithPassword: 'Login with password', spaceLoginTitle: 'Login with Space', spaceLoginDescription: 'Scan the QR code or visit the link below to authorize', spaceLoginUserCode: 'Your code', spaceLoginExpires: 'Code expires in {{seconds}} seconds', spaceLoginWaiting: 'Waiting for authorization...', spaceLoginSuccess: 'Authorization successful', spaceLoginFailed: 'Space login failed', spaceLoginExpired: 'Authorization code expired, please try again', spaceLoginCancel: 'Cancel', spaceLoginVisitLink: 'Visit link', spaceLoginProcessing: 'Logging in with Space', spaceLoginProcessingDescription: 'Please wait while we complete your login...', spaceLoginSuccessDescription: 'Redirecting to LangBot...', spaceLoginError: 'Login Failed', spaceLoginNoCode: 'Missing authorization code', backToLogin: 'Back to Login', backToHome: 'Back to Home', spaceAccountCannotChangePassword: 'Space accounts cannot change password here', theme: 'Theme', changePassword: 'Change Password', currentPassword: 'Current Password', newPassword: 'New Password', confirmNewPassword: 'Confirm New Password', enterCurrentPassword: 'Enter current password', enterNewPassword: 'Enter new password', enterConfirmPassword: 'Confirm new password', currentPasswordRequired: 'Current password is required', newPasswordRequired: 'New password is required', confirmPasswordRequired: 'Confirm password is required', passwordsDoNotMatch: 'Passwords do not match', changePasswordSuccess: 'Password changed successfully', changePasswordFailed: 'Failed to change password, please check your current password', apiIntegration: 'API Integration', apiKeys: 'API Keys', manageApiIntegration: 'Manage API Integration', manageApiKeys: 'Manage API Keys', createApiKey: 'Create API Key', apiKeyName: 'API Key Name', apiKeyDescription: 'API Key Description', apiKeyValue: 'API Key Value', apiKeyCreated: 'API key created successfully', apiKeyDeleted: 'API key deleted successfully', apiKeyDeleteConfirm: 'Are you sure you want to delete this API key?', apiKeyNameRequired: 'API key name is required', copyApiKey: 'Copy API Key', apiKeyCopied: 'API key copied to clipboard', noApiKeys: 'No API keys configured', apiKeyHint: 'API keys allow external systems to access LangBot Service APIs', webhooks: 'Webhooks', createWebhook: 'Create Webhook', webhookName: 'Webhook Name', webhookUrl: 'Webhook URL', webhookDescription: 'Webhook Description', webhookEnabled: 'Enabled', webhookCreated: 'Webhook created successfully', webhookDeleted: 'Webhook deleted successfully', webhookDeleteConfirm: 'Are you sure you want to delete this webhook?', webhookNameRequired: 'Webhook name is required', webhookUrlRequired: 'Webhook URL is required', noWebhooks: 'No webhooks configured', webhookHint: 'Webhooks allow LangBot to push person and group message events to external systems', actions: 'Actions', apiKeyCreatedMessage: 'Please copy this API key, if the button is invalid, please copy manually.', none: 'None', more: 'More ({{count}})', less: 'Less', noItems: 'No items', data: 'Data', result: 'Result', body: 'Body', headers: 'Headers', query: 'Query', method: 'Method', }, notFound: { title: 'Page not found', description: 'The page you are looking for does not exist.', back: 'Back', home: 'Home', help: 'Get Help', }, models: { title: 'Models', description: 'Configure and manage models that can be used in pipelines', createModel: 'Create Model', editModel: 'Edit Model', getModelListError: 'Failed to get model list: ', modelName: 'Model Name', modelProvider: 'Model Provider', modelBaseURL: 'Base URL', modelAbilities: 'Model Abilities', 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 model?', modelNameRequired: 'Model name cannot be empty', modelProviderRequired: 'Model provider cannot be empty', requestURLRequired: 'Request URL cannot be empty', apiKeyRequired: 'API Key cannot be empty', keyNameRequired: 'Key name cannot be empty', mustBeValidNumber: 'Must be a valid number', mustBeTrueOrFalse: 'Must be true or false', requestURL: 'Request URL', scanURL: 'Scan Models URL', scanURLPlaceholder: 'Leave empty to use Request URL + /models', scanURLDescription: 'Fill in the actual model-list endpoint when model scanning does not use the same address as model invocation.', apiKey: 'API Key', abilities: 'Abilities', selectModelAbilities: 'Select model abilities', visionAbility: 'Vision Ability', functionCallAbility: 'Function Call', extraParameters: 'Extra Parameters', addParameter: 'Add Parameter', keyName: 'Key Name', type: 'Type', value: 'Value', string: 'String', number: 'Number', boolean: 'Boolean', object: 'Object', objectJsonPlaceholder: '{ "type": "disabled" }', invalidJsonObject: 'Value must be a valid JSON object', selectModelProvider: 'Select Model Provider', modelProviderDescription: 'Please fill in the model name provided by the provider', modelManufacturer: 'Model Manufacturer', aggregationPlatform: 'Aggregation Platform', selfDeployed: 'Self-deployed', builtin: 'Built-in', selectModel: 'Select Model', testSuccess: 'Test successful', testError: 'Test failed, please check your model configuration', llmModels: 'LLM Models', localProvider: 'Local', localProviderDescription: 'Models configured and managed locally', spaceProviderDescription: 'Models synced from your Space account', spaceDisabledForLocalAccount: 'Login with Space to use cloud models', syncModels: 'Sync', syncSuccess: 'Sync complete: {{created}} created, {{updated}} updated', syncError: 'Sync failed: ', spaceModelReadOnly: 'Space models are read-only', noSpaceModels: 'No Space models. Click Sync to fetch models from Space.', noLocalModels: 'No local models. Click Create to add a model.', providerCount: '{{count}} providers', // New keys for provider-based structure addModel: 'Add Model', manualAdd: 'Manual', scanAdd: 'Scan', scanModels: 'Scan Models', scanModelsHint: 'Read available models from the current provider, then select which ones to add.', scannedModels: 'Scanned Models', scanDebug: 'Debug Info', searchScannedModels: 'Search scanned models', noScannedModels: 'No scan results yet. Click the button above to scan.', noScannedModelsMatch: 'No matching models', addSelectedModels: 'Add Selected', addSelectedModelsSuccess: '{{count}} model(s) added', selectAll: 'Select All', alreadyAdded: 'Already added', addLLMModel: 'Add LLM Model', addEmbeddingModel: 'Add Embedding Model', provider: 'Provider', existingProvider: 'Existing Provider', newProvider: 'New Provider', selectProvider: 'Select Provider', requester: 'Provider Type', selectRequester: 'Select Provider Type', langbotModelsDescription: 'Cloud models powered by LangBot Space', credits: 'Credits', loginWithSpace: 'Login with Space', loginToUseModels: 'Login with Space to use cloud models', noModels: 'No models configured', langbotModels: 'LangBot Models', spaceTrialTooltip: 'Free trial credits available! Login with Space to access cloud models with zero configuration.', unlockModels: 'Login to use', editProvider: 'Edit Provider', addProvider: 'Add Provider', addProviderHint: 'Add providers to use models from other sources', addProviderHintSimple: 'Add providers to use models', noProviders: 'No providers yet', providerName: 'Provider Name', providerNameRequired: 'Provider name is required', requesterRequired: 'Provider type is required', providerSaved: 'Provider saved', providerCreated: 'Provider created', providerSaveError: 'Failed to save provider: ', providerDeleted: 'Provider deleted', providerDeleteError: 'Failed to delete provider: ', deleteProviderConfirmation: 'Are you sure you want to delete this provider?', loadError: 'Failed to load data', chat: 'Chat', embedding: 'Embedding', rerank: 'Rerank', rerankUrlTooltip: 'Full URL override for rerank endpoint (e.g. https://dashscope.aliyuncs.com/compatible-api/v1/reranks)', rerankPathTooltip: 'Path appended to base URL (default: rerank)', modelsCount: '{{count}} model(s)', expandModels: 'Expand', collapseModels: 'Collapse', fallback: { primary: 'Primary Model', fallbackList: 'Fallback Models', addFallback: 'Add Fallback Model', }, }, bots: { title: 'Bots', description: 'Create and manage bots, which are the entry points for LangBot to connect with various platforms', createBot: 'Create Bot', selectFromSidebar: 'Select a bot from the sidebar', editBot: 'Edit Bot', getBotListError: 'Failed to get bot list: ', botName: 'Bot Name', botDescription: 'Bot Description', botNameRequired: 'Bot name cannot be empty', botDescriptionRequired: 'Bot description cannot be empty', adapterRequired: 'Adapter cannot be empty', defaultDescription: 'A bot', getBotConfigError: 'Failed to get bot configuration: ', saveSuccess: 'Saved successfully', saveError: 'Save failed: ', createSuccess: 'Created successfully. Please enable or modify the bound pipeline', createError: 'Creation failed: ', deleteSuccess: 'Deleted successfully', deleteError: 'Delete failed: ', deleteConfirmation: 'Are you sure you want to delete this bot?', platformAdapter: 'Platform/Adapter Selection', selectAdapter: 'Select Adapter', adapterConfig: 'Adapter Configuration', viewAdapterDocs: 'View Docs', bindPipeline: 'Bind Pipeline', selectPipeline: 'Select Pipeline', selectBot: 'Select Bot', botLogTitle: 'Bot Log', enableAutoRefresh: 'Enable Auto Refresh', session: 'Session', yesterday: 'Yesterday', earlier: 'Earlier', dateFormat: '{{month}}/{{day}}', setBotEnableError: 'Failed to set bot enable status', log: 'Log', configuration: 'Configuration', logs: 'Logs', basicInfo: 'Basic Information', basicInfoDescription: 'Set the bot name and description', routingConnection: 'Routing & Connection', routingConnectionDescription: 'Bind the pipeline that processes messages for this bot', routingRules: 'Conditional Routing Rules', routingRulesDescription: 'Rules are evaluated in order; first match routes to its pipeline. Fallback to the default pipeline above if none match.', addRoutingRule: 'Add Rule', ruleTypeLauncherType: 'Session Type', ruleTypeLauncherId: 'Session ID', ruleTypeMessageContent: 'Message Content', operatorEq: 'Equals', operatorNeq: 'Not Equals', operatorContains: 'Contains', operatorNotContains: 'Not Contains', operatorStartsWith: 'Starts With', operatorRegex: 'Regex', operatorHas: 'Has', operatorNotHas: 'Does not have', ruleTypeMessageHasElement: 'Message Element', ruleValueElementPlaceholder: 'Select element type', elementImage: 'Image', elementVoice: 'Voice', elementFile: 'File', elementForward: 'Forward', elementFace: 'Emoji', elementAt: '@Mention', elementAtAll: '@All', elementQuote: 'Quote', ruleValuePlaceholder: 'Match value', ruleValueLauncherIdPlaceholder: 'Group or user ID', ruleValueMessagePlaceholder: 'Message text', ruleValuePrefixPlaceholder: 'e.g. !draw', ruleValueRegexpPlaceholder: 'e.g. ^/help', pipelineDiscard: 'Discard Message', sessionTypePerson: 'Private Chat', sessionTypeGroup: 'Group Chat', // Unified binding (replacing routing rules) bindTarget: 'Bind Target', bindTargetDescription: 'Select the Pipeline or Workflow to process messages for this bot', bindingType: 'Binding Type', selectBinding: 'Select binding target', selectWorkflow: 'Select Workflow', noPipelinesFound: 'No pipelines available', noWorkflowsFound: 'No workflows available', pipelineBindingHelp: 'Pipeline is the traditional message processing method using predefined stages.', workflowBindingHelp: 'Workflow provides visual node orchestration for more flexible message processing.', adapterConfigDescription: 'Configure the selected platform adapter', dangerZone: 'Danger Zone', dangerZoneDescription: 'Irreversible and destructive actions', deleteBotAction: 'Delete this bot', deleteBotHint: 'Once deleted, all associated configuration will be permanently removed.', webhookUrl: 'Webhook Callback URL', webhookUrlCopied: 'Webhook URL copied', webhookUrlHint: 'Click the input to select all, then press Ctrl+C (Mac: Cmd+C) to copy, or click the button', webhookUrlHintEither: 'Use either of the two URLs above in your platform configuration', webhookSaasHint: 'Webhook requires a publicly accessible domain. LangBot Cloud provides a ready-to-use public endpoint for your bot.', webhookSaasLink: 'Learn more about LangBot Cloud', adapterCategory: { popular: 'Popular', china: 'China', global: 'Global', protocol: 'Protocol', }, logLevel: 'Log Level', allLevels: 'All Levels', selectLevel: 'Select Level', levelsSelected: 'levels selected', viewDetailedLogs: 'View Detailed Logs', viewDetails: 'Details', collapse: 'Collapse', imagesAttached: 'image(s) attached', noLogs: 'No logs yet', sessionMonitor: { title: 'Sessions', sessions: 'Sessions', noSessions: 'No sessions found', selectSession: 'Select a session to view messages', noMessages: 'No messages in this session', messages: 'messages', messageCount: '{{count}} messages', loading: 'Loading...', loadingSessions: 'Loading sessions...', loadingMessages: 'Loading messages...', user: 'User', variables: 'Variables', platform: 'Platform', lastActive: 'Last active', refresh: 'Refresh', active: 'Active', inactive: 'Inactive', discarded: 'Discarded', userMessage: 'User', botMessage: 'Assistant', }, }, plugins: { title: 'Extensions', description: 'Install and configure plugins to extend functionality, please select them in the pipeline configuration', createPlugin: 'Create Plugin', editPlugin: 'Edit Plugin', installed: 'Installed', marketplace: 'Marketplace', arrange: 'Sort Plugins', install: 'Install', installPlugin: 'Install Plugin', onlySupportGithub: 'Currently only supports installation from GitHub', enterGithubLink: 'Enter GitHub link of the plugin', installing: 'Installing plugin...', installSuccess: 'Plugin installed successfully', installFailed: 'Plugin installation failed:', searchPlugin: 'Search plugins', sortBy: 'Sort by', mostStars: 'Most stars', recentlyAdded: 'Recently added', recentlyUpdated: 'Recently updated', noMatchingPlugins: 'No matching plugins found', loading: 'Loading...', getPluginListError: 'Failed to get plugin list:', noPluginInstalled: 'No plugins installed', pluginConfig: 'Plugin Configuration', pluginSort: 'Plugin Sort', pluginSortDescription: 'Plugin order affects the processing order within the same event, please drag the plugin card to sort', pluginSortSuccess: 'Plugin sort successful', pluginSortError: 'Plugin sort failed: ', pluginNoConfig: 'The plugin has no configuration items.', systemDisabled: 'Plugin System Disabled', systemDisabledDesc: 'Plugin system is not enabled, please modify the configuration according to the documentation', connectionError: 'Plugin System Connection Error', connectionErrorDesc: 'Please check the plugin system configuration or contact the administrator.', errorDetails: 'Error Details', loadingStatus: 'Checking plugin system status...', failedToGetStatus: 'Failed to get plugin system status', pluginSystemNotReady: 'Plugin system is not ready, cannot perform this operation', debugInfo: 'Debug Info', debugInfoTitle: 'Plugin Debug Information', debugUrl: 'Debug URL', debugKey: 'Debug Key', noDebugKey: '(Not Set)', debugKeyDisabled: 'Debug key is not set, plugin debugging does not require authentication', failedToGetDebugInfo: 'Failed to get debug information', copiedToClipboard: 'Copied to clipboard', deleting: 'Deleting...', deletePlugin: 'Delete Plugin', cancel: 'Cancel', saveConfig: 'Save Config', saving: 'Saving...', confirmDeletePlugin: 'Are you sure you want to delete the plugin ({{author}}/{{name}})?', deleteDataCheckbox: 'Also delete plugin configuration and persistence storage', confirmDelete: 'Confirm Delete', deleteError: 'Delete failed: ', close: 'Close', deleteConfirm: 'Delete Confirmation', deleteSuccess: 'Delete successful', modifyFailed: 'Modify failed: ', componentName: { Tool: 'Tool', EventListener: 'Event Listener', Command: 'Command', KnowledgeEngine: 'Knowledge Engine', Parser: 'Parser', Page: 'Page', }, uploadLocal: 'Upload Local', debugging: 'Debugging', uploadLocalPlugin: 'Upload Local Plugin', dragToUpload: 'Drag plugin file here to upload', unsupportedFileType: 'Unsupported file type, only .lbpkg and .zip 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}})?', fromGithub: 'From GitHub', fromLocal: 'From Local', fromMarketplace: 'From Marketplace', componentsList: 'Components: ', noComponents: 'No components', delete: 'Delete Plugin', update: 'Update Plugin', new: 'New', updateConfirm: 'Update Confirmation', confirmUpdatePlugin: 'Are you sure you want to update the plugin ({{author}}/{{name}})?', confirmUpdate: 'Confirm Update', updating: 'Updating...', updateSuccess: 'Plugin updated successfully', updateError: 'Update failed: ', saveConfigSuccessNormal: 'Configuration saved successfully', saveConfigError: 'Configuration save failed: ', config: 'Configuration', readme: 'Documentation', viewSource: 'View Source', loadingReadme: 'Loading documentation...', noReadme: 'This plugin does not provide README documentation', fileUpload: { tooLarge: 'File size exceeds 10MB limit', success: 'File uploaded successfully', failed: 'File upload failed', uploading: 'Uploading...', chooseFile: 'Choose File', addFile: 'Add File', }, installFromGithub: 'From GitHub', 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', noAssetsFound: 'No .lbpkg 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}}', releaseName: 'Name: {{name}}', publishedAt: 'Published at: {{date}}', prerelease: 'Pre-release', assetSize: 'Size: {{size}}', confirmInstall: 'Confirm Install', installFromGithubDesc: 'Install plugin from GitHub Release', goToMarketplace: 'Go to Marketplace', installProgress: { title: 'Installing {{name}}', titleGeneric: 'Plugin Installation', overallProgress: 'Overall Progress', downloading: 'Downloading Plugin', installingDeps: 'Installing Dependencies', initializing: 'Initializing Settings', launching: 'Launching Plugin', completed: 'Completed', failed: 'Failed', downloadSize: 'Package size: {{size}}', depsInfo: '{{count}} dependencies to install', depsProgress: '{{installed}}/{{total}} installed ยท {{remaining}} remaining', installComplete: 'Plugin installed successfully', dismiss: 'Dismiss', background: 'Run in Background', taskQueue: 'Install Tasks', clearCompleted: 'Clear Completed', noTasks: 'No install tasks', }, }, market: { searchPlaceholder: 'Search plugins...', searchResults: 'Found {{count}} plugins', totalPlugins: 'Total {{count}} plugins', noPlugins: 'No plugins available', noResults: 'No relevant plugins found', loadingMore: 'Loading more...', loading: 'Loading...', allLoaded: 'All plugins displayed', install: 'Install', 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', notFound: 'Plugin information not found', sortBy: 'Sort by', sort: { recentlyAdded: 'Recently Added', recentlyUpdated: 'Recently Updated', mostDownloads: 'Most Downloads', leastDownloads: 'Least Downloads', }, downloads: 'downloads', download: 'Download', repository: 'Repository', downloadFailed: 'Download failed', noReadme: 'This plugin does not provide README documentation', description: 'Description', tagLabel: 'Tags', submissionTitle: 'You have a plugin submission under review: {{name}}', submissionPending: 'Your plugin submission is under review: {{name}}', submissionApproved: 'Your plugin submission has been approved: {{name}}', submissionRejected: 'Your plugin submission has been rejected: {{name}}', clickToRevoke: 'Revoke', revokeSuccess: 'Revoke success', revokeFailed: 'Revoke failed', submissionDetails: 'Plugin Submission Details', markAsRead: 'Mark as Read', markAsReadSuccess: 'Marked as read', markAsReadFailed: 'Mark as read failed', filterByComponent: 'Component', allComponents: 'All Components', requestPlugin: 'Request Plugin', viewDetails: 'View Details', deprecated: 'Deprecated', deprecatedTooltip: 'Please install the corresponding Knowledge Engine plugin.', tags: { filterByTags: 'Filter by Tags', selected: 'selected', selectTags: 'Select Tags', clearAll: 'Clear All', noTags: 'No tags available', }, }, mcp: { title: 'MCP', createServer: 'Add MCP Server', editServer: 'Edit MCP Server', deleteServer: 'Delete MCP Server', confirmDeleteServer: 'Are you sure you want to delete this MCP server?', confirmDeleteTitle: 'Delete MCP Server', getServerListError: 'Failed to get MCP server list: ', serverName: 'Server Name', serverMode: 'Connection Mode', selectMode: 'Select Mode', stdio: 'Stdio Mode', sse: 'SSE Mode', http: 'HTTP Mode', noServerInstalled: 'No MCP servers configured', serverNameRequired: 'Server name cannot be empty', commandRequired: 'Command cannot be empty', urlRequired: 'URL cannot be empty', timeoutMustBePositive: 'Timeout must be a positive number', command: 'Command', args: 'Arguments', env: 'Environment Variables', url: 'URL', headers: 'Headers', timeout: 'Timeout', addArgument: 'Add Argument', addEnvVar: 'Add Environment Variable', addHeader: 'Add Header', keyName: 'Key Name', value: 'Value', testing: 'Testing...', connecting: 'Connecting...', testSuccess: 'Test successful', testFailed: 'Test failed: ', testError: 'Test error', refreshSuccess: 'Refresh successful', refreshFailed: 'Refresh failed: ', connectionSuccess: 'Connection successful', connectionFailed: 'Connection failed, please check URL', connectionFailedStatus: 'Connection Failed', toolsFound: 'tools', unknownError: 'Unknown error', noToolsFound: 'No tools found', parseResultFailed: 'Failed to parse test result', noResultReturned: 'Test returned no result', getTaskFailed: 'Failed to get task status', noTaskId: 'No task ID obtained', deleteSuccess: 'Deleted successfully', deleteFailed: 'Delete failed: ', deleteError: 'Delete failed: ', saveSuccess: 'Saved successfully', saveError: 'Save failed: ', createSuccess: 'Created successfully', createFailed: 'Creation failed: ', createError: 'Creation failed: ', loadFailed: 'Load failed', modifyFailed: 'Modify failed: ', toolCount: 'Tools: {{count}}', statusConnected: 'Connected', statusDisconnected: 'Disconnected', statusError: 'Connection Error', statusDisabled: 'Disabled', loading: 'Loading...', starCount: 'Stars: {{count}}', install: 'Install', installFromGithub: 'Install MCP Server from GitHub', add: 'Add', name: 'Name', nameRequired: 'Name cannot be empty', sseTimeout: 'SSE Timeout', sseTimeoutDescription: 'Timeout for establishing SSE connection', extraParametersDescription: 'Additional parameters for configuring specific MCP server behavior', timeoutMustBeNumber: 'Timeout must be a number', timeoutNonNegative: 'Timeout cannot be negative', sseTimeoutMustBeNumber: 'SSE timeout must be a number', sseTimeoutNonNegative: 'SSE timeout cannot be negative', updateSuccess: 'Updated successfully', updateFailed: 'Update failed: ', selectFromSidebar: 'Select an MCP server from the sidebar', dangerZone: 'Danger Zone', dangerZoneDescription: 'Irreversible and destructive actions for this MCP server.', deleteMCPAction: 'Delete this MCP server', deleteMCPHint: 'Once deleted, this MCP server configuration cannot be recovered.', }, pipelines: { title: 'Pipelines', description: 'Pipelines define the processing flow for message events, used to bind to bots', createPipeline: 'Create Pipeline', selectFromSidebar: 'Select a pipeline from the sidebar', editPipeline: 'Edit Pipeline', chat: 'Chat', configuration: 'Configuration', debugChat: 'Debug Chat', getPipelineListError: 'Failed to get pipeline list: ', daysAgo: 'days ago', today: 'Today', updateTime: 'Updated ', defaultBadge: 'Default', sortBy: 'Sort by', newestCreated: 'Newest Created', earliestCreated: 'Earliest Created', recentlyEdited: 'Recently Edited', earliestEdited: 'Earliest Edited', basicInfo: 'Basic Information', basicInfoDescription: 'Set the pipeline name, icon and description', aiCapabilities: 'AI', triggerConditions: 'Trigger', safetyControls: 'Safety', outputProcessing: 'Output', nameRequired: 'Name cannot be empty', descriptionRequired: 'Description cannot be empty', createSuccess: 'Created successfully. Please edit pipeline parameters', createError: 'Creation failed: ', saveSuccess: 'Saved successfully', saveError: 'Save failed: ', copySuffix: ' Copy', deleteConfirmation: 'Are you sure you want to delete this pipeline? Bots bound to this pipeline will not work.', defaultPipelineCannotDelete: 'Default pipeline cannot be deleted', deleteSuccess: 'Deleted successfully', deleteError: 'Delete failed: ', copyConfirmTitle: 'Confirm Copy', copyConfirmation: 'Are you sure you want to copy this pipeline? This will create a new pipeline with all configurations.', unsavedChanges: 'You have unsaved changes', dangerZone: 'Danger Zone', dangerZoneDescription: 'Irreversible and destructive actions', deletePipelineAction: 'Delete this pipeline', deletePipelineHint: 'Once deleted, bots bound to this pipeline will stop working.', copyPipelineAction: 'Copy this pipeline', copyPipelineHint: 'Create a new pipeline with all configurations duplicated.', extensions: { title: 'Extensions', loadError: 'Failed to load plugins', saveSuccess: 'Saved successfully', saveError: 'Save failed', noPluginsAvailable: 'No plugins available', disabled: 'Disabled', noPluginsSelected: 'No plugins selected', addPlugin: 'Add Plugin', selectPlugins: 'Select Plugins', pluginsTitle: 'Plugins', mcpServersTitle: 'MCP Servers', noMCPServersSelected: 'No MCP servers selected', addMCPServer: 'Add MCP Server', selectMCPServers: 'Select MCP Servers', toolCount: '{{count}} tools', noPluginsInstalled: 'No installed plugins', noMCPServersConfigured: 'No configured MCP servers', selectAll: 'Select All', enableAllPlugins: 'Enable All Plugins', enableAllMCPServers: 'Enable All MCP Servers', allPluginsEnabled: 'All plugins enabled', allMCPServersEnabled: 'All MCP servers enabled', }, debugDialog: { title: 'Pipeline Chat', selectPipeline: 'Select Pipeline', sessionType: 'Session Type', privateChat: 'Private Chat', groupChat: 'Group Chat', send: 'Send', reset: 'Reset Conversation', inputPlaceholder: 'Send {{type}} message...', noMessages: 'No messages', userMessage: 'User', botMessage: 'Bot', sendFailed: 'Send failed', resetSuccess: 'Conversation reset successfully', resetFailed: 'Reset failed', loadMessagesFailed: 'Failed to load messages', loadPipelinesFailed: 'Failed to load pipelines', atTips: 'Mention the bot', streaming: 'Streaming', streamOutput: 'Stream', connected: 'WebSocket connected', disconnected: 'WebSocket disconnected', connectionError: 'WebSocket connection error', connectionFailed: 'WebSocket connection failed', notConnected: 'WebSocket not connected, please try again later', imageUploadFailed: 'Image upload failed', reply: 'Reply', replyTo: 'Reply to', showMarkdown: 'Show Markdown', showRaw: 'Show Raw', allMembers: 'All Members', file: 'File', voice: 'Voice', uploadImage: 'Upload Image', uploading: 'Uploading...', }, monitoring: { title: 'Dashboard', description: 'View execution logs and errors for this pipeline (last 24 hours)', detailedLogs: 'Detailed Logs', }, }, knowledge: { title: 'Knowledge', createKnowledgeBase: 'Create Knowledge Base', selectFromSidebar: 'Select a knowledge base from the sidebar', editKnowledgeBase: 'Edit Knowledge Base', selectKnowledgeBase: 'Select Knowledge Base', selectKnowledgeBases: 'Select Knowledge Bases', addKnowledgeBase: 'Add Knowledge Base', noKnowledgeBaseSelected: 'No knowledge bases selected', empty: 'Empty', editDocument: 'Documents', description: 'Configuring knowledge bases for improved LLM responses', metadata: 'Metadata', documents: 'Documents', kbNameRequired: 'Knowledge base name cannot be empty', kbDescriptionRequired: 'Knowledge base description cannot be empty', embeddingModelUUIDRequired: 'Embedding model cannot be empty', daysAgo: 'days ago', today: 'Today', kbName: 'Knowledge Base Name', kbDescription: 'Knowledge Base Description', topK: 'Top K', topKRequired: 'Top K cannot be empty', topKMax: 'Top K maximum value is 30', topKdescription: 'Used to specify the number of relevant documents to retrieve, ranging from 1 to 30.', defaultDescription: 'A knowledge base', embeddingModelUUID: 'Embedding Model', selectEmbeddingModel: 'Select Embedding Model', embeddingModelDescription: 'Used to vectorize the text, you can configure it in the Models page', updateTime: 'Updated ', cannotChangeEmbeddingModel: 'Knowledge base created cannot be modified embedding model', updateKnowledgeBaseSuccess: 'Knowledge base updated successfully', updateKnowledgeBaseFailed: 'Knowledge base update failed: ', documentsTab: { name: 'Name', status: 'Status', noResults: 'No documents', dragAndDrop: 'Drag and drop files here or click to upload', uploading: 'Uploading...', supportedFormats: 'Supports PDF, Word, TXT, Markdown, HTML, ZIP and other document formats', uploadSuccess: 'File uploaded successfully!', uploadError: 'File upload failed: ', uploadingFile: 'Uploading file...', fileSizeExceeded: 'File size exceeds 10MB limit. Please split into smaller files.', actions: 'Actions', delete: 'Delete File', fileDeleteSuccess: 'File deleted successfully', fileDeleteFailed: 'File deletion failed: ', processing: 'Processing', completed: 'Completed', failed: 'Failed', selectParser: 'Select Parser', 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 โ†’', confirmUpload: 'Upload', cancelUpload: 'Cancel', }, deleteKnowledgeBaseConfirmation: 'Are you sure you want to delete this knowledge base? All documents in this knowledge base will be deleted.', retrieve: 'Retrieve Test', retrieveTest: 'Retrieve Test', query: 'Query', queryPlaceholder: 'Enter query text...', distance: 'Distance', content: 'Content', fileName: 'File Name', noResults: 'No results', retrieveError: 'Retrieve failed: ', unknownEngine: 'Unknown Engine', knowledgeEngine: 'Knowledge Engine', knowledgeEngineRequired: 'Knowledge engine is required', selectKnowledgeEngine: 'Select Knowledge Engine', builtInEngine: 'Built-in Engine', cannotChangeKnowledgeEngine: 'Knowledge engine cannot be changed after creation', basicInfo: 'Basic Information', basicInfoDescription: 'Set the knowledge base name, icon and description', engineSettings: 'Engine Settings', engineSettingsDescription: 'Configuration for the selected knowledge engine', engineSettingsReadonly: 'read-only in edit mode', retrievalSettings: 'Retrieval Settings', retrievalSettingsDescription: 'Configure how documents are retrieved from this knowledge base', dangerZone: 'Danger Zone', dangerZoneDescription: 'Irreversible and destructive actions', deleteKbAction: 'Delete this knowledge base', deleteKbHint: 'Once deleted, all documents and data in this knowledge base will be permanently removed.', noEnginesAvailable: 'No knowledge base engines available', installEngineHint: 'Please install a "Knowledge Engine" plugin first', createKnowledgeBaseFailed: 'Failed to create knowledge base: ', loadKnowledgeBaseFailed: 'Failed to load knowledge base: ', deleteKnowledgeBaseFailed: 'Failed to delete knowledge base: ', getKnowledgeBaseListError: 'Failed to get knowledge base list: ', embeddingModel: 'Embedding Model', embeddingModelRequired: 'Embedding model is required for this engine', addExternal: 'Add External Knowledge Base', createExternalSuccess: 'External knowledge base created successfully', updateExternalSuccess: 'External knowledge base updated successfully', deleteExternalSuccess: 'External knowledge base deleted successfully', retriever: 'Retriever', selectRetriever: 'Select a retriever...', retrieverConfiguration: 'Retriever Configuration', retrieverInstallInfo: 'You can install Knowledge Retriever plugins from', retrieverMarketLink: 'here', migration: { title: 'Knowledge Base Migration', description: 'The new version has refactored the knowledge base into a plugin-based architecture, unifying built-in and external knowledge bases as "Knowledge Engine" plugins. Migration of legacy knowledge base data is required. Your old data has been automatically backed up in the database.', detected: 'Found {{total}} knowledge base(s) to migrate ({{internal}} internal, {{external}} external).', startWithInstall: 'Auto-install Plugin & Migrate', startDataOnly: 'Migrate Data Only', dataOnlyHint: '"Migrate Data Only" is for offline/intranet environments. Please install the corresponding plugin manually after migration.', dismiss: 'Discard Original Data', running: 'Migrating knowledge bases, please wait...', success: 'Knowledge base migration completed', error: 'Knowledge base migration failed: ', dismissError: 'Operation failed', retry: 'Retry', }, }, register: { title: 'Initialize LangBot ๐Ÿ‘‹', description: 'This is your first time starting LangBot', adminAccountNote: 'The account you use here will be set as the administrator account', register: 'Register', initWithSpace: 'Initialize with Space', spaceRecommended: 'Recommended: Use official stable model APIs and cloud services', spaceInfoTip1: 'Space provides unified account authentication services without uploading any of your sensitive information.', spaceInfoTip2: 'Logging in with a Space account gives you access to LangBot Models and other cloud services, including free model call credits to help you get started quickly.', spaceInfoTip3: 'Your login method does not affect other features. You can configure and use models from other sources at any time.', registerLocal: 'Register local account', registerWithPassword: 'Register with email and password', initSuccess: 'Initialization successful, please login', initFailed: 'Initialization failed: ', }, resetPassword: { title: 'Reset Password ๐Ÿ”', description: 'Enter your recovery key and new password to reset your account password', recoveryKey: 'Recovery Key', recoveryKeyDescription: 'Stored in `system.recovery_key` of config file `data/config.yaml`', newPassword: 'New Password', enterRecoveryKey: 'Enter recovery key', enterNewPassword: 'Enter new password', recoveryKeyRequired: 'Recovery key cannot be empty', newPasswordRequired: 'New password cannot be empty', resetPassword: 'Reset Password', resetting: 'Resetting...', resetSuccess: 'Password reset successfully, please login', resetFailed: 'Password reset failed, please check your email and recovery key', backToLogin: 'Back to Login', }, embedding: { description: 'Manage Embedding models for text vectorization', createModel: 'Create Embedding Model', editModel: 'Edit Embedding Model', getModelListError: 'Failed to get Embedding model list: ', embeddingModels: 'Embedding', extraParametersDescription: 'Will be attached to the request body, such as encoding_format, dimensions, etc.', }, llm: { description: 'Manage LLM models for conversation generation', llmModels: 'LLM', extraParametersDescription: 'Will be attached to the request body, such as max_tokens, temperature, top_p, etc.', }, version: { newVersionAvailable: 'New Version Available', viewUpdateGuide: 'View Update Guide', noReleaseNotes: 'No release notes available', }, account: { settings: 'Account Settings', setPassword: 'Set Password', passwordSetSuccess: 'Password set successfully', passwordStatus: 'Local Password', passwordSet: 'Set', passwordNotSet: 'Not Set', passwordSetDescription: 'Password is set, you can login with email and password', spaceStatus: 'Space Account', spaceBound: 'Bound', spaceNotBound: 'Not Bound', spaceBoundDescription: 'Space account bound, official model APIs and cloud services available', bindSpace: 'Bind Space Account', bindSpaceDescription: 'Bind to use official model APIs and cloud services', bindSpaceButton: 'Bind', bindSpaceConfirmTitle: 'Confirm Binding', bindSpaceConfirmDescription: 'You are about to bind your local instance to a Space account', bindSpaceWarning: 'After binding, your login email will be changed from {{localEmail}} to the Space account email.', bindSpaceSuccess: 'Space account bound successfully', bindSpaceFailed: 'Failed to bind Space account', bindSpaceInvalidState: 'Invalid bind request. Please try again from account settings.', setPasswordHint: 'Set a password to login with email and password', spaceEmailMismatch: 'Space login email does not match the local account email', }, monitoring: { title: 'Dashboard', description: 'Monitor bot activities, LLM calls, and system performance', overview: 'Overview', totalMessages: 'Total Messages', llmCallsCount: 'LLM Calls', modelCallsCount: 'Model Calls', successRate: 'Success Rate', activeSessions: 'Active Sessions', last24Hours: 'Last 24 hours', filters: { title: 'Filters', bot: 'Bot', pipeline: 'Pipeline', allBots: 'All Bots', selectBot: 'Select Bot', allPipelines: 'All Pipelines', selectPipeline: 'Select Pipeline', loading: 'Loading...', timeRange: 'Time Range', customRange: 'Custom Range', from: 'From', to: 'To', apply: 'Apply', reset: 'Reset Filters', lastHour: 'Last 1 hour', last6Hours: 'Last 6 hours', last24Hours: 'Last 24 hours', last7Days: 'Last 7 days', last30Days: 'Last 30 days', }, tabs: { messages: 'Message Records', llmCalls: 'LLM Calls', embeddingCalls: 'Embedding Calls', modelCalls: 'Model Calls', feedback: 'User Feedback', sessions: 'Session Analysis', errors: 'Error Logs', }, messageList: { timestamp: 'Timestamp', bot: 'Bot', pipeline: 'Pipeline', message: 'Message', sessionId: 'Session ID', status: 'Status', actions: 'Actions', viewDetails: 'View Details', copyId: 'Copy ID', noMessages: 'No messages found', noMessagesDescription: 'Try adjusting your filters or check back later', loading: 'Loading messages...', loadMore: 'Load More', autoRefresh: 'Auto Refresh', platform: 'Role', user: 'User', level: 'Level', runner: 'Runner', viewConversation: 'View Conversation', }, llmCalls: { title: 'LLM Calls', model: 'Model', tokens: 'Tokens', duration: 'Duration', cost: 'Cost', noData: 'No LLM calls found', inputTokens: 'Input Tokens', outputTokens: 'Output Tokens', totalTokens: 'Total Tokens', avgDuration: 'Avg Duration', calls: 'Calls', }, embeddingCalls: { title: 'Embedding Calls', model: 'Model', tokens: 'Tokens', duration: 'Duration', noData: 'No embedding calls found', promptTokens: 'Prompt Tokens', totalTokens: 'Total Tokens', inputCount: 'Input Count', knowledgeBase: 'Knowledge Base', queryText: 'Query', }, modelCalls: { title: 'Model Calls', llmModel: 'LLM', embeddingModel: 'Embedding', embeddingCall: 'Embedding', retrieveCall: 'Retrieve', noData: 'No model calls found', }, sessions: { sessionId: 'Session ID', messageCount: 'Messages', duration: 'Duration', lastActivity: 'Last Activity', noSessions: 'No sessions found', startTime: 'Start Time', messageStats: 'Message Statistics', totalMessages: 'Total Messages', successMessages: 'Successful', errorMessages: 'Failed', llmStats: 'LLM Statistics', noData: 'Session not found', }, errors: { title: 'Errors', errorType: 'Error Type', errorMessage: 'Error Message', occurredAt: 'Occurred At', noErrors: 'No errors found', stackTrace: 'Stack Trace', }, feedback: { title: 'User Feedback', totalFeedback: 'Total Feedback', totalLikes: 'Likes', totalDislikes: 'Dislikes', satisfactionRate: 'Satisfaction Rate', like: 'Like', dislike: 'Dislike', noFeedback: 'No feedback yet', noFeedbackDescription: 'User feedback will appear here', feedbackList: 'Feedback List', feedbackContent: 'Feedback Content', contextInfo: 'Context Info', userId: 'User ID', messageId: 'Message ID', streamId: 'Related Query ID', inaccurateReasons: 'Inaccurate Reasons', platform: 'Platform', exportFeedback: 'Export Feedback', }, queries: { title: 'Queries', }, messageDetails: { noData: 'No LLM calls or errors for this query', }, queryVariables: { title: 'Query Variables', }, trafficChart: { title: 'Traffic Overview', messages: 'Messages', llmCalls: 'LLM Calls', noData: 'No traffic data available', }, viewMonitoring: 'View Monitoring', refreshData: 'Refresh Data', exportData: 'Export Data', export: { title: 'Export Data', exporting: 'Exporting...', messages: 'Messages', llmCalls: 'LLM Calls', embeddingCalls: 'Embedding Calls', errors: 'Error Logs', sessions: 'Sessions', feedback: 'User Feedback', }, }, storageAnalysis: { title: 'Storage Analysis', description: 'Inspect storage usage and cleanup candidates', openDialog: 'View Analysis', dialogTitle: 'Storage Analysis', generatedAt: 'Generated at {{time}}', loading: 'Loading...', refresh: 'Refresh', totalSize: 'Total size', binaryStorage: 'Binary storage', uploadCleanup: 'Expired uploads', logCleanup: 'Expired logs', sections: 'Storage sections', monitoringTables: 'Monitoring tables', runtimeTasks: 'Runtime tasks', cleanupPolicy: 'Cleanup policy', uploadRetention: 'Upload retention', logRetention: 'Log retention', databaseType: 'Database type', days: 'days', missing: 'Missing', expiredUploads: 'Expired uploads', expiredLogs: 'Expired logs', noExpiredUploads: 'No expired uploaded files', noExpiredLogs: 'No expired log files', sectionNames: { database: 'Database', logs: 'Logs', storage: 'Uploaded files', vector_store: 'Vector store', plugins: 'Plugins', mcp: 'MCP', temp: 'Temporary files', }, }, limitation: { maxBotsReached: 'Maximum number of bots ({{max}}) reached. Please remove an existing bot before creating a new one.', 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.', }, wizard: { sidebarDescription: 'Create a bot with guided steps', loading: 'Loading wizard...', loadError: 'Failed to load wizard data', skip: 'Skip', skipConfirmMessage: 'You can re-enter the Quick Start wizard from the account menu later, or create a bot manually.', skipConfirmOk: 'OK', prev: 'Previous', next: 'Next', finish: 'Create & Deploy', confirmCreateBot: 'Confirm, Create Bot', createSuccess: 'Pipeline created and linked to bot successfully!', botCreateSuccess: 'Bot created successfully!', botSaveSuccess: 'Bot configuration saved and enabled!', createError: 'Failed to create resources', spaceAuthError: 'Failed to initiate Space authorization', skipSaveError: 'Failed to save skip status. Please try again.', completeSaveError: 'Failed to save completion status. Please try again.', step: { platform: 'Platform', botConfig: 'Bot Setup', aiEngine: 'AI Engine', done: 'Done', }, platform: { title: 'Select a Platform', description: 'Choose the messaging platform your bot will connect to.', }, botConfig: { title: 'Configure Your Bot', description: 'Set up your bot and verify it works before continuing.', saveBot: 'Save & Enable Bot', resaveBot: 'Re-save Configuration', botSaved: 'Bot configuration saved and enabled. Check the logs to verify the connection.', logsTitle: 'Bot Logs', logsDescription: 'Monitor bot activity to verify the platform connection is working.', }, aiEngine: { title: 'Select an AI Engine', description: "Choose the AI engine that will power your bot's intelligence.", }, spaceBanner: { message: 'Connect to LangBot Space for free trial model credits and zero-config instant setup!', action: 'Authorize with Space', }, config: { botInfo: 'Bot Information', botNamePlaceholder: 'Enter bot name', botDescPlaceholder: 'Enter bot description (optional)', platformConfig: '{{platform}} Configuration', aiConfig: '{{engine}} Configuration', }, done: { title: 'All Set!', description: 'Your bot has been created and connected to the AI pipeline. You can now manage it from the workbench.', backToWorkbench: 'Back to Workbench', }, }, workflows: { title: 'Workflows', description: 'Create and manage visual workflows for complex message processing logic', createWorkflow: 'Create Workflow', selectFromSidebar: 'Select a workflow from the sidebar', editWorkflow: 'Edit Workflow', newWorkflow: 'New Workflow', getWorkflowListError: 'Failed to get workflow list: ', workflowName: 'Workflow Name', workflowDescription: 'Workflow Description', workflowNameRequired: 'Workflow name is required', defaultDescription: 'A workflow', getWorkflowError: 'Failed to get workflow: ', loadError: 'Failed to load workflow', saveSuccess: 'Saved successfully', saveError: 'Failed to save: ', createSuccess: 'Workflow created successfully', createError: 'Failed to create: ', deleteSuccess: 'Deleted successfully', deleteError: 'Failed to delete: ', deleteConfirmation: 'Are you sure you want to delete this workflow?', copySuccess: 'Copied successfully', copyError: 'Failed to copy: ', export: 'Export', import: 'Import', exportSuccess: 'Workflow exported', importSuccess: 'Workflow imported', importError: 'Import failed: Invalid file format', publish: 'Publish', publishSuccess: 'Published successfully', publishError: 'Failed to publish', configuration: 'Configuration', executions: 'Executions', editor: 'Editor', debugChat: 'Debug Chat', basicInfo: 'Basic Info', basicInfoDesc: 'Set workflow name, icon and description', basicInfoDescription: 'Set workflow name and description', dangerZone: 'Danger Zone', dangerZoneDesc: 'Irreversible operations', dangerZoneDescription: 'Irreversible operations', deleteWorkflowAction: 'Delete this workflow', deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.', deleteWorkflow: 'Delete Workflow', deleteConfirm: 'Confirm Delete', deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.', // Form component name: 'Name', namePlaceholder: 'Enter workflow name', descriptionPlaceholder: 'Enter workflow description (optional)', enabled: 'Enabled', enabledDesc: 'When enabled, the workflow can be triggered for execution', loading: 'Loading...', info: 'Workflow Info', uuid: 'UUID', version: 'Version', createdAt: 'Created At', updatedAt: 'Updated At', // Executions tab totalExecutions: '{{count}} execution(s) total', statistics: 'Monitoring Logs', monitoringDescription: 'View run history and errors for this workflow (last 24 hours)', monitoringTotalMessages: 'Total Messages', monitoringErrorLogs: 'Error Logs', successfulCount: '{{count}} successful', successRate: 'Success Rate', averageDuration: 'Avg. Duration', perExecution: 'per execution', failedExecutions: 'Failed', lastExecution: 'Last run', filterByStatus: 'Filter by status', allStatuses: 'All statuses', manualTrigger: 'Manual Trigger', executionId: 'Execution ID', status: 'Status', triggerType: 'Trigger Type', startedAt: 'Started At', duration: 'Duration', noExecutions: 'No executions yet', executionDetails: 'Execution Details', error: 'Error', nodeExecutions: 'Node Executions', result: 'Result', 'status.pending': 'Pending', 'status.running': 'Running', 'status.completed': 'Completed', 'status.failed': 'Failed', 'status.cancelled': 'Cancelled', // Editor component translations nodePalette: 'Node Palette', properties: 'Properties', zoomIn: 'Zoom In', zoomOut: 'Zoom Out', fitView: 'Fit View', unsavedChanges: 'Unsaved changes', paste: 'Paste', deleted: 'Deleted', nothingToCopy: 'No nodes selected to copy', nothingToPaste: 'Clipboard is empty', copied: 'Copied {{count}} node(s)', pasted: 'Pasted {{count}} node(s)', nodesSelected: '{{count}} node(s) selected', edgesSelected: '{{count}} edge(s) selected', // Node palette searchNodes: 'Search nodes...', loadingNodeTypes: 'Loading node types...', noNodesFound: 'No matching nodes found', clearSearch: 'Clear search', dragToAdd: 'Drag nodes to add to canvas', // Property panel selectNodeOrEdge: 'Select a node or edge', selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties', edgeProperties: 'Edge Properties', nodeProperties: 'Node Properties', condition: 'Condition', hasCondition: 'Set', conditionPlaceholder: 'Enter condition expression, e.g. output.success == true', conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.', deleteEdge: 'Delete Edge', deleteEdgeConfirm: 'Confirm Delete Edge', deleteEdgeConfirmDesc: 'This edge will be permanently removed.', nodeLabel: 'Node Label', nodeLabelPlaceholder: 'Enter node display name', nodeId: 'Node ID', inputOutputVariables: 'Input/Output Variables', inputs: 'Inputs', outputs: 'Outputs', availableVariables: 'Available Variables', globalVariables: 'Global Variables', messageContent: 'Message Content', messageSender: 'Sender', platform: 'Platform', sessionId: 'Session ID', timestamp: 'Timestamp', nodeConfig: 'Node Configuration', noConfigOptions: 'No configuration options for this node type', deleteNode: 'Delete Node', deleteNodeConfirm: 'Confirm Delete Node', deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.', // Node inputs/outputs i18n (for port labels) nodeInputs: { // Common inputs input: 'Input', message: 'Message', text: 'Text', query: 'Query', data: 'Data', condition: 'Condition', value: 'Value', // Trigger inputs content: 'Content', context: 'Context', body: 'Request Body', variables: 'Variables', items: 'Items', arguments: 'Arguments', // AI/Process inputs question: 'Question', parameters: 'Parameters', key: 'Key', payload: 'Payload', input_value: 'Input Value', conversation_id: 'Conversation ID', // Control inputs case_1: 'Case 1', case_2: 'Case 2', branch_1: 'Branch 1', branch_2: 'Branch 2', // Action inputs notification_id: 'Notification ID', // Integration inputs key_template: 'Key Template', hash_field: 'Hash Field', server_name: 'Server Name', tool_name: 'Tool Name', arguments_template: 'Arguments Template', scope: 'Scope', }, // Data type labels 'type.string': 'String', 'type.object': 'Object', 'type.array': 'Array', 'type.boolean': 'Boolean', 'type.number': 'Number', 'type.any': 'Any', 'type.datetime': 'DateTime', nodes: { trigger: 'Triggers', triggerDescription: 'Starting nodes for workflows', messageTrigger: 'Message Trigger', messageTriggerDescription: 'Triggered when a message is received', scheduleTrigger: 'Schedule Trigger', scheduleTriggerDescription: 'Triggered on a schedule', cronTrigger: 'Cron Trigger', cronTriggerDescription: 'Trigger workflow on a scheduled time', webhookTrigger: 'Webhook Trigger', webhookTriggerDescription: 'Triggered via HTTP request', eventTrigger: 'Event Trigger', eventTriggerDescription: 'Triggered on system events', process: 'AI/Process', processDescription: 'Data processing nodes', aiProcess: 'AI Processing', aiProcessDescription: 'Process messages using AI models', llmCall: 'LLM Call', llmCallDescription: 'Invoke large language model for conversation or generation', codeProcess: 'Code Processing', codeProcessDescription: 'Execute custom code', codeExecutor: 'Code Executor', codeExecutorDescription: 'Execute Python/JavaScript code', templateProcess: 'Template Processing', templateProcessDescription: 'Format output using templates', httpRequest: 'HTTP Request', httpRequestDescription: 'Send HTTP requests', dataTransform: 'Data Transform', dataTransformDescription: 'Transform data format', questionClassifier: 'Question Classifier', questionClassifierDescription: 'Classify user questions into predefined categories using LLM', parameterExtractor: 'Parameter Extractor', parameterExtractorDescription: 'Extract structured parameters from text using LLM', knowledgeRetrieval: 'Knowledge Retrieval', knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base', textTemplate: 'Text Template', textTemplateDescription: 'Generate text using templates with variable interpolation', jsonTransform: 'JSON Transform', jsonTransformDescription: 'Transform JSON data using expressions', dataAggregator: 'Data Aggregator', dataAggregatorDescription: 'Aggregate data from multiple sources', textSplitter: 'Text Splitter', textSplitterDescription: 'Split text into smaller chunks', variableAssignment: 'Variable Assignment', variableAssignmentDescription: 'Assign values to workflow variables', control: 'Control Flow', controlDescription: 'Flow control nodes', condition: 'Condition Branch', conditionDescription: 'Branch based on conditions', switch: 'Switch', switchDescription: 'Multi-way branching', loop: 'Loop', loopDescription: 'Repeat execution', iterator: 'Iterator', iteratorDescription: 'Iterate over array elements', parallel: 'Parallel', parallelDescription: 'Execute multiple branches in parallel', wait: 'Wait', waitDescription: 'Wait for specified time', delay: 'Delay', delayDescription: 'Wait for a specified time', merge: 'Merge', mergeDescription: 'Merge multiple branches', variableAggregator: 'Variable Aggregator', variableAggregatorDescription: 'Aggregate variable outputs from multiple branches', action: 'Actions', actionDescription: 'Action execution nodes', sendMessage: 'Send Message', sendMessageDescription: 'Send message to platform', replyMessage: 'Reply Message', replyMessageDescription: 'Reply to the message that triggered the workflow', storeData: 'Store Data', storeDataDescription: 'Store data to database', callPipeline: 'Call Pipeline', callPipelineDescription: 'Call an existing Pipeline', setVariable: 'Set Variable', setVariableDescription: 'Set context variable', openingStatement: 'Opening Statement', openingStatementDescription: 'Provide conversation opener and suggested questions', end: 'End', endDescription: 'Mark the end of workflow execution', log: 'Log', logDescription: 'Record log information', integration: 'Integration', integrationDescription: 'Third-party platform integration nodes', difyWorkflow: 'Dify Workflow', difyWorkflowDescription: 'Call Dify platform workflow', difyKnowledgeQuery: 'Dify Knowledge Query', difyKnowledgeQueryDescription: 'Query Dify knowledge base', n8nWorkflow: 'N8n Workflow', n8nWorkflowDescription: 'Call n8n workflow', langflowFlow: 'Langflow Flow', langflowFlowDescription: 'Call Langflow flow', cozeBot: 'Coze Bot', cozeBotDescription: 'Call Coze Bot', // Data & Tools integration nodes databaseQuery: 'Database Query', databaseQueryDescription: 'Execute database queries', redisOperation: 'Redis Operation', redisOperationDescription: 'Perform Redis cache operations', mcpTool: 'MCP Tool', mcpToolDescription: 'Invoke an MCP tool', memoryStore: 'Memory Store', memoryStoreDescription: 'Store and retrieve data from workflow memory', }, executionHistory: { title: 'Execution History', noExecutions: 'No executions yet', status: 'Status', startTime: 'Start Time', duration: 'Duration', running: 'Running', completed: 'Completed', failed: 'Failed', cancelled: 'Cancelled', viewDetails: 'View Details', cancel: 'Cancel Execution', retry: 'Retry', nodeResults: 'Node Execution Results', }, versions: { title: 'Version History', current: 'Current Version', rollback: 'Rollback to this version', rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.', rollbackSuccess: 'Rollback successful', rollbackError: 'Failed to rollback: ', }, // Debug and monitoring debug: { title: 'Debug', mode: 'Debug Mode', panel: 'Debug Panel', start: 'Start Debug', pause: 'Pause', resume: 'Resume', step: 'Step', stop: 'Stop', context: 'Debug Context', messageContent: 'Simulated Message', messageContentPlaceholder: 'Enter the message content to simulate', senderId: 'Sender ID', senderIdPlaceholder: 'Sender unique identifier', senderName: 'Sender Name', senderNamePlaceholder: 'Sender display name', platform: 'Platform', platformPlaceholder: 'e.g. qq, wechat, telegram', conversationId: 'Conversation ID', conversationIdPlaceholder: 'Conversation unique identifier', isGroup: 'Group Chat', customVariables: 'Custom Variables', customVariablesDesc: 'Add custom variables for debugging', variableKey: 'Variable Name', variableValue: 'Variable Value', addVariable: 'Add Variable', variables: 'Watched Variables', watchedVariables: 'Watched Variables', noWatchedVariables: 'No watched variables', addWatchVariable: 'Add Watch', nodeStates: 'Node States', nodeOutputs: 'Node Outputs', noNodeOutputs: 'No node outputs yet', toggleBreakpoint: 'Toggle Breakpoint', clearBreakpoints: 'Clear All Breakpoints', breakpointSet: 'Breakpoint set', breakpointRemoved: 'Breakpoint removed', logs: 'Debug Logs', noLogs: 'No logs yet', clearLogs: 'Clear Logs', autoScroll: 'Auto Scroll', logEntries: 'log entries', resetContext: 'Reset Context', // Debug execution messages starting: 'Starting debug execution...', started: 'Debug execution started (ID: {{id}})', startError: 'Failed to start debug', completed: 'Debug execution completed', unknownError: 'Unknown error', paused: 'Execution paused', pauseError: 'Failed to pause', resumed: 'Execution resumed', resumeError: 'Failed to resume', steppedTo: 'Stepped to node: {{node}}', stepError: 'Failed to step', stopped: 'Debug stopped', stopError: 'Failed to stop', }, debugMode: 'Debug Mode', debugPanel: 'Debug Panel', startDebug: 'Start Debug', pauseDebug: 'Pause', resumeDebug: 'Resume', stepDebug: 'Step', stopDebug: 'Stop', debugContext: 'Debug Context', simulatedMessage: 'Simulated Message', simulatedMessagePlaceholder: 'Enter the message content to simulate', senderId: 'Sender ID', senderIdPlaceholder: 'Sender unique identifier', senderName: 'Sender Name', senderNamePlaceholder: 'Sender display name', conversationId: 'Conversation ID', conversationIdPlaceholder: 'Conversation unique identifier', isGroup: 'Group Chat', customVariables: 'Custom Variables', addVariable: 'Add Variable', variableName: 'Variable Name', variableValue: 'Variable Value', watchedVariables: 'Watched Variables', addWatchVariable: 'Add Watch', nodeStates: 'Node States', breakpoints: 'Breakpoints', toggleBreakpoint: 'Toggle Breakpoint', breakpointSet: 'Breakpoint set', breakpointRemoved: 'Breakpoint removed', debugLogs: 'Debug Logs', noLogs: 'No logs yet', clearLogs: 'Clear Logs', autoScroll: 'Auto Scroll', debugState: { idle: 'Idle', running: 'Running', paused: 'Paused', completed: 'Completed', error: 'Error', }, nodeStatus: { pending: 'Pending', running: 'Running', completed: 'Completed', failed: 'Failed', skipped: 'Skipped', }, debugDialog: { title: 'Workflow Chat', selectWorkflow: 'Select Workflow', sessionType: 'Session Type', privateChat: 'Private Chat', groupChat: 'Group Chat', send: 'Send', reset: 'Reset Conversation', inputPlaceholder: 'Send {{type}} message...', noMessages: 'No messages', userMessage: 'User', botMessage: 'Bot', sendFailed: 'Send failed', resetSuccess: 'Conversation reset successfully', resetFailed: 'Reset failed', loadMessagesFailed: 'Failed to load messages', loadWorkflowsFailed: 'Failed to load workflows', atTips: 'Mention bot', streaming: 'Streaming', streamOutput: 'Stream', connected: 'WebSocket connected', disconnected: 'WebSocket disconnected', connectionError: 'WebSocket connection error', connectionFailed: 'WebSocket connection failed', notConnected: 'WebSocket not connected, please try again later', imageUploadFailed: 'Image upload failed', reply: 'Reply', replyTo: 'Reply to', showMarkdown: 'Render', showRaw: 'Raw', allMembers: 'All Members', file: 'File', voice: 'Voice', uploadImage: 'Upload Image', uploading: 'Uploading...', }, // Execution history and monitoring filterByDate: 'Filter by Date', allTime: 'All Time', today: 'Today', lastWeek: 'Last Week', lastMonth: 'Last Month', showingExecutions: 'Showing {{shown}} / {{total}} executions', rerun: 'Rerun', rerunExecution: 'Rerun Execution', logs: 'Logs', details: 'Details', completedAt: 'Completed At', noNodeExecutions: 'No node executions yet', // Node config field labels (used by DynamicFormComponent) nodeConfigFields: { // trigger.py - MessageTriggerNode conditions: 'Trigger Conditions', keyword_filter: 'Keyword Filter', regex_filter: 'Regex Filter', min_length: 'Min Length', max_length: 'Max Length', require_mention: 'Require Mention', respond_rules: 'Group Respond Rules', access_control: 'Access Control', // trigger.py - CronTriggerNode cron: 'Cron Expression', timezone: 'Timezone', // trigger.py - WebhookTriggerNode path: 'Webhook Path', allowed_methods: 'Allowed HTTP Methods', content_type: 'Content-Type', auth_type: 'Authentication Type', auth_key: 'Auth Key', validation: 'Request Validation', timeout: 'Timeout', // trigger.py - EventTriggerNode event_types: 'Event Types', filter: 'Event Filter', debounce_ms: 'Debounce Time', // process.py - LLMCallNode model: 'Model', prompt_template: 'Prompt Template', system_prompt: 'System Prompt', temperature: 'Temperature', top_p: 'Top P', frequency_penalty: 'Frequency Penalty', presence_penalty: 'Presence Penalty', max_tokens: 'Max Tokens', stop_sequences: 'Stop Sequences', seed: 'Random Seed', stream: 'Stream Output', use_conversation_history: 'Use Conversation History', // process.py - CodeExecutorNode language: 'Programming Language', code: 'Code', // process.py - HTTPRequestNode url: 'Request URL', method: 'Request Method', auth_config: 'Auth Configuration', // process.py - DataTransformNode transform_type: 'Transform Type', template: 'Template', expression: 'Expression', output_type: 'Output Type', // process.py - QuestionClassifierNode categories: 'Categories', instruction: 'Instruction', // process.py - ParameterExtractorNode parameters: 'Parameter Definitions', // process.py - KnowledgeRetrievalNode knowledge_bases: 'Knowledge Bases', top_k: 'Top K Results', score_threshold: 'Score Threshold', search_method: 'Search Method', enable_citations: 'Enable Citations', // control.py - ConditionNode condition_type: 'Condition Type', condition_expression: 'Condition Expression', left_value: 'Left Value', operator: 'Comparison Operator', right_value: 'Right Value', // control.py - SwitchNode cases: 'Branch Cases', // control.py - LoopNode max_iterations: 'Max Iterations', break_condition: 'Break Condition', // control.py - IteratorNode parallel: 'Parallel Processing', max_concurrency: 'Max Concurrency', // control.py - ParallelNode branches: 'Branch Configuration', wait_all: 'Wait All', fail_fast: 'Fail Fast', // control.py - WaitNode duration: 'Duration', duration_type: 'Time Unit', // control.py - MergeNode merge_strategy: 'Merge Strategy', // control.py - VariableAggregatorNode variable_mappings: 'Variable Mappings', aggregation_mode: 'Aggregation Mode', // action.py - SendMessageNode target_type: 'Target Type', target_id: 'Target ID', platform: 'Platform', message_type: 'Message Type', // action.py - ReplyMessageNode reply_mode: 'Reply Mode', message_template: 'Message Template', long_text_processing: 'Long Text Processing', force_delay: 'Force Delay', // action.py - CallPipelineNode pipeline_uuid: 'Pipeline', inherit_context: 'Inherit Context', // action.py - StoreDataNode storage_type: 'Storage Type', ttl: 'TTL', key_prefix: 'Key Prefix', // action.py - SetVariableNode variable_name: 'Variable Name', variable_scope: 'Variable Scope', set_variable_operation: 'Operation Type', // action.py - OpeningStatementNode statement: 'Opening Statement', suggested_questions: 'Suggested Questions', show_suggestions: 'Show Suggestions', // action.py - EndNode output_format: 'Output Format', success_message: 'Success Message', // integration.py - DatabaseQueryNode connection_type: 'Database Type', connection_string: 'Connection String', query: 'SQL Query', query_type: 'Query Type', // integration.py - RedisOperationNode connection_url: 'Connection URL', operation: 'Operation Type', key_template: 'Key Template', hash_field: 'Hash Field', // integration.py - MCPToolNode server_name: 'Server Name', tool_name: 'Tool Name', arguments_template: 'Arguments Template', // integration.py - MemoryStoreNode scope: 'Scope', // integration.py - DifyWorkflowNode 'base-url': 'Base URL', 'api-key': 'API Key', 'app-type': 'App Type', // integration.py - DifyKnowledgeQueryNode dataset_id: 'Dataset ID', // integration.py - N8nWorkflowNode 'webhook-url': 'Webhook URL', // integration.py - LangflowFlowNode 'flow-id': 'Flow ID', // integration.py - CozeBotNode 'bot-id': 'Bot ID', 'api-base': 'API Base URL', }, // Node outputs i18n nodeOutputs: { // ===== Common Outputs ===== output: 'Output', result: 'Result', data: 'Data', error: 'Error', success: 'Success', // ===== Trigger Nodes ===== // trigger.py - MessageTriggerNode message: 'Message Content', sender: 'Sender', sender_id: 'Sender ID', sender_name: 'Sender Name', platform: 'Platform', conversation_id: 'Conversation ID', is_group: 'Is Group Chat', context: 'Full Message Context', event: 'Event', // trigger.py - CronTriggerNode timestamp: 'Trigger Time', trigger_time: 'Trigger Time', schedule: 'Trigger Schedule', cron_timestamp: 'Cron Timestamp', cron_schedule: 'Cron Schedule', cron_context: 'Cron Context', // trigger.py - WebhookTriggerNode body: 'Request Body', headers: 'Request Headers', query: 'Query Parameters', query_params: 'Query Parameters', method: 'Request Method', webhook_body: 'Webhook Body', webhook_headers: 'Webhook Headers', webhook_query: 'Webhook Query', webhook_method: 'Webhook Method', // trigger.py - EventTriggerNode event_type: 'Event Type', event_data: 'Event Data', event_timestamp: 'Event Timestamp', // process.py - LLMCallNode response: 'Model Response', usage: 'Token Usage Statistics', prompt: 'Prompt/Question', context_info: 'Context Information', // process.py - CodeExecutorNode console: 'Console Output', code_input: 'Code Input', code_output: 'Code Output', logs: 'Logs', // process.py - HTTPRequestNode status_code: 'Status Code', http_body: 'HTTP Body', http_headers: 'HTTP Headers', http_response: 'HTTP Response', response_headers: 'Response Headers', // process.py - DataTransformNode transform_input: 'Transform Input', transform_result: 'Transform Result', // process.py - QuestionClassifierNode category: 'Category Result', confidence: 'Confidence', all_scores: 'All Category Scores', scores: 'Scores', question: 'User Question', // process.py - ParameterExtractorNode parameters: 'Extracted Parameters', extraction_success: 'Extraction Success', extract_text: 'Input Text', missing: 'Missing Parameters', parsed: 'Parsed Result', // process.py - KnowledgeRetrievalNode documents: 'Retrieved Documents', citations: 'Citation Information', knowledge_context: 'Merged Context', knowledge_query: 'Retrieval Query', chunks: 'Text Chunks', text: 'Text', // control.py - ConditionNode true: 'True Branch Output', false: 'False Branch Output', condition_input: 'Condition Input', // control.py - SwitchNode matched_case: 'Matched Branch Output', default: 'Default Branch Output', switch_input: 'Switch Input', case_1: 'Case 1', case_2: 'Case 2', // control.py - LoopNode item: 'Current Item', index: 'Current Index', results: 'All Iteration Results', completed: 'Is Completed', loop_items: 'Items to Iterate', count: 'Count', // control.py - IteratorNode is_first: 'Is First', is_last: 'Is Last', iterator_array: 'Input Array', iterator_item: 'Current Element', iterator_index: 'Current Index', // control.py - ParallelNode errors: 'Error List', parallel_input: 'Parallel Input', parallel_results: 'All Branch Results', // control.py - WaitNode wait_input: 'Passthrough Input', wait_output: 'Passthrough Output', // control.py - MergeNode merged: 'Merged Result', merge_array: 'Array Result', merge_input_1: 'Input 1', merge_input_2: 'Input 2', merge_input_3: 'Input 3', merge_input_4: 'Input 4', branch_1: 'Branch 1 Output', branch_2: 'Branch 2 Output', // control.py - VariableAggregatorNode aggregated: 'Aggregated Variables', aggregator_variables: 'Variable Input', // action.py - SendMessageNode status: 'Send Status', message_id: 'Message ID', target: 'Target ID', execution_id: 'Execution ID', notification_id: 'Notification ID', // action.py - ReplyMessageNode reply_message: 'Reply Content', // action.py - CallPipelineNode pipeline_response: 'Pipeline Response', pipeline_result: 'Full Result', pipeline_query: 'Query Content', context_data: 'Context Data', // action.py - StoreDataNode store_status: 'Store Status', store_key: 'Store Key', store_value: 'Store Value', // action.py - SetVariableNode variable_value: 'Variable Value', variable_result: 'Set Variable Result', // action.py - OpeningStatementNode statement: 'Opening Statement', suggested_questions: 'Suggested Questions', suggestions: 'Suggestions', // action.py - EndNode workflow_output: 'Workflow Output', final_result: 'Final Result', // integration.py - DatabaseQueryNode query_results: 'Query Results', row_count: 'Affected/Returned Rows', query_success: 'Query Success', // integration.py - RedisOperationNode redis_result: 'Operation Result', redis_success: 'Operation Success', redis_key: 'Redis Key', redis_value: 'Redis Value', plugin_input: 'Plugin Input', // integration.py - MCPToolNode tool_result: 'Tool Execution Result', tool_success: 'Tool Call Success', mcp_arguments: 'Tool Arguments', // integration.py - MemoryStoreNode memory_result: 'Retrieved/Stored Value', memory_success: 'Operation Success', memory_value: 'Value to Store', // integration.py - DifyWorkflowNode answer: 'Dify Answer', dify_success: 'Call Success', dify_query: 'User Input/Query', dify_conversation_id: 'Conversation ID', // integration.py - DifyKnowledgeQueryNode search_results: 'Search Results', knowledge_base_query: 'Query Content', // integration.py - N8nWorkflowNode n8n_result: 'Workflow Execution Result', n8n_success: 'Call Success', n8n_payload: 'Workflow Input Data', // integration.py - LangflowFlowNode flow_result: 'Flow Execution Result', flow_success: 'Call Success', langflow_input: 'Input Content', // integration.py - CozeBotNode bot_answer: 'Bot Reply', bot_success: 'Call Success', coze_query: 'User Input/Query', coze_conversation_id: 'Conversation ID', bot_conversation_id: 'Conversation ID', // ===== Additional Keys ===== embedding: 'Embedding', dimensions: 'Dimensions', intent: 'Intent', entities: 'Entities', }, }, unifiedBinding: { bindingType: 'Binding Type', pipeline: 'Pipeline', workflow: 'Workflow', pipelineDescription: 'Process messages using traditional pipeline', workflowDescription: 'Process messages using visual workflow', selectPipeline: 'Select Pipeline', selectWorkflow: 'Select Workflow', noPipelines: 'No pipelines available', noWorkflows: 'No workflows available', createPipeline: 'Create Pipeline', createWorkflow: 'Create Workflow', }, pluginPages: { selectFromSidebar: 'Select a plugin page from the sidebar', invalidPage: 'Invalid plugin page', }, }; export default enUS;