mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-11 16:26:02 +00:00
后端没修完版
This commit is contained in:
@@ -18,8 +18,11 @@ export default function I18nProvider({ children }: I18nProviderProps) {
|
||||
// return i18nLabel.en_US;
|
||||
// }
|
||||
|
||||
export const extractI18nObject = (i18nObject: I18nObject): string => {
|
||||
export const extractI18nObject = (i18nObject: I18nObject | undefined | null): string => {
|
||||
// 根据当前语言返回对应的值, fallback优先级:en_US、zh_Hans、zh_Hant、ja_JP
|
||||
if (!i18nObject || typeof i18nObject !== 'object') {
|
||||
return '';
|
||||
}
|
||||
const language = i18n.language.replace('-', '_');
|
||||
if (language === 'en_US' && i18nObject.en_US) return i18nObject.en_US;
|
||||
if (language === 'zh_Hans' && i18nObject.zh_Hans) return i18nObject.zh_Hans;
|
||||
|
||||
@@ -38,6 +38,9 @@ const enUS = {
|
||||
select: 'Select',
|
||||
cancel: 'Cancel',
|
||||
submit: 'Submit',
|
||||
next: 'Next',
|
||||
back: 'Back',
|
||||
refresh: 'Refresh',
|
||||
error: 'Error',
|
||||
success: 'Success',
|
||||
save: 'Save',
|
||||
@@ -57,6 +60,8 @@ const enUS = {
|
||||
deleteError: 'Delete failed: ',
|
||||
addRound: 'Add Round',
|
||||
copy: 'Copy',
|
||||
undo: 'Undo',
|
||||
redo: 'Redo',
|
||||
copySuccess: 'Copy Successfully',
|
||||
copyFailed: 'Copy Failed',
|
||||
test: 'Test',
|
||||
@@ -148,6 +153,12 @@ const enUS = {
|
||||
more: 'More ({{count}})',
|
||||
less: 'Less',
|
||||
noItems: 'No items',
|
||||
data: 'Data',
|
||||
result: 'Result',
|
||||
body: 'Body',
|
||||
headers: 'Headers',
|
||||
query: 'Query',
|
||||
method: 'Method',
|
||||
},
|
||||
notFound: {
|
||||
title: 'Page not found',
|
||||
@@ -362,6 +373,16 @@ const enUS = {
|
||||
pipelineDiscard: 'Discard Message',
|
||||
sessionTypePerson: 'Private Chat',
|
||||
sessionTypeGroup: 'Group Chat',
|
||||
// Unified binding (replacing routing rules)
|
||||
bindTarget: 'Bind Target',
|
||||
bindTargetDescription: 'Select the Pipeline or Workflow to process messages for this bot',
|
||||
bindingType: 'Binding Type',
|
||||
selectBinding: 'Select binding target',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
noPipelinesFound: 'No pipelines available',
|
||||
noWorkflowsFound: 'No workflows available',
|
||||
pipelineBindingHelp: 'Pipeline is the traditional message processing method using predefined stages.',
|
||||
workflowBindingHelp: 'Workflow provides visual node orchestration for more flexible message processing.',
|
||||
adapterConfigDescription: 'Configure the selected platform adapter',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDescription: 'Irreversible and destructive actions',
|
||||
@@ -1291,6 +1312,795 @@ const enUS = {
|
||||
backToWorkbench: 'Back to Workbench',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: 'Debug Chat',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: {
|
||||
title: 'Debug',
|
||||
mode: 'Debug Mode',
|
||||
panel: 'Debug Panel',
|
||||
start: 'Start Debug',
|
||||
pause: 'Pause',
|
||||
resume: 'Resume',
|
||||
step: 'Step',
|
||||
stop: 'Stop',
|
||||
context: 'Debug Context',
|
||||
messageContent: 'Simulated Message',
|
||||
messageContentPlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
platform: 'Platform',
|
||||
platformPlaceholder: 'e.g. qq, wechat, telegram',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
customVariablesDesc: 'Add custom variables for debugging',
|
||||
variableKey: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
addVariable: 'Add Variable',
|
||||
variables: 'Watched Variables',
|
||||
watchedVariables: 'Watched Variables',
|
||||
noWatchedVariables: 'No watched variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
nodeOutputs: 'Node Outputs',
|
||||
noNodeOutputs: 'No node outputs yet',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
clearBreakpoints: 'Clear All Breakpoints',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
logs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
logEntries: 'log entries',
|
||||
resetContext: 'Reset Context',
|
||||
// Debug execution messages
|
||||
starting: 'Starting debug execution...',
|
||||
started: 'Debug execution started (ID: {{id}})',
|
||||
startError: 'Failed to start debug',
|
||||
completed: 'Debug execution completed',
|
||||
unknownError: 'Unknown error',
|
||||
paused: 'Execution paused',
|
||||
pauseError: 'Failed to pause',
|
||||
resumed: 'Execution resumed',
|
||||
resumeError: 'Failed to resume',
|
||||
steppedTo: 'Stepped to node: {{node}}',
|
||||
stepError: 'Failed to step',
|
||||
stopped: 'Debug stopped',
|
||||
stopError: 'Failed to stop',
|
||||
},
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Workflow Chat',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
sessionType: 'Session Type',
|
||||
privateChat: 'Private Chat',
|
||||
groupChat: 'Group Chat',
|
||||
send: 'Send',
|
||||
reset: 'Reset Conversation',
|
||||
inputPlaceholder: 'Send {{type}} message...',
|
||||
noMessages: 'No messages',
|
||||
userMessage: 'User',
|
||||
botMessage: 'Bot',
|
||||
sendFailed: 'Send failed',
|
||||
resetSuccess: 'Conversation reset successfully',
|
||||
resetFailed: 'Reset failed',
|
||||
loadMessagesFailed: 'Failed to load messages',
|
||||
loadWorkflowsFailed: 'Failed to load workflows',
|
||||
atTips: 'Mention bot',
|
||||
streaming: 'Streaming',
|
||||
streamOutput: 'Stream',
|
||||
connected: 'WebSocket connected',
|
||||
disconnected: 'WebSocket disconnected',
|
||||
connectionError: 'WebSocket connection error',
|
||||
connectionFailed: 'WebSocket connection failed',
|
||||
notConnected: 'WebSocket not connected, please try again later',
|
||||
imageUploadFailed: 'Image upload failed',
|
||||
reply: 'Reply',
|
||||
replyTo: 'Reply to',
|
||||
showMarkdown: 'Render',
|
||||
showRaw: 'Raw',
|
||||
allMembers: 'All Members',
|
||||
file: 'File',
|
||||
voice: 'Voice',
|
||||
uploadImage: 'Upload Image',
|
||||
uploading: 'Uploading...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
unifiedBinding: {
|
||||
bindingType: 'Binding Type',
|
||||
pipeline: 'Pipeline',
|
||||
workflow: 'Workflow',
|
||||
pipelineDescription: 'Process messages using traditional pipeline',
|
||||
workflowDescription: 'Process messages using visual workflow',
|
||||
selectPipeline: 'Select Pipeline',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
noPipelines: 'No pipelines available',
|
||||
noWorkflows: 'No workflows available',
|
||||
createPipeline: 'Create Pipeline',
|
||||
createWorkflow: 'Create Workflow',
|
||||
},
|
||||
};
|
||||
|
||||
export default enUS;
|
||||
|
||||
@@ -1328,6 +1328,726 @@ const esES = {
|
||||
backToWorkbench: 'Volver al panel de trabajo',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: 'Chat de depuración',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: 'Debug',
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Workflow Chat',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
sessionType: 'Session Type',
|
||||
privateChat: 'Private Chat',
|
||||
groupChat: 'Group Chat',
|
||||
send: 'Send',
|
||||
reset: 'Reset Conversation',
|
||||
inputPlaceholder: 'Send {{type}} message...',
|
||||
noMessages: 'No messages',
|
||||
userMessage: 'User',
|
||||
botMessage: 'Bot',
|
||||
sendFailed: 'Send failed',
|
||||
resetSuccess: 'Conversation reset successfully',
|
||||
resetFailed: 'Reset failed',
|
||||
loadMessagesFailed: 'Failed to load messages',
|
||||
loadWorkflowsFailed: 'Failed to load workflows',
|
||||
atTips: 'Mention bot',
|
||||
streaming: 'Streaming',
|
||||
streamOutput: 'Stream',
|
||||
connected: 'WebSocket connected',
|
||||
disconnected: 'WebSocket disconnected',
|
||||
connectionError: 'WebSocket connection error',
|
||||
connectionFailed: 'WebSocket connection failed',
|
||||
notConnected: 'WebSocket not connected, please try again later',
|
||||
imageUploadFailed: 'Image upload failed',
|
||||
reply: 'Reply',
|
||||
replyTo: 'Reply to',
|
||||
showMarkdown: 'Render',
|
||||
showRaw: 'Raw',
|
||||
allMembers: 'All Members',
|
||||
file: 'File',
|
||||
voice: 'Voice',
|
||||
uploadImage: 'Upload Image',
|
||||
uploading: 'Uploading...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default esES;
|
||||
|
||||
@@ -1298,6 +1298,726 @@
|
||||
backToWorkbench: 'ワークベンチに戻る',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: 'チャットデバッグ',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: 'Debug',
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'ワークフロー チャット',
|
||||
selectWorkflow: 'ワークフローを選択',
|
||||
sessionType: 'セッションタイプ',
|
||||
privateChat: 'プライベートチャット',
|
||||
groupChat: 'グループチャット',
|
||||
send: '送信',
|
||||
reset: '会話をリセット',
|
||||
inputPlaceholder: '{{type}} メッセージを送信...',
|
||||
noMessages: 'メッセージなし',
|
||||
userMessage: 'ユーザー',
|
||||
botMessage: 'ボット',
|
||||
sendFailed: '送信失敗',
|
||||
resetSuccess: '会話がリセットされました',
|
||||
resetFailed: 'リセット失敗',
|
||||
loadMessagesFailed: 'メッセージの読み込みに失敗しました',
|
||||
loadWorkflowsFailed: 'ワークフローの読み込みに失敗しました',
|
||||
atTips: 'ボットをメンション',
|
||||
streaming: 'ストリーミング',
|
||||
streamOutput: 'ストリーム',
|
||||
connected: 'WebSocket接続済み',
|
||||
disconnected: 'WebSocket未接続',
|
||||
connectionError: 'WebSocket接続エラー',
|
||||
connectionFailed: 'WebSocket接続失敗',
|
||||
notConnected: 'WebSocket未接続です。しばらくしてからもう一度お試しください',
|
||||
imageUploadFailed: '画像アップロード失敗',
|
||||
reply: '返信',
|
||||
replyTo: '返信先',
|
||||
showMarkdown: 'レンダリング',
|
||||
showRaw: '原文',
|
||||
allMembers: '全メンバー',
|
||||
file: 'ファイル',
|
||||
voice: '音声',
|
||||
uploadImage: '画像をアップロード',
|
||||
uploading: 'アップロード中...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default jaJP;
|
||||
|
||||
@@ -1300,6 +1300,726 @@ const ruRU = {
|
||||
backToWorkbench: 'Вернуться к рабочей панели',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: 'Отладочный чат',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: 'Debug',
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Workflow Chat',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
sessionType: 'Session Type',
|
||||
privateChat: 'Private Chat',
|
||||
groupChat: 'Group Chat',
|
||||
send: 'Send',
|
||||
reset: 'Reset Conversation',
|
||||
inputPlaceholder: 'Send {{type}} message...',
|
||||
noMessages: 'No messages',
|
||||
userMessage: 'User',
|
||||
botMessage: 'Bot',
|
||||
sendFailed: 'Send failed',
|
||||
resetSuccess: 'Conversation reset successfully',
|
||||
resetFailed: 'Reset failed',
|
||||
loadMessagesFailed: 'Failed to load messages',
|
||||
loadWorkflowsFailed: 'Failed to load workflows',
|
||||
atTips: 'Mention bot',
|
||||
streaming: 'Streaming',
|
||||
streamOutput: 'Stream',
|
||||
connected: 'WebSocket connected',
|
||||
disconnected: 'WebSocket disconnected',
|
||||
connectionError: 'WebSocket connection error',
|
||||
connectionFailed: 'WebSocket connection failed',
|
||||
notConnected: 'WebSocket not connected, please try again later',
|
||||
imageUploadFailed: 'Image upload failed',
|
||||
reply: 'Reply',
|
||||
replyTo: 'Reply to',
|
||||
showMarkdown: 'Render',
|
||||
showRaw: 'Raw',
|
||||
allMembers: 'All Members',
|
||||
file: 'File',
|
||||
voice: 'Voice',
|
||||
uploadImage: 'Upload Image',
|
||||
uploading: 'Uploading...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default ruRU;
|
||||
|
||||
@@ -1270,6 +1270,726 @@ const thTH = {
|
||||
backToWorkbench: 'กลับไปหน้าทำงาน',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: 'แชทดีบัก',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: 'Debug',
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Workflow Chat',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
sessionType: 'Session Type',
|
||||
privateChat: 'Private Chat',
|
||||
groupChat: 'Group Chat',
|
||||
send: 'Send',
|
||||
reset: 'Reset Conversation',
|
||||
inputPlaceholder: 'Send {{type}} message...',
|
||||
noMessages: 'No messages',
|
||||
userMessage: 'User',
|
||||
botMessage: 'Bot',
|
||||
sendFailed: 'Send failed',
|
||||
resetSuccess: 'Conversation reset successfully',
|
||||
resetFailed: 'Reset failed',
|
||||
loadMessagesFailed: 'Failed to load messages',
|
||||
loadWorkflowsFailed: 'Failed to load workflows',
|
||||
atTips: 'Mention bot',
|
||||
streaming: 'Streaming',
|
||||
streamOutput: 'Stream',
|
||||
connected: 'WebSocket connected',
|
||||
disconnected: 'WebSocket disconnected',
|
||||
connectionError: 'WebSocket connection error',
|
||||
connectionFailed: 'WebSocket connection failed',
|
||||
notConnected: 'WebSocket not connected, please try again later',
|
||||
imageUploadFailed: 'Image upload failed',
|
||||
reply: 'Reply',
|
||||
replyTo: 'Reply to',
|
||||
showMarkdown: 'Render',
|
||||
showRaw: 'Raw',
|
||||
allMembers: 'All Members',
|
||||
file: 'File',
|
||||
voice: 'Voice',
|
||||
uploadImage: 'Upload Image',
|
||||
uploading: 'Uploading...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default thTH;
|
||||
|
||||
@@ -1291,6 +1291,726 @@ const viVN = {
|
||||
backToWorkbench: 'Quay lại bàn làm việc',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: 'Trò chuyện gỡ lỗi',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: 'Debug',
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: 'Workflow Chat',
|
||||
selectWorkflow: 'Select Workflow',
|
||||
sessionType: 'Session Type',
|
||||
privateChat: 'Private Chat',
|
||||
groupChat: 'Group Chat',
|
||||
send: 'Send',
|
||||
reset: 'Reset Conversation',
|
||||
inputPlaceholder: 'Send {{type}} message...',
|
||||
noMessages: 'No messages',
|
||||
userMessage: 'User',
|
||||
botMessage: 'Bot',
|
||||
sendFailed: 'Send failed',
|
||||
resetSuccess: 'Conversation reset successfully',
|
||||
resetFailed: 'Reset failed',
|
||||
loadMessagesFailed: 'Failed to load messages',
|
||||
loadWorkflowsFailed: 'Failed to load workflows',
|
||||
atTips: 'Mention bot',
|
||||
streaming: 'Streaming',
|
||||
streamOutput: 'Stream',
|
||||
connected: 'WebSocket connected',
|
||||
disconnected: 'WebSocket disconnected',
|
||||
connectionError: 'WebSocket connection error',
|
||||
connectionFailed: 'WebSocket connection failed',
|
||||
notConnected: 'WebSocket not connected, please try again later',
|
||||
imageUploadFailed: 'Image upload failed',
|
||||
reply: 'Reply',
|
||||
replyTo: 'Reply to',
|
||||
showMarkdown: 'Render',
|
||||
showRaw: 'Raw',
|
||||
allMembers: 'All Members',
|
||||
file: 'File',
|
||||
voice: 'Voice',
|
||||
uploadImage: 'Upload Image',
|
||||
uploading: 'Uploading...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default viVN;
|
||||
|
||||
@@ -37,6 +37,9 @@ const zhHans = {
|
||||
select: '请选择',
|
||||
cancel: '取消',
|
||||
submit: '提交',
|
||||
next: '下一步',
|
||||
back: '返回',
|
||||
refresh: '刷新',
|
||||
error: '错误',
|
||||
success: '成功',
|
||||
save: '保存',
|
||||
@@ -56,6 +59,8 @@ const zhHans = {
|
||||
deleteError: '删除失败:',
|
||||
addRound: '添加回合',
|
||||
copy: '复制',
|
||||
undo: '撤销',
|
||||
redo: '重做',
|
||||
copySuccess: '复制成功',
|
||||
copyFailed: '复制失败',
|
||||
test: '测试',
|
||||
@@ -73,6 +78,7 @@ const zhHans = {
|
||||
loginLocal: '使用本地账号登录',
|
||||
loginWithPassword: '通过密码登录',
|
||||
spaceLoginTitle: '通过 Space 登录',
|
||||
details: '详情',
|
||||
spaceLoginDescription: '扫描二维码或访问下方链接进行授权',
|
||||
spaceLoginUserCode: '您的验证码',
|
||||
spaceLoginExpires: '验证码将在 {{seconds}} 秒后过期',
|
||||
@@ -139,6 +145,12 @@ const zhHans = {
|
||||
more: '更多 ({{count}})',
|
||||
less: '收起',
|
||||
noItems: '暂无内容',
|
||||
data: '数据',
|
||||
result: '结果',
|
||||
body: '请求体',
|
||||
headers: '请求头',
|
||||
query: '查询参数',
|
||||
method: '请求方法',
|
||||
},
|
||||
notFound: {
|
||||
title: '页面不存在',
|
||||
@@ -348,6 +360,16 @@ const zhHans = {
|
||||
pipelineDiscard: '丢弃消息',
|
||||
sessionTypePerson: '私聊',
|
||||
sessionTypeGroup: '群聊',
|
||||
// Unified binding (replacing routing rules)
|
||||
bindTarget: '绑定目标',
|
||||
bindTargetDescription: '选择处理此机器人消息的 Pipeline 或 Workflow',
|
||||
bindingType: '绑定类型',
|
||||
selectBinding: '请选择绑定目标',
|
||||
selectWorkflow: '选择工作流',
|
||||
noPipelinesFound: '暂无可用的流水线',
|
||||
noWorkflowsFound: '暂无可用的工作流',
|
||||
pipelineBindingHelp: '流水线是传统的消息处理方式,通过预定义的阶段处理消息。',
|
||||
workflowBindingHelp: '工作流提供可视化的节点编排,支持更灵活的消息处理逻辑。',
|
||||
adapterConfigDescription: '配置所选平台适配器',
|
||||
dangerZone: '危险区域',
|
||||
dangerZoneDescription: '不可逆的操作',
|
||||
@@ -1233,6 +1255,848 @@ const zhHans = {
|
||||
backToWorkbench: '返回工作台',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: '工作流',
|
||||
description: '创建和管理可视化工作流,实现复杂的消息处理逻辑',
|
||||
createWorkflow: '创建工作流',
|
||||
selectFromSidebar: '从侧边栏选择一个工作流',
|
||||
editWorkflow: '编辑工作流',
|
||||
newWorkflow: '新工作流',
|
||||
getWorkflowListError: '获取工作流列表失败:',
|
||||
workflowName: '工作流名称',
|
||||
workflowDescription: '工作流描述',
|
||||
workflowNameRequired: '工作流名称不能为空',
|
||||
defaultDescription: '一个工作流',
|
||||
getWorkflowError: '获取工作流失败:',
|
||||
loadError: '加载工作流失败',
|
||||
saveSuccess: '保存成功',
|
||||
saveError: '保存失败:',
|
||||
createSuccess: '工作流创建成功',
|
||||
createError: '创建失败:',
|
||||
deleteSuccess: '删除成功',
|
||||
deleteError: '删除失败:',
|
||||
deleteConfirmation: '你确定要删除这个工作流吗?',
|
||||
copySuccess: '复制成功',
|
||||
copyError: '复制失败:',
|
||||
export: '导出',
|
||||
import: '导入',
|
||||
exportSuccess: '工作流已导出',
|
||||
importSuccess: '工作流已导入',
|
||||
importError: '导入失败:文件格式无效',
|
||||
publish: '发布',
|
||||
publishSuccess: '发布成功',
|
||||
publishError: '发布失败',
|
||||
configuration: '配置',
|
||||
executions: '执行记录',
|
||||
editor: '编辑器',
|
||||
debugChat: '对话调试',
|
||||
basicInfo: '基础信息',
|
||||
basicInfoDesc: '设置工作流名称、图标和描述',
|
||||
basicInfoDescription: '设置工作流名称和描述',
|
||||
dangerZone: '危险区域',
|
||||
dangerZoneDesc: '不可逆的操作',
|
||||
dangerZoneDescription: '不可逆的操作',
|
||||
deleteWorkflowAction: '删除此工作流',
|
||||
deleteWorkflowHint: '删除后,所有关联配置将被永久移除,且无法恢复。',
|
||||
deleteWorkflow: '删除工作流',
|
||||
deleteConfirm: '确认删除',
|
||||
deleteConfirmDesc: '您确定要删除工作流 "{{name}}" 吗?此操作无法撤销。',
|
||||
// Form component
|
||||
name: '名称',
|
||||
namePlaceholder: '输入工作流名称',
|
||||
descriptionPlaceholder: '输入工作流描述(可选)',
|
||||
enabled: '启用',
|
||||
enabledDesc: '启用后,工作流将可以被触发执行',
|
||||
loading: '加载中...',
|
||||
info: '工作流信息',
|
||||
uuid: 'UUID',
|
||||
version: '版本',
|
||||
createdAt: '创建时间',
|
||||
updatedAt: '更新时间',
|
||||
// Executions tab
|
||||
totalExecutions: '共 {{count}} 条执行记录',
|
||||
statistics: '统计分析',
|
||||
successfulCount: '成功 {{count}} 次',
|
||||
successRate: '成功率',
|
||||
averageDuration: '平均耗时',
|
||||
perExecution: '每次执行',
|
||||
failedExecutions: '失败次数',
|
||||
lastExecution: '最后执行',
|
||||
filterByStatus: '按状态筛选',
|
||||
allStatuses: '全部状态',
|
||||
manualTrigger: '手动触发',
|
||||
executionId: '执行 ID',
|
||||
status: '状态',
|
||||
triggerType: '触发类型',
|
||||
startedAt: '开始时间',
|
||||
duration: '耗时',
|
||||
noExecutions: '暂无执行记录',
|
||||
executionDetails: '执行详情',
|
||||
error: '错误信息',
|
||||
nodeExecutions: '节点执行记录',
|
||||
result: '执行结果',
|
||||
'status.pending': '等待中',
|
||||
'status.running': '执行中',
|
||||
'status.completed': '已完成',
|
||||
'status.failed': '失败',
|
||||
'status.cancelled': '已取消',
|
||||
// Editor component translations
|
||||
nodePalette: '节点面板',
|
||||
properties: '属性',
|
||||
zoomIn: '放大',
|
||||
zoomOut: '缩小',
|
||||
fitView: '适应视图',
|
||||
unsavedChanges: '有未保存的更改',
|
||||
paste: '粘贴',
|
||||
deleted: '已删除',
|
||||
nothingToCopy: '没有选中的节点可复制',
|
||||
nothingToPaste: '剪贴板为空',
|
||||
copied: '已复制 {{count}} 个节点',
|
||||
pasted: '已粘贴 {{count}} 个节点',
|
||||
nodesSelected: '已选中 {{count}} 个节点',
|
||||
edgesSelected: '已选中 {{count}} 条连线',
|
||||
// Node palette
|
||||
searchNodes: '搜索节点...',
|
||||
loadingNodeTypes: '正在加载节点类型...',
|
||||
noNodesFound: '未找到匹配的节点',
|
||||
clearSearch: '清除搜索',
|
||||
dragToAdd: '拖拽节点到画布添加',
|
||||
// Property panel
|
||||
selectNodeOrEdge: '选择一个节点或连线',
|
||||
selectNodeOrEdgeHint: '点击画布中的节点或连线来查看和编辑其属性',
|
||||
edgeProperties: '连线属性',
|
||||
nodeProperties: '节点属性',
|
||||
condition: '条件',
|
||||
hasCondition: '已设置',
|
||||
conditionPlaceholder: '输入条件表达式,如: output.success == true',
|
||||
conditionHelp: '条件为空时,该连线将始终被执行。支持使用 {{变量名}} 引用上下文变量。',
|
||||
deleteEdge: '删除连线',
|
||||
deleteEdgeConfirm: '确认删除连线',
|
||||
deleteEdgeConfirmDesc: '删除后,该连线将被永久移除。',
|
||||
nodeLabel: '节点名称',
|
||||
nodeLabelPlaceholder: '输入节点显示名称',
|
||||
nodeId: '节点 ID',
|
||||
inputOutputVariables: '输入/输出变量',
|
||||
inputs: '输入',
|
||||
outputs: '输出',
|
||||
availableVariables: '可用变量',
|
||||
globalVariables: '全局变量',
|
||||
messageContent: '消息内容',
|
||||
messageSender: '发送者',
|
||||
platform: '平台',
|
||||
sessionId: '会话 ID',
|
||||
timestamp: '时间戳',
|
||||
nodeConfig: '节点配置',
|
||||
noConfigOptions: '该节点类型暂无配置选项',
|
||||
deleteNode: '删除节点',
|
||||
deleteNodeConfirm: '确认删除节点',
|
||||
deleteNodeConfirmDesc: '删除后,该节点及其所有连线将被永久移除。',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: '输入',
|
||||
message: '消息内容',
|
||||
text: '文本',
|
||||
query: '查询',
|
||||
data: '数据',
|
||||
condition: '条件',
|
||||
value: '值',
|
||||
// Trigger inputs
|
||||
content: '内容',
|
||||
context: '上下文',
|
||||
body: '请求体',
|
||||
variables: '变量',
|
||||
items: '项目列表',
|
||||
arguments: '参数',
|
||||
// AI/Process inputs
|
||||
question: '问题',
|
||||
parameters: '参数定义',
|
||||
key: '键',
|
||||
payload: '载荷',
|
||||
input_value: '输入值',
|
||||
conversation_id: '会话 ID',
|
||||
// Control inputs
|
||||
case_1: '分支1输入',
|
||||
case_2: '分支2输入',
|
||||
branch_1: '分支1',
|
||||
branch_2: '分支2',
|
||||
// Action inputs
|
||||
notification_id: '通知ID',
|
||||
// Integration inputs
|
||||
key_template: '键模板',
|
||||
hash_field: '哈希字段',
|
||||
server_name: '服务器名称',
|
||||
tool_name: '工具名称',
|
||||
arguments_template: '参数模板',
|
||||
scope: '作用域',
|
||||
},
|
||||
nodeOutputs: {
|
||||
// Common outputs
|
||||
output: '输出',
|
||||
result: '结果',
|
||||
response: '响应',
|
||||
message: '消息',
|
||||
data: '数据',
|
||||
error: '错误',
|
||||
// Trigger outputs
|
||||
sender: '发送者',
|
||||
sender_id: '发送者 ID',
|
||||
sender_name: '发送者名称',
|
||||
conversation_id: '会话 ID',
|
||||
context: '上下文',
|
||||
cron_timestamp: 'Cron 时间戳',
|
||||
cron_schedule: 'Cron 调度表达式',
|
||||
cron_context: 'Cron 上下文',
|
||||
trigger_time: '触发时间',
|
||||
schedule: '触发计划',
|
||||
headers: '请求头',
|
||||
query_params: '查询参数',
|
||||
query: '查询参数',
|
||||
method: '请求方法',
|
||||
body: '请求体',
|
||||
is_group: '是否群聊',
|
||||
platform: '平台',
|
||||
event: '事件',
|
||||
event_type: '事件类型',
|
||||
event_data: '事件数据',
|
||||
event_timestamp: '事件时间戳',
|
||||
// AI/Process outputs
|
||||
usage: 'Token使用统计',
|
||||
parsed: '解析结果',
|
||||
category: '分类结果',
|
||||
confidence: '置信度',
|
||||
all_scores: '所有分数',
|
||||
missing: '缺失参数',
|
||||
success: '是否成功',
|
||||
scores: '分数',
|
||||
chunks: '文本块',
|
||||
count: '数量',
|
||||
logs: '日志',
|
||||
embedding: '向量',
|
||||
dimensions: '维度',
|
||||
intent: '意图',
|
||||
entities: '实体',
|
||||
prompt: '提示/问题',
|
||||
context_info: '上下文信息',
|
||||
console: '控制台输出',
|
||||
code_input: '代码输入',
|
||||
code_output: '代码输出',
|
||||
http_body: 'HTTP 请求体',
|
||||
http_headers: 'HTTP 请求头',
|
||||
http_response: 'HTTP 响应',
|
||||
response_headers: '响应头',
|
||||
transform_input: '转换输入',
|
||||
transform_result: '转换结果',
|
||||
question: '用户问题',
|
||||
parameters: '提取的参数',
|
||||
extraction_success: '提取成功',
|
||||
extract_text: '输入文本',
|
||||
documents: '检索的文档',
|
||||
citations: '引用信息',
|
||||
knowledge_context: '合并上下文',
|
||||
knowledge_query: '检索查询',
|
||||
text: '文本',
|
||||
// Control outputs
|
||||
true: '条件为真输出',
|
||||
false: '条件为假输出',
|
||||
matched_case: '匹配分支',
|
||||
case_1: '分支 1',
|
||||
case_2: '分支 2',
|
||||
default: '默认分支',
|
||||
item: '当前项',
|
||||
index: '当前索引',
|
||||
completed: '是否完成',
|
||||
is_first: '是否第一个',
|
||||
is_last: '是否最后一个',
|
||||
results: '结果',
|
||||
branch_1: '分支1输出',
|
||||
branch_2: '分支2输出',
|
||||
condition_input: '条件输入',
|
||||
switch_input: '开关输入',
|
||||
loop_items: '迭代项目',
|
||||
iterator_array: '输入数组',
|
||||
iterator_item: '当前元素',
|
||||
iterator_index: '当前索引',
|
||||
errors: '错误列表',
|
||||
parallel_input: '并行输入',
|
||||
parallel_results: '所有分支结果',
|
||||
wait_input: '透传输入',
|
||||
wait_output: '透传输出',
|
||||
merged: '合并结果',
|
||||
merge_array: '数组结果',
|
||||
merge_input_1: '输入 1',
|
||||
merge_input_2: '输入 2',
|
||||
merge_input_3: '输入 3',
|
||||
merge_input_4: '输入 4',
|
||||
aggregated: '聚合变量',
|
||||
aggregator_variables: '变量输入',
|
||||
// Action outputs
|
||||
message_id: '消息ID',
|
||||
status_code: '状态码',
|
||||
status: '状态',
|
||||
execution_id: '执行ID',
|
||||
notification_id: '通知ID',
|
||||
target: '目标 ID',
|
||||
reply_message: '回复内容',
|
||||
pipeline_response: 'Pipeline 响应',
|
||||
pipeline_result: '完整结果',
|
||||
pipeline_query: '查询内容',
|
||||
context_data: '上下文数据',
|
||||
store_status: '存储状态',
|
||||
store_key: '存储键',
|
||||
store_value: '存储值',
|
||||
variable_value: '变量值',
|
||||
variable_result: '设置变量结果',
|
||||
statement: '开场白',
|
||||
suggested_questions: '建议问题',
|
||||
suggestions: '建议问题',
|
||||
workflow_output: '工作流输出',
|
||||
final_result: '最终结果',
|
||||
// Integration outputs
|
||||
query_results: '查询结果',
|
||||
row_count: '行数',
|
||||
query_success: '查询成功',
|
||||
redis_result: 'Redis结果',
|
||||
redis_success: 'Redis成功',
|
||||
redis_key: 'Redis 键',
|
||||
redis_value: 'Redis 值',
|
||||
plugin_input: '插件输入',
|
||||
tool_result: '工具结果',
|
||||
tool_success: '工具成功',
|
||||
mcp_arguments: '工具参数',
|
||||
memory_result: '记忆结果',
|
||||
memory_success: '记忆成功',
|
||||
memory_value: '存储值',
|
||||
answer: '答案',
|
||||
dify_success: 'Dify成功',
|
||||
dify_query: '用户输入/查询',
|
||||
dify_conversation_id: '会话 ID',
|
||||
search_results: '搜索结果',
|
||||
knowledge_base_query: '查询内容',
|
||||
n8n_result: 'N8n结果',
|
||||
n8n_success: 'N8n成功',
|
||||
n8n_payload: '工作流输入数据',
|
||||
flow_result: '流程结果',
|
||||
flow_success: '流程成功',
|
||||
langflow_input: '输入内容',
|
||||
bot_answer: '机器人回复',
|
||||
bot_success: '机器人成功',
|
||||
coze_query: '用户输入/查询',
|
||||
coze_conversation_id: '会话 ID',
|
||||
bot_conversation_id: '会话 ID',
|
||||
webhook_body: 'Webhook 请求体',
|
||||
webhook_headers: 'Webhook 请求头',
|
||||
webhook_query: 'Webhook 查询参数',
|
||||
webhook_method: 'Webhook 请求方法',
|
||||
timestamp: '时间戳',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': '字符串',
|
||||
'type.object': '对象',
|
||||
'type.array': '数组',
|
||||
'type.boolean': '布尔值',
|
||||
'type.number': '数字',
|
||||
'type.any': '任意类型',
|
||||
'type.datetime': '日期时间',
|
||||
// Legacy editor keys for compatibility
|
||||
legacyEditor: {
|
||||
title: '可视化编辑器',
|
||||
save: '保存',
|
||||
undo: '撤销',
|
||||
redo: '重做',
|
||||
zoomIn: '放大',
|
||||
zoomOut: '缩小',
|
||||
fitView: '适应视图',
|
||||
unsavedChanges: '有未保存的更改',
|
||||
nodePalette: '节点面板',
|
||||
properties: '属性',
|
||||
nodeLabel: '节点名称',
|
||||
nodeConfig: '节点配置',
|
||||
deleteNode: '删除节点',
|
||||
deleteNodeConfirm: '确定删除此节点?',
|
||||
deleteEdge: '删除连线',
|
||||
deleteEdgeConfirm: '确定删除此连线?',
|
||||
edgeCondition: '条件表达式',
|
||||
edgeConditionPlaceholder: '如: ${output.success} == true',
|
||||
noNodeSelected: '未选中节点',
|
||||
selectNodeToEdit: '点击节点查看和编辑属性',
|
||||
dragNodeHint: '拖拽节点到画布',
|
||||
},
|
||||
nodes: {
|
||||
trigger: '触发器',
|
||||
triggerDescription: '工作流的起始节点',
|
||||
messageTrigger: '消息触发',
|
||||
messageTriggerDescription: '当收到消息时触发',
|
||||
scheduleTrigger: '定时触发',
|
||||
scheduleTriggerDescription: '按计划定时触发',
|
||||
cronTrigger: '定时触发',
|
||||
cronTriggerDescription: '按定时计划触发工作流',
|
||||
webhookTrigger: 'Webhook 触发',
|
||||
webhookTriggerDescription: '通过 HTTP 请求触发',
|
||||
eventTrigger: '事件触发',
|
||||
eventTriggerDescription: '当系统事件发生时触发',
|
||||
process: 'AI/处理',
|
||||
processDescription: '数据处理节点',
|
||||
aiProcess: 'AI 处理',
|
||||
aiProcessDescription: '使用 AI 模型处理消息',
|
||||
llmCall: 'LLM 调用',
|
||||
llmCallDescription: '调用大语言模型进行对话或生成',
|
||||
codeProcess: '代码处理',
|
||||
codeProcessDescription: '执行自定义代码',
|
||||
codeExecutor: '代码执行',
|
||||
codeExecutorDescription: '执行 Python/JavaScript 代码',
|
||||
templateProcess: '模板处理',
|
||||
templateProcessDescription: '使用模板格式化输出',
|
||||
httpRequest: 'HTTP 请求',
|
||||
httpRequestDescription: '发送 HTTP 请求',
|
||||
dataTransform: '数据转换',
|
||||
dataTransformDescription: '转换数据格式',
|
||||
questionClassifier: '问题分类器',
|
||||
questionClassifierDescription: '使用 LLM 将用户问题分类到预定义类别',
|
||||
parameterExtractor: '参数提取器',
|
||||
parameterExtractorDescription: '使用 LLM 从文本中提取结构化参数',
|
||||
knowledgeRetrieval: '知识库检索',
|
||||
knowledgeRetrievalDescription: '从知识库中检索相关内容',
|
||||
textTemplate: '文本模板',
|
||||
textTemplateDescription: '使用模板生成文本',
|
||||
jsonTransform: 'JSON 转换',
|
||||
jsonTransformDescription: '转换 JSON 数据',
|
||||
dataAggregator: '数据聚合',
|
||||
dataAggregatorDescription: '聚合多个数据源',
|
||||
textSplitter: '文本分割',
|
||||
textSplitterDescription: '将文本分割成块',
|
||||
variableAssignment: '变量赋值',
|
||||
variableAssignmentDescription: '为工作流变量赋值',
|
||||
control: '控制流',
|
||||
controlDescription: '流程控制节点',
|
||||
condition: '条件分支',
|
||||
conditionDescription: '根据条件分流',
|
||||
switch: '多路分支',
|
||||
switchDescription: '多条件分支选择',
|
||||
loop: '循环',
|
||||
loopDescription: '重复执行',
|
||||
iterator: '迭代器',
|
||||
iteratorDescription: '遍历数组元素',
|
||||
parallel: '并行执行',
|
||||
parallelDescription: '并行执行多个分支',
|
||||
wait: '等待',
|
||||
waitDescription: '等待指定时间',
|
||||
delay: '延迟',
|
||||
delayDescription: '等待指定时间',
|
||||
merge: '合并',
|
||||
mergeDescription: '合并多个分支',
|
||||
variableAggregator: '变量聚合器',
|
||||
variableAggregatorDescription: '聚合多个分支的变量输出',
|
||||
action: '动作',
|
||||
actionDescription: '执行动作的节点',
|
||||
sendMessage: '发送消息',
|
||||
sendMessageDescription: '发送消息到平台',
|
||||
replyMessage: '回复消息',
|
||||
replyMessageDescription: '回复触发工作流的消息',
|
||||
storeData: '存储数据',
|
||||
storeDataDescription: '存储数据到数据库',
|
||||
callPipeline: '调用 Pipeline',
|
||||
callPipelineDescription: '调用现有的 Pipeline',
|
||||
setVariable: '设置变量',
|
||||
setVariableDescription: '设置上下文变量',
|
||||
openingStatement: '对话开场白',
|
||||
openingStatementDescription: '提供对话开场白和建议问题',
|
||||
end: '结束',
|
||||
endDescription: '标记工作流执行结束',
|
||||
log: '日志',
|
||||
logDescription: '记录日志信息',
|
||||
integration: '集成',
|
||||
integrationDescription: '第三方平台集成节点',
|
||||
difyWorkflow: 'Dify 工作流',
|
||||
difyWorkflowDescription: '调用 Dify 平台工作流',
|
||||
difyKnowledgeQuery: 'Dify 知识库',
|
||||
difyKnowledgeQueryDescription: '查询 Dify 知识库',
|
||||
n8nWorkflow: 'n8n 工作流',
|
||||
n8nWorkflowDescription: '调用 n8n 工作流',
|
||||
langflowFlow: 'Langflow 流程',
|
||||
langflowFlowDescription: '调用 Langflow 流程',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: '调用扣子 Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: '数据库查询',
|
||||
databaseQueryDescription: '执行数据库查询',
|
||||
redisOperation: 'Redis 操作',
|
||||
redisOperationDescription: '执行 Redis 缓存操作',
|
||||
mcpTool: 'MCP 工具',
|
||||
mcpToolDescription: '调用 MCP 工具',
|
||||
memoryStore: '记忆存储',
|
||||
memoryStoreDescription: '从工作流记忆中存储和检索数据',
|
||||
},
|
||||
executionHistory: {
|
||||
title: '执行记录',
|
||||
noExecutions: '暂无执行记录',
|
||||
status: '状态',
|
||||
startTime: '开始时间',
|
||||
duration: '耗时',
|
||||
running: '运行中',
|
||||
completed: '已完成',
|
||||
failed: '失败',
|
||||
cancelled: '已取消',
|
||||
viewDetails: '查看详情',
|
||||
cancel: '取消执行',
|
||||
retry: '重试',
|
||||
nodeResults: '节点执行结果',
|
||||
},
|
||||
versions: {
|
||||
title: '版本历史',
|
||||
current: '当前版本',
|
||||
rollback: '回滚到此版本',
|
||||
rollbackConfirm: '确定回滚到此版本?当前更改将丢失。',
|
||||
rollbackSuccess: '回滚成功',
|
||||
rollbackError: '回滚失败:',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: {
|
||||
title: '调试',
|
||||
mode: '调试模式',
|
||||
panel: '调试面板',
|
||||
start: '开始调试',
|
||||
pause: '暂停',
|
||||
resume: '继续',
|
||||
step: '单步执行',
|
||||
stop: '停止',
|
||||
context: '调试上下文',
|
||||
messageContent: '模拟消息',
|
||||
messageContentPlaceholder: '输入要模拟的消息内容',
|
||||
senderId: '发送者 ID',
|
||||
senderIdPlaceholder: '发送者唯一标识',
|
||||
senderName: '发送者名称',
|
||||
senderNamePlaceholder: '发送者显示名称',
|
||||
platform: '平台',
|
||||
platformPlaceholder: '例如 qq、wechat、telegram',
|
||||
conversationId: '会话 ID',
|
||||
conversationIdPlaceholder: '会话唯一标识',
|
||||
isGroup: '群聊',
|
||||
customVariables: '自定义变量',
|
||||
customVariablesDesc: '添加自定义变量用于调试',
|
||||
variableKey: '变量名',
|
||||
variableValue: '变量值',
|
||||
addVariable: '添加变量',
|
||||
variables: '监控变量',
|
||||
watchedVariables: '监控变量',
|
||||
noWatchedVariables: '暂无监控变量',
|
||||
addWatchVariable: '添加监控',
|
||||
nodeStates: '节点状态',
|
||||
nodeOutputs: '节点输出',
|
||||
noNodeOutputs: '暂无节点输出',
|
||||
toggleBreakpoint: '切换断点',
|
||||
clearBreakpoints: '清除所有断点',
|
||||
breakpointSet: '断点已设置',
|
||||
breakpointRemoved: '断点已移除',
|
||||
logs: '调试日志',
|
||||
noLogs: '暂无日志',
|
||||
clearLogs: '清空日志',
|
||||
autoScroll: '自动滚动',
|
||||
logEntries: '条日志',
|
||||
resetContext: '重置上下文',
|
||||
// Debug execution messages
|
||||
starting: '正在启动调试执行...',
|
||||
started: '调试执行已启动 (ID: {{id}})',
|
||||
startError: '启动调试失败',
|
||||
completed: '调试执行已完成',
|
||||
unknownError: '未知错误',
|
||||
paused: '执行已暂停',
|
||||
pauseError: '暂停失败',
|
||||
resumed: '执行已恢复',
|
||||
resumeError: '恢复失败',
|
||||
steppedTo: '已执行到节点: {{node}}',
|
||||
stepError: '单步执行失败',
|
||||
stopped: '调试已停止',
|
||||
stopError: '停止失败',
|
||||
},
|
||||
debugMode: '调试模式',
|
||||
debugPanel: '调试面板',
|
||||
startDebug: '开始调试',
|
||||
pauseDebug: '暂停',
|
||||
resumeDebug: '继续',
|
||||
stepDebug: '单步执行',
|
||||
stopDebug: '停止',
|
||||
debugContext: '调试上下文',
|
||||
simulatedMessage: '模拟消息',
|
||||
simulatedMessagePlaceholder: '输入要模拟的消息内容',
|
||||
senderId: '发送者 ID',
|
||||
senderIdPlaceholder: '发送者唯一标识',
|
||||
senderName: '发送者名称',
|
||||
senderNamePlaceholder: '发送者显示名称',
|
||||
conversationId: '会话 ID',
|
||||
conversationIdPlaceholder: '会话唯一标识',
|
||||
isGroup: '群聊',
|
||||
customVariables: '自定义变量',
|
||||
addVariable: '添加变量',
|
||||
variableName: '变量名',
|
||||
variableValue: '变量值',
|
||||
watchedVariables: '监控变量',
|
||||
addWatchVariable: '添加监控',
|
||||
nodeStates: '节点状态',
|
||||
breakpoints: '断点',
|
||||
toggleBreakpoint: '切换断点',
|
||||
breakpointSet: '断点已设置',
|
||||
breakpointRemoved: '断点已移除',
|
||||
debugLogs: '调试日志',
|
||||
noLogs: '暂无日志',
|
||||
clearLogs: '清空日志',
|
||||
autoScroll: '自动滚动',
|
||||
debugState: {
|
||||
idle: '空闲',
|
||||
running: '运行中',
|
||||
paused: '已暂停',
|
||||
completed: '已完成',
|
||||
error: '错误',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: '等待中',
|
||||
running: '执行中',
|
||||
completed: '已完成',
|
||||
failed: '失败',
|
||||
skipped: '已跳过',
|
||||
},
|
||||
debugDialog: {
|
||||
title: '工作流对话',
|
||||
selectWorkflow: '选择工作流',
|
||||
sessionType: '会话类型',
|
||||
privateChat: '私聊',
|
||||
groupChat: '群聊',
|
||||
send: '发送',
|
||||
reset: '重置对话',
|
||||
inputPlaceholder: '发送 {{type}} 消息...',
|
||||
noMessages: '暂无消息',
|
||||
userMessage: '用户',
|
||||
botMessage: '机器人',
|
||||
sendFailed: '发送失败',
|
||||
resetSuccess: '对话已重置',
|
||||
resetFailed: '重置失败',
|
||||
loadMessagesFailed: '加载消息失败',
|
||||
loadWorkflowsFailed: '加载工作流失败',
|
||||
atTips: '提及机器人',
|
||||
streaming: '流式传输',
|
||||
streamOutput: '流式',
|
||||
connected: 'WebSocket已连接',
|
||||
disconnected: 'WebSocket未连接',
|
||||
connectionError: 'WebSocket连接错误',
|
||||
connectionFailed: 'WebSocket连接失败',
|
||||
notConnected: 'WebSocket未连接,请稍后重试',
|
||||
imageUploadFailed: '图片上传失败',
|
||||
reply: '回复',
|
||||
replyTo: '回复给',
|
||||
showMarkdown: '渲染',
|
||||
showRaw: '原文',
|
||||
allMembers: '全体成员',
|
||||
file: '文件',
|
||||
voice: '语音',
|
||||
uploadImage: '上传图片',
|
||||
uploading: '上传中...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: '按日期筛选',
|
||||
allTime: '全部时间',
|
||||
today: '今天',
|
||||
lastWeek: '最近一周',
|
||||
lastMonth: '最近一个月',
|
||||
showingExecutions: '显示 {{shown}} / {{total}} 条记录',
|
||||
rerun: '重新运行',
|
||||
rerunExecution: '重新执行',
|
||||
logs: '日志',
|
||||
details: '详情',
|
||||
completedAt: '完成时间',
|
||||
noNodeExecutions: '暂无节点执行记录',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: '触发条件',
|
||||
keyword_filter: '关键词过滤',
|
||||
regex_filter: '正则过滤',
|
||||
min_length: '最小长度',
|
||||
max_length: '最大长度',
|
||||
require_mention: '需要@机器人',
|
||||
respond_rules: '群响应规则',
|
||||
access_control: '访问控制',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron表达式',
|
||||
timezone: '时区',
|
||||
description: '描述',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook路径',
|
||||
allowed_methods: '允许的HTTP方法',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: '认证方式',
|
||||
auth_key: '认证密钥',
|
||||
validation: '请求验证',
|
||||
timeout: '超时时间',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: '事件类型',
|
||||
filter: '事件过滤',
|
||||
debounce_ms: '防抖时间',
|
||||
// process.py - LLMCallNode
|
||||
model: '模型',
|
||||
prompt_template: '提示词模板',
|
||||
system_prompt: '系统提示词',
|
||||
temperature: '温度',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: '频率惩罚',
|
||||
presence_penalty: '存在惩罚',
|
||||
max_tokens: '最大Token数',
|
||||
stop_sequences: '停止序列',
|
||||
seed: '随机种子',
|
||||
stream: '流式输出',
|
||||
use_conversation_history: '使用对话历史',
|
||||
// process.py - CodeExecutorNode
|
||||
language: '编程语言',
|
||||
code: '代码',
|
||||
// process.py - HTTPRequestNode
|
||||
url: '请求URL',
|
||||
method: '请求方法',
|
||||
auth_config: '认证配置',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: '转换类型',
|
||||
template: '模板',
|
||||
expression: '表达式',
|
||||
output_type: '输出类型',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: '分类类别',
|
||||
instruction: '指令',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: '参数定义',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: '知识库',
|
||||
top_k: '返回数量',
|
||||
score_threshold: '相似度阈值',
|
||||
search_method: '搜索方法',
|
||||
enable_citations: '启用引用',
|
||||
// control.py - ConditionNode
|
||||
condition_type: '条件类型',
|
||||
condition_expression: '条件表达式',
|
||||
left_value: '左值',
|
||||
operator: '比较运算符',
|
||||
right_value: '右值',
|
||||
// control.py - SwitchNode
|
||||
cases: '分支条件',
|
||||
// control.py - LoopNode
|
||||
max_iterations: '最大迭代次数',
|
||||
break_condition: '中断条件',
|
||||
// control.py - IteratorNode
|
||||
parallel: '并行处理',
|
||||
max_concurrency: '最大并发数',
|
||||
// control.py - ParallelNode
|
||||
branches: '分支配置',
|
||||
wait_all: '等待所有',
|
||||
fail_fast: '快速失败',
|
||||
// control.py - WaitNode
|
||||
duration: '等待时间',
|
||||
duration_type: '时间单位',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: '合并策略',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: '变量映射',
|
||||
aggregation_mode: '聚合模式',
|
||||
// action.py - SendMessageNode
|
||||
target_type: '目标类型',
|
||||
target_id: '目标ID',
|
||||
platform: '平台',
|
||||
message_type: '消息类型',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: '回复模式',
|
||||
message_template: '消息模板',
|
||||
long_text_processing: '长文本处理',
|
||||
force_delay: '强制延迟',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: '流水线',
|
||||
inherit_context: '继承上下文',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: '存储类型',
|
||||
ttl: '过期时间',
|
||||
key_prefix: '键前缀',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: '变量名称',
|
||||
variable_scope: '变量作用域',
|
||||
set_variable_operation: '操作类型',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: '开场白',
|
||||
suggested_questions: '建议问题',
|
||||
show_suggestions: '显示建议',
|
||||
// action.py - EndNode
|
||||
output_format: '输出格式',
|
||||
success_message: '成功消息',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: '数据库类型',
|
||||
connection_string: '连接字符串',
|
||||
query: 'SQL查询',
|
||||
query_type: '查询类型',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: '连接URL',
|
||||
operation: '操作类型',
|
||||
key_template: '键模板',
|
||||
hash_field: '哈希字段',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: '服务器名称',
|
||||
tool_name: '工具名称',
|
||||
arguments_template: '参数模板',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: '作用域',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': '基础URL',
|
||||
'api-key': 'API密钥',
|
||||
'app-type': '应用类型',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: '知识库ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': '流程ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': '机器人ID',
|
||||
'api-base': 'API基础URL',
|
||||
// process-configs.ts - TextTemplateNode
|
||||
escape_html: '转义HTML',
|
||||
trim_whitespace: '去除空白',
|
||||
// process-configs.ts - JsonTransformNode
|
||||
json_transform_type: 'JSON转换类型',
|
||||
json_expression: 'JSON表达式',
|
||||
mapping: '字段映射',
|
||||
// process-configs.ts - CodeExecutorNode
|
||||
code_language: '编程语言',
|
||||
code_content: '代码内容',
|
||||
// process-configs.ts - DataAggregatorNode
|
||||
aggregation_type: '聚合类型',
|
||||
separator: '分隔符',
|
||||
field_path: '字段路径',
|
||||
// process-configs.ts - TextSplitterNode
|
||||
split_type: '分割类型',
|
||||
chunk_size: '块大小',
|
||||
chunk_overlap: '块重叠',
|
||||
regex_pattern: '正则表达式',
|
||||
remove_empty: '移除空块',
|
||||
// process-configs.ts - VariableAssignmentNode
|
||||
assign_variable_name: '变量名',
|
||||
value_type: '值类型',
|
||||
static_value: '静态值',
|
||||
// integration-configs.ts - N8nWorkflowNode
|
||||
n8n_webhook_url: 'Webhook URL',
|
||||
n8n_auth_type: '认证方式',
|
||||
// integration-configs.ts - LangflowFlowNode
|
||||
langflow_flow_id: '流程ID',
|
||||
// integration-configs.ts - CozeBotNode
|
||||
coze_bot_id: '机器人ID',
|
||||
coze_api_base: 'API基础URL',
|
||||
},
|
||||
},
|
||||
unifiedBinding: {
|
||||
bindingType: '绑定类型',
|
||||
pipeline: '流水线',
|
||||
workflow: '工作流',
|
||||
pipelineDescription: '使用传统流水线处理消息',
|
||||
workflowDescription: '使用可视化工作流处理消息',
|
||||
selectPipeline: '选择流水线',
|
||||
selectWorkflow: '选择工作流',
|
||||
noPipelines: '暂无流水线',
|
||||
noWorkflows: '暂无工作流',
|
||||
createPipeline: '创建流水线',
|
||||
createWorkflow: '创建工作流',
|
||||
},
|
||||
};
|
||||
|
||||
export default zhHans;
|
||||
|
||||
@@ -1233,6 +1233,726 @@ const zhHant = {
|
||||
backToWorkbench: '返回工作台',
|
||||
},
|
||||
},
|
||||
workflows: {
|
||||
title: 'Workflows',
|
||||
description: 'Create and manage visual workflows for complex message processing logic',
|
||||
createWorkflow: 'Create Workflow',
|
||||
selectFromSidebar: 'Select a workflow from the sidebar',
|
||||
editWorkflow: 'Edit Workflow',
|
||||
newWorkflow: 'New Workflow',
|
||||
getWorkflowListError: 'Failed to get workflow list: ',
|
||||
workflowName: 'Workflow Name',
|
||||
workflowDescription: 'Workflow Description',
|
||||
workflowNameRequired: 'Workflow name is required',
|
||||
defaultDescription: 'A workflow',
|
||||
getWorkflowError: 'Failed to get workflow: ',
|
||||
loadError: 'Failed to load workflow',
|
||||
saveSuccess: 'Saved successfully',
|
||||
saveError: 'Failed to save: ',
|
||||
createSuccess: 'Workflow created successfully',
|
||||
createError: 'Failed to create: ',
|
||||
deleteSuccess: 'Deleted successfully',
|
||||
deleteError: 'Failed to delete: ',
|
||||
deleteConfirmation: 'Are you sure you want to delete this workflow?',
|
||||
copySuccess: 'Copied successfully',
|
||||
copyError: 'Failed to copy: ',
|
||||
export: 'Export',
|
||||
import: 'Import',
|
||||
exportSuccess: 'Workflow exported',
|
||||
importSuccess: 'Workflow imported',
|
||||
importError: 'Import failed: Invalid file format',
|
||||
publish: 'Publish',
|
||||
publishSuccess: 'Published successfully',
|
||||
publishError: 'Failed to publish',
|
||||
configuration: 'Configuration',
|
||||
executions: 'Executions',
|
||||
editor: 'Editor',
|
||||
debugChat: '對話除錯',
|
||||
basicInfo: 'Basic Info',
|
||||
basicInfoDesc: 'Set workflow name, icon and description',
|
||||
basicInfoDescription: 'Set workflow name and description',
|
||||
dangerZone: 'Danger Zone',
|
||||
dangerZoneDesc: 'Irreversible operations',
|
||||
dangerZoneDescription: 'Irreversible operations',
|
||||
deleteWorkflowAction: 'Delete this workflow',
|
||||
deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
|
||||
deleteWorkflow: 'Delete Workflow',
|
||||
deleteConfirm: 'Confirm Delete',
|
||||
deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
|
||||
// Form component
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Enter workflow name',
|
||||
descriptionPlaceholder: 'Enter workflow description (optional)',
|
||||
enabled: 'Enabled',
|
||||
enabledDesc: 'When enabled, the workflow can be triggered for execution',
|
||||
loading: 'Loading...',
|
||||
info: 'Workflow Info',
|
||||
uuid: 'UUID',
|
||||
version: 'Version',
|
||||
createdAt: 'Created At',
|
||||
updatedAt: 'Updated At',
|
||||
// Executions tab
|
||||
totalExecutions: '{{count}} execution(s) total',
|
||||
statistics: 'Statistics',
|
||||
successfulCount: '{{count}} successful',
|
||||
successRate: 'Success Rate',
|
||||
averageDuration: 'Avg. Duration',
|
||||
perExecution: 'per execution',
|
||||
failedExecutions: 'Failed',
|
||||
lastExecution: 'Last run',
|
||||
filterByStatus: 'Filter by status',
|
||||
allStatuses: 'All statuses',
|
||||
manualTrigger: 'Manual Trigger',
|
||||
executionId: 'Execution ID',
|
||||
status: 'Status',
|
||||
triggerType: 'Trigger Type',
|
||||
startedAt: 'Started At',
|
||||
duration: 'Duration',
|
||||
noExecutions: 'No executions yet',
|
||||
executionDetails: 'Execution Details',
|
||||
error: 'Error',
|
||||
nodeExecutions: 'Node Executions',
|
||||
result: 'Result',
|
||||
'status.pending': 'Pending',
|
||||
'status.running': 'Running',
|
||||
'status.completed': 'Completed',
|
||||
'status.failed': 'Failed',
|
||||
'status.cancelled': 'Cancelled',
|
||||
// Editor component translations
|
||||
nodePalette: 'Node Palette',
|
||||
properties: 'Properties',
|
||||
zoomIn: 'Zoom In',
|
||||
zoomOut: 'Zoom Out',
|
||||
fitView: 'Fit View',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
paste: 'Paste',
|
||||
deleted: 'Deleted',
|
||||
nothingToCopy: 'No nodes selected to copy',
|
||||
nothingToPaste: 'Clipboard is empty',
|
||||
copied: 'Copied {{count}} node(s)',
|
||||
pasted: 'Pasted {{count}} node(s)',
|
||||
nodesSelected: '{{count}} node(s) selected',
|
||||
edgesSelected: '{{count}} edge(s) selected',
|
||||
// Node palette
|
||||
searchNodes: 'Search nodes...',
|
||||
loadingNodeTypes: 'Loading node types...',
|
||||
noNodesFound: 'No matching nodes found',
|
||||
clearSearch: 'Clear search',
|
||||
dragToAdd: 'Drag nodes to add to canvas',
|
||||
// Property panel
|
||||
selectNodeOrEdge: 'Select a node or edge',
|
||||
selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
|
||||
edgeProperties: 'Edge Properties',
|
||||
nodeProperties: 'Node Properties',
|
||||
condition: 'Condition',
|
||||
hasCondition: 'Set',
|
||||
conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
|
||||
conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
|
||||
deleteEdge: 'Delete Edge',
|
||||
deleteEdgeConfirm: 'Confirm Delete Edge',
|
||||
deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
|
||||
nodeLabel: 'Node Label',
|
||||
nodeLabelPlaceholder: 'Enter node display name',
|
||||
nodeId: 'Node ID',
|
||||
inputOutputVariables: 'Input/Output Variables',
|
||||
inputs: 'Inputs',
|
||||
outputs: 'Outputs',
|
||||
availableVariables: 'Available Variables',
|
||||
globalVariables: 'Global Variables',
|
||||
messageContent: 'Message Content',
|
||||
messageSender: 'Sender',
|
||||
platform: 'Platform',
|
||||
sessionId: 'Session ID',
|
||||
timestamp: 'Timestamp',
|
||||
nodeConfig: 'Node Configuration',
|
||||
noConfigOptions: 'No configuration options for this node type',
|
||||
deleteNode: 'Delete Node',
|
||||
deleteNodeConfirm: 'Confirm Delete Node',
|
||||
deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
|
||||
// Node inputs/outputs i18n (for port labels)
|
||||
nodeInputs: {
|
||||
// Common inputs
|
||||
input: 'Input',
|
||||
message: 'Message',
|
||||
text: 'Text',
|
||||
query: 'Query',
|
||||
data: 'Data',
|
||||
condition: 'Condition',
|
||||
value: 'Value',
|
||||
// Trigger inputs
|
||||
content: 'Content',
|
||||
context: 'Context',
|
||||
body: 'Request Body',
|
||||
variables: 'Variables',
|
||||
items: 'Items',
|
||||
arguments: 'Arguments',
|
||||
// AI/Process inputs
|
||||
question: 'Question',
|
||||
parameters: 'Parameters',
|
||||
key: 'Key',
|
||||
// Control inputs
|
||||
case_1: 'Case 1',
|
||||
case_2: 'Case 2',
|
||||
branch_1: 'Branch 1',
|
||||
branch_2: 'Branch 2',
|
||||
// Action inputs
|
||||
notification_id: 'Notification ID',
|
||||
// Integration inputs
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
scope: 'Scope',
|
||||
},
|
||||
// Data type labels
|
||||
'type.string': 'String',
|
||||
'type.object': 'Object',
|
||||
'type.array': 'Array',
|
||||
'type.boolean': 'Boolean',
|
||||
'type.number': 'Number',
|
||||
'type.any': 'Any',
|
||||
'type.datetime': 'DateTime',
|
||||
nodes: {
|
||||
trigger: 'Triggers',
|
||||
triggerDescription: 'Starting nodes for workflows',
|
||||
messageTrigger: 'Message Trigger',
|
||||
messageTriggerDescription: 'Triggered when a message is received',
|
||||
scheduleTrigger: 'Schedule Trigger',
|
||||
scheduleTriggerDescription: 'Triggered on a schedule',
|
||||
cronTrigger: 'Cron Trigger',
|
||||
cronTriggerDescription: 'Trigger workflow on a scheduled time',
|
||||
webhookTrigger: 'Webhook Trigger',
|
||||
webhookTriggerDescription: 'Triggered via HTTP request',
|
||||
eventTrigger: 'Event Trigger',
|
||||
eventTriggerDescription: 'Triggered on system events',
|
||||
process: 'AI/Process',
|
||||
processDescription: 'Data processing nodes',
|
||||
aiProcess: 'AI Processing',
|
||||
aiProcessDescription: 'Process messages using AI models',
|
||||
llmCall: 'LLM Call',
|
||||
llmCallDescription: 'Invoke large language model for conversation or generation',
|
||||
codeProcess: 'Code Processing',
|
||||
codeProcessDescription: 'Execute custom code',
|
||||
codeExecutor: 'Code Executor',
|
||||
codeExecutorDescription: 'Execute Python/JavaScript code',
|
||||
templateProcess: 'Template Processing',
|
||||
templateProcessDescription: 'Format output using templates',
|
||||
httpRequest: 'HTTP Request',
|
||||
httpRequestDescription: 'Send HTTP requests',
|
||||
dataTransform: 'Data Transform',
|
||||
dataTransformDescription: 'Transform data format',
|
||||
questionClassifier: 'Question Classifier',
|
||||
questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
|
||||
parameterExtractor: 'Parameter Extractor',
|
||||
parameterExtractorDescription: 'Extract structured parameters from text using LLM',
|
||||
knowledgeRetrieval: 'Knowledge Retrieval',
|
||||
knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
|
||||
textTemplate: 'Text Template',
|
||||
textTemplateDescription: 'Generate text using templates with variable interpolation',
|
||||
jsonTransform: 'JSON Transform',
|
||||
jsonTransformDescription: 'Transform JSON data using expressions',
|
||||
dataAggregator: 'Data Aggregator',
|
||||
dataAggregatorDescription: 'Aggregate data from multiple sources',
|
||||
textSplitter: 'Text Splitter',
|
||||
textSplitterDescription: 'Split text into smaller chunks',
|
||||
variableAssignment: 'Variable Assignment',
|
||||
variableAssignmentDescription: 'Assign values to workflow variables',
|
||||
control: 'Control Flow',
|
||||
controlDescription: 'Flow control nodes',
|
||||
condition: 'Condition Branch',
|
||||
conditionDescription: 'Branch based on conditions',
|
||||
switch: 'Switch',
|
||||
switchDescription: 'Multi-way branching',
|
||||
loop: 'Loop',
|
||||
loopDescription: 'Repeat execution',
|
||||
iterator: 'Iterator',
|
||||
iteratorDescription: 'Iterate over array elements',
|
||||
parallel: 'Parallel',
|
||||
parallelDescription: 'Execute multiple branches in parallel',
|
||||
wait: 'Wait',
|
||||
waitDescription: 'Wait for specified time',
|
||||
delay: 'Delay',
|
||||
delayDescription: 'Wait for a specified time',
|
||||
merge: 'Merge',
|
||||
mergeDescription: 'Merge multiple branches',
|
||||
variableAggregator: 'Variable Aggregator',
|
||||
variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
|
||||
action: 'Actions',
|
||||
actionDescription: 'Action execution nodes',
|
||||
sendMessage: 'Send Message',
|
||||
sendMessageDescription: 'Send message to platform',
|
||||
replyMessage: 'Reply Message',
|
||||
replyMessageDescription: 'Reply to the message that triggered the workflow',
|
||||
storeData: 'Store Data',
|
||||
storeDataDescription: 'Store data to database',
|
||||
callPipeline: 'Call Pipeline',
|
||||
callPipelineDescription: 'Call an existing Pipeline',
|
||||
setVariable: 'Set Variable',
|
||||
setVariableDescription: 'Set context variable',
|
||||
openingStatement: 'Opening Statement',
|
||||
openingStatementDescription: 'Provide conversation opener and suggested questions',
|
||||
end: 'End',
|
||||
endDescription: 'Mark the end of workflow execution',
|
||||
log: 'Log',
|
||||
logDescription: 'Record log information',
|
||||
integration: 'Integration',
|
||||
integrationDescription: 'Third-party platform integration nodes',
|
||||
difyWorkflow: 'Dify Workflow',
|
||||
difyWorkflowDescription: 'Call Dify platform workflow',
|
||||
difyKnowledgeQuery: 'Dify Knowledge Query',
|
||||
difyKnowledgeQueryDescription: 'Query Dify knowledge base',
|
||||
n8nWorkflow: 'N8n Workflow',
|
||||
n8nWorkflowDescription: 'Call n8n workflow',
|
||||
langflowFlow: 'Langflow Flow',
|
||||
langflowFlowDescription: 'Call Langflow flow',
|
||||
cozeBot: 'Coze Bot',
|
||||
cozeBotDescription: 'Call Coze Bot',
|
||||
// Data & Tools integration nodes
|
||||
databaseQuery: 'Database Query',
|
||||
databaseQueryDescription: 'Execute database queries',
|
||||
redisOperation: 'Redis Operation',
|
||||
redisOperationDescription: 'Perform Redis cache operations',
|
||||
mcpTool: 'MCP Tool',
|
||||
mcpToolDescription: 'Invoke an MCP tool',
|
||||
memoryStore: 'Memory Store',
|
||||
memoryStoreDescription: 'Store and retrieve data from workflow memory',
|
||||
},
|
||||
executionHistory: {
|
||||
title: 'Execution History',
|
||||
noExecutions: 'No executions yet',
|
||||
status: 'Status',
|
||||
startTime: 'Start Time',
|
||||
duration: 'Duration',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
cancelled: 'Cancelled',
|
||||
viewDetails: 'View Details',
|
||||
cancel: 'Cancel Execution',
|
||||
retry: 'Retry',
|
||||
nodeResults: 'Node Execution Results',
|
||||
},
|
||||
versions: {
|
||||
title: 'Version History',
|
||||
current: 'Current Version',
|
||||
rollback: 'Rollback to this version',
|
||||
rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
|
||||
rollbackSuccess: 'Rollback successful',
|
||||
rollbackError: 'Failed to rollback: ',
|
||||
},
|
||||
// Debug and monitoring
|
||||
debug: 'Debug',
|
||||
debugMode: 'Debug Mode',
|
||||
debugPanel: 'Debug Panel',
|
||||
startDebug: 'Start Debug',
|
||||
pauseDebug: 'Pause',
|
||||
resumeDebug: 'Resume',
|
||||
stepDebug: 'Step',
|
||||
stopDebug: 'Stop',
|
||||
debugContext: 'Debug Context',
|
||||
simulatedMessage: 'Simulated Message',
|
||||
simulatedMessagePlaceholder: 'Enter the message content to simulate',
|
||||
senderId: 'Sender ID',
|
||||
senderIdPlaceholder: 'Sender unique identifier',
|
||||
senderName: 'Sender Name',
|
||||
senderNamePlaceholder: 'Sender display name',
|
||||
conversationId: 'Conversation ID',
|
||||
conversationIdPlaceholder: 'Conversation unique identifier',
|
||||
isGroup: 'Group Chat',
|
||||
customVariables: 'Custom Variables',
|
||||
addVariable: 'Add Variable',
|
||||
variableName: 'Variable Name',
|
||||
variableValue: 'Variable Value',
|
||||
watchedVariables: 'Watched Variables',
|
||||
addWatchVariable: 'Add Watch',
|
||||
nodeStates: 'Node States',
|
||||
breakpoints: 'Breakpoints',
|
||||
toggleBreakpoint: 'Toggle Breakpoint',
|
||||
breakpointSet: 'Breakpoint set',
|
||||
breakpointRemoved: 'Breakpoint removed',
|
||||
debugLogs: 'Debug Logs',
|
||||
noLogs: 'No logs yet',
|
||||
clearLogs: 'Clear Logs',
|
||||
autoScroll: 'Auto Scroll',
|
||||
debugState: {
|
||||
idle: 'Idle',
|
||||
running: 'Running',
|
||||
paused: 'Paused',
|
||||
completed: 'Completed',
|
||||
error: 'Error',
|
||||
},
|
||||
nodeStatus: {
|
||||
pending: 'Pending',
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
failed: 'Failed',
|
||||
skipped: 'Skipped',
|
||||
},
|
||||
debugDialog: {
|
||||
title: '工作流對話',
|
||||
selectWorkflow: '選擇工作流',
|
||||
sessionType: '會話類型',
|
||||
privateChat: '私聊',
|
||||
groupChat: '群聊',
|
||||
send: '發送',
|
||||
reset: '重置對話',
|
||||
inputPlaceholder: '發送 {{type}} 訊息...',
|
||||
noMessages: '暫無訊息',
|
||||
userMessage: '使用者',
|
||||
botMessage: '機器人',
|
||||
sendFailed: '發送失敗',
|
||||
resetSuccess: '對話已重置',
|
||||
resetFailed: '重置失敗',
|
||||
loadMessagesFailed: '載入訊息失敗',
|
||||
loadWorkflowsFailed: '載入工作流失敗',
|
||||
atTips: '提及機器人',
|
||||
streaming: '串流傳輸',
|
||||
streamOutput: '串流',
|
||||
connected: 'WebSocket已連線',
|
||||
disconnected: 'WebSocket未連線',
|
||||
connectionError: 'WebSocket連線錯誤',
|
||||
connectionFailed: 'WebSocket連線失敗',
|
||||
notConnected: 'WebSocket未連線,請稍後重試',
|
||||
imageUploadFailed: '圖片上傳失敗',
|
||||
reply: '回覆',
|
||||
replyTo: '回覆給',
|
||||
showMarkdown: '渲染',
|
||||
showRaw: '原文',
|
||||
allMembers: '全體成員',
|
||||
file: '檔案',
|
||||
voice: '語音',
|
||||
uploadImage: '上傳圖片',
|
||||
uploading: '上傳中...',
|
||||
},
|
||||
// Execution history and monitoring
|
||||
filterByDate: 'Filter by Date',
|
||||
allTime: 'All Time',
|
||||
today: 'Today',
|
||||
lastWeek: 'Last Week',
|
||||
lastMonth: 'Last Month',
|
||||
showingExecutions: 'Showing {{shown}} / {{total}} executions',
|
||||
rerun: 'Rerun',
|
||||
rerunExecution: 'Rerun Execution',
|
||||
logs: 'Logs',
|
||||
details: 'Details',
|
||||
completedAt: 'Completed At',
|
||||
noNodeExecutions: 'No node executions yet',
|
||||
// Node config field labels (used by DynamicFormComponent)
|
||||
nodeConfigFields: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
conditions: 'Trigger Conditions',
|
||||
keyword_filter: 'Keyword Filter',
|
||||
regex_filter: 'Regex Filter',
|
||||
min_length: 'Min Length',
|
||||
max_length: 'Max Length',
|
||||
require_mention: 'Require Mention',
|
||||
respond_rules: 'Group Respond Rules',
|
||||
access_control: 'Access Control',
|
||||
// trigger.py - CronTriggerNode
|
||||
cron: 'Cron Expression',
|
||||
timezone: 'Timezone',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
path: 'Webhook Path',
|
||||
allowed_methods: 'Allowed HTTP Methods',
|
||||
content_type: 'Content-Type',
|
||||
auth_type: 'Authentication Type',
|
||||
auth_key: 'Auth Key',
|
||||
validation: 'Request Validation',
|
||||
timeout: 'Timeout',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_types: 'Event Types',
|
||||
filter: 'Event Filter',
|
||||
debounce_ms: 'Debounce Time',
|
||||
// process.py - LLMCallNode
|
||||
model: 'Model',
|
||||
prompt_template: 'Prompt Template',
|
||||
system_prompt: 'System Prompt',
|
||||
temperature: 'Temperature',
|
||||
top_p: 'Top P',
|
||||
frequency_penalty: 'Frequency Penalty',
|
||||
presence_penalty: 'Presence Penalty',
|
||||
max_tokens: 'Max Tokens',
|
||||
stop_sequences: 'Stop Sequences',
|
||||
seed: 'Random Seed',
|
||||
stream: 'Stream Output',
|
||||
use_conversation_history: 'Use Conversation History',
|
||||
// process.py - CodeExecutorNode
|
||||
language: 'Programming Language',
|
||||
code: 'Code',
|
||||
// process.py - HTTPRequestNode
|
||||
url: 'Request URL',
|
||||
method: 'Request Method',
|
||||
auth_config: 'Auth Configuration',
|
||||
// process.py - DataTransformNode
|
||||
transform_type: 'Transform Type',
|
||||
template: 'Template',
|
||||
expression: 'Expression',
|
||||
output_type: 'Output Type',
|
||||
// process.py - QuestionClassifierNode
|
||||
categories: 'Categories',
|
||||
instruction: 'Instruction',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Parameter Definitions',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
knowledge_bases: 'Knowledge Bases',
|
||||
top_k: 'Top K Results',
|
||||
score_threshold: 'Score Threshold',
|
||||
search_method: 'Search Method',
|
||||
enable_citations: 'Enable Citations',
|
||||
// control.py - ConditionNode
|
||||
condition_type: 'Condition Type',
|
||||
condition_expression: 'Condition Expression',
|
||||
left_value: 'Left Value',
|
||||
operator: 'Comparison Operator',
|
||||
right_value: 'Right Value',
|
||||
// control.py - SwitchNode
|
||||
cases: 'Branch Cases',
|
||||
// control.py - LoopNode
|
||||
max_iterations: 'Max Iterations',
|
||||
break_condition: 'Break Condition',
|
||||
// control.py - IteratorNode
|
||||
parallel: 'Parallel Processing',
|
||||
max_concurrency: 'Max Concurrency',
|
||||
// control.py - ParallelNode
|
||||
branches: 'Branch Configuration',
|
||||
wait_all: 'Wait All',
|
||||
fail_fast: 'Fail Fast',
|
||||
// control.py - WaitNode
|
||||
duration: 'Duration',
|
||||
duration_type: 'Time Unit',
|
||||
// control.py - MergeNode
|
||||
merge_strategy: 'Merge Strategy',
|
||||
// control.py - VariableAggregatorNode
|
||||
variable_mappings: 'Variable Mappings',
|
||||
aggregation_mode: 'Aggregation Mode',
|
||||
// action.py - SendMessageNode
|
||||
target_type: 'Target Type',
|
||||
target_id: 'Target ID',
|
||||
platform: 'Platform',
|
||||
message_type: 'Message Type',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_mode: 'Reply Mode',
|
||||
message_template: 'Message Template',
|
||||
long_text_processing: 'Long Text Processing',
|
||||
force_delay: 'Force Delay',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_uuid: 'Pipeline',
|
||||
inherit_context: 'Inherit Context',
|
||||
// action.py - StoreDataNode
|
||||
storage_type: 'Storage Type',
|
||||
ttl: 'TTL',
|
||||
key_prefix: 'Key Prefix',
|
||||
// action.py - SetVariableNode
|
||||
variable_name: 'Variable Name',
|
||||
variable_scope: 'Variable Scope',
|
||||
set_variable_operation: 'Operation Type',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
show_suggestions: 'Show Suggestions',
|
||||
// action.py - EndNode
|
||||
output_format: 'Output Format',
|
||||
success_message: 'Success Message',
|
||||
// integration.py - DatabaseQueryNode
|
||||
connection_type: 'Database Type',
|
||||
connection_string: 'Connection String',
|
||||
query: 'SQL Query',
|
||||
query_type: 'Query Type',
|
||||
// integration.py - RedisOperationNode
|
||||
connection_url: 'Connection URL',
|
||||
operation: 'Operation Type',
|
||||
key_template: 'Key Template',
|
||||
hash_field: 'Hash Field',
|
||||
// integration.py - MCPToolNode
|
||||
server_name: 'Server Name',
|
||||
tool_name: 'Tool Name',
|
||||
arguments_template: 'Arguments Template',
|
||||
// integration.py - MemoryStoreNode
|
||||
scope: 'Scope',
|
||||
// integration.py - DifyWorkflowNode
|
||||
'base-url': 'Base URL',
|
||||
'api-key': 'API Key',
|
||||
'app-type': 'App Type',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
dataset_id: 'Dataset ID',
|
||||
// integration.py - N8nWorkflowNode
|
||||
'webhook-url': 'Webhook URL',
|
||||
// integration.py - LangflowFlowNode
|
||||
'flow-id': 'Flow ID',
|
||||
// integration.py - CozeBotNode
|
||||
'bot-id': 'Bot ID',
|
||||
'api-base': 'API Base URL',
|
||||
},
|
||||
// Node outputs i18n
|
||||
nodeOutputs: {
|
||||
// trigger.py - MessageTriggerNode
|
||||
message: 'Message Content',
|
||||
sender_id: 'Sender ID',
|
||||
sender_name: 'Sender Name',
|
||||
platform: 'Platform',
|
||||
conversation_id: 'Conversation ID',
|
||||
is_group: 'Is Group Chat',
|
||||
context: 'Full Message Context',
|
||||
// trigger.py - CronTriggerNode
|
||||
timestamp: 'Trigger Time',
|
||||
schedule: 'Trigger Schedule',
|
||||
cron_timestamp: 'Cron Timestamp',
|
||||
cron_schedule: 'Cron Schedule',
|
||||
cron_context: 'Cron Context',
|
||||
// trigger.py - WebhookTriggerNode
|
||||
body: 'Request Body',
|
||||
headers: 'Request Headers',
|
||||
query: 'Query Parameters',
|
||||
method: 'Request Method',
|
||||
webhook_body: 'Webhook Body',
|
||||
webhook_headers: 'Webhook Headers',
|
||||
webhook_query: 'Webhook Query',
|
||||
webhook_method: 'Webhook Method',
|
||||
// trigger.py - EventTriggerNode
|
||||
event_type: 'Event Type',
|
||||
event_data: 'Event Data',
|
||||
event_timestamp: 'Event Timestamp',
|
||||
// process.py - LLMCallNode
|
||||
response: 'Model Response',
|
||||
usage: 'Token Usage Statistics',
|
||||
prompt: 'Prompt/Question',
|
||||
context_info: 'Context Information',
|
||||
// process.py - CodeExecutorNode
|
||||
output: 'Output Data',
|
||||
console: 'Console Output',
|
||||
code_input: 'Code Input',
|
||||
code_output: 'Code Output',
|
||||
// process.py - HTTPRequestNode
|
||||
status_code: 'Status Code',
|
||||
http_body: 'HTTP Body',
|
||||
http_headers: 'HTTP Headers',
|
||||
http_response: 'HTTP Response',
|
||||
response_headers: 'Response Headers',
|
||||
// process.py - DataTransformNode
|
||||
result: 'Transform Result',
|
||||
transform_input: 'Transform Input',
|
||||
transform_result: 'Transform Result',
|
||||
// process.py - QuestionClassifierNode
|
||||
category: 'Category Result',
|
||||
confidence: 'Confidence',
|
||||
all_scores: 'All Category Scores',
|
||||
question: 'User Question',
|
||||
// process.py - ParameterExtractorNode
|
||||
parameters: 'Extracted Parameters',
|
||||
extraction_success: 'Extraction Success',
|
||||
extract_text: 'Input Text',
|
||||
// process.py - KnowledgeRetrievalNode
|
||||
documents: 'Retrieved Documents',
|
||||
citations: 'Citation Information',
|
||||
knowledge_context: 'Merged Context',
|
||||
knowledge_query: 'Retrieval Query',
|
||||
// control.py - ConditionNode
|
||||
true: 'True Branch Output',
|
||||
false: 'False Branch Output',
|
||||
condition_input: 'Condition Input',
|
||||
// control.py - SwitchNode
|
||||
matched_case: 'Matched Branch Output',
|
||||
default: 'Default Branch Output',
|
||||
switch_input: 'Switch Input',
|
||||
// control.py - LoopNode
|
||||
item: 'Current Item',
|
||||
index: 'Current Index',
|
||||
results: 'All Iteration Results',
|
||||
completed: 'Is Completed',
|
||||
loop_items: 'Items to Iterate',
|
||||
// control.py - IteratorNode
|
||||
is_first: 'Is First',
|
||||
is_last: 'Is Last',
|
||||
iterator_array: 'Input Array',
|
||||
iterator_item: 'Current Element',
|
||||
iterator_index: 'Current Index',
|
||||
// control.py - ParallelNode
|
||||
errors: 'Error List',
|
||||
parallel_input: 'Parallel Input',
|
||||
parallel_results: 'All Branch Results',
|
||||
// control.py - WaitNode
|
||||
wait_input: 'Passthrough Input',
|
||||
wait_output: 'Passthrough Output',
|
||||
// control.py - MergeNode
|
||||
merged: 'Merged Result',
|
||||
merge_array: 'Array Result',
|
||||
merge_input_1: 'Input 1',
|
||||
merge_input_2: 'Input 2',
|
||||
merge_input_3: 'Input 3',
|
||||
merge_input_4: 'Input 4',
|
||||
// control.py - VariableAggregatorNode
|
||||
aggregated: 'Aggregated Variables',
|
||||
aggregator_variables: 'Variable Input',
|
||||
// action.py - SendMessageNode
|
||||
status: 'Send Status',
|
||||
message_id: 'Message ID',
|
||||
target: 'Target ID',
|
||||
// action.py - ReplyMessageNode
|
||||
reply_message: 'Reply Content',
|
||||
// action.py - CallPipelineNode
|
||||
pipeline_response: 'Pipeline Response',
|
||||
pipeline_result: 'Full Result',
|
||||
pipeline_query: 'Query Content',
|
||||
context_data: 'Context Data',
|
||||
// action.py - StoreDataNode
|
||||
store_status: 'Store Status',
|
||||
store_key: 'Store Key',
|
||||
store_value: 'Store Value',
|
||||
// action.py - SetVariableNode
|
||||
variable_value: 'Variable Value',
|
||||
variable_result: 'Set Variable Result',
|
||||
// action.py - OpeningStatementNode
|
||||
statement: 'Opening Statement',
|
||||
suggested_questions: 'Suggested Questions',
|
||||
// action.py - EndNode
|
||||
workflow_output: 'Workflow Output',
|
||||
final_result: 'Final Result',
|
||||
// integration.py - DatabaseQueryNode
|
||||
query_results: 'Query Results',
|
||||
row_count: 'Affected/Returned Rows',
|
||||
query_success: 'Query Success',
|
||||
query_params: 'Query Parameters',
|
||||
// integration.py - RedisOperationNode
|
||||
redis_result: 'Operation Result',
|
||||
redis_success: 'Operation Success',
|
||||
redis_key: 'Redis Key',
|
||||
redis_value: 'Redis Value',
|
||||
error: 'Error Message',
|
||||
plugin_input: 'Plugin Input',
|
||||
// integration.py - MCPToolNode
|
||||
tool_result: 'Tool Execution Result',
|
||||
tool_success: 'Tool Call Success',
|
||||
mcp_arguments: 'Tool Arguments',
|
||||
// integration.py - MemoryStoreNode
|
||||
memory_result: 'Retrieved/Stored Value',
|
||||
memory_success: 'Operation Success',
|
||||
memory_value: 'Value to Store',
|
||||
// integration.py - DifyWorkflowNode
|
||||
answer: 'Dify Answer',
|
||||
dify_success: 'Call Success',
|
||||
dify_query: 'User Input/Query',
|
||||
dify_conversation_id: 'Conversation ID',
|
||||
// integration.py - DifyKnowledgeQueryNode
|
||||
search_results: 'Search Results',
|
||||
knowledge_base_query: 'Query Content',
|
||||
// integration.py - N8nWorkflowNode
|
||||
n8n_result: 'Workflow Execution Result',
|
||||
n8n_success: 'Call Success',
|
||||
n8n_payload: 'Workflow Input Data',
|
||||
// integration.py - LangflowFlowNode
|
||||
flow_result: 'Flow Execution Result',
|
||||
flow_success: 'Call Success',
|
||||
langflow_input: 'Input Content',
|
||||
// integration.py - CozeBotNode
|
||||
bot_answer: 'Bot Reply',
|
||||
bot_success: 'Call Success',
|
||||
coze_query: 'User Input/Query',
|
||||
coze_conversation_id: 'Conversation ID',
|
||||
bot_conversation_id: 'Conversation ID',
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default zhHant;
|
||||
|
||||
Reference in New Issue
Block a user