后端没修完版

This commit is contained in:
Typer_Body
2026-05-05 15:08:04 +08:00
parent a8fba46040
commit e7c9bc69d3
156 changed files with 34633 additions and 2149 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;