feat: introduce trigger functionality (#27644)

Signed-off-by: lyzno1 <yuanyouhuilyz@gmail.com>
Co-authored-by: Stream <Stream_2@qq.com>
Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: zhsama <torvalds@linux.do>
Co-authored-by: Harry <xh001x@hotmail.com>
Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com>
Co-authored-by: yessenia <yessenia.contact@gmail.com>
Co-authored-by: hjlarry <hjlarry@163.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: WTW0313 <twwu@dify.ai>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Yeuoly
2025-11-12 17:59:37 +08:00
committed by GitHub
parent ca7794305b
commit b76e17b25d
785 changed files with 41186 additions and 3725 deletions

View File

@@ -9,8 +9,10 @@ const translation = {
publish: '发布',
update: '更新',
publishUpdate: '发布更新',
run: '运行',
run: '测试运行',
running: '运行中',
chooseStartNodeToRun: '选择启动节点进行运行',
runAllTriggers: '运行所有触发器',
inRunMode: '在运行模式中',
inPreview: '预览中',
inPreviewMode: '预览中',
@@ -46,7 +48,8 @@ const translation = {
needConnectTip: '此节点尚未连接到其他节点',
maxTreeDepth: '每个分支最大限制 {{depth}} 个节点',
needAdd: '必须添加{{node}}节点',
needEndNode: '必须添加结束节点',
needOutputNode: '必须添加输出节点',
needStartNode: '必须添加至少一个开始节点',
needAnswerNode: '必须添加直接回复节点',
workflowProcess: '工作流',
notRunning: '尚未运行',
@@ -76,12 +79,14 @@ const translation = {
exportSVG: '导出为 SVG',
currentView: '当前视图',
currentWorkflow: '整个工作流',
moreActions: '更多操作',
model: '模型',
workflowAsTool: '发布为工具',
configureRequired: '需要进行配置',
configure: '配置',
manageInTools: '访问工具页',
workflowAsToolTip: '工作流更新后需要重新配置工具参数',
workflowAsToolDisabledHint: '请先发布最新的工作流,并确保已连接的 User Input 节点后再配置为工具。',
viewDetailInTracingPanel: '查看详细信息',
syncingData: '同步数据中,只需几秒钟。',
importDSL: '导入 DSL',
@@ -140,6 +145,19 @@ const translation = {
export: '导出包含 Secret 值的 DSL',
},
},
globalVar: {
title: '系统变量',
description: '系统变量是全局变量,在类型匹配时无需连线即可被任意节点引用,例如终端用户 ID 和工作流 ID。',
fieldsDescription: {
conversationId: '会话 ID',
dialogCount: '会话次数',
userId: '用户 ID',
triggerTimestamp: '应用开始运行的时间戳',
appId: '应用 ID',
workflowId: '工作流 ID',
workflowRunId: '工作流运行 ID',
},
},
sidebar: {
exportWarning: '导出当前已保存版本',
exportWarningDesc: '这将导出您工作流的当前已保存版本。如果您在编辑器中有未保存的更改,请先使用工作流画布中的导出选项保存它们。',
@@ -213,6 +231,16 @@ const translation = {
invalidVariable: '无效的变量',
noValidTool: '{{field}} 无可用工具',
toolParameterRequired: '{{field}}: 参数 [{{param}}] 不能为空',
startNodeRequired: '请先添加开始节点,然后再{{operation}}',
},
error: {
startNodeRequired: '请先添加开始节点,然后再{{operation}}',
operations: {
connectingNodes: '连接节点',
addingNodes: '添加节点',
modifyingWorkflow: '修改工作流',
updatingWorkflow: '更新工作流',
},
},
singleRun: {
testRun: '测试运行',
@@ -229,6 +257,8 @@ const translation = {
'searchBlock': '搜索节点',
'blocks': '节点',
'searchTool': '搜索工具',
'searchTrigger': '搜索触发器...',
'allTriggers': '全部触发器',
'tools': '工具',
'allTool': '全部',
'plugin': '插件',
@@ -239,15 +269,29 @@ const translation = {
'transform': '转换',
'utilities': '工具',
'noResult': '未找到匹配项',
'noPluginsFound': '未找到插件',
'requestToCommunity': '向社区反馈',
'agent': 'Agent 策略',
'allAdded': '已添加全部',
'addAll': '添加全部',
'sources': '数据源',
'searchDataSource': '搜索数据源',
'start': '开始',
'featuredTools': '精选推荐',
'showMoreFeatured': '查看更多',
'showLessFeatured': '收起',
'installed': '已安装',
'pluginByAuthor': '来自 {{author}}',
'usePlugin': '选择工具',
'hideActions': '收起工具',
'noFeaturedPlugins': '前往插件市场查看更多工具',
'noFeaturedTriggers': '前往插件市场查看更多触发器',
'startDisabledTip': '触发节点与用户输入节点互斥。',
},
blocks: {
'start': '开始',
'end': '结束',
'start': '用户输入',
'originalStartNode': '原始开始节点',
'end': '输出',
'answer': '直接回复',
'llm': 'LLM',
'knowledge-retrieval': '知识检索',
@@ -270,10 +314,14 @@ const translation = {
'loop-end': '退出循环',
'knowledge-index': '知识库',
'datasource': '数据源',
'trigger-webhook': 'Webhook 触发器',
'trigger-schedule': '定时触发器',
'trigger-plugin': '插件触发器',
},
customWebhook: '自定义 Webhook',
blocksAbout: {
'start': '定义一个 workflow 流程启动的初始参数',
'end': '定义一个 workflow 流程的结束和结果类型',
'end': '定义一个 workflow 流程的输出和结果类型',
'answer': '定义一个聊天对话的回复内容',
'llm': '调用大语言模型回答问题或者对自然语言进行处理',
'knowledge-retrieval': '允许你从知识库中查询与用户问题相关的文本内容',
@@ -294,7 +342,11 @@ const translation = {
'agent': '调用大型语言模型回答问题或处理自然语言',
'knowledge-index': '知识库节点',
'datasource': '数据源节点',
'trigger-webhook': 'Webhook 触发器接收来自第三方系统的 HTTP 推送以自动触发工作流。',
'trigger-schedule': '基于时间的工作流触发器,按计划启动工作流',
'trigger-plugin': '从外部平台事件启动工作流的第三方集成触发器',
},
difyTeam: 'Dify 团队',
operator: {
zoomIn: '放大',
zoomOut: '缩小',
@@ -324,7 +376,7 @@ const translation = {
panel: {
userInputField: '用户输入字段',
changeBlock: '更改节点',
helpLink: '帮助链接',
helpLink: '查看帮助文档',
about: '关于',
createdBy: '作者',
nextStep: '下一步',
@@ -334,12 +386,14 @@ const translation = {
checklist: '检查清单',
checklistTip: '发布前确保所有问题均已解决',
checklistResolved: '所有问题均已解决',
goTo: '转到',
startNode: '开始节点',
organizeBlocks: '整理节点',
change: '更改',
optional: '(选填)',
moveToThisNode: '定位至此节点',
maximize: '最大化画布',
minimize: '退出最大化',
scrollToSelectedNode: '滚动至选中节点',
optional_and_hidden: '(选填 & 隐藏)',
},
nodes: {
@@ -966,6 +1020,138 @@ const translation = {
rerankingModelIsRequired: 'Reranking 模型是必需的',
rerankingModelIsInvalid: '无效的 Reranking 模型',
},
triggerSchedule: {
frequency: {
label: '频率',
monthly: '每月',
daily: '每日',
hourly: '每小时',
weekly: '每周',
},
title: '定时触发',
nodeTitle: '定时触发器',
useCronExpression: '使用 Cron 表达式',
selectFrequency: '选择频率',
nextExecutionTimes: '接下来 5 次执行时间',
hours: '小时',
minutes: '分钟',
onMinute: '分钟',
cronExpression: 'Cron 表达式',
weekdays: '星期',
executeNow: '立即执行',
frequencyLabel: '频率',
nextExecution: '下次执行',
time: '时间',
lastDay: '最后一天',
startTime: '开始时间',
selectDateTime: '选择日期和时间',
lastDayTooltip: '并非所有月份都有 31 天。使用"最后一天"选项来选择每个月的最后一天。',
nextExecutionTime: '下次执行时间',
useVisualPicker: '使用可视化配置',
days: '天',
notConfigured: '未配置',
mode: '模式',
timezone: '时区',
visualConfig: '可视化配置',
monthlyDay: '月份日期',
executionTime: '执行时间',
invalidTimezone: '无效的时区',
invalidCronExpression: '无效的 Cron 表达式',
noValidExecutionTime: '无法计算有效的执行时间',
executionTimeCalculationError: '执行时间计算失败',
invalidFrequency: '无效的频率',
invalidStartTime: '无效的开始时间',
startTimeMustBeFuture: '开始时间必须是将来的时间',
invalidTimeFormat: '无效的时间格式预期格式HH:MM AM/PM',
invalidWeekday: '无效的工作日:{{weekday}}',
invalidMonthlyDay: '月份日期必须在 1-31 之间或为"last"',
invalidOnMinute: '分钟必须在 0-59 之间',
invalidExecutionTime: '无效的执行时间',
executionTimeMustBeFuture: '执行时间必须是将来的时间',
},
triggerWebhook: {
configPlaceholder: 'Webhook 触发器配置将在此处实现',
title: 'Webhook 触发器',
nodeTitle: '🔗 Webhook 触发器',
webhookUrl: 'Webhook URL',
webhookUrlPlaceholder: '点击生成以创建 webhook URL',
generate: '生成',
copy: '复制',
test: '测试',
urlGenerated: 'Webhook URL 生成成功',
urlGenerationFailed: '生成 Webhook URL 失败',
urlCopied: 'URL 已复制到剪贴板',
method: '方法',
contentType: '内容类型',
queryParameters: '查询参数',
headerParameters: 'Header 参数',
requestBodyParameters: '请求体参数',
parameterName: '变量名',
varName: '变量名',
varType: '类型',
varNamePlaceholder: '输入变量名...',
headerName: '变量名',
required: '必填',
addParameter: '添加',
addHeader: '添加',
noParameters: '未配置任何参数',
noQueryParameters: '未配置查询参数',
noHeaders: '未配置 Header',
noBodyParameters: '未配置请求体参数',
debugUrlTitle: '测试运行时请始终使用此URL',
debugUrlCopy: '点击复制',
debugUrlCopied: '已复制!',
errorHandling: '错误处理',
errorStrategy: '错误处理',
responseConfiguration: '响应',
asyncMode: '异步模式',
statusCode: '状态码',
responseBody: '响应体',
responseBodyPlaceholder: '在此输入您的响应体',
headers: 'Headers',
validation: {
webhookUrlRequired: '需要提供Webhook URL',
invalidParameterType: '参数"{{name}}"的参数类型"{{type}}"无效',
},
},
triggerPlugin: {
authorized: '已授权',
notConfigured: '未配置',
error: '错误',
configuration: '配置',
remove: '移除',
or: '或',
useOAuth: '使用 OAuth',
useApiKey: '使用 API Key',
authenticationFailed: '身份验证失败',
authenticationSuccess: '身份验证成功',
oauthConfigFailed: 'OAuth 配置失败',
configureOAuthClient: '配置 OAuth 客户端',
oauthClientDescription: '配置 OAuth 客户端凭据以启用身份验证',
oauthClientSaved: 'OAuth 客户端配置保存成功',
configureApiKey: '配置 API Key',
apiKeyDescription: '配置 API key 凭据进行身份验证',
apiKeyConfigured: 'API key 配置成功',
configurationFailed: '配置失败',
failedToStart: '启动身份验证流程失败',
credentialsVerified: '凭据验证成功',
credentialVerificationFailed: '凭据验证失败',
verifyAndContinue: '验证并继续',
configureParameters: '配置参数',
parametersDescription: '配置触发器参数和属性',
configurationComplete: '配置完成',
configurationCompleteDescription: '您的触发器已成功配置',
configurationCompleteMessage: '您的触发器配置已完成,现在可以使用了。',
parameters: '参数',
properties: '属性',
propertiesDescription: '此触发器的额外配置属性',
noConfigurationRequired: '此触发器不需要额外配置。',
subscriptionName: '订阅名称',
subscriptionNameDescription: '为此触发器订阅输入一个唯一名称',
subscriptionNamePlaceholder: '输入订阅名称...',
subscriptionNameRequired: '订阅名称是必需的',
subscriptionRequired: '需要配置订阅',
},
},
tracing: {
stopBy: '由{{user}}终止',
@@ -1027,6 +1213,18 @@ const translation = {
view: '查看记录',
edited: '已编辑',
reset: '还原至上一次运行',
listening: {
title: '正在监听触发器事件…',
tip: '您现在可以向 HTTP {{nodeName}} 端点发送测试请求以模拟事件触发,或将其用作实时事件调试的回调 URL。所有输出都可以在变量检查器中直接查看。',
tipPlugin: '现在您可以在 {{- pluginName}} 中创建事件,并在变量检查器中查看这些事件的输出。',
tipSchedule: '正在监听计划触发器事件。\n下一次计划运行时间{{nextTriggerTime}}',
tipFallback: '正在等待触发器事件,输出结果将在此显示。',
defaultNodeName: '此触发器',
defaultPluginName: '此插件触发器',
defaultScheduleTime: '未设置',
selectedTriggers: '所选触发器',
stopButton: '停止',
},
trigger: {
normal: '变量检查',
running: '缓存中',
@@ -1052,6 +1250,30 @@ const translation = {
noDependents: '无被依赖',
},
},
triggerStatus: {
enabled: '触发器',
disabled: '触发器 • 已禁用',
},
entryNodeStatus: {
enabled: '开始',
disabled: '开始 • 已禁用',
},
onboarding: {
title: '选择开始节点来开始',
description: '不同的开始节点具有不同的功能。不用担心,您随时可以更改它们。',
userInputFull: '用户输入(原始开始节点)',
userInputDescription: '允许设置用户输入变量的开始节点具有Web应用程序、服务API、MCP服务器和工作流即工具功能。',
trigger: '触发器',
triggerDescription: '触发器可以作为工作流的开始节点例如定时任务、自定义webhook或与其他应用程序的集成。',
back: '返回',
learnMore: '了解更多',
aboutStartNode: '关于开始节点。',
escTip: {
press: '按',
key: 'esc',
toDismiss: '键关闭',
},
},
}
export default translation