export default {
	common: {
		search: 'Query',
		delete: 'Delete',
		edit: 'Edit',
		add: 'Add',
		save: 'Save',
		cancel: 'Cancel',
		confirm: 'Confirm',
		close: 'Close',
		back: 'Back',
		refresh: 'Refresh',
		reset: 'Reset',
		open: 'Open',
		view: 'View',
		details: 'Details',
		retry: 'Retry',
		publish: 'Publish',
		rename: 'Rename',
		description: 'Description',
		reuse: 'Reuse',
		all: 'All',
		loading: 'Loading...',
		noMore: 'No more',
		status: {
			success: 'Success',
			failed: 'Failed',
			running: 'Running',
			unknown: 'Unknown',
			active: 'Active',
			info: 'Info',
			warning: 'Warning',
			error: 'Error'
		},
		date: {
			rangeSeparator: 'to',
			start: 'Start',
			end: 'End',
			startDate: 'Start Date',
			endDate: 'End Date',
			recent: 'Recent',
			justNow: 'Just now',
			minutesAgo: '{count}m ago',
			hoursAgo: '{count}h ago',
			daysAgo: '{count}d ago',
			yesterday: 'Yesterday'
		},
		dialog: {
			tip: 'Notice'
		},
		confirmDelete: {
			title: 'Notice',
			message: 'Are you sure you want to delete this item?'
		},
		nodeBase: {
			retryConfig: {
				title: 'Retry on Failure',
				maxRetries: 'Max Retries',
				retryInterval: 'Retry Interval (ms)'
			},
			inputVariables: {
				title: 'Input Variables',
				addVariable: 'Add Variable',
				variableNamePlaceholder: 'Variable name',
				setValuePlaceholder: '{x} Set variable value'
			},
			outputVariables: {
				title: 'Output Variables',
				addOutput: 'Add Output',
				namePlaceholder: 'result',
				setValuePlaceholder: '{x} Set variable value'
			},
			errorHandling: {
				title: 'Error Handling',
				tooltip: 'Triggered when an exception occurs',
				none: 'None',
				defaultValue: 'Default Value',
				failBranch: 'Fail Branch',
				defaultValueDescription: 'Specify the default output when an exception occurs',
				failBranchDescription: 'Define custom fail branch logic on the canvas.',
				failBranchHint:
					'When a node throws an exception, the fail branch runs automatically. You can use it to provide error messages, reports, fixes, or skip actions.'
			},
			varSelect: {
				selectVariable: 'Select a variable',
				searchVariable: 'Search variables',
				empty: 'No matching variables'
			},
			codeEditor: {
				switchLanguage: 'Switch language',
				enterFullscreen: 'Expand',
				exitFullscreen: 'Restore',
				copy: 'Copy',
				theme: 'Theme',
				jsonSyntaxError: 'Invalid JSON syntax',
				copySuccess: 'Copied successfully'
			},
			branchCard: {
				deleteCondition: 'Delete condition',
				ifBranch: 'IF',
				elseIfBranch: 'ELIF',
				elseBranch: 'ELSE'
			},
			condition: {
				setVariableValue: '{x} Set variable value',
				inputValueWithVariable: 'Enter a value, or type / to select a variable',
				inputValue: 'Enter a value',
				constant: 'Constant',
				variable: 'Variable',
				addCondition: '+ Add Condition',
				operatorAnd: 'AND',
				operatorOr: 'OR',
				operators: {
					contains: 'Contains',
					notContains: 'Does Not Contain',
					startsWith: 'Starts With',
					endsWith: 'Ends With',
					is: 'Is',
					isNot: 'Is Not',
					empty: 'Is Empty',
					notEmpty: 'Is Not Empty'
				}
			},
			promptEditor: {
				searchVariable: 'Search variables',
				empty: 'No matching variables',
				customVariables: 'Custom Variables'
			},
			valueTypes: {
				string: 'String',
				number: 'Number',
				boolean: 'Boolean',
				object: 'Object',
				arrayString: 'Array[String]',
				arrayNumber: 'Array[Number]',
				arrayBoolean: 'Array[Boolean]',
				arrayObject: 'Array[Object]',
				arrayFile: 'Array[File]'
			}
		},
		error: {
			network: 'Network error'
		}
	},
	dashboard: {
		title: 'AI Agent',
		subtitle: 'Overview',
		workflows: 'Workflows',
		certificates: 'Certificates',
		executions: 'Executions',
		variables: 'Variables',
		dataTables: 'Data Tables'
	},
	statistics: {
		title: 'Statistics',
		subtitle: 'All Projects',
		productionExecutions: 'Production Executions',
		failedExecutions: 'Failed Production Executions',
		failureRate: 'Failure Rate',
		timeSaved: 'Time Saved',
		avgRuntime: 'Average Runtime',
		last7Days: 'Last 7 Days'
	},
	sidebar: {
		createWorkflow: 'Workflow',
		createCertificate: 'Credential',
		certificateComingSoon: 'Credential support is under development',
		shortcuts: {
			quickSearch: 'Quick Search',
			toggleSidebar: 'Toggle Sidebar'
		},
		theme: {
			switchToLight: 'Light Mode',
			switchToDark: 'Dark Mode'
		},
		menu: {
			overview: 'Overview',
			orchestration: 'Intelligent Orchestration',
			management: 'Agents',
			execution: 'Execution Log',
			chat: 'Chat',
			ollama: 'Ollama',
			models: 'Model Management',
			webSearch: 'Web Search',
			storage: 'Storage Engine',
			vectorStore: 'Vector Store',
			mcp: 'MCP Services',
			prompts: 'Prompt Templates',
			skills: 'Skills',
			templates: 'Templates',
			statistics: 'Statistics',
			help: 'Help',
			settings: 'Settings',
			knowledge: 'Knowledge',
			resource: 'Resource',
			workspace: 'Workspace'
		}
	},
	settings: {
		quickStart: 'Quick Start',
		docs: 'Docs',
		about: 'About AI Agent',
		userCenter: 'User Center',
		logStream: 'Agent Logs',
		modelLog: 'Model Invocation Logs',
		logout: 'Log Out',
		language: 'Language',
		languageDescription: 'Display language',
		languages: {
			'zh-cn': '简体中文',
			'en-us': 'English'
		}
	},
	shared: {
		templateModal: {
			title: 'Featured Templates',
			viewTemplate: 'View Template'
		},
		templates: {
			catalog: [
				{
					id: '1',
					title: 'Gmail + GPT-4o-mini',
					description:
						'Automatically classify and summarize emails with Gmail, GPT-4o-mini, and Notion',
					icon: '✉️'
				},
				{
					id: '2',
					title: 'Telegram + OpenAI',
					description:
						'Use Telegram, OpenAI, and Google Drive to classify chats and generate PDF files',
					icon: '💬'
				},
				{
					id: '3',
					title: 'Gmail + Memo RAG',
					description: 'Analyze email content with Gmail, Memo, and a lightweight RAG workflow',
					icon: '📧'
				},
				{
					id: '4',
					title: 'Mistral + OpenRouter',
					description: 'Process workflows with Mistral models routed through OpenRouter',
					icon: '🤖'
				},
				{
					id: '5',
					title: 'RAG Architecture',
					description: 'A RAG architecture powered by Supabase, TogetherAI, and OpenRouter',
					icon: '🔍'
				},
				{
					id: '6',
					title: 'LINE + Supabase',
					description: 'Combine LINE Messaging, Supabase Vector DB, and Gmail into one AI workflow',
					icon: '💌'
				}
			]
		},
		createWorkflow: {
			title: 'Create Workflow',
			editTitle: 'Edit Workflow',
			fields: {
				name: 'Name',
				tags: 'Tags',
				description: 'Description',
				remark: 'Remark',
				cover: 'Cover'
			},
			placeholders: {
				name: 'Enter workflow name',
				tags: 'Press Enter to add tags',
				description: 'Optional. Briefly describe what this workflow does',
				remark: 'Add notes',
				cover: 'Cover image'
			},
			tagLimit: 'Up to 5 tags',
			validation: {
				nameRequired: 'Please enter a name'
			},
			success: 'Workflow saved successfully',
			error: 'Failed to save workflow'
		},
		searchDialog: {
			placeholder: 'Type to search',
			sections: {
				projects: 'Projects',
				workflows: 'Workflows',
				results: 'Search Results'
			},
			createWorkflow: 'Create Workflow',
			noResults: 'No matching results found',
			recentItems: [
				'Parse invoice files with Gemini AI, OCR, and Google Sheets',
				'Open my workflows',
				'Review recent news summaries'
			],
			projectItems: ['Create Project', 'Open Project']
		}
	},
	pages: {
		dashboard: {
			welcomeTitle: 'Welcome back!',
			welcomeSubtitle: 'Today is {date}. Let’s build your next automation flow.',
			createWorkflow: 'Create Workflow',
			stats: {
				workflowTotal: 'Total Workflows',
				todayExecutions: 'Today’s Runs',
				successRate: 'Success Rate',
				avgResponse: 'Avg Response'
			},
			quickActions: {
				title: 'Quick Actions',
				newWorkflow: { title: 'New Workflow', desc: 'Start from scratch' },
				useTemplate: { title: 'Use Template', desc: 'Get started faster' },
				viewLogs: { title: 'View Logs', desc: 'Execution history' },
				viewDocs: { title: 'Read Docs', desc: 'Learn the product' }
			},
			recentWorkflows: {
				title: 'Recent Workflows',
				viewAll: 'View all →'
			},
			recentActivities: {
				title: 'Recent Activity',
				viewAll: 'View all →'
			},
			recommendedTemplates: {
				title: 'Recommended Templates',
				viewMore: 'See more →'
			},
			deleteConfirm: {
				message: 'Delete this workflow?',
				success: 'Workflow deleted'
			},
			activities: [
				{
					id: 1,
					icon: 'check-circle',
					type: 'success',
					text: 'Workflow “Customer Intent Detection” completed successfully',
					time: '5m ago'
				},
				{
					id: 2,
					icon: 'workflow',
					type: 'info',
					text: 'Created a new workflow “Daily Report Generator”',
					time: '1h ago'
				},
				{
					id: 3,
					icon: 'play',
					type: 'info',
					text: 'Workflow “Contract Review” started running',
					time: '2h ago'
				},
				{
					id: 4,
					icon: 'check-circle',
					type: 'success',
					text: 'Workflow “Lead Tagging” completed successfully',
					time: '3h ago'
				},
				{
					id: 5,
					icon: 'users',
					type: 'info',
					text: 'User @ZhangSan joined the team',
					time: 'Yesterday'
				}
			],
			templates: [
				{
					id: 1,
					name: 'Customer Intent Detection',
					desc: 'Analyze customer message intent automatically',
					icon: 'service',
					category: 'Support'
				},
				{
					id: 2,
					name: 'Daily Report Generator',
					desc: 'Compile daily updates automatically',
					icon: 'efficiency',
					category: 'Productivity'
				},
				{
					id: 3,
					name: 'Contract Review',
					desc: 'Review key contract clauses with AI',
					icon: 'legal',
					category: 'Legal'
				},
				{
					id: 4,
					name: 'Lead Tagging',
					desc: 'Tag sales leads automatically',
					icon: 'growth',
					category: 'Marketing'
				}
			]
		},
		orchestration: {
			title: 'Workflow Design',
			subtitle: 'Turn a list of tasks into an automated flow with order, conditions, and rules',
			createWorkflow: 'Create Workflow',
			importTemplate: 'Import Template',
			concepts: [
				{
					key: 'sequence',
					title: 'Sequence',
					desc: 'Node A → Node B → Node C, executed in order',
					example: 'Start → HTTP Request → Data Processing → Send Notification'
				},
				{
					key: 'condition',
					title: 'Conditions',
					desc: 'Branch into different paths based on evaluation results',
					example: 'if (status=success) → Path A else → Path B'
				},
				{
					key: 'rule',
					title: 'Rules',
					desc: 'Run automatically from triggers, schedules, and events',
					example: 'Every day at 9:00 | Webhook trigger | On data changes'
				}
			],
			stats: {
				workflowTotal: 'Total Workflows',
				updatedLast7Days: 'Updated in 7 Days',
				templatesAvailable: 'Templates Available',
				nodeTypes: 'Node Types'
			},
			recentTitle: 'Recent Designs',
			nodeTypesTitle: 'Available Node Types',
			recommendedTemplatesTitle: 'Recommended Templates',
			open: 'Open',
			viewTemplate: 'View Template',
			recentWorkflows: [
				{
					id: '1',
					name: 'Customer Support Auto Routing',
					updatedAt: 'Today 10:12',
					owner: 'Zhang Wei',
					tag: 'Support'
				},
				{
					id: '2',
					name: 'Content Creation and Review',
					updatedAt: 'Yesterday 18:20',
					owner: 'Li Na',
					tag: 'Content'
				},
				{
					id: '3',
					name: 'RAG Knowledge Sync',
					updatedAt: 'Jan 27',
					owner: 'Wang Qiang',
					tag: 'Knowledge Base'
				},
				{
					id: '4',
					name: 'Financial Report Summary',
					updatedAt: 'Jan 26',
					owner: 'Zhao Min',
					tag: 'Finance'
				}
			],
			nodeGroups: [
				{
					label: 'Flow Control',
					tags: ['Start Node', 'Conditional Branch', 'Loop Node', 'End Node']
				},
				{
					label: 'Data Operations',
					tags: ['HTTP Request', 'Database Query', 'Code Execution', 'Data Transformation']
				},
				{ label: 'Trigger Rules', tags: ['Scheduled Trigger', 'Webhook', 'Event Listener'] }
			],
			templates: [
				{
					id: 't1',
					name: 'Customer Intent Detection',
					desc: 'Receive message → AI intent analysis → condition check → route to support or bot',
					category: 'Support'
				},
				{
					id: 't2',
					name: 'Daily Summary Automation',
					desc: 'Scheduled trigger → query data tables → aggregate → generate report → notify team',
					category: 'Operations'
				},
				{
					id: 't3',
					name: 'Contract Review Assistant',
					desc: 'Upload contract → OCR → AI review → risk classification → report generation',
					category: 'Legal'
				},
				{
					id: 't4',
					name: 'Lead Tagging',
					desc: 'Webhook input → clean data → rule matching → tag leads → write to CRM',
					category: 'Growth'
				}
			]
		},
		execution: {
			title: 'Execution',
			subtitle: 'Track status, duration, and failure reasons in one place',
			stats: {
				recentExecutions: 'Runs in Last 7 Days',
				successRate: 'Success Rate',
				avgDuration: 'Avg Duration',
				failedCount: 'Failures'
			},
			filters: {
				keyword: 'Search by agent or execution ID',
				status: 'Status',
				source: 'Source'
			},
			sources: {
				manual: 'Manual',
				schedule: 'Schedule',
				webhook: 'Webhook',
				api: 'API'
			},
			table: {
				agentName: 'Agent',
				executionId: 'Execution ID',
				startedAt: 'Start Time',
				endedAt: 'End Time',
				duration: 'Duration',
				status: 'Status'
			},
			panels: {
				summary: 'Execution Summary',
				tips: 'Alerts and Suggestions'
			},
			summaryLabels: {
				processing: 'Processing',
				success: 'Succeeded',
				failed: 'Failed',
				currentPage: 'Rows on Page'
			},
			messages: {
				loadStatsFailed: 'Failed to load execution stats',
				loadListFailed: 'Failed to load execution list'
			},
			tips: [
				'When failures climb, check model, tool, and knowledge dependencies first',
				'When duration rises, inspect external calls and retrieval paths',
				'Long-running records usually point to timeouts or blocked nodes'
			],
			summary: [
				{ label: 'Running', value: '3' },
				{ label: 'Queued', value: '8' },
				{ label: 'Runs in 24h', value: '412' },
				{ label: 'P95 Duration', value: '5.9s' }
			],
			executions: [
				{
					workflow: 'Customer Support Auto Routing',
					executionId: 'EXE-20260129001',
					startedAt: '2026-01-29 09:12:03',
					duration: '2.1s',
					trigger: 'Schedule',
					status: 'success'
				},
				{
					workflow: 'Content Creation and Review',
					executionId: 'EXE-20260129002',
					startedAt: '2026-01-29 09:15:45',
					duration: '4.3s',
					trigger: 'Manual',
					status: 'running'
				},
				{
					workflow: 'RAG Knowledge Sync',
					executionId: 'EXE-20260129003',
					startedAt: '2026-01-29 08:58:12',
					duration: '3.9s',
					trigger: 'Webhook',
					status: 'failed'
				},
				{
					workflow: 'Financial Report Summary',
					executionId: 'EXE-20260129004',
					startedAt: '2026-01-29 08:40:30',
					duration: '1.6s',
					trigger: 'Schedule',
					status: 'success'
				}
			]
		},
		management: {
			title: 'Agent Management',
			subtitle: 'Workflow-based orchestration for automation, batch processing, and related scenarios.',
			stats: {
				totalAgents: 'Total Agents',
				currentPageCount: 'Items on Page',
				conversationVariables: 'Conversation Vars',
				envVariables: 'Environment Vars'
			},
			searchPlaceholder: 'Search current page by agent name or ID',
			pageInfo: 'Page {current} / {total}',
			pageSize: '{size} per page',
			badges: {
				agent: 'Agent',
				envVariables: '{count} env vars'
			},
			fallback: {
				unnamed: 'Untitled Agent',
				notConfiguredConversation: 'No conversation variables configured',
				notConfiguredEnv: 'No environment variables configured'
			},
			empty: {
				default: 'No agents found yet',
				filtered: 'No agents match the current filter'
			},
			errors: {
				fetchFailed: 'Failed to fetch agents',
				loadFailed: 'Failed to load agent list'
			},
			deleteConfirmMessage: 'Are you sure you want to delete this workflow? This action cannot be undone.',
			deleteSuccess: 'Deleted successfully',
			totalWorkflowCount: 'Total Workflows',
			searchPlaceholder: 'Search by keyword',
			emptyDefault: 'No workflow data'
		},
		about: {
			version: 'Version 1.0.0',
			aboutUs: 'About Us',
			description:
				'AI Agent is a powerful and flexible automation workflow platform that helps teams and individuals build intelligent business processes. We aim to make automation simple, efficient, and easy to maintain.',
			features: [
				{
					icon: 'zap',
					title: 'High Performance',
					desc: 'An optimized execution engine for fast and reliable workflows'
				},
				{
					icon: 'shield',
					title: 'Secure and Reliable',
					desc: 'Enterprise-grade security to protect your data and credentials'
				},
				{
					icon: 'users',
					title: 'Team Collaboration',
					desc: 'Work together to build and maintain workflows'
				},
				{
					icon: 'code',
					title: 'Open and Extensible',
					desc: 'Custom nodes and integrations for personalized needs'
				}
			]
		},
		userCenter: {
			title: 'User Center',
			changeAvatar: 'Change Avatar',
			profile: 'Profile',
			fields: {
				username: 'Username',
				email: 'Email',
				phone: 'Phone',
				company: 'Company'
			},
			placeholders: {
				username: 'Enter username',
				email: 'Enter email',
				phone: 'Enter phone number',
				company: 'Enter company name'
			},
			saveChanges: 'Save Changes',
			stats: {
				workflows: 'Workflows',
				executions: 'Executions',
				savedHours: 'Hours Saved'
			},
			security: {
				title: 'Account Security',
				password: {
					title: 'Login Password',
					desc: 'Rotate your password regularly to improve account security',
					action: 'Change'
				},
				twoFactor: { title: 'Two-Factor Authentication', desc: 'Disabled', action: 'Enable' },
				boundPhone: { title: 'Bound Phone', action: 'Replace' }
			}
		},
		logStream: {
			title: 'Agent Log Stream',
			searchPlaceholder: 'Search logs...',
			levelPlaceholder: 'Log Level',
			logs: [
				{
					id: 1,
					level: 'info',
					timestamp: '2026-01-28 14:23:45',
					workflowName: 'Data Sync Workflow',
					message: 'Workflow completed successfully',
					details: { executionTime: '2.5s', nodesExecuted: 5 }
				},
				{
					id: 2,
					level: 'warning',
					timestamp: '2026-01-28 14:20:12',
					workflowName: 'API Request Workflow',
					message: 'Response time exceeded threshold',
					details: { responseTime: '3200ms', threshold: '3000ms' }
				},
				{
					id: 3,
					level: 'error',
					timestamp: '2026-01-28 14:15:33',
					workflowName: 'Email Delivery Workflow',
					message: 'Email delivery failed: SMTP connection timeout',
					details: { error: 'Connection timeout', host: 'xxxxx.com' }
				},
				{
					id: 4,
					level: 'info',
					timestamp: '2026-01-28 14:10:08',
					workflowName: 'Data Processing Workflow',
					message: 'Processed 1000 records',
					details: { processed: 1000, failed: 0 }
				},
				{
					id: 5,
					level: 'info',
					timestamp: '2026-01-28 14:05:22',
					workflowName: 'Scheduled Workflow',
					message: 'Scheduled task triggered',
					details: { schedule: '*/5 * * * *', triggeredBy: 'cron' }
				}
			]
		},
		modelLog: {
			title: 'Model Invocation Logs',
			stats: {
				successCalls: 'Successful Calls',
				failedCalls: 'Failed Calls',
				avgResponse: 'Avg Response Time',
				todayCost: 'Today’s Cost'
			},
			table: {
				timestamp: 'Time',
				model: 'Model',
				workflow: 'Workflow',
				status: 'Status',
				tokens: 'Tokens',
				cost: 'Cost',
				responseTime: 'Response Time',
				actions: 'Actions'
			},
			dialog: {
				title: 'Invocation Details',
				basicInfo: 'Basic Info',
				request: 'Request',
				response: 'Response',
				usage: 'Usage',
				inputTokens: 'Input Tokens',
				outputTokens: 'Output Tokens',
				total: 'Total',
				time: 'Time',
				model: 'Model',
				workflow: 'Workflow',
				status: 'Status',
				cost: 'Cost'
			},
			logs: [
				{
					id: 1,
					timestamp: '2026-01-28 14:25:33',
					model: 'GPT-4',
					workflowName: 'AI Article Generation',
					status: 'success',
					tokens: '1,250',
					cost: '$0.025',
					responseTime: '1.8s',
					inputTokens: 450,
					outputTokens: 800,
					prompt: 'Help me write an article about the development of AI...',
					response: 'The history of artificial intelligence can be traced back to...'
				},
				{
					id: 2,
					timestamp: '2026-01-28 14:23:15',
					model: 'Claude-3',
					workflowName: 'Smart Customer Service',
					status: 'success',
					tokens: '680',
					cost: '$0.014',
					responseTime: '0.9s',
					inputTokens: 280,
					outputTokens: 400,
					prompt: 'User asks: how do I return a product?',
					response: 'Hello, here is the return process...'
				},
				{
					id: 3,
					timestamp: '2026-01-28 14:20:42',
					model: 'GPT-4',
					workflowName: 'Code Review Assistant',
					status: 'success',
					tokens: '2,100',
					cost: '$0.042',
					responseTime: '2.3s',
					inputTokens: 1200,
					outputTokens: 900,
					prompt: 'Please review the following code...',
					response: 'Code review result: overall structure looks solid...'
				},
				{
					id: 4,
					timestamp: '2026-01-28 14:18:05',
					model: 'GPT-3.5',
					workflowName: 'Data Analysis',
					status: 'failed',
					tokens: '0',
					cost: '$0.000',
					responseTime: '5.0s',
					inputTokens: 0,
					outputTokens: 0,
					prompt: 'Analyze sales data...',
					response: 'Error: API rate limit exceeded'
				}
			]
		},
		statisticsPage: {
			dateFormat: 'MMM DD, YYYY',
			defaultChartTitle: 'Statistics Chart',
			defaultTableTitle: 'Statistics Details',
			legend: { successful: 'Successful', failed: 'Failed' },
			table: {
				name: 'Name',
				totalExecutions: 'Production Runs ↓',
				failedExecutions: 'Failed Production Runs',
				failureRate: 'Failure Rate',
				timeSaved: 'Time Saved',
				avgRuntime: 'Avg Runtime',
				projectName: 'Project'
			},
			cards: [
				{ title: 'Production Runs', value: 12, subtitle: 'Last 7 Days' },
				{ title: 'Failed Production Runs', value: 3, subtitle: 'Last 7 Days' },
				{ title: 'Failure Rate', value: '25%', subtitle: 'Last 7 Days' },
				{ title: 'Time Saved', value: '8.2h', subtitle: 'Last 7 Days' },
				{ title: 'Avg Runtime', value: '5.1s', subtitle: 'Last 7 Days' }
			],
			cardData: [
				{
					chartTitle: 'Production Runs Over Time',
					tableTitle: 'Production Run Details',
					tableData: [
						{
							name: 'Project 1',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.1s',
							projectName: 'Data Processing Project'
						},
						{
							name: 'Project 2',
							totalExecutions: 18,
							failedExecutions: 1,
							failureRate: '5.6%',
							timeSaved: '4.2h',
							avgRuntime: '4.8s',
							projectName: 'AI Analytics Project'
						},
						{
							name: 'Project 3',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.3s',
							projectName: 'Image Recognition Project'
						}
					]
				},
				{
					chartTitle: 'Failed Production Runs Over Time',
					tableTitle: 'Failed Run Details',
					tableData: [
						{
							name: 'Project 1',
							totalExecutions: 1,
							failedExecutions: 1,
							failureRate: '100%',
							timeSaved: '0h',
							avgRuntime: '2.1s',
							projectName: 'Data Processing Project'
						},
						{
							name: 'Project 2',
							totalExecutions: 1,
							failedExecutions: 1,
							failureRate: '100%',
							timeSaved: '0h',
							avgRuntime: '1.8s',
							projectName: 'AI Analytics Project'
						},
						{
							name: 'Project 3',
							totalExecutions: 1,
							failedExecutions: 1,
							failureRate: '100%',
							timeSaved: '0h',
							avgRuntime: '3.3s',
							projectName: 'Image Recognition Project'
						}
					]
				},
				{
					chartTitle: 'Failure Rate Over Time',
					tableTitle: 'Failure Rate Details',
					tableData: [
						{
							name: 'Project 1',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.1s',
							projectName: 'Data Processing Project'
						},
						{
							name: 'Project 2',
							totalExecutions: 18,
							failedExecutions: 1,
							failureRate: '5.6%',
							timeSaved: '4.2h',
							avgRuntime: '4.8s',
							projectName: 'AI Analytics Project'
						}
					]
				},
				{
					chartTitle: 'Time Saved Over Time',
					tableTitle: 'Time Saved Details',
					tableData: [
						{
							name: 'Project 1',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.1s',
							projectName: 'Data Processing Project'
						},
						{
							name: 'Project 3',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.3s',
							projectName: 'Image Recognition Project'
						}
					]
				},
				{
					chartTitle: 'Average Runtime Over Time',
					tableTitle: 'Runtime Details',
					tableData: [
						{
							name: 'Project 2',
							totalExecutions: 18,
							failedExecutions: 1,
							failureRate: '5.6%',
							timeSaved: '4.2h',
							avgRuntime: '4.8s',
							projectName: 'AI Analytics Project'
						},
						{
							name: 'Project 3',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.3s',
							projectName: 'Image Recognition Project'
						},
						{
							name: 'Project 1',
							totalExecutions: 12,
							failedExecutions: 1,
							failureRate: '8.3%',
							timeSaved: '2.5h',
							avgRuntime: '5.1s',
							projectName: 'Data Processing Project'
						}
					]
				}
			]
		},
		templateDetail: {
			breadcrumb: 'Templates',
			useWorkflow: 'Use This Workflow',
			diagramPlaceholder: 'Workflow diagram placeholder',
			detailText:
				'This workflow connects email services, AI models, and databases through automation so you can process large volumes of information efficiently.'
		},
		quickStart: {
			title: 'Quick Start',
			subtitle: 'Welcome to AI Agent. Let’s build your first workflow.',
			video: 'Tutorial Video',
			stepsTitle: 'Getting Started',
			resourcesTitle: 'More Resources',
			steps: [
				{
					title: 'Create a Workflow',
					desc: 'Click the “+” button in the sidebar and choose “Workflow” to create your first flow'
				},
				{
					title: 'Add Nodes',
					desc: 'Use start, end, HTTP request, conditional branch, code execution, data query, and more to assemble your business logic'
				},
				{
					title: 'Configure and Test',
					desc: 'Set node parameters and run tests to confirm everything works as expected'
				},
				{
					title: 'Deploy',
					desc: 'Save and activate your workflow so it can work for you automatically'
				}
			],
			resources: [
				{ icon: 'book', title: 'Read Docs', desc: 'Explore every product capability in depth' },
				{ icon: 'box', title: 'Browse Templates', desc: 'Start from a ready-made workflow' },
				{ icon: 'help', title: 'Get Help', desc: 'Need help? Reach out to us' }
			]
		},
		docs: {
			sidebarTitle: 'Documentation',
			navSections: [
				{
					title: 'Quick Start',
					items: [
						{ key: 'intro', label: 'Introduction' },
						{ key: 'installation', label: 'Installation' }
					]
				},
				{
					title: 'Core Concepts',
					items: [
						{ key: 'workflow', label: 'Workflow' },
						{ key: 'nodes', label: 'Nodes' },
						{ key: 'credentials', label: 'Credentials' }
					]
				},
				{
					title: 'Node Docs',
					items: [
						{ key: 'http', label: 'HTTP Node' },
						{ key: 'code', label: 'Code Node' },
						{ key: 'database', label: 'Database Node' }
					]
				}
			],
			docMap: {
				intro: {
					title: 'About AI Agent',
					description: 'Learn the core concepts and basic usage of AI Agent'
				},
				installation: {
					title: 'Installation and Deployment',
					description: 'Install and configure AI Agent in your environment'
				},
				workflow: {
					title: 'Workflow Concepts',
					description: 'Understand design patterns and best practices for workflows'
				},
				nodes: {
					title: 'Node System',
					description: 'Understand how the node system works and how to use it'
				},
				credentials: {
					title: 'Credential Management',
					description: 'Manage and use third-party credentials securely'
				},
				http: { title: 'HTTP Node', description: 'Use the HTTP node to work with REST APIs' },
				code: { title: 'Code Node', description: 'Write custom code for advanced business logic' },
				database: {
					title: 'Database Node',
					description: 'Connect to and operate on database systems'
				}
			},
			sections: {
				overview: 'Overview',
				features: 'Key Features',
				example: 'Quick Example',
				next: 'Next Steps'
			},
			overviewText:
				'AI Agent is a powerful automation workflow platform that lets you build complex automation flows. With the visual workflow editor, you can easily add nodes, connect services and apps, and automate data processing and delivery.',
			features: [
				'Visual editor - Design workflows intuitively with start, end, HTTP request, conditional branch, code execution, data query, and more',
				'Rich node library - Support for HTTP, database, code execution, and many more node types',
				'Real-time debugging - Step-by-step execution and breakpoints supported',
				'Data transformation - Powerful data mapping and transformation capabilities'
			],
			nextSteps: [
				{ icon: 'video', label: 'Watch the tutorial' },
				{ icon: 'box', label: 'Browse sample templates' }
			]
		},
		chat: {
			newChat: '+ New Chat',
			history: 'History',
			rename: 'Rename',
			delete: 'Delete',
			newConversation: 'New Conversation',
			targetKnowledge: 'Knowledge Q&A',
			targetAgent: 'Agent Q&A',
			targetModel: 'Model Chat',
			emptyTitle: 'Start chatting',
			emptySubtitle: 'Ask a question and let AI help you',
			senderPlaceholder: 'Type your question and press Enter to send',
			renameDialogTitle: 'Rename Conversation',
			renamePlaceholder: 'Enter a new conversation name',
			settingsTitle: 'Conversation Settings',
			settingsKnowledgeBase: 'Knowledge Base',
			settingsKnowledge: 'Knowledge',
			settingsAgent: 'Agent',
			settingsSummaryModel: 'Summary Model',
			settingsSessionParams: 'Session Settings',
			settingsAgentSwitches: 'Agent Options',
			selectPlaceholder: 'Select',
			workflowChatFormTitle: 'Chat Form',
			selectAgentPlaceholder: 'Select an agent',
			selectWorkflowPlaceholder: 'Select a workflow',
			selectKnowledgeBasePlaceholder: 'Select knowledge base',
			selectKnowledgePlaceholder: 'Select knowledge',
			selectModelPlaceholder: 'Select model',
			quickStartTitle: 'Quick Start:',
			generateLink: 'Generate Link',
			shareDialogTitle: 'Generate Access Link',
			shareDialogTip:
				'Opening this link will automatically use the current agent, model, knowledge base, and related settings. No extra selection is required.',
			copyShareLink: 'Copy Link',
			invalidShareLink: 'Invalid access link parameters',
			shareLinkCopied: 'Link copied',
			shareLinkCopyFailed: 'Copy failed. Please copy the link manually.',
			selectSummaryModelPlaceholder: 'Select a summary model',
			enableMemory: 'Enable memory',
			disableTitle: 'Disable auto title',
			enableAgentMode: 'Enable Agent mode',
			enableWebSearch: 'Enable web search',
			agentImageUploadEnabled: 'This agent supports image upload',
			agentImageUploadDisabled: 'This agent does not support image upload',
			imageUploadTitle: 'Upload Image',
			imageUploadTip:
				'Only image upload is supported. Uploaded files will be used as this conversation’s image input.',
			imageUploadClose: 'Close',
			imageUploadDone: 'Done',
			cancel: 'Cancel',
			save: 'Save',
			deleteConfirm: 'Delete this conversation?',
			deleteSuccess: 'Conversation deleted',
			renameEmpty: 'Conversation name cannot be empty',
			renameSuccess: 'Conversation updated',
			requestFailed: 'Request failed',
			referenceTitle: 'References',
			toolCallTitle: 'Tool Call',
			toolResultTitle: 'Tool Result',
			failedTag: 'Failed',
			thinkTitle: 'Thinking',
			selectConversationFirst: 'Please select a conversation first',
			createSuccess: 'Created successfully',
			inputRequired: 'Please enter a message',
			selectAgentFirst: 'Please select an agent first',
			selectWorkflowFirst: 'Please select a workflow first',
			selectKnowledgeBaseFirst: 'Please select a knowledge base first',
			selectSummaryModelFirst: 'Please select a summary model first',
			requestInProgress: 'A request is already in progress',
			retrySourceNotFound: 'No original question found for retry',
			copySuccess: 'Copied successfully!',
			mockResponse: 'This is a sample AI response.',
			noHistory: 'No history found.',
			send: 'Send',
			stop: 'Stop',
			copy: 'Copy',
			addToKnowledgeBase: 'Add to Knowledge Base',
			successTag: 'Success',
			streaming: 'Thinking',
			stopped: 'Stopped',
			unknownError: 'Unknown error',
			unsupportedCard: 'Card display is not supported',
			totalDuration: 'Total duration: {duration}ms',
			addKbTitle: 'Add to Knowledge Base',
			knowledgeBase: 'Knowledge Base',
			title: 'Title',
			content: 'Content',
			selectKnowledgeBase: 'Please select a knowledge base',
			titleRequired: 'Please enter a title',
			contentRequired: 'Please enter content',
			addKbSuccess: 'Added successfully'
		},
		model: {
			title: 'Model Management',
			subtitle: 'Manage remote models and local models imported into the system in one place.',
			searchPlaceholder: 'Search model name or ID',
			typePlaceholder: 'Model type',
			sourcePlaceholder: 'Source',
			create: 'New Model',
			empty: 'No configured models',
			unnamedModel: 'Unnamed Model',
			unsetModelId: 'Model ID not set',
			noDescription: 'No description',
			defaultTag: 'Default',
			detail: 'Details',
			edit: 'Edit',
			updateCredentials: 'Update Credential',
			deleteCredentials: 'Delete Credential',
			delete: 'Delete',
			createTitle: 'New Model',
			editTitle: 'Edit Model',
			detailTitle: 'Model Details',
			fields: {
				source: 'Model Source',
				type: 'Model Type',
				localModel: 'Local Model',
				provider: 'Provider',
				name: 'Model Name',
				title: 'Display Name',
				description: 'Description',
				baseUrl: 'API URL',
				apiKey: 'API Key',
				dimension: 'Dimension',
				truncateTokens: 'Truncate Tokens',
				supportsVision: 'Vision Support',
				thinkingControl: 'Thinking Parameter Format',
				customHeaders: 'Custom Headers (Optional)',
				connectionTest: 'Connection Test',
				createdAt: 'Created At',
				updatedAt: 'Updated At'
			},
			placeholders: {
				select: 'Select',
				type: 'Select model type',
				provider: 'Select provider',
				name: 'e.g. llama3.1',
				title: 'Enter display name',
				description: 'Model description...',
				baseUrl: 'Choose a default URL or enter one manually',
				apiKey: 'Enter your API key',
				dimension: 'Enter vector dimension',
				truncateTokens: 'Enter truncate token count',
				thinkingControl: 'Select thinking parameter format',
				headerName: 'Header name',
				headerValue: 'Header value',
				newApiKey: 'Enter API Key'
			},
			sources: {
				local: 'Local',
				localOllama: 'Local Ollama',
				localModel: 'Local Model',
				remote: 'Provider',
				remoteApi: 'Remote API'
			},
			types: {
				KnowledgeQA: 'Chat Model',
				Embedding: 'Embedding Model',
				Rerank: 'Rerank Model',
				VLLM: 'Vision Model'
			},
			status: {
				unknown: 'Unknown status',
				active: 'Available'
			},
			thinking: {
				noneTitle: 'Do not send thinking parameters',
				noneDescription:
					'The agent thinking-mode switch will not take effect and no thinking parameters will be sent.',
				chatTemplateDescription:
					'Custom OpenAI-compatible, NVIDIA NIM, vLLM, or local Qwen deployments',
				enableThinkingDescription: 'Alibaba Cloud DashScope: qwen3, qwen-plus, qwen-max, qwen-turbo',
				thinkingTypeDescription:
					'Volcengine Ark and Tencent Cloud LKEAP (DeepSeek V3 uses this by default; choose "Do not send" for R1)',
				tip:
					'Controls how the agent thinking-mode switch is written into the API request. A provider/model default is selected when possible. If it does not match your setup, adjust it manually based on the API docs. When "Do not send" is selected, the agent thinking-mode switch has no effect.'
			},
			customHeadersDesc:
				'Additional HTTP headers sent when calling remote model APIs, commonly used for auth and tracing.',
			addHeader: 'Add Header',
			testConnection: 'Test Connection',
			submit: 'Submit',
			none: 'None',
			messages: {
				nameRequired: 'Please enter model name',
				titleRequired: 'Please enter display name',
				typeRequired: 'Please select model type',
				sourceRequired: 'Please select model source',
				dimensionRequired: 'Please enter a valid dimension for the embedding model',
				checkSuccess: 'Connection test successful',
				checkFailed: 'Connection test failed. Please check the configuration.',
				providerAndKeyRequired: 'Please complete the provider and API Key first',
				modelUnavailable: 'Model is unavailable. Please check the data.',
				updateSuccess: 'Updated successfully',
				createSuccess: 'Created successfully',
				submitFailed: 'Submit failed',
				deleteConfirm: 'Are you sure you want to delete this model? This cannot be undone.',
				deleteSuccess: 'Deleted successfully',
				updateCredentialPrompt: 'Enter a new API Key',
				updateCredentialTitle: 'Update Model Credential',
				apiKeyRequired: 'Please enter API Key',
				credentialUpdateSuccess: 'Credential updated successfully',
				credentialUpdateFailed: 'Credential update failed',
				deleteCredentialConfirm:
					'Are you sure you want to delete this model credential? The model may no longer be callable.',
				credentialDeleteSuccess: 'Credential deleted successfully',
				credentialDeleteFailed: 'Credential deletion failed'
			}
		},
		agent: {
			title: 'Agent Management',
			total: 'Total',
			currentPageCount: 'Current Page',
			published: 'Published',
			createAgent: 'New Agent',
			searchPlaceholder: 'Search name / ID',
			mode: 'Mode',
			modeQuickAnswer: 'Q&A Mode',
			modeSmartReasoning: 'Reasoning Mode',
			modeUnset: 'Unset',
			reset: 'Reset',
			emptyDescription: 'No agents yet',
			unnamedAgent: 'Unnamed Agent',
			noDescription: 'No description',
			agentDetail: 'Agent Details',
			nameLabel: 'Name',
			modeLabel: 'Mode',
			descriptionLabel: 'Description',
			systemPromptLabel: 'System Prompt',
			modelIdLabel: 'Model ID',
			deleteConfirm: 'Are you sure you want to delete this agent?',
			deleteConfirmTitle: 'Confirm',
			editModal: {
				configAgent: 'Configure Agent',
				editAgent: 'Edit Agent',
				createAgent: 'New Agent',
				configAgentDesc: 'Configure the agent mode and parameters',
				createAgentDesc: 'Configure the basic information of the agent',
				tabBasic: 'Basic Info',
				tabModel: 'Model',
				tabKnowledge: 'Knowledge Base',
				tabTools: 'Tools',
				tabSkills: 'Skills',
				tabSearch: 'Search Strategy',
				tabWebSearch: 'Web Search',
				tabMultimodal: 'Multimodal',
				tabMultiTurn: 'Multi-turn',
				modeLabel: 'Mode',
				modeQuickAnswer: 'Quick Answer',
				modeSmartReasoning: 'Smart Reasoning',
				modeTip: 'Multi-step thinking, deep analysis of complex problems.',
				modeTipLabel: 'Current Description',
				quickAnswerDesc: 'Suitable for Q&A and knowledge retrieval scenarios. You can further refine context templates, query expansion, and multi-turn dialogue.',
				smartReasoningDesc: 'Suitable for tool calling and multi-step reasoning scenarios. You can further configure tools, MCP services, and Skills.',
				nameLabel: 'Name',
				namePlaceholder: 'Enter agent name',
				nameTip: 'Set an easily recognizable name for the agent.',
				avatarLabel: 'Icon',
				changeEmoji: 'Change Emoji',
				selectEmoji: 'Select Emoji',
				clearEmoji: 'Clear',
				descriptionLabel: 'Description',
				descriptionPlaceholder: 'Enter agent description',
				descriptionTip: 'Briefly describe the purpose and features of the agent.',
				systemPromptLabel: 'System Prompt',
				supportVariables: 'Supported Variables',
				availableVariables: 'Available Variables',
				templateSelect: 'Template',
				systemPromptPlaceholder: 'Enter system prompt. You can define role, goals, constraints, and response style',
				systemPromptTip: 'Customize the system prompt to define the behavior and role of the agent.',
				contextTemplateLabel: 'Context Template',
				contextTemplatePlaceholder: 'Enter context template to constrain the context organization in Q&A mode',
				contextTemplateTip: 'Define how to format retrieved content and pass it to the model.',
				modelTabIntro: 'Configure the model parameters for the agent',
				modelLabel: 'Model',
				modelTip: 'Select the large language model used by the agent.',
				temperatureLabel: 'Temperature',
				temperatureTip: 'Control the randomness of output. 0 is most deterministic, 1 is most random.',
				maxTokensLabel: 'Max Tokens',
				maxTokensTip: 'Limit the maximum number of tokens the model can generate per response.',
				thinkingModeLabel: 'Thinking Mode',
				thinkingModeTip: 'Enable extended thinking capability. Requires model support.',
				kbTabIntro: 'Configure knowledge bases accessible to the agent',
				kbRelationLabel: 'Linked Knowledge Base',
				kbAll: 'All Knowledge Bases',
				kbSelected: 'Selected',
				kbNone: 'None',
				selectAll: 'All',
				selectSpecified: 'Selected',
				selectDisabled: 'Disabled',
				kbTip: 'Select the scope of knowledge bases accessible to the agent.',
				kbSelectTip: 'Select knowledge bases to link, including collaborative ones.',
				fileTypeLabel: 'File Types',
				fileTypeTip: 'Restrict selectable file types. Leave empty to support all types.',
				rerankModelLabel: 'ReRank Model',
				rerankModelTip: 'Rerank knowledge base retrieval results to improve answer accuracy.',
				faqTitle: 'FAQ Optimization Strategy',
				faqTip: 'When the knowledge base contains FAQ (Q&A pairs), enable this strategy to prioritize FAQ answers over regular documents.',
				faqPriorityLabel: 'Enable FAQ Priority',
				faqPriorityTip: 'FAQ answers will be prioritized over regular documents, improving answer accuracy.',
				directAnswerThresholdLabel: 'Direct Answer Threshold',
				directAnswerThresholdTip: 'When the similarity between the question and FAQ exceeds this value, use the FAQ answer directly.',
				faqScoreBoostLabel: 'FAQ Score Boost',
				faqScoreBoostTip: 'Multiply the relevance score of FAQ results by this coefficient to rank them higher.',
				toolsTabIntro: 'Configure tools available to the Agent',
				allowedToolsLabel: 'Allowed Tools',
				allowedToolsTip: 'Select the tools the Agent can use.',
				maxIterationsLabel: 'Max Iterations',
				maxIterationsTip: 'Maximum reasoning steps when the Agent executes tasks.',
				llmTimeoutLabel: 'LLM Call Timeout',
				llmTimeoutTip: 'Maximum wait time (seconds) for a single LLM call. The call will be aborted after this timeout.',
				mcpServiceLabel: 'MCP Services',
				mcpTip: 'Select the MCP services the Agent can call.',
				mcpSelectTip: 'Select MCP services to enable.',
				skillsTabIntro: 'Configure pre-installed Skills for the Agent, providing domain expertise and workflows',
				skillsSelectLabel: 'Skills Selection',
				skillsTip: 'Select the scope of Skills the Agent can use.',
				skillsSelectTip: 'Select Skills to enable.',
				searchTabIntro: 'Configure knowledge base retrieval and ranking parameters',
				embeddingTopKLabel: 'Embedding Recall Count',
				embeddingTopKTip: 'Maximum number of results returned by embedding retrieval.',
				keywordThresholdLabel: 'Keyword Threshold',
				keywordThresholdTip: 'Minimum relevance score for keyword retrieval.',
				vectorThresholdLabel: 'Vector Threshold',
				vectorThresholdTip: 'Minimum similarity score for vector retrieval.',
				rerankTopKLabel: 'Rerank Count',
				rerankTopKTip: 'Maximum number of results retained after reranking.',
				rerankThresholdLabel: 'Rerank Threshold',
				rerankThresholdTip: 'Minimum relevance score for reranking.',
				qaSectionTitle: 'Q&A',
				queryExpansionLabel: 'Query Expansion',
				queryExpansionTip: 'Automatically expand query terms to improve recall.',
				fallbackStrategyLabel: 'Fallback Strategy',
				fallbackStrategyTip: 'How to handle when no relevant content is found in the knowledge base.',
				fallbackModel: 'Model Generated',
				fallbackFixed: 'Fixed Response',
				fallbackPromptLabel: 'Fallback Prompt',
				fallbackPromptPlaceholder: 'Enter the prompt used for model fallback',
				fallbackPromptTip: 'Used to guide the model to generate a fallback response when no relevant content is found.',
				fixedPromptLabel: 'Fixed Prompt',
				fixedResponsePlaceholder: 'Enter fixed fallback content',
				fixedResponseTip: 'Fixed text returned when unable to answer.',
				webSearchTabIntro: 'Configure the web search capability of the agent',
				webSearchEnableLabel: 'Enable Web Search',
				webSearchEnableTip: 'When enabled, the agent can search the internet for information.',
				searchEngineLabel: 'Search Engine',
				searchEnginePlaceholder: 'Search by keyword',
				searchEngineTip: 'Specify a search engine for this agent. Leave empty to use the default.',
				maxResultsLabel: 'Max Search Results',
				maxResultsTip: 'Maximum number of results returned per search.',
				webFetchLabel: 'Auto Fetch Page Content',
				webFetchTip: 'Automatically fetch full content of top-ranked pages after ReRank to improve answer quality.',
				fetchCountLabel: 'Fetch Page Count',
				fetchCountTip: 'Maximum number of pages to fetch full content after Rerank.',
				multimodalTabIntro: 'Configure image upload and VLM. When enabled, users can upload images in conversations',
				imageUploadLabel: 'Image Upload',
				imageUploadTip: 'When enabled, users can upload images for multimodal Q&A.',
				vlmModelLabel: 'VLM Model',
				vlmModelTip: 'Vision-language model for image analysis.',
				audioUploadLabel: 'Audio Upload',
				audioUploadTip: 'When enabled, users can upload audio files. The system will use ASR model to transcribe them.',
				asrModelLabel: 'ASR Model',
				asrModelTip: 'Speech recognition model for audio transcription. Audio files will be passed as placeholders when not configured.',
				multiTurnTabIntro: 'Configure multi-turn dialogue and query rewriting parameters',
				multiTurnLabel: 'Multi-turn Dialogue',
				multiTurnTip: 'When enabled, historical conversation context will be retained.',
				historyTurnsLabel: 'Retained Turns',
				historyTurnsTip: 'Number of recent conversation turns to retain as context.',
				rewriteLabel: 'Query Rewriting',
				rewriteTip: 'Automatically rewrite user queries in multi-turn dialogue to resolve references and fill in omissions.',
				rewriteSystemPromptLabel: 'Rewrite System Prompt',
				rewriteSystemPromptPlaceholder: 'Enter system prompt for query rewriting',
				rewriteSystemPromptTip: 'System prompt used for query rewriting.',
				rewriteUserPromptLabel: 'Rewrite User Prompt',
				rewriteUserPromptPlaceholder: 'Enter user prompt for query rewriting',
				rewriteUserPromptTip: 'User prompt template used for query rewriting.',
				nameRequired: 'Name is required',
				modeRequired: 'Please select a mode',
				systemPromptRequired: 'Please enter a system prompt',
				modelRequired: 'Please select a chat model',
				rerankModelRequired: 'Please select a rerank model',
				emojiPickerTitle: 'Select Emoji',
				emojiSearchPlaceholder: 'Search Emoji',
				save: 'Save',
				cancel: 'Cancel',
				detailLoadFailed: 'Failed to load details',
				updateFailed: 'Update failed',
				updateSuccess: 'Updated successfully',
				createFailed: 'Creation failed',
				createSuccess: 'Created successfully',
				saveFailed: 'Save failed'
			},
			detailModal: {
				basicInfo: 'Basic Info',
				configSummary: 'Config Summary',
				prompts: 'Prompts',
				on: 'On',
				off: 'Off',
				modelLabel: 'Model',
				rerankModelLabel: 'Rerank Model',
				vlmModelLabel: 'VLM Model',
				asrModelLabel: 'ASR Model',
				creationTime: 'Created',
				updateTime: 'Updated',
				temperature: 'Temperature',
				maxTokens: 'Max Tokens',
				thinkingMode: 'Thinking Mode',
				multiTurn: 'Multi-turn',
				kbCount: 'Knowledge Bases',
				toolCount: 'Tools',
				systemPrompt: 'System Prompt',
				contextTemplate: 'Context Template',
				rewriteSystemPrompt: 'Rewrite System Prompt',
				rewriteUserPrompt: 'Rewrite User Prompt',
				fallbackPrompt: 'Fallback Prompt'
			}
		},
		vectorStore: {
			title: 'Vector Store',
			description: 'Register and manage vector database instances for knowledge base search',
			create: 'Create Vector Store',
			edit: 'Edit Vector Store',
			detail: 'Vector Store Details',
			searchPlaceholder: 'Search name',
			refresh: 'Refresh',
			name: 'Name',
			namePlaceholder: 'Enter vector store name',
			engineType: 'Engine Type',
			engineTypePlaceholder: 'Select engine type',
			connectionAddr: 'Connection Address',
			indexName: 'Index Name',
			shardsReplicas: 'Shards/Replicas',
			source: 'Source',
			sourceSystem: 'System',
			sourceUser: 'User',
			creationTime: 'Created At',
			updateTime: 'Updated At',
			connectionConfig: 'Connection Config',
			indexConfig: 'Index Config',
			username: 'Username',
			version: 'Version',
			shards: 'Shards',
			replicas: 'Replicas',
			testConnection: 'Test Connection',
			testSuccess: 'Connection successful',
			testFailed: 'Connection failed',
			deleteConfirm: 'Are you sure you want to delete this vector store?',
			deleteConfirmTitle: 'Confirm',
			deleteSuccess: 'Deleted successfully',
			deleteFailed: 'Delete failed',
			createSuccess: 'Created successfully',
			createFailed: 'Create failed',
			updateSuccess: 'Updated successfully',
			updateFailed: 'Update failed',
			loadTypesFailed: 'Failed to load engine types',
			loadListFailed: 'Failed to load list',
			getDetailFailed: 'Failed to get details',
			selectEngineTypeFirst: 'Please select an engine type first',
			testConfigSuccess: 'Connection test successful',
			testConfigFailed: 'Connection test failed',
			empty: 'No vector stores'
		},
		editor: {
			workspace: 'Workspace',
			tagPlaceholder: 'Press Enter to add tags',
			tagButton: 'Tags',
			publish: 'Publish',
			status: {
				published: 'Published',
				unpublished: 'Unpublished'
			},
			menu: {
				description: 'Description',
				reuse: 'Reuse',
				rename: 'Rename',
				delete: 'Delete'
			},
			messages: {
				loadFailed: 'Failed to load agent workflow',
				saveFailed: 'Failed to save agent',
				saved: 'Agent saved',
				varsSaved: 'Variables saved',
				publishSuccess: 'Agent published',
				publishFailed: 'Publish failed',
				missingPublishNode: 'Please select a node to publish'
			},
			selectPublishNode: 'Please select a node to publish',
			startGuideTitle: 'Choose a start node to begin',
			startGuideSubtitle: 'Different start nodes offer different capabilities. You can change them anytime.',
			startGuideStartNodeTitle: 'User Input (Original Start Node)',
			startGuideStartNodeDesc: 'A start node that supports input variables, running workflows as web apps, service APIs, MCP servers, and tools.',
			startGuideScheduleNodeDesc: 'Run workflows hourly, daily, weekly, or monthly — ideal for recurring tasks and scheduled syncs.',
			startGuideWebhookNodeDesc: 'Receive external requests with a custom webhook to trigger workflows, great for integrating with other applications.',
			addNode: 'Add Node',
			addNote: 'Add Note',
			testRun: 'Test Run',
			publishSearchPlaceholder: 'Search',
			publishEmpty: 'No node data',
			loadAgentInfoFailed: 'Failed to fetch agent info',
			deleteSuccess: 'Deleted successfully',
			deleteFailed: 'Deletion failed'
		},
		nodeView: {
			messages: {
				selectNodeFirst: 'Please select a node to run',
				runFailed: 'Failed to run node',
				missingTrigger: 'No runnable trigger node was found',
				loopEndOnlyInside: 'The loop-exit node can only be added inside loop or iteration nodes',
				noNestedLoop:
					'Loop and iteration nodes cannot be nested inside another loop or iteration node',
				nodeAdded: 'Node added',
				addNodeFailed: 'Failed to add node',
				edgeCreated: 'Connection created',
				createEdgeFailed: 'Failed to create connection',
				updateNodeFailed: 'Failed to update node',
				envSaved: 'Environment variables saved',
				saveEnvFailed: 'Failed to save environment variables'
			},
			stickyNote: {
				name: 'Note',
				content: 'Write notes here. Markdown is supported. Double-click to edit.'
			}
		},
		setter: {
			titlePlaceholder: 'Add title...',
			descriptionPlaceholder: 'Add description...',
			runNode: 'Run node',
			setting: 'Settings',
			lastRun: 'Last run',
			nodeLog: {
				notRun: 'Not run',
				running: 'Running',
				success: 'Succeeded',
				failed: 'Failed',
				noNode: 'No node is currently selected.',
				noLog: 'This node has no run records yet.',
				unnamedNode: 'Untitled node',
				lastUpdated: 'Last updated: ',
				input: 'Input',
				output: 'Output',
				rawDetail: 'Run details (raw data)',
				copy: 'Copy',
				copySuccess: 'Copied successfully'
			}
		},
		toolbar: {
			nodes: 'Nodes',
			note: 'Note',
			chat: 'Chat',
			env: 'Environment Variables',
			runEntry: 'Choose run entry',
			envDialog: {
				title: 'Environment Variables',
				description:
					'Environment variables are used to configure runtime values required by the agent, such as API_KEY and SECRET_KEY.',
				addVariable: 'Add Variable',
				empty: 'No environment variables yet. Click "Add Variable" to create one.',
				unnamedVariable: 'Untitled Variable',
				edit: 'Edit',
				delete: 'Delete',
				addDialogTitle: 'Add Environment Variable',
				editDialogTitle: 'Edit Environment Variable',
				nameLabel: 'Variable Name',
				namePlaceholder: 'For example API_KEY',
				typeLabel: 'Variable Type',
				typePlaceholder: 'Select a variable type',
				valueLabel: 'Variable Value',
				valuePlaceholder: 'Enter a variable value',
				nameRequired: 'Please enter a variable name',
				nameDuplicate: 'Variable name must be unique',
				typeRequired: 'Please select a variable type',
				valueRequired: 'Please enter a variable value'
			}
		},
		editorFooter: {
			logs: 'Logs',
			empty: 'No run logs yet. Run a node to view logs.',
			nodeName: 'Node Name',
			type: 'Type',
			status: 'Status',
			lastTime: 'Last Time',
			detail: 'Details',
			input: 'Input',
			output: 'Output',
			runId: 'Run ID',
			startedAt: 'Start Time',
			finishedAt: 'End Time',
			nodeCount: 'Nodes',
			ready: 'Ready',
			running: 'Running',
			success: 'Succeeded',
			finished: 'Finished',
			failed: 'Failed',
			error: 'Error'
		},
		runWorkflow: {
			metaStatus: 'Status',
			metaRunId: 'Run ID',
			metaStartedAt: 'Start Time',
			metaFinishedAt: 'End Time',
			metaDuration: 'Duration',
			metaSteps: 'Steps',
			invalidJson: 'Please enter a valid JSON object',
			fieldRequired: '{name} cannot be empty',
			fieldTooLong: '{name} cannot exceed {max} characters',
			missingStartNode: 'Missing start node',
			runStartFailed: 'Failed to start run',
			runFailed: 'Run failed',
			running: 'Running',
			connecting: 'Connecting',
			idle: 'Not run',
			success: 'Success',
			failed: 'Failed',
			error: 'Error',
			suspended: 'Suspended',
			drawerTitle: 'Run Workflow',
			chatDialogTitle: 'Chat Run',
			chatTab: 'Chat',
			inputTab: 'Input',
			triggerTab: 'Trigger',
			resultTab: 'Result',
			detailTab: 'Details',
			traceTab: 'Trace',
			chatPanel: {
				workflow: 'Workflow',
				nodeRuns: 'Node Runs',
				nodeCount: '{count} nodes',
				dataProcess: 'Data Processing',
				nodeRunEmpty: 'Node execution progress will appear here after you send a message.'
			},
			inputPanel: {
				noStart: 'No start node was found, so this workflow cannot run.',
				noInputs: 'The start node has no configured user inputs, so you can run it directly.',
				enter: 'Please enter ',
				select: 'Please select ',
				run: 'Run Workflow',
				completeRequired: 'Please complete the user input form first'
			},
			triggerPanel: {
				listening: 'Listening for trigger events...',
				stopped: 'Trigger listener stopped',
				scheduleListening: 'Listening for scheduled trigger events.',
				scheduleStopped: 'Scheduled trigger listener stopped.',
				webhookListening:
					'You can now send a test request to the HTTP webhook trigger endpoint, or use it as a callback URL for real-time event debugging.',
				webhookStopped: 'Webhook listener stopped.',
				copySuccess: 'Test URL copied',
				copyFailed: 'Copy failed',
				nextRun: 'Next scheduled run: ',
				webhookHint: 'Always use this URL for test runs',
				stop: 'Stop'
			},
			resultPanel: {
				empty: 'No result',
				runningTitle: 'Workflow Running',
				runningDesc: 'Execution in progress, please wait...',
				output: 'Output'
			},
			detailPanel: {
				empty: 'No execution details yet',
				status: 'Status',
				duration: 'Duration',
				input: 'Input',
				output: 'Output'
			},
			tracePanel: {
				unnamedNode: 'Untitled node',
				empty: 'No node execution records yet',
				input: 'Input',
				output: 'Output'
			}
		},
		system: {
			actions: {
				backHome: 'Back Home',
				goBack: 'Go Back'
			},
			unauthorized: {
				title: 'You do not have access to this page',
				description: 'You do not have permission to open this menu. Please contact an administrator.'
			},
			notFound: {
				title: 'Page Not Found',
				description: 'The page you are looking for does not exist or the address is incorrect.'
			}
		},
		nodeLibrary: {
			groups: {
				start: 'Start',
				data: 'Data Processing',
				logic: 'Logic',
				tool: 'Tool',
				other: 'Other',
				custom: 'Custom'
			}
		},
		startSetter: {
			input: 'Input',
			empty: 'Click the plus button in the top-right corner to add workflow input fields.',
			field: 'Field',
			maxLength: 'Max Length',
			none: 'None',
			hidden: 'Hidden',
			required: 'Required',
			addVariableTitle: 'Add Variable',
			editVariableTitle: 'Edit Variable',
			fieldType: 'Field Type',
			fieldTypePlaceholder: 'Select a field type',
			variableName: 'Variable Name',
			variableNamePlaceholder: 'Enter a variable name',
			displayName: 'Display Name',
			displayNamePlaceholder: 'Enter a display name',
			options: 'Options',
			optionsPlaceholder: 'Type and press Enter to add an option',
			fileTypes: 'File Types',
			fileTypesPlaceholder: 'Select allowed file types',
			fileExtensions: 'Allowed Extensions',
			fileExtensionsPlaceholder: 'For example .zip, .sql, .json',
			fileExtensionsAria: 'Enter allowed file extensions',
			defaultValue: 'Default Value',
			defaultValuePlaceholder: 'Enter a default value',
			text: 'Text',
			textarea: 'Multiline Text',
			select: 'Select',
			number: 'Number',
			boolean: 'Boolean',
			file: 'File',
			fileList: 'File List',
			jsonObject: 'JSON Object',
			document: 'Document',
			image: 'Image',
			audio: 'Audio',
			video: 'Video',
			custom: 'Custom',
			selectShort: 'Dropdown',
			selectFieldType: 'Please select a field type',
			enterVariableName: 'Please enter a variable name',
			variableNamePattern:
				'Variable names must start with a letter and contain only letters, numbers, and underscores',
			variableNameDuplicate: 'Variable names must be unique',
			enterDisplayName: 'Please enter a display name',
			displayNameDuplicate: 'Display names must be unique',
			atLeastOneOption: 'Please add at least one option',
			customExtensionRequired: 'When "Custom" is selected, specify at least one file extension',
			defaultJsonInvalid: 'Default value must be a valid JSON object',
			jsonConfigInvalid: 'JSON config must be a valid JSON object',
			variableAdded: 'Variable added',
			variableUpdated: 'Variable updated',
			jsonSchema: 'JSON Schema',
			fieldFallback: 'Field {index}',
			booleanTrue: 'true',
			booleanFalse: 'false',
			legacyBadge: 'LEGACY',
			valueTypeString: 'string',
			valueTypeNumber: 'number',
			valueTypeBoolean: 'boolean',
			valueTypeFile: 'File',
			valueTypeFileArray: 'Array[File]',
			valueTypeObject: 'object'
		},
		loopSetter: {
			variables: 'Loop Variables',
			conditions: 'Filter Conditions',
			maxLoopCount: 'Max Loop Count',
			loopVar: {
				name: 'Variable Name',
				type: 'Variable Type',
				valueType: 'Value Source',
				setValue: '{x} Set variable value',
				value: 'Variable Value',
				addValue: 'Add Value'
			}
		},
		iterationSetter: {
			input: 'Input',
			output: 'Output',
			selectInput: 'Select an input variable',
			parallelMode: 'Parallel Mode',
			maxParallel: 'Max Parallelism',
			maxParallelTip:
				'Use max parallelism to control how many tasks run at the same time in one iteration.',
			errorHandling: 'Error Handling',
			flattenOutput: 'Flatten Output',
			stop: 'Stop',
			continueOnError: 'Continue on Error',
			removeAbnormal: 'Remove Error Output'
		},
		webhookSetter: {
			webhookDebugHint: 'Always use this URL for test runs',
			testUrl: 'Test URL',
			contentType: 'Content Type',
			queryParams: 'Query Parameters',
			headerParams: 'Header Parameters',
			bodyParams: 'Request Body Parameters',
			variableName: 'Variable Name',
			variablePlaceholder: 'Enter variable name...',
			type: 'Type',
			required: 'Required',
			response: 'Response',
			statusCode: 'Status Code',
			responseBody: 'Response Body',
			outputVariables: 'Output Variables',
			rawRequestBody: 'Raw Webhook Request Body',
			defaultTitle: 'Webhook Trigger',
			emptySuffix: 'is empty',
			copiedSuffix: 'copied',
			copyFailedSuffix: 'copy failed'
		},
		httpSetter: {
			urlRequired: 'Please enter a URL'
		},
		databaseSetter: {
			connection: 'Connection',
			query: 'Query',
			dbType: 'Type',
			dbTypePlaceholder: 'Select a database type',
			dbHost: 'Host',
			dbHostPlaceholder: 'Enter the database host',
			dbPort: 'Port',
			dbPortPlaceholder: 'Enter the database port',
			dbUsername: 'Username',
			dbUsernamePlaceholder: 'Enter the database username',
			dbEncryptPassword: 'Encrypted Password',
			dbEncryptPasswordPlaceholder: 'Enter the AES-encrypted password',
			dbPasswordRsaAesKey: 'RSA Encrypted AES Key',
			dbPasswordRsaAesKeyPlaceholder: 'Enter the AES key encrypted with RSA',
			dbName: 'Database Name',
			dbNamePlaceholder: 'Enter the database name',
			dbProperties: 'Properties',
			dbPropertiesPlaceholder: 'Optional connection properties',
			querySql: 'SQL Query',
			querySqlPlaceholder: 'Enter the SQL query statement',
			dbTypeRequired: 'Please select a database type',
			dbHostRequired: 'Please enter the database host',
			dbPortRequired: 'Please enter the database port',
			dbUsernameRequired: 'Please enter the database username',
			dbEncryptPasswordRequired: 'Please enter the AES-encrypted password',
			dbPasswordRsaAesKeyRequired: 'Please enter the RSA-encrypted AES key',
			dbNameRequired: 'Please enter the database name',
			querySqlRequired: 'Please enter the SQL query statement',
			types: {
				mysql: 'MySQL',
				sqlserver: 'SQL Server',
				oracle: 'Oracle',
				postgresql: 'PostgreSQL'
			}
		},
		moduleInvokeSetter: {
			interfaceCode: 'Interface Code',
			interfaceCodeRequired: 'Please enter the interface code'
		},
		basicDatasetSetter: {
			datasetConfig: 'Dataset Config',
			path: 'Path',
			pathPlaceholder: 'Enter the basic dataset path',
			group: 'Group',
			groupPlaceholder: 'Enter filter groups, separated by commas',
			key: 'Key',
			keyPlaceholder: 'Enter a specified id',
			pathRequired: 'Please enter the basic dataset path'
		},
		knowledgeRetrievalSetter: {
			queryVariable: 'Query Variable',
			queryVariablePlaceholder: 'Select a query text variable',
			queryVariableTip:
				'The query text used for knowledge retrieval, usually from user input or upstream output.',
			queryDescribe: 'Query text',
			knowledgeBases: 'Knowledge Base',
			knowledgeBasesPlaceholder: 'Enter a knowledge base and press Enter',
			knowledgeBasesTip:
				'Multiple knowledge bases will be searched together. If knowledge is also set, it takes precedence.',
			knowledgeIds: 'Knowledge',
			knowledgeIdsPlaceholder: 'Enter a knowledge item and press Enter',
			knowledgeIdsTip:
				'Used to limit the search to specific knowledge records or files. If empty, search runs across selected knowledge bases.',
			topK: 'Top K',
			scoreThreshold: 'Score Threshold',
			outputs: 'Outputs',
			queryRequired: 'Please select a query variable',
			knowledgeRequired: 'At least one of knowledge_base_ids or knowledge_ids must be specified'
		},
		workflowApprovalSetter: {
			basicConfig: 'Approval Config',
			usn: 'User Account',
			usnPlaceholder: 'User account / phone / email',
			jobId: 'Job ID',
			jobIdPlaceholder: 'Enter job id',
			workflowCode: 'Workflow Code',
			workflowCodePlaceholder: 'Enter workflow code'
		},
		viewDataSetter: {
			basicConfig: 'View Config',
			code: 'View Name',
			codePlaceholder: 'Enter the view name',
			codeRequired: 'Please enter the view name',
			resultType: 'Result Type',
			resultTypeObject: 'Object',
			resultTypeArray: 'Array',
			resultTypeTree: 'Tree',
			pageSize: 'Page Size',
			treeConfig: 'Tree Config',
			treeFieldId: 'ID Field',
			treeFieldIdPlaceholder: 'Enter the mapped id field name',
			treeFieldParentId: 'Parent ID Field',
			treeFieldParentIdPlaceholder: 'Enter the mapped parentId field name',
			treeFieldChildren: 'Children Field',
			treeFieldChildrenPlaceholder: 'Enter the mapped children field name',
			treeFieldText: 'Text Field',
			treeFieldTextPlaceholder: 'Enter the mapped text field name',
			treeFieldRequired: 'Please complete id, parentId and children fields in tree config',
			indexVariable: 'Index Variable',
			indexVariableDefaultDescribe: 'Index',
			variableName: 'Name',
			variableDescribe: 'Description',
			variableType: 'Type',
			variableValue: 'Value',
			outputs: 'Outputs',
			outputPreview: 'Output Structure Preview'
		},
		questionClassifierSetter: {
			classes: 'Categories',
			addClass: '+ Add Category',
			empty: 'No categories yet. Click the button above to add one.',
			classPrefix: 'Category',
			classNamePlaceholder: 'Enter a category name, e.g. Pre-sales Question',
			classInstructionPlaceholder: 'Write the main topic or description for this category',
			modelSettings: 'Model Settings',
			model: 'Chat Model',
			modelPlaceholder: 'Select a chat model',
			modelTip: 'Question classification only supports chat models.',
			temperature: 'Temperature',
			temperatureTip: 'Controls randomness during classification. Lower values are more stable.',
			maxTokens: 'Max Tokens',
			maxTokensTip:
				'Limits the maximum number of tokens the model can return for one classification.',
			thinking: 'Thinking Mode',
			thinkingTip: 'Enables the model extended reasoning mode if the selected model supports it.',
			advancedSettings: 'Advanced Settings',
			instruction: 'Instruction',
			instructionPlaceholder:
				"Write your prompt here. Type '{' to insert variables, or '/' to insert prompt blocks."
		},
		scheduleSetter: {
			title: 'Schedule Trigger',
			modeCron: 'Use Cron Expression',
			modeVisual: 'Use Visual Builder',
			frequency: 'Frequency',
			minute: 'Minute',
			time: 'Time',
			weekday: 'Weekday',
			monthDay: 'Day',
			lastDay: 'Last Day',
			lastDayTip: 'Run on the natural last day of each month',
			nextRuns: 'Next 5 run times',
			previewEmpty: 'The current configuration cannot calculate run times yet',
			cronLabel: 'Cron Expression',
			cronPlaceholder: 'For example: 0 0 0 * * ? *',
			cronSupport: 'Supports 5 to 7-part Cron expressions',
			cronUsing: 'Will trigger using the entered Cron expression',
			cronInvalid: 'Invalid Cron expression. Please enter 5 to 7 parts',
			hourly: 'Hourly',
			daily: 'Daily',
			weekly: 'Weekly',
			monthly: 'Monthly'
		},
		listSetter: {
			inputVariable: 'Input Variable',
			selectInputVariable: 'Select an input variable',
			filterConditions: 'Filter Conditions',
			insertVariable: "Type '/' to quickly insert a variable",
			takeNth: 'Take Nth Item',
			takeFirstN: 'Take First N Items',
			sort: 'Sort',
			ascending: 'Ascending',
			descending: 'Descending',
			fileFieldId: 'ID',
			fileFieldName: 'Name',
			fileFieldExtensionName: 'Extension Name',
			fileFieldSize: 'Size',
			fileFieldPath: 'Path'
		},
		conditionSetter: {
			casePrefix: 'Condition_',
			delete: 'Delete',
			elseDescription: 'Used to define the handling logic when none of the conditions match'
		},
		mcp: {
			title: 'MCP Services',
			subtitle: 'Manage MCP service list and view resource and tool details.',
			searchPlaceholder: 'Search MCP name',
			transferType: 'Transfer Type',
			createMcp: 'New MCP',
			test: 'Test',
			tools: 'Tools',
			enabled: 'Enabled',
			disabled: 'Disabled',
			noTransferType: 'No transfer type',
			unnamedMcp: 'Unnamed MCP',
			noAddress: 'No address configured',
			noDescription: 'No description',
			noMcp: 'No MCP services',
			totalServices: '{count} services',
			enabledCount: '{count} enabled',
			editMcp: 'Edit MCP',
			createMcpTitle: 'New MCP',
			mcpDetail: 'MCP Details',
			mcpResources: 'MCP Resources',
			mcpTools: 'MCP Tools',
			name: 'Name',
			description: 'Description',
			address: 'Address',
			timeout: 'Timeout (s)',
			retryCount: 'Retry Count',
			retryInterval: 'Retry Interval (s)',
			requestHeaders: 'Request Headers',
			headerName: 'Header Name',
			headerValue: 'Header Value',
			authConfig: 'Auth Config',
			envVariables: 'Environment Variables',
			envVarName: 'Variable Name',
			envVarValue: 'Variable Value',
			add: 'Add',
			testConnection: 'Test Connection',
			enableLabel: 'Enable',
			configName: 'Config Name',
			configValue: 'Config Value',
			pleaseInputName: 'Please enter a name',
			pleaseSelectTransferType: 'Please select a transfer type',
			pleaseInputAddress: 'Please enter an address',
			fetchDetailFailed: 'Failed to fetch details',
			connectSuccess: 'Connection test successful',
			connectFailed: 'Connection test failed',
			pleaseSaveFirst: 'Please save the MCP service before testing connection',
			updateSuccess: 'Updated successfully',
			createSuccess: 'Created successfully',
			saveFailed: 'Save failed',
			confirmDelete: 'Are you sure you want to delete this MCP service?',
			tip: 'Notice',
			deleteSuccess: 'Deleted successfully',
			searchToolPlaceholder: 'Search tool name or description',
			noTools: 'No tools',
			noResources: 'No resources',
			paramSchema: 'Parameter Schema'
		},
		ollama: {
			subtitle: 'View Ollama connection status, local model list, and download task progress.',
			connectionStatus: 'Ollama Connection',
			connected: 'Connected',
			disconnected: 'Disconnected',
			downloadedModels: 'Downloaded Models',
			pendingTasks: 'Pending Tasks',
			refresh: 'Refresh',
			downloadNewModel: 'Download Model',
			modelName: 'Model Name',
			size: 'Size',
			digest: 'Digest',
			updateTime: 'Updated',
			status: 'Status',
			progress: 'Progress',
			startTime: 'Start Time',
			message: 'Message',
			downloading: 'Downloading',
			completed: 'Completed',
			failed: 'Failed',
			noModels: 'No downloaded local models',
			noTasks: 'No download tasks',
			downloadTitle: 'Download New Model',
			modelPlaceholder: 'e.g. llama3.1',
			modelRegistryTip: 'Visit {url} to browse available models',
			startDownload: 'Start Download',
			pleaseInputModel: 'Please enter a model name',
			downloadCreated: 'Download task created',
			downloadCreateFailed: 'Failed to create download task',
			downloadTasks: 'Download Tasks'
		},
		prompt: {
			title: 'Prompts',
			subtitle: 'Manage system prompts, context templates, rewrite and fallback configurations.',
			searchPlaceholder: 'Search prompt name / description',
			type: 'Type',
			createPrompt: 'New Prompt',
			detail: 'Detail',
			editPrompt: 'Edit Prompt',
			createPromptTitle: 'New Prompt',
			promptDetail: 'Prompt Details',
			name: 'Name',
			description: 'Description',
			content: 'Content',
			userPrompt: 'User Prompt',
			isDefault: 'Default',
			includeKnowledge: 'Include Knowledge',
			includeWebSearch: 'Include Web Search',
			builtIn: 'Built-in',
			noDescription: 'No description',
			noPrompt: 'No prompts',
			typeLabel: 'Type:',
			pleaseInputName: 'Please enter a name',
			pleaseInputContent: 'Please enter content',
			pleaseSelectType: 'Please select a type',
			updateSuccess: 'Updated successfully',
			createSuccess: 'Created successfully',
			saveFailed: 'Save failed',
			confirmDelete: 'Are you sure you want to delete this prompt?',
			tip: 'Notice',
			deleteSuccess: 'Deleted successfully',
			typeMap: {
				system: 'System Prompt',
				agentSystem: 'Agent System Prompt',
				rewrite: 'Rewrite Prompt',
				fallback: 'Fallback Prompt',
				contextTemplate: 'Context Template',
				generateTitle: 'Generate Title',
				generateSummary: 'Generate Summary',
				keywordExtraction: 'Keyword Extraction'
			}
		},
		skills: {
			title: 'Skills',
			subtitle: 'View available skills for agent configuration.',
			searchPlaceholder: 'Search skill name or description',
			refresh: 'Refresh',
			noSkills: 'No Skills',
			noDescription: 'No description'
		},
		storagePage: {
			title: 'Storage Engine',
			subtitle: 'Manage object storage engine configurations with save and connectivity testing.',
			initStorage: 'Initialize Storage',
			refreshList: 'Refresh List',
			close: 'Close',
			currentDefault: 'Current Default',
			setDefault: 'Set Default',
			edit: 'Edit',
			reload: 'Reload',
			testConnection: 'Test Connection',
			saveConfig: 'Save Config',
			config: 'Configuration',
			configDesc: 'Select a storage engine to view, edit, and save its configuration.',
			defaultLabel: 'Default',
			allowed: 'Allowed',
			notAllowed: 'Not Allowed',
			available: 'Available',
			notAvailable: 'Unavailable',
			unavailable: 'Unavailable',
			editStorageEngine: 'Edit Storage Engine',
			editStorageDesc: 'Modify current storage engine configuration and save',
			storagePrefix: 'Storage Prefix',
			pathPrefix: 'Path Prefix',
			pathPrefixPlaceholder: 'Enter path prefix',
			endpoint: 'Endpoint',
			mode: 'Mode',
			accessKeyId: 'Access Key ID',
			secretAccessKey: 'Secret Access Key',
			accessKey: 'Access Key',
			secretKey: 'Secret Key',
			secretId: 'Secret ID',
			appId: 'App ID',
			region: 'Region',
			bucket: 'Bucket',
			tempBucket: 'Temp Bucket',
			tempRegion: 'Temp Region',
			useSsl: 'Use SSL',
			useTempBucket: 'Use Temp Bucket',
			engineDescription: 'Supports object storage configuration and connectivity testing',
			noEngine: 'No engines',
			loadEngineFailed: 'Failed to load engines',
			getDefaultProviderFailed: 'Failed to get default storage provider',
			initSuccess: 'Initialized successfully',
			initFailed: 'Initialization failed',
			loadConfigFailed: 'Failed to load configuration',
			connectionSuccess: 'Connection successful',
			connectionFailed: 'Connection failed',
			connectSuccess: 'Connection successful',
			connectFailed: 'Connection failed',
			defaultProviderUpdated: 'Default storage provider updated',
			defaultProviderUpdateFailed: 'Failed to update default storage provider',
			pleaseSelectEngine: 'Please select an engine first',
			configSaved: 'Configuration saved',
			saveFailed: 'Save failed',
			clickToLoadConfig: 'Click to load configuration',
			clickToLoad: 'Click an engine on the left to load its configuration',
			configPanelDesc: 'Click an engine on the left to load its configuration, then modify and save.',
			selectEngineFirst: 'Please select an engine from the left first.',
			selectEngineFirstWarn: 'Please select an engine from the left first.',
			engineList: 'Engine List',
			storageServiceTitle: 'Storage Service Management',
			storageServiceAlert: 'Select an engine to view configuration, supports saving and connectivity testing.'
		},
		webSearch: {
			title: 'Web Search',
			subtitle: 'Manage search engine integrations, parameters, and connectivity testing.',
			searchPlaceholder: 'Search provider name',
			provider: 'Provider',
			query: 'Search',
			createWebSearch: 'New Web Search',
			editWebSearch: 'Edit Web Search',
			createWebSearchTitle: 'New Web Search',
			updateCredential: 'Update Credential',
			deleteCredential: 'Delete Credential',
			connectTest: 'Connection Test',
			testConnection: 'Test Connection',
			name: 'Name',
			description: 'Description',
			apiKey: 'API Key',
			proxyUrl: 'Proxy URL',
			engineId: 'Engine ID',
			setDefault: 'Set Default',
			defaultConfig: 'Default Config',
			normalConfig: 'Normal Config',
			unnamedWebSearch: 'Unnamed Web Search',
			noProvider: 'No provider set',
			noWebSearch: 'No web search configurations',
			pleaseSelectProvider: 'Please select a provider',
			pleaseInputName: 'Please enter a name',
			fetchDetailFailed: 'Failed to fetch details',
			connectSuccess: 'Connection test successful',
			connectFailed: 'Connection test failed',
			updateSuccess: 'Updated successfully',
			createSuccess: 'Created successfully',
			saveFailed: 'Save failed',
			confirmDelete: 'Are you sure you want to delete this web search configuration?',
			tip: 'Notice',
			deleteSuccess: 'Deleted successfully',
			pleaseInputNewApiKey: 'Please enter a new API Key',
			updateCredentialTitle: 'Update Web Search Credential',
			pleaseInputApiKey: 'Please enter API Key',
			credentialUpdateSuccess: 'Credential updated successfully',
			credentialUpdateFailed: 'Credential update failed',
			confirmDeleteCredential: 'Are you sure you want to delete this web search credential? Configurations using this credential will not be able to call the search service.',
			credentialDeleteSuccess: 'Credential deleted successfully',
			credentialDeleteFailed: 'Credential deletion failed'
		},
		knowledge: {
			title: 'Knowledge Base',
			subtitle: 'Manage knowledge bases and process knowledge content and Q&A entries.',
			selectBase: 'Please select a knowledge base from the left',
			knowledgeTab: 'Knowledge',
			wikiTab: 'Wiki',
			graphTab: 'Knowledge Graph',
			qaTab: 'Q&A',
			sidebar: {
				listTitle: 'Knowledge Base List',
				create: 'New',
				searchPlaceholder: 'Search knowledge base name',
				all: 'All',
				knowledge: 'Knowledge',
				faq: 'Q&A',
				noDescription: 'No description',
				edit: 'Edit',
				delete: 'Delete',
				loading: 'Loading...',
				noMore: 'No more',
				noKnowledge: 'No knowledge bases',
				confirmDelete: 'Are you sure you want to delete this knowledge base? This action cannot be undone.',
				deleteTitle: 'Confirm Deletion',
				deleteSuccess: 'Knowledge base deleted'
			},
			document: {
				searchPlaceholder: 'Search knowledge title',
				fileTypePlaceholder: 'File type, e.g.: txt / manual',
				refresh: 'Refresh',
				uploadFile: 'Upload File',
				custom: 'Custom',
				listTitle: 'Knowledge List',
				title: 'Title',
				type: 'Type',
				createTitle: 'New Knowledge',
				importTitle: 'Import File Knowledge',
				editTitle: 'Edit Knowledge',
				creationTime: 'Created',
				knowledgeList: 'Knowledge List',
				titleLabel: 'Title',
				typeLabel: 'Type',
				fileUpload: 'File Upload',
				customType: 'Custom',
				fileName: 'File Name',
				fileType: 'File Type',
				source: 'Source',
				parseStatus: 'Parse Status',
				summaryStatus: 'Summary Status',
				errorMessage: 'Error Message',
				createTime: 'Created',
				actions: 'Actions',
				update: 'Update',
				reparse: 'Reparse',
				delete: 'Delete',
				noContent: 'No knowledge content',
				createKnowledge: 'New Knowledge',
				titleInput: 'Title',
				titlePlaceholder: 'Please enter a title',
				contentLabel: 'Knowledge Content',
				contentPlaceholder: 'Please enter knowledge content',
				publish: 'Publish',
				submit: 'Submit',
				importFileKnowledge: 'Import File Knowledge',
				uploadFileLabel: 'Upload File',
				uploadTip: 'Supports document, image, and audio formats, processed as knowledge content after upload.',
				metadata: 'Metadata (Optional)',
				metadataOptional: 'Metadata (Optional)',
				addMetadata: 'Add Metadata',
				metadataDesc: 'Additional metadata attached when importing file knowledge, used for classification, tagging, and source identification.',
				metadataName: 'Metadata Name',
				metadataValue: 'Metadata Value',
				metadataKeyPlaceholder: 'Enter metadata name',
				metadataValuePlaceholder: 'Enter metadata value',
				enableMultiModel: 'Enable Multi-model Parsing',
				updateKnowledge: 'Update Knowledge',
				descriptionLabel: 'Description (click to edit, supports Markdown)',
				pleaseInputTitle: 'Please enter a title',
				pleaseInputContent: 'Please enter knowledge content',
				titleRequired: 'Please enter a title',
				contentRequired: 'Please enter knowledge content',
				knowledgeCreated: 'Knowledge created',
				createSuccess: 'Knowledge created',
				createFailed: 'Creation failed',
				pleaseUploadFile: 'Please upload a file first',
				uploadFileFirst: 'Please upload a file first',
				importFailed: 'Import failed',
				fileKnowledgeImported: 'File knowledge imported',
				importSuccess: 'File knowledge imported',
				knowledgeUpdated: 'Knowledge updated',
				updateSuccess: 'Knowledge updated',
				updateFailed: 'Update failed',
				reparseTriggered: 'Reparse triggered',
				reparseSuccess: 'Reparse triggered',
				confirmDelete: 'Are you sure you want to delete this knowledge? This action cannot be undone.',
				deleteTitle: 'Confirm Deletion',
				knowledgeDeleted: 'Knowledge deleted',
				deleteSuccess: 'Knowledge deleted',
				stateDone: 'Done',
				stateFinished: 'Finished',
				stateFailed: 'Failed',
				stateParsing: 'Parsing',
				stateError: 'Error',
				stateRunning: 'Running',
				stateProcessing: 'Processing',
				stateFinalizing: 'Finalizing',
				stateNone: 'None',
				stateMap: {
					done: 'Done',
					completed: 'Completed',
					failed: 'Failed',
					finished: 'Finished',
					parsing: 'Parsing',
					error: 'Error',
					running: 'Running',
					processing: 'Processing',
					pending: 'Pending',
					finalizing: 'Finalizing',
					none: 'None'
				}
			},
			qa: {
				searchPlaceholder: 'Search questions',
				search: 'Search',
				query: 'Search',
				templateImport: 'Template Import',
				addQa: 'New Q&A',
				listTitle: 'Q&A List',
				qaList: 'Q&A List',
				standardQuestion: 'Standard Question',
				answer: 'Answer',
				similarCount: 'Similar Count',
				negativeCount: 'Negative Count',
				enabled: 'Enabled',
				createTime: 'Created',
				actions: 'Actions',
				detail: 'Detail',
				edit: 'Edit',
				delete: 'Delete',
				noContent: 'No Q&A entries',
				noQa: 'No Q&A entries',
				createTitle: 'New Q&A',
				editQa: 'Edit Q&A',
				editTitle: 'Edit Q&A',
				addQaTitle: 'New Q&A',
				standardQuestionLabel: 'Standard Question',
				pleaseInputStandardQuestion: 'Please enter a standard question',
				standardQuestionRequired: 'Please enter a standard question',
				standardQuestionPlaceholder: 'Please enter a standard question',
				similarQuestions: 'Similar Questions',
				similarQuestionsTip: 'Add questions with the same meaning but different phrasing to help the system match user queries.',
				similarTip: 'Add questions with the same meaning but different phrasing to help the system match user queries.',
				similarQuestionPlaceholder: 'Enter a question with the same semantics but different phrasing',
				similarPlaceholder: 'Enter a question with the same semantics but different phrasing',
				negativeExamples: 'Negative Examples',
				negativeExamplesTip: 'Add questions that should not match this answer to exclude false matches.',
				negativeTip: 'Add questions that should not match this answer to exclude false matches.',
				negativeExamplePlaceholder: 'Enter a question that should not match this answer',
				negativePlaceholder: 'Enter a question that should not match this answer',
				answerLabel: 'Answers',
				answerRequired: 'Please enter at least one answer',
				answerTip: 'Provide complete and accurate answers. Add multiple answers to cover different scenarios.',
				answerPlaceholder: 'Enter answer content',
				add: 'Add',
				deleteItem: 'Delete',
				enabledLabel: 'Enabled',
				detailTitle: 'Q&A Details',
				qaDetail: 'Q&A Details',
				similarLabel: 'Similar Questions',
				negativeLabel: 'Negative Examples',
				answerDetailLabel: 'Answers',
				enabledStatus: 'Status',
				enabledOn: 'Enabled',
				enabledOff: 'Disabled',
				enabledText: 'Enabled',
				disabledText: 'Disabled',
				indexMode: 'Index Mode',
				importTitle: 'Template Import',
				uploadFile: 'Upload File',
				uploadFileDesc: 'Upload a completed Excel file.',
				uploadDesc: 'Upload a completed Excel file.',
				uploadPlaceholder: 'Click or drag to upload Excel file',
				importMode: 'Import Mode',
				selectPlaceholder: 'Please select',
				importModePlaceholder: 'Please select',
				importAppend: 'Append',
				appendMode: 'Append',
				importReplace: 'Replace',
				replaceMode: 'Replace',
				downloadTemplate: 'Download Template',
				downloadTemplateDesc: 'Please download the standard template and fill in Q&A data accordingly.',
				downloadFaqTemplate: 'Download faq_example.xlsx',
				downloadFile: 'Download faq_example.xlsx',
				startImport: 'Start Import',
				importTaskTitle: 'Import Task Status',
				importTaskStatus: 'Import Task Status',
				taskCode: 'Task ID',
				creationTime: 'Created',
				taskCreateTime: 'Created',
				progress: 'Progress:',
				close: 'Close',
				pleaseInputStandardQuestionMsg: 'Please enter a standard question',
				pleaseInputAtLeastOneAnswer: 'Please enter at least one answer',
				detailLoadFailed: 'Failed to load Q&A details',
				qaDetailLoadFailed: 'Failed to load Q&A details',
				qaUpdated: 'Q&A updated',
				updateSuccess: 'Q&A updated',
				qaCreated: 'Q&A created',
				createSuccess: 'Q&A created',
				saveFailed: 'Save failed',
				statusUpdated: 'Status updated',
				confirmDelete: 'Are you sure you want to delete this Q&A? This action cannot be undone.',
				deleteTitle: 'Confirm Deletion',
				qaDeleted: 'Q&A deleted',
				deleteSuccess: 'Q&A deleted',
				statusCreated: 'Created',
				statusRunning: 'Running',
				statusSuccess: 'Success',
				statusFailed: 'Failed',
				statusPending: 'Processing',
				statusProcessing: 'Processing',
				importTaskCreated: 'Created',
				importTaskRunning: 'Running',
				importTaskSuccess: 'Success',
				importTaskFailed: 'Failed',
				importTaskPending: 'Processing',
				importTaskSuspended: 'Suspended',
				importSuccess: 'Import successful',
				importFailedCheckStatus: 'Import failed, please check task status',
				importFailedMsg: 'Import failed, please check task status',
				taskQueryFailed: 'Failed to query async task status, please try again later',
				taskQueryFailedRetry: 'Failed to query async task status, please try again later',
				asyncTaskQueryFailed: 'Failed to query async task status, please try again later',
				pleaseUploadFile: 'Please upload a file first',
				uploadFileFirst: 'Please upload a file first',
				knowledgeBaseIdMissing: 'Knowledge base ID missing',
				importFailedContactAdmin: 'Import failed, please check file format or contact admin'
			},
			wiki: {
				noContent: 'No wiki content',
				index: 'Index',
				pageLoadFailed: 'Page load failed',
				noPageContent: 'No content',
				summary: 'Summary',
				entity: 'Entity',
				concept: 'Concept',
				indexType: 'Index'
			},
			graph: {
				title: 'Knowledge Graph',
				description: 'Graph view built from Wiki pages and relationship edges, supports drag and zoom.',
				legendSummary: 'Summary',
				legendEntity: 'Entity',
				legendConcept: 'Concept',
				legendIndex: 'Index',
				legendLog: 'Log',
				summaryLegend: 'Summary',
				entityLegend: 'Entity',
				conceptLegend: 'Concept',
				indexLegend: 'Index',
				logLegend: 'Log',
				nodeCount: 'Nodes',
				edgeCount: 'Edges',
				mergedDuplicates: 'Merged Duplicate Edges',
				mergedEdges: 'Merged Duplicate Edges'
			},
			editModal: {
				editTitle: 'Edit Knowledge Base',
				createTitle: 'New Knowledge Base',
				tabBasic: 'Basic Info',
				basicIntro: 'Set the name, type, and description of the knowledge base.',
				basicInfo: 'Basic Info',
				basicInfoTip: 'Set the name, type and description of the knowledge base',
				kbType: 'Knowledge Base Type',
				kbTypeTip: 'FAQ type is for structured Q&A data; Document type supports file parsing and chunking.',
				kbName: 'Knowledge Base Name',
				kbNamePlaceholder: 'Please enter knowledge base name',
				kbDescription: 'Description',
				kbDescriptionPlaceholder: 'Please enter knowledge base description',
				knowledgeBaseType: 'Knowledge Base Type',
				typeTip: 'FAQ type is for structured Q&A data; Document type supports file parsing and chunking.',
				indexStrategy: 'Index Strategy',
				indexStrategyTip: 'Configure the processing pipeline after document upload. Keyword and vector retrieval are required for RAG.',
				graphEnabled: 'Knowledge Graph',
				graphEnabledTip: 'Enable to use graph relationships to assist retrieval.',
				graphTip: 'Enable to use graph relationships to assist retrieval.',
				keywordEnabled: 'Keyword',
				keywordEnabledTip: 'Required for RAG retrieval, automatically kept enabled.',
				keywordTip: 'Required for RAG retrieval, automatically kept enabled.',
				vectorEnabled: 'Vector',
				vectorEnabledTip: 'Required for RAG retrieval, automatically kept enabled.',
				vectorTip: 'Required for RAG retrieval, automatically kept enabled.',
				wikiEnabled: 'Wiki',
				wikiEnabledTip: 'Enable to supplement knowledge sources from Wiki content.',
				wikiTip: 'Enable to supplement knowledge sources from Wiki content.',
				tabModel: 'Model',
				modelIntro: 'Choose suitable AI models for the knowledge base.',
				knowledgeBaseName: 'Knowledge Base Name',
				namePlaceholder: 'Please enter knowledge base name',
				knowledgeBaseDesc: 'Description',
				descPlaceholder: 'Please enter knowledge base description',
				modelConfig: 'Model Config',
				modelConfigTip: 'Choose suitable AI models for the knowledge base',
				llmModel: 'LLM',
				llmTip: 'Large language model for summarization.',
				embeddingModelRequired: 'Please select an Embedding model',
				embeddingModel: 'Embedding Model',
				embeddingTip: 'Embedding model for text vectorization.',
				tabVectorStore: 'Vector Store',
				vectorStoreIntro: 'Select the vector store used by this knowledge base.',
				vectorStore: 'Vector Store',
				vectorStoreDefault: 'System Default',
				vectorStoreTip: 'Select from global vector store configurations. Can be empty; empty means system default.',
				vectorStoreImmutable: 'Cannot be changed after creation. To migrate, create a new KB bound to the target store and re-index.',
				systemDefault: 'System Default',
				parserEngine: 'Parser Engine',
				parserEngineTip: 'Select document parser engines for different file types',
				parserDefaultTip: 'Unconfigured file types will use the built-in parser engine.',
				tabParser: 'Parser',
				parserIntro: 'Select document parser engines for different file types.',
				selectPlaceholder: 'Please select',
				tabImage: 'Image',
				imageIntro: 'Configure image content understanding capabilities.',
				imageProcessing: 'Image Processing',
				imageProcessingTip: 'Configure image content understanding capabilities',
				multimodal: 'Multimodal',
				multimodalTip: 'Enable understanding of multimodal content such as images.',
				vlmEnabled: 'Multimodal',
				vlmEnabledTip: 'Enable understanding of multimodal content such as images.',
				vllmModel: 'VLLM Vision Model',
				vlmModel: 'VLM Model',
				vllmTip: 'Vision language model for multimodal understanding (required).',
				vlmModelTip: 'Vision language model for multimodal understanding (required).',
				tabAudio: 'Audio',
				audioIntro: 'Configure ASR capabilities.',
				audioProcessing: 'Audio Processing',
				audioProcessingTip: 'Configure ASR (Automatic Speech Recognition)',
				audioTip: 'Enable to upload audio files for automatic speech-to-text transcription (common formats: mp3, wav, m4a, flac, ogg, etc.). Video upload is not supported.',
				asrEnabled: 'Audio ASR',
				asrEnabledTip: 'Enable to upload audio to the knowledge base for automatic speech-to-text transcription, parsing and retrieval.',
				asrTip: 'Enable to upload audio to the knowledge base for automatic speech-to-text transcription, parsing and retrieval.',
				asrModel: 'ASR Model',
				asrModelTip: 'Speech-to-text recognition model (e.g. OpenAI Whisper).',
				tabStorage: 'Storage',
				storageIntro: 'Select the file storage engine for document uploads.',
				storageEngine: 'Storage Engine',
				storageEngineTip: 'Select the file storage engine for document uploads',
				storageEngineSelect: 'Select the storage engine for this knowledge base. The corresponding engine must be configured in global settings.',
				tabChunk: 'Chunking',
				chunkIntro: 'Configure document chunking parameters to optimize retrieval.',
				chunkSettings: 'Chunk Settings',
				chunkSettingsTip: 'Configure document chunking parameters to optimize retrieval',
				chunkStrategy: 'Chunk Strategy',
				chunkStrategyTip: 'Select the chunking method. Auto mode analyzes each document structure and selects the best strategy.',
				chunkAuto: 'Auto',
				chunkHeading: 'By Heading',
				chunkHeuristic: 'Structure Aware',
				chunkLegacy: 'By Length',
				chunkSize: 'Chunk Size',
				chunkSizeTip: 'Controls the character count per chunk (100-4000).',
				chunkOverlap: 'Chunk Overlap',
				chunkOverlapTip: 'Overlap characters between adjacent chunks (0-500).',
				chunkTipAuto: 'Document analyzer automatically selects between heading, structure aware, and length-based chunking.',
				chunkTipHeading: 'Splits at Markdown heading boundaries (#, ##, ###). Each chunk includes its heading path. Best for well-structured Markdown.',
				chunkTipHeuristic: 'Recognizes page breaks, numbered sections, multilingual markers, all-caps headings, and similar structure signals. Best for PDFs or scans without Markdown headings.',
				chunkTipLegacy: 'Ignores structure and splits by character count and separators only. Use when other strategies do not work well.',
				separators: 'Separators',
				separatorsTip: 'Separators used when chunking documents.',
				separatorsPlaceholder: 'Enter or select separators',
				separatorDoubleNewline: 'Double Newline',
				separatorSingleNewline: 'Single Newline',
				separatorChinesePeriod: 'Chinese Period',
				separatorExclamation: 'Exclamation',
				separatorQuestion: 'Question Mark',
				separatorEnglishSemicolon: 'English Semicolon',
				separatorChineseSemicolon: 'Chinese Semicolon',
				separatorSpace: 'Space',
				parentChildChunk: 'Parent-Child Chunking',
				parentChild: 'Parent-Child Chunking',
				parentChildTip: 'Enable two-level parent-child chunking. Larger parent chunks provide context, smaller child chunks are used for vector matching.',
				parentChildParams: 'Parent-Child Parameters',
				parentChunkSize: 'Parent Chunk Size',
				parentChunkSizeTip: 'Parent block character count for context (512-8192).',
				childChunkSize: 'Child Chunk Size',
				childChunkSizeTip: 'Child block character count for vector matching (64-2048).',
				advanced: 'Advanced',
				tokenLimit: 'Token Limit',
				tokenLimitTip: 'Hard token limit per chunk (0-8192). 0 = off (character-based only).',
				languageHint: 'Language Hint',
				languageHintTip: 'Restrict heuristic mode to selected languages (DE/EN/ZH). Leave empty = auto-detect.',
				languageHintPlaceholder: 'Select language hints',
				languagePlaceholder: 'Select language hints',
				langChinese: 'Chinese',
				langEnglish: 'English',
				langGerman: 'German',
				tabAdvanced: 'Advanced',
				advancedIntro: 'Configure advanced features such as question generation.',
				advancedSettings: 'Advanced Settings',
				advancedSettingsTip: 'Configure advanced features such as question generation',
				questionGeneration: 'AI Question Generation',
				questionGenerationTip: 'Generate related questions for each chunk using LLM during parsing to improve retrieval recall. Increases processing time.',
				questionCount: 'Questions per Chunk',
				questionCountTip: 'Number of questions generated per chunk (1-10).',
				tabFaq: 'FAQ',
				faqIntro: 'Configure FAQ indexing strategy and Q&A organization.',
				faqSettings: 'FAQ Settings',
				faqSettingsTip: 'Configure FAQ indexing strategy and Q&A organization',
				faqIndexMode: 'Index Mode',
				faqIndexModeTip: 'Index questions only for precision; index Q&A for higher recall.',
				faqIndexQuestionOnly: 'Questions Only',
				faqIndexQuestionAnswer: 'Questions & Answers',
				faqQuestionIndexMode: 'Question Index Mode',
				faqQuestionIndexModeTip: 'Combined: standard and similar questions indexed together; Separate: each indexed independently for more precise retrieval.',
				faqQuestionCombined: 'Combined Index',
				faqQuestionSeparate: 'Separate Index',
				pleaseInputName: 'Please enter knowledge base name',
				kbNameRequired: 'Please enter knowledge base name',
				pleaseSelectType: 'Please select knowledge base type',
				kbTypeRequired: 'Please select knowledge base type',
				pleaseSelectEmbedding: 'Please select an Embedding model',
				summaryModelRequired: 'Please select a summary model',
				pleaseSelectSummary: 'Please select a summary model',
				knowledgeBaseUpdated: 'Knowledge base updated',
				updateSuccess: 'Knowledge base updated',
				knowledgeBaseCreated: 'Knowledge base created',
				createSuccess: 'Knowledge base created',
				saveFailed: 'Save failed',
				enabled: 'Enabled',
				disabled: 'Disabled',
				typeDocument: 'Document',
				typeFaq: 'Q&A',
				onOff: { on: 'On', off: 'Off' },
				docType: 'Document',
				faqType: 'Q&A',
				chunkStrategies: {
					auto: 'Auto',
					heading: 'By Heading',
					heuristic: 'Structure Aware',
					legacy: 'By Length'
				},
				chunkStrategyTips: {
					auto: 'Document analyzer automatically selects between heading, structure aware, and length-based chunking.',
					heading: 'Splits at Markdown heading boundaries (#, ##, ###). Each chunk includes its heading path. Best for well-structured Markdown.',
					heuristic: 'Recognizes page breaks, numbered sections, multilingual markers, all-caps headings, etc. Best for PDFs/scans without Markdown headings.',
					legacy: 'Ignores structure, splits by character count and separators only. Use when other strategies do not work well.'
				},
				faqIndexModes: {
					questionOnly: 'Questions Only',
					questionAnswer: 'Questions & Answers'
				},
				faqQuestionIndexModes: {
					combined: 'Combined Index',
					separate: 'Separate Index'
				},
				separatorOptions: {
					doubleNewline: 'Double Newline',
					singleNewline: 'Single Newline',
					chinesePeriod: 'Chinese Period',
					exclamation: 'Exclamation',
					questionMark: 'Question Mark',
					englishSemicolon: 'English Semicolon',
					chineseSemicolon: 'Chinese Semicolon',
					space: 'Space'
				},
				languageOptions: {
					chinese: 'Chinese',
					english: 'English',
					german: 'German'
				}
			}
		}
	},
	nodes: {
		groups: {
			start: 'Start',
			data: 'Data Processing',
			logic: 'Logic',
			tool: 'Tool',
			other: 'Other',
			custom: 'Custom'
		},
		meta: {
			start: {
				displayName: 'User Input',
				description: 'Collect user input when the workflow starts'
			},
			end: { displayName: 'Output', description: 'Finish the workflow and output the result' },
			'http-request': {
				displayName: 'HTTP Request',
				description: 'Fetch data through an HTTP request'
			},
			'if-else': {
				displayName: 'Condition',
				description: 'Route to different branches based on conditions'
			},
			database: { displayName: 'Database Query', description: 'Query data through a database' },
			code: { displayName: 'Code', description: 'Process data with code' },
			'module-invoke': {
				displayName: 'Module Invoke',
				description: 'Invoke a module through interface code'
			},
			'basic-dataset': {
				displayName: 'Basic Dataset',
				description: 'Read data from a configured basic dataset'
			},
			'knowledge-retrieval': {
				displayName: 'Knowledge Retrieval',
				description:
					'Retrieve relevant text chunks from knowledge bases or specific knowledge files'
			},
			'ai-agent': {
				displayName: 'AI Agent',
				description: 'Execute Q&A and reasoning with agent configuration'
			},
			'view-data': {
				displayName: 'View Data',
				description: 'Read data from a configured view'
			},
			llm: {
				displayName: 'LLM',
				description: 'Call a large language model to answer questions or process natural language'
			},
			iteration: { displayName: 'Iteration', description: 'Iteration node' },
			loop: { displayName: 'Loop', description: 'Loop node' },
			'list-operator': { displayName: 'List Operations', description: 'List operation node' },
			'question-classifier': {
				displayName: 'Question Classifier',
				description: 'Classify questions into predefined categories'
			},
			'loop-end': { displayName: 'Exit Loop', description: 'Exit the current iteration or loop' },
			'trigger-schedule': {
				displayName: 'Schedule Trigger',
				description: 'Trigger the workflow on a schedule'
			},
			'trigger-webhook': {
				displayName: 'Webhook Trigger',
				description: 'Receive third-party webhook requests and trigger the workflow'
			},
			'loop-start': { displayName: 'Loop Start' },
			'iteration-start': { displayName: 'Iteration Start' },
			stickyNote: { displayName: 'Note', description: 'Markdown note block' },
			'mail-sender': {
				displayName: 'Mail Sender',
				description: 'Send emails to specified recipients'
			},
			'sms-sender': {
				displayName: 'SMS Sender',
				description: 'Send SMS messages to specified phone numbers'
			},
			'workflow-approval': {
				displayName: 'Workflow Approval',
				description: 'Submit workflow approval request with user and job information'
			}
		},
		outputs: {
			http: {
				body: 'Response body',
				statusCode: 'Response status code',
				headers: 'Response headers JSON'
			},
			webhook: {
				rawRequestBody: 'Raw webhook request body'
			},
			database: {
				rows: 'Query result rows',
				rowCount: 'Query result row count'
			},
			'view-data': {
				viewTable: 'View data result',
				viewName: 'View name',
				totalCount: 'Total count'
			},
			'knowledge-retrieval': {
				result: 'Matched text chunks',
				content: 'Concatenated retrieval content'
			},
			'ai-agent': {
				text: 'Generated content',
				think: 'Reasoning content'
			},
			llm: {
				text: 'Generated content',
				reasoningContent: 'Reasoning content',
				usage: 'Model usage information',
				structuredOutput: 'Structured object'
			},
			list: {
				result: 'Filtered results',
				firstRecord: 'First record',
				lastRecord: 'Last record'
			},
			condition: {
				casePrefix: 'Condition_'
			},
			'question-classifier': {
				classPrefix: 'Class '
			}
		}
	}
}
