Browse Source

Feat/i18n workflow (#4819)

crazywoola 1 year ago
parent
commit
3de8e8fd6a

+ 155 - 98
web/i18n/de-DE/workflow.ts

@@ -1,58 +1,58 @@
 const translation = {
 const translation = {
   common: {
   common: {
-    editing: 'Bearbeiten',
+    editing: 'Bearbeitung',
     autoSaved: 'Automatisch gespeichert',
     autoSaved: 'Automatisch gespeichert',
-    unpublished: 'Nicht veröffentlicht',
+    unpublished: 'Unveröffentlicht',
     published: 'Veröffentlicht',
     published: 'Veröffentlicht',
     publish: 'Veröffentlichen',
     publish: 'Veröffentlichen',
     update: 'Aktualisieren',
     update: 'Aktualisieren',
-    run: 'Starten',
+    run: 'Ausführen',
-    running: 'Läuft',
+    running: 'Wird ausgeführt',
-    inRunMode: 'Im Start-Modus',
+    inRunMode: 'Im Ausführungsmodus',
-    inPreview: 'In Vorschau',
+    inPreview: 'In der Vorschau',
-    inPreviewMode: 'Im Vorschau-Modus',
+    inPreviewMode: 'Im Vorschaumodus',
     preview: 'Vorschau',
     preview: 'Vorschau',
-    viewRunHistory: 'Verlauf ansehen',
+    viewRunHistory: 'Ausführungsverlauf anzeigen',
-    runHistory: 'Verlauf',
+    runHistory: 'Ausführungsverlauf',
-    goBackToEdit: 'Zurück zum Bearbeiten',
+    goBackToEdit: 'Zurück zum Editor',
     conversationLog: 'Konversationsprotokoll',
     conversationLog: 'Konversationsprotokoll',
     features: 'Funktionen',
     features: 'Funktionen',
     debugAndPreview: 'Debuggen und Vorschau',
     debugAndPreview: 'Debuggen und Vorschau',
     restart: 'Neustarten',
     restart: 'Neustarten',
     currentDraft: 'Aktueller Entwurf',
     currentDraft: 'Aktueller Entwurf',
-    currentDraftUnpublished: 'Aktueller Entwurf nicht veröffentlicht',
+    currentDraftUnpublished: 'Aktueller Entwurf unveröffentlicht',
     latestPublished: 'Zuletzt veröffentlicht',
     latestPublished: 'Zuletzt veröffentlicht',
     publishedAt: 'Veröffentlicht am',
     publishedAt: 'Veröffentlicht am',
     restore: 'Wiederherstellen',
     restore: 'Wiederherstellen',
-    runApp: 'App starten',
+    runApp: 'App ausführen',
-    batchRunApp: 'Batch-App starten',
+    batchRunApp: 'App im Batch-Modus ausführen',
     accessAPIReference: 'API-Referenz aufrufen',
     accessAPIReference: 'API-Referenz aufrufen',
-    embedIntoSite: 'In Website einbetten',
+    embedIntoSite: 'In die Webseite einbetten',
     addTitle: 'Titel hinzufügen...',
     addTitle: 'Titel hinzufügen...',
     addDescription: 'Beschreibung hinzufügen...',
     addDescription: 'Beschreibung hinzufügen...',
     noVar: 'Keine Variable',
     noVar: 'Keine Variable',
     searchVar: 'Variable suchen',
     searchVar: 'Variable suchen',
     variableNamePlaceholder: 'Variablenname',
     variableNamePlaceholder: 'Variablenname',
-    setVarValuePlaceholder: 'Variable festlegen',
+    setVarValuePlaceholder: 'Variable setzen',
     needConnecttip: 'Dieser Schritt ist mit nichts verbunden',
     needConnecttip: 'Dieser Schritt ist mit nichts verbunden',
-    maxTreeDepth: 'Maximale Grenze von {{depth}} Knoten pro Zweig',
+    maxTreeDepth: 'Maximales Limit von {{depth}} Knoten pro Ast',
     needEndNode: 'Der Endblock muss hinzugefügt werden',
     needEndNode: 'Der Endblock muss hinzugefügt werden',
     needAnswerNode: 'Der Antwortblock muss hinzugefügt werden',
     needAnswerNode: 'Der Antwortblock muss hinzugefügt werden',
-    workflowProcess: 'Workflow-Prozess',
+    workflowProcess: 'Arbeitsablauf',
-    notRunning: 'Läuft noch nicht',
+    notRunning: 'Noch nicht ausgeführt',
-    previewPlaceholder: 'Geben Sie unten Inhalte ein, um das Debugging des Chatbots zu starten',
+    previewPlaceholder: 'Geben Sie den Inhalt in das Feld unten ein, um das Debuggen des Chatbots zu starten',
     effectVarConfirm: {
     effectVarConfirm: {
       title: 'Variable entfernen',
       title: 'Variable entfernen',
       content: 'Die Variable wird in anderen Knoten verwendet. Möchten Sie sie trotzdem entfernen?',
       content: 'Die Variable wird in anderen Knoten verwendet. Möchten Sie sie trotzdem entfernen?',
     },
     },
-    insertVarTip: 'Drücken Sie die \'/\' Taste, um schnell einzufügen',
+    insertVarTip: 'Drücken Sie die Taste \'/\' zum schnellen Einfügen',
     processData: 'Daten verarbeiten',
     processData: 'Daten verarbeiten',
     input: 'Eingabe',
     input: 'Eingabe',
     output: 'Ausgabe',
     output: 'Ausgabe',
     jinjaEditorPlaceholder: 'Tippen Sie \'/\' oder \'{\' um eine Variable einzufügen',
     jinjaEditorPlaceholder: 'Tippen Sie \'/\' oder \'{\' um eine Variable einzufügen',
-    viewOnly: 'Nur Ansicht',
+    viewOnly: 'Nur anzeigen',
     showRunHistory: 'Ausführungsverlauf anzeigen',
     showRunHistory: 'Ausführungsverlauf anzeigen',
-    enableJinja: 'Jinja-Template-Unterstützung aktivieren',
+    enableJinja: 'Jinja-Vorlagenunterstützung aktivieren',
     learnMore: 'Mehr erfahren',
     learnMore: 'Mehr erfahren',
     copy: 'Kopieren',
     copy: 'Kopieren',
     duplicate: 'Duplizieren',
     duplicate: 'Duplizieren',
@@ -60,35 +60,48 @@ const translation = {
     pasteHere: 'Hier einfügen',
     pasteHere: 'Hier einfügen',
     pointerMode: 'Zeigermodus',
     pointerMode: 'Zeigermodus',
     handMode: 'Handmodus',
     handMode: 'Handmodus',
+    model: 'Modell',
+    workflowAsTool: 'Workflow als Tool',
+    configureRequired: 'Konfiguration erforderlich',
+    configure: 'Konfigurieren',
+    manageInTools: 'In den Tools verwalten',
+    workflowAsToolTip: 'Nach dem Workflow-Update ist eine Neukonfiguration des Tools erforderlich.',
+    viewDetailInTracingPanel: 'Details anzeigen',
   },
   },
   errorMsg: {
   errorMsg: {
-    fieldRequired: '{{field}} wird benötigt',
+    fieldRequired: '{{field}} ist erforderlich',
-    authRequired: 'Autorisierung erforderlich',
+    authRequired: 'Autorisierung ist erforderlich',
-    invalidJson: '{{field}} ist ungültiges JSON',
+    invalidJson: '{{field}} ist ein ungültiges JSON',
     fields: {
     fields: {
       variable: 'Variablenname',
       variable: 'Variablenname',
       variableValue: 'Variablenwert',
       variableValue: 'Variablenwert',
       code: 'Code',
       code: 'Code',
       model: 'Modell',
       model: 'Modell',
-      rerankModel: 'Rerank-Modell',
+      rerankModel: 'Neusortierungsmodell',
     },
     },
     invalidVariable: 'Ungültige Variable',
     invalidVariable: 'Ungültige Variable',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: 'Testlauf',
+    testRun: 'Testlauf ',
     startRun: 'Lauf starten',
     startRun: 'Lauf starten',
-    running: 'Läuft',
+    running: 'Wird ausgeführt',
+    testRunIteration: 'Testlaufiteration',
+    back: 'Zurück',
+    iteration: 'Iteration',
   },
   },
   tabs: {
   tabs: {
-    'searchBlock': 'Suchblock',
+    'searchBlock': 'Block suchen',
     'blocks': 'Blöcke',
     'blocks': 'Blöcke',
-    'builtInTool': 'Integriertes Werkzeug',
+    'tools': 'Werkzeuge',
-    'customTool': 'Benutzerdefiniertes Werkzeug',
+    'allTool': 'Alle',
-    'question-understand': 'Fragenverständnis',
+    'builtInTool': 'Eingebaut',
+    'customTool': 'Benutzerdefiniert',
+    'workflowTool': 'Arbeitsablauf',
+    'question-understand': 'Fragen verstehen',
     'logic': 'Logik',
     'logic': 'Logik',
     'transform': 'Transformieren',
     'transform': 'Transformieren',
     'utilities': 'Dienstprogramme',
     'utilities': 'Dienstprogramme',
-    'noResult': 'Keine Übereinstimmung gefunden',
+    'noResult': 'Kein Ergebnis gefunden',
   },
   },
   blocks: {
   blocks: {
     'start': 'Start',
     'start': 'Start',
@@ -97,45 +110,52 @@ const translation = {
     'llm': 'LLM',
     'llm': 'LLM',
     'knowledge-retrieval': 'Wissensabruf',
     'knowledge-retrieval': 'Wissensabruf',
     'question-classifier': 'Fragenklassifizierer',
     'question-classifier': 'Fragenklassifizierer',
-    'if-else': 'IF/ELSE',
+    'if-else': 'WENN/SONST',
     'code': 'Code',
     'code': 'Code',
     'template-transform': 'Vorlage',
     'template-transform': 'Vorlage',
     'http-request': 'HTTP-Anfrage',
     'http-request': 'HTTP-Anfrage',
-    'variable-assigner': 'Variablenzuweiser',
+    'variable-assigner': 'Variablen-Zuweiser',
+    'variable-aggregator': 'Variablen-Aggregator',
+    'iteration-start': 'Iterationsstart',
+    'iteration': 'Iteration',
+    'parameter-extractor': 'Parameter-Extraktor',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': 'Definieren der Startparameter zum Starten eines Workflows',
+    'start': 'Definieren Sie die Anfangsparameter zum Starten eines Workflows',
-    'end': 'Definieren des Endes und des Ergebnistyps eines Workflows',
+    'end': 'Definieren Sie das Ende und den Ergebnistyp eines Workflows',
-    'answer': 'Definieren des Antwortinhalts eines Chat-Gesprächs',
+    'answer': 'Definieren Sie den Antwortinhalt einer Chat-Konversation',
-    'llm': 'Aufrufen von großen Sprachmodellen, um Fragen zu beantworten oder natürliche Sprache zu verarbeiten',
+    'llm': 'Große Sprachmodelle aufrufen, um Fragen zu beantworten oder natürliche Sprache zu verarbeiten',
-    'knowledge-retrieval': 'Ermöglicht das Abfragen von Textinhalten in Bezug auf Benutzerfragen aus dem Wissen',
+    'knowledge-retrieval': 'Ermöglicht das Abfragen von Textinhalten, die sich auf Benutzerfragen aus der Wissensdatenbank beziehen',
-    'question-classifier': 'Definieren der Klassifizierungsbedingungen von Benutzerfragen, LLM kann basierend auf der Klassifizierungsbeschreibung festlegen, wie das Gespräch fortschreitet',
+    'question-classifier': 'Definieren Sie die Klassifizierungsbedingungen von Benutzerfragen, LLM kann basierend auf der Klassifikationsbeschreibung festlegen, wie die Konversation fortschreitet',
     'if-else': 'Ermöglicht das Aufteilen des Workflows in zwei Zweige basierend auf if/else-Bedingungen',
     'if-else': 'Ermöglicht das Aufteilen des Workflows in zwei Zweige basierend auf if/else-Bedingungen',
-    'code': 'Ausführen eines Stücks Python- oder NodeJS-Code, um benutzerdefinierte Logik zu implementieren',
+    'code': 'Ein Stück Python- oder NodeJS-Code ausführen, um benutzerdefinierte Logik zu implementieren',
-    'template-transform': 'Daten mithilfe der Jinja-Vorlagensyntax in einen String konvertieren',
+    'template-transform': 'Daten in Zeichenfolgen mit Jinja-Vorlagensyntax umwandeln',
-    'http-request': 'Ermöglicht das Senden von Serveranfragen über das HTTP-Protokoll',
+    'http-request': 'Ermöglichen, dass Serveranforderungen über das HTTP-Protokoll gesendet werden',
-    'variable-assigner': 'Variablen in verschiedenen Zweigen derselben Variable zuweisen, um eine einheitliche Konfiguration von Nachknoten zu erreichen',
+    'variable-assigner': 'Variablen aus mehreren Zweigen in eine einzige Variable zusammenführen, um eine einheitliche Konfiguration der nachgelagerten Knoten zu ermöglichen.',
+    'variable-aggregator': 'Variablen aus mehreren Zweigen in eine einzige Variable zusammenführen, um eine einheitliche Konfiguration der nachgelagerten Knoten zu ermöglichen.',
+    'iteration': 'Mehrere Schritte an einem Listenobjekt ausführen, bis alle Ergebnisse ausgegeben wurden.',
+    'parameter-extractor': 'Verwenden Sie LLM, um strukturierte Parameter aus natürlicher Sprache für Werkzeugaufrufe oder HTTP-Anfragen zu extrahieren.',
   },
   },
   operator: {
   operator: {
     zoomIn: 'Vergrößern',
     zoomIn: 'Vergrößern',
     zoomOut: 'Verkleinern',
     zoomOut: 'Verkleinern',
-    zoomTo50: 'Auf 50% zoomen',
+    zoomTo50: 'Auf 50% vergrößern',
-    zoomTo100: 'Auf 100% zoomen',
+    zoomTo100: 'Auf 100% vergrößern',
-    zoomToFit: 'An Fenstergröße anpassen',
+    zoomToFit: 'An Bildschirm anpassen',
   },
   },
   panel: {
   panel: {
     userInputField: 'Benutzereingabefeld',
     userInputField: 'Benutzereingabefeld',
     changeBlock: 'Block ändern',
     changeBlock: 'Block ändern',
-    helpLink: 'Hilfe-Link',
+    helpLink: 'Hilfelink',
     about: 'Über',
     about: 'Über',
-    createdBy: 'Erstellt von',
+    createdBy: 'Erstellt von ',
     nextStep: 'Nächster Schritt',
     nextStep: 'Nächster Schritt',
     addNextStep: 'Fügen Sie den nächsten Block in diesem Workflow hinzu',
     addNextStep: 'Fügen Sie den nächsten Block in diesem Workflow hinzu',
-    selectNextStep: 'Nächsten Block wählen',
+    selectNextStep: 'Nächsten Block auswählen',
     runThisStep: 'Diesen Schritt ausführen',
     runThisStep: 'Diesen Schritt ausführen',
     checklist: 'Checkliste',
     checklist: 'Checkliste',
-    checklistTip: 'Stellen Sie sicher, dass alle Probleme gelöst sind, bevor Sie veröffentlichen',
+    checklistTip: 'Stellen Sie sicher, dass alle Probleme vor der Veröffentlichung gelöst sind',
-    checklistResolved: 'Alle Probleme gelöst',
+    checklistResolved: 'Alle Probleme wurden gelöst',
     organizeBlocks: 'Blöcke organisieren',
     organizeBlocks: 'Blöcke organisieren',
     change: 'Ändern',
     change: 'Ändern',
   },
   },
@@ -145,11 +165,11 @@ const translation = {
       insertVarTip: 'Variable einfügen',
       insertVarTip: 'Variable einfügen',
       memory: {
       memory: {
         memory: 'Speicher',
         memory: 'Speicher',
-        memoryTip: 'Chat-Speichereinstellungen',
+        memoryTip: 'Einstellungen des Chat-Speichers',
         windowSize: 'Fenstergröße',
         windowSize: 'Fenstergröße',
-        conversationRoleName: 'Gesprächsrollenname',
+        conversationRoleName: 'Rollenname in der Konversation',
-        user: 'Benutzerprefix',
+        user: 'Benutzer-Präfix',
-        assistant: 'Assistentenprefix',
+        assistant: 'Assistenten-Präfix',
       },
       },
       memories: {
       memories: {
         title: 'Erinnerungen',
         title: 'Erinnerungen',
@@ -164,7 +184,7 @@ const translation = {
       outputVars: {
       outputVars: {
         query: 'Benutzereingabe',
         query: 'Benutzereingabe',
         memories: {
         memories: {
-          des: 'Gesprächsverlauf',
+          des: 'Konversationsverlauf',
           type: 'Nachrichtentyp',
           type: 'Nachrichtentyp',
           content: 'Nachrichteninhalt',
           content: 'Nachrichteninhalt',
         },
         },
@@ -193,11 +213,11 @@ const translation = {
       variables: 'Variablen',
       variables: 'Variablen',
       context: 'Kontext',
       context: 'Kontext',
       contextTooltip: 'Sie können Wissen als Kontext importieren',
       contextTooltip: 'Sie können Wissen als Kontext importieren',
-      notSetContextInPromptTip: 'Um die Kontextfunktion zu aktivieren, füllen Sie bitte die Kontextvariable in PROMPT aus.',
+      notSetContextInPromptTip: 'Um die Kontextfunktion zu aktivieren, füllen Sie die Kontextvariable im PROMPT aus.',
-      prompt: 'Aufforderung',
+      prompt: 'Prompt',
       roleDescription: {
       roleDescription: {
-        system: 'Geben Sie hochrangige Anweisungen für das Gespräch',
+        system: 'Geben Sie hochrangige Anweisungen für die Konversation',
-        user: 'Stellen Sie Anweisungen, Anfragen oder jegliche textbasierte Eingabe für das Modell bereit',
+        user: 'Geben Sie dem Modell Anweisungen, Abfragen oder beliebigen texteingabebasierten Input',
         assistant: 'Die Antworten des Modells basierend auf den Benutzernachrichten',
         assistant: 'Die Antworten des Modells basierend auf den Benutzernachrichten',
       },
       },
       addMessage: 'Nachricht hinzufügen',
       addMessage: 'Nachricht hinzufügen',
@@ -209,13 +229,13 @@ const translation = {
         low: 'Niedrig',
         low: 'Niedrig',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Inhalt generieren',
+        output: 'Generierter Inhalt',
-        usage: 'Modellnutzungsinformation',
+        usage: 'Nutzungsinformationen des Modells',
       },
       },
       singleRun: {
       singleRun: {
         variable: 'Variable',
         variable: 'Variable',
       },
       },
-      sysQueryInUser: 'sys.query in der Benutzeranfrage ist erforderlich',
+      sysQueryInUser: 'sys.query in Benutzernachricht erforderlich',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
       queryVariable: 'Abfragevariable',
       queryVariable: 'Abfragevariable',
@@ -232,19 +252,19 @@ const translation = {
     http: {
     http: {
       inputVars: 'Eingabevariablen',
       inputVars: 'Eingabevariablen',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Geben Sie die URL ein, tippen Sie ‘/’, um eine Variable einzufügen',
+      apiPlaceholder: 'Geben Sie die URL ein, tippen Sie ‘/’, um Variable einzufügen',
       notStartWithHttp: 'API sollte mit http:// oder https:// beginnen',
       notStartWithHttp: 'API sollte mit http:// oder https:// beginnen',
       key: 'Schlüssel',
       key: 'Schlüssel',
       value: 'Wert',
       value: 'Wert',
-      bulkEdit: 'Massenbearbeitung',
+      bulkEdit: 'Massenerfassung',
-      keyValueEdit: 'Schlüssel-Wert-Bearbeitung',
+      keyValueEdit: 'Schlüssel-Wert-Erfassung',
-      headers: 'Kopfzeilen',
+      headers: 'Header',
       params: 'Parameter',
       params: 'Parameter',
-      body: 'Körper',
+      body: 'Body',
       outputVars: {
       outputVars: {
         body: 'Antwortinhalt',
         body: 'Antwortinhalt',
         statusCode: 'Antwortstatuscode',
         statusCode: 'Antwortstatuscode',
-        headers: 'Antwortkopfzeilenliste JSON',
+        headers: 'Antwort-Header-Liste im JSON-Format',
         files: 'Dateiliste',
         files: 'Dateiliste',
       },
       },
       authorization: {
       authorization: {
@@ -252,29 +272,29 @@ const translation = {
         'authorizationType': 'Autorisierungstyp',
         'authorizationType': 'Autorisierungstyp',
         'no-auth': 'Keine',
         'no-auth': 'Keine',
         'api-key': 'API-Schlüssel',
         'api-key': 'API-Schlüssel',
-        'auth-type': 'Authentifizierungstyp',
+        'auth-type': 'Autorisierungstyp',
-        'basic': 'Basic',
+        'basic': 'Basis',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
         'custom': 'Benutzerdefiniert',
         'custom': 'Benutzerdefiniert',
         'api-key-title': 'API-Schlüssel',
         'api-key-title': 'API-Schlüssel',
-        'header': 'Kopfzeile',
+        'header': 'Header',
       },
       },
-      insertVarPlaceholder: 'Tippen Sie ‘/’, um eine Variable einzufügen',
+      insertVarPlaceholder: 'tippen Sie ‘/’, um Variable einzufügen',
       timeout: {
       timeout: {
         title: 'Zeitüberschreitung',
         title: 'Zeitüberschreitung',
-        connectLabel: 'Verbindungszeitüberschreitung',
+        connectLabel: 'Verbindungs-Zeitüberschreitung',
-        connectPlaceholder: 'Geben Sie die Verbindungszeitüberschreitung in Sekunden ein',
+        connectPlaceholder: 'Geben Sie die Verbindungs-Zeitüberschreitung in Sekunden ein',
-        readLabel: 'Lesezeitüberschreitung',
+        readLabel: 'Lese-Zeitüberschreitung',
-        readPlaceholder: 'Geben Sie die Lesezeitüberschreitung in Sekunden ein',
+        readPlaceholder: 'Geben Sie die Lese-Zeitüberschreitung in Sekunden ein',
-        writeLabel: 'Schreibzeitüberschreitung',
+        writeLabel: 'Schreib-Zeitüberschreitung',
-        writePlaceholder: 'Geben Sie die Schreibzeitüberschreitung in Sekunden ein',
+        writePlaceholder: 'Geben Sie die Schreib-Zeitüberschreitung in Sekunden ein',
       },
       },
     },
     },
     code: {
     code: {
       inputVars: 'Eingabevariablen',
       inputVars: 'Eingabevariablen',
       outputVars: 'Ausgabevariablen',
       outputVars: 'Ausgabevariablen',
       advancedDependencies: 'Erweiterte Abhängigkeiten',
       advancedDependencies: 'Erweiterte Abhängigkeiten',
-      advancedDependenciesTip: 'Fügen Sie einige vorab geladene Abhängigkeiten hinzu, die mehr Zeit benötigen oder hier nicht standardmäßig integriert sind',
+      advancedDependenciesTip: 'Fügen Sie hier einige vorinstallierte Abhängigkeiten hinzu, die mehr Zeit in Anspruch nehmen oder nicht standardmäßig eingebaut sind',
       searchDependencies: 'Abhängigkeiten suchen',
       searchDependencies: 'Abhängigkeiten suchen',
     },
     },
     templateTransform: {
     templateTransform: {
@@ -288,11 +308,11 @@ const translation = {
     ifElse: {
     ifElse: {
       if: 'Wenn',
       if: 'Wenn',
       else: 'Sonst',
       else: 'Sonst',
-      elseDescription: 'Wird verwendet, um die Logik zu definieren, die ausgeführt werden soll, wenn die Wenn-Bedingung nicht erfüllt ist.',
+      elseDescription: 'Wird verwendet, um die Logik zu definieren, die ausgeführt werden soll, wenn die if-Bedingung nicht erfüllt ist.',
       and: 'und',
       and: 'und',
       or: 'oder',
       or: 'oder',
       operator: 'Operator',
       operator: 'Operator',
-      notSetVariable: 'Bitte zuerst Variable festlegen',
+      notSetVariable: 'Bitte setzen Sie zuerst die Variable',
       comparisonOperator: {
       comparisonOperator: {
         'contains': 'enthält',
         'contains': 'enthält',
         'not contains': 'enthält nicht',
         'not contains': 'enthält nicht',
@@ -312,28 +332,31 @@ const translation = {
     variableAssigner: {
     variableAssigner: {
       title: 'Variablen zuweisen',
       title: 'Variablen zuweisen',
       outputType: 'Ausgabetyp',
       outputType: 'Ausgabetyp',
-      outputVarType: 'Ausgabevariablentyp',
       varNotSet: 'Variable nicht gesetzt',
       varNotSet: 'Variable nicht gesetzt',
       noVarTip: 'Fügen Sie die zuzuweisenden Variablen hinzu',
       noVarTip: 'Fügen Sie die zuzuweisenden Variablen hinzu',
       type: {
       type: {
-        string: 'Zeichenkette',
+        string: 'String',
-        number: 'Zahl',
+        number: 'Nummer',
         object: 'Objekt',
         object: 'Objekt',
         array: 'Array',
         array: 'Array',
       },
       },
+      aggregationGroup: 'Aggregationsgruppe',
+      aggregationGroupTip: 'Durch Aktivieren dieser Funktion kann der Variablen-Aggregator mehrere Variablensätze aggregieren.',
+      addGroup: 'Gruppe hinzufügen',
       outputVars: {
       outputVars: {
-        output: 'Zugewiesener Variablenwert',
+        varDescribe: 'Ausgabe {{groupName}}',
       },
       },
+      setAssignVariable: 'Zuweisungsvariable festlegen',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Zur Autorisierung',
+      toAuthorize: 'Autorisieren',
       inputVars: 'Eingabevariablen',
       inputVars: 'Eingabevariablen',
       outputVars: {
       outputVars: {
-        text: 'vom Werkzeug generierter Inhalt',
+        text: 'durch das Tool generierter Inhalt',
         files: {
         files: {
-          title: 'vom Werkzeug generierte Dateien',
+          title: 'durch das Tool generierte Dateien',
-          type: 'Unterstützter Typ. Aktuell nur Bild unterstützt',
+          type: 'Unterstützungstyp. Derzeit nur Bild unterstützt',
-          transfer_method: 'Übertragungsmethode. Wert ist remote_url oder local_file',
+          transfer_method: 'Übertragungsmethode. Der Wert ist remote_url oder local_file',
           url: 'Bild-URL',
           url: 'Bild-URL',
           upload_file_id: 'Hochgeladene Datei-ID',
           upload_file_id: 'Hochgeladene Datei-ID',
         },
         },
@@ -343,20 +366,54 @@ const translation = {
       model: 'Modell',
       model: 'Modell',
       inputVars: 'Eingabevariablen',
       inputVars: 'Eingabevariablen',
       outputVars: {
       outputVars: {
-        className: 'Klassenname',
+        className: 'Klassennamen',
       },
       },
       class: 'Klasse',
       class: 'Klasse',
-      classNamePlaceholder: 'Schreiben Sie Ihren Klassennamen',
+      classNamePlaceholder: 'Geben Sie Ihren Klassennamen ein',
       advancedSetting: 'Erweiterte Einstellung',
       advancedSetting: 'Erweiterte Einstellung',
       topicName: 'Themenname',
       topicName: 'Themenname',
-      topicPlaceholder: 'Schreiben Sie Ihren Themenname',
+      topicPlaceholder: 'Geben Sie Ihren Themennamen ein',
       addClass: 'Klasse hinzufügen',
       addClass: 'Klasse hinzufügen',
       instruction: 'Anweisung',
       instruction: 'Anweisung',
-      instructionPlaceholder: 'Schreiben Sie Ihre Anweisung',
+      instructionTip: 'Geben Sie zusätzliche Anweisungen ein, um dem Fragenklassifizierer zu helfen, besser zu verstehen, wie Fragen kategorisiert werden sollen.',
+      instructionPlaceholder: 'Geben Sie Ihre Anweisung ein',
+    },
+    parameterExtractor: {
+      inputVar: 'Eingabevariable',
+      extractParameters: 'Parameter extrahieren',
+      importFromTool: 'Aus Tools importieren',
+      addExtractParameter: 'Extraktionsparameter hinzufügen',
+      addExtractParameterContent: {
+        name: 'Name',
+        namePlaceholder: 'Name des Extraktionsparameters',
+        type: 'Typ',
+        typePlaceholder: 'Typ des Extraktionsparameters',
+        description: 'Beschreibung',
+        descriptionPlaceholder: 'Beschreibung des Extraktionsparameters',
+        required: 'Erforderlich',
+        requiredContent: 'Erforderlich wird nur als Referenz für die Modellschlussfolgerung verwendet und nicht für die zwingende Validierung der Parameter-Ausgabe.',
+      },
+      extractParametersNotSet: 'Extraktionsparameter nicht eingerichtet',
+      instruction: 'Anweisung',
+      instructionTip: 'Geben Sie zusätzliche Anweisungen ein, um dem Parameter-Extraktor zu helfen, zu verstehen, wie Parameter extrahiert werden.',
+      advancedSetting: 'Erweiterte Einstellung',
+      reasoningMode: 'Schlussfolgerungsmodus',
+      reasoningModeTip: 'Sie können den entsprechenden Schlussfolgerungsmodus basierend auf der Fähigkeit des Modells wählen, auf Anweisungen zur Funktionsaufruf- oder Eingabeaufforderungen zu reagieren.',
+      isSuccess: 'Ist Erfolg. Bei Erfolg beträgt der Wert 1, bei Misserfolg beträgt der Wert 0.',
+      errorReason: 'Fehlergrund',
+    },
+    iteration: {
+      deleteTitle: 'Iterationsknoten löschen?',
+      deleteDesc: 'Das Löschen des Iterationsknotens löscht alle untergeordneten Knoten',
+      input: 'Eingabe',
+      output: 'Ausgabevariablen',
+      iteration_one: '{{count}} Iteration',
+      iteration_other: '{{count}} Iterationen',
+      currentIteration: 'Aktuelle Iteration',
     },
     },
   },
   },
   tracing: {
   tracing: {
-    stopBy: 'Angehalten von {{user}}',
+    stopBy: 'Gestoppt von {{user}}',
   },
   },
 }
 }
 
 

+ 141 - 84
web/i18n/fr-FR/workflow.ts

@@ -1,20 +1,20 @@
 const translation = {
 const translation = {
   common: {
   common: {
     editing: 'Édition',
     editing: 'Édition',
-    autoSaved: 'Enregistré automatiquement',
+    autoSaved: 'Sauvegardé automatiquement',
     unpublished: 'Non publié',
     unpublished: 'Non publié',
     published: 'Publié',
     published: 'Publié',
     publish: 'Publier',
     publish: 'Publier',
     update: 'Mettre à jour',
     update: 'Mettre à jour',
     run: 'Exécuter',
     run: 'Exécuter',
-    running: 'En cours',
+    running: 'En cours d\'exécution',
     inRunMode: 'En mode exécution',
     inRunMode: 'En mode exécution',
-    inPreview: 'En prévisualisation',
+    inPreview: 'En aperçu',
-    inPreviewMode: 'En mode prévisualisation',
+    inPreviewMode: 'En mode aperçu',
     preview: 'Aperçu',
     preview: 'Aperçu',
-    viewRunHistory: 'Voir l\'historique d\'exécution',
+    viewRunHistory: 'Voir l\'historique des exécutions',
-    runHistory: 'Historique d\'exécution',
+    runHistory: 'Historique des exécutions',
-    goBackToEdit: 'Retourner à l\'éditeur',
+    goBackToEdit: 'Retour à l\'éditeur',
     conversationLog: 'Journal de conversation',
     conversationLog: 'Journal de conversation',
     features: 'Fonctionnalités',
     features: 'Fonctionnalités',
     debugAndPreview: 'Déboguer et prévisualiser',
     debugAndPreview: 'Déboguer et prévisualiser',
@@ -22,76 +22,89 @@ const translation = {
     currentDraft: 'Brouillon actuel',
     currentDraft: 'Brouillon actuel',
     currentDraftUnpublished: 'Brouillon actuel non publié',
     currentDraftUnpublished: 'Brouillon actuel non publié',
     latestPublished: 'Dernière publication',
     latestPublished: 'Dernière publication',
-    publishedAt: 'Publié',
+    publishedAt: 'Publié le',
     restore: 'Restaurer',
     restore: 'Restaurer',
     runApp: 'Exécuter l\'application',
     runApp: 'Exécuter l\'application',
     batchRunApp: 'Exécuter l\'application en lot',
     batchRunApp: 'Exécuter l\'application en lot',
-    accessAPIReference: 'Accéder à la référence de l\'API',
+    accessAPIReference: 'Accéder à la référence API',
-    embedIntoSite: 'Intégrer dans le site',
+    embedIntoSite: 'Intégrer au site',
     addTitle: 'Ajouter un titre...',
     addTitle: 'Ajouter un titre...',
     addDescription: 'Ajouter une description...',
     addDescription: 'Ajouter une description...',
-    noVar: 'Aucune variable',
+    noVar: 'Pas de variable',
     searchVar: 'Rechercher une variable',
     searchVar: 'Rechercher une variable',
     variableNamePlaceholder: 'Nom de la variable',
     variableNamePlaceholder: 'Nom de la variable',
-    setVarValuePlaceholder: 'Définir la variable',
+    setVarValuePlaceholder: 'Définir la valeur de la variable',
     needConnecttip: 'Cette étape n\'est connectée à rien',
     needConnecttip: 'Cette étape n\'est connectée à rien',
     maxTreeDepth: 'Limite maximale de {{depth}} nœuds par branche',
     maxTreeDepth: 'Limite maximale de {{depth}} nœuds par branche',
     needEndNode: 'Le bloc de fin doit être ajouté',
     needEndNode: 'Le bloc de fin doit être ajouté',
     needAnswerNode: 'Le bloc de réponse doit être ajouté',
     needAnswerNode: 'Le bloc de réponse doit être ajouté',
-    workflowProcess: 'Processus de workflow',
+    workflowProcess: 'Processus de flux de travail',
     notRunning: 'Pas encore en cours d\'exécution',
     notRunning: 'Pas encore en cours d\'exécution',
-    previewPlaceholder: 'Saisissez du contenu dans la zone ci-dessous pour commencer le débogage du Chatbot',
+    previewPlaceholder: 'Entrez le contenu dans la boîte ci-dessous pour commencer à déboguer le Chatbot',
     effectVarConfirm: {
     effectVarConfirm: {
       title: 'Supprimer la variable',
       title: 'Supprimer la variable',
-      content: 'La variable est utilisée dans d\'autres nœuds. Voulez-vous toujours la supprimer ?',
+      content: 'La variable est utilisée dans d\'autres nœuds. Voulez-vous toujours la supprimer?',
     },
     },
     insertVarTip: 'Appuyez sur la touche \'/\' pour insérer rapidement',
     insertVarTip: 'Appuyez sur la touche \'/\' pour insérer rapidement',
     processData: 'Traiter les données',
     processData: 'Traiter les données',
     input: 'Entrée',
     input: 'Entrée',
     output: 'Sortie',
     output: 'Sortie',
     jinjaEditorPlaceholder: 'Tapez \'/\' ou \'{\' pour insérer une variable',
     jinjaEditorPlaceholder: 'Tapez \'/\' ou \'{\' pour insérer une variable',
-    viewOnly: 'Vue Seulement',
+    viewOnly: 'Affichage seulement',
-    showRunHistory: 'Afficher l\'Historique des Exécutions',
+    showRunHistory: 'Afficher l\'historique des exécutions',
-    enableJinja: 'Activer le support des modèles Jinja',
+    enableJinja: 'Activer le support des templates Jinja',
-    learnMore: 'En Savoir Plus',
+    learnMore: 'En savoir plus',
     copy: 'Copier',
     copy: 'Copier',
     duplicate: 'Dupliquer',
     duplicate: 'Dupliquer',
-    addBlock: 'Ajouter un Bloc',
+    addBlock: 'Ajouter un bloc',
-    pasteHere: 'Coller Ici',
+    pasteHere: 'Coller ici',
-    pointerMode: 'Mode Pointeur',
+    pointerMode: 'Mode pointeur',
-    handMode: 'Mode Main',
+    handMode: 'Mode main',
+    model: 'Modèle',
+    workflowAsTool: 'Flux de travail en tant qu\'outil',
+    configureRequired: 'Configuration requise',
+    configure: 'Configurer',
+    manageInTools: 'Gérer dans les outils',
+    workflowAsToolTip: 'Reconfiguration de l\'outil requise après la mise à jour du flux de travail.',
+    viewDetailInTracingPanel: 'Voir les détails',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} est requis',
     fieldRequired: '{{field}} est requis',
-    authRequired: 'L\'autorisation est requise',
+    authRequired: 'Autorisation requise',
     invalidJson: '{{field}} est un JSON invalide',
     invalidJson: '{{field}} est un JSON invalide',
     fields: {
     fields: {
       variable: 'Nom de la variable',
       variable: 'Nom de la variable',
       variableValue: 'Valeur de la variable',
       variableValue: 'Valeur de la variable',
       code: 'Code',
       code: 'Code',
       model: 'Modèle',
       model: 'Modèle',
-      rerankModel: 'Modèle de retrait',
+      rerankModel: 'Modèle de rerank',
     },
     },
     invalidVariable: 'Variable invalide',
     invalidVariable: 'Variable invalide',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: 'Exécution de test ',
+    testRun: 'Exécution de test',
     startRun: 'Démarrer l\'exécution',
     startRun: 'Démarrer l\'exécution',
-    running: 'En cours',
+    running: 'En cours d\'exécution',
+    testRunIteration: 'Itération de l\'exécution de test',
+    back: 'Retour',
+    iteration: 'Itération',
   },
   },
   tabs: {
   tabs: {
     'searchBlock': 'Rechercher un bloc',
     'searchBlock': 'Rechercher un bloc',
     'blocks': 'Blocs',
     'blocks': 'Blocs',
-    'builtInTool': 'Outil intégré',
+    'tools': 'Outils',
-    'customTool': 'Outil personnalisé',
+    'allTool': 'Tous',
+    'builtInTool': 'Intégré',
+    'customTool': 'Personnalisé',
+    'workflowTool': 'Flux de travail',
     'question-understand': 'Compréhension des questions',
     'question-understand': 'Compréhension des questions',
     'logic': 'Logique',
     'logic': 'Logique',
     'transform': 'Transformer',
     'transform': 'Transformer',
     'utilities': 'Utilitaires',
     'utilities': 'Utilitaires',
-    'noResult': 'Aucune correspondance trouvée',
+    'noResult': 'Aucun résultat trouvé',
   },
   },
   blocks: {
   blocks: {
-    'start': 'Démarrer',
+    'start': 'Début',
     'end': 'Fin',
     'end': 'Fin',
     'answer': 'Réponse',
     'answer': 'Réponse',
     'llm': 'LLM',
     'llm': 'LLM',
@@ -101,43 +114,50 @@ const translation = {
     'code': 'Code',
     'code': 'Code',
     'template-transform': 'Modèle',
     'template-transform': 'Modèle',
     'http-request': 'Requête HTTP',
     'http-request': 'Requête HTTP',
-    'variable-assigner': 'Assignateur de variables',
+    'variable-assigner': 'Assigneur de variables',
+    'variable-aggregator': 'Agrégateur de variables',
+    'iteration-start': 'Début d\'itération',
+    'iteration': 'Itération',
+    'parameter-extractor': 'Extracteur de paramètres',
   },
   },
   blocksAbout: {
   blocksAbout: {
     'start': 'Définir les paramètres initiaux pour lancer un flux de travail',
     'start': 'Définir les paramètres initiaux pour lancer un flux de travail',
     'end': 'Définir la fin et le type de résultat d\'un flux de travail',
     'end': 'Définir la fin et le type de résultat d\'un flux de travail',
-    'answer': 'Définir le contenu de réponse d\'une conversation',
+    'answer': 'Définir le contenu de la réponse d\'une conversation',
-    'llm': 'Appeler de grands modèles de langage pour répondre aux questions ou traiter le langage naturel',
+    'llm': 'Inviter de grands modèles de langage pour répondre aux questions ou traiter le langage naturel',
-    'knowledge-retrieval': 'Vous permet de interroger le contenu textuel lié aux questions des utilisateurs à partir des connaissances',
+    'knowledge-retrieval': 'Permet de consulter le contenu textuel lié aux questions des utilisateurs à partir de la base de connaissances',
     'question-classifier': 'Définir les conditions de classification des questions des utilisateurs, LLM peut définir comment la conversation progresse en fonction de la description de la classification',
     'question-classifier': 'Définir les conditions de classification des questions des utilisateurs, LLM peut définir comment la conversation progresse en fonction de la description de la classification',
-    'if-else': 'Vous permet de diviser le flux de travail en deux branches en fonction de conditions SI/SINON',
+    'if-else': 'Permet de diviser le flux de travail en deux branches basées sur des conditions if/else',
     'code': 'Exécuter un morceau de code Python ou NodeJS pour implémenter une logique personnalisée',
     'code': 'Exécuter un morceau de code Python ou NodeJS pour implémenter une logique personnalisée',
-    'template-transform': 'Convertir des données en chaîne à l\'aide de la syntaxe du modèle Jinja',
+    'template-transform': 'Convertir les données en chaîne en utilisant la syntaxe du template Jinja',
-    'http-request': 'Permet d\'envoyer des requêtes serveur via le protocole HTTP',
+    'http-request': 'Permettre l\'envoi de requêtes serveur via le protocole HTTP',
-    'variable-assigner': 'Attribuer des variables dans différentes branches à la même variable pour obtenir une configuration unifiée des post-nœuds',
+    'variable-assigner': 'Agrégation de variables de plusieurs branches en une seule variable pour la configuration unifiée des nœuds en aval.',
+    'variable-aggregator': 'Agrégation de variables de plusieurs branches en une seule variable pour la configuration unifiée des nœuds en aval.',
+    'iteration': 'Effectuer plusieurs étapes sur un objet de liste jusqu\'à ce que tous les résultats soient produits.',
+    'parameter-extractor': 'Utiliser LLM pour extraire des paramètres structurés du langage naturel pour les invocations d\'outils ou les requêtes HTTP.',
   },
   },
   operator: {
   operator: {
     zoomIn: 'Zoomer',
     zoomIn: 'Zoomer',
     zoomOut: 'Dézoomer',
     zoomOut: 'Dézoomer',
-    zoomTo50: 'Zoom à 50%',
+    zoomTo50: 'Zoomer à 50%',
-    zoomTo100: 'Zoom à 100%',
+    zoomTo100: 'Zoomer à 100%',
-    zoomToFit: 'Ajuster à la fenêtre',
+    zoomToFit: 'Zoomer pour ajuster',
   },
   },
   panel: {
   panel: {
-    userInputField: 'Champ de saisie utilisateur',
+    userInputField: 'Champ de saisie de l\'utilisateur',
     changeBlock: 'Changer de bloc',
     changeBlock: 'Changer de bloc',
     helpLink: 'Lien d\'aide',
     helpLink: 'Lien d\'aide',
     about: 'À propos',
     about: 'À propos',
-    createdBy: 'Créé par ',
+    createdBy: 'Créé par',
     nextStep: 'Étape suivante',
     nextStep: 'Étape suivante',
     addNextStep: 'Ajouter le prochain bloc dans ce flux de travail',
     addNextStep: 'Ajouter le prochain bloc dans ce flux de travail',
-    selectNextStep: 'Sélectionner le bloc suivant',
+    selectNextStep: 'Sélectionner le prochain bloc',
     runThisStep: 'Exécuter cette étape',
     runThisStep: 'Exécuter cette étape',
     checklist: 'Liste de contrôle',
     checklist: 'Liste de contrôle',
     checklistTip: 'Assurez-vous que tous les problèmes sont résolus avant de publier',
     checklistTip: 'Assurez-vous que tous les problèmes sont résolus avant de publier',
-    checklistResolved: 'Tous les problèmes sont résolus',
+    checklistResolved: 'Tous les problèmes ont été résolus',
     organizeBlocks: 'Organiser les blocs',
     organizeBlocks: 'Organiser les blocs',
-    change: 'Changer',
+    change: 'Modifier',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
@@ -145,7 +165,7 @@ const translation = {
       insertVarTip: 'Insérer une variable',
       insertVarTip: 'Insérer une variable',
       memory: {
       memory: {
         memory: 'Mémoire',
         memory: 'Mémoire',
-        memoryTip: 'Paramètres de mémoire de chat',
+        memoryTip: 'Paramètres de mémoire de conversation',
         windowSize: 'Taille de la fenêtre',
         windowSize: 'Taille de la fenêtre',
         conversationRoleName: 'Nom du rôle de conversation',
         conversationRoleName: 'Nom du rôle de conversation',
         user: 'Préfixe utilisateur',
         user: 'Préfixe utilisateur',
@@ -153,16 +173,16 @@ const translation = {
       },
       },
       memories: {
       memories: {
         title: 'Mémoires',
         title: 'Mémoires',
-        tip: 'Mémoire de chat',
+        tip: 'Mémoire de conversation',
         builtIn: 'Intégré',
         builtIn: 'Intégré',
       },
       },
     },
     },
     start: {
     start: {
       required: 'requis',
       required: 'requis',
-      inputField: 'Champ d\'entrée',
+      inputField: 'Champ de saisie',
       builtInVar: 'Variables intégrées',
       builtInVar: 'Variables intégrées',
       outputVars: {
       outputVars: {
-        query: 'Entrée utilisateur',
+        query: 'Saisie utilisateur',
         memories: {
         memories: {
           des: 'Historique de conversation',
           des: 'Historique de conversation',
           type: 'type de message',
           type: 'type de message',
@@ -170,7 +190,7 @@ const translation = {
         },
         },
         files: 'Liste de fichiers',
         files: 'Liste de fichiers',
       },
       },
-      noVarTip: 'Définissez les entrées pouvant être utilisées dans le flux de travail',
+      noVarTip: 'Définir les entrées qui peuvent être utilisées dans le flux de travail',
     },
     },
     end: {
     end: {
       outputs: 'Sorties',
       outputs: 'Sorties',
@@ -192,36 +212,36 @@ const translation = {
       model: 'modèle',
       model: 'modèle',
       variables: 'variables',
       variables: 'variables',
       context: 'contexte',
       context: 'contexte',
-      contextTooltip: 'Vous pouvez importer des connaissances comme contexte',
+      contextTooltip: 'Vous pouvez importer des connaissances en tant que contexte',
-      notSetContextInPromptTip: 'Pour activer la fonction de contexte, veuillez remplir la variable de contexte dans PROMPT.',
+      notSetContextInPromptTip: 'Pour activer la fonctionnalité de contexte, remplissez la variable de contexte dans le PROMPT.',
       prompt: 'invite',
       prompt: 'invite',
       roleDescription: {
       roleDescription: {
-        system: 'Donnez des instructions générales pour la conversation',
+        system: 'Donner des instructions de haut niveau pour la conversation',
-        user: 'Fournir des instructions, des requêtes ou toute entrée basée sur du texte au modèle',
+        user: 'Fournir des instructions, des questions ou toute entrée textuelle au modèle',
-        assistant: 'Les réponses du modèle basées sur les messages de l\'utilisateur',
+        assistant: 'Les réponses du modèle basées sur les messages des utilisateurs',
       },
       },
       addMessage: 'Ajouter un message',
       addMessage: 'Ajouter un message',
       vision: 'vision',
       vision: 'vision',
       files: 'Fichiers',
       files: 'Fichiers',
       resolution: {
       resolution: {
         name: 'Résolution',
         name: 'Résolution',
-        high: 'Élevée',
+        high: 'Haute',
-        low: 'Faible',
+        low: 'Basse',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Générer du contenu',
+        output: 'Contenu généré',
         usage: 'Informations sur l\'utilisation du modèle',
         usage: 'Informations sur l\'utilisation du modèle',
       },
       },
       singleRun: {
       singleRun: {
         variable: 'Variable',
         variable: 'Variable',
       },
       },
-      sysQueryInUser: 'sys.query dans l\'entrée utilisateur',
+      sysQueryInUser: 'sys.query dans le message utilisateur est requis',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
       queryVariable: 'Variable de requête',
       queryVariable: 'Variable de requête',
       knowledge: 'Connaissances',
       knowledge: 'Connaissances',
       outputVars: {
       outputVars: {
-        output: 'Données segmentées de récupération',
+        output: 'Données segmentées récupérées',
         content: 'Contenu segmenté',
         content: 'Contenu segmenté',
         title: 'Titre segmenté',
         title: 'Titre segmenté',
         icon: 'Icône segmentée',
         icon: 'Icône segmentée',
@@ -230,9 +250,9 @@ const translation = {
       },
       },
     },
     },
     http: {
     http: {
-      inputVars: 'Variables d\'entrée',
+      inputVars: 'Variables de saisie',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Saisissez l\'URL, tapez ‘/’ pour insérer une variable',
+      apiPlaceholder: 'Entrez l\'URL, tapez ‘/’ pour insérer une variable',
       notStartWithHttp: 'L\'API doit commencer par http:// ou https://',
       notStartWithHttp: 'L\'API doit commencer par http:// ou https://',
       key: 'Clé',
       key: 'Clé',
       value: 'Valeur',
       value: 'Valeur',
@@ -243,9 +263,9 @@ const translation = {
       body: 'Corps',
       body: 'Corps',
       outputVars: {
       outputVars: {
         body: 'Contenu de la réponse',
         body: 'Contenu de la réponse',
-        statusCode: 'Code d\'état de la réponse',
+        statusCode: 'Code de statut de la réponse',
-        headers: 'Liste d\'en-têtes de réponse JSON',
+        headers: 'Liste des en-têtes de réponse JSON',
-        files: 'Liste de fichiers',
+        files: 'Liste des fichiers',
       },
       },
       authorization: {
       authorization: {
         'authorization': 'Autorisation',
         'authorization': 'Autorisation',
@@ -254,7 +274,7 @@ const translation = {
         'api-key': 'Clé API',
         'api-key': 'Clé API',
         'auth-type': 'Type d\'authentification',
         'auth-type': 'Type d\'authentification',
         'basic': 'De base',
         'basic': 'De base',
-        'bearer': 'Porteur',
+        'bearer': 'Bearer',
         'custom': 'Personnalisé',
         'custom': 'Personnalisé',
         'api-key-title': 'Clé API',
         'api-key-title': 'Clé API',
         'header': 'En-tête',
         'header': 'En-tête',
@@ -271,16 +291,16 @@ const translation = {
       },
       },
     },
     },
     code: {
     code: {
-      inputVars: 'Variables d\'entrée',
+      inputVars: 'Variables de saisie',
       outputVars: 'Variables de sortie',
       outputVars: 'Variables de sortie',
-      advancedDependencies: 'Dépendances Avancées',
+      advancedDependencies: 'Dépendances avancées',
-      advancedDependenciesTip: 'Ajoutez ici des dépendances préchargées qui prennent plus de temps à consommer ou qui ne sont pas intégrées par défaut',
+      advancedDependenciesTip: 'Ajoutez quelques dépendances préchargées qui prennent plus de temps à consommer ou ne sont pas par défaut ici',
-      searchDependencies: 'Rechercher des Dépendances',
+      searchDependencies: 'Rechercher des dépendances',
     },
     },
     templateTransform: {
     templateTransform: {
-      inputVars: 'Variables d\'entrée',
+      inputVars: 'Variables de saisie',
       code: 'Code',
       code: 'Code',
-      codeSupportTip: 'Ne prend en charge que Jinja2',
+      codeSupportTip: 'Prend en charge uniquement Jinja2',
       outputVars: {
       outputVars: {
         output: 'Contenu transformé',
         output: 'Contenu transformé',
       },
       },
@@ -288,7 +308,7 @@ const translation = {
     ifElse: {
     ifElse: {
       if: 'Si',
       if: 'Si',
       else: 'Sinon',
       else: 'Sinon',
-      elseDescription: 'Utilisé pour définir la logique qui doit être exécutée lorsque la condition SI n\'est pas remplie.',
+      elseDescription: 'Utilisé pour définir la logique à exécuter lorsque la condition if n\'est pas remplie.',
       and: 'et',
       and: 'et',
       or: 'ou',
       or: 'ou',
       operator: 'Opérateur',
       operator: 'Opérateur',
@@ -305,14 +325,13 @@ const translation = {
         'null': 'est nul',
         'null': 'est nul',
         'not null': 'n\'est pas nul',
         'not null': 'n\'est pas nul',
       },
       },
-      enterValue: 'Entrer une valeur',
+      enterValue: 'Entrez la valeur',
       addCondition: 'Ajouter une condition',
       addCondition: 'Ajouter une condition',
       conditionNotSetup: 'Condition NON configurée',
       conditionNotSetup: 'Condition NON configurée',
     },
     },
     variableAssigner: {
     variableAssigner: {
       title: 'Attribuer des variables',
       title: 'Attribuer des variables',
       outputType: 'Type de sortie',
       outputType: 'Type de sortie',
-      outputVarType: 'Type de variable de sortie',
       varNotSet: 'Variable non définie',
       varNotSet: 'Variable non définie',
       noVarTip: 'Ajoutez les variables à attribuer',
       noVarTip: 'Ajoutez les variables à attribuer',
       type: {
       type: {
@@ -321,18 +340,22 @@ const translation = {
         object: 'Objet',
         object: 'Objet',
         array: 'Tableau',
         array: 'Tableau',
       },
       },
+      aggregationGroup: 'Groupe d\'agrégation',
+      aggregationGroupTip: 'L\'activation de cette fonctionnalité permet à l\'agrégateur de variables d\'agréger plusieurs ensembles de variables.',
+      addGroup: 'Ajouter un groupe',
       outputVars: {
       outputVars: {
-        output: 'Valeur de la variable attribuée',
+        varDescribe: 'Sortie {{groupName}}',
       },
       },
+      setAssignVariable: 'Définir la variable à attribuer',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Pour autoriser',
+      toAuthorize: 'Autoriser',
-      inputVars: 'Variables d\'entrée',
+      inputVars: 'Variables de saisie',
       outputVars: {
       outputVars: {
         text: 'contenu généré par l\'outil',
         text: 'contenu généré par l\'outil',
         files: {
         files: {
           title: 'fichiers générés par l\'outil',
           title: 'fichiers générés par l\'outil',
-          type: 'Type de support. Actuellement, seul le support de l\'image est pris en charge',
+          type: 'Type de support. Actuellement ne prend en charge que l\'image',
           transfer_method: 'Méthode de transfert. La valeur est remote_url ou local_file',
           transfer_method: 'Méthode de transfert. La valeur est remote_url ou local_file',
           url: 'URL de l\'image',
           url: 'URL de l\'image',
           upload_file_id: 'ID du fichier téléchargé',
           upload_file_id: 'ID du fichier téléchargé',
@@ -341,19 +364,53 @@ const translation = {
     },
     },
     questionClassifiers: {
     questionClassifiers: {
       model: 'modèle',
       model: 'modèle',
-      inputVars: 'Variables d\'entrée',
+      inputVars: 'Variables de saisie',
       outputVars: {
       outputVars: {
         className: 'Nom de la classe',
         className: 'Nom de la classe',
       },
       },
       class: 'Classe',
       class: 'Classe',
-      classNamePlaceholder: 'Écrivez votre nom de classe',
+      classNamePlaceholder: 'Écrivez le nom de votre classe',
       advancedSetting: 'Paramètre avancé',
       advancedSetting: 'Paramètre avancé',
       topicName: 'Nom du sujet',
       topicName: 'Nom du sujet',
-      topicPlaceholder: 'Écrivez votre nom de sujet',
+      topicPlaceholder: 'Écrivez le nom de votre sujet',
       addClass: 'Ajouter une classe',
       addClass: 'Ajouter une classe',
       instruction: 'Instruction',
       instruction: 'Instruction',
+      instructionTip: 'Entrez des instructions supplémentaires pour aider le classificateur de questions à mieux comprendre comment catégoriser les questions.',
       instructionPlaceholder: 'Écrivez votre instruction',
       instructionPlaceholder: 'Écrivez votre instruction',
     },
     },
+    parameterExtractor: {
+      inputVar: 'Variable de saisie',
+      extractParameters: 'Extraire des paramètres',
+      importFromTool: 'Importer des outils',
+      addExtractParameter: 'Ajouter un paramètre d\'extraction',
+      addExtractParameterContent: {
+        name: 'Nom',
+        namePlaceholder: 'Nom du paramètre d\'extraction',
+        type: 'Type',
+        typePlaceholder: 'Type de paramètre d\'extraction',
+        description: 'Description',
+        descriptionPlaceholder: 'Description du paramètre d\'extraction',
+        required: 'Requis',
+        requiredContent: 'Requis est utilisé uniquement comme référence pour l\'inférence du modèle, et non pour la validation obligatoire de la sortiedu paramètre.',
+      },
+      extractParametersNotSet: 'Paramètres d\'extraction non configurés',
+      instruction: 'Instruction',
+      instructionTip: 'Entrez des instructions supplémentaires pour aider l\'extracteur de paramètres à comprendre comment extraire les paramètres.',
+      advancedSetting: 'Paramètre avancé',
+      reasoningMode: 'Mode de raisonnement',
+      reasoningModeTip: 'Vous pouvez choisir le mode de raisonnement approprié en fonction de la capacité du modèle à répondre aux instructions pour les appels de fonction ou les invites.',
+      isSuccess: 'Est réussi. En cas de succès, la valeur est 1, en cas d\'échec, la valeur est 0.',
+      errorReason: 'Raison de l\'erreur',
+    },
+    iteration: {
+      deleteTitle: 'Supprimer le nœud d\'itération?',
+      deleteDesc: 'La suppression du nœud d\'itération supprimera tous les nœuds enfants',
+      input: 'Entrée',
+      output: 'Variables de sortie',
+      iteration_one: '{{count}} Itération',
+      iteration_other: '{{count}} Itérations',
+      currentIteration: 'Itération actuelle',
+    },
   },
   },
   tracing: {
   tracing: {
     stopBy: 'Arrêté par {{user}}',
     stopBy: 'Arrêté par {{user}}',

+ 137 - 136
web/i18n/ko-KR/workflow.ts

@@ -2,9 +2,9 @@ const translation = {
   common: {
   common: {
     editing: '편집 중',
     editing: '편집 중',
     autoSaved: '자동 저장됨',
     autoSaved: '자동 저장됨',
-    unpublished: '미게시',
+    unpublished: '미발행',
-    published: '게시됨',
+    published: '발행됨',
-    publish: '게시',
+    publish: '발행',
     update: '업데이트',
     update: '업데이트',
     run: '실행',
     run: '실행',
     running: '실행 중',
     running: '실행 중',
@@ -14,88 +14,88 @@ const translation = {
     preview: '미리보기',
     preview: '미리보기',
     viewRunHistory: '실행 기록 보기',
     viewRunHistory: '실행 기록 보기',
     runHistory: '실행 기록',
     runHistory: '실행 기록',
-    goBackToEdit: '편집로 돌아가기',
+    goBackToEdit: '편집로 돌아가기',
     conversationLog: '대화 로그',
     conversationLog: '대화 로그',
     features: '기능',
     features: '기능',
     debugAndPreview: '디버그 및 미리보기',
     debugAndPreview: '디버그 및 미리보기',
     restart: '재시작',
     restart: '재시작',
     currentDraft: '현재 초안',
     currentDraft: '현재 초안',
-    currentDraftUnpublished: '현재 초안 (게시되지 않음)',
+    currentDraftUnpublished: '현재 초안 미발행',
-    latestPublished: '최신 게시됨',
+    latestPublished: '최신 발행본',
-    publishedAt: '게시 시간',
+    publishedAt: '발행일',
     restore: '복원',
     restore: '복원',
     runApp: '앱 실행',
     runApp: '앱 실행',
-    batchRunApp: '일괄 실행',
+    batchRunApp: '일괄 실행',
-    accessAPIReference: 'API 참조에 액세스',
+    accessAPIReference: 'API 참조 접근',
-    embedIntoSite: '사이트에 포함',
+    embedIntoSite: '사이트에 삽입',
     addTitle: '제목 추가...',
     addTitle: '제목 추가...',
     addDescription: '설명 추가...',
     addDescription: '설명 추가...',
     noVar: '변수 없음',
     noVar: '변수 없음',
     searchVar: '변수 검색',
     searchVar: '변수 검색',
-    variableNamePlaceholder: '변수',
+    variableNamePlaceholder: '변수 이름',
     setVarValuePlaceholder: '변수 값 설정',
     setVarValuePlaceholder: '변수 값 설정',
-    needConnecttip: '이 단계에는 연결된 항목이 없습니다',
+    needConnecttip: '이 단계는 아무것도 연결되어 있지 않습니다',
-    maxTreeDepth: '각 브랜치 당 최대 {{depth}} 노드 제한',
+    maxTreeDepth: '분기당 최대 {{depth}} 노드 제한',
     needEndNode: '종료 블록을 추가해야 합니다',
     needEndNode: '종료 블록을 추가해야 합니다',
-    needAnswerNode: '답 블록을 추가해야 합니다',
+    needAnswerNode: '답 블록을 추가해야 합니다',
-    workflowProcess: '워크플로우 처리',
+    workflowProcess: '워크플로우 과정',
     notRunning: '아직 실행되지 않음',
     notRunning: '아직 실행되지 않음',
-    previewPlaceholder: '챗봇 디버깅을 시작하려면 아래 상자에 내용을 입력하세요',
+    previewPlaceholder: '디버깅을 시작하려면 아래 상자에 내용을 입력하세요',
     effectVarConfirm: {
     effectVarConfirm: {
-      title: '변수 제',
+      title: '변수 제',
-      content: '다른 노드에서 변수를 사용하고 있습니다. 그래도 삭제하시겠습니까?',
+      content: '변수가 다른 노드에서 사용되고 있습니다. 그래도 제거하시겠습니까?',
     },
     },
-    insertVarTip: '빠른 삽입을 위해 \'/\' 키를 누르세요',
+    insertVarTip: '빠르게 삽입하려면 \'/\' 키를 누르세요',
     processData: '데이터 처리',
     processData: '데이터 처리',
     input: '입력',
     input: '입력',
     output: '출력',
     output: '출력',
+    jinjaEditorPlaceholder: '변수를 삽입하려면 \'/\' 또는 \'{\'를 입력하세요',
+    viewOnly: '보기 전용',
+    showRunHistory: '실행 기록 보기',
     enableJinja: 'Jinja 템플릿 지원 활성화',
     enableJinja: 'Jinja 템플릿 지원 활성화',
     learnMore: '더 알아보기',
     learnMore: '더 알아보기',
-    jinjaEditorPlaceholder: '\'/\' 또는 \'{\'를 입력하여 변수를 삽입하세요.',
-    viewOnly: '보기 모드',
-    showRunHistory: '실행 기록 보기',
     copy: '복사',
     copy: '복사',
     duplicate: '복제',
     duplicate: '복제',
     addBlock: '블록 추가',
     addBlock: '블록 추가',
     pasteHere: '여기에 붙여넣기',
     pasteHere: '여기에 붙여넣기',
-    pointerMode: '선택 모드',
+    pointerMode: '포인터 모드',
-    handMode: '시점 모드',
+    handMode: '핸드 모드',
     model: '모델',
     model: '모델',
-    workflowAsTool: '워크플로우를 도구로 사용',
+    workflowAsTool: '도구로서의 워크플로우',
-    configureRequired: '설정 필요함',
+    configureRequired: '구성 필요',
-    configure: '설정',
+    configure: '구성',
     manageInTools: '도구에서 관리',
     manageInTools: '도구에서 관리',
-    workflowAsToolTip: '워크플로우 업데이트 후, 도구 재설정이 필요합니다.',
+    workflowAsToolTip: '워크플로우 업데이트 후 도구 재구성이 필요합니다.',
-    viewDetailInTracingPanel: '자세히 보기',
+    viewDetailInTracingPanel: '세부 정보 보기',
   },
   },
   errorMsg: {
   errorMsg: {
-    fieldRequired: '{{field}}은(는) 필수입니다',
+    fieldRequired: '{{field}}가 필요합니다',
     authRequired: '인증이 필요합니다',
     authRequired: '인증이 필요합니다',
-    invalidJson: '{{field}}이(가) 유효하지 않습니다',
+    invalidJson: '{{field}}는 잘못된 JSON입니다',
     fields: {
     fields: {
-      variable: '변수',
+      variable: '변수 이름',
       variableValue: '변수 값',
       variableValue: '변수 값',
       code: '코드',
       code: '코드',
       model: '모델',
       model: '모델',
-      rerankModel: '재순위 모델',
+      rerankModel: '재정렬 모델',
     },
     },
-    invalidVariable: '유효하지 않은 변수',
+    invalidVariable: '잘못된 변수',
   },
   },
   singleRun: {
   singleRun: {
     testRun: '테스트 실행',
     testRun: '테스트 실행',
     startRun: '실행 시작',
     startRun: '실행 시작',
     running: '실행 중',
     running: '실행 중',
-    testRunIteration: '테스트 반복 실행',
+    testRunIteration: '테스트 실행 반복',
-    back: '뒤로가기',
+    back: '뒤로',
-    iteration: '반복하기',
+    iteration: '반복',
   },
   },
   tabs: {
   tabs: {
     'searchBlock': '블록 검색',
     'searchBlock': '블록 검색',
     'blocks': '블록',
     'blocks': '블록',
     'tools': '도구',
     'tools': '도구',
-    'allTool': '모두',
+    'allTool': '전체',
-    'builtInTool': '내장 도구',
+    'builtInTool': '내장',
-    'customTool': '커스텀 도구',
+    'customTool': '사용자 정의',
     'workflowTool': '워크플로우',
     'workflowTool': '워크플로우',
     'question-understand': '질문 이해',
     'question-understand': '질문 이해',
     'logic': '논리',
     'logic': '논리',
@@ -114,43 +114,43 @@ const translation = {
     'code': '코드',
     'code': '코드',
     'template-transform': '템플릿',
     'template-transform': '템플릿',
     'http-request': 'HTTP 요청',
     'http-request': 'HTTP 요청',
-    'variable-assigner': '변수 할당',
+    'variable-assigner': '변수 할당',
-    'variable-aggregator': '변수 집합기',
+    'variable-aggregator': '변수 집계자',
     'iteration-start': '반복 시작',
     'iteration-start': '반복 시작',
     'iteration': '반복',
     'iteration': '반복',
-    'parameter-extractor': '파라미터 추출기',
+    'parameter-extractor': '매개변수 추출기',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': '워크플로우 시작을 위한 매개변수를 정의합니다',
+    'start': '워크플로우를 시작하기 위한 초기 매개변수를 정의합니다',
-    'end': '워크플로우 종료 및 결과 유형을 정의합니다',
+    'end': '워크플로우 종료 및 결과 유형을 정의합니다',
-    'answer': '채팅 대화의 답 내용을 정의합니다',
+    'answer': '대화의 답 내용을 정의합니다',
-    'llm': '대규모 언어 모델을 호출하여 질문에 답하거나 자연어를 처리합니다',
+    'llm': '질문에 답하거나 자연어를 처리하기 위해 대형 언어 모델을 호출합니다',
-    'knowledge-retrieval': '사용자 질문과 관련된 텍스트 콘텐츠를 지식에서 쿼리할 수 있도록 합니다',
+    'knowledge-retrieval': '사용자 질문과 관련된 텍스트 콘텐츠를 지식 베이스에서 쿼리할 수 있습니다',
-    'question-classifier': '사용자의 질문 분류 조건을 정의하고, LLM은 분류 기술에 따라 대화가 어떻게 진행될지 정의할 수 있습니다',
+    'question-classifier': '사용자 질문의 분류 조건을 정의합니다. LLM은 분류 설명을 기반으로 대화의 진행 방식을 정의할 수 있습니다',
-    'if-else': 'IF/ELSE 조건에 따라 워크플로우를 두 가지 분기로 나눌 수 있습니다',
+    'if-else': 'if/else 조건을 기반으로 워크플로우를 두 가지 분기로 나눌 수 있습니다',
-    'code': '사용자 정의 로직을 구현하기 위해 Python 또는 NodeJS 코드를 실행합니다',
+    'code': '사용자 정의 논리를 구현하기 위해 Python 또는 NodeJS 코드를 실행합니다',
     'template-transform': 'Jinja 템플릿 구문을 사용하여 데이터를 문자열로 변환합니다',
     'template-transform': 'Jinja 템플릿 구문을 사용하여 데이터를 문자열로 변환합니다',
     'http-request': 'HTTP 프로토콜을 통해 서버 요청을 보낼 수 있습니다',
     'http-request': 'HTTP 프로토콜을 통해 서버 요청을 보낼 수 있습니다',
-    'variable-assigner': '다른 분기에서 동일한 변수에 변수를 할당하여 후속 노드의 통일된 구성을 달성할 수 있습니다',
+    'variable-assigner': '다중 분기 변수들을 하나의 변수로 집계하여 다운스트림 노드의 통합 구성을 가능하게 합니다.',
-    'variable-aggregator': '다른 분기에서 동일한 변수에 변수를 할당하여 후속 노드의 통일된 구성을 달성할 수 있습니다',
+    'variable-aggregator': '다중 분기 변수들을 하나의 변수로 집계하여 다운스트림 노드의 통합 구성을 가능하게 합니다.',
-    'iteration': '모든 결과가 출력될 때까지 리스트 객체에서 단계 반복을 수행합니다.',
+    'iteration': '목록 객체에서 여러 단계를 수행하여 모든 결과가 출력될 때까지 반복합니다.',
-    'parameter-extractor': '도구 혹은 HTTP 요청에 사용할 구조화된 파라미터를 LLM을 이용하여 자연어에서 추출합니다.',
+    'parameter-extractor': '도구 호출 또는 HTTP 요청을 위해 자연어에서 구조화된 매개변수를 추출하기 위해 LLM을 사용합니다.',
   },
   },
   operator: {
   operator: {
     zoomIn: '확대',
     zoomIn: '확대',
     zoomOut: '축소',
     zoomOut: '축소',
     zoomTo50: '50%로 확대',
     zoomTo50: '50%로 확대',
     zoomTo100: '100%로 확대',
     zoomTo100: '100%로 확대',
-    zoomToFit: '적합하게 확대',
+    zoomToFit: '화면에 맞게 확대',
   },
   },
   panel: {
   panel: {
     userInputField: '사용자 입력 필드',
     userInputField: '사용자 입력 필드',
     changeBlock: '블록 변경',
     changeBlock: '블록 변경',
     helpLink: '도움말 링크',
     helpLink: '도움말 링크',
     about: '정보',
     about: '정보',
-    createdBy: '작성자',
+    createdBy: '작성자 ',
     nextStep: '다음 단계',
     nextStep: '다음 단계',
-    addNextStep: '이 워크플로우 다음 블록 추가',
+    addNextStep: '이 워크플로우 다음 블록 추가',
     selectNextStep: '다음 블록 선택',
     selectNextStep: '다음 블록 선택',
     runThisStep: '이 단계 실행',
     runThisStep: '이 단계 실행',
     checklist: '체크리스트',
     checklist: '체크리스트',
@@ -165,15 +165,15 @@ const translation = {
       insertVarTip: '변수 삽입',
       insertVarTip: '변수 삽입',
       memory: {
       memory: {
         memory: '메모리',
         memory: '메모리',
-        memoryTip: '채팅 메모리 설정',
+        memoryTip: '대화 메모리 설정',
-        windowSize: '윈도우 크기',
+        windowSize: ' 크기',
         conversationRoleName: '대화 역할 이름',
         conversationRoleName: '대화 역할 이름',
         user: '사용자 접두사',
         user: '사용자 접두사',
         assistant: '어시스턴트 접두사',
         assistant: '어시스턴트 접두사',
       },
       },
       memories: {
       memories: {
         title: '메모리',
         title: '메모리',
-        tip: '채팅 메모리',
+        tip: '대화 메모리',
         builtIn: '내장',
         builtIn: '내장',
       },
       },
     },
     },
@@ -190,7 +190,7 @@ const translation = {
         },
         },
         files: '파일 목록',
         files: '파일 목록',
       },
       },
-      noVarTip: '워크플로우에서 사용할 수 있는 입력을 설정합니다',
+      noVarTip: '워크플로우에서 사용할 입력을 설정하세요',
     },
     },
     end: {
     end: {
       outputs: '출력',
       outputs: '출력',
@@ -200,8 +200,8 @@ const translation = {
       },
       },
       type: {
       type: {
         'none': '없음',
         'none': '없음',
-        'plain-text': '평문',
+        'plain-text': '일반 텍스트',
-        'structured': '구조화',
+        'structured': '구조화',
       },
       },
     },
     },
     answer: {
     answer: {
@@ -216,9 +216,9 @@ const translation = {
       notSetContextInPromptTip: '컨텍스트 기능을 활성화하려면 PROMPT에 컨텍스트 변수를 입력하세요.',
       notSetContextInPromptTip: '컨텍스트 기능을 활성화하려면 PROMPT에 컨텍스트 변수를 입력하세요.',
       prompt: '프롬프트',
       prompt: '프롬프트',
       roleDescription: {
       roleDescription: {
-        system: '대화의 고수준 명령을 제공합니다',
+        system: '대화를 위한 고급 지침 제공',
-        user: '모델에 대한 지시, 쿼리 또는 텍스트 기반 입력을 제공합니다',
+        user: '모델에 지침, 질문 또는 텍스트 기반 입력 제공',
-        assistant: '사용자 메시지를 기반으로 모델의 응답을 생성합니다',
+        assistant: '사용자 메시지에 기반한 모델의 응답',
       },
       },
       addMessage: '메시지 추가',
       addMessage: '메시지 추가',
       vision: '비전',
       vision: '비전',
@@ -229,47 +229,47 @@ const translation = {
         low: '낮음',
         low: '낮음',
       },
       },
       outputVars: {
       outputVars: {
-        output: '컨텐츠 생성',
+        output: '생성된 내용',
         usage: '모델 사용 정보',
         usage: '모델 사용 정보',
       },
       },
       singleRun: {
       singleRun: {
         variable: '변수',
         variable: '변수',
       },
       },
-      sysQueryInUser: '사용자 메시지에 sys.query가 요구됩니다.',
+      sysQueryInUser: '사용자 메시지에 sys.query가 필요합니다',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
       queryVariable: '쿼리 변수',
       queryVariable: '쿼리 변수',
       knowledge: '지식',
       knowledge: '지식',
       outputVars: {
       outputVars: {
-        output: '검색된 세그먼트화된 데이터',
+        output: '복구된 세그먼트 데이터',
-        content: '세그먼트화된 콘텐츠',
+        content: '세그먼트 내용',
-        title: '세그먼트화된 제목',
+        title: '세그먼트 제목',
-        icon: '세그먼트화된 아이콘',
+        icon: '세그먼트 아이콘',
-        url: '세그먼트화된 URL',
+        url: '세그먼트 URL',
         metadata: '기타 메타데이터',
         metadata: '기타 메타데이터',
       },
       },
     },
     },
     http: {
     http: {
       inputVars: '입력 변수',
       inputVars: '입력 변수',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'URL 입력, \'/\'을 입력하여 변수 삽입',
+      apiPlaceholder: 'URL을 입력하세요, 변수를 삽입하려면 ‘/’를 입력하세요',
       notStartWithHttp: 'API는 http:// 또는 https://로 시작해야 합니다',
       notStartWithHttp: 'API는 http:// 또는 https://로 시작해야 합니다',
       key: '키',
       key: '키',
       value: '값',
       value: '값',
-      bulkEdit: '일괄 수정',
+      bulkEdit: '일괄 편집',
-      keyValueEdit: '키-값 수정',
+      keyValueEdit: '키-값 편집',
       headers: '헤더',
       headers: '헤더',
-      params: '파라미터',
+      params: '매개변수',
-      body: '바디',
+      body: '본문',
       outputVars: {
       outputVars: {
-        body: '응답 콘텐츠',
+        body: '응답 내용',
         statusCode: '응답 상태 코드',
         statusCode: '응답 상태 코드',
         headers: '응답 헤더 목록 JSON',
         headers: '응답 헤더 목록 JSON',
         files: '파일 목록',
         files: '파일 목록',
       },
       },
       authorization: {
       authorization: {
-        'authorization': '인증',
+        'authorization': '권한 부여',
-        'authorizationType': '인증 유형',
+        'authorizationType': '권한 부여 유형',
         'no-auth': '없음',
         'no-auth': '없음',
         'api-key': 'API 키',
         'api-key': 'API 키',
         'auth-type': '인증 유형',
         'auth-type': '인증 유형',
@@ -279,60 +279,60 @@ const translation = {
         'api-key-title': 'API 키',
         'api-key-title': 'API 키',
         'header': '헤더',
         'header': '헤더',
       },
       },
-      insertVarPlaceholder: '변수 삽입을 위해 \'/\'를 입력하세요',
+      insertVarPlaceholder: '변수를 삽입하려면 \'/\'를 입력하세요',
       timeout: {
       timeout: {
-        title: '타임아웃',
+        title: '시간 초과',
-        connectLabel: '연결 타임아웃',
+        connectLabel: '연결 시간 초과',
-        connectPlaceholder: '연결 타임아웃을 초 단위로 입력하세요',
+        connectPlaceholder: '초 단위로 연결 시간 초과 입력',
-        readLabel: '읽기 타임아웃',
+        readLabel: '읽기 시간 초과',
-        readPlaceholder: '읽기 타임아웃을 초 단위로 입력하세요',
+        readPlaceholder: '초 단위로 읽기 시간 초과 입력',
-        writeLabel: '쓰기 타임아웃',
+        writeLabel: '쓰기 시간 초과',
-        writePlaceholder: '쓰기 타임아웃을 초 단위로 입력하세요',
+        writePlaceholder: '초 단위로 쓰기 시간 초과 입력',
       },
       },
     },
     },
     code: {
     code: {
       inputVars: '입력 변수',
       inputVars: '입력 변수',
       outputVars: '출력 변수',
       outputVars: '출력 변수',
       advancedDependencies: '고급 종속성',
       advancedDependencies: '고급 종속성',
-      advancedDependenciesTip: '소비하는 데 시간이 더 걸리거나 기본 내장되지 않은 일부 사전 로드된 종속성을 추가하십시오',
+      advancedDependenciesTip: '더 많은 시간이 소요되거나 기본으로 내장되지 않은 일부 미리 로드된 종속성을 여기에 추가하세요',
       searchDependencies: '종속성 검색',
       searchDependencies: '종속성 검색',
     },
     },
     templateTransform: {
     templateTransform: {
       inputVars: '입력 변수',
       inputVars: '입력 변수',
       code: '코드',
       code: '코드',
-      codeSupportTip: 'Jinja2만 지원니다',
+      codeSupportTip: 'Jinja2만 지원니다',
       outputVars: {
       outputVars: {
-        output: '변환된 콘텐츠',
+        output: '변환된 내용',
       },
       },
     },
     },
     ifElse: {
     ifElse: {
-      if: '만약',
+      if: 'If',
-      else: '그렇지 않으면',
+      else: 'Else',
-      elseDescription: 'IF 조건이 충족되지 않을 경우 실행할 로직을 정의합니다.',
+      elseDescription: 'If 조건이 충족되지 않을 때 실행할 논리를 정의하는 데 사용됩니다.',
       and: '그리고',
       and: '그리고',
       or: '또는',
       or: '또는',
       operator: '연산자',
       operator: '연산자',
       notSetVariable: '먼저 변수를 설정하세요',
       notSetVariable: '먼저 변수를 설정하세요',
       comparisonOperator: {
       comparisonOperator: {
         'contains': '포함',
         'contains': '포함',
-        'not contains': '포함',
+        'not contains': '포함하지 않음',
-        'start with': '시작하는',
+        'start with': '시작',
-        'end with': '끝나는',
+        'end with': '끝',
-        'is': '일치',
+        'is': '이다',
-        'is not': '불일치',
+        'is not': '아니다',
-        'empty': '빈 값',
+        'empty': '비어 있음',
-        'not empty': '빈 값이 아님',
+        'not empty': '비어 있지 않음',
-        'null': 'null',
+        'null': 'null',
         'not null': 'null이 아님',
         'not null': 'null이 아님',
       },
       },
-      enterValue: '값 입력하세요',
+      enterValue: '값 입력',
       addCondition: '조건 추가',
       addCondition: '조건 추가',
-      conditionNotSetup: '조건이 설정되지 않았습니다',
+      conditionNotSetup: '조건이 설정되지 않',
     },
     },
     variableAssigner: {
     variableAssigner: {
       title: '변수 할당',
       title: '변수 할당',
       outputType: '출력 유형',
       outputType: '출력 유형',
-      varNotSet: '변수가 설정되지 않았습니다',
+      varNotSet: '변수가 설정되지 않',
       noVarTip: '할당할 변수를 추가하세요',
       noVarTip: '할당할 변수를 추가하세요',
       type: {
       type: {
         string: '문자열',
         string: '문자열',
@@ -340,25 +340,25 @@ const translation = {
         object: '객체',
         object: '객체',
         array: '배열',
         array: '배열',
       },
       },
-      aggregationGroup: '집 그룹',
+      aggregationGroup: '집 그룹',
-      aggregationGroupTip: '이 기능을 사용하면 변수 집합기가 변수의 다중 세트를 집합하도록 합니다.',
+      aggregationGroupTip: '이 기능을 활성화하면 변수 집계자가 여러 변수 집합을 집계할 수 있습니다.',
       addGroup: '그룹 추가',
       addGroup: '그룹 추가',
       outputVars: {
       outputVars: {
-        output: '할당된 변수의 값',
+        varDescribe: '{{groupName}} 출력',
       },
       },
       setAssignVariable: '할당 변수 설정',
       setAssignVariable: '할당 변수 설정',
     },
     },
     tool: {
     tool: {
-      toAuthorize: '승인하려면',
+      toAuthorize: '승인하',
       inputVars: '입력 변수',
       inputVars: '입력 변수',
       outputVars: {
       outputVars: {
-        text: '툴이 생성한 콘텐츠',
+        text: '도구가 생성한 내용',
         files: {
         files: {
-          title: '툴이 생성한 파일',
+          title: '도구가 생성한 파일',
-          type: '지원 유형: 현재 이미지만 지원됩니다',
+          type: '지원 유형. 현재는 이미지만 지원합니다',
-          transfer_method: '전송 방법: remote_url 또는 local_file 값',
+          transfer_method: '전송 방법. 값은 remote_url 또는 local_file',
           url: '이미지 URL',
           url: '이미지 URL',
-          upload_file_id: '업로드 파일 ID',
+          upload_file_id: '업로드 파일 ID',
         },
         },
       },
       },
     },
     },
@@ -369,41 +369,42 @@ const translation = {
         className: '클래스 이름',
         className: '클래스 이름',
       },
       },
       class: '클래스',
       class: '클래스',
-      classNamePlaceholder: '클래스 이름을 입력하세요',
+      classNamePlaceholder: '클래스 이름을 작성하세요',
       advancedSetting: '고급 설정',
       advancedSetting: '고급 설정',
-      topicName: '주제',
+      topicName: '주제 이름',
-      topicPlaceholder: '주제명을 입력하세요',
+      topicPlaceholder: '주제 이름을 작성하세요',
       addClass: '클래스 추가',
       addClass: '클래스 추가',
       instruction: '지시',
       instruction: '지시',
-      instructionPlaceholder: '지시를 입력하세요',
+      instructionTip: '질문 분류기가 질문을 더 잘 분류할 수 있도록 추가 지시를 입력하세요.',
+      instructionPlaceholder: '지시를 작성하세요',
     },
     },
     parameterExtractor: {
     parameterExtractor: {
       inputVar: '입력 변수',
       inputVar: '입력 변수',
-      extractParameters: '추출 파라미터',
+      extractParameters: '매개변수 추출',
       importFromTool: '도구에서 가져오기',
       importFromTool: '도구에서 가져오기',
-      addExtractParameter: '추출 파라미터 추가',
+      addExtractParameter: '추출 매개변수 추가',
       addExtractParameterContent: {
       addExtractParameterContent: {
         name: '이름',
         name: '이름',
-        namePlaceholder: '추출 파라미터 이름',
+        namePlaceholder: '추출 매개변수 이름',
-        type: '타입',
+        type: '유형',
-        typePlaceholder: '추출 파라미터 타입',
+        typePlaceholder: '추출 매개변수 유형',
         description: '설명',
         description: '설명',
-        descriptionPlaceholder: '추출 파라미터 설명',
+        descriptionPlaceholder: '추출 매개변수 설명',
-        required: '필요 항목',
+        required: '필',
-        requiredContent: '필요항목은 파라미터 출력의 확인을 위한 것이 아닌, 모델 추론의 참고용으로 사용됩니다.',
+        requiredContent: '필수는 모델 추론을 위한 참고 용도로만 사용되며, 매개변수 출력의 필수 유효성 검사는 아닙니다.',
       },
       },
-      extractParametersNotSet: '추출 파라미터가 설정되지 않았습니다.',
+      extractParametersNotSet: '추출 매개변수가 설정되지 않음',
-      instruction: '지시',
+      instruction: '지시',
-      instructionTip: '어떻게 파라미터를 추출할 것인지에 도움을 주기 위해, 추가적인 지시어를 입력하세요.',
+      instructionTip: '매개변수 추출기가 매개변수를 추출하는 방법을 이해하는 데 도움이 되는 추가 지시를 입력하세요.',
       advancedSetting: '고급 설정',
       advancedSetting: '고급 설정',
-      reasoningMode: '추 모드',
+      reasoningMode: '추 모드',
-      reasoningModeTip: '모델의 함수 호출이나 프롬프트를 위한 지시어에 응답하는 능력에 따라 추리모드를 선택할 수 있습니다.',
+      reasoningModeTip: '모델의 함수 호출 또는 프롬프트에 대한 지시 응답 능력을 기반으로 적절한 추론 모드를 선택할 수 있습니다.',
-      isSuccess: '성공할 경우 값은 1, 실패할 경우 값은 0',
+      isSuccess: '성공 여부. 성공 시 값은 1이고, 실패 시 값은 0입니다.',
-      errorReason: '추리 오류',
+      errorReason: '오류 원인',
     },
     },
     iteration: {
     iteration: {
       deleteTitle: '반복 노드를 삭제하시겠습니까?',
       deleteTitle: '반복 노드를 삭제하시겠습니까?',
-      deleteDesc: '반복 노드를 제거할 경우, 하위 노드도 모두 제거됩니다.',
+      deleteDesc: '반복 노드를 삭제하면 모든 하위 노드가 삭제됩니다',
       input: '입력',
       input: '입력',
       output: '출력 변수',
       output: '출력 변수',
       iteration_one: '{{count}} 반복',
       iteration_one: '{{count}} 반복',

+ 207 - 151
web/i18n/pl-PL/workflow.ts

@@ -1,33 +1,33 @@
 const translation = {
 const translation = {
   common: {
   common: {
     editing: 'Edytowanie',
     editing: 'Edytowanie',
-    autoSaved: 'Autozapisano',
+    autoSaved: 'Automatycznie zapisane',
-    unpublished: 'Nieopublikowany',
+    unpublished: 'Nieopublikowane',
-    published: 'Opublikowany',
+    published: 'Opublikowane',
     publish: 'Opublikuj',
     publish: 'Opublikuj',
     update: 'Aktualizuj',
     update: 'Aktualizuj',
     run: 'Uruchom',
     run: 'Uruchom',
     running: 'Uruchamianie',
     running: 'Uruchamianie',
-    inRunMode: 'W trybie Uruchom',
+    inRunMode: 'W trybie uruchamiania',
-    inPreview: 'Podgląd',
+    inPreview: 'W podglądzie',
-    inPreviewMode: 'W trybie Podgląd',
+    inPreviewMode: 'W trybie podglądu',
     preview: 'Podgląd',
     preview: 'Podgląd',
     viewRunHistory: 'Zobacz historię uruchomień',
     viewRunHistory: 'Zobacz historię uruchomień',
-    runHistory: 'Historia Uruchomień',
+    runHistory: 'Historia uruchomień',
     goBackToEdit: 'Wróć do edytora',
     goBackToEdit: 'Wróć do edytora',
-    conversationLog: 'Dziennik Konwersacji',
+    conversationLog: 'Dziennik rozmów',
     features: 'Funkcje',
     features: 'Funkcje',
-    debugAndPreview: 'Debugowanie i Podgląd',
+    debugAndPreview: 'Debugowanie i podgląd',
-    restart: 'Uruchom Ponownie',
+    restart: 'Uruchom ponownie',
-    currentDraft: 'Aktualny Szkic',
+    currentDraft: 'Bieżący szkic',
-    currentDraftUnpublished: 'Aktualny Szkic Nieopublikowany',
+    currentDraftUnpublished: 'Bieżący szkic nieopublikowany',
-    latestPublished: 'Ostatnio Opublikowany',
+    latestPublished: 'Najnowsze opublikowane',
-    publishedAt: 'Opublikowany',
+    publishedAt: 'Opublikowane',
     restore: 'Przywróć',
     restore: 'Przywróć',
-    runApp: 'Uruchom Aplikację',
+    runApp: 'Uruchom aplikację',
-    batchRunApp: 'Uruchom Aplikację Partiami',
+    batchRunApp: 'Uruchom aplikację wsadowo',
-    accessAPIReference: 'Dostęp do Referencji API',
+    accessAPIReference: 'Uzyskaj dostęp do dokumentacji API',
-    embedIntoSite: 'Osadź na Stronie',
+    embedIntoSite: 'Osadź na stronie',
     addTitle: 'Dodaj tytuł...',
     addTitle: 'Dodaj tytuł...',
     addDescription: 'Dodaj opis...',
     addDescription: 'Dodaj opis...',
     noVar: 'Brak zmiennej',
     noVar: 'Brak zmiennej',
@@ -36,133 +36,153 @@ const translation = {
     setVarValuePlaceholder: 'Ustaw zmienną',
     setVarValuePlaceholder: 'Ustaw zmienną',
     needConnecttip: 'Ten krok nie jest połączony z niczym',
     needConnecttip: 'Ten krok nie jest połączony z niczym',
     maxTreeDepth: 'Maksymalny limit {{depth}} węzłów na gałąź',
     maxTreeDepth: 'Maksymalny limit {{depth}} węzłów na gałąź',
-    needEndNode: 'Należy dodać Blok Końcowy',
+    needEndNode: 'Należy dodać blok końcowy',
-    needAnswerNode: 'Należy dodać Blok Odpowiedzi',
+    needAnswerNode: 'Należy dodać blok odpowiedzi',
-    workflowProcess: 'Proces Przepływu',
+    workflowProcess: 'Proces przepływu pracy',
-    notRunning: 'Nie uruchamiany jeszcze',
+    notRunning: 'Jeszcze nie uruchomiono',
     previewPlaceholder: 'Wprowadź treść w poniższym polu, aby rozpocząć debugowanie Chatbota',
     previewPlaceholder: 'Wprowadź treść w poniższym polu, aby rozpocząć debugowanie Chatbota',
     effectVarConfirm: {
     effectVarConfirm: {
-      title: 'Usuń Zmienną',
+      title: 'Usuń zmienną',
-      content: 'Zmienna jest używana w innych węzłach. Czy nadal chcesz ją usunąć?',
+      content: 'Zmienna jest używana w innych węzłach. Czy na pewno chcesz ją usunąć?',
     },
     },
-    insertVarTip: 'Naciśnij klawisz \'/\' aby szybko wstawić',
+    insertVarTip: 'Naciśnij klawisz \'/\', aby szybko wstawić',
-    processData: 'Przetwarzaj Dane',
+    processData: 'Przetwórz dane',
     input: 'Wejście',
     input: 'Wejście',
     output: 'Wyjście',
     output: 'Wyjście',
-    jinjaEditorPlaceholder: 'Wprowadź \'/\' lub \'{\' aby wstawić zmienną',
+    jinjaEditorPlaceholder: 'Naciśnij \'/\' lub \'{\', aby wstawić zmienną',
-    viewOnly: 'Tylko Podgląd',
+    viewOnly: 'Tylko do podglądu',
-    showRunHistory: 'Pokaż Historię Uruchomień',
+    showRunHistory: 'Pokaż historię uruchomień',
-    enableJinja: 'Włącz wsparcie dla szablonów Jinja',
+    enableJinja: 'Włącz obsługę szablonów Jinja',
-    learnMore: 'Czytaj więcej',
+    learnMore: 'Dowiedz się więcej',
     copy: 'Kopiuj',
     copy: 'Kopiuj',
     duplicate: 'Duplikuj',
     duplicate: 'Duplikuj',
-    addBlock: 'Dodaj Blok',
+    addBlock: 'Dodaj blok',
-    pasteHere: 'Wklej Tutaj',
+    pasteHere: 'Wklej tutaj',
-    pointerMode: 'Tryb Wskaźnika',
+    pointerMode: 'Tryb wskaźnika',
-    handMode: 'Tryb Ręczny',
+    handMode: 'Tryb ręczny',
+    model: 'Model',
+    workflowAsTool: 'Przepływ pracy jako narzędzie',
+    configureRequired: 'Wymagana konfiguracja',
+    configure: 'Skonfiguruj',
+    manageInTools: 'Zarządzaj w narzędziach',
+    workflowAsToolTip: 'Wymagana rekonfiguracja narzędzia po aktualizacji przepływu pracy.',
+    viewDetailInTracingPanel: 'Zobacz szczegóły',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} jest wymagane',
     fieldRequired: '{{field}} jest wymagane',
-    authRequired: 'Autoryzacja jest wymagana',
+    authRequired: 'Wymagana autoryzacja',
-    invalidJson: '{{field}} jest nieprawidłowy JSON',
+    invalidJson: '{{field}} jest nieprawidłowym JSON-em',
     fields: {
     fields: {
-      variable: 'Nazwa Zmiennej',
+      variable: 'Nazwa zmiennej',
-      variableValue: 'Wartość Zmiennej',
+      variableValue: 'Wartość zmiennej',
       code: 'Kod',
       code: 'Kod',
       model: 'Model',
       model: 'Model',
-      rerankModel: 'Model Ponownej Klasyfikacji',
+      rerankModel: 'Model rerank',
     },
     },
     invalidVariable: 'Nieprawidłowa zmienna',
     invalidVariable: 'Nieprawidłowa zmienna',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: 'Testuj Uruchomienie ',
+    testRun: 'Testowe uruchomienie ',
-    startRun: 'Uruchomienie',
+    startRun: 'Rozpocznij uruchomienie',
     running: 'Uruchamianie',
     running: 'Uruchamianie',
+    testRunIteration: 'Iteracja testowego uruchomienia',
+    back: 'Wstecz',
+    iteration: 'Iteracja',
   },
   },
   tabs: {
   tabs: {
-    'searchBlock': 'Szukaj Bloku',
+    'searchBlock': 'Szukaj bloku',
     'blocks': 'Bloki',
     'blocks': 'Bloki',
-    'builtInTool': 'Wbudowany Narzędzie',
+    'tools': 'Narzędzia',
-    'customTool': 'Niestandardowe Narzędzie',
+    'allTool': 'Wszystkie',
-    'question-understand': 'Zrozumienie Pytania',
+    'builtInTool': 'Wbudowane',
+    'customTool': 'Niestandardowe',
+    'workflowTool': 'Przepływ pracy',
+    'question-understand': 'Zrozumienie pytania',
     'logic': 'Logika',
     'logic': 'Logika',
     'transform': 'Transformacja',
     'transform': 'Transformacja',
-    'utilities': 'Użyteczność',
+    'utilities': 'Narzędzia pomocnicze',
-    'noResult': 'Brak pasujących wyników',
+    'noResult': 'Nie znaleziono dopasowań',
   },
   },
   blocks: {
   blocks: {
     'start': 'Start',
     'start': 'Start',
     'end': 'Koniec',
     'end': 'Koniec',
     'answer': 'Odpowiedź',
     'answer': 'Odpowiedź',
     'llm': 'LLM',
     'llm': 'LLM',
-    'knowledge-retrieval': 'Odzyskiwanie Wiedzy',
+    'knowledge-retrieval': 'Wyszukiwanie wiedzy',
-    'question-classifier': 'Klasyfikator Pytań',
+    'question-classifier': 'Klasyfikator pytań',
-    'if-else': 'IF/ELSE',
+    'if-else': 'JEŚLI/W PRZECIWNYM WYPADKU',
     'code': 'Kod',
     'code': 'Kod',
     'template-transform': 'Szablon',
     'template-transform': 'Szablon',
     'http-request': 'Żądanie HTTP',
     'http-request': 'Żądanie HTTP',
-    'variable-assigner': 'Przypisywacz Zmiennych',
+    'variable-assigner': 'Agregator zmiennych',
+    'variable-aggregator': 'Agregator zmiennych',
+    'iteration-start': 'Początek iteracji',
+    'iteration': 'Iteracja',
+    'parameter-extractor': 'Ekstraktor parametrów',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': 'Definiuje początkowe parametry uruchamiania przepływu',
+    'start': 'Zdefiniuj początkowe parametry uruchamiania przepływu pracy',
-    'end': 'Definiuje koniec i typ wyniku przepływu',
+    'end': 'Zdefiniuj zakończenie i typ wyniku przepływu pracy',
-    'answer': 'Definiuje treść odpowiedzi w rozmowie czatowej',
+    'answer': 'Zdefiniuj treść odpowiedzi w rozmowie',
-    'llm': 'Wywołuje duże modele językowe do odpowiedzi na pytania lub przetwarzania języka naturalnego',
+    'llm': 'Wywołaj duże modele językowe do odpowiadania na pytania lub przetwarzania języka naturalnego',
-    'knowledge-retrieval': 'Pozwala na wyszukiwanie treści tekstowych związanych z pytaniami użytkowników z Wiedzy',
+    'knowledge-retrieval': 'Pozwala na wyszukiwanie treści tekstowych związanych z pytaniami użytkowników z bazy wiedzy',
-    'question-classifier': 'Definiuje warunki klasyfikacji pytań użytkowników, LLM może określić, jak postępuje rozmowa na podstawie opisu klasyfikacji',
+    'question-classifier': 'Zdefiniuj warunki klasyfikacji pytań użytkowników, LLM może definiować, jak rozmowa postępuje na podstawie opisu klasyfikacji',
-    'if-else': 'Pozwala na podział przepływu na dwie gałęzie na podstawie warunków if/else',
+    'if-else': 'Pozwala na podział przepływu pracy na dwie gałęzie na podstawie warunków if/else',
-    'code': 'Wykonuje fragment kodu Pythona lub NodeJS w celu zastosowania niestandardowej logiki',
+    'code': 'Wykonaj fragment kodu Python lub NodeJS, aby wdrożyć niestandardową logikę',
-    'template-transform': 'Konwertuje dane na ciąg za pomocą składni szablonu Jinja',
+    'template-transform': 'Konwertuj dane na ciąg znaków przy użyciu składni szablonu Jinja',
-    'http-request': 'Pozwala na wysyłanie żądań serwera za pośrednictwem protokołu HTTP',
+    'http-request': 'Pozwala na wysyłanie żądań serwera za pomocą protokołu HTTP',
-    'variable-assigner': 'Przypisuje zmienne w różnych gałęziach do tej samej zmiennej w celu uzyskania zharmonizowanej konfiguracji post-węzłów',
+    'variable-assigner': 'Zbierz zmienne z wielu gałęzi do jednej zmiennej dla jednolitej konfiguracji węzłów końcowych.',
+    'variable-aggregator': 'Zbierz zmienne z wielu gałęzi do jednej zmiennej dla jednolitej konfiguracji węzłów końcowych.',
+    'iteration': 'Wykonuj wielokrotne kroki na liście obiektów, aż wszystkie wyniki zostaną wypisane.',
+    'parameter-extractor': 'Użyj LLM do wyodrębnienia strukturalnych parametrów z języka naturalnego do wywołań narzędzi lub żądań HTTP.',
   },
   },
   operator: {
   operator: {
     zoomIn: 'Powiększ',
     zoomIn: 'Powiększ',
     zoomOut: 'Pomniejsz',
     zoomOut: 'Pomniejsz',
     zoomTo50: 'Powiększ do 50%',
     zoomTo50: 'Powiększ do 50%',
     zoomTo100: 'Powiększ do 100%',
     zoomTo100: 'Powiększ do 100%',
-    zoomToFit: 'Dopasuj do rozmiaru',
+    zoomToFit: 'Dopasuj do ekranu',
   },
   },
   panel: {
   panel: {
-    userInputField: 'Pole Wejściowe Użytkownika',
+    userInputField: 'Pole wprowadzania użytkownika',
-    changeBlock: 'Zmień Blok',
+    changeBlock: 'Zmień blok',
-    helpLink: 'Link Pomocniczy',
+    helpLink: 'Link do pomocy',
-    about: 'O Autorze',
+    about: 'O',
-    createdBy: 'Utworzone przez',
+    createdBy: 'Stworzone przez ',
-    nextStep: 'Następny Krok',
+    nextStep: 'Następny krok',
-    addNextStep: 'Dodaj następny blok w tym przepływie',
+    addNextStep: 'Dodaj następny blok w tym przepływie pracy',
-    selectNextStep: 'Wybierz Następny Blok',
+    selectNextStep: 'Wybierz następny blok',
     runThisStep: 'Uruchom ten krok',
     runThisStep: 'Uruchom ten krok',
     checklist: 'Lista kontrolna',
     checklist: 'Lista kontrolna',
-    checklistTip: 'Upewnij się, że wszystkie problemy  rozwiązane przed opublikowaniem',
+    checklistTip: 'Upewnij się, że wszystkie problemy zostały rozwiązane przed opublikowaniem',
     checklistResolved: 'Wszystkie problemy zostały rozwiązane',
     checklistResolved: 'Wszystkie problemy zostały rozwiązane',
     organizeBlocks: 'Organizuj bloki',
     organizeBlocks: 'Organizuj bloki',
     change: 'Zmień',
     change: 'Zmień',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
-      outputVars: 'Zmienne Wyjściowe',
+      outputVars: 'Zmienne wyjściowe',
-      insertVarTip: 'Wstaw Zmienną',
+      insertVarTip: 'Wstaw zmienną',
       memory: {
       memory: {
         memory: 'Pamięć',
         memory: 'Pamięć',
-        memoryTip: 'Ustawienia pamięci czatu',
+        memoryTip: 'Ustawienia pamięci rozmowy',
-        windowSize: 'Rozmiar Okna',
+        windowSize: 'Rozmiar okna',
-        conversationRoleName: 'Nazwa Roli Konwersacji',
+        conversationRoleName: 'Nazwa roli w rozmowie',
         user: 'Prefiks użytkownika',
         user: 'Prefiks użytkownika',
         assistant: 'Prefiks asystenta',
         assistant: 'Prefiks asystenta',
       },
       },
       memories: {
       memories: {
-        title: 'Wspomnienia',
+        title: 'Pamięci',
-        tip: 'Pamięć czatu',
+        tip: 'Pamięć rozmowy',
         builtIn: 'Wbudowane',
         builtIn: 'Wbudowane',
       },
       },
     },
     },
     start: {
     start: {
       required: 'wymagane',
       required: 'wymagane',
-      inputField: 'Pole Wejściowe',
+      inputField: 'Pole wejściowe',
-      builtInVar: 'Zmienne Wbudowane',
+      builtInVar: 'Wbudowane zmienne',
       outputVars: {
       outputVars: {
-        query: 'Wejście użytkownika',
+        query: 'Wprowadzenie użytkownika',
         memories: {
         memories: {
           des: 'Historia rozmowy',
           des: 'Historia rozmowy',
           type: 'typ wiadomości',
           type: 'typ wiadomości',
@@ -170,37 +190,37 @@ const translation = {
         },
         },
         files: 'Lista plików',
         files: 'Lista plików',
       },
       },
-      noVarTip: 'Ustaw wejścia, które można użyć w Przepływie',
+      noVarTip: 'Ustaw wejścia, które mogą być używane w przepływie pracy',
     },
     },
     end: {
     end: {
-      outputs: 'Wyjścia',
+      outputs: 'Wyniki',
       output: {
       output: {
-        type: 'typ wyjścia',
+        type: 'typ wyniku',
-        variable: 'zmienna wyjścia',
+        variable: 'zmienna wyjściowa',
       },
       },
       type: {
       type: {
         'none': 'Brak',
         'none': 'Brak',
-        'plain-text': 'Tekst Prosty',
+        'plain-text': 'Zwykły tekst',
-        'structured': 'Strukturyzowany',
+        'structured': 'Strukturalny',
       },
       },
     },
     },
     answer: {
     answer: {
       answer: 'Odpowiedź',
       answer: 'Odpowiedź',
-      outputVars: 'Zmienne Wyjściowe',
+      outputVars: 'Zmienne wyjściowe',
     },
     },
     llm: {
     llm: {
       model: 'model',
       model: 'model',
       variables: 'zmienne',
       variables: 'zmienne',
       context: 'kontekst',
       context: 'kontekst',
-      contextTooltip: 'Możesz zaimportować Wiedzę jako kontekst',
+      contextTooltip: 'Możesz zaimportować wiedzę jako kontekst',
-      notSetContextInPromptTip: 'Aby włączyć funkcję kontekstu, proszę wypełnić zmienną kontekstu w PROMPT.',
+      notSetContextInPromptTip: 'Aby włączyć funkcję kontekstu, wypełnij zmienną kontekstu w PROMPT.',
       prompt: 'prompt',
       prompt: 'prompt',
       roleDescription: {
       roleDescription: {
-        system: 'Daj instrukcje na wysokim poziomie dla rozmowy',
+        system: 'Podaj wysokopoziomowe instrukcje dla rozmowy',
-        user: 'Dostarcz instrukcje, zapytania lub jakiekolwiek wejście oparte na tekście do modelu',
+        user: 'Podaj instrukcje, zapytania lub dowolne tekstowe wejście dla modelu',
-        assistant: 'Odpowiedzi modelu na wiadomości użytkownika',
+        assistant: 'Odpowiedzi modelu oparte na wiadomościach użytkownika',
       },
       },
-      addMessage: 'Dodaj Wiadomość',
+      addMessage: 'Dodaj wiadomość',
       vision: 'wizja',
       vision: 'wizja',
       files: 'Pliki',
       files: 'Pliki',
       resolution: {
       resolution: {
@@ -209,7 +229,7 @@ const translation = {
         low: 'Niska',
         low: 'Niska',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Generuj zawartość',
+        output: 'Generowana treść',
         usage: 'Informacje o użyciu modelu',
         usage: 'Informacje o użyciu modelu',
       },
       },
       singleRun: {
       singleRun: {
@@ -218,78 +238,77 @@ const translation = {
       sysQueryInUser: 'sys.query w wiadomości użytkownika jest wymagane',
       sysQueryInUser: 'sys.query w wiadomości użytkownika jest wymagane',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
-      queryVariable: 'Zmienna Zapytania',
+      queryVariable: 'Zmienna zapytania',
       knowledge: 'Wiedza',
       knowledge: 'Wiedza',
       outputVars: {
       outputVars: {
-        output: 'Odzyskane dane podzielone',
+        output: 'Odzyskane dane segmentowane',
-        content: 'Zawartość podzielona',
+        content: 'Treść segmentowana',
-        title: 'Tytuł podzielony',
+        title: 'Tytuł segmentowany',
-        icon: 'Ikona podzielona',
+        icon: 'Ikona segmentowana',
-        url: 'URL podzielony',
+        url: 'URL segmentowany',
         metadata: 'Inne metadane',
         metadata: 'Inne metadane',
       },
       },
     },
     },
     http: {
     http: {
-      inputVars: 'Zmienne Wejściowe',
+      inputVars: 'Zmienne wejściowe',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Wprowadź URL, wpisz \'/\' aby wstawić zmienną',
+      apiPlaceholder: 'Wpisz URL, wpisz ‘/’, aby wstawić zmienną',
-      notStartWithHttp: 'API powinno rozpoczynać się od http:// lub https://',
+      notStartWithHttp: 'API powinno zaczynać się od http:// lub https://',
       key: 'Klucz',
       key: 'Klucz',
       value: 'Wartość',
       value: 'Wartość',
-      bulkEdit: 'Edycja Masowa',
+      bulkEdit: 'Edycja zbiorcza',
-      keyValueEdit: 'Edycja Klucz-Wartość',
+      keyValueEdit: 'Edycja klucz-wartość',
       headers: 'Nagłówki',
       headers: 'Nagłówki',
       params: 'Parametry',
       params: 'Parametry',
       body: 'Treść',
       body: 'Treść',
       outputVars: {
       outputVars: {
-        body: 'Zawartość Odpowiedzi',
+        body: 'Treść odpowiedzi',
-        statusCode: 'Kod Stanu Odpowiedzi',
+        statusCode: 'Kod statusu odpowiedzi',
-        headers: 'Lista Nagłówków Odpowiedzi w formacie JSON',
+        headers: 'Lista nagłówków odpowiedzi w formacie JSON',
         files: 'Lista plików',
         files: 'Lista plików',
       },
       },
       authorization: {
       authorization: {
         'authorization': 'Autoryzacja',
         'authorization': 'Autoryzacja',
-        'authorizationType': 'Typ Autoryzacji',
+        'authorizationType': 'Typ autoryzacji',
         'no-auth': 'Brak',
         'no-auth': 'Brak',
         'api-key': 'Klucz API',
         'api-key': 'Klucz API',
-        'auth-type': 'Typ Autoryzacji',
+        'auth-type': 'Typ autoryzacji',
         'basic': 'Podstawowa',
         'basic': 'Podstawowa',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
         'custom': 'Niestandardowa',
         'custom': 'Niestandardowa',
         'api-key-title': 'Klucz API',
         'api-key-title': 'Klucz API',
         'header': 'Nagłówek',
         'header': 'Nagłówek',
       },
       },
-      insertVarPlaceholder: 'wpisz \'/\' aby wstawić zmienną',
+      insertVarPlaceholder: 'wpisz \'/\', aby wstawić zmienną',
       timeout: {
       timeout: {
         title: 'Limit czasu',
         title: 'Limit czasu',
         connectLabel: 'Limit czasu połączenia',
         connectLabel: 'Limit czasu połączenia',
-        connectPlaceholder: 'Wprowadź limit czasu połączenia w sekundach',
+        connectPlaceholder: 'Wpisz limit czasu połączenia w sekundach',
         readLabel: 'Limit czasu odczytu',
         readLabel: 'Limit czasu odczytu',
-        readPlaceholder: 'Wprowadź limit czasu odczytu w sekundach',
+        readPlaceholder: 'Wpisz limit czasu odczytu w sekundach',
         writeLabel: 'Limit czasu zapisu',
         writeLabel: 'Limit czasu zapisu',
-        writePlaceholder: 'Wprowadź limit czasu zapisu w sekundach',
+        writePlaceholder: 'Wpisz limit czasu zapisu w sekundach',
       },
       },
     },
     },
     code: {
     code: {
-      inputVars: 'Zmienne Wejściowe',
+      inputVars: 'Zmienne wejściowe',
-      outputVars: 'Zmienne Wyjściowe',
+      outputVars: 'Zmienne wyjściowe',
-      advancedDependencies: 'Zaawansowane Zależności',
+      advancedDependencies: 'Zaawansowane zależności',
-      advancedDependenciesTip: 'Dodaj tutaj niektóre wstępnie załadowane zależności, które wymagają więcej czasu na załadowanie lub nie są domyślnie wbudowane',
+      advancedDependenciesTip: 'Dodaj niektóre preładowane zależności, które zajmują więcej czasu lub nie są domyślnie wbudowane',
-      searchDependencies: 'Wyszukaj Zależności',
+      searchDependencies: 'Wyszukaj zależności',
-
     },
     },
     templateTransform: {
     templateTransform: {
-      inputVars: 'Zmienne Wejściowe',
+      inputVars: 'Zmienne wejściowe',
       code: 'Kod',
       code: 'Kod',
       codeSupportTip: 'Obsługuje tylko Jinja2',
       codeSupportTip: 'Obsługuje tylko Jinja2',
       outputVars: {
       outputVars: {
-        output: 'Przekształcona zawartość',
+        output: 'Przekształcona treść',
       },
       },
     },
     },
     ifElse: {
     ifElse: {
       if: 'Jeśli',
       if: 'Jeśli',
       else: 'W przeciwnym razie',
       else: 'W przeciwnym razie',
-      elseDescription: 'Służy do zdefiniowania logiki, która powinna być wykonana, gdy warunek if nie jest spełniony.',
+      elseDescription: 'Używane do określenia logiki, która powinna być wykonana, gdy warunek if nie jest spełniony.',
       and: 'i',
       and: 'i',
       or: 'lub',
       or: 'lub',
       operator: 'Operator',
       operator: 'Operator',
@@ -303,61 +322,98 @@ const translation = {
         'is not': 'nie jest',
         'is not': 'nie jest',
         'empty': 'jest pusty',
         'empty': 'jest pusty',
         'not empty': 'nie jest pusty',
         'not empty': 'nie jest pusty',
-        'null': 'jest pusty',
+        'null': 'jest null',
-        'not null': 'nie jest pusty',
+        'not null': 'nie jest null',
       },
       },
-      enterValue: 'Wprowadź wartość',
+      enterValue: 'Wpisz wartość',
-      addCondition: 'Dodaj Warunek',
+      addCondition: 'Dodaj warunek',
-      conditionNotSetup: 'Warunek NIE jest ustawiony',
+      conditionNotSetup: 'Warunek NIE został ustawiony',
     },
     },
     variableAssigner: {
     variableAssigner: {
       title: 'Przypisz zmienne',
       title: 'Przypisz zmienne',
-      outputType: 'Typ Wyjścia',
+      outputType: 'Typ wyjścia',
-      outputVarType: 'Typ Zmiennej Wyjściowej',
+      varNotSet: 'Zmienna nie została ustawiona',
-      varNotSet: 'Zmienna nieustawiona',
       noVarTip: 'Dodaj zmienne do przypisania',
       noVarTip: 'Dodaj zmienne do przypisania',
       type: {
       type: {
-        string: 'Tekst',
+        string: 'Ciąg znaków',
         number: 'Liczba',
         number: 'Liczba',
         object: 'Obiekt',
         object: 'Obiekt',
         array: 'Tablica',
         array: 'Tablica',
       },
       },
+      aggregationGroup: 'Grupa agregacji',
+      aggregationGroupTip: 'Włączenie tej funkcji pozwala na agregowanie wielu zestawów zmiennych przez agregator zmiennych.',
+      addGroup: 'Dodaj grupę',
       outputVars: {
       outputVars: {
-        output: 'Wartość zmiennej przypisanej',
+        varDescribe: 'Wyjście {{groupName}}',
       },
       },
+      setAssignVariable: 'Ustaw przypisanie zmiennej',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Aby autoryzować',
+      toAuthorize: 'Do autoryzacji',
-      inputVars: 'Zmienne Wejściowe',
+      inputVars: 'Zmienne wejściowe',
       outputVars: {
       outputVars: {
-        text: 'wygenerowana zawartość narzędzia',
+        text: 'treść generowana przez narzędzie',
         files: {
         files: {
-          title: 'wygenerowane pliki narzędzia',
+          title: 'pliki generowane przez narzędzie',
-          type: 'Typ wsparcia. Obecnie obsługuje tylko obraz',
+          type: 'Typ wsparcia. Obecnie tylko obsługuje obraz',
           transfer_method: 'Metoda transferu. Wartość to remote_url lub local_file',
           transfer_method: 'Metoda transferu. Wartość to remote_url lub local_file',
           url: 'URL obrazu',
           url: 'URL obrazu',
-          upload_file_id: 'Identyfikator przesyłanego pliku',
+          upload_file_id: 'ID przesłanego pliku',
         },
         },
       },
       },
     },
     },
     questionClassifiers: {
     questionClassifiers: {
       model: 'model',
       model: 'model',
-      inputVars: 'Zmienne Wejściowe',
+      inputVars: 'Zmienne wejściowe',
       outputVars: {
       outputVars: {
-        className: 'Nazwa Klasy',
+        className: 'Nazwa klasy',
       },
       },
       class: 'Klasa',
       class: 'Klasa',
-      classNamePlaceholder: 'Wpisz nazwę swojej klasy',
+      classNamePlaceholder: 'Napisz nazwę swojej klasy',
-      advancedSetting: 'Ustawienia Zaawansowane',
+      advancedSetting: 'Zaawansowane ustawienia',
-      topicName: 'Nazwa Tematu',
+      topicName: 'Nazwa tematu',
-      topicPlaceholder: 'Wpisz nazwę swojego tematu',
+      topicPlaceholder: 'Napisz nazwę swojego tematu',
-      addClass: 'Dodaj Klasę',
+      addClass: 'Dodaj klasę',
       instruction: 'Instrukcja',
       instruction: 'Instrukcja',
-      instructionPlaceholder: 'Wpisz swoją instrukcję',
+      instructionTip: 'Wprowadź dodatkowe instrukcje, aby pomóc klasyfikatorowi pytań lepiej zrozumieć, jak kategoryzować pytania.',
+      instructionPlaceholder: 'Napisz swoją instrukcję',
+    },
+    parameterExtractor: {
+      inputVar: 'Zmienna wejściowa',
+      extractParameters: 'Wyodrębnij parametry',
+      importFromTool: 'Importuj z narzędzi',
+      addExtractParameter: 'Dodaj parametr wyodrębniania',
+      addExtractParameterContent: {
+        name: 'Nazwa',
+        namePlaceholder: 'Nazwa parametru wyodrębniania',
+        type: 'Typ',
+        typePlaceholder: 'Typ parametru wyodrębniania',
+        description: 'Opis',
+        descriptionPlaceholder: 'Opis parametru wyodrębniania',
+        required: 'Wymagane',
+        requiredContent: 'Wymagane jest tylko jako odniesienie do wnioskowania modelu, a nie do obowiązkowej walidacji wyjścia parametru.',
+      },
+      extractParametersNotSet: 'Parametry wyodrębniania nie zostały ustawione',
+      instruction: 'Instrukcja',
+      instructionTip: 'Wprowadź dodatkowe instrukcje, aby pomóc ekstraktorowi parametrów zrozumieć, jak wyodrębniać parametry.',
+      advancedSetting: 'Zaawansowane ustawienia',
+      reasoningMode: 'Tryb wnioskowania',
+      reasoningModeTip: 'Możesz wybrać odpowiedni tryb wnioskowania w zależności od zdolności modelu do reagowania na instrukcje dotyczące wywoływania funkcji lub zapytań.',
+      isSuccess: 'Czy się udało. W przypadku sukcesu wartość wynosi 1, w przypadku niepowodzenia wartość wynosi 0.',
+      errorReason: 'Powód błędu',
+    },
+    iteration: {
+      deleteTitle: 'Usunąć węzeł iteracji?',
+      deleteDesc: 'Usunięcie węzła iteracji usunie wszystkie węzły potomne',
+      input: 'Wejście',
+      output: 'Zmienne wyjściowe',
+      iteration_one: '{{count}} Iteracja',
+      iteration_other: '{{count}} Iteracje',
+      currentIteration: 'Bieżąca iteracja',
     },
     },
   },
   },
   tracing: {
   tracing: {
-    stopBy: 'Zatrzymano przez {{user}}',
+    stopBy: 'Zatrzymane przez {{user}}',
   },
   },
 }
 }
 
 

+ 150 - 93
web/i18n/pt-BR/workflow.ts

@@ -1,7 +1,7 @@
 const translation = {
 const translation = {
   common: {
   common: {
     editing: 'Editando',
     editing: 'Editando',
-    autoSaved: 'Auto-salvo',
+    autoSaved: 'Salvo automaticamente',
     unpublished: 'Não publicado',
     unpublished: 'Não publicado',
     published: 'Publicado',
     published: 'Publicado',
     publish: 'Publicar',
     publish: 'Publicar',
@@ -9,15 +9,15 @@ const translation = {
     run: 'Executar',
     run: 'Executar',
     running: 'Executando',
     running: 'Executando',
     inRunMode: 'No modo de execução',
     inRunMode: 'No modo de execução',
-    inPreview: 'Na prévia',
+    inPreview: 'Em visualização',
-    inPreviewMode: 'No modo de prévia',
+    inPreviewMode: 'No modo de visualização',
-    preview: 'Prévia',
+    preview: 'Visualizar',
     viewRunHistory: 'Ver histórico de execução',
     viewRunHistory: 'Ver histórico de execução',
     runHistory: 'Histórico de execução',
     runHistory: 'Histórico de execução',
-    goBackToEdit: 'Voltar para a edição',
+    goBackToEdit: 'Voltar para o editor',
     conversationLog: 'Registro de conversa',
     conversationLog: 'Registro de conversa',
     features: 'Recursos',
     features: 'Recursos',
-    debugAndPreview: 'Depurar e pré-visualizar',
+    debugAndPreview: 'Depurar e visualizar',
     restart: 'Reiniciar',
     restart: 'Reiniciar',
     currentDraft: 'Rascunho atual',
     currentDraft: 'Rascunho atual',
     currentDraftUnpublished: 'Rascunho atual não publicado',
     currentDraftUnpublished: 'Rascunho atual não publicado',
@@ -27,50 +27,57 @@ const translation = {
     runApp: 'Executar aplicativo',
     runApp: 'Executar aplicativo',
     batchRunApp: 'Executar aplicativo em lote',
     batchRunApp: 'Executar aplicativo em lote',
     accessAPIReference: 'Acessar referência da API',
     accessAPIReference: 'Acessar referência da API',
-    embedIntoSite: 'Incorporar no site',
+    embedIntoSite: 'Incorporar ao site',
     addTitle: 'Adicionar título...',
     addTitle: 'Adicionar título...',
     addDescription: 'Adicionar descrição...',
     addDescription: 'Adicionar descrição...',
     noVar: 'Sem variável',
     noVar: 'Sem variável',
     searchVar: 'Buscar variável',
     searchVar: 'Buscar variável',
     variableNamePlaceholder: 'Nome da variável',
     variableNamePlaceholder: 'Nome da variável',
-    setVarValuePlaceholder: 'Definir variável',
+    setVarValuePlaceholder: 'Definir valor da variável',
-    needConnecttip: 'Esta etapa não está conectada a nada',
+    needConnecttip: 'Este passo não está conectado a nada',
-    maxTreeDepth: 'Limite máximo de {{depth}} nós por ramificação',
+    maxTreeDepth: 'Limite máximo de {{depth}} nós por ramo',
     needEndNode: 'O bloco de fim deve ser adicionado',
     needEndNode: 'O bloco de fim deve ser adicionado',
     needAnswerNode: 'O bloco de resposta deve ser adicionado',
     needAnswerNode: 'O bloco de resposta deve ser adicionado',
     workflowProcess: 'Processo de fluxo de trabalho',
     workflowProcess: 'Processo de fluxo de trabalho',
-    notRunning: 'Ainda não em execução',
+    notRunning: 'Ainda não está em execução',
-    previewPlaceholder: 'Digite o conteúdo na caixa abaixo para iniciar a depuração do Chatbot',
+    previewPlaceholder: 'Digite o conteúdo na caixa abaixo para começar a depurar o Chatbot',
     effectVarConfirm: {
     effectVarConfirm: {
       title: 'Remover variável',
       title: 'Remover variável',
-      content: 'A variável está sendo usada em outros nós. Deseja removê-la mesmo assim?',
+      content: 'A variável é usada em outros nós. Você ainda deseja removê-la?',
     },
     },
     insertVarTip: 'Pressione a tecla \'/\' para inserir rapidamente',
     insertVarTip: 'Pressione a tecla \'/\' para inserir rapidamente',
     processData: 'Processar dados',
     processData: 'Processar dados',
     input: 'Entrada',
     input: 'Entrada',
     output: 'Saída',
     output: 'Saída',
     jinjaEditorPlaceholder: 'Digite \'/\' ou \'{\' para inserir variável',
     jinjaEditorPlaceholder: 'Digite \'/\' ou \'{\' para inserir variável',
-    viewOnly: 'Apenas Visualização',
+    viewOnly: 'Apenas visualização',
-    showRunHistory: 'Mostrar Histórico de Execuções',
+    showRunHistory: 'Mostrar histórico de execução',
-    enableJinja: 'Ativar suporte a templates Jinja',
+    enableJinja: 'Ativar suporte ao template Jinja',
-    learnMore: 'Saiba Mais',
+    learnMore: 'Saiba mais',
     copy: 'Copiar',
     copy: 'Copiar',
     duplicate: 'Duplicar',
     duplicate: 'Duplicar',
-    addBlock: 'Adicionar Bloco',
+    addBlock: 'Adicionar bloco',
-    pasteHere: 'Colar Aqui',
+    pasteHere: 'Colar aqui',
-    pointerMode: 'Modo Ponteiro',
+    pointerMode: 'Modo ponteiro',
-    handMode: 'Modo Manual',
+    handMode: 'Modo mão',
+    model: 'Modelo',
+    workflowAsTool: 'Fluxo de trabalho como ferramenta',
+    configureRequired: 'Configuração necessária',
+    configure: 'Configurar',
+    manageInTools: 'Gerenciar nas ferramentas',
+    workflowAsToolTip: 'É necessária a reconfiguração da ferramenta após a atualização do fluxo de trabalho.',
+    viewDetailInTracingPanel: 'Ver detalhes',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} é obrigatório',
     fieldRequired: '{{field}} é obrigatório',
     authRequired: 'Autorização é necessária',
     authRequired: 'Autorização é necessária',
-    invalidJson: '{{field}} é JSON inválido',
+    invalidJson: '{{field}} é um JSON inválido',
     fields: {
     fields: {
-      variable: 'Nome da Variável',
+      variable: 'Nome da variável',
-      variableValue: 'Valor da Variável',
+      variableValue: 'Valor da variável',
       code: 'Código',
       code: 'Código',
       model: 'Modelo',
       model: 'Modelo',
-      rerankModel: 'Modelo de Re-ordenação',
+      rerankModel: 'Modelo de reordenação',
     },
     },
     invalidVariable: 'Variável inválida',
     invalidVariable: 'Variável inválida',
   },
   },
@@ -78,50 +85,63 @@ const translation = {
     testRun: 'Execução de teste ',
     testRun: 'Execução de teste ',
     startRun: 'Iniciar execução',
     startRun: 'Iniciar execução',
     running: 'Executando',
     running: 'Executando',
+    testRunIteration: 'Iteração de execução de teste',
+    back: 'Voltar',
+    iteration: 'Iteração',
   },
   },
   tabs: {
   tabs: {
     'searchBlock': 'Buscar bloco',
     'searchBlock': 'Buscar bloco',
     'blocks': 'Blocos',
     'blocks': 'Blocos',
-    'builtInTool': 'Ferramenta incorporada',
+    'tools': 'Ferramentas',
-    'customTool': 'Ferramenta personalizada',
+    'allTool': 'Todos',
-    'question-understand': 'Entendimento da pergunta',
+    'builtInTool': 'Integrado',
+    'customTool': 'Personalizado',
+    'workflowTool': 'Fluxo de trabalho',
+    'question-understand': 'Compreensão de perguntas',
     'logic': 'Lógica',
     'logic': 'Lógica',
     'transform': 'Transformar',
     'transform': 'Transformar',
     'utilities': 'Utilitários',
     'utilities': 'Utilitários',
     'noResult': 'Nenhum resultado encontrado',
     'noResult': 'Nenhum resultado encontrado',
   },
   },
   blocks: {
   blocks: {
-    'start': 'Início',
+    'start': 'Iniciar',
     'end': 'Fim',
     'end': 'Fim',
     'answer': 'Resposta',
     'answer': 'Resposta',
     'llm': 'LLM',
     'llm': 'LLM',
     'knowledge-retrieval': 'Recuperação de conhecimento',
     'knowledge-retrieval': 'Recuperação de conhecimento',
     'question-classifier': 'Classificador de perguntas',
     'question-classifier': 'Classificador de perguntas',
-    'if-else': 'Se/Senão',
+    'if-else': 'SE/SENÃO',
     'code': 'Código',
     'code': 'Código',
     'template-transform': 'Modelo',
     'template-transform': 'Modelo',
     'http-request': 'Requisição HTTP',
     'http-request': 'Requisição HTTP',
     'variable-assigner': 'Atribuidor de variáveis',
     'variable-assigner': 'Atribuidor de variáveis',
+    'variable-aggregator': 'Agregador de variáveis',
+    'iteration-start': 'Início de iteração',
+    'iteration': 'Iteração',
+    'parameter-extractor': 'Extrator de parâmetros',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': 'Defina os parâmetros iniciais para iniciar um fluxo de trabalho',
+    'start': 'Definir os parâmetros iniciais para iniciar um fluxo de trabalho',
-    'end': 'Defina o final e o tipo de resultado de um fluxo de trabalho',
+    'end': 'Definir o fim e o tipo de resultado de um fluxo de trabalho',
-    'answer': 'Defina o conteúdo da resposta de uma conversa no chat',
+    'answer': 'Definir o conteúdo da resposta de uma conversa',
     'llm': 'Invocar grandes modelos de linguagem para responder perguntas ou processar linguagem natural',
     'llm': 'Invocar grandes modelos de linguagem para responder perguntas ou processar linguagem natural',
-    'knowledge-retrieval': 'Permite consultar conteúdo de texto relacionado a perguntas de usuário do conhecimento',
+    'knowledge-retrieval': 'Permite consultar conteúdo de texto relacionado a perguntas do usuário a partir da base de conhecimento',
-    'question-classifier': 'Define as condições de classificação de perguntas do usuário, LLM pode definir como a conversa progride com base na descrição da classificação',
+    'question-classifier': 'Definir as condições de classificação das perguntas dos usuários, LLM pode definir como a conversa progride com base na descrição da classificação',
-    'if-else': 'Permite dividir o fluxo de trabalho em dois ramos com base em condições if/else',
+    'if-else': 'Permite dividir o fluxo de trabalho em dois ramos com base nas condições if/else',
-    'code': 'Execute um trecho de código Python ou NodeJS para implementar lógica personalizada',
+    'code': 'Executar um pedaço de código Python ou NodeJS para implementar lógica personalizada',
-    'template-transform': 'Converta dados em string usando a sintaxe do modelo Jinja',
+    'template-transform': 'Converter dados em string usando a sintaxe de template Jinja',
-    'http-request': 'Permite enviar solicitações de servidor sobre o protocolo HTTP',
+    'http-request': 'Permitir que solicitações de servidor sejam enviadas pelo protocolo HTTP',
-    'variable-assigner': 'Atribua variáveis em diferentes ramos à mesma variável para alcançar uma configuração unificada de pós-nós',
+    'variable-assigner': 'Agregue variáveis de vários ramos em uma única variável para configuração unificada dos nós finais.',
+    'variable-aggregator': 'Agregue variáveis de vários ramos em uma única variável para configuração unificada dos nós finais.',
+    'iteration': 'Execute múltiplos passos em um objeto lista até que todos os resultados sejam produzidos.',
+    'parameter-extractor': 'Use LLM para extrair parâmetros estruturados da linguagem natural para invocações de ferramentas ou requisições HTTP.',
   },
   },
   operator: {
   operator: {
-    zoomIn: 'Aumentar zoom',
+    zoomIn: 'Aproximar',
-    zoomOut: 'Diminuir zoom',
+    zoomOut: 'Afastar',
-    zoomTo50: 'Zoom para 50%',
+    zoomTo50: 'Aproximar para 50%',
-    zoomTo100: 'Zoom para 100%',
+    zoomTo100: 'Aproximar para 100%',
-    zoomToFit: 'Zoom para ajustar',
+    zoomToFit: 'Aproximar para ajustar',
   },
   },
   panel: {
   panel: {
     userInputField: 'Campo de entrada do usuário',
     userInputField: 'Campo de entrada do usuário',
@@ -134,18 +154,18 @@ const translation = {
     selectNextStep: 'Selecionar próximo bloco',
     selectNextStep: 'Selecionar próximo bloco',
     runThisStep: 'Executar este passo',
     runThisStep: 'Executar este passo',
     checklist: 'Lista de verificação',
     checklist: 'Lista de verificação',
-    checklistTip: 'Certifique-se de resolver todos os problemas antes de publicar',
+    checklistTip: 'Certifique-se de que todos os problemas foram resolvidos antes de publicar',
-    checklistResolved: 'Todos os problemas estão resolvidos',
+    checklistResolved: 'Todos os problemas foram resolvidos',
     organizeBlocks: 'Organizar blocos',
     organizeBlocks: 'Organizar blocos',
     change: 'Mudar',
     change: 'Mudar',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
       outputVars: 'Variáveis de saída',
       outputVars: 'Variáveis de saída',
-      insertVarTip: 'Pressione a tecla \'/\' para inserir',
+      insertVarTip: 'Inserir variável',
       memory: {
       memory: {
         memory: 'Memória',
         memory: 'Memória',
-        memoryTip: 'Configurações de memória do chat',
+        memoryTip: 'Configurações de memória de conversa',
         windowSize: 'Tamanho da janela',
         windowSize: 'Tamanho da janela',
         conversationRoleName: 'Nome do papel na conversa',
         conversationRoleName: 'Nome do papel na conversa',
         user: 'Prefixo do usuário',
         user: 'Prefixo do usuário',
@@ -153,30 +173,30 @@ const translation = {
       },
       },
       memories: {
       memories: {
         title: 'Memórias',
         title: 'Memórias',
-        tip: 'Memória do chat',
+        tip: 'Memória de conversa',
-        builtIn: 'Incorporada',
+        builtIn: 'Integrado',
       },
       },
     },
     },
     start: {
     start: {
-      required: 'obrigatório',
+      required: 'requerido',
       inputField: 'Campo de entrada',
       inputField: 'Campo de entrada',
-      builtInVar: 'Variáveis incorporadas',
+      builtInVar: 'Variáveis integradas',
       outputVars: {
       outputVars: {
         query: 'Entrada do usuário',
         query: 'Entrada do usuário',
         memories: {
         memories: {
           des: 'Histórico da conversa',
           des: 'Histórico da conversa',
-          type: 'Tipo de mensagem',
+          type: 'tipo de mensagem',
-          content: 'Conteúdo da mensagem',
+          content: 'conteúdo da mensagem',
         },
         },
         files: 'Lista de arquivos',
         files: 'Lista de arquivos',
       },
       },
-      noVarTip: 'Defina as entradas que podem ser usadas no fluxo de trabalho',
+      noVarTip: 'Defina as entradas que podem ser usadas no Fluxo de Trabalho',
     },
     },
     end: {
     end: {
       outputs: 'Saídas',
       outputs: 'Saídas',
       output: {
       output: {
-        type: 'Tipo de saída',
+        type: 'tipo de saída',
-        variable: 'Variável de saída',
+        variable: 'variável de saída',
       },
       },
       type: {
       type: {
         'none': 'Nenhum',
         'none': 'Nenhum',
@@ -192,13 +212,13 @@ const translation = {
       model: 'modelo',
       model: 'modelo',
       variables: 'variáveis',
       variables: 'variáveis',
       context: 'contexto',
       context: 'contexto',
-      contextTooltip: 'Você pode importar conhecimento como contexto',
+      contextTooltip: 'Você pode importar Conhecimento como contexto',
-      notSetContextInPromptTip: 'Para habilitar o recurso de contexto, preencha a variável de contexto em PROMPT.',
+      notSetContextInPromptTip: 'Para ativar o recurso de contexto, preencha a variável de contexto no PROMPT.',
       prompt: 'prompt',
       prompt: 'prompt',
       roleDescription: {
       roleDescription: {
         system: 'Dar instruções de alto nível para a conversa',
         system: 'Dar instruções de alto nível para a conversa',
         user: 'Fornecer instruções, consultas ou qualquer entrada baseada em texto para o modelo',
         user: 'Fornecer instruções, consultas ou qualquer entrada baseada em texto para o modelo',
-        assistant: 'Respostas do modelo com base nas mensagens do usuário',
+        assistant: 'As respostas do modelo baseadas nas mensagens do usuário',
       },
       },
       addMessage: 'Adicionar mensagem',
       addMessage: 'Adicionar mensagem',
       vision: 'visão',
       vision: 'visão',
@@ -209,73 +229,73 @@ const translation = {
         low: 'Baixa',
         low: 'Baixa',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Gerar conteúdo',
+        output: 'Conteúdo gerado',
         usage: 'Informações de uso do modelo',
         usage: 'Informações de uso do modelo',
       },
       },
       singleRun: {
       singleRun: {
         variable: 'Variável',
         variable: 'Variável',
       },
       },
-      sysQueryInUser: 'sys.query em user é inválido',
+      sysQueryInUser: 'sys.query na mensagem do usuário é necessário',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
       queryVariable: 'Variável de consulta',
       queryVariable: 'Variável de consulta',
       knowledge: 'Conhecimento',
       knowledge: 'Conhecimento',
       outputVars: {
       outputVars: {
-        output: 'Dados segmentados de recuperação',
+        output: 'Dados segmentados recuperados',
         content: 'Conteúdo segmentado',
         content: 'Conteúdo segmentado',
         title: 'Título segmentado',
         title: 'Título segmentado',
         icon: 'Ícone segmentado',
         icon: 'Ícone segmentado',
-        url: 'URL segmentada',
+        url: 'URL segmentado',
         metadata: 'Outros metadados',
         metadata: 'Outros metadados',
       },
       },
     },
     },
     http: {
     http: {
       inputVars: 'Variáveis de entrada',
       inputVars: 'Variáveis de entrada',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Insira o URL, digite \'/\' para inserir a variável',
+      apiPlaceholder: 'Digite a URL, digite ‘/’ para inserir variável',
-      notStartWithHttp: 'A API deve começar com http:// ou https://',
+      notStartWithHttp: 'API deve começar com http:// ou https://',
       key: 'Chave',
       key: 'Chave',
       value: 'Valor',
       value: 'Valor',
-      bulkEdit: 'Editar em massa',
+      bulkEdit: 'Edição em massa',
-      keyValueEdit: 'Edição de chave-valor',
+      keyValueEdit: 'Edição chave-valor',
       headers: 'Cabeçalhos',
       headers: 'Cabeçalhos',
       params: 'Parâmetros',
       params: 'Parâmetros',
       body: 'Corpo',
       body: 'Corpo',
       outputVars: {
       outputVars: {
         body: 'Conteúdo da resposta',
         body: 'Conteúdo da resposta',
         statusCode: 'Código de status da resposta',
         statusCode: 'Código de status da resposta',
-        headers: 'Lista de cabeçalhos de resposta JSON',
+        headers: 'Lista de cabeçalhos da resposta em JSON',
         files: 'Lista de arquivos',
         files: 'Lista de arquivos',
       },
       },
       authorization: {
       authorization: {
         'authorization': 'Autorização',
         'authorization': 'Autorização',
         'authorizationType': 'Tipo de autorização',
         'authorizationType': 'Tipo de autorização',
-        'no-auth': 'Nenhum',
+        'no-auth': 'Nenhuma',
-        'api-key': 'Chave da API',
+        'api-key': 'Chave API',
-        'auth-type': 'Tipo de autenticação',
+        'auth-type': 'Tipo de autorização',
         'basic': 'Básica',
         'basic': 'Básica',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
         'custom': 'Personalizada',
         'custom': 'Personalizada',
-        'api-key-title': 'Chave da API',
+        'api-key-title': 'Chave API',
         'header': 'Cabeçalho',
         'header': 'Cabeçalho',
       },
       },
       insertVarPlaceholder: 'digite \'/\' para inserir variável',
       insertVarPlaceholder: 'digite \'/\' para inserir variável',
       timeout: {
       timeout: {
-        title: 'Tempo esgotado',
+        title: 'Timeout',
-        connectLabel: 'Tempo de conexão',
+        connectLabel: 'Timeout de conexão',
-        connectPlaceholder: 'Insira o tempo de conexão em segundos',
+        connectPlaceholder: 'Digite o timeout de conexão em segundos',
-        readLabel: 'Tempo de leitura',
+        readLabel: 'Timeout de leitura',
-        readPlaceholder: 'Insira o tempo de leitura em segundos',
+        readPlaceholder: 'Digite o timeout de leitura em segundos',
-        writeLabel: 'Tempo de escrita',
+        writeLabel: 'Timeout de escrita',
-        writePlaceholder: 'Insira o tempo de escrita em segundos',
+        writePlaceholder: 'Digite o timeout de escrita em segundos',
       },
       },
     },
     },
     code: {
     code: {
       inputVars: 'Variáveis de entrada',
       inputVars: 'Variáveis de entrada',
       outputVars: 'Variáveis de saída',
       outputVars: 'Variáveis de saída',
-      advancedDependencies: 'Dependências Avançadas',
+      advancedDependencies: 'Dependências avançadas',
-      advancedDependenciesTip: 'Adicione algumas dependências pré-carregadas que demoram mais para serem consumidas ou que não são padrão aqui',
+      advancedDependenciesTip: 'Adicione algumas dependências pré-carregadas que levam mais tempo para consumir ou não são padrão aqui',
-      searchDependencies: 'Pesquisar Dependências',
+      searchDependencies: 'Buscar dependências',
     },
     },
     templateTransform: {
     templateTransform: {
       inputVars: 'Variáveis de entrada',
       inputVars: 'Variáveis de entrada',
@@ -300,9 +320,9 @@ const translation = {
         'end with': 'termina com',
         'end with': 'termina com',
         'is': 'é',
         'is': 'é',
         'is not': 'não é',
         'is not': 'não é',
-        'empty': 'vazio',
+        'empty': 'está vazio',
         'not empty': 'não está vazio',
         'not empty': 'não está vazio',
-        'null': 'nulo',
+        'null': 'é nulo',
         'not null': 'não é nulo',
         'not null': 'não é nulo',
       },
       },
       enterValue: 'Digite o valor',
       enterValue: 'Digite o valor',
@@ -312,7 +332,6 @@ const translation = {
     variableAssigner: {
     variableAssigner: {
       title: 'Atribuir variáveis',
       title: 'Atribuir variáveis',
       outputType: 'Tipo de saída',
       outputType: 'Tipo de saída',
-      outputVarType: 'Tipo de variável de saída',
       varNotSet: 'Variável não definida',
       varNotSet: 'Variável não definida',
       noVarTip: 'Adicione as variáveis a serem atribuídas',
       noVarTip: 'Adicione as variáveis a serem atribuídas',
       type: {
       type: {
@@ -321,21 +340,25 @@ const translation = {
         object: 'Objeto',
         object: 'Objeto',
         array: 'Array',
         array: 'Array',
       },
       },
+      aggregationGroup: 'Grupo de agregação',
+      aggregationGroupTip: 'Habilitar este recurso permite que o agregador de variáveis agregue múltiplos conjuntos de variáveis.',
+      addGroup: 'Adicionar grupo',
       outputVars: {
       outputVars: {
-        output: 'Valor da variável atribuída',
+        varDescribe: 'Saída de {{groupName}}',
       },
       },
+      setAssignVariable: 'Definir variável atribuída',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Para autorizar',
+      toAuthorize: 'Autorizar',
       inputVars: 'Variáveis de entrada',
       inputVars: 'Variáveis de entrada',
       outputVars: {
       outputVars: {
         text: 'conteúdo gerado pela ferramenta',
         text: 'conteúdo gerado pela ferramenta',
         files: {
         files: {
           title: 'arquivos gerados pela ferramenta',
           title: 'arquivos gerados pela ferramenta',
-          type: 'Tipo de suporte. Agora apenas suporte a imagem',
+          type: 'Tipo de suporte. Agora suporta apenas imagem',
           transfer_method: 'Método de transferência. O valor é remote_url ou local_file',
           transfer_method: 'Método de transferência. O valor é remote_url ou local_file',
           url: 'URL da imagem',
           url: 'URL da imagem',
-          upload_file_id: 'ID de upload do arquivo',
+          upload_file_id: 'ID do arquivo enviado',
         },
         },
       },
       },
     },
     },
@@ -346,14 +369,48 @@ const translation = {
         className: 'Nome da classe',
         className: 'Nome da classe',
       },
       },
       class: 'Classe',
       class: 'Classe',
-      classNamePlaceholder: 'Escreva o nome da classe',
+      classNamePlaceholder: 'Escreva o nome da sua classe',
       advancedSetting: 'Configuração avançada',
       advancedSetting: 'Configuração avançada',
       topicName: 'Nome do tópico',
       topicName: 'Nome do tópico',
-      topicPlaceholder: 'Escreva o nome do tópico',
+      topicPlaceholder: 'Escreva o nome do seu tópico',
       addClass: 'Adicionar classe',
       addClass: 'Adicionar classe',
       instruction: 'Instrução',
       instruction: 'Instrução',
+      instructionTip: 'Insira instruções adicionais para ajudar o classificador de perguntas a entender melhor como categorizar perguntas.',
       instructionPlaceholder: 'Escreva sua instrução',
       instructionPlaceholder: 'Escreva sua instrução',
     },
     },
+    parameterExtractor: {
+      inputVar: 'Variável de entrada',
+      extractParameters: 'Extrair parâmetros',
+      importFromTool: 'Importar das ferramentas',
+      addExtractParameter: 'Adicionar parâmetro de extração',
+      addExtractParameterContent: {
+        name: 'Nome',
+        namePlaceholder: 'Nome do parâmetro de extração',
+        type: 'Tipo',
+        typePlaceholder: 'Tipo de parâmetro de extração',
+        description: 'Descrição',
+        descriptionPlaceholder: 'Descrição do parâmetro de extração',
+        required: 'Obrigatório',
+        requiredContent: 'Obrigatório é usado apenas como referência para inferência do modelo, e não para validação obrigatória da saída do parâmetro.',
+      },
+      extractParametersNotSet: 'Parâmetros de extração não configurados',
+      instruction: 'Instrução',
+      instructionTip: 'Insira instruções adicionais para ajudar o extrator de parâmetros a entender como extrair parâmetros.',
+      advancedSetting: 'Configuração avançada',
+      reasoningMode: 'Modo de raciocínio',
+      reasoningModeTip: 'Você pode escolher o modo de raciocínio apropriado com base na capacidade do modelo de responder a instruções para chamadas de função ou prompts.',
+      isSuccess: 'É sucesso. Em caso de sucesso, o valor é 1, em caso de falha, o valor é 0.',
+      errorReason: 'Motivo do erro',
+    },
+    iteration: {
+      deleteTitle: 'Excluir nó de iteração?',
+      deleteDesc: 'Excluir o nó de iteração excluirá todos os nós filhos',
+      input: 'Entrada',
+      output: 'Variáveis de saída',
+      iteration_one: '{{count}} Iteração',
+      iteration_other: '{{count}} Iterações',
+      currentIteration: 'Iteração atual',
+    },
   },
   },
   tracing: {
   tracing: {
     stopBy: 'Parado por {{user}}',
     stopBy: 'Parado por {{user}}',

+ 181 - 124
web/i18n/ro-RO/workflow.ts

@@ -7,166 +7,186 @@ const translation = {
     publish: 'Publică',
     publish: 'Publică',
     update: 'Actualizează',
     update: 'Actualizează',
     run: 'Rulează',
     run: 'Rulează',
-    running: 'În desfășurare',
+    running: 'Rulând',
     inRunMode: 'În modul de rulare',
     inRunMode: 'În modul de rulare',
     inPreview: 'În previzualizare',
     inPreview: 'În previzualizare',
     inPreviewMode: 'În modul de previzualizare',
     inPreviewMode: 'În modul de previzualizare',
-    preview: 'Previzualizare',
+    preview: 'Previzualizează',
-    viewRunHistory: 'Vezi istoricul de rulare',
+    viewRunHistory: 'Vezi istoricul rulărilor',
-    runHistory: 'Istoric de rulare',
+    runHistory: 'Istoric rulări',
     goBackToEdit: 'Înapoi la editor',
     goBackToEdit: 'Înapoi la editor',
-    conversationLog: 'Jurnal de conversație',
+    conversationLog: 'Jurnal conversație',
-    features: 'Caracteristici',
+    features: 'Funcționalități',
     debugAndPreview: 'Depanare și previzualizare',
     debugAndPreview: 'Depanare și previzualizare',
     restart: 'Repornește',
     restart: 'Repornește',
-    currentDraft: 'Schița curentă',
+    currentDraft: 'Schimbare curentă',
-    currentDraftUnpublished: 'Schița curentă nepublicată',
+    currentDraftUnpublished: 'Schimbare curentă nepublicată',
-    latestPublished: 'Cel mai recent publicat',
+    latestPublished: 'Ultima publicare',
     publishedAt: 'Publicat la',
     publishedAt: 'Publicat la',
     restore: 'Restaurează',
     restore: 'Restaurează',
     runApp: 'Rulează aplicația',
     runApp: 'Rulează aplicația',
     batchRunApp: 'Rulează aplicația în lot',
     batchRunApp: 'Rulează aplicația în lot',
     accessAPIReference: 'Accesează referința API',
     accessAPIReference: 'Accesează referința API',
-    embedIntoSite: 'Încorporează în site',
+    embedIntoSite: 'Incorporează în site',
     addTitle: 'Adaugă titlu...',
     addTitle: 'Adaugă titlu...',
     addDescription: 'Adaugă descriere...',
     addDescription: 'Adaugă descriere...',
-    noVar: 'Nicio variabilă',
+    noVar: 'Fără variabilă',
     searchVar: 'Caută variabilă',
     searchVar: 'Caută variabilă',
-    variableNamePlaceholder: 'Numele variabilei',
+    variableNamePlaceholder: 'Nume variabilă',
-    setVarValuePlaceholder: 'Setează variabila',
+    setVarValuePlaceholder: 'Setează valoarea variabilei',
-    needConnecttip: 'Această etapă nu este conectată la nimic',
+    needConnecttip: 'Acest pas nu este conectat la nimic',
     maxTreeDepth: 'Limită maximă de {{depth}} noduri pe ramură',
     maxTreeDepth: 'Limită maximă de {{depth}} noduri pe ramură',
-    needEndNode: 'Blocul de Sfârșit trebuie adăugat',
+    needEndNode: 'Trebuie adăugat blocul de sfârșit',
-    needAnswerNode: 'Blocul de Răspuns trebuie adăugat',
+    needAnswerNode: 'Trebuie adăugat blocul de răspuns',
     workflowProcess: 'Proces de flux de lucru',
     workflowProcess: 'Proces de flux de lucru',
     notRunning: 'Încă nu rulează',
     notRunning: 'Încă nu rulează',
-    previewPlaceholder: 'Introduceți conținutul în caseta de mai jos pentru a începe depanarea Chatbot-ului',
+    previewPlaceholder: 'Introduceți conținutul în caseta de mai jos pentru a începe depanarea Chatbotului',
     effectVarConfirm: {
     effectVarConfirm: {
       title: 'Elimină variabila',
       title: 'Elimină variabila',
-      content: 'Variabila este utilizată în alte noduri. Doriți totuși să o eliminați?',
+      content: 'Variabila este utilizată în alte noduri. Doriți să o eliminați oricum?',
     },
     },
     insertVarTip: 'Apăsați tasta \'/\' pentru a insera rapid',
     insertVarTip: 'Apăsați tasta \'/\' pentru a insera rapid',
-    processData: 'Procesează datele',
+    processData: 'Procesează date',
     input: 'Intrare',
     input: 'Intrare',
     output: 'Ieșire',
     output: 'Ieșire',
     jinjaEditorPlaceholder: 'Tastați \'/\' sau \'{\' pentru a insera variabila',
     jinjaEditorPlaceholder: 'Tastați \'/\' sau \'{\' pentru a insera variabila',
-    viewOnly: 'Doar vizualizare',
+    viewOnly: 'Vizualizare doar',
-    showRunHistory: 'Afișează istoricul de rulare',
+    showRunHistory: 'Afișează istoricul rulărilor',
     enableJinja: 'Activează suportul pentru șabloane Jinja',
     enableJinja: 'Activează suportul pentru șabloane Jinja',
     learnMore: 'Află mai multe',
     learnMore: 'Află mai multe',
     copy: 'Copiază',
     copy: 'Copiază',
     duplicate: 'Duplică',
     duplicate: 'Duplică',
-    addBlock: 'Adaugă Bloc',
+    addBlock: 'Adaugă bloc',
-    pasteHere: 'Lipește Aici',
+    pasteHere: 'Lipește aici',
-    pointerMode: 'Mod Indicator',
+    pointerMode: 'Modul pointer',
-    handMode: 'Mod Manual',
+    handMode: 'Modul mână',
+    model: 'Model',
+    workflowAsTool: 'Flux de lucru ca instrument',
+    configureRequired: 'Configurare necesară',
+    configure: 'Configurează',
+    manageInTools: 'Gestionează în instrumente',
+    workflowAsToolTip: 'Reconfigurarea instrumentului este necesară după actualizarea fluxului de lucru.',
+    viewDetailInTracingPanel: 'Vezi detalii',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} este obligatoriu',
     fieldRequired: '{{field}} este obligatoriu',
-    authRequired: 'Este necesară autorizarea',
+    authRequired: 'Autorizarea este necesară',
-    invalidJson: '{{field}} nu este un JSON valid',
+    invalidJson: '{{field}} este un JSON invalid',
     fields: {
     fields: {
-      variable: 'Numele variabilei',
+      variable: 'Nume variabilă',
-      variableValue: 'Valoarea variabilei',
+      variableValue: 'Valoare variabilă',
       code: 'Cod',
       code: 'Cod',
       model: 'Model',
       model: 'Model',
-      rerankModel: 'Model de reevaluare',
+      rerankModel: 'Model de rerankare',
     },
     },
     invalidVariable: 'Variabilă invalidă',
     invalidVariable: 'Variabilă invalidă',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: 'Rulare de test',
+    testRun: 'Rulare de test ',
     startRun: 'Începe rularea',
     startRun: 'Începe rularea',
-    running: 'În desfășurare',
+    running: 'Rulând',
+    testRunIteration: 'Iterație rulare de test',
+    back: 'Înapoi',
+    iteration: 'Iterație',
   },
   },
   tabs: {
   tabs: {
-    'searchBlock': 'Căutare bloc',
+    'searchBlock': 'Caută bloc',
     'blocks': 'Blocuri',
     'blocks': 'Blocuri',
-    'builtInTool': 'Instrument încorporat',
+    'tools': 'Instrumente',
-    'customTool': 'Instrument personalizat',
+    'allTool': 'Toate',
-    'question-understand': 'Înțelegerea întrebării',
+    'builtInTool': 'Integrat',
+    'customTool': 'Personalizat',
+    'workflowTool': 'Flux de lucru',
+    'question-understand': 'Înțelegerea întrebărilor',
     'logic': 'Logică',
     'logic': 'Logică',
     'transform': 'Transformare',
     'transform': 'Transformare',
     'utilities': 'Utilități',
     'utilities': 'Utilități',
-    'noResult': 'Nicio potrivire găsită',
+    'noResult': 'Niciun rezultat găsit',
   },
   },
   blocks: {
   blocks: {
-    'start': 'Început',
+    'start': 'Începe',
     'end': 'Sfârșit',
     'end': 'Sfârșit',
     'answer': 'Răspuns',
     'answer': 'Răspuns',
     'llm': 'LLM',
     'llm': 'LLM',
-    'knowledge-retrieval': 'Recuperare cunoștințe',
+    'knowledge-retrieval': 'Recuperare de cunoștințe',
     'question-classifier': 'Clasificator de întrebări',
     'question-classifier': 'Clasificator de întrebări',
-    'if-else': 'DACĂ/ALTĂFEL',
+    'if-else': 'Dacă/Altminteri',
     'code': 'Cod',
     'code': 'Cod',
     'template-transform': 'Șablon',
     'template-transform': 'Șablon',
     'http-request': 'Cerere HTTP',
     'http-request': 'Cerere HTTP',
-    'variable-assigner': 'Atribuire variabilă',
+    'variable-assigner': 'Asignator de variabile',
+    'variable-aggregator': 'Agregator de variabile',
+    'iteration-start': 'Început de iterație',
+    'iteration': 'Iterație',
+    'parameter-extractor': 'Extractor de parametri',
   },
   },
   blocksAbout: {
   blocksAbout: {
     'start': 'Definiți parametrii inițiali pentru lansarea unui flux de lucru',
     'start': 'Definiți parametrii inițiali pentru lansarea unui flux de lucru',
-    'end': 'Definiți sfârșitul și tipul de rezultat al unui flux de lucru',
+    'end': 'Definiți sfârșitul și tipul rezultatului unui flux de lucru',
-    'answer': 'Definiți conținutul de răspuns al unei conversații prin chat',
+    'answer': 'Definiți conținutul răspunsului unei conversații',
-    'llm': 'Invocarea modelelor de limbaj extinse pentru a răspunde la întrebări sau a procesa limbajul natural',
+    'llm': 'Invocarea modelelor de limbaj mari pentru a răspunde la întrebări sau pentru a procesa limbajul natural',
-    'knowledge-retrieval': 'Vă permite să interogați conținutul text legat de întrebările utilizatorului din Cunoștințe',
+    'knowledge-retrieval': 'Permite interogarea conținutului textului legat de întrebările utilizatorului din baza de cunoștințe',
-    'question-classifier': 'Definiți condițiile de clasificare ale întrebărilor utilizatorului, LLM poate defini modul în care conversația progresează pe baza descrierii clasificării',
+    'question-classifier': 'Definiți condițiile de clasificare a întrebărilor utilizatorului, LLM poate defini cum progresează conversația pe baza descrierii clasificării',
-    'if-else': 'Vă permite să împărțiți fluxul de lucru în două ramuri pe baza condițiilor dacă/altăfel',
+    'if-else': 'Permite împărțirea fluxului de lucru în două ramuri pe baza condițiilor if/else',
-    'code': 'Executați un fragment de cod Python sau NodeJS pentru a implementa o logică personalizată',
+    'code': 'Executați un fragment de cod Python sau NodeJS pentru a implementa logică personalizată',
-    'template-transform': 'Conversia datelor în șiruri folosind sintaxa șablonului Jinja',
+    'template-transform': 'Convertiți datele în șiruri de caractere folosind sintaxa șablonului Jinja',
-    'http-request': 'Permite trimiterea de cereri de la server prin protocolul HTTP',
+    'http-request': 'Permite trimiterea cererilor de server prin protocolul HTTP',
-    'variable-assigner': 'Atribuie variabile în diferite ramuri aceleiași variabile pentru a obține o configurare unificată a post-nodurilor',
+    'variable-assigner': 'Agregarea variabilelor din mai multe ramuri într-o singură variabilă pentru configurarea unificată a nodurilor ulterioare.',
+    'variable-aggregator': 'Agregarea variabilelor din mai multe ramuri într-o singură variabilă pentru configurarea unificată a nodurilor ulterioare.',
+    'iteration': 'Efectuați mai mulți pași pe un obiect listă până când toate rezultatele sunt produse.',
+    'parameter-extractor': 'Utilizați LLM pentru a extrage parametrii structurați din limbajul natural pentru invocările de instrumente sau cererile HTTP.',
   },
   },
   operator: {
   operator: {
     zoomIn: 'Mărește',
     zoomIn: 'Mărește',
     zoomOut: 'Micșorează',
     zoomOut: 'Micșorează',
-    zoomTo50: 'Zoom la 50%',
+    zoomTo50: 'Mărește la 50%',
-    zoomTo100: 'Zoom la 100%',
+    zoomTo100: 'Mărește la 100%',
-    zoomToFit: 'Zoom la potrivire',
+    zoomToFit: 'Mărește pentru a se potrivi',
   },
   },
   panel: {
   panel: {
-    userInputField: 'Câmp de intrare utilizator',
+    userInputField: 'Câmp de introducere utilizator',
     changeBlock: 'Schimbă blocul',
     changeBlock: 'Schimbă blocul',
     helpLink: 'Link de ajutor',
     helpLink: 'Link de ajutor',
     about: 'Despre',
     about: 'Despre',
     createdBy: 'Creat de ',
     createdBy: 'Creat de ',
     nextStep: 'Pasul următor',
     nextStep: 'Pasul următor',
     addNextStep: 'Adăugați următorul bloc în acest flux de lucru',
     addNextStep: 'Adăugați următorul bloc în acest flux de lucru',
-    selectNextStep: 'Selectați blocul următor',
+    selectNextStep: 'Selectați următorul bloc',
     runThisStep: 'Rulează acest pas',
     runThisStep: 'Rulează acest pas',
-    checklist: 'Listă de verificare',
+    checklist: 'Lista de verificare',
     checklistTip: 'Asigurați-vă că toate problemele sunt rezolvate înainte de publicare',
     checklistTip: 'Asigurați-vă că toate problemele sunt rezolvate înainte de publicare',
-    checklistResolved: 'Toate problemele sunt rezolvate',
+    checklistResolved: 'Toate problemele au fost rezolvate',
-    organizeBlocks: 'Organizați blocurile',
+    organizeBlocks: 'Organizează blocurile',
     change: 'Schimbă',
     change: 'Schimbă',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
       outputVars: 'Variabile de ieșire',
       outputVars: 'Variabile de ieșire',
-      insertVarTip: 'Inserați variabila',
+      insertVarTip: 'Inserează variabilă',
       memory: {
       memory: {
         memory: 'Memorie',
         memory: 'Memorie',
-        memoryTip: 'Configurări de memorie pentru chat',
+        memoryTip: 'Setări de memorie pentru conversație',
         windowSize: 'Dimensiunea ferestrei',
         windowSize: 'Dimensiunea ferestrei',
-        conversationRoleName: 'Numele rolului de conversație',
+        conversationRoleName: 'Numele rolului în conversație',
         user: 'Prefix utilizator',
         user: 'Prefix utilizator',
         assistant: 'Prefix asistent',
         assistant: 'Prefix asistent',
       },
       },
       memories: {
       memories: {
         title: 'Amintiri',
         title: 'Amintiri',
-        tip: 'Memorie de chat',
+        tip: 'Memoria conversației',
-        builtIn: 'Încorporat',
+        builtIn: 'Integrat',
       },
       },
     },
     },
     start: {
     start: {
-      required: 'obligatoriu',
+      required: 'necesar',
       inputField: 'Câmp de intrare',
       inputField: 'Câmp de intrare',
-      builtInVar: 'Variabile încorporate',
+      builtInVar: 'Variabile integrate',
       outputVars: {
       outputVars: {
         query: 'Intrare utilizator',
         query: 'Intrare utilizator',
         memories: {
         memories: {
-          des: 'Istoricul conversației',
+          des: 'Istoric conversație',
-          type: 'tipul mesajului',
+          type: 'tip mesaj',
-          content: 'conținutul mesajului',
+          content: 'conținut mesaj',
         },
         },
         files: 'Listă de fișiere',
         files: 'Listă de fișiere',
       },
       },
@@ -175,11 +195,11 @@ const translation = {
     end: {
     end: {
       outputs: 'Ieșiri',
       outputs: 'Ieșiri',
       output: {
       output: {
-        type: 'tipul ieșirii',
+        type: 'tip ieșire',
-        variable: 'variabila de ieșire',
+        variable: 'variabilă de ieșire',
       },
       },
       type: {
       type: {
-        'none': 'Niciunul',
+        'none': 'Nimic',
         'plain-text': 'Text simplu',
         'plain-text': 'Text simplu',
         'structured': 'Structurat',
         'structured': 'Structurat',
       },
       },
@@ -192,36 +212,36 @@ const translation = {
       model: 'model',
       model: 'model',
       variables: 'variabile',
       variables: 'variabile',
       context: 'context',
       context: 'context',
-      contextTooltip: 'Puteți importa Cunoștințe ca context',
+      contextTooltip: 'Puteți importa cunoștințe ca și context',
-      notSetContextInPromptTip: 'Pentru a activa funcția de context, vă rugăm să completați variabila de context în PROMPT.',
+      notSetContextInPromptTip: 'Pentru a activa funcția de context, completați variabila de context în PROMPT.',
       prompt: 'prompt',
       prompt: 'prompt',
       roleDescription: {
       roleDescription: {
         system: 'Dați instrucțiuni de nivel înalt pentru conversație',
         system: 'Dați instrucțiuni de nivel înalt pentru conversație',
-        user: 'Furnizați instrucțiuni, interogări sau orice intrare bazată pe text pentru model',
+        user: 'Furnizați instrucțiuni, întrebări sau orice intrare bazată pe text pentru model',
         assistant: 'Răspunsurile modelului bazate pe mesajele utilizatorului',
         assistant: 'Răspunsurile modelului bazate pe mesajele utilizatorului',
       },
       },
-      addMessage: 'Adăugați mesaj',
+      addMessage: 'Adaugă mesaj',
       vision: 'viziune',
       vision: 'viziune',
       files: 'Fișiere',
       files: 'Fișiere',
       resolution: {
       resolution: {
         name: 'Rezoluție',
         name: 'Rezoluție',
         high: 'Înaltă',
         high: 'Înaltă',
-        low: 'Scăzută',
+        low: 'Joasă',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Generați conținut',
+        output: 'Conținut generat',
-        usage: 'Informații despre utilizarea modelului',
+        usage: 'Informații de utilizare a modelului',
       },
       },
       singleRun: {
       singleRun: {
         variable: 'Variabilă',
         variable: 'Variabilă',
       },
       },
-      sysQueryInUser: 'sys.query în mesajul utilizatorului este obligatoriu',
+      sysQueryInUser: 'sys.query în mesajul utilizatorului este necesar',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
       queryVariable: 'Variabilă de interogare',
       queryVariable: 'Variabilă de interogare',
       knowledge: 'Cunoștințe',
       knowledge: 'Cunoștințe',
       outputVars: {
       outputVars: {
-        output: 'Date segmentate de recuperare',
+        output: 'Date segmentate recuperate',
         content: 'Conținut segmentat',
         content: 'Conținut segmentat',
         title: 'Titlu segmentat',
         title: 'Titlu segmentat',
         icon: 'Pictogramă segmentată',
         icon: 'Pictogramă segmentată',
@@ -232,63 +252,63 @@ const translation = {
     http: {
     http: {
       inputVars: 'Variabile de intrare',
       inputVars: 'Variabile de intrare',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Introduceți URL-ul, tastați \'/\' pentru a insera variabila',
+      apiPlaceholder: 'Introduceți URL-ul, tastați ‘/’ pentru a insera variabilă',
       notStartWithHttp: 'API-ul trebuie să înceapă cu http:// sau https://',
       notStartWithHttp: 'API-ul trebuie să înceapă cu http:// sau https://',
       key: 'Cheie',
       key: 'Cheie',
       value: 'Valoare',
       value: 'Valoare',
-      bulkEdit: 'Editare în bloc',
+      bulkEdit: 'Editare în masă',
       keyValueEdit: 'Editare cheie-valoare',
       keyValueEdit: 'Editare cheie-valoare',
       headers: 'Antete',
       headers: 'Antete',
       params: 'Parametri',
       params: 'Parametri',
       body: 'Corp',
       body: 'Corp',
       outputVars: {
       outputVars: {
         body: 'Conținutul răspunsului',
         body: 'Conținutul răspunsului',
-        statusCode: 'Codul de stare al răspunsului',
+        statusCode: 'Cod de stare al răspunsului',
-        headers: 'Listă anteturi răspuns JSON',
+        headers: 'Lista antetelor de răspuns în format JSON',
-        files: 'Listă de fișiere',
+        files: 'Lista fișierelor',
       },
       },
       authorization: {
       authorization: {
         'authorization': 'Autorizare',
         'authorization': 'Autorizare',
-        'authorizationType': 'Tipul autorizării',
+        'authorizationType': 'Tip de autorizare',
-        'no-auth': 'Niciunul',
+        'no-auth': 'Niciuna',
         'api-key': 'Cheie API',
         'api-key': 'Cheie API',
-        'auth-type': 'Tipul autentificării',
+        'auth-type': 'Tip de autentificare',
         'basic': 'De bază',
         'basic': 'De bază',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
         'custom': 'Personalizat',
         'custom': 'Personalizat',
         'api-key-title': 'Cheie API',
         'api-key-title': 'Cheie API',
         'header': 'Antet',
         'header': 'Antet',
       },
       },
-      insertVarPlaceholder: 'tastați \'/\' pentru a insera variabila',
+      insertVarPlaceholder: 'tastați \'/\' pentru a insera variabilă',
       timeout: {
       timeout: {
-        title: 'Timeout',
+        title: 'Timp limită',
-        connectLabel: 'Timeout de conectare',
+        connectLabel: 'Timp limită pentru conexiune',
-        connectPlaceholder: 'Introduceți timeout-ul de conectare în secunde',
+        connectPlaceholder: 'Introduceți timpul limită pentru conexiune în secunde',
-        readLabel: 'Timeout de citire',
+        readLabel: 'Timp limită pentru citire',
-        readPlaceholder: 'Introduceți timeout-ul de citire în secunde',
+        readPlaceholder: 'Introduceți timpul limită pentru citire în secunde',
-        writeLabel: 'Timeout de scriere',
+        writeLabel: 'Timp limită pentru scriere',
-        writePlaceholder: 'Introduceți timeout-ul de scriere în secunde',
+        writePlaceholder: 'Introduceți timpul limită pentru scriere în secunde',
       },
       },
     },
     },
     code: {
     code: {
       inputVars: 'Variabile de intrare',
       inputVars: 'Variabile de intrare',
       outputVars: 'Variabile de ieșire',
       outputVars: 'Variabile de ieșire',
-      advancedDependencies: 'Dependențe Avansate',
+      advancedDependencies: 'Dependențe avansate',
-      advancedDependenciesTip: 'Adăugați aici unele dependențe preîncărcate care necesită mai mult timp pentru a fi utilizate sau care nu sunt în mod implicit integrate',
+      advancedDependenciesTip: 'Adăugați câteva dependențe preîncărcate care necesită mai mult timp pentru a consuma sau nu sunt integrate implicit aici',
-      searchDependencies: 'Căutați Dependențe',
+      searchDependencies: 'Căutați dependențe',
     },
     },
     templateTransform: {
     templateTransform: {
       inputVars: 'Variabile de intrare',
       inputVars: 'Variabile de intrare',
       code: 'Cod',
       code: 'Cod',
-      codeSupportTip: 'Acceptă doar Jinja2',
+      codeSupportTip: 'Suportă doar Jinja2',
       outputVars: {
       outputVars: {
-        output: 'Conținutul transformat',
+        output: 'Conținut transformat',
       },
       },
     },
     },
     ifElse: {
     ifElse: {
       if: 'Dacă',
       if: 'Dacă',
-      else: 'Altfel',
+      else: 'Altminteri',
-      elseDescription: 'Utilizat pentru a defini logica care trebuie executată atunci când condiția dacă nu este îndeplinită.',
+      elseDescription: 'Utilizat pentru a defini logica care ar trebui executată atunci când condiția if nu este îndeplinită.',
       and: 'și',
       and: 'și',
       or: 'sau',
       or: 'sau',
       operator: 'Operator',
       operator: 'Operator',
@@ -302,40 +322,43 @@ const translation = {
         'is not': 'nu este',
         'is not': 'nu este',
         'empty': 'este gol',
         'empty': 'este gol',
         'not empty': 'nu este gol',
         'not empty': 'nu este gol',
-        'null': 'este nul',
+        'null': 'este null',
-        'not null': 'nu este nul',
+        'not null': 'nu este null',
       },
       },
       enterValue: 'Introduceți valoarea',
       enterValue: 'Introduceți valoarea',
       addCondition: 'Adăugați condiție',
       addCondition: 'Adăugați condiție',
-      conditionNotSetup: 'Condiția NU este configurată',
+      conditionNotSetup: 'Condiția NU este setată',
     },
     },
     variableAssigner: {
     variableAssigner: {
-      title: 'Atribuire variabile',
+      title: 'Atribuie variabile',
-      outputType: 'Tipul ieșirii',
+      outputType: 'Tip de ieșire',
-      outputVarType: 'Tipul variabilei de ieșire',
       varNotSet: 'Variabila nu este setată',
       varNotSet: 'Variabila nu este setată',
-      noVarTip: 'Adăugați variabilele care trebuie atribuite',
+      noVarTip: 'Adăugați variabilele de atribuit',
       type: {
       type: {
-        string: 'Șir de caractere',
+        string: 'Șir',
         number: 'Număr',
         number: 'Număr',
         object: 'Obiect',
         object: 'Obiect',
-        array: 'Tablou',
+        array: 'Array',
       },
       },
+      aggregationGroup: 'Grup de agregare',
+      aggregationGroupTip: 'Activarea acestei funcții permite agregatorului de variabile să agrege mai multe seturi de variabile.',
+      addGroup: 'Adăugați grup',
       outputVars: {
       outputVars: {
-        output: 'Valoarea variabilei atribuite',
+        varDescribe: 'Ieșire {{groupName}}',
       },
       },
+      setAssignVariable: 'Setați variabila de atribuire',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Pentru a autoriza',
+      toAuthorize: 'Autorizați',
       inputVars: 'Variabile de intrare',
       inputVars: 'Variabile de intrare',
       outputVars: {
       outputVars: {
-        text: 'Conținut generat de instrument',
+        text: 'conținut generat de instrument',
         files: {
         files: {
-          title: 'Fișiere generate de instrument',
+          title: 'fișiere generate de instrument',
-          type: 'Tipul suportat. Acum suportă doar imaginea',
+          type: 'Tip de suport. Acum acceptă doar imagine',
-          transfer_method: 'Metoda de transfer. Valoarea este remote_url sau local_file',
+          transfer_method: 'Metodă de transfer. Valoarea este remote_url sau local_file',
-          url: 'URL-ul imaginii',
+          url: 'URL imagine',
-          upload_file_id: 'ID-ul fișierului încărcat',
+          upload_file_id: 'ID fișier încărcat',
         },
         },
       },
       },
     },
     },
@@ -343,17 +366,51 @@ const translation = {
       model: 'model',
       model: 'model',
       inputVars: 'Variabile de intrare',
       inputVars: 'Variabile de intrare',
       outputVars: {
       outputVars: {
-        className: 'Numele clasei',
+        className: 'Nume clasă',
       },
       },
       class: 'Clasă',
       class: 'Clasă',
       classNamePlaceholder: 'Scrieți numele clasei',
       classNamePlaceholder: 'Scrieți numele clasei',
-      advancedSetting: 'Configurare avansată',
+      advancedSetting: 'Setare avansată',
-      topicName: 'Numele subiectului',
+      topicName: 'Nume subiect',
       topicPlaceholder: 'Scrieți numele subiectului',
       topicPlaceholder: 'Scrieți numele subiectului',
       addClass: 'Adăugați clasă',
       addClass: 'Adăugați clasă',
       instruction: 'Instrucțiune',
       instruction: 'Instrucțiune',
+      instructionTip: 'Introduceți instrucțiuni suplimentare pentru a ajuta clasificatorul de întrebări să înțeleagă mai bine cum să categorizeze întrebările.',
       instructionPlaceholder: 'Scrieți instrucțiunea',
       instructionPlaceholder: 'Scrieți instrucțiunea',
     },
     },
+    parameterExtractor: {
+      inputVar: 'Variabilă de intrare',
+      extractParameters: 'Extrageți parametrii',
+      importFromTool: 'Importă din instrumente',
+      addExtractParameter: 'Adăugați parametru de extragere',
+      addExtractParameterContent: {
+        name: 'Nume',
+        namePlaceholder: 'Nume parametru de extragere',
+        type: 'Tip',
+        typePlaceholder: 'Tip parametru de extragere',
+        description: 'Descriere',
+        descriptionPlaceholder: 'Descriere parametru de extragere',
+        required: 'Necesar',
+        requiredContent: 'Necesar este utilizat doar ca referință pentru inferența modelului și nu pentru validarea obligatorie a ieșirii parametrului.',
+      },
+      extractParametersNotSet: 'Parametrii de extragere nu sunt setați',
+      instruction: 'Instrucțiune',
+      instructionTip: 'Introduceți instrucțiuni suplimentare pentru a ajuta extractorul de parametri să înțeleagă cum să extragă parametrii.',
+      advancedSetting: 'Setare avansată',
+      reasoningMode: 'Mod de raționament',
+      reasoningModeTip: 'Puteți alege modul de raționament potrivit în funcție de capacitatea modelului de a răspunde la instrucțiuni pentru apelarea funcțiilor sau prompturi.',
+      isSuccess: 'Este succes. În caz de succes valoarea este 1, în caz de eșec valoarea este 0.',
+      errorReason: 'Motivul erorii',
+    },
+    iteration: {
+      deleteTitle: 'Ștergeți nodul de iterație?',
+      deleteDesc: 'Ștergerea nodului de iterație va șterge toate nodurile copil',
+      input: 'Intrare',
+      output: 'Variabile de ieșire',
+      iteration_one: '{{count}} Iterație',
+      iteration_other: '{{count}} Iterații',
+      currentIteration: 'Iterație curentă',
+    },
   },
   },
   tracing: {
   tracing: {
     stopBy: 'Oprit de {{user}}',
     stopBy: 'Oprit de {{user}}',

+ 173 - 116
web/i18n/uk-UA/workflow.ts

@@ -7,49 +7,49 @@ const translation = {
     publish: 'Опублікувати',
     publish: 'Опублікувати',
     update: 'Оновити',
     update: 'Оновити',
     run: 'Запустити',
     run: 'Запустити',
-    running: 'Виконується',
+    running: 'Запущено',
-    inRunMode: 'У режимі виконання',
+    inRunMode: 'У режимі запуску',
-    inPreview: попередньому перегляді',
+    inPreview: режимі попереднього перегляду',
     inPreviewMode: 'У режимі попереднього перегляду',
     inPreviewMode: 'У режимі попереднього перегляду',
     preview: 'Попередній перегляд',
     preview: 'Попередній перегляд',
     viewRunHistory: 'Переглянути історію запусків',
     viewRunHistory: 'Переглянути історію запусків',
     runHistory: 'Історія запусків',
     runHistory: 'Історія запусків',
-    goBackToEdit: 'Повернутися до редагування',
+    goBackToEdit: 'Повернутися до редактора',
     conversationLog: 'Журнал розмов',
     conversationLog: 'Журнал розмов',
     features: 'Функції',
     features: 'Функції',
-    debugAndPreview: 'Налагодження і попередній перегляд',
+    debugAndPreview: 'Налагодження та попередній перегляд',
     restart: 'Перезапустити',
     restart: 'Перезапустити',
     currentDraft: 'Поточний чернетка',
     currentDraft: 'Поточний чернетка',
-    currentDraftUnpublished: 'Поточний чернетка не опубліковано',
+    currentDraftUnpublished: 'Поточний чернетка неопублікований',
-    latestPublished: 'Остання опублікована',
+    latestPublished: 'Останнє опубліковане',
-    publishedAt: 'Опубліковано',
+    publishedAt: 'Опубліковано о',
     restore: 'Відновити',
     restore: 'Відновити',
     runApp: 'Запустити додаток',
     runApp: 'Запустити додаток',
     batchRunApp: 'Пакетний запуск додатку',
     batchRunApp: 'Пакетний запуск додатку',
-    accessAPIReference: 'Доступ до посилання на API',
+    accessAPIReference: 'Доступ до довідника API',
-    embedIntoSite: 'Вбудувати в сайт',
+    embedIntoSite: 'Вбудувати на сайт',
-    addTitle: 'Додати назву...',
+    addTitle: 'Додати заголовок...',
     addDescription: 'Додати опис...',
     addDescription: 'Додати опис...',
-    noVar: 'Немає змінної',
+    noVar: 'Без змінної',
     searchVar: 'Пошук змінної',
     searchVar: 'Пошук змінної',
     variableNamePlaceholder: 'Назва змінної',
     variableNamePlaceholder: 'Назва змінної',
-    setVarValuePlaceholder: 'Встановити змінну',
+    setVarValuePlaceholder: 'Встановити значення змінної',
-    needConnecttip: 'Цей крок не підключено до чогось',
+    needConnecttip: 'Цей крок ні до чого не підключений',
     maxTreeDepth: 'Максимальний ліміт {{depth}} вузлів на гілку',
     maxTreeDepth: 'Максимальний ліміт {{depth}} вузлів на гілку',
-    needEndNode: 'Необхідно додати блок "Кінець"',
+    needEndNode: 'Потрібно додати кінцевий блок',
-    needAnswerNode: 'Необхідно додати блок "Відповідь"',
+    needAnswerNode: 'Потрібно додати блок відповіді',
-    workflowProcess: 'Процес робочого процесу',
+    workflowProcess: 'Процес робочого потоку',
     notRunning: 'Ще не запущено',
     notRunning: 'Ще не запущено',
-    previewPlaceholder: 'Введіть вміст у полі нижче, щоб розпочати налагодження чат-бота',
+    previewPlaceholder: 'Введіть вміст у поле нижче, щоб розпочати налагодження чат-бота',
     effectVarConfirm: {
     effectVarConfirm: {
       title: 'Видалити змінну',
       title: 'Видалити змінну',
-      content: 'Цю змінну використовується в інших вузлах. Ви все ще хочете її видалити?',
+      content: 'Змінна використовується в інших вузлах. Ви все ще хочете її видалити?',
     },
     },
-    insertVarTip: 'Натисніть клавішу "/" для швидкого вставлення',
+    insertVarTip: 'Натисніть клавішу \'/\' для швидкого вставлення',
-    processData: 'Обробка даних',
+    processData: 'Обробити дані',
     input: 'Вхід',
     input: 'Вхід',
     output: 'Вихід',
     output: 'Вихід',
-    jinjaEditorPlaceholder: 'Введіть \'/\' або \'{\' щоб вставити змінну',
+    jinjaEditorPlaceholder: 'Введіть \'/\' або \'{\' для вставлення змінної',
     viewOnly: 'Тільки перегляд',
     viewOnly: 'Тільки перегляд',
     showRunHistory: 'Показати історію запусків',
     showRunHistory: 'Показати історію запусків',
     enableJinja: 'Увімкнути підтримку шаблонів Jinja',
     enableJinja: 'Увімкнути підтримку шаблонів Jinja',
@@ -57,112 +57,132 @@ const translation = {
     copy: 'Копіювати',
     copy: 'Копіювати',
     duplicate: 'Дублювати',
     duplicate: 'Дублювати',
     addBlock: 'Додати блок',
     addBlock: 'Додати блок',
-    pasteHere: 'Вставити тут',
+    pasteHere: 'Вставити сюди',
     pointerMode: 'Режим вказівника',
     pointerMode: 'Режим вказівника',
-    handMode: 'Режим руки',
+    handMode: 'Ручний режим',
+    model: 'Модель',
+    workflowAsTool: 'Робочий потік як інструмент',
+    configureRequired: 'Потрібна конфігурація',
+    configure: 'Налаштувати',
+    manageInTools: 'Керування в інструментах',
+    workflowAsToolTip: 'Після оновлення робочого потоку необхідна переконфігурація інструменту.',
+    viewDetailInTracingPanel: 'Переглянути деталі',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} є обов\'язковим',
     fieldRequired: '{{field}} є обов\'язковим',
     authRequired: 'Потрібна авторизація',
     authRequired: 'Потрібна авторизація',
-    invalidJson: '{{field}} недійсний JSON',
+    invalidJson: '{{field}} є недійсним JSON',
     fields: {
     fields: {
       variable: 'Назва змінної',
       variable: 'Назва змінної',
       variableValue: 'Значення змінної',
       variableValue: 'Значення змінної',
       code: 'Код',
       code: 'Код',
       model: 'Модель',
       model: 'Модель',
-      rerankModel: 'Модель пересортування',
+      rerankModel: 'Модель повторного ранжування',
     },
     },
     invalidVariable: 'Недійсна змінна',
     invalidVariable: 'Недійсна змінна',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: 'Тестовий запуск ',
+    testRun: 'Тестовий запуск',
     startRun: 'Почати запуск',
     startRun: 'Почати запуск',
-    running: 'Виконується',
+    running: 'Запущено',
+    testRunIteration: 'Ітерація тестового запуску',
+    back: 'Назад',
+    iteration: 'Ітерація',
   },
   },
   tabs: {
   tabs: {
     'searchBlock': 'Пошук блоку',
     'searchBlock': 'Пошук блоку',
     'blocks': 'Блоки',
     'blocks': 'Блоки',
-    'builtInTool': 'Вбудований інструмент',
+    'tools': 'Інструменти',
-    'customTool': 'Спеціальний інструмент',
+    'allTool': 'Усі',
+    'builtInTool': 'Вбудовані',
+    'customTool': 'Користувацькі',
+    'workflowTool': 'Робочий потік',
     'question-understand': 'Розуміння питань',
     'question-understand': 'Розуміння питань',
     'logic': 'Логіка',
     'logic': 'Логіка',
     'transform': 'Трансформація',
     'transform': 'Трансформація',
     'utilities': 'Утиліти',
     'utilities': 'Утиліти',
-    'noResult': 'Співпадінь не знайдено',
+    'noResult': 'Нічого не знайдено',
   },
   },
   blocks: {
   blocks: {
     'start': 'Початок',
     'start': 'Початок',
     'end': 'Кінець',
     'end': 'Кінець',
     'answer': 'Відповідь',
     'answer': 'Відповідь',
     'llm': 'LLM',
     'llm': 'LLM',
-    'knowledge-retrieval': 'Пошук знань',
+    'knowledge-retrieval': 'Отримання знань',
     'question-classifier': 'Класифікатор питань',
     'question-classifier': 'Класифікатор питань',
-    'if-else': кщо / Інакше',
+    'if-else': КЩО/ІНАКШЕ',
     'code': 'Код',
     'code': 'Код',
     'template-transform': 'Шаблон',
     'template-transform': 'Шаблон',
     'http-request': 'HTTP-запит',
     'http-request': 'HTTP-запит',
-    'variable-assigner': 'Призначення змінних',
+    'variable-assigner': 'Присвоювач змінних',
+    'variable-aggregator': 'Агрегатор змінних',
+    'iteration-start': 'Початок ітерації',
+    'iteration': 'Ітерація',
+    'parameter-extractor': 'Екстрактор параметрів',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': 'Визначте початкові параметри для запуску робочого процесу',
+    'start': 'Визначте початкові параметри для запуску робочого потоку',
-    'end': 'Визначте кінець і тип результату робочого процесу',
+    'end': 'Визначте кінець і тип результату робочого потоку',
-    'answer': 'Визначте вміст відповіді чат-розмови',
+    'answer': 'Визначте зміст відповіді у чаті',
-    'llm': 'Виклик великих мовних моделей для відповіді на питання або обробки природної мови',
+    'llm': 'Виклик великих мовних моделей для відповіді на запитання або обробки природної мови',
-    'knowledge-retrieval': 'Дозволяє вам запитувати текстовий вміст, що стосується питань користувача, знань',
+    'knowledge-retrieval': 'Дозволяє виконувати запити текстового вмісту, пов\'язаного із запитаннями користувача, з бази знань',
-    'question-classifier': 'Визначте умови класифікації користувачів, LLM може визначити, як прогресує розмова на основі опису класифікації',
+    'question-classifier': 'Визначте умови класифікації запитань користувачів, LLM може визначати, як розвивається розмова на основі опису класифікації',
-    'if-else': 'Дозволяє вам розгалужувати робочий процес на дві гілки на основі умов if / else',
+    'if-else': 'Дозволяє розділити робочий потік на дві гілки на основі умов if/else',
-    'code': 'Виконати фрагмент коду Python або NodeJS для реалізації власної логіки',
+    'code': 'Виконайте фрагмент коду Python або NodeJS для реалізації користувацької логіки',
-    'template-transform': 'Перетворити дані в рядок, використовуючи синтаксис шаблону Jinja',
+    'template-transform': 'Перетворіть дані на рядок за допомогою синтаксису шаблону Jinja',
     'http-request': 'Дозволяє відправляти серверні запити через протокол HTTP',
     'http-request': 'Дозволяє відправляти серверні запити через протокол HTTP',
-    'variable-assigner': 'Призначте змінні в різних гілках тієї самої змінної, щоб забезпечити єдину конфігурацію після-вузлів',
+    'variable-assigner': 'Агрегує змінні з кількох гілок у одну змінну для уніфікованої конфігурації кінцевих вузлів.',
+    'variable-aggregator': 'Агрегує змінні з кількох гілок у одну змінну для уніфікованої конфігурації кінцевих вузлів.',
+    'iteration': 'Виконувати кілька кроків на об\'єкті списку, поки не буде виведено всі результати.',
+    'parameter-extractor': 'Використовуйте LLM для вилучення структурованих параметрів з природної мови для викликів інструментів або HTTP-запитів.',
   },
   },
   operator: {
   operator: {
     zoomIn: 'Збільшити',
     zoomIn: 'Збільшити',
     zoomOut: 'Зменшити',
     zoomOut: 'Зменшити',
-    zoomTo50: 'Масштабувати до 50%',
+    zoomTo50: 'Збільшити до 50%',
-    zoomTo100: 'Масштабувати до 100%',
+    zoomTo100: 'Збільшити до 100%',
-    zoomToFit: 'Підігнати по ширині',
+    zoomToFit: 'Збільшити для підгонки',
   },
   },
   panel: {
   panel: {
     userInputField: 'Поле введення користувача',
     userInputField: 'Поле введення користувача',
     changeBlock: 'Змінити блок',
     changeBlock: 'Змінити блок',
-    helpLink: 'Посилання на довідку',
+    helpLink: 'Посилання на допомогу',
     about: 'Про',
     about: 'Про',
     createdBy: 'Створено ',
     createdBy: 'Створено ',
     nextStep: 'Наступний крок',
     nextStep: 'Наступний крок',
-    addNextStep: 'Додати наступний блок у цей робочий процес',
+    addNextStep: 'Додати наступний блок у цей робочий потік',
-    selectNextStep: 'Виберіть наступний блок',
+    selectNextStep: 'Вибрати наступний блок',
     runThisStep: 'Запустити цей крок',
     runThisStep: 'Запустити цей крок',
-    checklist: 'Перелік',
+    checklist: 'Контрольний список',
-    checklistTip: 'Переконайтеся, що всі питання вирішено перед публікацією',
+    checklistTip: 'Переконайтеся, що всі проблеми вирішені перед публікацією',
-    checklistResolved: 'Всі питання вирішено',
+    checklistResolved: 'Всі проблеми вирішені',
     organizeBlocks: 'Організувати блоки',
     organizeBlocks: 'Організувати блоки',
     change: 'Змінити',
     change: 'Змінити',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
-      outputVars: 'Вихідні змінні',
+      outputVars: 'Змінні виходу',
       insertVarTip: 'Вставити змінну',
       insertVarTip: 'Вставити змінну',
       memory: {
       memory: {
         memory: 'Пам\'ять',
         memory: 'Пам\'ять',
-        memoryTip: 'Налаштування чат-пам\'яті',
+        memoryTip: 'Налаштування пам\'яті чату',
         windowSize: 'Розмір вікна',
         windowSize: 'Розмір вікна',
-        conversationRoleName: 'Назва ролі розмови',
+        conversationRoleName: 'Назва ролі у розмові',
         user: 'Префікс користувача',
         user: 'Префікс користувача',
         assistant: 'Префікс помічника',
         assistant: 'Префікс помічника',
       },
       },
       memories: {
       memories: {
-        title: 'Пам\'яті',
+        title: 'Спогади',
-        tip: 'Чат-пам\'ять',
+        tip: 'Пам\'ять чату',
-        builtIn: 'Вбудований',
+        builtIn: 'Вбудовано',
       },
       },
     },
     },
     start: {
     start: {
-      required: 'обов\'язково',
+      required: 'обов\'язковий',
       inputField: 'Поле введення',
       inputField: 'Поле введення',
       builtInVar: 'Вбудовані змінні',
       builtInVar: 'Вбудовані змінні',
       outputVars: {
       outputVars: {
-        query: хід користувача',
+        query: ведення користувача',
         memories: {
         memories: {
           des: 'Історія розмов',
           des: 'Історія розмов',
           type: 'тип повідомлення',
           type: 'тип повідомлення',
@@ -170,38 +190,38 @@ const translation = {
         },
         },
         files: 'Список файлів',
         files: 'Список файлів',
       },
       },
-      noVarTip: 'Встановіть вхідні дані, які можна використовувати в робочому процесі',
+      noVarTip: 'Встановіть вхідні дані, які можуть бути використані у робочому потоці',
     },
     },
     end: {
     end: {
-      outputs: 'Вихідні дані',
+      outputs: 'Виходи',
       output: {
       output: {
         type: 'тип виходу',
         type: 'тип виходу',
-        variable: 'вихідна змінна',
+        variable: 'змінна виходу',
       },
       },
       type: {
       type: {
-        'none': ічого',
+        'none': емає',
-        'plain-text': 'Звичайний текст',
+        'plain-text': 'Простий текст',
         'structured': 'Структурований',
         'structured': 'Структурований',
       },
       },
     },
     },
     answer: {
     answer: {
       answer: 'Відповідь',
       answer: 'Відповідь',
-      outputVars: 'Вихідні змінні',
+      outputVars: 'Змінні виходу',
     },
     },
     llm: {
     llm: {
       model: 'модель',
       model: 'модель',
       variables: 'змінні',
       variables: 'змінні',
       context: 'контекст',
       context: 'контекст',
       contextTooltip: 'Ви можете імпортувати знання як контекст',
       contextTooltip: 'Ви можете імпортувати знання як контекст',
-      notSetContextInPromptTip: 'Щоб увімкнути функцію контексту, будь ласка, заповніть змінну контексту в PROMPT.',
+      notSetContextInPromptTip: 'Щоб увімкнути функцію контексту, заповніть змінну контексту в PROMPT.',
-      prompt: 'підказка',
+      prompt: 'prompt',
       roleDescription: {
       roleDescription: {
-        system: 'Надати високорівневі інструкції для розмови',
+        system: 'Дайте високорівневі інструкції для розмови',
-        user: 'Надати інструкції, запити або будь-який текстовий ввід для моделі',
+        user: 'Надайте інструкції, запити або будь-який текстовий вхід для моделі',
         assistant: 'Відповіді моделі на основі повідомлень користувача',
         assistant: 'Відповіді моделі на основі повідомлень користувача',
       },
       },
       addMessage: 'Додати повідомлення',
       addMessage: 'Додати повідомлення',
-      vision: 'візія',
+      vision: 'бачення',
       files: 'Файли',
       files: 'Файли',
       resolution: {
       resolution: {
         name: 'Роздільна здатність',
         name: 'Роздільна здатність',
@@ -209,90 +229,90 @@ const translation = {
         low: 'Низька',
         low: 'Низька',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Створення вмісту',
+        output: 'Генерований вміст',
         usage: 'Інформація про використання моделі',
         usage: 'Інформація про використання моделі',
       },
       },
       singleRun: {
       singleRun: {
         variable: 'Змінна',
         variable: 'Змінна',
       },
       },
-      sysQueryInUser: 'sys.query потрібно в повідомленні користувача.',
+      sysQueryInUser: 'sys.query у повідомленні користувача є обов\'язковим',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
-      queryVariable: апит змінної',
+      queryVariable: мінна запиту',
       knowledge: 'Знання',
       knowledge: 'Знання',
       outputVars: {
       outputVars: {
-        output: илучені сегментовані дані',
+        output: ідновлені сегментовані дані',
         content: 'Сегментований вміст',
         content: 'Сегментований вміст',
         title: 'Сегментований заголовок',
         title: 'Сегментований заголовок',
-        icon: 'Сегментована іконка',
+        icon: 'Сегментована піктограма',
-        url: 'Сегментований URL',
+        url: 'Сегментована URL',
-        metadata: 'Інша метадані',
+        metadata: 'Інші метадані',
       },
       },
     },
     },
     http: {
     http: {
       inputVars: 'Вхідні змінні',
       inputVars: 'Вхідні змінні',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Введіть URL, наберіть «/» для вставки змінної',
+      apiPlaceholder: 'Введіть URL, введіть ‘/’, щоб вставити змінну',
-      notStartWithHttp: 'API повинно починатися з http:// або https://',
+      notStartWithHttp: 'API має починатися з http:// або https://',
       key: 'Ключ',
       key: 'Ключ',
       value: 'Значення',
       value: 'Значення',
       bulkEdit: 'Масове редагування',
       bulkEdit: 'Масове редагування',
-      keyValueEdit: 'Редагування Ключ-Значення',
+      keyValueEdit: 'Редагування ключ-значення',
       headers: 'Заголовки',
       headers: 'Заголовки',
       params: 'Параметри',
       params: 'Параметри',
       body: 'Тіло',
       body: 'Тіло',
       outputVars: {
       outputVars: {
-        body: 'Вміст відповіді',
+        body: 'Зміст відповіді',
-        statusCode: 'Код статусу відповіді',
+        statusCode: 'Код стану відповіді',
-        headers: 'Список заголовків відповіді JSON',
+        headers: 'Список заголовків відповіді у форматі JSON',
         files: 'Список файлів',
         files: 'Список файлів',
       },
       },
       authorization: {
       authorization: {
         'authorization': 'Авторизація',
         'authorization': 'Авторизація',
         'authorizationType': 'Тип авторизації',
         'authorizationType': 'Тип авторизації',
         'no-auth': 'Немає',
         'no-auth': 'Немає',
-        'api-key': 'API-Key',
+        'api-key': 'API-ключ',
-        'auth-type': 'Тип авторизації',
+        'auth-type': 'Тип аутентифікації',
-        'basic': 'Базова',
+        'basic': 'Базовий',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
-        'custom': 'Користувацька',
+        'custom': 'Користувацький',
-        'api-key-title': 'Ключ API',
+        'api-key-title': 'API-ключ',
         'header': 'Заголовок',
         'header': 'Заголовок',
       },
       },
-      insertVarPlaceholder: 'наберіть \'/\' для вставки змінної',
+      insertVarPlaceholder: 'введіть \'/\', щоб вставити змінну',
       timeout: {
       timeout: {
-        title: 'Час вичерпано',
+        title: 'Тайм-аут',
-        connectLabel: 'Тайм-аут з’єднання',
+        connectLabel: 'Тайм-аут підключення',
-        connectPlaceholder: 'Введіть час тайм-ауту з’єднання у секундах',
+        connectPlaceholder: 'Введіть тайм-аут підключення в секундах',
         readLabel: 'Тайм-аут читання',
         readLabel: 'Тайм-аут читання',
-        readPlaceholder: 'Введіть час тайм-ауту читання у секундах',
+        readPlaceholder: 'Введіть тайм-аут читання в секундах',
         writeLabel: 'Тайм-аут запису',
         writeLabel: 'Тайм-аут запису',
-        writePlaceholder: 'Введіть час тайм-ауту запису у секундах',
+        writePlaceholder: 'Введіть тайм-аут запису в секундах',
       },
       },
     },
     },
     code: {
     code: {
       inputVars: 'Вхідні змінні',
       inputVars: 'Вхідні змінні',
-      outputVars: 'Вихідні змінні',
+      outputVars: 'Змінні виходу',
       advancedDependencies: 'Розширені залежності',
       advancedDependencies: 'Розширені залежності',
-      advancedDependenciesTip: 'Додайте деякі попередньо завантажені залежності, які потребують більше часу для використання або не є вбудованими за замовчуванням',
+      advancedDependenciesTip: 'Додайте тут деякі попередньо завантажені залежності, які потребують більше часу для споживання або не є за замовчуванням вбудованими',
       searchDependencies: 'Шукати залежності',
       searchDependencies: 'Шукати залежності',
     },
     },
     templateTransform: {
     templateTransform: {
       inputVars: 'Вхідні змінні',
       inputVars: 'Вхідні змінні',
       code: 'Код',
       code: 'Код',
-      codeSupportTip: 'Підтримується лише Jinja2',
+      codeSupportTip: 'Підтримує лише Jinja2',
       outputVars: {
       outputVars: {
-        output: 'Перетворений вміст',
+        output: 'Трансформований вміст',
       },
       },
     },
     },
     ifElse: {
     ifElse: {
       if: 'Якщо',
       if: 'Якщо',
       else: 'Інакше',
       else: 'Інакше',
-      elseDescription: 'Використовується для визначення логіки, яка має виконуватися, коли умова if не виконується.',
+      elseDescription: 'Використовується для визначення логіки, яка має бути виконана, коли умова if не виконана.',
       and: 'і',
       and: 'і',
       or: 'або',
       or: 'або',
       operator: 'Оператор',
       operator: 'Оператор',
-      notSetVariable: 'Спочатку встановіть змінну',
+      notSetVariable: 'Будь ласка, спочатку встановіть змінну',
       comparisonOperator: {
       comparisonOperator: {
         'contains': 'містить',
         'contains': 'містить',
         'not contains': 'не містить',
         'not contains': 'не містить',
@@ -302,40 +322,43 @@ const translation = {
         'is not': 'не є',
         'is not': 'не є',
         'empty': 'порожній',
         'empty': 'порожній',
         'not empty': 'не порожній',
         'not empty': 'не порожній',
-        'null': 'нуль',
+        'null': 'є null',
-        'not null': 'не нуль',
+        'not null': 'не є null',
       },
       },
       enterValue: 'Введіть значення',
       enterValue: 'Введіть значення',
       addCondition: 'Додати умову',
       addCondition: 'Додати умову',
       conditionNotSetup: 'Умова НЕ налаштована',
       conditionNotSetup: 'Умова НЕ налаштована',
     },
     },
     variableAssigner: {
     variableAssigner: {
-      title: 'Призначення змінних',
+      title: 'Присвоєння змінних',
       outputType: 'Тип виходу',
       outputType: 'Тип виходу',
-      outputVarType: 'Тип вихідної змінної',
       varNotSet: 'Змінна не встановлена',
       varNotSet: 'Змінна не встановлена',
-      noVarTip: 'Додайте змінні для призначення',
+      noVarTip: 'Додайте змінні для присвоєння',
       type: {
       type: {
         string: 'Рядок',
         string: 'Рядок',
         number: 'Число',
         number: 'Число',
-        object: 'Обєкт',
+        object: 'Об\'єкт',
         array: 'Масив',
         array: 'Масив',
       },
       },
+      aggregationGroup: 'Група агрегації',
+      aggregationGroupTip: 'Увімкнення цієї функції дозволяє агрегатору змінних агрегувати кілька наборів змінних.',
+      addGroup: 'Додати групу',
       outputVars: {
       outputVars: {
-        output: 'Значення призначеної змінної',
+        varDescribe: 'Вихід {{groupName}}',
       },
       },
+      setAssignVariable: 'Встановити змінну присвоєння',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Авторизуватися',
+      toAuthorize: 'Авторизувати',
       inputVars: 'Вхідні змінні',
       inputVars: 'Вхідні змінні',
       outputVars: {
       outputVars: {
-        text: 'вміст, згенерований інструментом',
+        text: 'генерований вміст інструменту',
         files: {
         files: {
-          title: 'файли, згенеровані інструментом',
+          title: 'файли, генеровані інструментом',
-          type: 'Тип підтримки. Тепер підтримується лише зображення',
+          type: 'Тип підтримки. Наразі підтримуються лише зображення',
-          transfer_method: 'Метод передачі. Значення - віддалений URL або локальний файл',
+          transfer_method: 'Метод передачі. Значення - remote_url або local_file',
           url: 'URL зображення',
           url: 'URL зображення',
-          upload_file_id: 'Ідентифікатор завантаженого файлу',
+          upload_file_id: 'ID завантаженого файлу',
         },
         },
       },
       },
     },
     },
@@ -347,13 +370,47 @@ const translation = {
       },
       },
       class: 'Клас',
       class: 'Клас',
       classNamePlaceholder: 'Напишіть назву вашого класу',
       classNamePlaceholder: 'Напишіть назву вашого класу',
-      advancedSetting: 'Розширена настройка',
+      advancedSetting: 'Розширене налаштування',
       topicName: 'Назва теми',
       topicName: 'Назва теми',
       topicPlaceholder: 'Напишіть назву вашої теми',
       topicPlaceholder: 'Напишіть назву вашої теми',
       addClass: 'Додати клас',
       addClass: 'Додати клас',
       instruction: 'Інструкція',
       instruction: 'Інструкція',
+      instructionTip: 'Введіть додаткові інструкції, щоб допомогти класифікатору запитань краще зрозуміти, як категоризувати запитання.',
       instructionPlaceholder: 'Напишіть вашу інструкцію',
       instructionPlaceholder: 'Напишіть вашу інструкцію',
     },
     },
+    parameterExtractor: {
+      inputVar: 'Вхідна змінна',
+      extractParameters: 'Витягти параметри',
+      importFromTool: 'Імпорт з інструментів',
+      addExtractParameter: 'Додати параметр витягування',
+      addExtractParameterContent: {
+        name: 'Ім\'я',
+        namePlaceholder: 'Ім\'я параметра витягування',
+        type: 'Тип',
+        typePlaceholder: 'Тип параметра витягування',
+        description: 'Опис',
+        descriptionPlaceholder: 'Опис параметра витягування',
+        required: 'Обов\'язковий',
+        requiredContent: 'Обов\'язковий використовується лише як посилання для інференції моделі і не для обов\'язкової валідації вихідного параметра.',
+      },
+      extractParametersNotSet: 'Параметри витягування не налаштовані',
+      instruction: 'Інструкція',
+      instructionTip: 'Введіть додаткові інструкції, щоб допомогти екстрактору параметрів зрозуміти, як витягувати параметри.',
+      advancedSetting: 'Розширене налаштування',
+      reasoningMode: 'Режим інференції',
+      reasoningModeTip: 'Ви можете вибрати відповідний режим інференції залежно від здатності моделі реагувати на інструкції щодо викликів функцій або запитів.',
+      isSuccess: 'Є успіх. У разі успіху значення 1, у разі невдачі значення 0.',
+      errorReason: 'Причина помилки',
+    },
+    iteration: {
+      deleteTitle: 'Видалити вузол ітерації?',
+      deleteDesc: 'Видалення вузла ітерації видалить усі дочірні вузли',
+      input: 'Вхід',
+      output: 'Змінні виходу',
+      iteration_one: '{{count}} Ітерація',
+      iteration_other: '{{count}} Ітерацій',
+      currentIteration: 'Поточна ітерація',
+    },
   },
   },
   tracing: {
   tracing: {
     stopBy: 'Зупинено користувачем {{user}}',
     stopBy: 'Зупинено користувачем {{user}}',

+ 178 - 122
web/i18n/vi-VN/workflow.ts

@@ -8,25 +8,25 @@ const translation = {
     update: 'Cập nhật',
     update: 'Cập nhật',
     run: 'Chạy',
     run: 'Chạy',
     running: 'Đang chạy',
     running: 'Đang chạy',
-    inRunMode: 'Chế độ chạy',
+    inRunMode: 'Chế độ chạy',
-    inPreview: 'Ở Chế độ xem trước',
+    inPreview: 'Trong chế độ xem trước',
-    inPreviewMode: 'Chế độ xem trước',
+    inPreviewMode: 'Chế độ xem trước',
     preview: 'Xem trước',
     preview: 'Xem trước',
     viewRunHistory: 'Xem lịch sử chạy',
     viewRunHistory: 'Xem lịch sử chạy',
     runHistory: 'Lịch sử chạy',
     runHistory: 'Lịch sử chạy',
-    goBackToEdit: 'Quay lại trình soạn thảo',
+    goBackToEdit: 'Quay lại trình chỉnh sửa',
     conversationLog: 'Nhật ký cuộc trò chuyện',
     conversationLog: 'Nhật ký cuộc trò chuyện',
     features: 'Tính năng',
     features: 'Tính năng',
-    debugAndPreview: 'Debug và Xem trước',
+    debugAndPreview: 'Gỡ lỗi và xem trước',
     restart: 'Khởi động lại',
     restart: 'Khởi động lại',
     currentDraft: 'Bản nháp hiện tại',
     currentDraft: 'Bản nháp hiện tại',
     currentDraftUnpublished: 'Bản nháp hiện tại chưa xuất bản',
     currentDraftUnpublished: 'Bản nháp hiện tại chưa xuất bản',
-    latestPublished: 'Bản xuất bản mới nhất',
+    latestPublished: 'Xuất bản mới nhất',
-    publishedAt: 'Đã xuất bản lúc',
+    publishedAt: 'Đã xuất bản tại',
     restore: 'Khôi phục',
     restore: 'Khôi phục',
     runApp: 'Chạy ứng dụng',
     runApp: 'Chạy ứng dụng',
     batchRunApp: 'Chạy ứng dụng hàng loạt',
     batchRunApp: 'Chạy ứng dụng hàng loạt',
-    accessAPIReference: 'Truy cập Tài liệu API',
+    accessAPIReference: 'Truy cập tài liệu API',
     embedIntoSite: 'Nhúng vào trang web',
     embedIntoSite: 'Nhúng vào trang web',
     addTitle: 'Thêm tiêu đề...',
     addTitle: 'Thêm tiêu đề...',
     addDescription: 'Thêm mô tả...',
     addDescription: 'Thêm mô tả...',
@@ -34,135 +34,155 @@ const translation = {
     searchVar: 'Tìm kiếm biến',
     searchVar: 'Tìm kiếm biến',
     variableNamePlaceholder: 'Tên biến',
     variableNamePlaceholder: 'Tên biến',
     setVarValuePlaceholder: 'Đặt giá trị biến',
     setVarValuePlaceholder: 'Đặt giá trị biến',
-    needConnecttip: 'Bước này chưa kết nối với bất kỳ điều gì',
+    needConnecttip: 'Bước này không được kết nối với bất kỳ điều gì',
-    maxTreeDepth: 'Giới hạn tối đa của {{depth}} nút mỗi nhánh',
+    maxTreeDepth: 'Giới hạn tối đa {{depth}} nút trên mỗi nhánh',
-    needEndNode: 'Khối Kết thúc phải được thêm vào',
+    needEndNode: 'Phải thêm khối Kết thúc',
-    needAnswerNode: 'Khối Trả lời phải được thêm vào',
+    needAnswerNode: 'Phải thêm khối Trả lời',
     workflowProcess: 'Quy trình làm việc',
     workflowProcess: 'Quy trình làm việc',
     notRunning: 'Chưa chạy',
     notRunning: 'Chưa chạy',
-    previewPlaceholder: 'Nhập nội dung vào ô dưới đây để bắt đầu gỡ lỗi Chatbot',
+    previewPlaceholder: 'Nhập nội dung vào hộp bên dưới để bắt đầu gỡ lỗi Chatbot',
     effectVarConfirm: {
     effectVarConfirm: {
       title: 'Xóa biến',
       title: 'Xóa biến',
-      content: 'Biến được sử dụng trong các nút khác. Bạn vẫn muốn xóa nó?',
+      content: 'Biến được sử dụng trong các nút khác. Bạn có chắc chắn muốn xóa nó không?',
     },
     },
     insertVarTip: 'Nhấn phím \'/\' để chèn nhanh',
     insertVarTip: 'Nhấn phím \'/\' để chèn nhanh',
     processData: 'Xử lý dữ liệu',
     processData: 'Xử lý dữ liệu',
-    input: 'Nhập',
+    input: 'Đầu vào',
     output: 'Đầu ra',
     output: 'Đầu ra',
-    jinjaEditorPlaceholder: 'Nhập \'/\' hoặc \'{\' để chèn biến',
+    jinjaEditorPlaceholder: 'Gõ \'/\' hoặc \'{\' để chèn biến',
-    viewOnly: 'Chỉ Xem',
+    viewOnly: 'Chỉ xem',
-    showRunHistory: 'Hiển Thị Lịch Sử Chạy',
+    showRunHistory: 'Hiển thị lịch sử chạy',
-    enableJinja: 'Kích Hoạt Hỗ Trợ Mẫu Jinja',
+    enableJinja: 'Bật hỗ trợ mẫu Jinja',
-    learnMore: 'Tìm Hiểu Thêm',
+    learnMore: 'Tìm hiểu thêm',
-    copy: 'Sao Chép',
+    copy: 'Sao chép',
-    duplicate: 'Nhân Bản',
+    duplicate: 'Nhân bản',
-    addBlock: 'Thêm Khối',
+    addBlock: 'Thêm khối',
-    pasteHere: 'Dán Vào Đây',
+    pasteHere: 'Dán vào đây',
-    pointerMode: 'Chế Độ Con Trỏ',
+    pointerMode: 'Chế độ con trỏ',
-    handMode: 'Chế Độ Tay',
+    handMode: 'Chế độ tay',
+    model: 'Mô hình',
+    workflowAsTool: 'Quy trình làm việc như công cụ',
+    configureRequired: 'Yêu cầu cấu hình',
+    configure: 'Cấu hình',
+    manageInTools: 'Quản lý trong công cụ',
+    workflowAsToolTip: 'Cần cấu hình lại công cụ sau khi cập nhật quy trình làm việc.',
+    viewDetailInTracingPanel: 'Xem chi tiết',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} là bắt buộc',
     fieldRequired: '{{field}} là bắt buộc',
     authRequired: 'Yêu cầu xác thực',
     authRequired: 'Yêu cầu xác thực',
-    invalidJson: '{{field}} không hợp lệ',
+    invalidJson: '{{field}} là JSON không hợp lệ',
     fields: {
     fields: {
-      variable: 'Tên Biến',
+      variable: 'Tên biến',
-      variableValue: 'Giá trị Biến',
+      variableValue: 'Giá trị biến',
       code: 'Mã',
       code: 'Mã',
       model: 'Mô hình',
       model: 'Mô hình',
-      rerankModel: 'Mô hình Rerank',
+      rerankModel: 'Mô hình xếp hạng lại',
     },
     },
     invalidVariable: 'Biến không hợp lệ',
     invalidVariable: 'Biến không hợp lệ',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: 'Chạy thử ',
+    testRun: 'Chạy thử nghiệm ',
     startRun: 'Bắt đầu chạy',
     startRun: 'Bắt đầu chạy',
     running: 'Đang chạy',
     running: 'Đang chạy',
+    testRunIteration: 'Lặp chạy thử nghiệm',
+    back: 'Quay lại',
+    iteration: 'Lặp',
   },
   },
   tabs: {
   tabs: {
     'searchBlock': 'Tìm kiếm khối',
     'searchBlock': 'Tìm kiếm khối',
     'blocks': 'Khối',
     'blocks': 'Khối',
-    'builtInTool': 'Công cụ tích hợp',
+    'tools': 'Công cụ',
-    'customTool': 'Công cụ tùy chỉnh',
+    'allTool': 'Tất cả',
+    'builtInTool': 'Tích hợp sẵn',
+    'customTool': 'Tùy chỉnh',
+    'workflowTool': 'Quy trình làm việc',
     'question-understand': 'Hiểu câu hỏi',
     'question-understand': 'Hiểu câu hỏi',
     'logic': 'Logic',
     'logic': 'Logic',
     'transform': 'Chuyển đổi',
     'transform': 'Chuyển đổi',
     'utilities': 'Tiện ích',
     'utilities': 'Tiện ích',
-    'noResult': 'Không tìm thấy kết quả',
+    'noResult': 'Không tìm thấy kết quả phù hợp',
   },
   },
   blocks: {
   blocks: {
     'start': 'Bắt đầu',
     'start': 'Bắt đầu',
     'end': 'Kết thúc',
     'end': 'Kết thúc',
     'answer': 'Trả lời',
     'answer': 'Trả lời',
     'llm': 'LLM',
     'llm': 'LLM',
-    'knowledge-retrieval': 'Truy xuất Kiến thức',
+    'knowledge-retrieval': 'Truy xuất kiến thức',
-    'question-classifier': 'Bộ phân loại Câu hỏi',
+    'question-classifier': 'Phân loại câu hỏi',
     'if-else': 'NẾU/NGƯỢC LẠI',
     'if-else': 'NẾU/NGƯỢC LẠI',
     'code': 'Mã',
     'code': 'Mã',
     'template-transform': 'Mẫu',
     'template-transform': 'Mẫu',
     'http-request': 'Yêu cầu HTTP',
     'http-request': 'Yêu cầu HTTP',
-    'variable-assigner': 'Bộ gán biến',
+    'variable-assigner': 'Trình gán biến',
+    'variable-aggregator': 'Trình tổng hợp biến',
+    'iteration-start': 'Bắt đầu lặp',
+    'iteration': 'Lặp',
+    'parameter-extractor': 'Trình trích xuất tham số',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': 'Xác định các tham số ban đầu cho việc khởi chạy một quy trình',
+    'start': 'Định nghĩa các tham số ban đầu để khởi chạy quy trình làm việc',
-    'end': 'Xác định kết thúc và loại kết quả của một quy trình',
+    'end': 'Định nghĩa kết thúc và loại kết quả của quy trình làm việc',
-    'answer': 'Xác định nội dung trả lời của một cuộc trò chuyện chat',
+    'answer': 'Định nghĩa nội dung trả lời của cuộc trò chuyện',
     'llm': 'Gọi các mô hình ngôn ngữ lớn để trả lời câu hỏi hoặc xử lý ngôn ngữ tự nhiên',
     'llm': 'Gọi các mô hình ngôn ngữ lớn để trả lời câu hỏi hoặc xử lý ngôn ngữ tự nhiên',
-    'knowledge-retrieval': 'Cho phép bạn truy vấn nội dung văn bản liên quan đến các câu hỏi của người dùng từ Kiến thức',
+    'knowledge-retrieval': 'Cho phép truy vấn nội dung văn bản liên quan đến câu hỏi của người dùng từ cơ sở kiến thức',
-    'question-classifier': 'Xác định các điều kiện phân loại của các câu hỏi của người dùng, LLM có thể xác định cách cuộc trò chuyện tiến triển dựa trên mô tả phân loại',
+    'question-classifier': 'Định nghĩa các điều kiện phân loại câu hỏi của người dùng, LLM có thể định nghĩa cách cuộc trò chuyện tiến triển dựa trên mô tả phân loại',
-    'if-else': 'Cho phép bạn chia quy trình thành hai nhánh dựa trên các điều kiện if/else',
+    'if-else': 'Cho phép phân chia quy trình làm việc thành hai nhánh dựa trên điều kiện if/else',
     'code': 'Thực thi một đoạn mã Python hoặc NodeJS để thực hiện logic tùy chỉnh',
     'code': 'Thực thi một đoạn mã Python hoặc NodeJS để thực hiện logic tùy chỉnh',
-    'template-transform': 'Chuyển đổi dữ liệu thành chuỗi sử dụng cú pháp mẫu Jinja',
+    'template-transform': 'Chuyển đổi dữ liệu thành chuỗi bằng cú pháp mẫu Jinja',
     'http-request': 'Cho phép gửi các yêu cầu máy chủ qua giao thức HTTP',
     'http-request': 'Cho phép gửi các yêu cầu máy chủ qua giao thức HTTP',
-    'variable-assigner': 'Gán biến trong các nhánh khác nhau vào cùng một biến để đạt được cấu hình thống nhất của các nút sau',
+    'variable-assigner': 'Tổng hợp các biến từ nhiều nhánh thành một biến duy nhất để cấu hình đồng nhất các nút cuối.',
+    'variable-aggregator': 'Tổng hợp các biến từ nhiều nhánh thành một biến duy nhất để cấu hình đồng nhất các nút cuối.',
+    'iteration': 'Thực hiện nhiều bước trên một đối tượng danh sách cho đến khi tất cả các kết quả được xuất ra.',
+    'parameter-extractor': 'Sử dụng LLM để trích xuất các tham số có cấu trúc từ ngôn ngữ tự nhiên để gọi công cụ hoặc yêu cầu HTTP.',
   },
   },
   operator: {
   operator: {
     zoomIn: 'Phóng to',
     zoomIn: 'Phóng to',
     zoomOut: 'Thu nhỏ',
     zoomOut: 'Thu nhỏ',
-    zoomTo50: 'Thu phóng đến 50%',
+    zoomTo50: 'Phóng to 50%',
-    zoomTo100: 'Thu phóng đến 100%',
+    zoomTo100: 'Phóng to 100%',
-    zoomToFit: 'Thu phóng vừa với cửa sổ',
+    zoomToFit: 'Phóng to vừa màn hình',
   },
   },
   panel: {
   panel: {
-    userInputField: 'Trường nhập của người dùng',
+    userInputField: 'Trường đầu vào của người dùng',
-    changeBlock: 'Thay đổi Khối',
+    changeBlock: 'Thay đổi khối',
-    helpLink: 'Liên kết Trợ giúp',
+    helpLink: 'Liên kết trợ giúp',
     about: 'Về',
     about: 'Về',
-    createdBy: 'Được tạo bởi ',
+    createdBy: 'Tạo bởi ',
     nextStep: 'Bước tiếp theo',
     nextStep: 'Bước tiếp theo',
     addNextStep: 'Thêm khối tiếp theo trong quy trình làm việc này',
     addNextStep: 'Thêm khối tiếp theo trong quy trình làm việc này',
-    selectNextStep: 'Chọn Khối Tiếp theo',
+    selectNextStep: 'Chọn khối tiếp theo',
     runThisStep: 'Chạy bước này',
     runThisStep: 'Chạy bước này',
     checklist: 'Danh sách kiểm tra',
     checklist: 'Danh sách kiểm tra',
-    checklistTip: 'Đảm bảo tất cả các vấn đề được giải quyết trước khi xuất bản',
+    checklistTip: 'Đảm bảo rằng tất cả các vấn đề đã được giải quyết trước khi xuất bản',
     checklistResolved: 'Tất cả các vấn đề đã được giải quyết',
     checklistResolved: 'Tất cả các vấn đề đã được giải quyết',
-    organizeBlocks: 'Sắp xếp các khối',
+    organizeBlocks: 'Tổ chức các khối',
     change: 'Thay đổi',
     change: 'Thay đổi',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
       outputVars: 'Biến đầu ra',
       outputVars: 'Biến đầu ra',
-      insertVarTip: 'Chèn Biến',
+      insertVarTip: 'Chèn biến',
       memory: {
       memory: {
         memory: 'Bộ nhớ',
         memory: 'Bộ nhớ',
-        memoryTip: 'Cài đặt bộ nhớ trò chuyện',
+        memoryTip: 'Cài đặt bộ nhớ cuộc trò chuyện',
         windowSize: 'Kích thước cửa sổ',
         windowSize: 'Kích thước cửa sổ',
         conversationRoleName: 'Tên vai trò cuộc trò chuyện',
         conversationRoleName: 'Tên vai trò cuộc trò chuyện',
         user: 'Tiền tố người dùng',
         user: 'Tiền tố người dùng',
         assistant: 'Tiền tố trợ lý',
         assistant: 'Tiền tố trợ lý',
       },
       },
       memories: {
       memories: {
-        title: 'Các ký ức',
+        title: 'Bộ nhớ',
-        tip: 'Bộ nhớ trò chuyện',
+        tip: 'Bộ nhớ cuộc trò chuyện',
         builtIn: 'Tích hợp sẵn',
         builtIn: 'Tích hợp sẵn',
       },
       },
     },
     },
     start: {
     start: {
       required: 'bắt buộc',
       required: 'bắt buộc',
-      inputField: 'Trường nhập',
+      inputField: 'Trường đầu vào',
       builtInVar: 'Biến tích hợp sẵn',
       builtInVar: 'Biến tích hợp sẵn',
       outputVars: {
       outputVars: {
-        query: 'Đầu vào người dùng',
+        query: 'Đầu vào của người dùng',
         memories: {
         memories: {
           des: 'Lịch sử cuộc trò chuyện',
           des: 'Lịch sử cuộc trò chuyện',
           type: 'loại tin nhắn',
           type: 'loại tin nhắn',
@@ -170,7 +190,7 @@ const translation = {
         },
         },
         files: 'Danh sách tệp',
         files: 'Danh sách tệp',
       },
       },
-      noVarTip: 'Thiết lập các đầu vào có thể được sử dụng trong Quy trình làm việc',
+      noVarTip: 'Đặt các đầu vào có thể sử dụng trong Quy trình làm việc',
     },
     },
     end: {
     end: {
       outputs: 'Đầu ra',
       outputs: 'Đầu ra',
@@ -179,7 +199,7 @@ const translation = {
         variable: 'biến đầu ra',
         variable: 'biến đầu ra',
       },
       },
       type: {
       type: {
-        'none': 'Không',
+        'none': 'Không',
         'plain-text': 'Văn bản thuần',
         'plain-text': 'Văn bản thuần',
         'structured': 'Cấu trúc',
         'structured': 'Cấu trúc',
       },
       },
@@ -191,16 +211,16 @@ const translation = {
     llm: {
     llm: {
       model: 'mô hình',
       model: 'mô hình',
       variables: 'biến',
       variables: 'biến',
-      context: 'bối cảnh',
+      context: 'ngữ cảnh',
-      contextTooltip: 'Bạn có thể nhập Kiến thức dưới dạng bối cảnh',
+      contextTooltip: 'Bạn có thể nhập Kiến thức làm ngữ cảnh',
-      notSetContextInPromptTip: 'Để bật tính năng bối cảnh, vui lòng điền vào biến ngữ cảnh trong PROMPT.',
+      notSetContextInPromptTip: 'Để kích hoạt tính năng ngữ cảnh, vui lòng điền biến ngữ cảnh vào PROMPT.',
-      prompt: 'nhắc nhở',
+      prompt: 'prompt',
       roleDescription: {
       roleDescription: {
-        system: 'Đưa ra chỉ thị cấp cao cho cuộc trò chuyện',
+        system: 'Cung cấp hướng dẫn cấp cao cho cuộc trò chuyện',
-        user: 'Cung cấp chỉ thị, truy vấn hoặc bất kỳ đầu vào dựa trên văn bản nào cho mô hình',
+        user: 'Cung cấp hướng dẫn, câu hỏi hoặc bất kỳ đầu vào văn bản nào cho mô hình',
-        assistant: 'Các phản hồi của mô hình dựa trên các tin nhắn của người dùng',
+        assistant: 'Các phản hồi của mô hình dựa trên tin nhắn của người dùng',
       },
       },
-      addMessage: 'Thêm Tin nhắn',
+      addMessage: 'Thêm tin nhắn',
       vision: 'tầm nhìn',
       vision: 'tầm nhìn',
       files: 'Tệp',
       files: 'Tệp',
       resolution: {
       resolution: {
@@ -209,112 +229,110 @@ const translation = {
         low: 'Thấp',
         low: 'Thấp',
       },
       },
       outputVars: {
       outputVars: {
-        output: 'Tạo nội dung',
+        output: 'Nội dung được tạo',
-        usage: 'Thông tin Sử dụng Mô hình',
+        usage: 'Thông tin sử dụng mô hình',
       },
       },
       singleRun: {
       singleRun: {
         variable: 'Biến',
         variable: 'Biến',
       },
       },
-      sysQueryInUser: 'sys.query được yêu cầu trong tin nhắn người dùng.',
+      sysQueryInUser: 'sys.query trong tin nhắn của người dùng là bắt buộc',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
-      queryVariable: 'Biến Truy vấn',
+      queryVariable: 'Biến truy vấn',
       knowledge: 'Kiến thức',
       knowledge: 'Kiến thức',
       outputVars: {
       outputVars: {
-        output: 'Dữ liệu phân đoạn truy xuất',
+        output: 'Dữ liệu phân đoạn được truy xuất',
         content: 'Nội dung phân đoạn',
         content: 'Nội dung phân đoạn',
         title: 'Tiêu đề phân đoạn',
         title: 'Tiêu đề phân đoạn',
         icon: 'Biểu tượng phân đoạn',
         icon: 'Biểu tượng phân đoạn',
         url: 'URL phân đoạn',
         url: 'URL phân đoạn',
-        metadata: 'Các siêu dữ liệu khác',
+        metadata: 'Siêu dữ liệu khác',
       },
       },
     },
     },
     http: {
     http: {
       inputVars: 'Biến đầu vào',
       inputVars: 'Biến đầu vào',
       api: 'API',
       api: 'API',
-      apiPlaceholder: 'Nhập URL, nhập ‘/’ chèn biến',
+      apiPlaceholder: 'Nhập URL, gõ ‘/’ để chèn biến',
       notStartWithHttp: 'API phải bắt đầu bằng http:// hoặc https://',
       notStartWithHttp: 'API phải bắt đầu bằng http:// hoặc https://',
       key: 'Khóa',
       key: 'Khóa',
       value: 'Giá trị',
       value: 'Giá trị',
       bulkEdit: 'Chỉnh sửa hàng loạt',
       bulkEdit: 'Chỉnh sửa hàng loạt',
-      keyValueEdit: 'Chỉnh sửa Khóa-Giá trị',
+      keyValueEdit: 'Chỉnh sửa khóa-giá trị',
       headers: 'Tiêu đề',
       headers: 'Tiêu đề',
       params: 'Tham số',
       params: 'Tham số',
       body: 'Nội dung',
       body: 'Nội dung',
       outputVars: {
       outputVars: {
-        body: 'Nội dung Phản hồi',
+        body: 'Nội dung phản hồi',
-        statusCode: 'Mã trạng thái Phản hồi',
+        statusCode: 'Mã trạng thái phản hồi',
-        headers: 'Danh sách Tiêu đề Phản hồi JSON',
+        headers: 'Danh sách tiêu đề phản hồi JSON',
-        files: 'Danh sách Tệp',
+        files: 'Danh sách tệp',
       },
       },
       authorization: {
       authorization: {
-        'authorization': 'Xác thực',
+        'authorization': 'Ủy quyền',
-        'authorizationType': 'Loại Xác thực',
+        'authorizationType': 'Loại ủy quyền',
-        'no-auth': 'Không',
+        'no-auth': 'Không',
         'api-key': 'Khóa API',
         'api-key': 'Khóa API',
-        'auth-type': 'Loại Xác thực',
+        'auth-type': 'Loại xác thực',
         'basic': 'Cơ bản',
         'basic': 'Cơ bản',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
         'custom': 'Tùy chỉnh',
         'custom': 'Tùy chỉnh',
         'api-key-title': 'Khóa API',
         'api-key-title': 'Khóa API',
         'header': 'Tiêu đề',
         'header': 'Tiêu đề',
       },
       },
-      insertVarPlaceholder: 'nhập \'/\' để chèn biến',
+      insertVarPlaceholder: ' \'/\' để chèn biến',
       timeout: {
       timeout: {
-        title: 'Hết thời gian',
+        title: 'Thời gian chờ',
-        connectLabel: 'Hết thời gian kết nối',
+        connectLabel: 'Thời gian chờ kết nối',
-        connectPlaceholder: 'Nhập thời gian kết nối bằng giây',
+        connectPlaceholder: 'Nhập thời gian chờ kết nối tính bằng giây',
-        readLabel: 'Hết thời gian đọc',
+        readLabel: 'Thời gian chờ đọc',
-        readPlaceholder: 'Nhập thời gian đọc bằng giây',
+        readPlaceholder: 'Nhập thời gian chờ đọc tính bằng giây',
-        writeLabel: 'Hết thời gian ghi',
+        writeLabel: 'Thời gian chờ ghi',
-        writePlaceholder: 'Nhập thời gian ghi bằng giây',
+        writePlaceholder: 'Nhập thời gian chờ ghi tính bằng giây',
       },
       },
     },
     },
     code: {
     code: {
       inputVars: 'Biến đầu vào',
       inputVars: 'Biến đầu vào',
       outputVars: 'Biến đầu ra',
       outputVars: 'Biến đầu ra',
-      advancedDependencies: 'Phụ thuộc Nâng cao',
+      advancedDependencies: 'Phụ thuộc nâng cao',
-      advancedDependenciesTip: 'Thêm một số phụ thuộc đã được tải sẵn cần nhiều thời gian hơn để sử dụng hoặc không được tích hợp sẵn tại đây',
+      advancedDependenciesTip: 'Thêm một số phụ thuộc được tải trước mà tốn nhiều thời gian hoặc không phải là mặc định tại đây',
-      searchDependencies: 'Tìm Kiếm Phụ Thuộc',
+      searchDependencies: 'Tìm kiếm phụ thuộc',
-
     },
     },
     templateTransform: {
     templateTransform: {
       inputVars: 'Biến đầu vào',
       inputVars: 'Biến đầu vào',
       code: 'Mã',
       code: 'Mã',
       codeSupportTip: 'Chỉ hỗ trợ Jinja2',
       codeSupportTip: 'Chỉ hỗ trợ Jinja2',
       outputVars: {
       outputVars: {
-        output: 'Nội dung đã chuyển đổi',
+        output: 'Nội dung chuyển đổi',
       },
       },
     },
     },
     ifElse: {
     ifElse: {
       if: 'Nếu',
       if: 'Nếu',
       else: 'Ngược lại',
       else: 'Ngược lại',
-      elseDescription: 'Được sử dụng để xác định logic sẽ được thực hiện khi điều kiện if không được đáp ứng.',
+      elseDescription: 'Sử dụng để xác định logic sẽ thực hiện khi điều kiện if không được thỏa mãn.',
       and: 'và',
       and: 'và',
       or: 'hoặc',
       or: 'hoặc',
       operator: 'Toán tử',
       operator: 'Toán tử',
-      notSetVariable: 'Vui lòng thiết lập biến trước',
+      notSetVariable: 'Vui lòng đặt biến trước',
       comparisonOperator: {
       comparisonOperator: {
         'contains': 'chứa',
         'contains': 'chứa',
         'not contains': 'không chứa',
         'not contains': 'không chứa',
         'start with': 'bắt đầu bằng',
         'start with': 'bắt đầu bằng',
         'end with': 'kết thúc bằng',
         'end with': 'kết thúc bằng',
         'is': 'là',
         'is': 'là',
-        'is not': 'không phải là',
+        'is not': 'không là',
         'empty': 'trống',
         'empty': 'trống',
         'not empty': 'không trống',
         'not empty': 'không trống',
-        'null': 'null',
+        'null': 'null',
-        'not null': 'không null',
+        'not null': 'không null',
       },
       },
       enterValue: 'Nhập giá trị',
       enterValue: 'Nhập giá trị',
-      addCondition: 'Thêm Điều kiện',
+      addCondition: 'Thêm điều kiện',
-      conditionNotSetup: 'Điều kiện CHƯA được thiết lập',
+      conditionNotSetup: 'Điều kiện chưa được thiết lập',
     },
     },
     variableAssigner: {
     variableAssigner: {
       title: 'Gán biến',
       title: 'Gán biến',
       outputType: 'Loại đầu ra',
       outputType: 'Loại đầu ra',
-      outputVarType: 'Loại Biến đầu ra',
+      varNotSet: 'Biến chưa được đặt',
-      varNotSet: 'Biến không được thiết lập',
       noVarTip: 'Thêm các biến cần gán',
       noVarTip: 'Thêm các biến cần gán',
       type: {
       type: {
         string: 'Chuỗi',
         string: 'Chuỗi',
@@ -322,21 +340,25 @@ const translation = {
         object: 'Đối tượng',
         object: 'Đối tượng',
         array: 'Mảng',
         array: 'Mảng',
       },
       },
+      aggregationGroup: 'Nhóm tổng hợp',
+      aggregationGroupTip: 'Bật tính năng này cho phép trình tổng hợp biến tổng hợp nhiều bộ biến.',
+      addGroup: 'Thêm nhóm',
       outputVars: {
       outputVars: {
-        output: 'Giá trị biến được gán',
+        varDescribe: 'Đầu ra {{groupName}}',
       },
       },
+      setAssignVariable: 'Đặt biến gán',
     },
     },
     tool: {
     tool: {
-      toAuthorize: 'Để ủy quyền',
+      toAuthorize: 'y quyền',
       inputVars: 'Biến đầu vào',
       inputVars: 'Biến đầu vào',
       outputVars: {
       outputVars: {
-        text: 'nội dung được tạo ra bởi công cụ',
+        text: 'nội dung do công cụ tạo ra',
         files: {
         files: {
-          title: 'tệp được tạo ra bởi công cụ',
+          title: 'tệp do công cụ tạo ra',
-          type: 'Loại hỗ trợ. Hiện chỉ hỗ trợ hình ảnh',
+          type: 'Loại hỗ trợ. Hiện tại chỉ hỗ trợ hình ảnh',
-          transfer_method: 'Phương pháp chuyển. Giá trị là remote_url hoặc local_file',
+          transfer_method: 'Phương pháp truyền. Giá trị là remote_url hoặc local_file',
-          url: 'URL Hình ảnh',
+          url: 'URL hình ảnh',
-          upload_file_id: 'ID tệp tải lên',
+          upload_file_id: 'ID tệp đã tải lên',
         },
         },
       },
       },
     },
     },
@@ -344,20 +366,54 @@ const translation = {
       model: 'mô hình',
       model: 'mô hình',
       inputVars: 'Biến đầu vào',
       inputVars: 'Biến đầu vào',
       outputVars: {
       outputVars: {
-        className: 'Tên phân loại',
+        className: 'Tên lớp',
       },
       },
       class: 'Lớp',
       class: 'Lớp',
       classNamePlaceholder: 'Viết tên lớp của bạn',
       classNamePlaceholder: 'Viết tên lớp của bạn',
-      advancedSetting: 'Cài đặt Nâng cao',
+      advancedSetting: 'Cài đặt nâng cao',
-      topicName: 'Tên Chủ đề',
+      topicName: 'Tên chủ đề',
       topicPlaceholder: 'Viết tên chủ đề của bạn',
       topicPlaceholder: 'Viết tên chủ đề của bạn',
-      addClass: 'Thêm Lớp',
+      addClass: 'Thêm lớp',
       instruction: 'Hướng dẫn',
       instruction: 'Hướng dẫn',
+      instructionTip: 'Nhập hướng dẫn bổ sung để giúp trình phân loại câu hỏi hiểu rõ hơn về cách phân loại câu hỏi.',
       instructionPlaceholder: 'Viết hướng dẫn của bạn',
       instructionPlaceholder: 'Viết hướng dẫn của bạn',
     },
     },
+    parameterExtractor: {
+      inputVar: 'Biến đầu vào',
+      extractParameters: 'Trích xuất tham số',
+      importFromTool: 'Nhập từ công cụ',
+      addExtractParameter: 'Thêm tham số trích xuất',
+      addExtractParameterContent: {
+        name: 'Tên',
+        namePlaceholder: 'Tên tham số trích xuất',
+        type: 'Loại',
+        typePlaceholder: 'Loại tham số trích xuất',
+        description: 'Mô tả',
+        descriptionPlaceholder: 'Mô tả tham số trích xuất',
+        required: 'Bắt buộc',
+        requiredContent: 'Bắt buộc chỉ được sử dụng làm tài liệu tham khảo cho suy luận mô hình và không phải để xác thực bắt buộc của đầu ra tham số.',
+      },
+      extractParametersNotSet: 'Tham số trích xuất chưa được thiết lập',
+      instruction: 'Hướng dẫn',
+      instructionTip: 'Nhập hướng dẫn bổ sung để giúp trình trích xuất tham số hiểu rõ hơn về cách trích xuất tham số.',
+      advancedSetting: 'Cài đặt nâng cao',
+      reasoningMode: 'Chế độ suy luận',
+      reasoningModeTip: 'Bạn có thể chọn chế độ suy luận phù hợp dựa trên khả năng của mô hình để phản hồi các hướng dẫn về việc gọi hàm hoặc prompt.',
+      isSuccess: 'Thành công. Khi thành công giá trị là 1, khi thất bại giá trị là 0.',
+      errorReason: 'Lý do lỗi',
+    },
+    iteration: {
+      deleteTitle: 'Xóa nút lặp?',
+      deleteDesc: 'Xóa nút lặp sẽ xóa tất cả các nút con',
+      input: 'Đầu vào',
+      output: 'Biến đầu ra',
+      iteration_one: '{{count}} Lặp',
+      iteration_other: '{{count}} Lặp',
+      currentIteration: 'Lặp hiện tại',
+    },
   },
   },
   tracing: {
   tracing: {
-    stopBy: 'Dừng lại bởi {{user}}',
+    stopBy: 'Dừng bởi {{user}}',
   },
   },
 }
 }
 
 

+ 195 - 138
web/i18n/zh-Hant/workflow.ts

@@ -1,89 +1,102 @@
 const translation = {
 const translation = {
   common: {
   common: {
     editing: '編輯中',
     editing: '編輯中',
-    autoSaved: '自動存',
+    autoSaved: '自動存',
-    unpublished: '未釋出',
+    unpublished: '未發佈',
-    published: '已釋出',
+    published: '已發佈',
-    publish: '釋出',
+    publish: '發佈',
     update: '更新',
     update: '更新',
-    run: '行',
+    run: '行',
-    running: '行中',
+    running: '行中',
-    inRunMode: '在行模式中',
+    inRunMode: '在行模式中',
     inPreview: '預覽中',
     inPreview: '預覽中',
     inPreviewMode: '預覽中',
     inPreviewMode: '預覽中',
     preview: '預覽',
     preview: '預覽',
-    viewRunHistory: '檢視執行歷史',
+    viewRunHistory: '查看運行歷史',
-    runHistory: '行歷史',
+    runHistory: '行歷史',
     goBackToEdit: '返回編輯模式',
     goBackToEdit: '返回編輯模式',
     conversationLog: '對話記錄',
     conversationLog: '對話記錄',
     features: '功能',
     features: '功能',
-    debugAndPreview: '除錯和預覽',
+    debugAndPreview: '調試和預覽',
     restart: '重新開始',
     restart: '重新開始',
     currentDraft: '當前草稿',
     currentDraft: '當前草稿',
-    currentDraftUnpublished: '當前草稿未釋出',
+    currentDraftUnpublished: '當前草稿未發佈',
-    latestPublished: '最新發',
+    latestPublished: '最新發',
-    publishedAt: '釋出於',
+    publishedAt: '發佈於',
     restore: '恢復',
     restore: '恢復',
-    runApp: '行',
+    runApp: '行',
-    batchRunApp: '批次執行',
+    batchRunApp: '批量運行',
     accessAPIReference: '訪問 API',
     accessAPIReference: '訪問 API',
     embedIntoSite: '嵌入網站',
     embedIntoSite: '嵌入網站',
-    addTitle: '新增標題...',
+    addTitle: '添加標題...',
-    addDescription: '新增描述...',
+    addDescription: '添加描述...',
-    noVar: '沒有變',
+    noVar: '沒有變',
-    variableNamePlaceholder: '變名',
+    variableNamePlaceholder: '變名',
-    searchVar: '搜尋變數',
+    searchVar: '搜索變量',
-    setVarValuePlaceholder: '設定變數值',
+    setVarValuePlaceholder: '設置變量值',
-    needConnecttip: '此節點尚未連到其他節點',
+    needConnecttip: '此節點尚未連到其他節點',
     maxTreeDepth: '每個分支最大限制 {{depth}} 個節點',
     maxTreeDepth: '每個分支最大限制 {{depth}} 個節點',
-    needEndNode: '必須新增結束節點',
+    needEndNode: '必須添加結束節點',
-    needAnswerNode: '必須新增直接回復節點',
+    needAnswerNode: '必須添加直接回覆節點',
     workflowProcess: '工作流',
     workflowProcess: '工作流',
-    notRunning: '尚未行',
+    notRunning: '尚未行',
-    previewPlaceholder: '在下面的框中輸入內容開始除錯聊天機器人',
+    previewPlaceholder: '在下面的框中輸入內容開始調試聊天機器人',
     effectVarConfirm: {
     effectVarConfirm: {
-      title: '移除變',
+      title: '移除變',
-      content: '該變在其他節點中使用。您是否仍要刪除它?',
+      content: '該變在其他節點中使用。您是否仍要刪除它?',
     },
     },
     insertVarTip: '按 \'/\' 鍵快速插入',
     insertVarTip: '按 \'/\' 鍵快速插入',
-    processData: '資料處理',
+    processData: '數據處理',
     input: '輸入',
     input: '輸入',
     output: '輸出',
     output: '輸出',
-    jinjaEditorPlaceholder: '输入 “/” 或 “{” 插入变量',
+    jinjaEditorPlaceholder: '輸入 “/” 或 “{” 插入變量',
-    viewOnly: '只',
+    viewOnly: '只',
-    showRunHistory: '显示运行历史',
+    showRunHistory: '顯示運行歷史',
-    enableJinja: '开启支持 Jinja 模板',
+    enableJinja: '開啟支持 Jinja 模板',
     learnMore: '了解更多',
     learnMore: '了解更多',
-    copy: '拷',
+    copy: '拷',
-    duplicate: '复制',
+    duplicate: '複製',
-    addBlock: '添加节点',
+    addBlock: '添加節點',
-    pasteHere: '粘贴到这里',
+    pasteHere: '粘貼到這裡',
-    pointerMode: '指模式',
+    pointerMode: '指模式',
     handMode: '手模式',
     handMode: '手模式',
+    model: '模型',
+    workflowAsTool: '發佈為工具',
+    configureRequired: '需要進行配置',
+    configure: '配置',
+    manageInTools: '訪問工具頁',
+    workflowAsToolTip: '工作流更新後需要重新配置工具參數',
+    viewDetailInTracingPanel: '查看詳細信息',
   },
   },
   errorMsg: {
   errorMsg: {
     fieldRequired: '{{field}} 不能為空',
     fieldRequired: '{{field}} 不能為空',
     authRequired: '請先授權',
     authRequired: '請先授權',
     invalidJson: '{{field}} 是非法的 JSON',
     invalidJson: '{{field}} 是非法的 JSON',
     fields: {
     fields: {
-      variable: '變數名',
+      variable: '變名',
-      variableValue: '變值',
+      variableValue: '變值',
-      code: '程式碼',
+      code: '碼',
       model: '模型',
       model: '模型',
       rerankModel: 'Rerank 模型',
       rerankModel: 'Rerank 模型',
     },
     },
-    invalidVariable: '無效的變',
+    invalidVariable: '無效的變',
   },
   },
   singleRun: {
   singleRun: {
-    testRun: '測試執行 ',
+    testRun: '測試運行',
-    startRun: '開始執行',
+    startRun: '開始運行',
-    running: '執行中',
+    running: '運行中',
+    testRunIteration: '測試運行迭代',
+    back: '返回',
+    iteration: '迭代',
   },
   },
   tabs: {
   tabs: {
-    'searchBlock': '搜尋節點',
+    'searchBlock': '搜節點',
     'blocks': '節點',
     'blocks': '節點',
-    'builtInTool': '內建工具',
+    'tools': '工具',
-    'customTool': '自定義工具',
+    'allTool': '全部',
+    'builtInTool': '內置',
+    'customTool': '自定義',
+    'workflowTool': '工作流',
     'question-understand': '問題理解',
     'question-understand': '問題理解',
     'logic': '邏輯',
     'logic': '邏輯',
     'transform': '轉換',
     'transform': '轉換',
@@ -93,150 +106,157 @@ const translation = {
   blocks: {
   blocks: {
     'start': '開始',
     'start': '開始',
     'end': '結束',
     'end': '結束',
-    'answer': '直接回',
+    'answer': '直接回',
     'llm': 'LLM',
     'llm': 'LLM',
     'knowledge-retrieval': '知識檢索',
     'knowledge-retrieval': '知識檢索',
     'question-classifier': '問題分類器',
     'question-classifier': '問題分類器',
     'if-else': '條件分支',
     'if-else': '條件分支',
-    'code': '程式碼執行',
+    'code': '碼執行',
     'template-transform': '模板轉換',
     'template-transform': '模板轉換',
     'http-request': 'HTTP 請求',
     'http-request': 'HTTP 請求',
-    'variable-assigner': '變數賦值',
+    'variable-assigner': '變量聚合器',
+    'variable-aggregator': '變量聚合器',
+    'iteration-start': '迭代開始',
+    'iteration': '迭代',
+    'parameter-extractor': '參數提取器',
   },
   },
   blocksAbout: {
   blocksAbout: {
-    'start': '定義一個 workflow 流程啟動的初始引數',
+    'start': '定義一個 workflow 流程啟動的初始數',
-    'end': '定義一個 workflow 流程的結束和結果型別',
+    'end': '定義一個 workflow 流程的結束和結果型',
     'answer': '定義一個聊天對話的回覆內容',
     'answer': '定義一個聊天對話的回覆內容',
-    'llm': '呼叫大語言模型回答問題或者對自然語言進行處理',
+    'llm': '調用大語言模型回答問題或者對自然語言進行處理',
-    'knowledge-retrieval': '允許你從知識庫中查詢與使用者問題相關的文字內容',
+    'knowledge-retrieval': '允許你從知識庫中查詢與用戶問題相關的文本內容',
-    'question-classifier': '定義使用者問題的分類條件,LLM 能夠根據分類描述定義對話的進展方式',
+    'question-classifier': '定義用戶問題的分類條件,LLM 能夠根據分類描述定義對話的進展方式',
     'if-else': '允許你根據 if/else 條件將 workflow 拆分成兩個分支',
     'if-else': '允許你根據 if/else 條件將 workflow 拆分成兩個分支',
-    'code': '執行一段 Python 或 NodeJS 程式碼實現自定義邏輯',
+    'code': '執行一段 Python 或 NodeJS 代碼實現自定義邏輯',
-    'template-transform': '使用 Jinja 模板語法將資料轉換為字串',
+    'template-transform': '使用 Jinja 模板語法將數據轉換為字符串',
-    'http-request': '允許透過 HTTP 協議傳送伺服器請求',
+    'http-request': '允許通過 HTTP 協議發送服務器請求',
-    'variable-assigner': '將不同分支中的變數指派給同一個變數,以實現後置節點統一配置',
+    'variable-assigner': '將多路分支的變量聚合為一個變量,以實現下游節點統一配置。',
+    'variable-aggregator': '將多路分支的變量聚合為一個變量,以實現下游節點統一配置。',
+    'iteration': '對列表對象執行多次步驟直至輸出所有結果。',
+    'parameter-extractor': '利用 LLM 從自然語言內推理提取出結構化參數,用於後置的工具調用或 HTTP 請求。',
   },
   },
   operator: {
   operator: {
     zoomIn: '放大',
     zoomIn: '放大',
     zoomOut: '縮小',
     zoomOut: '縮小',
     zoomTo50: '縮放到 50%',
     zoomTo50: '縮放到 50%',
     zoomTo100: '放大到 100%',
     zoomTo100: '放大到 100%',
-    zoomToFit: '自適應視',
+    zoomToFit: '自適應視',
   },
   },
   panel: {
   panel: {
-    userInputField: '使用者輸入欄位',
+    userInputField: '用戶輸入字段',
     changeBlock: '更改節點',
     changeBlock: '更改節點',
-    helpLink: '幫助連結',
+    helpLink: '幫助鏈接',
     about: '關於',
     about: '關於',
     createdBy: '作者',
     createdBy: '作者',
     nextStep: '下一步',
     nextStep: '下一步',
-    addNextStep: '新增此工作流程中的下一個節點',
+    addNextStep: '添加此工作流程中的下一個節點',
     selectNextStep: '選擇下一個節點',
     selectNextStep: '選擇下一個節點',
-    runThisStep: '行此步驟',
+    runThisStep: '行此步驟',
     checklist: '檢查清單',
     checklist: '檢查清單',
-    checklistTip: '釋出前確保所有問題均已解決',
+    checklistTip: '發佈前確保所有問題均已解決',
     checklistResolved: '所有問題均已解決',
     checklistResolved: '所有問題均已解決',
     organizeBlocks: '整理節點',
     organizeBlocks: '整理節點',
     change: '更改',
     change: '更改',
   },
   },
   nodes: {
   nodes: {
     common: {
     common: {
-      outputVars: '輸出變',
+      outputVars: '輸出變',
-      insertVarTip: '插入變',
+      insertVarTip: '插入變',
       memory: {
       memory: {
         memory: '記憶',
         memory: '記憶',
-        memoryTip: '聊天記憶設',
+        memoryTip: '聊天記憶設',
-        windowSize: '記憶窗',
+        windowSize: '記憶窗',
         conversationRoleName: '對話角色名',
         conversationRoleName: '對話角色名',
-        user: '使用者字首',
+        user: '用戶前綴',
-        assistant: '助手字首',
+        assistant: '助手前綴',
       },
       },
       memories: {
       memories: {
         title: '記憶',
         title: '記憶',
         tip: '聊天記憶',
         tip: '聊天記憶',
-        builtIn: '內',
+        builtIn: '內',
       },
       },
     },
     },
     start: {
     start: {
       required: '必填',
       required: '必填',
-      inputField: '輸入欄位',
+      inputField: '輸入字段',
-      builtInVar: '內建變數',
+      builtInVar: '內置變量',
       outputVars: {
       outputVars: {
-        query: '使用者輸入',
+        query: '用戶輸入',
         memories: {
         memories: {
           des: '會話歷史',
           des: '會話歷史',
-          type: '訊息型別',
+          type: '消息類型',
-          content: '息內容',
+          content: '息內容',
         },
         },
-        files: '檔案列表',
+        files: '文件列表',
       },
       },
-      noVarTip: '設的輸入可在工作流程中使用',
+      noVarTip: '設的輸入可在工作流程中使用',
     },
     },
     end: {
     end: {
       outputs: '輸出',
       outputs: '輸出',
       output: {
       output: {
-        type: '輸出型',
+        type: '輸出型',
-        variable: '輸出變',
+        variable: '輸出變',
       },
       },
       type: {
       type: {
         'none': '無',
         'none': '無',
-        'plain-text': '純文',
+        'plain-text': '純文',
         'structured': '結構化',
         'structured': '結構化',
       },
       },
     },
     },
     answer: {
     answer: {
       answer: '回覆',
       answer: '回覆',
-      outputVars: '輸出變',
+      outputVars: '輸出變',
     },
     },
     llm: {
     llm: {
       model: '模型',
       model: '模型',
-      variables: '變',
+      variables: '變',
       context: '上下文',
       context: '上下文',
-      contextTooltip: '您可以入知識庫作為上下文',
+      contextTooltip: '您可以入知識庫作為上下文',
-      notSetContextInPromptTip: '要啟用上下文功能,請在提示中填寫上下文變。',
+      notSetContextInPromptTip: '要啟用上下文功能,請在提示中填寫上下文變。',
       prompt: '提示詞',
       prompt: '提示詞',
-      addMessage: '新增訊息',
+      addMessage: '添加消息',
       roleDescription: {
       roleDescription: {
         system: '為對話提供高層指導',
         system: '為對話提供高層指導',
-        user: '向模型提供指令、查詢或任何基於文的輸入',
+        user: '向模型提供指令、查詢或任何基於文的輸入',
-        assistant: '基於使用者訊息的模型回覆',
+        assistant: '基於用戶消息的模型回覆',
       },
       },
       vision: '視覺',
       vision: '視覺',
-      files: '檔案',
+      files: '文件',
       resolution: {
       resolution: {
-        name: '解析度',
+        name: '分辨率',
         high: '高',
         high: '高',
         low: '低',
         low: '低',
       },
       },
       outputVars: {
       outputVars: {
         output: '生成內容',
         output: '生成內容',
-        usage: '模型用量資訊',
+        usage: '模型用量信息',
       },
       },
       singleRun: {
       singleRun: {
-        variable: '變',
+        variable: '變',
       },
       },
       sysQueryInUser: 'user message 中必須包含 sys.query',
       sysQueryInUser: 'user message 中必須包含 sys.query',
     },
     },
     knowledgeRetrieval: {
     knowledgeRetrieval: {
-      queryVariable: '查詢變',
+      queryVariable: '查詢變',
       knowledge: '知識庫',
       knowledge: '知識庫',
       outputVars: {
       outputVars: {
         output: '召回的分段',
         output: '召回的分段',
         content: '分段內容',
         content: '分段內容',
         title: '分段標題',
         title: '分段標題',
-        icon: '分段圖',
+        icon: '分段圖',
-        url: '分段連結',
+        url: '分段鏈接',
-        metadata: '其他元資料',
+        metadata: '其他元數據',
       },
       },
     },
     },
     http: {
     http: {
-      inputVars: '輸入變',
+      inputVars: '輸入變',
       api: 'API',
       api: 'API',
-      apiPlaceholder: '輸入 URL,輸入變時請鍵入‘/’',
+      apiPlaceholder: '輸入 URL,輸入變時請鍵入‘/’',
       notStartWithHttp: 'API 應該以 http:// 或 https:// 開頭',
       notStartWithHttp: 'API 應該以 http:// 或 https:// 開頭',
       key: '鍵',
       key: '鍵',
       value: '值',
       value: '值',
-      bulkEdit: '批編輯',
+      bulkEdit: '批編輯',
       keyValueEdit: '鍵值編輯',
       keyValueEdit: '鍵值編輯',
       headers: 'Headers',
       headers: 'Headers',
       params: 'Params',
       params: 'Params',
@@ -245,42 +265,42 @@ const translation = {
         body: '響應內容',
         body: '響應內容',
         statusCode: '響應狀態碼',
         statusCode: '響應狀態碼',
         headers: '響應頭列表 JSON',
         headers: '響應頭列表 JSON',
-        files: '檔案列表',
+        files: '文件列表',
       },
       },
       authorization: {
       authorization: {
         'authorization': '鑑權',
         'authorization': '鑑權',
-        'authorizationType': '鑑權型',
+        'authorizationType': '鑑權型',
         'no-auth': '無',
         'no-auth': '無',
         'api-key': 'API-Key',
         'api-key': 'API-Key',
-        'auth-type': 'API 鑑權型',
+        'auth-type': 'API 鑑權型',
         'basic': '基礎',
         'basic': '基礎',
         'bearer': 'Bearer',
         'bearer': 'Bearer',
         'custom': '自定義',
         'custom': '自定義',
         'api-key-title': 'API Key',
         'api-key-title': 'API Key',
         'header': 'Header',
         'header': 'Header',
       },
       },
-      insertVarPlaceholder: '鍵入 \'/\' 鍵快速插入變',
+      insertVarPlaceholder: '鍵入 \'/\' 鍵快速插入變',
       timeout: {
       timeout: {
-        title: '超时设置',
+        title: '超時設置',
-        connectLabel: '连接超时',
+        connectLabel: '連接超時',
-        connectPlaceholder: '输入连接超时(以秒为单位)',
+        connectPlaceholder: '輸入連接超時(以秒為單位)',
-        readLabel: '读取超时',
+        readLabel: '讀取超時',
-        readPlaceholder: '输入读取超时(以秒为单位)',
+        readPlaceholder: '輸入讀取超時(以秒為單位)',
-        writeLabel: '写入超时',
+        writeLabel: '寫入超時',
-        writePlaceholder: '输入写入超时(以秒为单位)',
+        writePlaceholder: '輸入寫入超時(以秒為單位)',
       },
       },
     },
     },
     code: {
     code: {
-      inputVars: '輸入變',
+      inputVars: '輸入變',
-      outputVars: '輸出變',
+      outputVars: '輸出變',
-      advancedDependencies: '高级依赖',
+      advancedDependencies: '高級依賴',
-      advancedDependenciesTip: '在这里添加一些预加载需要消耗较多时间或非默认内置的依赖包',
+      advancedDependenciesTip: '在這裡添加一些預加載需要消耗較多時間或非默認內置的依賴包',
-      searchDependencies: '搜索依',
+      searchDependencies: '搜索依',
     },
     },
     templateTransform: {
     templateTransform: {
-      inputVars: '輸入變',
+      inputVars: '輸入變',
-      code: '程式碼',
+      code: '碼',
-      codeSupportTip: '只支 Jinja2',
+      codeSupportTip: '只支 Jinja2',
       outputVars: {
       outputVars: {
         output: '轉換後內容',
         output: '轉換後內容',
       },
       },
@@ -291,8 +311,8 @@ const translation = {
       elseDescription: '用於定義當 if 條件不滿足時應執行的邏輯。',
       elseDescription: '用於定義當 if 條件不滿足時應執行的邏輯。',
       and: 'and',
       and: 'and',
       or: 'or',
       or: 'or',
-      operator: '運算子',
+      operator: '操作符',
-      notSetVariable: '請先設定變數',
+      notSetVariable: '請先設置變量',
       comparisonOperator: {
       comparisonOperator: {
         'contains': '包含',
         'contains': '包含',
         'not contains': '不包含',
         'not contains': '不包含',
@@ -306,54 +326,91 @@ const translation = {
         'not null': '不為空',
         'not null': '不為空',
       },
       },
       enterValue: '輸入值',
       enterValue: '輸入值',
-      addCondition: '新增條件',
+      addCondition: '添加條件',
-      conditionNotSetup: '條件未設',
+      conditionNotSetup: '條件未設',
     },
     },
     variableAssigner: {
     variableAssigner: {
-      title: '變數賦值',
+      title: '變量賦值',
-      outputType: '輸出型別',
+      outputType: '輸出類型',
-      outputVarType: '輸出變數型別',
+      varNotSet: '未設置變量',
-      varNotSet: '未設定變數',
+      noVarTip: '添加需要賦值的變量',
-      noVarTip: '新增需要賦值的變數',
       type: {
       type: {
         string: 'String',
         string: 'String',
         number: 'Number',
         number: 'Number',
         object: 'Object',
         object: 'Object',
         array: 'Array',
         array: 'Array',
       },
       },
+      aggregationGroup: '聚合分組',
+      aggregationGroupTip: '開啟該功能後,變量聚合器內可以同時聚合多組變量',
+      addGroup: '添加分組',
       outputVars: {
       outputVars: {
-        output: '指派的變數值',
+        varDescribe: '{{groupName}}的輸出變量',
       },
       },
+      setAssignVariable: '設置賦值變量',
     },
     },
     tool: {
     tool: {
       toAuthorize: '授權',
       toAuthorize: '授權',
-      inputVars: '輸入變',
+      inputVars: '輸入變',
       outputVars: {
       outputVars: {
         text: '工具生成的內容',
         text: '工具生成的內容',
         files: {
         files: {
-          title: '工具生成的檔案',
+          title: '工具生成的文件',
-          type: '支援型別。現在只支援圖片',
+          type: '支持類型。現在只支持圖片',
           transfer_method: '傳輸方式。值為 remote_url 或 local_file',
           transfer_method: '傳輸方式。值為 remote_url 或 local_file',
-          url: '圖片連結',
+          url: '圖片鏈接',
-          upload_file_id: '上傳檔案ID',
+          upload_file_id: '上傳文件ID',
         },
         },
       },
       },
     },
     },
     questionClassifiers: {
     questionClassifiers: {
       model: '模型',
       model: '模型',
-      inputVars: '輸入變',
+      inputVars: '輸入變',
       outputVars: {
       outputVars: {
         className: '分類名稱',
         className: '分類名稱',
       },
       },
       class: '分類',
       class: '分類',
       classNamePlaceholder: '輸入你的分類名稱',
       classNamePlaceholder: '輸入你的分類名稱',
-      advancedSetting: '高階設定',
+      advancedSetting: '高級設置',
       topicName: '主題內容',
       topicName: '主題內容',
       topicPlaceholder: '在這裡輸入你的主題內容',
       topicPlaceholder: '在這裡輸入你的主題內容',
-      addClass: '新增分類',
+      addClass: '添加分類',
       instruction: '指令',
       instruction: '指令',
+      instructionTip: '你可以輸入額外的附加指令,幫助問題分類器更好的理解如何分類',
       instructionPlaceholder: '在這裡輸入你的指令',
       instructionPlaceholder: '在這裡輸入你的指令',
     },
     },
+    parameterExtractor: {
+      inputVar: '輸入變量',
+      extractParameters: '提取參數',
+      importFromTool: '從工具導入',
+      addExtractParameter: '添加提取參數',
+      addExtractParameterContent: {
+        name: '名稱',
+        namePlaceholder: '提取參數名稱',
+        type: '類型',
+        typePlaceholder: '提取參數類型',
+        description: '描述',
+        descriptionPlaceholder: '提取參數描述',
+        required: '必填',
+        requiredContent: '必填僅作為模型推理的參考,不用於參數輸出的強制驗證。',
+      },
+      extractParametersNotSet: '提取參數未設置',
+      instruction: '指令',
+      instructionTip: '你可以輸入額外的附加指令,幫助參數提取器理解如何提取參數',
+      advancedSetting: '高級設置',
+      reasoningMode: '推理模式',
+      reasoningModeTip: '你可以根據模型對於 Function calling 或 Prompt 的指令響應能力選擇合適的推理模式',
+      isSuccess: '是否成功。成功時值為 1,失敗時值為 0。',
+      errorReason: '錯誤原因',
+    },
+    iteration: {
+      deleteTitle: '刪除迭代節點?',
+      deleteDesc: '刪除迭代節點將刪除所有子節點',
+      input: '輸入',
+      output: '輸出變量',
+      iteration_one: '{{count}}個迭代',
+      iteration_other: '{{count}}個迭代',
+      currentIteration: '當前迭代',
+    },
   },
   },
   tracing: {
   tracing: {
     stopBy: '由{{user}}終止',
     stopBy: '由{{user}}終止',