Преглед изворни кода

chore: translate i18n files (#7965)

Co-authored-by: JohnJyong <76649700+JohnJyong@users.noreply.github.com>
Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
Co-authored-by: Hanqing Zhao <sherry9277@gmail.com>
Co-authored-by: crazywoola <427733928@qq.com>
github-actions[bot] пре 7 месеци
родитељ
комит
fb113a9479
100 измењених фајлова са 2478 додато и 1368 уклоњено
  1. 87 87
      web/i18n/de-DE/app-annotation.ts
  2. 82 81
      web/i18n/de-DE/app-api.ts
  3. 95 89
      web/i18n/de-DE/app-log.ts
  4. 12 0
      web/i18n/de-DE/app-overview.ts
  5. 145 107
      web/i18n/de-DE/app.ts
  6. 118 115
      web/i18n/de-DE/billing.ts
  7. 39 0
      web/i18n/de-DE/common.ts
  8. 30 30
      web/i18n/de-DE/custom.ts
  9. 161 130
      web/i18n/de-DE/dataset-creation.ts
  10. 352 349
      web/i18n/de-DE/dataset-documents.ts
  11. 28 28
      web/i18n/de-DE/dataset-hit-testing.ts
  12. 35 33
      web/i18n/de-DE/dataset-settings.ts
  13. 76 76
      web/i18n/de-DE/dataset.ts
  14. 41 41
      web/i18n/de-DE/explore.ts
  15. 2 0
      web/i18n/de-DE/login.ts
  16. 1 0
      web/i18n/de-DE/run-log.ts
  17. 74 74
      web/i18n/de-DE/share-app.ts
  18. 153 119
      web/i18n/de-DE/tools.ts
  19. 29 0
      web/i18n/de-DE/workflow.ts
  20. 8 0
      web/i18n/es-ES/app-overview.ts
  21. 10 0
      web/i18n/es-ES/app.ts
  22. 5 0
      web/i18n/es-ES/workflow.ts
  23. 8 0
      web/i18n/fa-IR/app-overview.ts
  24. 6 0
      web/i18n/fa-IR/app.ts
  25. 1 0
      web/i18n/fa-IR/workflow.ts
  26. 1 0
      web/i18n/fr-FR/app-api.ts
  27. 8 0
      web/i18n/fr-FR/app-overview.ts
  28. 10 0
      web/i18n/fr-FR/app.ts
  29. 3 0
      web/i18n/fr-FR/billing.ts
  30. 34 0
      web/i18n/fr-FR/common.ts
  31. 31 0
      web/i18n/fr-FR/dataset-creation.ts
  32. 3 0
      web/i18n/fr-FR/dataset-documents.ts
  33. 2 0
      web/i18n/fr-FR/dataset-settings.ts
  34. 2 0
      web/i18n/fr-FR/login.ts
  35. 34 0
      web/i18n/fr-FR/tools.ts
  36. 2 0
      web/i18n/fr-FR/workflow.ts
  37. 4 0
      web/i18n/hi-IN/app-log.ts
  38. 8 0
      web/i18n/hi-IN/app-overview.ts
  39. 10 0
      web/i18n/hi-IN/app.ts
  40. 5 0
      web/i18n/hi-IN/common.ts
  41. 2 0
      web/i18n/hi-IN/dataset-settings.ts
  42. 1 0
      web/i18n/hi-IN/share-app.ts
  43. 1 0
      web/i18n/hi-IN/tools.ts
  44. 9 0
      web/i18n/hi-IN/workflow.ts
  45. 8 0
      web/i18n/it-IT/app-overview.ts
  46. 10 0
      web/i18n/it-IT/app.ts
  47. 1 0
      web/i18n/it-IT/workflow.ts
  48. 16 8
      web/i18n/ja-JP/app-overview.ts
  49. 6 0
      web/i18n/ja-JP/app.ts
  50. 1 0
      web/i18n/ja-JP/dataset.ts
  51. 1 0
      web/i18n/ja-JP/workflow.ts
  52. 11 0
      web/i18n/ko-KR/app-overview.ts
  53. 10 0
      web/i18n/ko-KR/app.ts
  54. 5 0
      web/i18n/ko-KR/billing.ts
  55. 34 0
      web/i18n/ko-KR/common.ts
  56. 31 0
      web/i18n/ko-KR/dataset-creation.ts
  57. 3 0
      web/i18n/ko-KR/dataset-documents.ts
  58. 2 0
      web/i18n/ko-KR/dataset-settings.ts
  59. 2 0
      web/i18n/ko-KR/login.ts
  60. 29 0
      web/i18n/ko-KR/workflow.ts
  61. 8 0
      web/i18n/pl-PL/app-overview.ts
  62. 10 0
      web/i18n/pl-PL/app.ts
  63. 3 0
      web/i18n/pl-PL/billing.ts
  64. 34 0
      web/i18n/pl-PL/common.ts
  65. 31 0
      web/i18n/pl-PL/dataset-creation.ts
  66. 3 0
      web/i18n/pl-PL/dataset-documents.ts
  67. 2 0
      web/i18n/pl-PL/dataset-settings.ts
  68. 1 0
      web/i18n/pl-PL/login.ts
  69. 34 0
      web/i18n/pl-PL/tools.ts
  70. 29 0
      web/i18n/pl-PL/workflow.ts
  71. 4 0
      web/i18n/pt-BR/app-api.ts
  72. 7 0
      web/i18n/pt-BR/app-log.ts
  73. 8 0
      web/i18n/pt-BR/app-overview.ts
  74. 10 0
      web/i18n/pt-BR/app.ts
  75. 10 0
      web/i18n/pt-BR/billing.ts
  76. 34 0
      web/i18n/pt-BR/common.ts
  77. 31 0
      web/i18n/pt-BR/dataset-creation.ts
  78. 3 0
      web/i18n/pt-BR/dataset-documents.ts
  79. 2 0
      web/i18n/pt-BR/dataset-settings.ts
  80. 1 0
      web/i18n/pt-BR/dataset.ts
  81. 4 0
      web/i18n/pt-BR/login.ts
  82. 34 0
      web/i18n/pt-BR/tools.ts
  83. 29 0
      web/i18n/pt-BR/workflow.ts
  84. 11 0
      web/i18n/ro-RO/app-overview.ts
  85. 10 0
      web/i18n/ro-RO/app.ts
  86. 3 0
      web/i18n/ro-RO/billing.ts
  87. 35 0
      web/i18n/ro-RO/common.ts
  88. 31 0
      web/i18n/ro-RO/dataset-creation.ts
  89. 3 0
      web/i18n/ro-RO/dataset-documents.ts
  90. 2 0
      web/i18n/ro-RO/dataset-settings.ts
  91. 1 0
      web/i18n/ro-RO/login.ts
  92. 36 0
      web/i18n/ro-RO/tools.ts
  93. 29 0
      web/i18n/ro-RO/workflow.ts
  94. 5 0
      web/i18n/ru-RU/app.ts
  95. 8 0
      web/i18n/tr-TR/app-overview.ts
  96. 6 0
      web/i18n/tr-TR/app.ts
  97. 1 0
      web/i18n/tr-TR/dataset.ts
  98. 2 1
      web/i18n/tr-TR/workflow.ts
  99. 17 0
      web/i18n/uk-UA/app-api.ts
  100. 8 0
      web/i18n/uk-UA/app-overview.ts

+ 87 - 87
web/i18n/de-DE/app-annotation.ts

@@ -1,87 +1,87 @@
-const translation = {
-  title: 'Anmerkungen',
-  name: 'Antwort Anmerkung',
-  editBy: 'Antwort bearbeitet von {{author}}',
-  noData: {
-    title: 'Keine Anmerkungen',
-    description: 'Sie können Anmerkungen während des App-Debuggings bearbeiten oder hier Anmerkungen in großen Mengen importieren für eine hochwertige Antwort.',
-  },
-  table: {
-    header: {
-      question: 'Frage',
-      answer: 'Antwort',
-      createdAt: 'erstellt am',
-      hits: 'Treffer',
-      actions: 'Aktionen',
-      addAnnotation: 'Anmerkung hinzufügen',
-      bulkImport: 'Massenimport',
-      bulkExport: 'Massenexport',
-      clearAll: 'Alle Anmerkungen löschen',
-    },
-  },
-  editModal: {
-    title: 'Antwort Anmerkung bearbeiten',
-    queryName: 'Benutzeranfrage',
-    answerName: 'Geschichtenerzähler Bot',
-    yourAnswer: 'Ihre Antwort',
-    answerPlaceholder: 'Geben Sie hier Ihre Antwort ein',
-    yourQuery: 'Ihre Anfrage',
-    queryPlaceholder: 'Geben Sie hier Ihre Anfrage ein',
-    removeThisCache: 'Diese Anmerkung entfernen',
-    createdAt: 'Erstellt am',
-  },
-  addModal: {
-    title: 'Antwort Anmerkung hinzufügen',
-    queryName: 'Frage',
-    answerName: 'Antwort',
-    answerPlaceholder: 'Antwort hier eingeben',
-    queryPlaceholder: 'Anfrage hier eingeben',
-    createNext: 'Eine weitere annotierte Antwort hinzufügen',
-  },
-  batchModal: {
-    title: 'Massenimport',
-    csvUploadTitle: 'Ziehen Sie Ihre CSV-Datei hierher oder ',
-    browse: 'durchsuchen',
-    tip: 'Die CSV-Datei muss der folgenden Struktur entsprechen:',
-    question: 'Frage',
-    answer: 'Antwort',
-    contentTitle: 'Inhaltsabschnitt',
-    content: 'Inhalt',
-    template: 'Laden Sie die Vorlage hier herunter',
-    cancel: 'Abbrechen',
-    run: 'Batch ausführen',
-    runError: 'Batch-Ausführung fehlgeschlagen',
-    processing: 'In Batch-Verarbeitung',
-    completed: 'Import abgeschlossen',
-    error: 'Importfehler',
-    ok: 'OK',
-  },
-  errorMessage: {
-    answerRequired: 'Antwort erforderlich',
-    queryRequired: 'Frage erforderlich',
-  },
-  viewModal: {
-    annotatedResponse: 'Antwort Anmerkung',
-    hitHistory: 'Trefferhistorie',
-    hit: 'Treffer',
-    hits: 'Treffer',
-    noHitHistory: 'Keine Trefferhistorie',
-  },
-  hitHistoryTable: {
-    query: 'Anfrage',
-    match: 'Übereinstimmung',
-    response: 'Antwort',
-    source: 'Quelle',
-    score: 'Punktzahl',
-    time: 'Zeit',
-  },
-  initSetup: {
-    title: 'Initialeinrichtung Antwort Anmerkung',
-    configTitle: 'Einrichtung Antwort Anmerkung',
-    confirmBtn: 'Speichern & Aktivieren',
-    configConfirmBtn: 'Speichern',
-  },
-  embeddingModelSwitchTip: 'Anmerkungstext-Vektorisierungsmodell, das Wechseln von Modellen wird neu eingebettet, was zusätzliche Kosten verursacht.',
-}
-
-export default translation
+const translation = {
+  title: 'Anmerkungen',
+  name: 'Antwort Anmerkung',
+  editBy: 'Antwort bearbeitet von {{author}}',
+  noData: {
+    title: 'Keine Anmerkungen',
+    description: 'Sie können Anmerkungen während des App-Debuggings bearbeiten oder hier Anmerkungen in großen Mengen importieren für eine hochwertige Antwort.',
+  },
+  table: {
+    header: {
+      question: 'Frage',
+      answer: 'Antwort',
+      createdAt: 'erstellt am',
+      hits: 'Treffer',
+      actions: 'Aktionen',
+      addAnnotation: 'Anmerkung hinzufügen',
+      bulkImport: 'Massenimport',
+      bulkExport: 'Massenexport',
+      clearAll: 'Alle Anmerkungen löschen',
+    },
+  },
+  editModal: {
+    title: 'Antwort Anmerkung bearbeiten',
+    queryName: 'Benutzeranfrage',
+    answerName: 'Geschichtenerzähler Bot',
+    yourAnswer: 'Ihre Antwort',
+    answerPlaceholder: 'Geben Sie hier Ihre Antwort ein',
+    yourQuery: 'Ihre Anfrage',
+    queryPlaceholder: 'Geben Sie hier Ihre Anfrage ein',
+    removeThisCache: 'Diese Anmerkung entfernen',
+    createdAt: 'Erstellt am',
+  },
+  addModal: {
+    title: 'Antwort Anmerkung hinzufügen',
+    queryName: 'Frage',
+    answerName: 'Antwort',
+    answerPlaceholder: 'Antwort hier eingeben',
+    queryPlaceholder: 'Anfrage hier eingeben',
+    createNext: 'Eine weitere annotierte Antwort hinzufügen',
+  },
+  batchModal: {
+    title: 'Massenimport',
+    csvUploadTitle: 'Ziehen Sie Ihre CSV-Datei hierher oder ',
+    browse: 'durchsuchen',
+    tip: 'Die CSV-Datei muss der folgenden Struktur entsprechen:',
+    question: 'Frage',
+    answer: 'Antwort',
+    contentTitle: 'Inhaltsabschnitt',
+    content: 'Inhalt',
+    template: 'Laden Sie die Vorlage hier herunter',
+    cancel: 'Abbrechen',
+    run: 'Batch ausführen',
+    runError: 'Batch-Ausführung fehlgeschlagen',
+    processing: 'In Batch-Verarbeitung',
+    completed: 'Import abgeschlossen',
+    error: 'Importfehler',
+    ok: 'OK',
+  },
+  errorMessage: {
+    answerRequired: 'Antwort erforderlich',
+    queryRequired: 'Frage erforderlich',
+  },
+  viewModal: {
+    annotatedResponse: 'Antwort Anmerkung',
+    hitHistory: 'Trefferhistorie',
+    hit: 'Treffer',
+    hits: 'Treffer',
+    noHitHistory: 'Keine Trefferhistorie',
+  },
+  hitHistoryTable: {
+    query: 'Anfrage',
+    match: 'Übereinstimmung',
+    response: 'Antwort',
+    source: 'Quelle',
+    score: 'Punktzahl',
+    time: 'Zeit',
+  },
+  initSetup: {
+    title: 'Initialeinrichtung Antwort Anmerkung',
+    configTitle: 'Einrichtung Antwort Anmerkung',
+    confirmBtn: 'Speichern & Aktivieren',
+    configConfirmBtn: 'Speichern',
+  },
+  embeddingModelSwitchTip: 'Anmerkungstext-Vektorisierungsmodell, das Wechseln von Modellen wird neu eingebettet, was zusätzliche Kosten verursacht.',
+}
+
+export default translation

+ 82 - 81
web/i18n/de-DE/app-api.ts

@@ -1,82 +1,83 @@
-const translation = {
-  apiServer: 'API Server',
-  apiKey: 'API Schlüssel',
-  status: 'Status',
-  disabled: 'Deaktiviert',
-  ok: 'In Betrieb',
-  copy: 'Kopieren',
-  copied: 'Kopiert',
-  play: 'Abspielen',
-  pause: 'Pause',
-  playing: 'Wiedergabe',
-  merMaind: {
-    rerender: 'Neu rendern',
-  },
-  never: 'Nie',
-  apiKeyModal: {
-    apiSecretKey: 'API Geheimschlüssel',
-    apiSecretKeyTips: 'Um Missbrauch der API zu verhindern, schützen Sie Ihren API Schlüssel. Vermeiden Sie es, ihn als Klartext im Frontend-Code zu verwenden. :)',
-    createNewSecretKey: 'Neuen Geheimschlüssel erstellen',
-    secretKey: 'Geheimschlüssel',
-    created: 'ERSTELLT',
-    lastUsed: 'ZULETZT VERWENDET',
-    generateTips: 'Bewahren Sie diesen Schlüssel an einem sicheren und zugänglichen Ort auf.',
-  },
-  actionMsg: {
-    deleteConfirmTitle: 'Diesen Geheimschlüssel löschen?',
-    deleteConfirmTips: 'Diese Aktion kann nicht rückgängig gemacht werden.',
-    ok: 'OK',
-  },
-  completionMode: {
-    title: 'Completion App API',
-    info: 'Für die Erzeugung von hochwertigem Text, wie z.B. Artikel, Zusammenfassungen und Übersetzungen, verwenden Sie die Completion-Messages API mit Benutzereingaben. Die Texterzeugung basiert auf den Modellparametern und Vorlagen für Aufforderungen in Dify Prompt Engineering.',
-    createCompletionApi: 'Completion Nachricht erstellen',
-    createCompletionApiTip: 'Erstellen Sie eine Completion Nachricht, um den Frage-Antwort-Modus zu unterstützen.',
-    inputsTips: '(Optional) Geben Sie Benutzereingabefelder als Schlüssel-Wert-Paare an, die Variablen in Prompt Eng. entsprechen. Schlüssel ist der Variablenname, Wert ist der Parameterwert. Wenn der Feldtyp Select ist, muss der übermittelte Wert eine der voreingestellten Optionen sein.',
-    queryTips: 'Textinhalt der Benutzereingabe.',
-    blocking: 'Blockierender Typ, wartet auf die Fertigstellung der Ausführung und gibt Ergebnisse zurück. (Anfragen können unterbrochen werden, wenn der Prozess lang ist)',
-    streaming: 'Streaming Rückgaben. Implementierung der Streaming-Rückgabe basierend auf SSE (Server-Sent Events).',
-    messageFeedbackApi: 'Nachrichtenfeedback (Like)',
-    messageFeedbackApiTip: 'Bewerten Sie empfangene Nachrichten im Namen der Endbenutzer mit Likes oder Dislikes. Diese Daten sind auf der Seite Logs & Annotations sichtbar und werden für zukünftige Modellanpassungen verwendet.',
-    messageIDTip: 'Nachrichten-ID',
-    ratingTip: 'like oder dislike, null ist rückgängig machen',
-    parametersApi: 'Anwendungsparameterinformationen abrufen',
-    parametersApiTip: 'Abrufen konfigurierter Eingabeparameter, einschließlich Variablennamen, Feldnamen, Typen und Standardwerten. Typischerweise verwendet, um diese Felder in einem Formular anzuzeigen oder Standardwerte nach dem Laden des Clients auszufüllen.',
-  },
-  chatMode: {
-    title: 'Chat App API',
-    info: 'Für vielseitige Gesprächsanwendungen im Q&A-Format rufen Sie die chat-messages API auf, um einen Dialog zu initiieren. Führen Sie laufende Gespräche fort, indem Sie die zurückgegebene conversation_id übergeben. Antwortparameter und -vorlagen hängen von den Einstellungen in Dify Prompt Eng. ab.',
-    createChatApi: 'Chatnachricht erstellen',
-    createChatApiTip: 'Eine neue Konversationsnachricht erstellen oder einen bestehenden Dialog fortsetzen.',
-    inputsTips: '(Optional) Geben Sie Benutzereingabefelder als Schlüssel-Wert-Paare an, die Variablen in Prompt Eng. entsprechen. Schlüssel ist der Variablenname, Wert ist der Parameterwert. Wenn der Feldtyp Select ist, muss der übermittelte Wert eine der voreingestellten Optionen sein.',
-    queryTips: 'Inhalt der Benutzereingabe/Frage',
-    blocking: 'Blockierender Typ, wartet auf die Fertigstellung der Ausführung und gibt Ergebnisse zurück. (Anfragen können unterbrochen werden, wenn der Prozess lang ist)',
-    streaming: 'Streaming Rückgaben. Implementierung der Streaming-Rückgabe basierend auf SSE (Server-Sent Events).',
-    conversationIdTip: '(Optional) Konversations-ID: für erstmalige Konversation leer lassen; conversation_id aus dem Kontext übergeben, um den Dialog fortzusetzen.',
-    messageFeedbackApi: 'Nachrichtenfeedback des Endbenutzers, like',
-    messageFeedbackApiTip: 'Bewerten Sie empfangene Nachrichten im Namen der Endbenutzer mit Likes oder Dislikes. Diese Daten sind auf der Seite Logs & Annotations sichtbar und werden für zukünftige Modellanpassungen verwendet.',
-    messageIDTip: 'Nachrichten-ID',
-    ratingTip: 'like oder dislike, null ist rückgängig machen',
-    chatMsgHistoryApi: 'Chatverlaufsnachricht abrufen',
-    chatMsgHistoryApiTip: 'Die erste Seite gibt die neuesten `limit` Einträge in umgekehrter Reihenfolge zurück.',
-    chatMsgHistoryConversationIdTip: 'Konversations-ID',
-    chatMsgHistoryFirstId: 'ID des ersten Chat-Datensatzes auf der aktuellen Seite. Standardmäßig keiner.',
-    chatMsgHistoryLimit: 'Wie viele Chats in einer Anfrage zurückgegeben werden',
-    conversationsListApi: 'Konversationsliste abrufen',
-    conversationsListApiTip: 'Ruft die Sitzungsliste des aktuellen Benutzers ab. Standardmäßig werden die letzten 20 Sitzungen zurückgegeben.',
-    conversationsListFirstIdTip: 'Die ID des letzten Datensatzes auf der aktuellen Seite, standardmäßig keine.',
-    conversationsListLimitTip: 'Wie viele Chats in einer Anfrage zurückgegeben werden',
-    conversationRenamingApi: 'Konversation umbenennen',
-    conversationRenamingApiTip: 'Konversationen umbenennen; der Name wird in Mehrsitzungs-Client-Schnittstellen angezeigt.',
-    conversationRenamingNameTip: 'Neuer Name',
-    parametersApi: 'Anwendungsparameterinformationen abrufen',
-    parametersApiTip: 'Abrufen konfigurierter Eingabeparameter, einschließlich Variablennamen, Feldnamen, Typen und Standardwerten. Typischerweise verwendet, um diese Felder in einem Formular anzuzeigen oder Standardwerte nach dem Laden des Clients auszufüllen.',
-  },
-  develop: {
-    requestBody: 'Anfragekörper',
-    pathParams: 'Pfadparameter',
-    query: 'Anfrage',
-  },
-}
-
+const translation = {
+  apiServer: 'API Server',
+  apiKey: 'API Schlüssel',
+  status: 'Status',
+  disabled: 'Deaktiviert',
+  ok: 'In Betrieb',
+  copy: 'Kopieren',
+  copied: 'Kopiert',
+  play: 'Abspielen',
+  pause: 'Pause',
+  playing: 'Wiedergabe',
+  merMaind: {
+    rerender: 'Neu rendern',
+  },
+  never: 'Nie',
+  apiKeyModal: {
+    apiSecretKey: 'API Geheimschlüssel',
+    apiSecretKeyTips: 'Um Missbrauch der API zu verhindern, schützen Sie Ihren API Schlüssel. Vermeiden Sie es, ihn als Klartext im Frontend-Code zu verwenden. :)',
+    createNewSecretKey: 'Neuen Geheimschlüssel erstellen',
+    secretKey: 'Geheimschlüssel',
+    created: 'ERSTELLT',
+    lastUsed: 'ZULETZT VERWENDET',
+    generateTips: 'Bewahren Sie diesen Schlüssel an einem sicheren und zugänglichen Ort auf.',
+  },
+  actionMsg: {
+    deleteConfirmTitle: 'Diesen Geheimschlüssel löschen?',
+    deleteConfirmTips: 'Diese Aktion kann nicht rückgängig gemacht werden.',
+    ok: 'OK',
+  },
+  completionMode: {
+    title: 'Completion App API',
+    info: 'Für die Erzeugung von hochwertigem Text, wie z.B. Artikel, Zusammenfassungen und Übersetzungen, verwenden Sie die Completion-Messages API mit Benutzereingaben. Die Texterzeugung basiert auf den Modellparametern und Vorlagen für Aufforderungen in Dify Prompt Engineering.',
+    createCompletionApi: 'Completion Nachricht erstellen',
+    createCompletionApiTip: 'Erstellen Sie eine Completion Nachricht, um den Frage-Antwort-Modus zu unterstützen.',
+    inputsTips: '(Optional) Geben Sie Benutzereingabefelder als Schlüssel-Wert-Paare an, die Variablen in Prompt Eng. entsprechen. Schlüssel ist der Variablenname, Wert ist der Parameterwert. Wenn der Feldtyp Select ist, muss der übermittelte Wert eine der voreingestellten Optionen sein.',
+    queryTips: 'Textinhalt der Benutzereingabe.',
+    blocking: 'Blockierender Typ, wartet auf die Fertigstellung der Ausführung und gibt Ergebnisse zurück. (Anfragen können unterbrochen werden, wenn der Prozess lang ist)',
+    streaming: 'Streaming Rückgaben. Implementierung der Streaming-Rückgabe basierend auf SSE (Server-Sent Events).',
+    messageFeedbackApi: 'Nachrichtenfeedback (Like)',
+    messageFeedbackApiTip: 'Bewerten Sie empfangene Nachrichten im Namen der Endbenutzer mit Likes oder Dislikes. Diese Daten sind auf der Seite Logs & Annotations sichtbar und werden für zukünftige Modellanpassungen verwendet.',
+    messageIDTip: 'Nachrichten-ID',
+    ratingTip: 'like oder dislike, null ist rückgängig machen',
+    parametersApi: 'Anwendungsparameterinformationen abrufen',
+    parametersApiTip: 'Abrufen konfigurierter Eingabeparameter, einschließlich Variablennamen, Feldnamen, Typen und Standardwerten. Typischerweise verwendet, um diese Felder in einem Formular anzuzeigen oder Standardwerte nach dem Laden des Clients auszufüllen.',
+  },
+  chatMode: {
+    title: 'Chat App API',
+    info: 'Für vielseitige Gesprächsanwendungen im Q&A-Format rufen Sie die chat-messages API auf, um einen Dialog zu initiieren. Führen Sie laufende Gespräche fort, indem Sie die zurückgegebene conversation_id übergeben. Antwortparameter und -vorlagen hängen von den Einstellungen in Dify Prompt Eng. ab.',
+    createChatApi: 'Chatnachricht erstellen',
+    createChatApiTip: 'Eine neue Konversationsnachricht erstellen oder einen bestehenden Dialog fortsetzen.',
+    inputsTips: '(Optional) Geben Sie Benutzereingabefelder als Schlüssel-Wert-Paare an, die Variablen in Prompt Eng. entsprechen. Schlüssel ist der Variablenname, Wert ist der Parameterwert. Wenn der Feldtyp Select ist, muss der übermittelte Wert eine der voreingestellten Optionen sein.',
+    queryTips: 'Inhalt der Benutzereingabe/Frage',
+    blocking: 'Blockierender Typ, wartet auf die Fertigstellung der Ausführung und gibt Ergebnisse zurück. (Anfragen können unterbrochen werden, wenn der Prozess lang ist)',
+    streaming: 'Streaming Rückgaben. Implementierung der Streaming-Rückgabe basierend auf SSE (Server-Sent Events).',
+    conversationIdTip: '(Optional) Konversations-ID: für erstmalige Konversation leer lassen; conversation_id aus dem Kontext übergeben, um den Dialog fortzusetzen.',
+    messageFeedbackApi: 'Nachrichtenfeedback des Endbenutzers, like',
+    messageFeedbackApiTip: 'Bewerten Sie empfangene Nachrichten im Namen der Endbenutzer mit Likes oder Dislikes. Diese Daten sind auf der Seite Logs & Annotations sichtbar und werden für zukünftige Modellanpassungen verwendet.',
+    messageIDTip: 'Nachrichten-ID',
+    ratingTip: 'like oder dislike, null ist rückgängig machen',
+    chatMsgHistoryApi: 'Chatverlaufsnachricht abrufen',
+    chatMsgHistoryApiTip: 'Die erste Seite gibt die neuesten `limit` Einträge in umgekehrter Reihenfolge zurück.',
+    chatMsgHistoryConversationIdTip: 'Konversations-ID',
+    chatMsgHistoryFirstId: 'ID des ersten Chat-Datensatzes auf der aktuellen Seite. Standardmäßig keiner.',
+    chatMsgHistoryLimit: 'Wie viele Chats in einer Anfrage zurückgegeben werden',
+    conversationsListApi: 'Konversationsliste abrufen',
+    conversationsListApiTip: 'Ruft die Sitzungsliste des aktuellen Benutzers ab. Standardmäßig werden die letzten 20 Sitzungen zurückgegeben.',
+    conversationsListFirstIdTip: 'Die ID des letzten Datensatzes auf der aktuellen Seite, standardmäßig keine.',
+    conversationsListLimitTip: 'Wie viele Chats in einer Anfrage zurückgegeben werden',
+    conversationRenamingApi: 'Konversation umbenennen',
+    conversationRenamingApiTip: 'Konversationen umbenennen; der Name wird in Mehrsitzungs-Client-Schnittstellen angezeigt.',
+    conversationRenamingNameTip: 'Neuer Name',
+    parametersApi: 'Anwendungsparameterinformationen abrufen',
+    parametersApiTip: 'Abrufen konfigurierter Eingabeparameter, einschließlich Variablennamen, Feldnamen, Typen und Standardwerten. Typischerweise verwendet, um diese Felder in einem Formular anzuzeigen oder Standardwerte nach dem Laden des Clients auszufüllen.',
+  },
+  develop: {
+    requestBody: 'Anfragekörper',
+    pathParams: 'Pfadparameter',
+    query: 'Anfrage',
+  },
+  loading: 'Laden',
+}
+
 export default translation

+ 95 - 89
web/i18n/de-DE/app-log.ts

@@ -1,89 +1,95 @@
-const translation = {
-  title: 'Protokolle',
-  description: 'Die Protokolle zeichnen den Betriebsstatus der Anwendung auf, einschließlich Benutzereingaben und KI-Antworten.',
-  dateTimeFormat: 'MM/DD/YYYY hh:mm A',
-  table: {
-    header: {
-      updatedTime: 'Aktualisierungszeit',
-      time: 'Erstellungszeit',
-      endUser: 'Endbenutzer oder Konto',
-      input: 'Eingabe',
-      output: 'Ausgabe',
-      summary: 'Titel',
-      messageCount: 'Nachrichtenzahl',
-      userRate: 'Benutzerbewertung',
-      adminRate: 'Op. Bewertung',
-    },
-    pagination: {
-      previous: 'Vorherige',
-      next: 'Nächste',
-    },
-    empty: {
-      noChat: 'Noch keine Konversation',
-      noOutput: 'Keine Ausgabe',
-      element: {
-        title: 'Ist da jemand?',
-        content: 'Beobachten und annotieren Sie hier die Interaktionen zwischen Endbenutzern und KI-Anwendungen, um die Genauigkeit der KI kontinuierlich zu verbessern. Sie können versuchen, die Web-App selbst <shareLink>zu teilen</shareLink> oder <testLink>zu testen</testLink>, und dann zu dieser Seite zurückkehren.',
-      },
-    },
-  },
-  detail: {
-    time: 'Zeit',
-    conversationId: 'Konversations-ID',
-    promptTemplate: 'Prompt-Vorlage',
-    promptTemplateBeforeChat: 'Prompt-Vorlage vor dem Chat · Als Systemnachricht',
-    annotationTip: 'Verbesserungen markiert von {{user}}',
-    timeConsuming: '',
-    second: 's',
-    tokenCost: 'Verbrauchte Token',
-    loading: 'lädt',
-    operation: {
-      like: 'gefällt mir',
-      dislike: 'gefällt mir nicht',
-      addAnnotation: 'Verbesserung hinzufügen',
-      editAnnotation: 'Verbesserung bearbeiten',
-      annotationPlaceholder: 'Geben Sie die erwartete Antwort ein, die Sie möchten, dass die KI antwortet, welche für die Feinabstimmung des Modells und die kontinuierliche Verbesserung der Qualität der Textgenerierung in Zukunft verwendet werden kann.',
-    },
-    variables: 'Variablen',
-    uploadImages: 'Hochgeladene Bilder',
-  },
-  filter: {
-    period: {
-      today: 'Heute',
-      last7days: 'Letzte 7 Tage',
-      last4weeks: 'Letzte 4 Wochen',
-      last3months: 'Letzte 3 Monate',
-      last12months: 'Letzte 12 Monate',
-      monthToDate: 'Monat bis heute',
-      quarterToDate: 'Quartal bis heute',
-      yearToDate: 'Jahr bis heute',
-      allTime: 'Gesamte Zeit',
-    },
-    annotation: {
-      all: 'Alle',
-      annotated: 'Markierte Verbesserungen ({{count}} Elemente)',
-      not_annotated: 'Nicht annotiert',
-    },
-    sortBy: 'Sortieren nach:',
-    descending: 'absteigend',
-    ascending: 'aufsteigend',
-  },
-  workflowTitle: 'Workflow-Protokolle',
-  workflowSubtitle: 'Das Protokoll hat den Vorgang von Automate aufgezeichnet.',
-  runDetail: {
-    title: 'Konversationsprotokoll',
-    workflowTitle: 'Protokolldetail',
-  },
-  promptLog: 'Prompt-Protokoll',
-  agentLog: 'Agentenprotokoll',
-  viewLog: 'Protokoll anzeigen',
-  agentLogDetail: {
-    agentMode: 'Agentenmodus',
-    toolUsed: 'Verwendetes Werkzeug',
-    iterations: 'Iterationen',
-    iteration: 'Iteration',
-    finalProcessing: 'Endverarbeitung',
-  },
-}
-
-export default translation
+const translation = {
+  title: 'Protokolle',
+  description: 'Die Protokolle zeichnen den Betriebsstatus der Anwendung auf, einschließlich Benutzereingaben und KI-Antworten.',
+  dateTimeFormat: 'MM/DD/YYYY hh:mm A',
+  table: {
+    header: {
+      updatedTime: 'Aktualisierungszeit',
+      time: 'Erstellungszeit',
+      endUser: 'Endbenutzer oder Konto',
+      input: 'Eingabe',
+      output: 'Ausgabe',
+      summary: 'Titel',
+      messageCount: 'Nachrichtenzahl',
+      userRate: 'Benutzerbewertung',
+      adminRate: 'Op. Bewertung',
+      user: 'Endbenutzer oder Konto',
+      status: 'STATUS',
+      runtime: 'LAUFZEIT',
+      version: 'VERSION',
+      tokens: 'TOKEN',
+      startTime: 'STARTZEIT',
+    },
+    pagination: {
+      previous: 'Vorherige',
+      next: 'Nächste',
+    },
+    empty: {
+      noChat: 'Noch keine Konversation',
+      noOutput: 'Keine Ausgabe',
+      element: {
+        title: 'Ist da jemand?',
+        content: 'Beobachten und annotieren Sie hier die Interaktionen zwischen Endbenutzern und KI-Anwendungen, um die Genauigkeit der KI kontinuierlich zu verbessern. Sie können versuchen, die Web-App selbst <shareLink>zu teilen</shareLink> oder <testLink>zu testen</testLink>, und dann zu dieser Seite zurückkehren.',
+      },
+    },
+  },
+  detail: {
+    time: 'Zeit',
+    conversationId: 'Konversations-ID',
+    promptTemplate: 'Prompt-Vorlage',
+    promptTemplateBeforeChat: 'Prompt-Vorlage vor dem Chat · Als Systemnachricht',
+    annotationTip: 'Verbesserungen markiert von {{user}}',
+    timeConsuming: '',
+    second: 's',
+    tokenCost: 'Verbrauchte Token',
+    loading: 'lädt',
+    operation: {
+      like: 'gefällt mir',
+      dislike: 'gefällt mir nicht',
+      addAnnotation: 'Verbesserung hinzufügen',
+      editAnnotation: 'Verbesserung bearbeiten',
+      annotationPlaceholder: 'Geben Sie die erwartete Antwort ein, die Sie möchten, dass die KI antwortet, welche für die Feinabstimmung des Modells und die kontinuierliche Verbesserung der Qualität der Textgenerierung in Zukunft verwendet werden kann.',
+    },
+    variables: 'Variablen',
+    uploadImages: 'Hochgeladene Bilder',
+  },
+  filter: {
+    period: {
+      today: 'Heute',
+      last7days: 'Letzte 7 Tage',
+      last4weeks: 'Letzte 4 Wochen',
+      last3months: 'Letzte 3 Monate',
+      last12months: 'Letzte 12 Monate',
+      monthToDate: 'Monat bis heute',
+      quarterToDate: 'Quartal bis heute',
+      yearToDate: 'Jahr bis heute',
+      allTime: 'Gesamte Zeit',
+    },
+    annotation: {
+      all: 'Alle',
+      annotated: 'Markierte Verbesserungen ({{count}} Elemente)',
+      not_annotated: 'Nicht annotiert',
+    },
+    sortBy: 'Sortieren nach:',
+    descending: 'absteigend',
+    ascending: 'aufsteigend',
+  },
+  workflowTitle: 'Workflow-Protokolle',
+  workflowSubtitle: 'Das Protokoll hat den Vorgang von Automate aufgezeichnet.',
+  runDetail: {
+    title: 'Konversationsprotokoll',
+    workflowTitle: 'Protokolldetail',
+  },
+  promptLog: 'Prompt-Protokoll',
+  agentLog: 'Agentenprotokoll',
+  viewLog: 'Protokoll anzeigen',
+  agentLogDetail: {
+    agentMode: 'Agentenmodus',
+    toolUsed: 'Verwendetes Werkzeug',
+    iterations: 'Iterationen',
+    iteration: 'Iteration',
+    finalProcessing: 'Endverarbeitung',
+  },
+}
+
+export default translation

+ 12 - 0
web/i18n/de-DE/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Workflow-Schritte',
           show: 'Anzeigen',
           hide: 'Verbergen',
+          subTitle: 'Details zum Arbeitsablauf',
+          showDesc: 'Ein- oder Ausblenden von Workflow-Details in der WebApp',
         },
         chatColorTheme: 'Chat-Farbschema',
         chatColorThemeDesc: 'Legen Sie das Farbschema des Chatbots fest',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Geben Sie den benutzerdefinierten Haftungsausschluss-Text ein',
           customDisclaimerTip: 'Der ben userdefinierte Haftungsausschluss-Text wird auf der Clientseite angezeigt und bietet zusätzliche Informationen über die Anwendung',
         },
+        sso: {
+          title: 'WebApp-SSO',
+          description: 'Alle Benutzer müssen sich mit SSO anmelden, bevor sie WebApp verwenden können',
+          label: 'SSO-Authentifizierung',
+          tooltip: 'Wenden Sie sich an den Administrator, um WebApp-SSO zu aktivieren',
+        },
       },
       embedded: {
         entry: 'Eingebettet',
@@ -150,6 +158,10 @@ const translation = {
       title: 'Token-Ausgabegeschwindigkeit',
       explanation: 'Misst die Leistung des LLM. Zählt die Token-Ausgabegeschwindigkeit des LLM vom Beginn der Anfrage bis zum Abschluss der Ausgabe.',
     },
+    avgUserInteractions: {
+      explanation: 'Spiegelt die tägliche Nutzungshäufigkeit der Benutzer wider. Diese Metrik spiegelt die Bindung der Benutzer wider.',
+      title: 'Durchschnittliche Benutzerinteraktionen',
+    },
   },
 }
 

+ 145 - 107
web/i18n/de-DE/app.ts

@@ -1,107 +1,145 @@
-const translation = {
-  createApp: 'Neue App erstellen',
-  types: {
-    all: 'Alle',
-    assistant: 'Assistent',
-    completion: 'Vervollständigung',
-  },
-  modes: {
-    completion: 'Textgenerator',
-    chat: 'Basisassistent',
-  },
-  createFromConfigFile: 'App aus Konfigurationsdatei erstellen',
-  deleteAppConfirmTitle: 'Diese App löschen?',
-  deleteAppConfirmContent:
-    'Das Löschen der App ist unwiderruflich. Nutzer werden keinen Zugang mehr zu Ihrer App haben, und alle Prompt-Konfigurationen und Logs werden dauerhaft gelöscht.',
-  appDeleted: 'App gelöscht',
-  appDeleteFailed: 'Löschen der App fehlgeschlagen',
-  join: 'Treten Sie der Gemeinschaft bei',
-  communityIntro:
-    'Diskutieren Sie mit Teammitgliedern, Mitwirkenden und Entwicklern auf verschiedenen Kanälen.',
-  roadmap: 'Sehen Sie unseren Fahrplan',
-  appNamePlaceholder: 'Bitte geben Sie den Namen der App ein',
-  newApp: {
-    startToCreate: 'Lassen Sie uns mit Ihrer neuen App beginnen',
-    captionName: 'App-Symbol & Name',
-    captionAppType: 'Welchen Typ von App möchten Sie erstellen?',
-    previewDemo: 'Vorschau-Demo',
-    chatApp: 'Assistent',
-    chatAppIntro:
-      'Ich möchte eine Chat-basierte Anwendung bauen. Diese App verwendet ein Frage-Antwort-Format und ermöglicht mehrere Runden kontinuierlicher Konversation.',
-    agentAssistant: 'Neuer Agentenassistent',
-    completeApp: 'Textgenerator',
-    completeAppIntro:
-      'Ich möchte eine Anwendung erstellen, die hochwertigen Text basierend auf Aufforderungen generiert, wie z.B. das Erstellen von Artikeln, Zusammenfassungen, Übersetzungen und mehr.',
-    showTemplates: 'Ich möchte aus einer Vorlage wählen',
-    hideTemplates: 'Zurück zur Modusauswahl',
-    Create: 'Erstellen',
-    Cancel: 'Abbrechen',
-    nameNotEmpty: 'Name darf nicht leer sein',
-    appTemplateNotSelected: 'Bitte wählen Sie eine Vorlage',
-    appTypeRequired: 'Bitte wählen Sie einen App-Typ',
-    appCreated: 'App erstellt',
-    appCreateFailed: 'Erstellen der App fehlgeschlagen',
-  },
-  editApp: 'App bearbeiten',
-  editAppTitle: 'App-Informationen bearbeiten',
-  editDone: 'App-Informationen wurden aktualisiert',
-  editFailed: 'Aktualisierung der App-Informationen fehlgeschlagen',
-  iconPicker: {
-    ok: 'OK',
-    cancel: 'Abbrechen',
-    emoji: 'Emoji',
-    image: 'Bild',
-  },
-  switch: 'Zu Workflow-Orchestrierung wechseln',
-  switchTipStart: 'Eine neue App-Kopie wird für Sie erstellt, und die neue Kopie wird zur Workflow-Orchestrierung wechseln. Die neue Kopie wird ',
-  switchTip: 'nicht erlauben',
-  switchTipEnd: ' zur Basis-Orchestrierung zurückzuwechseln.',
-  switchLabel: 'Die zu erstellende App-Kopie',
-  removeOriginal: 'Ursprüngliche App löschen',
-  switchStart: 'Wechsel starten',
-  typeSelector: {
-    all: 'ALLE Typen',
-    chatbot: 'Chatbot',
-    agent: 'Agent',
-    workflow: 'Workflow',
-    completion: 'Vervollständigung',
-  },
-  tracing: {
-    title: 'Anwendungsleistung nachverfolgen',
-    description: 'Konfiguration eines Drittanbieter-LLMOps-Anbieters und Nachverfolgung der Anwendungsleistung.',
-    config: 'Konfigurieren',
-    collapse: 'Einklappen',
-    expand: 'Ausklappen',
-    tracing: 'Nachverfolgung',
-    disabled: 'Deaktiviert',
-    disabledTip: 'Bitte zuerst den Anbieter konfigurieren',
-    enabled: 'In Betrieb',
-    tracingDescription: 'Erfassung des vollständigen Kontexts der Anwendungsausführung, einschließlich LLM-Aufrufe, Kontext, Prompts, HTTP-Anfragen und mehr, auf einer Nachverfolgungsplattform von Drittanbietern.',
-    configProviderTitle: {
-      configured: 'Konfiguriert',
-      notConfigured: 'Anbieter konfigurieren, um Nachverfolgung zu aktivieren',
-      moreProvider: 'Weitere Anbieter',
-    },
-    langsmith: {
-      title: 'LangSmith',
-      description: 'Eine All-in-One-Entwicklerplattform für jeden Schritt des LLM-gesteuerten Anwendungslebenszyklus.',
-    },
-    langfuse: {
-      title: 'Langfuse',
-      description: 'Traces, Bewertungen, Prompt-Management und Metriken zum Debuggen und Verbessern Ihrer LLM-Anwendung.',
-    },
-    inUse: 'In Verwendung',
-    configProvider: {
-      title: 'Konfigurieren ',
-      placeholder: 'Geben Sie Ihren {{key}} ein',
-      project: 'Projekt',
-      publicKey: 'Öffentlicher Schlüssel',
-      secretKey: 'Geheimer Schlüssel',
-      viewDocsLink: '{{key}}-Dokumentation ansehen',
-      removeConfirmTitle: '{{key}}-Konfiguration entfernen?',
-      removeConfirmContent: 'Die aktuelle Konfiguration wird verwendet. Das Entfernen wird die Nachverfolgungsfunktion ausschalten.',
-    },
-  },
-}
-
-export default translation
+const translation = {
+  createApp: 'Neue App erstellen',
+  types: {
+    all: 'Alle',
+    assistant: 'Assistent',
+    completion: 'Vervollständigung',
+    workflow: 'Arbeitsablauf',
+    agent: 'Agent',
+    chatbot: 'Chatbot',
+  },
+  modes: {
+    completion: 'Textgenerator',
+    chat: 'Basisassistent',
+  },
+  createFromConfigFile: 'App aus Konfigurationsdatei erstellen',
+  deleteAppConfirmTitle: 'Diese App löschen?',
+  deleteAppConfirmContent:
+    'Das Löschen der App ist unwiderruflich. Nutzer werden keinen Zugang mehr zu Ihrer App haben, und alle Prompt-Konfigurationen und Logs werden dauerhaft gelöscht.',
+  appDeleted: 'App gelöscht',
+  appDeleteFailed: 'Löschen der App fehlgeschlagen',
+  join: 'Treten Sie der Gemeinschaft bei',
+  communityIntro:
+    'Diskutieren Sie mit Teammitgliedern, Mitwirkenden und Entwicklern auf verschiedenen Kanälen.',
+  roadmap: 'Sehen Sie unseren Fahrplan',
+  appNamePlaceholder: 'Bitte geben Sie den Namen der App ein',
+  newApp: {
+    startToCreate: 'Lassen Sie uns mit Ihrer neuen App beginnen',
+    captionName: 'App-Symbol & Name',
+    captionAppType: 'Welchen Typ von App möchten Sie erstellen?',
+    previewDemo: 'Vorschau-Demo',
+    chatApp: 'Assistent',
+    chatAppIntro:
+      'Ich möchte eine Chat-basierte Anwendung bauen. Diese App verwendet ein Frage-Antwort-Format und ermöglicht mehrere Runden kontinuierlicher Konversation.',
+    agentAssistant: 'Neuer Agentenassistent',
+    completeApp: 'Textgenerator',
+    completeAppIntro:
+      'Ich möchte eine Anwendung erstellen, die hochwertigen Text basierend auf Aufforderungen generiert, wie z.B. das Erstellen von Artikeln, Zusammenfassungen, Übersetzungen und mehr.',
+    showTemplates: 'Ich möchte aus einer Vorlage wählen',
+    hideTemplates: 'Zurück zur Modusauswahl',
+    Create: 'Erstellen',
+    Cancel: 'Abbrechen',
+    nameNotEmpty: 'Name darf nicht leer sein',
+    appTemplateNotSelected: 'Bitte wählen Sie eine Vorlage',
+    appTypeRequired: 'Bitte wählen Sie einen App-Typ',
+    appCreated: 'App erstellt',
+    appCreateFailed: 'Erstellen der App fehlgeschlagen',
+    basic: 'Grundlegend',
+    chatbotType: 'Chatbot-Orchestrierungsmethode',
+    workflowDescription: 'Erstellen Sie eine Anwendung, die qualitativ hochwertigen Text auf der Grundlage von Workflow-Orchestrierungen mit einem hohen Maß an Anpassung generiert. Es ist für erfahrene Benutzer geeignet.',
+    advancedFor: 'Für Fortgeschrittene',
+    startFromTemplate: 'Aus Vorlage erstellen',
+    appNamePlaceholder: 'Geben Sie Ihrer App einen Namen',
+    startFromBlank: 'Aus Leer erstellen',
+    basicTip: 'Für Anfänger können Sie später zu Chatflow wechseln',
+    basicDescription: 'Basic Orchestrate ermöglicht die Orchestrierung einer Chatbot-App mit einfachen Einstellungen, ohne die Möglichkeit, integrierte Eingabeaufforderungen zu ändern. Es ist für Anfänger geeignet.',
+    workflowWarning: 'Derzeit in der Beta-Phase',
+    advancedDescription: 'Workflow Orchestrate orchestriert Chatbots in Form von Workflows und bietet ein hohes Maß an Individualisierung, einschließlich der Möglichkeit, integrierte Eingabeaufforderungen zu bearbeiten. Es ist für erfahrene Benutzer geeignet.',
+    basicFor: 'FÜR ANFÄNGER',
+    completionWarning: 'Diese Art von App wird nicht mehr unterstützt.',
+    chatbotDescription: 'Erstellen Sie eine chatbasierte Anwendung. Diese App verwendet ein Frage-und-Antwort-Format, das mehrere Runden kontinuierlicher Konversation ermöglicht.',
+    captionDescription: 'Beschreibung',
+    advanced: 'Chatflow',
+    useTemplate: 'Diese Vorlage verwenden',
+    agentDescription: 'Erstellen Sie einen intelligenten Agenten, der autonom Werkzeuge auswählen kann, um die Aufgaben zu erledigen',
+    completionDescription: 'Erstellen Sie eine Anwendung, die qualitativ hochwertigen Text auf der Grundlage von Eingabeaufforderungen generiert, z. B. zum Generieren von Artikeln, Zusammenfassungen, Übersetzungen und mehr.',
+    appDescriptionPlaceholder: 'Geben Sie die Beschreibung der App ein',
+  },
+  editApp: 'App bearbeiten',
+  editAppTitle: 'App-Informationen bearbeiten',
+  editDone: 'App-Informationen wurden aktualisiert',
+  editFailed: 'Aktualisierung der App-Informationen fehlgeschlagen',
+  iconPicker: {
+    ok: 'OK',
+    cancel: 'Abbrechen',
+    emoji: 'Emoji',
+    image: 'Bild',
+  },
+  switch: 'Zu Workflow-Orchestrierung wechseln',
+  switchTipStart: 'Eine neue App-Kopie wird für Sie erstellt, und die neue Kopie wird zur Workflow-Orchestrierung wechseln. Die neue Kopie wird ',
+  switchTip: 'nicht erlauben',
+  switchTipEnd: ' zur Basis-Orchestrierung zurückzuwechseln.',
+  switchLabel: 'Die zu erstellende App-Kopie',
+  removeOriginal: 'Ursprüngliche App löschen',
+  switchStart: 'Wechsel starten',
+  typeSelector: {
+    all: 'ALLE Typen',
+    chatbot: 'Chatbot',
+    agent: 'Agent',
+    workflow: 'Workflow',
+    completion: 'Vervollständigung',
+  },
+  tracing: {
+    title: 'Anwendungsleistung nachverfolgen',
+    description: 'Konfiguration eines Drittanbieter-LLMOps-Anbieters und Nachverfolgung der Anwendungsleistung.',
+    config: 'Konfigurieren',
+    collapse: 'Einklappen',
+    expand: 'Ausklappen',
+    tracing: 'Nachverfolgung',
+    disabled: 'Deaktiviert',
+    disabledTip: 'Bitte zuerst den Anbieter konfigurieren',
+    enabled: 'In Betrieb',
+    tracingDescription: 'Erfassung des vollständigen Kontexts der Anwendungsausführung, einschließlich LLM-Aufrufe, Kontext, Prompts, HTTP-Anfragen und mehr, auf einer Nachverfolgungsplattform von Drittanbietern.',
+    configProviderTitle: {
+      configured: 'Konfiguriert',
+      notConfigured: 'Anbieter konfigurieren, um Nachverfolgung zu aktivieren',
+      moreProvider: 'Weitere Anbieter',
+    },
+    langsmith: {
+      title: 'LangSmith',
+      description: 'Eine All-in-One-Entwicklerplattform für jeden Schritt des LLM-gesteuerten Anwendungslebenszyklus.',
+    },
+    langfuse: {
+      title: 'Langfuse',
+      description: 'Traces, Bewertungen, Prompt-Management und Metriken zum Debuggen und Verbessern Ihrer LLM-Anwendung.',
+    },
+    inUse: 'In Verwendung',
+    configProvider: {
+      title: 'Konfigurieren ',
+      placeholder: 'Geben Sie Ihren {{key}} ein',
+      project: 'Projekt',
+      publicKey: 'Öffentlicher Schlüssel',
+      secretKey: 'Geheimer Schlüssel',
+      viewDocsLink: '{{key}}-Dokumentation ansehen',
+      removeConfirmTitle: '{{key}}-Konfiguration entfernen?',
+      removeConfirmContent: 'Die aktuelle Konfiguration wird verwendet. Das Entfernen wird die Nachverfolgungsfunktion ausschalten.',
+    },
+    view: 'Ansehen',
+  },
+  answerIcon: {
+    descriptionInExplore: 'Gibt an, ob das WebApp-Symbol zum Ersetzen 🤖 in Explore verwendet werden soll',
+    title: 'Verwenden Sie das WebApp-Symbol, um es zu ersetzen 🤖',
+    description: 'Gibt an, ob das WebApp-Symbol zum Ersetzen 🤖 in der freigegebenen Anwendung verwendet werden soll',
+  },
+  importFromDSLUrlPlaceholder: 'DSL-Link hier einfügen',
+  duplicate: 'Duplikat',
+  importFromDSL: 'Import von DSL',
+  importDSL: 'DSL-Datei importieren',
+  importFromDSLUrl: 'Von URL',
+  exportFailed: 'Fehler beim Exportieren von DSL.',
+  importFromDSLFile: 'Aus DSL-Datei',
+  export: 'DSL exportieren',
+  duplicateTitle: 'App duplizieren',
+}
+
+export default translation

+ 118 - 115
web/i18n/de-DE/billing.ts

@@ -1,115 +1,118 @@
-const translation = {
-  currentPlan: 'Aktueller Tarif',
-  upgradeBtn: {
-    plain: 'Tarif Upgraden',
-    encourage: 'Jetzt Upgraden',
-    encourageShort: 'Upgraden',
-  },
-  viewBilling: 'Abrechnung und Abonnements verwalten',
-  buyPermissionDeniedTip: 'Bitte kontaktieren Sie Ihren Unternehmensadministrator, um zu abonnieren',
-  plansCommon: {
-    title: 'Wählen Sie einen Tarif, der zu Ihnen passt',
-    yearlyTip: 'Erhalten Sie 2 Monate kostenlos durch jährliches Abonnieren!',
-    mostPopular: 'Am beliebtesten',
-    planRange: {
-      monthly: 'Monatlich',
-      yearly: 'Jährlich',
-    },
-    month: 'Monat',
-    year: 'Jahr',
-    save: 'Sparen ',
-    free: 'Kostenlos',
-    currentPlan: 'Aktueller Tarif',
-    contractSales: 'Vertrieb kontaktieren',
-    contractOwner: 'Teammanager kontaktieren',
-    startForFree: 'Kostenlos starten',
-    getStartedWith: 'Beginnen Sie mit ',
-    contactSales: 'Vertrieb kontaktieren',
-    talkToSales: 'Mit dem Vertrieb sprechen',
-    modelProviders: 'Modellanbieter',
-    teamMembers: 'Teammitglieder',
-    buildApps: 'Apps bauen',
-    vectorSpace: 'Vektorraum',
-    vectorSpaceBillingTooltip: 'Jedes 1MB kann ungefähr 1,2 Millionen Zeichen an vektorisierten Daten speichern (geschätzt mit OpenAI Embeddings, variiert je nach Modell).',
-    vectorSpaceTooltip: 'Vektorraum ist das Langzeitspeichersystem, das erforderlich ist, damit LLMs Ihre Daten verstehen können.',
-    documentsUploadQuota: 'Dokumenten-Upload-Kontingent',
-    documentProcessingPriority: 'Priorität der Dokumentenverarbeitung',
-    documentProcessingPriorityTip: 'Für eine höhere Dokumentenverarbeitungspriorität, bitte Ihren Tarif upgraden.',
-    documentProcessingPriorityUpgrade: 'Mehr Daten mit höherer Genauigkeit bei schnelleren Geschwindigkeiten verarbeiten.',
-    priority: {
-      'standard': 'Standard',
-      'priority': 'Priorität',
-      'top-priority': 'Höchste Priorität',
-    },
-    logsHistory: 'Protokollverlauf',
-    customTools: 'Benutzerdefinierte Werkzeuge',
-    unavailable: 'Nicht verfügbar',
-    days: 'Tage',
-    unlimited: 'Unbegrenzt',
-    support: 'Support',
-    supportItems: {
-      communityForums: 'Community-Foren',
-      emailSupport: 'E-Mail-Support',
-      priorityEmail: 'Priorisierter E-Mail- und Chat-Support',
-      logoChange: 'Logo-Änderung',
-      SSOAuthentication: 'SSO-Authentifizierung',
-      personalizedSupport: 'Persönlicher Support',
-      dedicatedAPISupport: 'Dedizierter API-Support',
-      customIntegration: 'Benutzerdefinierte Integration und Support',
-      ragAPIRequest: 'RAG-API-Anfragen',
-      bulkUpload: 'Massenupload von Dokumenten',
-      agentMode: 'Agentenmodus',
-      workflow: 'Workflow',
-    },
-    comingSoon: 'Demnächst',
-    member: 'Mitglied',
-    memberAfter: 'Mitglied',
-    messageRequest: {
-      title: 'Nachrichtenguthaben',
-      tooltip: 'Nachrichtenaufrufkontingente für verschiedene Tarife unter Verwendung von OpenAI-Modellen (außer gpt4).Nachrichten über dem Limit verwenden Ihren OpenAI-API-Schlüssel.',
-    },
-    annotatedResponse: {
-      title: 'Kontingentgrenzen für Annotationen',
-      tooltip: 'Manuelle Bearbeitung und Annotation von Antworten bieten anpassbare, hochwertige Frage-Antwort-Fähigkeiten für Apps. (Nur anwendbar in Chat-Apps)',
-    },
-    ragAPIRequestTooltip: 'Bezieht sich auf die Anzahl der API-Aufrufe, die nur die Wissensdatenbankverarbeitungsfähigkeiten von Dify aufrufen.',
-    receiptInfo: 'Nur der Teaminhaber und der Teamadministrator können abonnieren und Abrechnungsinformationen einsehen',
-  },
-  plans: {
-    sandbox: {
-      name: 'Sandbox',
-      description: '200 mal GPT kostenlos testen',
-      includesTitle: 'Beinhaltet:',
-    },
-    professional: {
-      name: 'Professionell',
-      description: 'Für Einzelpersonen und kleine Teams, um mehr Leistung erschwinglich freizuschalten.',
-      includesTitle: 'Alles im kostenlosen Tarif, plus:',
-    },
-    team: {
-      name: 'Team',
-      description: 'Zusammenarbeiten ohne Grenzen und Top-Leistung genießen.',
-      includesTitle: 'Alles im Professionell-Tarif, plus:',
-    },
-    enterprise: {
-      name: 'Unternehmen',
-      description: 'Erhalten Sie volle Fähigkeiten und Unterstützung für großangelegte, missionskritische Systeme.',
-      includesTitle: 'Alles im Team-Tarif, plus:',
-    },
-  },
-  vectorSpace: {
-    fullTip: 'Vektorraum ist voll.',
-    fullSolution: 'Upgraden Sie Ihren Tarif, um mehr Speicherplatz zu erhalten.',
-  },
-  apps: {
-    fullTipLine1: 'Upgraden Sie Ihren Tarif, um',
-    fullTipLine2: 'mehr Apps zu bauen.',
-  },
-  annotatedResponse: {
-    fullTipLine1: 'Upgraden Sie Ihren Tarif, um',
-    fullTipLine2: 'mehr Konversationen zu annotieren.',
-    quotaTitle: 'Kontingent für Annotation-Antworten',
-  },
-}
-
-export default translation
+const translation = {
+  currentPlan: 'Aktueller Tarif',
+  upgradeBtn: {
+    plain: 'Tarif Upgraden',
+    encourage: 'Jetzt Upgraden',
+    encourageShort: 'Upgraden',
+  },
+  viewBilling: 'Abrechnung und Abonnements verwalten',
+  buyPermissionDeniedTip: 'Bitte kontaktieren Sie Ihren Unternehmensadministrator, um zu abonnieren',
+  plansCommon: {
+    title: 'Wählen Sie einen Tarif, der zu Ihnen passt',
+    yearlyTip: 'Erhalten Sie 2 Monate kostenlos durch jährliches Abonnieren!',
+    mostPopular: 'Am beliebtesten',
+    planRange: {
+      monthly: 'Monatlich',
+      yearly: 'Jährlich',
+    },
+    month: 'Monat',
+    year: 'Jahr',
+    save: 'Sparen ',
+    free: 'Kostenlos',
+    currentPlan: 'Aktueller Tarif',
+    contractSales: 'Vertrieb kontaktieren',
+    contractOwner: 'Teammanager kontaktieren',
+    startForFree: 'Kostenlos starten',
+    getStartedWith: 'Beginnen Sie mit ',
+    contactSales: 'Vertrieb kontaktieren',
+    talkToSales: 'Mit dem Vertrieb sprechen',
+    modelProviders: 'Modellanbieter',
+    teamMembers: 'Teammitglieder',
+    buildApps: 'Apps bauen',
+    vectorSpace: 'Vektorraum',
+    vectorSpaceBillingTooltip: 'Jedes 1MB kann ungefähr 1,2 Millionen Zeichen an vektorisierten Daten speichern (geschätzt mit OpenAI Embeddings, variiert je nach Modell).',
+    vectorSpaceTooltip: 'Vektorraum ist das Langzeitspeichersystem, das erforderlich ist, damit LLMs Ihre Daten verstehen können.',
+    documentsUploadQuota: 'Dokumenten-Upload-Kontingent',
+    documentProcessingPriority: 'Priorität der Dokumentenverarbeitung',
+    documentProcessingPriorityTip: 'Für eine höhere Dokumentenverarbeitungspriorität, bitte Ihren Tarif upgraden.',
+    documentProcessingPriorityUpgrade: 'Mehr Daten mit höherer Genauigkeit bei schnelleren Geschwindigkeiten verarbeiten.',
+    priority: {
+      'standard': 'Standard',
+      'priority': 'Priorität',
+      'top-priority': 'Höchste Priorität',
+    },
+    logsHistory: 'Protokollverlauf',
+    customTools: 'Benutzerdefinierte Werkzeuge',
+    unavailable: 'Nicht verfügbar',
+    days: 'Tage',
+    unlimited: 'Unbegrenzt',
+    support: 'Support',
+    supportItems: {
+      communityForums: 'Community-Foren',
+      emailSupport: 'E-Mail-Support',
+      priorityEmail: 'Priorisierter E-Mail- und Chat-Support',
+      logoChange: 'Logo-Änderung',
+      SSOAuthentication: 'SSO-Authentifizierung',
+      personalizedSupport: 'Persönlicher Support',
+      dedicatedAPISupport: 'Dedizierter API-Support',
+      customIntegration: 'Benutzerdefinierte Integration und Support',
+      ragAPIRequest: 'RAG-API-Anfragen',
+      bulkUpload: 'Massenupload von Dokumenten',
+      agentMode: 'Agentenmodus',
+      workflow: 'Workflow',
+      llmLoadingBalancing: 'LLM-Lastausgleich',
+      llmLoadingBalancingTooltip: 'Fügen Sie Modellen mehrere API-Schlüssel hinzu, um die API-Ratenlimits effektiv zu umgehen.',
+    },
+    comingSoon: 'Demnächst',
+    member: 'Mitglied',
+    memberAfter: 'Mitglied',
+    messageRequest: {
+      title: 'Nachrichtenguthaben',
+      tooltip: 'Nachrichtenaufrufkontingente für verschiedene Tarife unter Verwendung von OpenAI-Modellen (außer gpt4).Nachrichten über dem Limit verwenden Ihren OpenAI-API-Schlüssel.',
+    },
+    annotatedResponse: {
+      title: 'Kontingentgrenzen für Annotationen',
+      tooltip: 'Manuelle Bearbeitung und Annotation von Antworten bieten anpassbare, hochwertige Frage-Antwort-Fähigkeiten für Apps. (Nur anwendbar in Chat-Apps)',
+    },
+    ragAPIRequestTooltip: 'Bezieht sich auf die Anzahl der API-Aufrufe, die nur die Wissensdatenbankverarbeitungsfähigkeiten von Dify aufrufen.',
+    receiptInfo: 'Nur der Teaminhaber und der Teamadministrator können abonnieren und Abrechnungsinformationen einsehen',
+    annotationQuota: 'Kontingent für Anmerkungen',
+  },
+  plans: {
+    sandbox: {
+      name: 'Sandbox',
+      description: '200 mal GPT kostenlos testen',
+      includesTitle: 'Beinhaltet:',
+    },
+    professional: {
+      name: 'Professionell',
+      description: 'Für Einzelpersonen und kleine Teams, um mehr Leistung erschwinglich freizuschalten.',
+      includesTitle: 'Alles im kostenlosen Tarif, plus:',
+    },
+    team: {
+      name: 'Team',
+      description: 'Zusammenarbeiten ohne Grenzen und Top-Leistung genießen.',
+      includesTitle: 'Alles im Professionell-Tarif, plus:',
+    },
+    enterprise: {
+      name: 'Unternehmen',
+      description: 'Erhalten Sie volle Fähigkeiten und Unterstützung für großangelegte, missionskritische Systeme.',
+      includesTitle: 'Alles im Team-Tarif, plus:',
+    },
+  },
+  vectorSpace: {
+    fullTip: 'Vektorraum ist voll.',
+    fullSolution: 'Upgraden Sie Ihren Tarif, um mehr Speicherplatz zu erhalten.',
+  },
+  apps: {
+    fullTipLine1: 'Upgraden Sie Ihren Tarif, um',
+    fullTipLine2: 'mehr Apps zu bauen.',
+  },
+  annotatedResponse: {
+    fullTipLine1: 'Upgraden Sie Ihren Tarif, um',
+    fullTipLine2: 'mehr Konversationen zu annotieren.',
+    quotaTitle: 'Kontingent für Annotation-Antworten',
+  },
+}
+
+export default translation

+ 39 - 0
web/i18n/de-DE/common.ts

@@ -201,6 +201,11 @@ const translation = {
     disinvite: 'Einladung widerrufen',
     deleteMember: 'Mitglied löschen',
     you: '(Du)',
+    setBuilder: 'Als Builder festlegen',
+    datasetOperator: 'Wissensadministrator',
+    datasetOperatorTip: 'Kann die Wissensdatenbank nur verwalten',
+    builder: 'Bauherr',
+    builderTip: 'Kann eigene Apps erstellen und bearbeiten',
   },
   integrations: {
     connected: 'Verbunden',
@@ -347,6 +352,22 @@ const translation = {
     quotaTip: 'Verbleibende verfügbare kostenlose Token',
     loadPresets: 'Voreinstellungen laden',
     parameters: 'PARAMETER',
+    loadBalancingHeadline: 'Lastenausgleich',
+    apiKey: 'API-SCHLÜSSEL',
+    editConfig: 'Konfiguration bearbeiten',
+    loadBalancing: 'Lastenausgleich',
+    addConfig: 'Konfiguration hinzufügen',
+    configLoadBalancing: 'Lastenausgleich für die Konfiguration',
+    providerManagedDescription: 'Verwenden Sie den einzelnen Satz von Anmeldeinformationen, der vom Modellanbieter bereitgestellt wird.',
+    loadBalancingDescription: 'Reduzieren Sie den Druck mit mehreren Sätzen von Anmeldeinformationen.',
+    modelHasBeenDeprecated: 'Dieses Modell ist veraltet',
+    loadBalancingLeastKeyWarning: 'Um den Lastausgleich zu aktivieren, müssen mindestens 2 Schlüssel aktiviert sein.',
+    providerManaged: 'Vom Anbieter verwaltet',
+    apiKeyStatusNormal: 'APIKey-Status ist normal',
+    upgradeForLoadBalancing: 'Aktualisieren Sie Ihren Plan, um den Lastenausgleich zu aktivieren.',
+    defaultConfig: 'Standardkonfiguration',
+    apiKeyRateLimit: 'Ratenlimit wurde erreicht, verfügbar nach {{seconds}}s',
+    loadBalancingInfo: 'Standardmäßig wird für den Lastenausgleich die Round-Robin-Strategie verwendet. Wenn die Ratenbegrenzung ausgelöst wird, wird eine Abklingzeit von 1 Minute angewendet.',
   },
   dataSource: {
     add: 'Eine Datenquelle hinzufügen',
@@ -370,6 +391,15 @@ const translation = {
         preview: 'VORSCHAU',
       },
     },
+    website: {
+      inactive: 'Inaktiv',
+      description: 'Importieren Sie Inhalte von Websites mit dem Webcrawler.',
+      title: 'Website',
+      configuredCrawlers: 'Konfigurierte Crawler',
+      active: 'Aktiv',
+      with: 'Mit',
+    },
+    configure: 'Konfigurieren',
   },
   plugin: {
     serpapi: {
@@ -418,6 +448,7 @@ const translation = {
     promptEng: 'Orchestrieren',
     apiAccess: 'API-Zugriff',
     logAndAnn: 'Protokolle & Ank.',
+    logs: 'Baumstämme',
   },
   environment: {
     testing: 'TESTEN',
@@ -499,6 +530,10 @@ const translation = {
         add: 'Neue Variable',
         addTool: 'Neues Werkzeug',
       },
+      outputToolDisabledItem: {
+        desc: 'Variablen einfügen',
+        title: 'Variablen',
+      },
     },
     query: {
       item: {
@@ -533,6 +568,10 @@ const translation = {
     created: 'Tag erfolgreich erstellt',
     failed: 'Tag-Erstellung fehlgeschlagen',
   },
+  errorMsg: {
+    fieldRequired: '{{field}} ist erforderlich',
+    urlError: 'Die URL sollte mit http:// oder https:// beginnen',
+  },
 }
 
 export default translation

+ 30 - 30
web/i18n/de-DE/custom.ts

@@ -1,30 +1,30 @@
-const translation = {
-  custom: 'Anpassung',
-  upgradeTip: {
-    prefix: 'Erweitere deinen Plan auf',
-    suffix: 'um deine Marke anzupassen.',
-  },
-  webapp: {
-    title: 'WebApp Marke anpassen',
-    removeBrand: 'Entferne Powered by Dify',
-    changeLogo: 'Ändere Powered by Markenbild',
-    changeLogoTip: 'SVG oder PNG Format mit einer Mindestgröße von 40x40px',
-  },
-  app: {
-    title: 'App Kopfzeilen Marke anpassen',
-    changeLogoTip: 'SVG oder PNG Format mit einer Mindestgröße von 80x80px',
-  },
-  upload: 'Hochladen',
-  uploading: 'Lade hoch',
-  uploadedFail: 'Bild-Upload fehlgeschlagen, bitte erneut hochladen.',
-  change: 'Ändern',
-  apply: 'Anwenden',
-  restore: 'Standardeinstellungen wiederherstellen',
-  customize: {
-    contactUs: ' kontaktiere uns ',
-    prefix: 'Um das Markenlogo innerhalb der App anzupassen, bitte',
-    suffix: 'um auf die Enterprise-Edition zu upgraden.',
-  },
-}
-
-export default translation
+const translation = {
+  custom: 'Anpassung',
+  upgradeTip: {
+    prefix: 'Erweitere deinen Plan auf',
+    suffix: 'um deine Marke anzupassen.',
+  },
+  webapp: {
+    title: 'WebApp Marke anpassen',
+    removeBrand: 'Entferne Powered by Dify',
+    changeLogo: 'Ändere Powered by Markenbild',
+    changeLogoTip: 'SVG oder PNG Format mit einer Mindestgröße von 40x40px',
+  },
+  app: {
+    title: 'App Kopfzeilen Marke anpassen',
+    changeLogoTip: 'SVG oder PNG Format mit einer Mindestgröße von 80x80px',
+  },
+  upload: 'Hochladen',
+  uploading: 'Lade hoch',
+  uploadedFail: 'Bild-Upload fehlgeschlagen, bitte erneut hochladen.',
+  change: 'Ändern',
+  apply: 'Anwenden',
+  restore: 'Standardeinstellungen wiederherstellen',
+  customize: {
+    contactUs: ' kontaktiere uns ',
+    prefix: 'Um das Markenlogo innerhalb der App anzupassen, bitte',
+    suffix: 'um auf die Enterprise-Edition zu upgraden.',
+  },
+}
+
+export default translation

+ 161 - 130
web/i18n/de-DE/dataset-creation.ts

@@ -1,130 +1,161 @@
-const translation = {
-  steps: {
-    header: {
-      creation: 'Wissen erstellen',
-      update: 'Daten hinzufügen',
-    },
-    one: 'Datenquelle wählen',
-    two: 'Textvorverarbeitung und Bereinigung',
-    three: 'Ausführen und beenden',
-  },
-  error: {
-    unavailable: 'Dieses Wissen ist nicht verfügbar',
-  },
-  stepOne: {
-    filePreview: 'Dateivorschau',
-    pagePreview: 'Seitenvorschau',
-    dataSourceType: {
-      file: 'Import aus Textdatei',
-      notion: 'Synchronisation aus Notion',
-      web: 'Synchronisation von Webseite',
-    },
-    uploader: {
-      title: 'Textdatei hochladen',
-      button: 'Datei hierher ziehen oder',
-      browse: 'Durchsuchen',
-      tip: 'Unterstützt {{supportTypes}}. Maximal {{size}}MB pro Datei.',
-      validation: {
-        typeError: 'Dateityp nicht unterstützt',
-        size: 'Datei zu groß. Maximum ist {{size}}MB',
-        count: 'Mehrere Dateien nicht unterstützt',
-        filesNumber: 'Sie haben das Limit für die Stapelverarbeitung von {{filesNumber}} erreicht.',
-      },
-      cancel: 'Abbrechen',
-      change: 'Ändern',
-      failed: 'Hochladen fehlgeschlagen',
-    },
-    notionSyncTitle: 'Notion ist nicht verbunden',
-    notionSyncTip: 'Um mit Notion zu synchronisieren, muss zuerst eine Verbindung zu Notion hergestellt werden.',
-    connect: 'Verbinden gehen',
-    button: 'weiter',
-    emptyDatasetCreation: 'Ich möchte ein leeres Wissen erstellen',
-    modal: {
-      title: 'Ein leeres Wissen erstellen',
-      tip: 'Ein leeres Wissen enthält keine Dokumente, und Sie können jederzeit Dokumente hochladen.',
-      input: 'Wissensname',
-      placeholder: 'Bitte eingeben',
-      nameNotEmpty: 'Name darf nicht leer sein',
-      nameLengthInvaild: 'Name muss zwischen 1 bis 40 Zeichen lang sein',
-      cancelButton: 'Abbrechen',
-      confirmButton: 'Erstellen',
-      failed: 'Erstellung fehlgeschlagen',
-    },
-  },
-  stepTwo: {
-    segmentation: 'Chunk-Einstellungen',
-    auto: 'Automatisch',
-    autoDescription: 'Stellt Chunk- und Vorverarbeitungsregeln automatisch ein. Unbekannten Benutzern wird dies empfohlen.',
-    custom: 'Benutzerdefiniert',
-    customDescription: 'Chunk-Regeln, Chunk-Länge und Vorverarbeitungsregeln usw. anpassen.',
-    separator: 'Segmentidentifikator',
-    separatorPlaceholder: 'Zum Beispiel Neuer Absatz (\\\\n) oder spezieller Separator (wie "***")',
-    maxLength: 'Maximale Chunk-Länge',
-    overlap: 'Chunk-Überlappung',
-    overlapTip: 'Die Einstellung der Chunk-Überlappung kann die semantische Relevanz zwischen ihnen aufrechterhalten und so die Abrufeffekt verbessern. Es wird empfohlen, 10%-25% der maximalen Chunk-Größe einzustellen.',
-    overlapCheck: 'Chunk-Überlappung sollte nicht größer als maximale Chunk-Länge sein',
-    rules: 'Textvorverarbeitungsregeln',
-    removeExtraSpaces: 'Mehrfache Leerzeichen, Zeilenumbrüche und Tabulatoren ersetzen',
-    removeUrlEmails: 'Alle URLs und E-Mail-Adressen löschen',
-    removeStopwords: 'Stopwörter wie "ein", "eine", "der" entfernen',
-    preview: 'Bestätigen & Vorschau',
-    reset: 'Zurücksetzen',
-    indexMode: 'Indexmodus',
-    qualified: 'Hohe Qualität',
-    recommend: 'Empfehlen',
-    qualifiedTip: 'Ruft standardmäßige Systemeinbettungsschnittstelle für die Verarbeitung auf, um höhere Genauigkeit bei Benutzerabfragen zu bieten.',
-    warning: 'Bitte zuerst den API-Schlüssel des Modellanbieters einrichten.',
-    click: 'Zu den Einstellungen gehen',
-    economical: 'Ökonomisch',
-    economicalTip: 'Verwendet Offline-Vektor-Engines, Schlagwortindizes usw., um die Genauigkeit ohne Tokenverbrauch zu reduzieren',
-    QATitle: 'Segmentierung im Frage-und-Antwort-Format',
-    QATip: 'Diese Option zu aktivieren, wird mehr Tokens verbrauchen',
-    QALanguage: 'Segmentierung verwenden',
-    emstimateCost: 'Schätzung',
-    emstimateSegment: 'Geschätzte Chunks',
-    segmentCount: 'Chunks',
-    calculating: 'Berechnung...',
-    fileSource: 'Dokumente vorverarbeiten',
-    notionSource: 'Seiten vorverarbeiten',
-    other: 'und weitere ',
-    fileUnit: ' Dateien',
-    notionUnit: ' Seiten',
-    previousStep: 'Vorheriger Schritt',
-    nextStep: 'Speichern & Verarbeiten',
-    save: 'Speichern & Verarbeiten',
-    cancel: 'Abbrechen',
-    sideTipTitle: 'Warum segmentieren und vorverarbeiten?',
-    sideTipP1: 'Bei der Verarbeitung von Textdaten sind Segmentierung und Bereinigung zwei wichtige Vorverarbeitungsschritte.',
-    sideTipP2: 'Segmentierung teilt langen Text in Absätze, damit Modelle ihn besser verstehen können. Dies verbessert die Qualität und Relevanz der Modellergebnisse.',
-    sideTipP3: 'Bereinigung entfernt unnötige Zeichen und Formate, macht das Wissen sauberer und leichter zu parsen.',
-    sideTipP4: 'Richtige Segmentierung und Bereinigung verbessern die Modellleistung und liefern genauere und wertvollere Ergebnisse.',
-    previewTitle: 'Vorschau',
-    previewTitleButton: 'Vorschau',
-    previewButton: 'Umschalten zum Frage-und-Antwort-Format',
-    previewSwitchTipStart: 'Die aktuelle Chunk-Vorschau ist im Textformat, ein Wechsel zur Vorschau im Frage-und-Antwort-Format wird',
-    previewSwitchTipEnd: ' zusätzliche Tokens verbrauchen',
-    characters: 'Zeichen',
-    indexSettedTip: 'Um die Indexmethode zu ändern, bitte gehen Sie zu den ',
-    retrivalSettedTip: 'Um die Indexmethode zu ändern, bitte gehen Sie zu den ',
-    datasetSettingLink: 'Wissenseinstellungen.',
-  },
-  stepThree: {
-    creationTitle: '🎉 Wissen erstellt',
-    creationContent: 'Wir haben das Wissen automatisch benannt, Sie können es jederzeit ändern',
-    label: 'Wissensname',
-    additionTitle: '🎉 Dokument hochgeladen',
-    additionP1: 'Das Dokument wurde zum Wissen hinzugefügt',
-    additionP2: ', Sie können es in der Dokumentenliste des Wissens finden.',
-    stop: 'Verarbeitung stoppen',
-    resume: 'Verarbeitung fortsetzen',
-    navTo: 'Zum Dokument gehen',
-    sideTipTitle: 'Was kommt als Nächstes',
-    sideTipContent: 'Nachdem das Dokument indiziert wurde, kann das Wissen in die Anwendung als Kontext integriert werden, Sie finden die Kontexteinstellung auf der Seite zur Eingabeaufforderungen-Orchestrierung. Sie können es auch als unabhängiges ChatGPT-Indexierungsplugin zur Veröffentlichung erstellen.',
-    modelTitle: 'Sind Sie sicher, dass Sie die Einbettung stoppen möchten?',
-    modelContent: 'Wenn Sie die Verarbeitung später fortsetzen möchten, werden Sie dort weitermachen, wo Sie aufgehört haben.',
-    modelButtonConfirm: 'Bestätigen',
-    modelButtonCancel: 'Abbrechen',
-  },
-}
-
-export default translation
+const translation = {
+  steps: {
+    header: {
+      creation: 'Wissen erstellen',
+      update: 'Daten hinzufügen',
+    },
+    one: 'Datenquelle wählen',
+    two: 'Textvorverarbeitung und Bereinigung',
+    three: 'Ausführen und beenden',
+  },
+  error: {
+    unavailable: 'Dieses Wissen ist nicht verfügbar',
+  },
+  stepOne: {
+    filePreview: 'Dateivorschau',
+    pagePreview: 'Seitenvorschau',
+    dataSourceType: {
+      file: 'Import aus Textdatei',
+      notion: 'Synchronisation aus Notion',
+      web: 'Synchronisation von Webseite',
+    },
+    uploader: {
+      title: 'Textdatei hochladen',
+      button: 'Datei hierher ziehen oder',
+      browse: 'Durchsuchen',
+      tip: 'Unterstützt {{supportTypes}}. Maximal {{size}}MB pro Datei.',
+      validation: {
+        typeError: 'Dateityp nicht unterstützt',
+        size: 'Datei zu groß. Maximum ist {{size}}MB',
+        count: 'Mehrere Dateien nicht unterstützt',
+        filesNumber: 'Sie haben das Limit für die Stapelverarbeitung von {{filesNumber}} erreicht.',
+      },
+      cancel: 'Abbrechen',
+      change: 'Ändern',
+      failed: 'Hochladen fehlgeschlagen',
+    },
+    notionSyncTitle: 'Notion ist nicht verbunden',
+    notionSyncTip: 'Um mit Notion zu synchronisieren, muss zuerst eine Verbindung zu Notion hergestellt werden.',
+    connect: 'Verbinden gehen',
+    button: 'weiter',
+    emptyDatasetCreation: 'Ich möchte ein leeres Wissen erstellen',
+    modal: {
+      title: 'Ein leeres Wissen erstellen',
+      tip: 'Ein leeres Wissen enthält keine Dokumente, und Sie können jederzeit Dokumente hochladen.',
+      input: 'Wissensname',
+      placeholder: 'Bitte eingeben',
+      nameNotEmpty: 'Name darf nicht leer sein',
+      nameLengthInvaild: 'Name muss zwischen 1 bis 40 Zeichen lang sein',
+      cancelButton: 'Abbrechen',
+      confirmButton: 'Erstellen',
+      failed: 'Erstellung fehlgeschlagen',
+    },
+    website: {
+      preview: 'Vorschau',
+      totalPageScraped: 'Gesamtzahl der gescrapten Seiten:',
+      fireCrawlNotConfigured: 'Firecrawl ist nicht konfiguriert',
+      options: 'Optionen',
+      excludePaths: 'Pfade ausschließen',
+      limit: 'Grenze',
+      exceptionErrorTitle: 'Beim Ausführen des Firecrawl-Auftrags ist eine Ausnahme aufgetreten:',
+      selectAll: 'Alles auswählen',
+      includeOnlyPaths: 'Nur Pfade einschließen',
+      run: 'Laufen',
+      firecrawlDoc: 'Firecrawl-Dokumente',
+      configure: 'Konfigurieren',
+      fireCrawlNotConfiguredDescription: 'Konfigurieren Sie Firecrawl mit dem API-Schlüssel, um es zu verwenden.',
+      maxDepth: 'Maximale Tiefe',
+      unknownError: 'Unbekannter Fehler',
+      resetAll: 'Alles zurücksetzen',
+      extractOnlyMainContent: 'Extrahieren Sie nur den Hauptinhalt (keine Kopf-, Navigations- und Fußzeilen usw.)',
+      firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+      firecrawlTitle: 'Extrahieren von Webinhalten mit 🔥Firecrawl',
+      maxDepthTooltip: 'Maximale Tiefe für das Crawlen relativ zur eingegebenen URL. Tiefe 0 kratzt nur die Seite der eingegebenen URL, Tiefe 1 kratzt die URL und alles nach der eingegebenen URL + ein / und so weiter.',
+      crawlSubPage: 'Unterseiten crawlen',
+      scrapTimeInfo: 'Insgesamt {{{total}} Seiten innerhalb von {{time}}s gescrapt',
+    },
+  },
+  stepTwo: {
+    segmentation: 'Chunk-Einstellungen',
+    auto: 'Automatisch',
+    autoDescription: 'Stellt Chunk- und Vorverarbeitungsregeln automatisch ein. Unbekannten Benutzern wird dies empfohlen.',
+    custom: 'Benutzerdefiniert',
+    customDescription: 'Chunk-Regeln, Chunk-Länge und Vorverarbeitungsregeln usw. anpassen.',
+    separator: 'Segmentidentifikator',
+    separatorPlaceholder: 'Zum Beispiel Neuer Absatz (\\\\n) oder spezieller Separator (wie "***")',
+    maxLength: 'Maximale Chunk-Länge',
+    overlap: 'Chunk-Überlappung',
+    overlapTip: 'Die Einstellung der Chunk-Überlappung kann die semantische Relevanz zwischen ihnen aufrechterhalten und so die Abrufeffekt verbessern. Es wird empfohlen, 10%-25% der maximalen Chunk-Größe einzustellen.',
+    overlapCheck: 'Chunk-Überlappung sollte nicht größer als maximale Chunk-Länge sein',
+    rules: 'Textvorverarbeitungsregeln',
+    removeExtraSpaces: 'Mehrfache Leerzeichen, Zeilenumbrüche und Tabulatoren ersetzen',
+    removeUrlEmails: 'Alle URLs und E-Mail-Adressen löschen',
+    removeStopwords: 'Stopwörter wie "ein", "eine", "der" entfernen',
+    preview: 'Bestätigen & Vorschau',
+    reset: 'Zurücksetzen',
+    indexMode: 'Indexmodus',
+    qualified: 'Hohe Qualität',
+    recommend: 'Empfehlen',
+    qualifiedTip: 'Ruft standardmäßige Systemeinbettungsschnittstelle für die Verarbeitung auf, um höhere Genauigkeit bei Benutzerabfragen zu bieten.',
+    warning: 'Bitte zuerst den API-Schlüssel des Modellanbieters einrichten.',
+    click: 'Zu den Einstellungen gehen',
+    economical: 'Ökonomisch',
+    economicalTip: 'Verwendet Offline-Vektor-Engines, Schlagwortindizes usw., um die Genauigkeit ohne Tokenverbrauch zu reduzieren',
+    QATitle: 'Segmentierung im Frage-und-Antwort-Format',
+    QATip: 'Diese Option zu aktivieren, wird mehr Tokens verbrauchen',
+    QALanguage: 'Segmentierung verwenden',
+    emstimateCost: 'Schätzung',
+    emstimateSegment: 'Geschätzte Chunks',
+    segmentCount: 'Chunks',
+    calculating: 'Berechnung...',
+    fileSource: 'Dokumente vorverarbeiten',
+    notionSource: 'Seiten vorverarbeiten',
+    other: 'und weitere ',
+    fileUnit: ' Dateien',
+    notionUnit: ' Seiten',
+    previousStep: 'Vorheriger Schritt',
+    nextStep: 'Speichern & Verarbeiten',
+    save: 'Speichern & Verarbeiten',
+    cancel: 'Abbrechen',
+    sideTipTitle: 'Warum segmentieren und vorverarbeiten?',
+    sideTipP1: 'Bei der Verarbeitung von Textdaten sind Segmentierung und Bereinigung zwei wichtige Vorverarbeitungsschritte.',
+    sideTipP2: 'Segmentierung teilt langen Text in Absätze, damit Modelle ihn besser verstehen können. Dies verbessert die Qualität und Relevanz der Modellergebnisse.',
+    sideTipP3: 'Bereinigung entfernt unnötige Zeichen und Formate, macht das Wissen sauberer und leichter zu parsen.',
+    sideTipP4: 'Richtige Segmentierung und Bereinigung verbessern die Modellleistung und liefern genauere und wertvollere Ergebnisse.',
+    previewTitle: 'Vorschau',
+    previewTitleButton: 'Vorschau',
+    previewButton: 'Umschalten zum Frage-und-Antwort-Format',
+    previewSwitchTipStart: 'Die aktuelle Chunk-Vorschau ist im Textformat, ein Wechsel zur Vorschau im Frage-und-Antwort-Format wird',
+    previewSwitchTipEnd: ' zusätzliche Tokens verbrauchen',
+    characters: 'Zeichen',
+    indexSettedTip: 'Um die Indexmethode zu ändern, bitte gehen Sie zu den ',
+    retrivalSettedTip: 'Um die Indexmethode zu ändern, bitte gehen Sie zu den ',
+    datasetSettingLink: 'Wissenseinstellungen.',
+    websiteSource: 'Preprocess-Website',
+    webpageUnit: 'Seiten',
+  },
+  stepThree: {
+    creationTitle: '🎉 Wissen erstellt',
+    creationContent: 'Wir haben das Wissen automatisch benannt, Sie können es jederzeit ändern',
+    label: 'Wissensname',
+    additionTitle: '🎉 Dokument hochgeladen',
+    additionP1: 'Das Dokument wurde zum Wissen hinzugefügt',
+    additionP2: ', Sie können es in der Dokumentenliste des Wissens finden.',
+    stop: 'Verarbeitung stoppen',
+    resume: 'Verarbeitung fortsetzen',
+    navTo: 'Zum Dokument gehen',
+    sideTipTitle: 'Was kommt als Nächstes',
+    sideTipContent: 'Nachdem das Dokument indiziert wurde, kann das Wissen in die Anwendung als Kontext integriert werden, Sie finden die Kontexteinstellung auf der Seite zur Eingabeaufforderungen-Orchestrierung. Sie können es auch als unabhängiges ChatGPT-Indexierungsplugin zur Veröffentlichung erstellen.',
+    modelTitle: 'Sind Sie sicher, dass Sie die Einbettung stoppen möchten?',
+    modelContent: 'Wenn Sie die Verarbeitung später fortsetzen möchten, werden Sie dort weitermachen, wo Sie aufgehört haben.',
+    modelButtonConfirm: 'Bestätigen',
+    modelButtonCancel: 'Abbrechen',
+  },
+  firecrawl: {
+    apiKeyPlaceholder: 'API-Schlüssel von firecrawl.dev',
+    configFirecrawl: 'Konfigurieren von 🔥Firecrawl',
+    getApiKeyLinkText: 'Holen Sie sich Ihren API-Schlüssel von firecrawl.dev',
+  },
+}
+
+export default translation

+ 352 - 349
web/i18n/de-DE/dataset-documents.ts

@@ -1,349 +1,352 @@
-const translation = {
-  list: {
-    title: 'Dokumente',
-    desc: 'Alle Dateien des Wissens werden hier angezeigt, und das gesamte Wissen kann mit Dify-Zitaten verknüpft oder über das Chat-Plugin indiziert werden.',
-    addFile: 'Datei hinzufügen',
-    addPages: 'Seiten hinzufügen',
-    table: {
-      header: {
-        fileName: 'DATEINAME',
-        words: 'WÖRTER',
-        hitCount: 'SUCHANFRAGEN',
-        uploadTime: 'HOCHLADEZEIT',
-        status: 'STATUS',
-        action: 'AKTION',
-      },
-    },
-    action: {
-      uploadFile: 'Neue Datei hochladen',
-      settings: 'Segment-Einstellungen',
-      addButton: 'Chunk hinzufügen',
-      add: 'Einen Chunk hinzufügen',
-      batchAdd: 'Batch hinzufügen',
-      archive: 'Archivieren',
-      unarchive: 'Archivierung aufheben',
-      delete: 'Löschen',
-      enableWarning: 'Archivierte Datei kann nicht aktiviert werden',
-      sync: 'Synchronisieren',
-    },
-    index: {
-      enable: 'Aktivieren',
-      disable: 'Deaktivieren',
-      all: 'Alle',
-      enableTip: 'Die Datei kann indiziert werden',
-      disableTip: 'Die Datei kann nicht indiziert werden',
-    },
-    status: {
-      queuing: 'In Warteschlange',
-      indexing: 'Indizierung',
-      paused: 'Pausiert',
-      error: 'Fehler',
-      available: 'Verfügbar',
-      enabled: 'Aktiviert',
-      disabled: 'Deaktiviert',
-      archived: 'Archiviert',
-    },
-    empty: {
-      title: 'Es gibt noch keine Dokumentation',
-      upload: {
-        tip: 'Sie können Dateien hochladen, von der Website oder von Web-Apps wie Notion, GitHub usw. synchronisieren.',
-      },
-      sync: {
-        tip: 'Dify wird periodisch Dateien von Ihrem Notion herunterladen und die Verarbeitung abschließen.',
-      },
-    },
-    delete: {
-      title: 'Sind Sie sicher, dass Sie löschen möchten?',
-      content: 'Wenn Sie die Verarbeitung später fortsetzen müssen, werden Sie dort weitermachen, wo Sie aufgehört haben',
-    },
-    batchModal: {
-      title: 'Chunks in Batch hinzufügen',
-      csvUploadTitle: 'Ziehen Sie Ihre CSV-Datei hierher oder ',
-      browse: 'durchsuchen',
-      tip: 'Die CSV-Datei muss der folgenden Struktur entsprechen:',
-      question: 'Frage',
-      answer: 'Antwort',
-      contentTitle: 'Chunk-Inhalt',
-      content: 'Inhalt',
-      template: 'Laden Sie die Vorlage hier herunter',
-      cancel: 'Abbrechen',
-      run: 'Batch ausführen',
-      runError: 'Batch-Ausführung fehlgeschlagen',
-      processing: 'In Batch-Verarbeitung',
-      completed: 'Import abgeschlossen',
-      error: 'Importfehler',
-      ok: 'OK',
-    },
-  },
-  metadata: {
-    title: 'Metadaten',
-    desc: 'Das Kennzeichnen von Metadaten für Dokumente ermöglicht es der KI, sie rechtzeitig zu erreichen und die Quelle der Referenzen für die Benutzer offenzulegen.',
-    dateTimeFormat: 'MMMM D, YYYY hh:mm A',
-    docTypeSelectTitle: 'Bitte wählen Sie einen Dokumenttyp',
-    docTypeChangeTitle: 'Dokumenttyp ändern',
-    docTypeSelectWarning:
-      'Wenn der Dokumenttyp geändert wird, werden die jetzt ausgefüllten Metadaten nicht mehr erhalten bleiben',
-    firstMetaAction: 'Los geht\'s',
-    placeholder: {
-      add: 'Hinzufügen ',
-      select: 'Auswählen ',
-    },
-    source: {
-      upload_file: 'Datei hochladen',
-      notion: 'Von Notion synchronisieren',
-      github: 'Von Github synchronisieren',
-    },
-    type: {
-      book: 'Buch',
-      webPage: 'Webseite',
-      paper: 'Aufsatz',
-      socialMediaPost: 'Social Media Beitrag',
-      personalDocument: 'Persönliches Dokument',
-      businessDocument: 'Geschäftsdokument',
-      IMChat: 'IM Chat',
-      wikipediaEntry: 'Wikipedia-Eintrag',
-      notion: 'Von Notion synchronisieren',
-      github: 'Von Github synchronisieren',
-      technicalParameters: 'Technische Parameter',
-    },
-    field: {
-      processRule: {
-        processDoc: 'Dokument verarbeiten',
-        segmentRule: 'Chunk-Regel',
-        segmentLength: 'Chunk-Länge',
-        processClean: 'Textverarbeitung bereinigen',
-      },
-      book: {
-        title: 'Titel',
-        language: 'Sprache',
-        author: 'Autor',
-        publisher: 'Verlag',
-        publicationDate: 'Veröffentlichungsdatum',
-        ISBN: 'ISBN',
-        category: 'Kategorie',
-      },
-      webPage: {
-        title: 'Titel',
-        url: 'URL',
-        language: 'Sprache',
-        authorPublisher: 'Autor/Verlag',
-        publishDate: 'Veröffentlichungsdatum',
-        topicsKeywords: 'Themen/Schlüsselwörter',
-        description: 'Beschreibung',
-      },
-      paper: {
-        title: 'Titel',
-        language: 'Sprache',
-        author: 'Autor',
-        publishDate: 'Veröffentlichungsdatum',
-        journalConferenceName: 'Zeitschrift/Konferenzname',
-        volumeIssuePage: 'Band/Ausgabe/Seite',
-        DOI: 'DOI',
-        topicsKeywords: 'Themen/Schlüsselwörter',
-        abstract: 'Zusammenfassung',
-      },
-      socialMediaPost: {
-        platform: 'Plattform',
-        authorUsername: 'Autor/Benutzername',
-        publishDate: 'Veröffentlichungsdatum',
-        postURL: 'Beitrags-URL',
-        topicsTags: 'Themen/Tags',
-      },
-      personalDocument: {
-        title: 'Titel',
-        author: 'Autor',
-        creationDate: 'Erstellungsdatum',
-        lastModifiedDate: 'Letztes Änderungsdatum',
-        documentType: 'Dokumenttyp',
-        tagsCategory: 'Tags/Kategorie',
-      },
-      businessDocument: {
-        title: 'Titel',
-        author: 'Autor',
-        creationDate: 'Erstellungsdatum',
-        lastModifiedDate: 'Letztes Änderungsdatum',
-        documentType: 'Dokumenttyp',
-        departmentTeam: 'Abteilung/Team',
-      },
-      IMChat: {
-        chatPlatform: 'Chat-Plattform',
-        chatPartiesGroupName: 'Chat-Parteien/Gruppenname',
-        participants: 'Teilnehmer',
-        startDate: 'Startdatum',
-        endDate: 'Enddatum',
-        topicsKeywords: 'Themen/Schlüsselwörter',
-        fileType: 'Dateityp',
-      },
-      wikipediaEntry: {
-        title: 'Titel',
-        language: 'Sprache',
-        webpageURL: 'Webseiten-URL',
-        editorContributor: 'Editor/Beitragender',
-        lastEditDate: 'Letztes Bearbeitungsdatum',
-        summaryIntroduction: 'Zusammenfassung/Einführung',
-      },
-      notion: {
-        title: 'Titel',
-        language: 'Sprache',
-        author: 'Autor',
-        createdTime: 'Erstellungszeit',
-        lastModifiedTime: 'Letzte Änderungszeit',
-        url: 'URL',
-        tag: 'Tag',
-        description: 'Beschreibung',
-      },
-      github: {
-        repoName: 'Repository-Name',
-        repoDesc: 'Repository-Beschreibung',
-        repoOwner: 'Repository-Eigentümer',
-        fileName: 'Dateiname',
-        filePath: 'Dateipfad',
-        programmingLang: 'Programmiersprache',
-        url: 'URL',
-        license: 'Lizenz',
-        lastCommitTime: 'Letzte Commit-Zeit',
-        lastCommitAuthor: 'Letzter Commit-Autor',
-      },
-      originInfo: {
-        originalFilename: 'Originaldateiname',
-        originalFileSize: 'Originaldateigröße',
-        uploadDate: 'Hochladedatum',
-        lastUpdateDate: 'Letztes Änderungsdatum',
-        source: 'Quelle',
-      },
-      technicalParameters: {
-        segmentSpecification: 'Chunk-Spezifikation',
-        segmentLength: 'Chunk-Länge',
-        avgParagraphLength: 'Durchschn. Absatzlänge',
-        paragraphs: 'Absätze',
-        hitCount: 'Abrufanzahl',
-        embeddingTime: 'Einbettungszeit',
-        embeddedSpend: 'Einbettungsausgaben',
-      },
-    },
-    languageMap: {
-      zh: 'Chinesisch',
-      en: 'Englisch',
-      es: 'Spanisch',
-      fr: 'Französisch',
-      de: 'Deutsch',
-      ja: 'Japanisch',
-      ko: 'Koreanisch',
-      ru: 'Russisch',
-      ar: 'Arabisch',
-      pt: 'Portugiesisch',
-      it: 'Italienisch',
-      nl: 'Niederländisch',
-      pl: 'Polnisch',
-      sv: 'Schwedisch',
-      tr: 'Türkisch',
-      he: 'Hebräisch',
-      hi: 'Hindi',
-      da: 'Dänisch',
-      fi: 'Finnisch',
-      no: 'Norwegisch',
-      hu: 'Ungarisch',
-      el: 'Griechisch',
-      cs: 'Tschechisch',
-      th: 'Thai',
-      id: 'Indonesisch',
-    },
-    categoryMap: {
-      book: {
-        fiction: 'Fiktion',
-        biography: 'Biografie',
-        history: 'Geschichte',
-        science: 'Wissenschaft',
-        technology: 'Technologie',
-        education: 'Bildung',
-        philosophy: 'Philosophie',
-        religion: 'Religion',
-        socialSciences: 'Sozialwissenschaften',
-        art: 'Kunst',
-        travel: 'Reisen',
-        health: 'Gesundheit',
-        selfHelp: 'Selbsthilfe',
-        businessEconomics: 'Wirtschaft',
-        cooking: 'Kochen',
-        childrenYoungAdults: 'Kinder & Jugendliche',
-        comicsGraphicNovels: 'Comics & Grafische Romane',
-        poetry: 'Poesie',
-        drama: 'Drama',
-        other: 'Andere',
-      },
-      personalDoc: {
-        notes: 'Notizen',
-        blogDraft: 'Blog-Entwurf',
-        diary: 'Tagebuch',
-        researchReport: 'Forschungsbericht',
-        bookExcerpt: 'Buchauszug',
-        schedule: 'Zeitplan',
-        list: 'Liste',
-        projectOverview: 'Projektübersicht',
-        photoCollection: 'Fotosammlung',
-        creativeWriting: 'Kreatives Schreiben',
-        codeSnippet: 'Code-Snippet',
-        designDraft: 'Design-Entwurf',
-        personalResume: 'Persönlicher Lebenslauf',
-        other: 'Andere',
-      },
-      businessDoc: {
-        meetingMinutes: 'Protokolle',
-        researchReport: 'Forschungsbericht',
-        proposal: 'Vorschlag',
-        employeeHandbook: 'Mitarbeiterhandbuch',
-        trainingMaterials: 'Schulungsmaterialien',
-        requirementsDocument: 'Anforderungsdokumentation',
-        designDocument: 'Design-Dokument',
-        productSpecification: 'Produktspezifikation',
-        financialReport: 'Finanzbericht',
-        marketAnalysis: 'Marktanalyse',
-        projectPlan: 'Projektplan',
-        teamStructure: 'Teamstruktur',
-        policiesProcedures: 'Richtlinien & Verfahren',
-        contractsAgreements: 'Verträge & Vereinbarungen',
-        emailCorrespondence: 'E-Mail-Korrespondenz',
-        other: 'Andere',
-      },
-    },
-  },
-  embedding: {
-    processing: 'Einbettungsverarbeitung...',
-    paused: 'Einbettung pausiert',
-    completed: 'Einbettung abgeschlossen',
-    error: 'Einbettungsfehler',
-    docName: 'Dokument vorbereiten',
-    mode: 'Segmentierungsregel',
-    segmentLength: 'Chunk-Länge',
-    textCleaning: 'Textvordefinition und -bereinigung',
-    segments: 'Absätze',
-    highQuality: 'Hochwertiger Modus',
-    economy: 'Wirtschaftlicher Modus',
-    estimate: 'Geschätzter Verbrauch',
-    stop: 'Verarbeitung stoppen',
-    resume: 'Verarbeitung fortsetzen',
-    automatic: 'Automatisch',
-    custom: 'Benutzerdefiniert',
-    previewTip: 'Absatzvorschau ist nach Abschluss der Einbettung verfügbar',
-  },
-  segment: {
-    paragraphs: 'Absätze',
-    keywords: 'Schlüsselwörter',
-    addKeyWord: 'Schlüsselwort hinzufügen',
-    keywordError: 'Die maximale Länge des Schlüsselworts beträgt 20',
-    characters: 'Zeichen',
-    hitCount: 'Abrufanzahl',
-    vectorHash: 'Vektor-Hash: ',
-    questionPlaceholder: 'Frage hier hinzufügen',
-    questionEmpty: 'Frage darf nicht leer sein',
-    answerPlaceholder: 'Antwort hier hinzufügen',
-    answerEmpty: 'Antwort darf nicht leer sein',
-    contentPlaceholder: 'Inhalt hier hinzufügen',
-    contentEmpty: 'Inhalt darf nicht leer sein',
-    newTextSegment: 'Neues Textsegment',
-    newQaSegment: 'Neues Q&A-Segment',
-    delete: 'Diesen Chunk löschen?',
-  },
-}
-
-export default translation
+const translation = {
+  list: {
+    title: 'Dokumente',
+    desc: 'Alle Dateien des Wissens werden hier angezeigt, und das gesamte Wissen kann mit Dify-Zitaten verknüpft oder über das Chat-Plugin indiziert werden.',
+    addFile: 'Datei hinzufügen',
+    addPages: 'Seiten hinzufügen',
+    table: {
+      header: {
+        fileName: 'DATEINAME',
+        words: 'WÖRTER',
+        hitCount: 'SUCHANFRAGEN',
+        uploadTime: 'HOCHLADEZEIT',
+        status: 'STATUS',
+        action: 'AKTION',
+      },
+      name: 'Name',
+      rename: 'Umbenennen',
+    },
+    action: {
+      uploadFile: 'Neue Datei hochladen',
+      settings: 'Segment-Einstellungen',
+      addButton: 'Chunk hinzufügen',
+      add: 'Einen Chunk hinzufügen',
+      batchAdd: 'Batch hinzufügen',
+      archive: 'Archivieren',
+      unarchive: 'Archivierung aufheben',
+      delete: 'Löschen',
+      enableWarning: 'Archivierte Datei kann nicht aktiviert werden',
+      sync: 'Synchronisieren',
+    },
+    index: {
+      enable: 'Aktivieren',
+      disable: 'Deaktivieren',
+      all: 'Alle',
+      enableTip: 'Die Datei kann indiziert werden',
+      disableTip: 'Die Datei kann nicht indiziert werden',
+    },
+    status: {
+      queuing: 'In Warteschlange',
+      indexing: 'Indizierung',
+      paused: 'Pausiert',
+      error: 'Fehler',
+      available: 'Verfügbar',
+      enabled: 'Aktiviert',
+      disabled: 'Deaktiviert',
+      archived: 'Archiviert',
+    },
+    empty: {
+      title: 'Es gibt noch keine Dokumentation',
+      upload: {
+        tip: 'Sie können Dateien hochladen, von der Website oder von Web-Apps wie Notion, GitHub usw. synchronisieren.',
+      },
+      sync: {
+        tip: 'Dify wird periodisch Dateien von Ihrem Notion herunterladen und die Verarbeitung abschließen.',
+      },
+    },
+    delete: {
+      title: 'Sind Sie sicher, dass Sie löschen möchten?',
+      content: 'Wenn Sie die Verarbeitung später fortsetzen müssen, werden Sie dort weitermachen, wo Sie aufgehört haben',
+    },
+    batchModal: {
+      title: 'Chunks in Batch hinzufügen',
+      csvUploadTitle: 'Ziehen Sie Ihre CSV-Datei hierher oder ',
+      browse: 'durchsuchen',
+      tip: 'Die CSV-Datei muss der folgenden Struktur entsprechen:',
+      question: 'Frage',
+      answer: 'Antwort',
+      contentTitle: 'Chunk-Inhalt',
+      content: 'Inhalt',
+      template: 'Laden Sie die Vorlage hier herunter',
+      cancel: 'Abbrechen',
+      run: 'Batch ausführen',
+      runError: 'Batch-Ausführung fehlgeschlagen',
+      processing: 'In Batch-Verarbeitung',
+      completed: 'Import abgeschlossen',
+      error: 'Importfehler',
+      ok: 'OK',
+    },
+    addUrl: 'URL hinzufügen',
+  },
+  metadata: {
+    title: 'Metadaten',
+    desc: 'Das Kennzeichnen von Metadaten für Dokumente ermöglicht es der KI, sie rechtzeitig zu erreichen und die Quelle der Referenzen für die Benutzer offenzulegen.',
+    dateTimeFormat: 'MMMM D, YYYY hh:mm A',
+    docTypeSelectTitle: 'Bitte wählen Sie einen Dokumenttyp',
+    docTypeChangeTitle: 'Dokumenttyp ändern',
+    docTypeSelectWarning:
+      'Wenn der Dokumenttyp geändert wird, werden die jetzt ausgefüllten Metadaten nicht mehr erhalten bleiben',
+    firstMetaAction: 'Los geht\'s',
+    placeholder: {
+      add: 'Hinzufügen ',
+      select: 'Auswählen ',
+    },
+    source: {
+      upload_file: 'Datei hochladen',
+      notion: 'Von Notion synchronisieren',
+      github: 'Von Github synchronisieren',
+    },
+    type: {
+      book: 'Buch',
+      webPage: 'Webseite',
+      paper: 'Aufsatz',
+      socialMediaPost: 'Social Media Beitrag',
+      personalDocument: 'Persönliches Dokument',
+      businessDocument: 'Geschäftsdokument',
+      IMChat: 'IM Chat',
+      wikipediaEntry: 'Wikipedia-Eintrag',
+      notion: 'Von Notion synchronisieren',
+      github: 'Von Github synchronisieren',
+      technicalParameters: 'Technische Parameter',
+    },
+    field: {
+      processRule: {
+        processDoc: 'Dokument verarbeiten',
+        segmentRule: 'Chunk-Regel',
+        segmentLength: 'Chunk-Länge',
+        processClean: 'Textverarbeitung bereinigen',
+      },
+      book: {
+        title: 'Titel',
+        language: 'Sprache',
+        author: 'Autor',
+        publisher: 'Verlag',
+        publicationDate: 'Veröffentlichungsdatum',
+        ISBN: 'ISBN',
+        category: 'Kategorie',
+      },
+      webPage: {
+        title: 'Titel',
+        url: 'URL',
+        language: 'Sprache',
+        authorPublisher: 'Autor/Verlag',
+        publishDate: 'Veröffentlichungsdatum',
+        topicsKeywords: 'Themen/Schlüsselwörter',
+        description: 'Beschreibung',
+      },
+      paper: {
+        title: 'Titel',
+        language: 'Sprache',
+        author: 'Autor',
+        publishDate: 'Veröffentlichungsdatum',
+        journalConferenceName: 'Zeitschrift/Konferenzname',
+        volumeIssuePage: 'Band/Ausgabe/Seite',
+        DOI: 'DOI',
+        topicsKeywords: 'Themen/Schlüsselwörter',
+        abstract: 'Zusammenfassung',
+      },
+      socialMediaPost: {
+        platform: 'Plattform',
+        authorUsername: 'Autor/Benutzername',
+        publishDate: 'Veröffentlichungsdatum',
+        postURL: 'Beitrags-URL',
+        topicsTags: 'Themen/Tags',
+      },
+      personalDocument: {
+        title: 'Titel',
+        author: 'Autor',
+        creationDate: 'Erstellungsdatum',
+        lastModifiedDate: 'Letztes Änderungsdatum',
+        documentType: 'Dokumenttyp',
+        tagsCategory: 'Tags/Kategorie',
+      },
+      businessDocument: {
+        title: 'Titel',
+        author: 'Autor',
+        creationDate: 'Erstellungsdatum',
+        lastModifiedDate: 'Letztes Änderungsdatum',
+        documentType: 'Dokumenttyp',
+        departmentTeam: 'Abteilung/Team',
+      },
+      IMChat: {
+        chatPlatform: 'Chat-Plattform',
+        chatPartiesGroupName: 'Chat-Parteien/Gruppenname',
+        participants: 'Teilnehmer',
+        startDate: 'Startdatum',
+        endDate: 'Enddatum',
+        topicsKeywords: 'Themen/Schlüsselwörter',
+        fileType: 'Dateityp',
+      },
+      wikipediaEntry: {
+        title: 'Titel',
+        language: 'Sprache',
+        webpageURL: 'Webseiten-URL',
+        editorContributor: 'Editor/Beitragender',
+        lastEditDate: 'Letztes Bearbeitungsdatum',
+        summaryIntroduction: 'Zusammenfassung/Einführung',
+      },
+      notion: {
+        title: 'Titel',
+        language: 'Sprache',
+        author: 'Autor',
+        createdTime: 'Erstellungszeit',
+        lastModifiedTime: 'Letzte Änderungszeit',
+        url: 'URL',
+        tag: 'Tag',
+        description: 'Beschreibung',
+      },
+      github: {
+        repoName: 'Repository-Name',
+        repoDesc: 'Repository-Beschreibung',
+        repoOwner: 'Repository-Eigentümer',
+        fileName: 'Dateiname',
+        filePath: 'Dateipfad',
+        programmingLang: 'Programmiersprache',
+        url: 'URL',
+        license: 'Lizenz',
+        lastCommitTime: 'Letzte Commit-Zeit',
+        lastCommitAuthor: 'Letzter Commit-Autor',
+      },
+      originInfo: {
+        originalFilename: 'Originaldateiname',
+        originalFileSize: 'Originaldateigröße',
+        uploadDate: 'Hochladedatum',
+        lastUpdateDate: 'Letztes Änderungsdatum',
+        source: 'Quelle',
+      },
+      technicalParameters: {
+        segmentSpecification: 'Chunk-Spezifikation',
+        segmentLength: 'Chunk-Länge',
+        avgParagraphLength: 'Durchschn. Absatzlänge',
+        paragraphs: 'Absätze',
+        hitCount: 'Abrufanzahl',
+        embeddingTime: 'Einbettungszeit',
+        embeddedSpend: 'Einbettungsausgaben',
+      },
+    },
+    languageMap: {
+      zh: 'Chinesisch',
+      en: 'Englisch',
+      es: 'Spanisch',
+      fr: 'Französisch',
+      de: 'Deutsch',
+      ja: 'Japanisch',
+      ko: 'Koreanisch',
+      ru: 'Russisch',
+      ar: 'Arabisch',
+      pt: 'Portugiesisch',
+      it: 'Italienisch',
+      nl: 'Niederländisch',
+      pl: 'Polnisch',
+      sv: 'Schwedisch',
+      tr: 'Türkisch',
+      he: 'Hebräisch',
+      hi: 'Hindi',
+      da: 'Dänisch',
+      fi: 'Finnisch',
+      no: 'Norwegisch',
+      hu: 'Ungarisch',
+      el: 'Griechisch',
+      cs: 'Tschechisch',
+      th: 'Thai',
+      id: 'Indonesisch',
+    },
+    categoryMap: {
+      book: {
+        fiction: 'Fiktion',
+        biography: 'Biografie',
+        history: 'Geschichte',
+        science: 'Wissenschaft',
+        technology: 'Technologie',
+        education: 'Bildung',
+        philosophy: 'Philosophie',
+        religion: 'Religion',
+        socialSciences: 'Sozialwissenschaften',
+        art: 'Kunst',
+        travel: 'Reisen',
+        health: 'Gesundheit',
+        selfHelp: 'Selbsthilfe',
+        businessEconomics: 'Wirtschaft',
+        cooking: 'Kochen',
+        childrenYoungAdults: 'Kinder & Jugendliche',
+        comicsGraphicNovels: 'Comics & Grafische Romane',
+        poetry: 'Poesie',
+        drama: 'Drama',
+        other: 'Andere',
+      },
+      personalDoc: {
+        notes: 'Notizen',
+        blogDraft: 'Blog-Entwurf',
+        diary: 'Tagebuch',
+        researchReport: 'Forschungsbericht',
+        bookExcerpt: 'Buchauszug',
+        schedule: 'Zeitplan',
+        list: 'Liste',
+        projectOverview: 'Projektübersicht',
+        photoCollection: 'Fotosammlung',
+        creativeWriting: 'Kreatives Schreiben',
+        codeSnippet: 'Code-Snippet',
+        designDraft: 'Design-Entwurf',
+        personalResume: 'Persönlicher Lebenslauf',
+        other: 'Andere',
+      },
+      businessDoc: {
+        meetingMinutes: 'Protokolle',
+        researchReport: 'Forschungsbericht',
+        proposal: 'Vorschlag',
+        employeeHandbook: 'Mitarbeiterhandbuch',
+        trainingMaterials: 'Schulungsmaterialien',
+        requirementsDocument: 'Anforderungsdokumentation',
+        designDocument: 'Design-Dokument',
+        productSpecification: 'Produktspezifikation',
+        financialReport: 'Finanzbericht',
+        marketAnalysis: 'Marktanalyse',
+        projectPlan: 'Projektplan',
+        teamStructure: 'Teamstruktur',
+        policiesProcedures: 'Richtlinien & Verfahren',
+        contractsAgreements: 'Verträge & Vereinbarungen',
+        emailCorrespondence: 'E-Mail-Korrespondenz',
+        other: 'Andere',
+      },
+    },
+  },
+  embedding: {
+    processing: 'Einbettungsverarbeitung...',
+    paused: 'Einbettung pausiert',
+    completed: 'Einbettung abgeschlossen',
+    error: 'Einbettungsfehler',
+    docName: 'Dokument vorbereiten',
+    mode: 'Segmentierungsregel',
+    segmentLength: 'Chunk-Länge',
+    textCleaning: 'Textvordefinition und -bereinigung',
+    segments: 'Absätze',
+    highQuality: 'Hochwertiger Modus',
+    economy: 'Wirtschaftlicher Modus',
+    estimate: 'Geschätzter Verbrauch',
+    stop: 'Verarbeitung stoppen',
+    resume: 'Verarbeitung fortsetzen',
+    automatic: 'Automatisch',
+    custom: 'Benutzerdefiniert',
+    previewTip: 'Absatzvorschau ist nach Abschluss der Einbettung verfügbar',
+  },
+  segment: {
+    paragraphs: 'Absätze',
+    keywords: 'Schlüsselwörter',
+    addKeyWord: 'Schlüsselwort hinzufügen',
+    keywordError: 'Die maximale Länge des Schlüsselworts beträgt 20',
+    characters: 'Zeichen',
+    hitCount: 'Abrufanzahl',
+    vectorHash: 'Vektor-Hash: ',
+    questionPlaceholder: 'Frage hier hinzufügen',
+    questionEmpty: 'Frage darf nicht leer sein',
+    answerPlaceholder: 'Antwort hier hinzufügen',
+    answerEmpty: 'Antwort darf nicht leer sein',
+    contentPlaceholder: 'Inhalt hier hinzufügen',
+    contentEmpty: 'Inhalt darf nicht leer sein',
+    newTextSegment: 'Neues Textsegment',
+    newQaSegment: 'Neues Q&A-Segment',
+    delete: 'Diesen Chunk löschen?',
+  },
+}
+
+export default translation

+ 28 - 28
web/i18n/de-DE/dataset-hit-testing.ts

@@ -1,28 +1,28 @@
-const translation = {
-  title: 'Abruf-Test',
-  desc: 'Testen Sie die Treffereffektivität des Wissens anhand des gegebenen Abfragetextes.',
-  dateTimeFormat: 'MM/TT/JJJJ hh:mm A',
-  recents: 'Kürzlich',
-  table: {
-    header: {
-      source: 'Quelle',
-      text: 'Text',
-      time: 'Zeit',
-    },
-  },
-  input: {
-    title: 'Quelltext',
-    placeholder: 'Bitte geben Sie einen Text ein, ein kurzer aussagekräftiger Satz wird empfohlen.',
-    countWarning: 'Bis zu 200 Zeichen.',
-    indexWarning: 'Nur Wissen hoher Qualität.',
-    testing: 'Testen',
-  },
-  hit: {
-    title: 'ABRUFPARAGRAFEN',
-    emptyTip: 'Ergebnisse des Abruf-Tests werden hier angezeigt',
-  },
-  noRecentTip: 'Keine kürzlichen Abfrageergebnisse hier',
-  viewChart: 'VEKTORDIAGRAMM ansehen',
-}
-
-export default translation
+const translation = {
+  title: 'Abruf-Test',
+  desc: 'Testen Sie die Treffereffektivität des Wissens anhand des gegebenen Abfragetextes.',
+  dateTimeFormat: 'MM/TT/JJJJ hh:mm A',
+  recents: 'Kürzlich',
+  table: {
+    header: {
+      source: 'Quelle',
+      text: 'Text',
+      time: 'Zeit',
+    },
+  },
+  input: {
+    title: 'Quelltext',
+    placeholder: 'Bitte geben Sie einen Text ein, ein kurzer aussagekräftiger Satz wird empfohlen.',
+    countWarning: 'Bis zu 200 Zeichen.',
+    indexWarning: 'Nur Wissen hoher Qualität.',
+    testing: 'Testen',
+  },
+  hit: {
+    title: 'ABRUFPARAGRAFEN',
+    emptyTip: 'Ergebnisse des Abruf-Tests werden hier angezeigt',
+  },
+  noRecentTip: 'Keine kürzlichen Abfrageergebnisse hier',
+  viewChart: 'VEKTORDIAGRAMM ansehen',
+}
+
+export default translation

+ 35 - 33
web/i18n/de-DE/dataset-settings.ts

@@ -1,33 +1,35 @@
-const translation = {
-  title: 'Wissenseinstellungen',
-  desc: 'Hier können Sie die Eigenschaften und Arbeitsweisen des Wissens anpassen.',
-  form: {
-    name: 'Wissensname',
-    namePlaceholder: 'Bitte geben Sie den Namen des Wissens ein',
-    nameError: 'Name darf nicht leer sein',
-    desc: 'Wissensbeschreibung',
-    descInfo: 'Bitte schreiben Sie eine klare textuelle Beschreibung, um den Inhalt des Wissens zu umreißen. Diese Beschreibung wird als Grundlage für die Auswahl aus mehreren Wissensdatenbanken zur Inferenz verwendet.',
-    descPlaceholder: 'Beschreiben Sie, was in diesem Wissen enthalten ist. Eine detaillierte Beschreibung ermöglicht es der KI, zeitnah auf den Inhalt des Wissens zuzugreifen. Wenn leer, verwendet Dify die Standard-Treffstrategie.',
-    descWrite: 'Erfahren Sie, wie man eine gute Wissensbeschreibung schreibt.',
-    permissions: 'Berechtigungen',
-    permissionsOnlyMe: 'Nur ich',
-    permissionsAllMember: 'Alle Teammitglieder',
-    indexMethod: 'Indexierungsmethode',
-    indexMethodHighQuality: 'Hohe Qualität',
-    indexMethodHighQualityTip: 'Den Embedding-Modell zur Verarbeitung aufrufen, um bei Benutzeranfragen eine höhere Genauigkeit zu bieten.',
-    indexMethodEconomy: 'Ökonomisch',
-    indexMethodEconomyTip: 'Verwendet Offline-Vektor-Engines, Schlagwortindizes usw., um die Genauigkeit ohne Tokenverbrauch zu reduzieren',
-    embeddingModel: 'Einbettungsmodell',
-    embeddingModelTip: 'Ändern Sie das eingebettete Modell, bitte gehen Sie zu ',
-    embeddingModelTipLink: 'Einstellungen',
-    retrievalSetting: {
-      title: 'Abrufeinstellung',
-      learnMore: 'Mehr erfahren',
-      description: ' über die Abrufmethode.',
-      longDescription: ' über die Abrufmethode, dies kann jederzeit in den Wissenseinstellungen geändert werden.',
-    },
-    save: 'Speichern',
-  },
-}
-
-export default translation
+const translation = {
+  title: 'Wissenseinstellungen',
+  desc: 'Hier können Sie die Eigenschaften und Arbeitsweisen des Wissens anpassen.',
+  form: {
+    name: 'Wissensname',
+    namePlaceholder: 'Bitte geben Sie den Namen des Wissens ein',
+    nameError: 'Name darf nicht leer sein',
+    desc: 'Wissensbeschreibung',
+    descInfo: 'Bitte schreiben Sie eine klare textuelle Beschreibung, um den Inhalt des Wissens zu umreißen. Diese Beschreibung wird als Grundlage für die Auswahl aus mehreren Wissensdatenbanken zur Inferenz verwendet.',
+    descPlaceholder: 'Beschreiben Sie, was in diesem Wissen enthalten ist. Eine detaillierte Beschreibung ermöglicht es der KI, zeitnah auf den Inhalt des Wissens zuzugreifen. Wenn leer, verwendet Dify die Standard-Treffstrategie.',
+    descWrite: 'Erfahren Sie, wie man eine gute Wissensbeschreibung schreibt.',
+    permissions: 'Berechtigungen',
+    permissionsOnlyMe: 'Nur ich',
+    permissionsAllMember: 'Alle Teammitglieder',
+    indexMethod: 'Indexierungsmethode',
+    indexMethodHighQuality: 'Hohe Qualität',
+    indexMethodHighQualityTip: 'Den Embedding-Modell zur Verarbeitung aufrufen, um bei Benutzeranfragen eine höhere Genauigkeit zu bieten.',
+    indexMethodEconomy: 'Ökonomisch',
+    indexMethodEconomyTip: 'Verwendet Offline-Vektor-Engines, Schlagwortindizes usw., um die Genauigkeit ohne Tokenverbrauch zu reduzieren',
+    embeddingModel: 'Einbettungsmodell',
+    embeddingModelTip: 'Ändern Sie das eingebettete Modell, bitte gehen Sie zu ',
+    embeddingModelTipLink: 'Einstellungen',
+    retrievalSetting: {
+      title: 'Abrufeinstellung',
+      learnMore: 'Mehr erfahren',
+      description: ' über die Abrufmethode.',
+      longDescription: ' über die Abrufmethode, dies kann jederzeit in den Wissenseinstellungen geändert werden.',
+    },
+    save: 'Speichern',
+    permissionsInvitedMembers: 'Teilweise Teammitglieder',
+    me: '(Sie)',
+  },
+}
+
+export default translation

+ 76 - 76
web/i18n/de-DE/dataset.ts

@@ -1,76 +1,76 @@
-const translation = {
-  knowledge: 'Wissen',
-  documentCount: ' Dokumente',
-  wordCount: ' k Wörter',
-  appCount: ' verknüpfte Apps',
-  createDataset: 'Wissen erstellen',
-  createDatasetIntro: 'Importiere deine eigenen Textdaten oder schreibe Daten in Echtzeit über Webhook für die LLM-Kontextverbesserung.',
-  deleteDatasetConfirmTitle: 'Dieses Wissen löschen?',
-  deleteDatasetConfirmContent:
-    'Das Löschen des Wissens ist unwiderruflich. Benutzer werden nicht mehr auf Ihr Wissen zugreifen können und alle Eingabeaufforderungen, Konfigurationen und Protokolle werden dauerhaft gelöscht.',
-  datasetUsedByApp: 'Das Wissen wird von einigen Apps verwendet. Apps werden dieses Wissen nicht mehr nutzen können, und alle Prompt-Konfigurationen und Protokolle werden dauerhaft gelöscht.',
-  datasetDeleted: 'Wissen gelöscht',
-  datasetDeleteFailed: 'Löschen des Wissens fehlgeschlagen',
-  didYouKnow: 'Wusstest du schon?',
-  intro1: 'Das Wissen kann in die Dify-Anwendung ',
-  intro2: 'als Kontext',
-  intro3: ',',
-  intro4: 'oder es ',
-  intro5: 'kann erstellt werden',
-  intro6: ' als ein eigenständiges ChatGPT-Index-Plugin zum Veröffentlichen',
-  unavailable: 'Nicht verfügbar',
-  unavailableTip: 'Einbettungsmodell ist nicht verfügbar, das Standard-Einbettungsmodell muss konfiguriert werden',
-  datasets: 'WISSEN',
-  datasetsApi: 'API',
-  retrieval: {
-    semantic_search: {
-      title: 'Vektorsuche',
-      description: 'Erzeuge Abfrage-Einbettungen und suche nach dem Textstück, das seiner Vektorrepräsentation am ähnlichsten ist.',
-    },
-    full_text_search: {
-      title: 'Volltextsuche',
-      description: 'Indiziere alle Begriffe im Dokument, sodass Benutzer jeden Begriff suchen und den relevanten Textabschnitt finden können, der diese Begriffe enthält.',
-    },
-    hybrid_search: {
-      title: 'Hybridsuche',
-      description: 'Führe Volltextsuche und Vektorsuchen gleichzeitig aus, ordne neu, um die beste Übereinstimmung für die Abfrage des Benutzers auszuwählen. Konfiguration des Rerank-Modell-APIs ist notwendig.',
-      recommend: 'Empfehlen',
-    },
-    invertedIndex: {
-      title: 'Invertierter Index',
-      description: 'Ein invertierter Index ist eine Struktur, die für effiziente Abfragen verwendet wird. Organisiert nach Begriffen, zeigt jeder Begriff auf Dokumente oder Webseiten, die ihn enthalten.',
-    },
-    change: 'Ändern',
-    changeRetrievalMethod: 'Abfragemethode ändern',
-  },
-  docsFailedNotice: 'Dokumente konnten nicht indiziert werden',
-  retry: 'Wiederholen',
-  indexingTechnique: {
-    high_quality: 'HQ',
-    economy: 'ECO',
-  },
-  indexingMethod: {
-    semantic_search: 'VEKTOR',
-    full_text_search: 'VOLLTEXT',
-    hybrid_search: 'HYBRID',
-    invertedIndex: 'INVERTIERT',
-  },
-  mixtureHighQualityAndEconomicTip: 'Für die Mischung von hochwertigen und wirtschaftlichen Wissensbasen ist das Rerank-Modell erforderlich.',
-  inconsistentEmbeddingModelTip: 'Das Rerank-Modell ist erforderlich, wenn die Embedding-Modelle der ausgewählten Wissensbasen inkonsistent sind.',
-  retrievalSettings: 'Abrufeinstellungen',
-  rerankSettings: 'Rerank-Einstellungen',
-  weightedScore: {
-    title: 'Gewichtete Bewertung',
-    description: 'Durch Anpassung der zugewiesenen Gewichte bestimmt diese Rerank-Strategie, ob semantische oder Schlüsselwort-Übereinstimmung priorisiert werden soll.',
-    semanticFirst: 'Semantik zuerst',
-    keywordFirst: 'Schlüsselwort zuerst',
-    customized: 'Angepasst',
-    semantic: 'Semantisch',
-    keyword: 'Schlüsselwort',
-  },
-  nTo1RetrievalLegacy: 'N-zu-1-Abruf wird ab September offiziell eingestellt. Es wird empfohlen, den neuesten Multi-Pfad-Abruf zu verwenden, um bessere Ergebnisse zu erzielen.',
-  nTo1RetrievalLegacyLink: 'Mehr erfahren',
-  nTo1RetrievalLegacyLinkText: 'N-zu-1-Abruf wird im September offiziell eingestellt.',
-}
-
-export default translation
+const translation = {
+  knowledge: 'Wissen',
+  documentCount: ' Dokumente',
+  wordCount: ' k Wörter',
+  appCount: ' verknüpfte Apps',
+  createDataset: 'Wissen erstellen',
+  createDatasetIntro: 'Importiere deine eigenen Textdaten oder schreibe Daten in Echtzeit über Webhook für die LLM-Kontextverbesserung.',
+  deleteDatasetConfirmTitle: 'Dieses Wissen löschen?',
+  deleteDatasetConfirmContent:
+    'Das Löschen des Wissens ist unwiderruflich. Benutzer werden nicht mehr auf Ihr Wissen zugreifen können und alle Eingabeaufforderungen, Konfigurationen und Protokolle werden dauerhaft gelöscht.',
+  datasetUsedByApp: 'Das Wissen wird von einigen Apps verwendet. Apps werden dieses Wissen nicht mehr nutzen können, und alle Prompt-Konfigurationen und Protokolle werden dauerhaft gelöscht.',
+  datasetDeleted: 'Wissen gelöscht',
+  datasetDeleteFailed: 'Löschen des Wissens fehlgeschlagen',
+  didYouKnow: 'Wusstest du schon?',
+  intro1: 'Das Wissen kann in die Dify-Anwendung ',
+  intro2: 'als Kontext',
+  intro3: ',',
+  intro4: 'oder es ',
+  intro5: 'kann erstellt werden',
+  intro6: ' als ein eigenständiges ChatGPT-Index-Plugin zum Veröffentlichen',
+  unavailable: 'Nicht verfügbar',
+  unavailableTip: 'Einbettungsmodell ist nicht verfügbar, das Standard-Einbettungsmodell muss konfiguriert werden',
+  datasets: 'WISSEN',
+  datasetsApi: 'API',
+  retrieval: {
+    semantic_search: {
+      title: 'Vektorsuche',
+      description: 'Erzeuge Abfrage-Einbettungen und suche nach dem Textstück, das seiner Vektorrepräsentation am ähnlichsten ist.',
+    },
+    full_text_search: {
+      title: 'Volltextsuche',
+      description: 'Indiziere alle Begriffe im Dokument, sodass Benutzer jeden Begriff suchen und den relevanten Textabschnitt finden können, der diese Begriffe enthält.',
+    },
+    hybrid_search: {
+      title: 'Hybridsuche',
+      description: 'Führe Volltextsuche und Vektorsuchen gleichzeitig aus, ordne neu, um die beste Übereinstimmung für die Abfrage des Benutzers auszuwählen. Konfiguration des Rerank-Modell-APIs ist notwendig.',
+      recommend: 'Empfehlen',
+    },
+    invertedIndex: {
+      title: 'Invertierter Index',
+      description: 'Ein invertierter Index ist eine Struktur, die für effiziente Abfragen verwendet wird. Organisiert nach Begriffen, zeigt jeder Begriff auf Dokumente oder Webseiten, die ihn enthalten.',
+    },
+    change: 'Ändern',
+    changeRetrievalMethod: 'Abfragemethode ändern',
+  },
+  docsFailedNotice: 'Dokumente konnten nicht indiziert werden',
+  retry: 'Wiederholen',
+  indexingTechnique: {
+    high_quality: 'HQ',
+    economy: 'ECO',
+  },
+  indexingMethod: {
+    semantic_search: 'VEKTOR',
+    full_text_search: 'VOLLTEXT',
+    hybrid_search: 'HYBRID',
+    invertedIndex: 'INVERTIERT',
+  },
+  mixtureHighQualityAndEconomicTip: 'Für die Mischung von hochwertigen und wirtschaftlichen Wissensbasen ist das Rerank-Modell erforderlich.',
+  inconsistentEmbeddingModelTip: 'Das Rerank-Modell ist erforderlich, wenn die Embedding-Modelle der ausgewählten Wissensbasen inkonsistent sind.',
+  retrievalSettings: 'Abrufeinstellungen',
+  rerankSettings: 'Rerank-Einstellungen',
+  weightedScore: {
+    title: 'Gewichtete Bewertung',
+    description: 'Durch Anpassung der zugewiesenen Gewichte bestimmt diese Rerank-Strategie, ob semantische oder Schlüsselwort-Übereinstimmung priorisiert werden soll.',
+    semanticFirst: 'Semantik zuerst',
+    keywordFirst: 'Schlüsselwort zuerst',
+    customized: 'Angepasst',
+    semantic: 'Semantisch',
+    keyword: 'Schlüsselwort',
+  },
+  nTo1RetrievalLegacy: 'N-zu-1-Abruf wird ab September offiziell eingestellt. Es wird empfohlen, den neuesten Multi-Pfad-Abruf zu verwenden, um bessere Ergebnisse zu erzielen.',
+  nTo1RetrievalLegacyLink: 'Mehr erfahren',
+  nTo1RetrievalLegacyLinkText: 'N-zu-1-Abruf wird im September offiziell eingestellt.',
+}
+
+export default translation

+ 41 - 41
web/i18n/de-DE/explore.ts

@@ -1,41 +1,41 @@
-const translation = {
-  title: 'Entdecken',
-  sidebar: {
-    discovery: 'Entdeckung',
-    chat: 'Chat',
-    workspace: 'Arbeitsbereich',
-    action: {
-      pin: 'Anheften',
-      unpin: 'Lösen',
-      rename: 'Umbenennen',
-      delete: 'Löschen',
-    },
-    delete: {
-      title: 'App löschen',
-      content: 'Sind Sie sicher, dass Sie diese App löschen möchten?',
-    },
-  },
-  apps: {
-    title: 'Apps von Dify erkunden',
-    description: 'Nutzen Sie diese Vorlagen-Apps sofort oder passen Sie Ihre eigenen Apps basierend auf den Vorlagen an.',
-    allCategories: 'Alle Kategorien',
-  },
-  appCard: {
-    addToWorkspace: 'Zum Arbeitsbereich hinzufügen',
-    customize: 'Anpassen',
-  },
-  appCustomize: {
-    title: 'App aus {{name}} erstellen',
-    subTitle: 'App-Symbol & Name',
-    nameRequired: 'App-Name ist erforderlich',
-  },
-  category: {
-    Assistant: 'Assistent',
-    Writing: 'Schreiben',
-    Translate: 'Übersetzen',
-    Programming: 'Programmieren',
-    HR: 'Personalwesen',
-  },
-}
-
-export default translation
+const translation = {
+  title: 'Entdecken',
+  sidebar: {
+    discovery: 'Entdeckung',
+    chat: 'Chat',
+    workspace: 'Arbeitsbereich',
+    action: {
+      pin: 'Anheften',
+      unpin: 'Lösen',
+      rename: 'Umbenennen',
+      delete: 'Löschen',
+    },
+    delete: {
+      title: 'App löschen',
+      content: 'Sind Sie sicher, dass Sie diese App löschen möchten?',
+    },
+  },
+  apps: {
+    title: 'Apps von Dify erkunden',
+    description: 'Nutzen Sie diese Vorlagen-Apps sofort oder passen Sie Ihre eigenen Apps basierend auf den Vorlagen an.',
+    allCategories: 'Alle Kategorien',
+  },
+  appCard: {
+    addToWorkspace: 'Zum Arbeitsbereich hinzufügen',
+    customize: 'Anpassen',
+  },
+  appCustomize: {
+    title: 'App aus {{name}} erstellen',
+    subTitle: 'App-Symbol & Name',
+    nameRequired: 'App-Name ist erforderlich',
+  },
+  category: {
+    Assistant: 'Assistent',
+    Writing: 'Schreiben',
+    Translate: 'Übersetzen',
+    Programming: 'Programmieren',
+    HR: 'Personalwesen',
+  },
+}
+
+export default translation

+ 2 - 0
web/i18n/de-DE/login.ts

@@ -53,6 +53,7 @@ const translation = {
     nameEmpty: 'Name wird benötigt',
     passwordEmpty: 'Passwort wird benötigt',
     passwordInvalid: 'Das Passwort muss Buchstaben und Zahlen enthalten und länger als 8 Zeichen sein',
+    passwordLengthInValid: 'Das Passwort muss mindestens 8 Zeichen lang sein',
   },
   license: {
     tip: 'Bevor du mit Dify Community Edition beginnst, lies die',
@@ -68,6 +69,7 @@ const translation = {
   activated: 'Jetzt anmelden',
   adminInitPassword: 'Admin-Initialpasswort',
   validate: 'Validieren',
+  sso: 'Mit SSO fortfahren',
 }
 
 export default translation

+ 1 - 0
web/i18n/de-DE/run-log.ts

@@ -23,6 +23,7 @@ const translation = {
     tipLeft: 'Bitte gehen Sie zum ',
     Link: 'Detailpanel',
     tipRight: 'ansehen.',
+    link: 'Gruppe Detail',
   },
 }
 

+ 74 - 74
web/i18n/de-DE/share-app.ts

@@ -1,74 +1,74 @@
-const translation = {
-  common: {
-    welcome: '',
-    appUnavailable: 'App ist nicht verfügbar',
-    appUnkonwError: 'App ist nicht verfügbar',
-  },
-  chat: {
-    newChat: 'Neuer Chat',
-    pinnedTitle: 'Angeheftet',
-    unpinnedTitle: 'Chats',
-    newChatDefaultName: 'Neues Gespräch',
-    resetChat: 'Gespräch zurücksetzen',
-    powerBy: 'Bereitgestellt von',
-    prompt: 'Aufforderung',
-    privatePromptConfigTitle: 'Konversationseinstellungen',
-    publicPromptConfigTitle: 'Anfängliche Aufforderung',
-    configStatusDes: 'Vor dem Start können Sie die Konversationseinstellungen ändern',
-    configDisabled:
-      'Voreinstellungen der vorherigen Sitzung wurden für diese Sitzung verwendet.',
-    startChat: 'Chat starten',
-    privacyPolicyLeft:
-      'Bitte lesen Sie die ',
-    privacyPolicyMiddle:
-      'Datenschutzrichtlinien',
-    privacyPolicyRight:
-      ', die vom App-Entwickler bereitgestellt wurden.',
-    deleteConversation: {
-      title: 'Konversation löschen',
-      content: 'Sind Sie sicher, dass Sie diese Konversation löschen möchten?',
-    },
-    tryToSolve: 'Versuchen zu lösen',
-    temporarySystemIssue: 'Entschuldigung, vorübergehendes Systemproblem.',
-  },
-  generation: {
-    tabs: {
-      create: 'Einmal ausführen',
-      batch: 'Stapelverarbeitung',
-      saved: 'Gespeichert',
-    },
-    savedNoData: {
-      title: 'Sie haben noch kein Ergebnis gespeichert!',
-      description: 'Beginnen Sie mit der Inhaltserstellung und finden Sie hier Ihre gespeicherten Ergebnisse.',
-      startCreateContent: 'Beginnen Sie mit der Inhaltserstellung',
-    },
-    title: 'KI-Vervollständigung',
-    queryTitle: 'Abfrageinhalt',
-    completionResult: 'Vervollständigungsergebnis',
-    queryPlaceholder: 'Schreiben Sie Ihren Abfrageinhalt...',
-    run: 'Ausführen',
-    copy: 'Kopieren',
-    resultTitle: 'KI-Vervollständigung',
-    noData: 'KI wird Ihnen hier geben, was Sie möchten.',
-    csvUploadTitle: 'Ziehen Sie Ihre CSV-Datei hierher oder ',
-    browse: 'durchsuchen',
-    csvStructureTitle: 'Die CSV-Datei muss der folgenden Struktur entsprechen:',
-    downloadTemplate: 'Laden Sie die Vorlage hier herunter',
-    field: 'Feld',
-    batchFailed: {
-      info: '{{num}} fehlgeschlagene Ausführungen',
-      retry: 'Wiederholen',
-      outputPlaceholder: 'Kein Ausgabeanhalt',
-    },
-    errorMsg: {
-      empty: 'Bitte geben Sie Inhalte in die hochgeladene Datei ein.',
-      fileStructNotMatch: 'Die hochgeladene CSV-Datei entspricht nicht der Struktur.',
-      emptyLine: 'Zeile {{rowIndex}} ist leer',
-      invalidLine: 'Zeile {{rowIndex}}: {{varName}} Wert darf nicht leer sein',
-      moreThanMaxLengthLine: 'Zeile {{rowIndex}}: {{varName}} Wert darf nicht mehr als {{maxLength}} Zeichen sein',
-      atLeastOne: 'Bitte geben Sie mindestens eine Zeile in die hochgeladene Datei ein.',
-    },
-  },
-}
-
-export default translation
+const translation = {
+  common: {
+    welcome: '',
+    appUnavailable: 'App ist nicht verfügbar',
+    appUnkonwError: 'App ist nicht verfügbar',
+  },
+  chat: {
+    newChat: 'Neuer Chat',
+    pinnedTitle: 'Angeheftet',
+    unpinnedTitle: 'Chats',
+    newChatDefaultName: 'Neues Gespräch',
+    resetChat: 'Gespräch zurücksetzen',
+    powerBy: 'Bereitgestellt von',
+    prompt: 'Aufforderung',
+    privatePromptConfigTitle: 'Konversationseinstellungen',
+    publicPromptConfigTitle: 'Anfängliche Aufforderung',
+    configStatusDes: 'Vor dem Start können Sie die Konversationseinstellungen ändern',
+    configDisabled:
+      'Voreinstellungen der vorherigen Sitzung wurden für diese Sitzung verwendet.',
+    startChat: 'Chat starten',
+    privacyPolicyLeft:
+      'Bitte lesen Sie die ',
+    privacyPolicyMiddle:
+      'Datenschutzrichtlinien',
+    privacyPolicyRight:
+      ', die vom App-Entwickler bereitgestellt wurden.',
+    deleteConversation: {
+      title: 'Konversation löschen',
+      content: 'Sind Sie sicher, dass Sie diese Konversation löschen möchten?',
+    },
+    tryToSolve: 'Versuchen zu lösen',
+    temporarySystemIssue: 'Entschuldigung, vorübergehendes Systemproblem.',
+  },
+  generation: {
+    tabs: {
+      create: 'Einmal ausführen',
+      batch: 'Stapelverarbeitung',
+      saved: 'Gespeichert',
+    },
+    savedNoData: {
+      title: 'Sie haben noch kein Ergebnis gespeichert!',
+      description: 'Beginnen Sie mit der Inhaltserstellung und finden Sie hier Ihre gespeicherten Ergebnisse.',
+      startCreateContent: 'Beginnen Sie mit der Inhaltserstellung',
+    },
+    title: 'KI-Vervollständigung',
+    queryTitle: 'Abfrageinhalt',
+    completionResult: 'Vervollständigungsergebnis',
+    queryPlaceholder: 'Schreiben Sie Ihren Abfrageinhalt...',
+    run: 'Ausführen',
+    copy: 'Kopieren',
+    resultTitle: 'KI-Vervollständigung',
+    noData: 'KI wird Ihnen hier geben, was Sie möchten.',
+    csvUploadTitle: 'Ziehen Sie Ihre CSV-Datei hierher oder ',
+    browse: 'durchsuchen',
+    csvStructureTitle: 'Die CSV-Datei muss der folgenden Struktur entsprechen:',
+    downloadTemplate: 'Laden Sie die Vorlage hier herunter',
+    field: 'Feld',
+    batchFailed: {
+      info: '{{num}} fehlgeschlagene Ausführungen',
+      retry: 'Wiederholen',
+      outputPlaceholder: 'Kein Ausgabeanhalt',
+    },
+    errorMsg: {
+      empty: 'Bitte geben Sie Inhalte in die hochgeladene Datei ein.',
+      fileStructNotMatch: 'Die hochgeladene CSV-Datei entspricht nicht der Struktur.',
+      emptyLine: 'Zeile {{rowIndex}} ist leer',
+      invalidLine: 'Zeile {{rowIndex}}: {{varName}} Wert darf nicht leer sein',
+      moreThanMaxLengthLine: 'Zeile {{rowIndex}}: {{varName}} Wert darf nicht mehr als {{maxLength}} Zeichen sein',
+      atLeastOne: 'Bitte geben Sie mindestens eine Zeile in die hochgeladene Datei ein.',
+    },
+  },
+}
+
+export default translation

+ 153 - 119
web/i18n/de-DE/tools.ts

@@ -1,119 +1,153 @@
-const translation = {
-  title: 'Werkzeuge',
-  createCustomTool: 'Eigenes Werkzeug erstellen',
-  type: {
-    all: 'Alle',
-    builtIn: 'Integriert',
-    custom: 'Benutzerdefiniert',
-  },
-  contribute: {
-    line1: 'Ich interessiere mich dafür, ',
-    line2: 'Werkzeuge zu Dify beizutragen.',
-    viewGuide: 'Leitfaden anzeigen',
-  },
-  author: 'Von',
-  auth: {
-    unauthorized: 'Zur Autorisierung',
-    authorized: 'Autorisiert',
-    setup: 'Autorisierung einrichten, um zu nutzen',
-    setupModalTitle: 'Autorisierung einrichten',
-    setupModalTitleDescription: 'Nach der Konfiguration der Anmeldeinformationen können alle Mitglieder im Arbeitsbereich dieses Werkzeug beim Orchestrieren von Anwendungen nutzen.',
-  },
-  includeToolNum: '{{num}} Werkzeuge inkludiert',
-  addTool: 'Werkzeug hinzufügen',
-  createTool: {
-    title: 'Eigenes Werkzeug erstellen',
-    editAction: 'Konfigurieren',
-    editTitle: 'Eigenes Werkzeug bearbeiten',
-    name: 'Name',
-    toolNamePlaceHolder: 'Geben Sie den Werkzeugnamen ein',
-    schema: 'Schema',
-    schemaPlaceHolder: 'Geben Sie hier Ihr OpenAPI-Schema ein',
-    viewSchemaSpec: 'Die OpenAPI-Swagger-Spezifikation anzeigen',
-    importFromUrl: 'Von URL importieren',
-    importFromUrlPlaceHolder: 'https://...',
-    urlError: 'Bitte geben Sie eine gültige URL ein',
-    examples: 'Beispiele',
-    exampleOptions: {
-      json: 'Wetter(JSON)',
-      yaml: 'Pet Store(YAML)',
-      blankTemplate: 'Leere Vorlage',
-    },
-    availableTools: {
-      title: 'Verfügbare Werkzeuge',
-      name: 'Name',
-      description: 'Beschreibung',
-      method: 'Methode',
-      path: 'Pfad',
-      action: 'Aktionen',
-      test: 'Test',
-    },
-    authMethod: {
-      title: 'Autorisierungsmethode',
-      type: 'Autorisierungstyp',
-      keyTooltip: 'Http Header Key, Sie können es bei "Authorization" belassen, wenn Sie nicht wissen, was es ist, oder auf einen benutzerdefinierten Wert setzen',
-      types: {
-        none: 'Keine',
-        api_key: 'API-Key',
-        apiKeyPlaceholder: 'HTTP-Headername für API-Key',
-        apiValuePlaceholder: 'API-Key eingeben',
-      },
-      key: 'Schlüssel',
-      value: 'Wert',
-    },
-    authHeaderPrefix: {
-      title: 'Auth-Typ',
-      types: {
-        basic: 'Basic',
-        bearer: 'Bearer',
-        custom: 'Benutzerdefiniert',
-      },
-    },
-    privacyPolicy: 'Datenschutzrichtlinie',
-    privacyPolicyPlaceholder: 'Bitte Datenschutzrichtlinie eingeben',
-    customDisclaimer: 'Benutzer Haftungsausschluss',
-    customDisclaimerPlaceholder: 'Bitte benutzerdefinierten Haftungsausschluss eingeben',
-    deleteToolConfirmTitle: 'Löschen Sie dieses Werkzeug?',
-    deleteToolConfirmContent: 'Das Löschen des Werkzeugs ist irreversibel. Benutzer können Ihr Werkzeug nicht mehr verwenden.',
-  },
-  test: {
-    title: 'Test',
-    parametersValue: 'Parameter & Wert',
-    parameters: 'Parameter',
-    value: 'Wert',
-    testResult: 'Testergebnisse',
-    testResultPlaceholder: 'Testergebnis wird hier angezeigt',
-  },
-  thought: {
-    using: 'Nutzung',
-    used: 'Genutzt',
-    requestTitle: 'Anfrage an',
-    responseTitle: 'Antwort von',
-  },
-  setBuiltInTools: {
-    info: 'Info',
-    setting: 'Einstellung',
-    toolDescription: 'Werkzeugbeschreibung',
-    parameters: 'Parameter',
-    string: 'Zeichenkette',
-    number: 'Nummer',
-    required: 'Erforderlich',
-    infoAndSetting: 'Info & Einstellungen',
-  },
-  noCustomTool: {
-    title: 'Keine benutzerdefinierten Werkzeuge!',
-    content: 'Fügen Sie hier Ihre benutzerdefinierten Werkzeuge hinzu und verwalten Sie sie, um KI-Apps zu erstellen.',
-    createTool: 'Werkzeug erstellen',
-  },
-  noSearchRes: {
-    title: 'Leider keine Ergebnisse!',
-    content: 'Wir konnten keine Werkzeuge finden, die Ihrer Suche entsprechen.',
-    reset: 'Suche zurücksetzen',
-  },
-  builtInPromptTitle: 'Aufforderung',
-  toolRemoved: 'Werkzeug entfernt',
-  notAuthorized: 'Werkzeug nicht autorisiert',
-  howToGet: 'Wie erhält man',
-}
-
-export default translation
+const translation = {
+  title: 'Werkzeuge',
+  createCustomTool: 'Eigenes Werkzeug erstellen',
+  type: {
+    all: 'Alle',
+    builtIn: 'Integriert',
+    custom: 'Benutzerdefiniert',
+    workflow: 'Arbeitsablauf',
+  },
+  contribute: {
+    line1: 'Ich interessiere mich dafür, ',
+    line2: 'Werkzeuge zu Dify beizutragen.',
+    viewGuide: 'Leitfaden anzeigen',
+  },
+  author: 'Von',
+  auth: {
+    unauthorized: 'Zur Autorisierung',
+    authorized: 'Autorisiert',
+    setup: 'Autorisierung einrichten, um zu nutzen',
+    setupModalTitle: 'Autorisierung einrichten',
+    setupModalTitleDescription: 'Nach der Konfiguration der Anmeldeinformationen können alle Mitglieder im Arbeitsbereich dieses Werkzeug beim Orchestrieren von Anwendungen nutzen.',
+  },
+  includeToolNum: '{{num}} Werkzeuge inkludiert',
+  addTool: 'Werkzeug hinzufügen',
+  createTool: {
+    title: 'Eigenes Werkzeug erstellen',
+    editAction: 'Konfigurieren',
+    editTitle: 'Eigenes Werkzeug bearbeiten',
+    name: 'Name',
+    toolNamePlaceHolder: 'Geben Sie den Werkzeugnamen ein',
+    schema: 'Schema',
+    schemaPlaceHolder: 'Geben Sie hier Ihr OpenAPI-Schema ein',
+    viewSchemaSpec: 'Die OpenAPI-Swagger-Spezifikation anzeigen',
+    importFromUrl: 'Von URL importieren',
+    importFromUrlPlaceHolder: 'https://...',
+    urlError: 'Bitte geben Sie eine gültige URL ein',
+    examples: 'Beispiele',
+    exampleOptions: {
+      json: 'Wetter(JSON)',
+      yaml: 'Pet Store(YAML)',
+      blankTemplate: 'Leere Vorlage',
+    },
+    availableTools: {
+      title: 'Verfügbare Werkzeuge',
+      name: 'Name',
+      description: 'Beschreibung',
+      method: 'Methode',
+      path: 'Pfad',
+      action: 'Aktionen',
+      test: 'Test',
+    },
+    authMethod: {
+      title: 'Autorisierungsmethode',
+      type: 'Autorisierungstyp',
+      keyTooltip: 'Http Header Key, Sie können es bei "Authorization" belassen, wenn Sie nicht wissen, was es ist, oder auf einen benutzerdefinierten Wert setzen',
+      types: {
+        none: 'Keine',
+        api_key: 'API-Key',
+        apiKeyPlaceholder: 'HTTP-Headername für API-Key',
+        apiValuePlaceholder: 'API-Key eingeben',
+      },
+      key: 'Schlüssel',
+      value: 'Wert',
+    },
+    authHeaderPrefix: {
+      title: 'Auth-Typ',
+      types: {
+        basic: 'Basic',
+        bearer: 'Bearer',
+        custom: 'Benutzerdefiniert',
+      },
+    },
+    privacyPolicy: 'Datenschutzrichtlinie',
+    privacyPolicyPlaceholder: 'Bitte Datenschutzrichtlinie eingeben',
+    customDisclaimer: 'Benutzer Haftungsausschluss',
+    customDisclaimerPlaceholder: 'Bitte benutzerdefinierten Haftungsausschluss eingeben',
+    deleteToolConfirmTitle: 'Löschen Sie dieses Werkzeug?',
+    deleteToolConfirmContent: 'Das Löschen des Werkzeugs ist irreversibel. Benutzer können Ihr Werkzeug nicht mehr verwenden.',
+    toolInput: {
+      description: 'Beschreibung',
+      methodParameterTip: 'LLM-Füllungen während der Inferenz',
+      method: 'Methode',
+      methodParameter: 'Parameter',
+      label: 'Schilder',
+      required: 'Erforderlich',
+      methodSetting: 'Einstellung',
+      name: 'Name',
+      title: 'Werkzeug-Eingabe',
+      methodSettingTip: 'Der Benutzer füllt die Werkzeugkonfiguration aus',
+      descriptionPlaceholder: 'Beschreibung der Bedeutung des Parameters',
+      labelPlaceholder: 'Tags auswählen(optional)',
+    },
+    description: 'Beschreibung',
+    confirmTip: 'Apps, die dieses Tool verwenden, sind davon betroffen',
+    nameForToolCallTip: 'Unterstützt nur Zahlen, Buchstaben und Unterstriche.',
+    nameForToolCall: 'Name des Werkzeugaufrufs',
+    confirmTitle: 'Bestätigen, um zu speichern?',
+    nameForToolCallPlaceHolder: 'Wird für die Maschinenerkennung verwendet, z. B. getCurrentWeather, list_pets',
+    descriptionPlaceholder: 'Kurze Beschreibung des Zwecks des Werkzeugs, z. B. um die Temperatur für einen bestimmten Ort zu ermitteln.',
+  },
+  test: {
+    title: 'Test',
+    parametersValue: 'Parameter & Wert',
+    parameters: 'Parameter',
+    value: 'Wert',
+    testResult: 'Testergebnisse',
+    testResultPlaceholder: 'Testergebnis wird hier angezeigt',
+  },
+  thought: {
+    using: 'Nutzung',
+    used: 'Genutzt',
+    requestTitle: 'Anfrage an',
+    responseTitle: 'Antwort von',
+  },
+  setBuiltInTools: {
+    info: 'Info',
+    setting: 'Einstellung',
+    toolDescription: 'Werkzeugbeschreibung',
+    parameters: 'Parameter',
+    string: 'Zeichenkette',
+    number: 'Nummer',
+    required: 'Erforderlich',
+    infoAndSetting: 'Info & Einstellungen',
+  },
+  noCustomTool: {
+    title: 'Keine benutzerdefinierten Werkzeuge!',
+    content: 'Fügen Sie hier Ihre benutzerdefinierten Werkzeuge hinzu und verwalten Sie sie, um KI-Apps zu erstellen.',
+    createTool: 'Werkzeug erstellen',
+  },
+  noSearchRes: {
+    title: 'Leider keine Ergebnisse!',
+    content: 'Wir konnten keine Werkzeuge finden, die Ihrer Suche entsprechen.',
+    reset: 'Suche zurücksetzen',
+  },
+  builtInPromptTitle: 'Aufforderung',
+  toolRemoved: 'Werkzeug entfernt',
+  notAuthorized: 'Werkzeug nicht autorisiert',
+  howToGet: 'Wie erhält man',
+  addToolModal: {
+    added: 'zugefügt',
+    manageInTools: 'Verwalten in Tools',
+    add: 'hinzufügen',
+    category: 'Kategorie',
+    emptyTitle: 'Kein Workflow-Tool verfügbar',
+    type: 'Art',
+    emptyTip: 'Gehen Sie zu "Workflow -> Als Tool veröffentlichen"',
+  },
+  toolNameUsageTip: 'Name des Tool-Aufrufs für die Argumentation und Aufforderung des Agenten',
+  customToolTip: 'Erfahren Sie mehr über benutzerdefinierte Dify-Tools',
+  openInStudio: 'In Studio öffnen',
+}
+
+export default translation

+ 29 - 0
web/i18n/de-DE/workflow.ts

@@ -69,6 +69,14 @@ const translation = {
     manageInTools: 'In den Tools verwalten',
     workflowAsToolTip: 'Nach dem Workflow-Update ist eine Neukonfiguration des Tools erforderlich.',
     viewDetailInTracingPanel: 'Details anzeigen',
+    importDSL: 'DSL importieren',
+    importFailure: 'Fehler beim Import',
+    syncingData: 'Synchronisieren von Daten, nur wenige Sekunden.',
+    chooseDSL: 'Wählen Sie eine DSL(yml)-Datei',
+    importSuccess: 'Erfolg beim Import',
+    importDSLTip: 'Der aktuelle Entwurf wird überschrieben. Exportieren Sie den Workflow vor dem Import als Backup.',
+    overwriteAndImport: 'Überschreiben und Importieren',
+    backupCurrentDraft: 'Aktuellen Entwurf sichern',
   },
   env: {
     envPanelTitle: 'Umgebungsvariablen',
@@ -178,6 +186,7 @@ const translation = {
     'transform': 'Transformieren',
     'utilities': 'Dienstprogramme',
     'noResult': 'Kein Ergebnis gefunden',
+    'searchTool': 'Suchwerkzeug',
   },
   blocks: {
     'start': 'Start',
@@ -407,6 +416,7 @@ const translation = {
       enterValue: 'Wert eingeben',
       addCondition: 'Bedingung hinzufügen',
       conditionNotSetup: 'Bedingung NICHT eingerichtet',
+      selectVariable: 'Variable auswählen...',
     },
     variableAssigner: {
       title: 'Variablen zuweisen',
@@ -502,6 +512,25 @@ const translation = {
       iteration_other: '{{count}} Iterationen',
       currentIteration: 'Aktuelle Iteration',
     },
+    note: {
+      editor: {
+        strikethrough: 'Durchgestrichen',
+        large: 'Groß',
+        bulletList: 'Aufzählung',
+        italic: 'Kursiv',
+        small: 'Klein',
+        bold: 'Kühn',
+        placeholder: 'Schreiben Sie Ihre Notiz...',
+        openLink: 'Offen',
+        showAuthor: 'Autor anzeigen',
+        medium: 'Mittel',
+        unlink: 'Trennen',
+        link: 'Verbinden',
+        enterUrl: 'URL eingeben...',
+        invalidUrl: 'Ungültige URL',
+      },
+      addNote: 'Notiz hinzufügen',
+    },
   },
   tracing: {
     stopBy: 'Gestoppt von {{user}}',

+ 8 - 0
web/i18n/es-ES/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Pasos del flujo de trabajo',
           show: 'Mostrar',
           hide: 'Ocultar',
+          subTitle: 'Detalles del flujo de trabajo',
+          showDesc: 'Mostrar u ocultar detalles del flujo de trabajo en WebApp',
         },
         chatColorTheme: 'Tema de color del chat',
         chatColorThemeDesc: 'Establece el tema de color del chatbot',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Ingresa el texto de descargo de responsabilidad personalizado',
           customDisclaimerTip: 'El texto de descargo de responsabilidad personalizado se mostrará en el lado del cliente, proporcionando información adicional sobre la aplicación',
         },
+        sso: {
+          description: 'Todos los usuarios deben iniciar sesión con SSO antes de usar WebApp',
+          tooltip: 'Póngase en contacto con el administrador para habilitar el inicio de sesión único de WebApp',
+          label: 'Autenticación SSO',
+          title: 'WebApp SSO',
+        },
       },
       embedded: {
         entry: 'Incrustado',

+ 10 - 0
web/i18n/es-ES/app.ts

@@ -122,7 +122,17 @@ const translation = {
       removeConfirmTitle: '¿Eliminar la configuración de {{key}}?',
       removeConfirmContent: 'La configuración actual está en uso, eliminarla desactivará la función de rastreo.',
     },
+    view: 'Vista',
   },
+  answerIcon: {
+    title: 'Usar el icono de la aplicación web para reemplazar 🤖',
+    descriptionInExplore: 'Si se debe usar el icono de la aplicación web para reemplazarlo 🤖 en Explore',
+    description: 'Si se va a usar el icono de la aplicación web para reemplazarlo 🤖 en la aplicación compartida',
+  },
+  importFromDSLUrl: 'URL de origen',
+  importFromDSLUrlPlaceholder: 'Pegar enlace DSL aquí',
+  importFromDSL: 'Importar desde DSL',
+  importFromDSLFile: 'Desde el archivo DSL',
 }
 
 export default translation

+ 5 - 0
web/i18n/es-ES/workflow.ts

@@ -186,6 +186,7 @@ const translation = {
     'transform': 'Transformar',
     'utilities': 'Utilidades',
     'noResult': 'No se encontraron coincidencias',
+    'searchTool': 'Herramienta de búsqueda',
   },
   blocks: {
     'start': 'Inicio',
@@ -415,6 +416,7 @@ const translation = {
       enterValue: 'Ingresa un valor',
       addCondition: 'Agregar condición',
       conditionNotSetup: 'Condición NO configurada',
+      selectVariable: 'Seleccionar variable...',
     },
     variableAssigner: {
       title: 'Asignar variables',
@@ -533,6 +535,9 @@ const translation = {
       stopBy: 'Detenido por {{user}}',
     },
   },
+  tracing: {
+    stopBy: 'Pásate por {{usuario}}',
+  },
 }
 
 export default translation

+ 8 - 0
web/i18n/fa-IR/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'مراحل کاری',
           show: 'نمایش',
           hide: 'مخفی کردن',
+          showDesc: 'نمایش یا پنهان کردن جزئیات گردش کار در WebApp',
+          subTitle: 'جزئیات گردش کار',
         },
         chatColorTheme: 'تم رنگی چت',
         chatColorThemeDesc: 'تم رنگی چت‌بات را تنظیم کنید',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'متن سلب مسئولیت سفارشی را وارد کنید',
           customDisclaimerTip: 'متن سلب مسئولیت سفارشی در سمت مشتری نمایش داده می‌شود و اطلاعات بیشتری درباره برنامه ارائه می‌دهد',
         },
+        sso: {
+          title: 'WebApp SSO',
+          label: 'احراز هویت SSO',
+          description: 'همه کاربران باید قبل از استفاده از WebApp با SSO وارد شوند',
+          tooltip: 'برای فعال کردن WebApp SSO با سرپرست تماس بگیرید',
+        },
       },
       embedded: {
         entry: 'جاسازی شده',

+ 6 - 0
web/i18n/fa-IR/app.ts

@@ -126,6 +126,12 @@ const translation = {
       removeConfirmTitle: 'حذف پیکربندی {{key}}؟',
       removeConfirmContent: 'پیکربندی فعلی در حال استفاده است، حذف آن ویژگی ردیابی را غیرفعال خواهد کرد.',
     },
+    view: 'مشاهده',
+  },
+  answerIcon: {
+    descriptionInExplore: 'آیا از نماد WebApp برای جایگزینی 🤖 در Explore استفاده کنیم یا خیر',
+    description: 'آیا از نماد WebApp برای جایگزینی 🤖 در برنامه مشترک استفاده کنیم یا خیر',
+    title: 'از نماد WebApp برای جایگزینی 🤖 استفاده کنید',
   },
 }
 

+ 1 - 0
web/i18n/fa-IR/workflow.ts

@@ -186,6 +186,7 @@ const translation = {
     'transform': 'تبدیل',
     'utilities': 'ابزارهای کاربردی',
     'noResult': 'نتیجه‌ای پیدا نشد',
+    'searchTool': 'ابزار جستجو',
   },
   blocks: {
     'start': 'شروع',

+ 1 - 0
web/i18n/fr-FR/app-api.ts

@@ -77,6 +77,7 @@ const translation = {
     pathParams: 'Params de chemin',
     query: 'Requête',
   },
+  loading: 'Chargement',
 }
 
 export default translation

+ 8 - 0
web/i18n/fr-FR/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Étapes du workflow',
           show: 'Afficher',
           hide: 'Masquer',
+          showDesc: 'Afficher ou masquer les détails du flux de travail dans WebApp',
+          subTitle: 'Détails du flux de travail',
         },
         chatColorTheme: 'Thème de couleur du chatbot',
         chatColorThemeDesc: 'Définir le thème de couleur du chatbot',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Entrez le texte de la clause de non-responsabilité personnalisée',
           customDisclaimerTip: 'Le texte de la clause de non-responsabilité personnalisée sera affiché côté client, fournissant des informations supplémentaires sur l\'application',
         },
+        sso: {
+          label: 'Authentification SSO',
+          title: 'WebApp SSO',
+          tooltip: 'Contactez l’administrateur pour activer l’authentification unique WebApp',
+          description: 'Tous les utilisateurs doivent se connecter avec l’authentification unique avant d’utiliser WebApp',
+        },
       },
       embedded: {
         entry: 'Intégré',

+ 10 - 0
web/i18n/fr-FR/app.ts

@@ -122,7 +122,17 @@ const translation = {
       removeConfirmTitle: 'Supprimer la configuration de {{key}} ?',
       removeConfirmContent: 'La configuration actuelle est en cours d\'utilisation, sa suppression désactivera la fonction de Traçage.',
     },
+    view: 'Vue',
   },
+  answerIcon: {
+    description: 'S’il faut utiliser l’icône WebApp pour remplacer 🤖 dans l’application partagée',
+    title: 'Utiliser l’icône WebApp pour remplacer 🤖',
+    descriptionInExplore: 'Utilisation de l’icône WebApp pour remplacer 🤖 dans Explore',
+  },
+  importFromDSLUrlPlaceholder: 'Collez le lien DSL ici',
+  importFromDSL: 'Importation à partir d’une DSL',
+  importFromDSLUrl: 'À partir de l’URL',
+  importFromDSLFile: 'À partir d’un fichier DSL',
 }
 
 export default translation

+ 3 - 0
web/i18n/fr-FR/billing.ts

@@ -60,6 +60,8 @@ const translation = {
       bulkUpload: 'Téléchargement en masse de documents',
       agentMode: 'Mode Agent',
       workflow: 'Flux de travail',
+      llmLoadingBalancingTooltip: 'Ajoutez plusieurs clés API aux modèles, en contournant efficacement les limites de débit de l’API.',
+      llmLoadingBalancing: 'Équilibrage de charge LLM',
     },
     comingSoon: 'Bientôt disponible',
     member: 'Membre',
@@ -74,6 +76,7 @@ const translation = {
     },
     ragAPIRequestTooltip: 'Fait référence au nombre d\'appels API invoquant uniquement les capacités de traitement de la base de connaissances de Dify.',
     receiptInfo: 'Seuls le propriétaire de l\'équipe et l\'administrateur de l\'équipe peuvent s\'abonner et consulter les informations de facturation',
+    annotationQuota: 'Quota d’annotation',
   },
   plans: {
     sandbox: {

+ 34 - 0
web/i18n/fr-FR/common.ts

@@ -201,6 +201,11 @@ const translation = {
     disinvite: 'Annuler l\'invitation',
     deleteMember: 'Supprimer Membre',
     you: '(Vous)',
+    builder: 'Constructeur',
+    datasetOperatorTip: 'Seul peut gérer la base de connaissances',
+    datasetOperator: 'Administrateur des connaissances',
+    setBuilder: 'Définir en tant que constructeur',
+    builderTip: 'Peut créer et modifier ses propres applications',
   },
   integrations: {
     connected: 'Connecté',
@@ -347,6 +352,22 @@ const translation = {
     quotaTip: 'Tokens gratuits restants disponibles',
     loadPresets: 'Charger les Présents',
     parameters: 'PARAMÈTRES',
+    modelHasBeenDeprecated: 'Ce modèle est obsolète',
+    providerManagedDescription: 'Utilisez l’ensemble unique d’informations d’identification fourni par le fournisseur de modèle.',
+    loadBalancingHeadline: 'Équilibrage',
+    loadBalancing: 'Équilibrage',
+    loadBalancingLeastKeyWarning: 'Pour activer l’équilibrage de charge, au moins 2 clés doivent être activées.',
+    apiKey: 'API-KEY',
+    apiKeyStatusNormal: 'L’état de l’APIKey est normal',
+    configLoadBalancing: 'Équilibrage de charge de configuration',
+    loadBalancingInfo: 'Par défaut, l’équilibrage de charge utilise la stratégie Round-robin. Si la limitation de vitesse est déclenchée, une période de recharge de 1 minute sera appliquée.',
+    editConfig: 'Modifier la configuration',
+    addConfig: 'Ajouter une configuration',
+    apiKeyRateLimit: 'La limite de débit a été atteinte, disponible après {{secondes}}s',
+    defaultConfig: 'Configuration par défaut',
+    loadBalancingDescription: 'Réduisez la pression grâce à plusieurs ensembles d’informations d’identification.',
+    providerManaged: 'Géré par le fournisseur',
+    upgradeForLoadBalancing: 'Mettez à niveau votre plan pour activer l’équilibrage de charge.',
   },
   dataSource: {
     add: 'Ajouter une source de données',
@@ -370,6 +391,15 @@ const translation = {
         preview: 'APERÇU',
       },
     },
+    website: {
+      configuredCrawlers: 'Robots d’exploration configurés',
+      with: 'Avec',
+      inactive: 'Inactif',
+      active: 'Actif',
+      title: 'Site internet',
+      description: 'Importez du contenu à partir de sites Web à l’aide du robot d’indexation.',
+    },
+    configure: 'Configurer',
   },
   plugin: {
     serpapi: {
@@ -538,6 +568,10 @@ const translation = {
     created: 'Tag créé avec succès',
     failed: 'La création de la balise a échoué',
   },
+  errorMsg: {
+    fieldRequired: '{{field}} est obligatoire',
+    urlError: 'L’URL doit commencer par http:// ou https://',
+  },
 }
 
 export default translation

+ 31 - 0
web/i18n/fr-FR/dataset-creation.ts

@@ -50,6 +50,30 @@ const translation = {
       confirmButton: 'Créer',
       failed: 'Création échouée',
     },
+    website: {
+      limit: 'Limite',
+      fireCrawlNotConfiguredDescription: 'Configurez Firecrawl avec la clé API pour l’utiliser.',
+      selectAll: 'Tout sélectionner',
+      unknownError: 'Erreur inconnue',
+      firecrawlDoc: 'Docs Firecrawl',
+      totalPageScraped: 'Nombre total de pages extraites :',
+      preview: 'Aperçu',
+      crawlSubPage: 'Explorer les sous-pages',
+      configure: 'Configurer',
+      firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+      maxDepth: 'Profondeur maximale',
+      fireCrawlNotConfigured: 'Firecrawl n’est pas configuré',
+      firecrawlTitle: 'Extraire du contenu web avec 🔥Firecrawl',
+      scrapTimeInfo: 'Pages récupérées au total dans un délai de {{time}}s',
+      options: 'Options',
+      exceptionErrorTitle: 'Une exception s’est produite lors de l’exécution de la tâche Firecrawl :',
+      includeOnlyPaths: 'Inclure uniquement les chemins d’accès',
+      resetAll: 'Tout réinitialiser',
+      run: 'Courir',
+      extractOnlyMainContent: 'Extraire uniquement le contenu principal (pas d’en-têtes, de navigations, de pieds de page, etc.)',
+      excludePaths: 'Exclure les chemins d’accès',
+      maxDepthTooltip: 'Profondeur maximale à explorer par rapport à l’URL saisie. La profondeur 0 gratte simplement la page de l’URL saisie, la profondeur 1 récupère l’URL et tout ce qui suit l’URL saisie + un /, et ainsi de suite.',
+    },
   },
   stepTwo: {
     segmentation: 'Paramètres de bloc',
@@ -107,6 +131,8 @@ const translation = {
     indexSettedTip: 'Pour changer la méthode d\'index, veuillez aller à la',
     retrivalSettedTip: 'Pour changer la méthode d\'index, veuillez aller à la',
     datasetSettingLink: 'Paramètres de connaissance.',
+    webpageUnit: 'Pages',
+    websiteSource: 'Site web de prétraitement',
   },
   stepThree: {
     creationTitle: '🎉 Connaissance créée',
@@ -125,6 +151,11 @@ const translation = {
     modelButtonConfirm: 'Confirmer',
     modelButtonCancel: 'Annuler',
   },
+  firecrawl: {
+    apiKeyPlaceholder: 'Clé API de firecrawl.dev',
+    configFirecrawl: 'Configurer 🔥Firecrawl',
+    getApiKeyLinkText: 'Obtenez votre clé API auprès de firecrawl.dev',
+  },
 }
 
 export default translation

+ 3 - 0
web/i18n/fr-FR/dataset-documents.ts

@@ -13,6 +13,8 @@ const translation = {
         status: 'STATUT',
         action: 'ACTION',
       },
+      rename: 'Renommer',
+      name: 'Nom',
     },
     action: {
       uploadFile: 'Télécharger un nouveau fichier',
@@ -74,6 +76,7 @@ const translation = {
       error: 'Erreur d\'Importation',
       ok: 'D\'accord',
     },
+    addUrl: 'Ajouter une URL',
   },
   metadata: {
     title: 'Métadonnées',

+ 2 - 0
web/i18n/fr-FR/dataset-settings.ts

@@ -27,6 +27,8 @@ const translation = {
       longDescription: 'À propos de la méthode de récupération, vous pouvez la modifier à tout moment dans les paramètres de Connaissance.',
     },
     save: 'Enregistrer',
+    me: '(Vous)',
+    permissionsInvitedMembers: 'Membres partiels de l’équipe',
   },
 }
 

+ 2 - 0
web/i18n/fr-FR/login.ts

@@ -53,6 +53,7 @@ const translation = {
     nameEmpty: 'Le nom est requis',
     passwordEmpty: 'Un mot de passe est requis',
     passwordInvalid: 'Le mot de passe doit contenir des lettres et des chiffres, et la longueur doit être supérieure à 8.',
+    passwordLengthInValid: 'Le mot de passe doit comporter au moins 8 caractères.',
   },
   license: {
     tip: 'Avant de commencer Dify Community Edition, lisez le GitHub',
@@ -68,6 +69,7 @@ const translation = {
   activated: 'Connectez-vous maintenant',
   adminInitPassword: 'Mot de passe d\'initialisation de l\'administrateur',
   validate: 'Valider',
+  sso: 'Poursuivre avec l’authentification unique',
 }
 
 export default translation

+ 34 - 0
web/i18n/fr-FR/tools.ts

@@ -5,6 +5,7 @@ const translation = {
     all: 'Tout',
     builtIn: 'Intégré',
     custom: 'Personnalisé',
+    workflow: 'Flux de travail',
   },
   contribute: {
     line1: 'Je suis intéressé par',
@@ -75,6 +76,27 @@ const translation = {
     customDisclaimerPlaceholder: 'Entrez le texte de la clause de non-responsabilité personnalisée',
     deleteToolConfirmTitle: 'Supprimer cet outil ?',
     deleteToolConfirmContent: 'La suppression de l\'outil est irréversible. Les utilisateurs ne pourront plus accéder à votre outil.',
+    toolInput: {
+      required: 'Obligatoire',
+      name: 'Nom',
+      label: 'Étiquettes',
+      title: 'Entrée d’outil',
+      methodSetting: 'Réglage',
+      labelPlaceholder: 'Choisir des balises(facultatif)',
+      descriptionPlaceholder: 'Description de la signification du paramètre',
+      method: 'Méthode',
+      methodParameter: 'Paramètre',
+      methodSettingTip: 'L’utilisateur renseigne la configuration de l’outil',
+      methodParameterTip: 'Remplissages LLM pendant l’inférence',
+      description: 'Description',
+    },
+    nameForToolCallTip: 'Ne prend en charge que les chiffres, les lettres et les traits de soulignement.',
+    confirmTitle: 'Confirmer pour enregistrer ?',
+    nameForToolCall: 'Nom de l’appel de l’outil',
+    confirmTip: 'Les applications utilisant cet outil seront affectées',
+    description: 'Description',
+    nameForToolCallPlaceHolder: 'Utilisé pour la reconnaissance automatique, tels que getCurrentWeather, list_pets',
+    descriptionPlaceholder: 'Brève description de l’objectif de l’outil, par exemple, obtenir la température d’un endroit spécifique.',
   },
   test: {
     title: 'Test',
@@ -114,6 +136,18 @@ const translation = {
   toolRemoved: 'Outil supprimé',
   notAuthorized: 'Outil non autorisé',
   howToGet: 'Comment obtenir',
+  addToolModal: {
+    type: 'type',
+    emptyTitle: 'Aucun outil de flux de travail disponible',
+    added: 'supplémentaire',
+    add: 'ajouter',
+    category: 'catégorie',
+    manageInTools: 'Gérer dans Outils',
+    emptyTip: 'Allez dans « Flux de travail -> Publier en tant qu’outil »',
+  },
+  openInStudio: 'Ouvrir dans Studio',
+  customToolTip: 'En savoir plus sur les outils personnalisés Dify',
+  toolNameUsageTip: 'Nom de l’appel de l’outil pour le raisonnement et l’invite de l’agent',
 }
 
 export default translation

+ 2 - 0
web/i18n/fr-FR/workflow.ts

@@ -186,6 +186,7 @@ const translation = {
     'transform': 'Transformer',
     'utilities': 'Utilitaires',
     'noResult': 'Aucun résultat trouvé',
+    'searchTool': 'Outil de recherche',
   },
   blocks: {
     'start': 'Début',
@@ -415,6 +416,7 @@ const translation = {
       enterValue: 'Entrez la valeur',
       addCondition: 'Ajouter une condition',
       conditionNotSetup: 'Condition NON configurée',
+      selectVariable: 'Sélectionner une variable...',
     },
     variableAssigner: {
       title: 'Attribuer des variables',

+ 4 - 0
web/i18n/hi-IN/app-log.ts

@@ -93,6 +93,10 @@ const translation = {
     promptTemplate: 'प्रॉम्प्ट टेम्पलेट',
     promptInput: 'प्रॉम्प्ट इनपुट',
     response: 'प्रतिक्रिया',
+    iterations: 'पुनरूक्तियाँ',
+    toolUsed: 'प्रयुक्त उपकरण',
+    finalProcessing: 'अंतिम प्रसंस्करण',
+    iteration: 'चलना',
   },
 }
 

+ 8 - 0
web/i18n/hi-IN/app-overview.ts

@@ -52,6 +52,8 @@ const translation = {
           title: 'वर्कफ़्लो स्टेप्स',
           show: 'दिखाएं',
           hide: 'छुपाएं',
+          subTitle: 'कार्यप्रवाह विवरण',
+          showDesc: 'WebApp में वर्कफ़्लो विवरण दिखाएँ या छुपाएँ',
         },
         chatColorTheme: 'चैटबॉट का रंग थीम',
         chatColorThemeDesc: 'चैटबॉट का रंग थीम निर्धारित करें',
@@ -70,6 +72,12 @@ const translation = {
           customDisclaimerTip:
             'कस्टम अस्वीकरण टेक्स्ट क्लाइंट साइड पर प्रदर्शित होगा, जो एप्लिकेशन के बारे में अतिरिक्त जानकारी प्रदान करेगा',
         },
+        sso: {
+          title: 'वेबएप एसएसओ',
+          label: 'SSO प्रमाणीकरण',
+          description: 'WebApp का उपयोग करने से पहले सभी उपयोगकर्ताओं को SSO के साथ लॉगिन करना आवश्यक है',
+          tooltip: 'WebApp SSO को सक्षम करने के लिए व्यवस्थापक से संपर्क करें',
+        },
       },
       embedded: {
         entry: 'एम्बेडेड',

+ 10 - 0
web/i18n/hi-IN/app.ts

@@ -122,7 +122,17 @@ const translation = {
       removeConfirmTitle: '{{key}} कॉन्फ़िगरेशन हटाएं?',
       removeConfirmContent: 'वर्तमान कॉन्फ़िगरेशन उपयोग में है, इसे हटाने से ट्रेसिंग सुविधा बंद हो जाएगी।',
     },
+    view: 'देखना',
   },
+  answerIcon: {
+    title: 'बदलने 🤖 के लिए WebApp चिह्न का उपयोग करें',
+    descriptionInExplore: 'एक्सप्लोर में बदलने 🤖 के लिए वेबऐप आइकन का उपयोग करना है या नहीं',
+    description: 'साझा अनुप्रयोग में प्रतिस्थापित 🤖 करने के लिए WebApp चिह्न का उपयोग करना है या नहीं',
+  },
+  importFromDSLFile: 'डीएसएल फ़ाइल से',
+  importFromDSLUrl: 'यूआरएल से',
+  importFromDSL: 'DSL से आयात करें',
+  importFromDSLUrlPlaceholder: 'डीएसएल लिंक यहां पेस्ट करें',
 }
 
 export default translation

+ 5 - 0
web/i18n/hi-IN/common.ts

@@ -173,6 +173,9 @@ const translation = {
     langGeniusAccountTip: 'आपका Dify खाता और संबंधित उपयोगकर्ता डेटा।',
     editName: 'नाम संपादित करें',
     showAppLength: '{{length}} ऐप्स दिखाएं',
+    deleteConfirmTip: 'पुष्टि करने के लिए, कृपया अपने पंजीकृत ईमेल से निम्नलिखित भेजें',
+    delete: 'खाता हटाएं',
+    deleteTip: 'अपना खाता हटाने से आपका सारा डेटा स्थायी रूप से मिट जाएगा और इसे पुनर्प्राप्त नहीं किया जा सकता है।',
   },
   members: {
     team: 'टीम',
@@ -214,6 +217,8 @@ const translation = {
     disinvite: 'आमंत्रण रद्द करें',
     deleteMember: 'सदस्य को हटाएं',
     you: '(आप)',
+    datasetOperator: 'ज्ञान व्यवस्थापक',
+    datasetOperatorTip: 'केवल नॉलेज बेस प्रबंधित कर सकते हैं',
   },
   integrations: {
     connected: 'कनेक्टेड',

+ 2 - 0
web/i18n/hi-IN/dataset-settings.ts

@@ -32,6 +32,8 @@ const translation = {
         'प्राप्ति पद्धति के बारे में, आप इसे किसी भी समय ज्ञान सेटिंग्ज में बदल सकते हैं।',
     },
     save: 'सेवना',
+    me: '(आप)',
+    permissionsInvitedMembers: 'आंशिक टीम के सदस्य',
   },
 }
 

+ 1 - 0
web/i18n/hi-IN/share-app.ts

@@ -3,6 +3,7 @@ const translation = {
     welcome: 'आपका स्वागत है',
     appUnavailable: 'ऐप उपलब्ध नहीं है',
     appUnknownError: 'अज्ञात त्रुटि, कृपया पुनः प्रयास करें',
+    appUnkonwError: 'ऐप अनुपलब्ध है',
   },
   chat: {
     newChat: 'नया चैट',

+ 1 - 0
web/i18n/hi-IN/tools.ts

@@ -103,6 +103,7 @@ const translation = {
       label: 'टैग',
       labelPlaceholder: 'टैग चुनें(वैकल्पिक)',
       description: 'पैरामीटर के अर्थ का विवरण',
+      descriptionPlaceholder: 'पैरामीटर के अर्थ का विवरण',
     },
     customDisclaimer: 'कस्टम अस्वीकरण',
     customDisclaimerPlaceholder: 'कस्टम अस्वीकरण दर्ज करें',

+ 9 - 0
web/i18n/hi-IN/workflow.ts

@@ -73,6 +73,13 @@ const translation = {
       'कार्यप्रवाह अपडेट के बाद टूल पुनः कॉन्फ़िगरेशन आवश्यक है।',
     viewDetailInTracingPanel: 'विवरण देखें',
     syncingData: 'डेटा सिंक हो रहा है, बस कुछ सेकंड।',
+    overwriteAndImport: 'अधिलेखित और आयात',
+    importSuccess: 'सफलता आयात करें',
+    chooseDSL: 'डीएसएल (वाईएमएल) फ़ाइल चुनें',
+    importDSL: 'DSL आयात करें',
+    backupCurrentDraft: 'बैकअप वर्तमान ड्राफ्ट',
+    importFailure: 'आयात विफलता',
+    importDSLTip: 'वर्तमान ड्राफ्ट ओवरराइट हो जाएगा। आयात करने से पहले वर्कफ़्लो को बैकअप के रूप में निर्यात करें.',
   },
   env: {
     envPanelTitle: 'पर्यावरण चर',
@@ -182,6 +189,7 @@ const translation = {
     'transform': 'परिवर्तन',
     'utilities': 'उपयोगिताएं',
     'noResult': 'कोई मिलान नहीं मिला',
+    'searchTool': 'खोज उपकरण',
   },
   blocks: {
     'start': 'प्रारंभ',
@@ -423,6 +431,7 @@ const translation = {
       enterValue: 'मान दर्ज करें',
       addCondition: 'शर्त जोड़ें',
       conditionNotSetup: 'शर्त सेटअप नहीं है',
+      selectVariable: 'चर का चयन करें...',
     },
     variableAssigner: {
       title: 'वेरिएबल्स असाइन करें',

+ 8 - 0
web/i18n/it-IT/app-overview.ts

@@ -52,6 +52,8 @@ const translation = {
           title: 'Fasi del Workflow',
           show: 'Mostra',
           hide: 'Nascondi',
+          subTitle: 'Dettagli del flusso di lavoro',
+          showDesc: 'Mostrare o nascondere i dettagli del flusso di lavoro in WebApp',
         },
         chatColorTheme: 'Tema colore chat',
         chatColorThemeDesc: 'Imposta il tema colore del chatbot',
@@ -72,6 +74,12 @@ const translation = {
           customDisclaimerTip:
             'Il testo del disclaimer personalizzato verrà visualizzato sul lato client, fornendo informazioni aggiuntive sull\'applicazione',
         },
+        sso: {
+          label: 'Autenticazione SSO',
+          title: 'WebApp SSO',
+          description: 'Tutti gli utenti devono effettuare l\'accesso con SSO prima di utilizzare WebApp',
+          tooltip: 'Contattare l\'amministratore per abilitare l\'SSO di WebApp',
+        },
       },
       embedded: {
         entry: 'Incorporato',

+ 10 - 0
web/i18n/it-IT/app.ts

@@ -134,7 +134,17 @@ const translation = {
       removeConfirmContent:
         'La configurazione attuale è in uso, rimuovendola disattiverà la funzione di Tracciamento.',
     },
+    view: 'Vista',
   },
+  answerIcon: {
+    description: 'Se utilizzare l\'icona WebApp per la sostituzione 🤖 nell\'applicazione condivisa',
+    title: 'Usa l\'icona WebApp per sostituire 🤖',
+    descriptionInExplore: 'Se utilizzare l\'icona WebApp per sostituirla 🤖 in Esplora',
+  },
+  importFromDSLUrl: 'Dall\'URL',
+  importFromDSLFile: 'Da file DSL',
+  importFromDSL: 'Importazione da DSL',
+  importFromDSLUrlPlaceholder: 'Incolla qui il link DSL',
 }
 
 export default translation

+ 1 - 0
web/i18n/it-IT/workflow.ts

@@ -191,6 +191,7 @@ const translation = {
     'transform': 'Trasforma',
     'utilities': 'Utility',
     'noResult': 'Nessuna corrispondenza trovata',
+    'searchTool': 'Strumento di ricerca',
   },
   blocks: {
     'start': 'Inizio',

+ 16 - 8
web/i18n/ja-JP/app-overview.ts

@@ -30,24 +30,26 @@ const translation = {
   overview: {
     title: '概要',
     appInfo: {
-      explanation: '使いやすいAI WebApp',
+      explanation: '使いやすいAI Webアプリ',
       accessibleAddress: '公開URL',
       preview: 'プレビュー',
       regenerate: '再生成',
       regenerateNotice: '公開URLを再生成しますか?',
-      preUseReminder: '続行する前にWebAppを有効にしてください。',
+      preUseReminder: '続行する前にWebアプリを有効にしてください。',
       settings: {
         entry: '設定',
-        title: 'WebApp設定',
-        webName: 'WebApp名',
-        webDesc: 'WebAppの説明',
+        title: 'Webアプリの設定',
+        webName: 'Webアプリの名前',
+        webDesc: 'Webアプリの説明',
         webDescTip: 'このテキストはクライアント側に表示され、アプリケーションの使用方法の基本的なガイダンスを提供します。',
-        webDescPlaceholder: 'WebAppの説明を入力してください',
+        webDescPlaceholder: 'Webアプリの説明を入力してください',
         language: '言語',
         workflow: {
           title: 'ワークフローステップ',
           show: '表示',
           hide: '非表示',
+          subTitle: 'ワークフローの詳細',
+          showDesc: 'Webアプリでワークフローの詳細を表示または非表示にする',
         },
         chatColorTheme: 'チャットボットのカラーテーマ',
         chatColorThemeDesc: 'チャットボットのカラーテーマを設定します',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: '免責事項を入力してください',
           customDisclaimerTip: 'アプリケーションの使用に関する免責事項を提供します。',
         },
+        sso: {
+          title: 'WebアプリのSSO',
+          tooltip: '管理者に問い合わせて、WebアプリのSSOを有効にします',
+          label: 'SSO認証',
+          description: 'すべてのユーザーは、Webアプリを使用する前にSSOでログインする必要があります',
+        },
       },
       embedded: {
         entry: '埋め込み',
@@ -83,8 +91,8 @@ const translation = {
       customize: {
         way: '方法',
         entry: 'カスタマイズ',
-        title: 'AI WebAppのカスタマイズ',
-        explanation: 'シナリオとスタイルのニーズに合わせてWeb Appのフロントエンドをカスタマイズできます。',
+        title: 'AI Webアプリのカスタマイズ',
+        explanation: 'シナリオとスタイルのニーズに合わせてWebアプリのフロントエンドをカスタマイズできます。',
         way1: {
           name: 'クライアントコードをフォークして修正し、Vercelにデプロイします(推奨)',
           step1: 'クライアントコードをフォークして修正します',

+ 6 - 0
web/i18n/ja-JP/app.ts

@@ -127,6 +127,12 @@ const translation = {
       removeConfirmTitle: '{{key}}の設定を削除しますか?',
       removeConfirmContent: '現在の設定は使用中です。これを削除すると、トレース機能が無効になります。',
     },
+    view: '見る',
+  },
+  answerIcon: {
+    title: 'Webアプリアイコンを使用して🤖を置き換える',
+    description: '共有アプリケーションの中で Webアプリアイコンを使用して🤖を置き換えるかどうか',
+    descriptionInExplore: 'ExploreでWebアプリアイコンを使用して🤖を置き換えるかどうか',
   },
 }
 

+ 1 - 0
web/i18n/ja-JP/dataset.ts

@@ -53,6 +53,7 @@ const translation = {
     semantic_search: 'ベクトル検索',
     full_text_search: 'フルテキスト検索',
     hybrid_search: 'ハイブリッド検索',
+    invertedIndex: '逆さま',
   },
   mixtureHighQualityAndEconomicTip: '高品質なナレッジベースと経済的なナレッジベースを混在させるには、Rerankモデルを構成する必要がある。',
   inconsistentEmbeddingModelTip: '選択されたナレッジベースが一貫性のない埋め込みモデルで構成されている場合、Rerankモデルの構成が必要です。',

+ 1 - 0
web/i18n/ja-JP/workflow.ts

@@ -416,6 +416,7 @@ const translation = {
       enterValue: '値を入力',
       addCondition: '条件を追加',
       conditionNotSetup: '条件が設定されていません',
+      selectVariable: '変数を選択...',
     },
     variableAssigner: {
       title: '変数を代入する',

+ 11 - 0
web/i18n/ko-KR/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: '워크플로 단계',
           show: '표시',
           hide: '숨기기',
+          showDesc: 'WebApp에서 워크플로 세부 정보 표시 또는 숨기기',
+          subTitle: '워크플로우 세부 정보',
         },
         chatColorTheme: '챗봇 색상 테마',
         chatColorThemeDesc: '챗봇의 색상 테마를 설정하세요',
@@ -60,6 +62,15 @@ const translation = {
           privacyPolicy: '개인정보 처리방침',
           privacyPolicyPlaceholder: '개인정보 처리방침 링크를 입력하세요',
           privacyPolicyTip: '방문자가 애플리케이션이 수집하는 데이터를 이해하고, Dify의 <privacyPolicyLink>개인정보 처리방침</privacyPolicyLink>을 참조할 수 있도록 합니다.',
+          customDisclaimer: '사용자 지정 면책 조항',
+          customDisclaimerPlaceholder: '사용자 지정 면책 조항 텍스트를 입력합니다.',
+          customDisclaimerTip: '사용자 지정 고지 사항 텍스트는 클라이언트 쪽에 표시되어 응용 프로그램에 대한 추가 정보를 제공합니다',
+        },
+        sso: {
+          label: 'SSO 인증',
+          title: '웹앱 SSO',
+          tooltip: '관리자에게 문의하여 WebApp SSO를 사용하도록 설정합니다.',
+          description: '모든 사용자는 WebApp을 사용하기 전에 SSO로 로그인해야 합니다.',
         },
       },
       embedded: {

+ 10 - 0
web/i18n/ko-KR/app.ts

@@ -118,7 +118,17 @@ const translation = {
       removeConfirmTitle: '{{key}} 구성을 제거하시겠습니까?',
       removeConfirmContent: '현재 구성이 사용 중입니다. 제거하면 추적 기능이 꺼집니다.',
     },
+    view: '보기',
   },
+  answerIcon: {
+    description: 'WebApp 아이콘을 사용하여 공유 응용 프로그램에서 바꿀🤖지 여부',
+    title: 'WebApp 아이콘을 사용하여 🤖',
+    descriptionInExplore: 'Explore에서 WebApp 아이콘을 사용하여 바꿀🤖지 여부',
+  },
+  importFromDSL: 'DSL에서 가져오기',
+  importFromDSLFile: 'DSL 파일에서',
+  importFromDSLUrl: 'URL에서',
+  importFromDSLUrlPlaceholder: '여기에 DSL 링크 붙여 넣기',
 }
 
 export default translation

+ 5 - 0
web/i18n/ko-KR/billing.ts

@@ -58,6 +58,9 @@ const translation = {
       ragAPIRequest: 'RAG API 요청',
       agentMode: '에이전트 모드',
       workflow: '워크플로우',
+      llmLoadingBalancing: 'LLM 로드 밸런싱',
+      bulkUpload: '문서 대량 업로드',
+      llmLoadingBalancingTooltip: '모델에 여러 API 키를 추가하여 API 속도 제한을 효과적으로 우회할 수 있습니다.',
     },
     comingSoon: '곧 출시 예정',
     member: '멤버',
@@ -72,6 +75,8 @@ const translation = {
     },
     ragAPIRequestTooltip: 'Dify의 지식베이스 처리 기능을 호출하는 API 호출 수를 나타냅니다.',
     receiptInfo: '팀 소유자 및 팀 관리자만 구독 및 청구 정보를 볼 수 있습니다',
+    annotationQuota: 'Annotation Quota(주석 할당량)',
+    documentsUploadQuota: '문서 업로드 할당량',
   },
   plans: {
     sandbox: {

+ 34 - 0
web/i18n/ko-KR/common.ts

@@ -197,6 +197,11 @@ const translation = {
     disinvite: '초대 취소',
     deleteMember: '멤버 삭제',
     you: '(나)',
+    datasetOperator: '지식 관리자',
+    setBuilder: '빌더로 설정',
+    builder: '건설자',
+    builderTip: '자신의 앱을 구축 및 편집할 수 있습니다.',
+    datasetOperatorTip: '기술 자료만 관리할 수 있습니다.',
   },
   integrations: {
     connected: '연결됨',
@@ -343,6 +348,22 @@ const translation = {
     quotaTip: '남은 무료 토큰 사용 가능',
     loadPresets: '프리셋 로드',
     parameters: '매개변수',
+    apiKey: 'API 키',
+    defaultConfig: '기본 구성',
+    providerManaged: '제공자 관리',
+    loadBalancing: '부하 분산Load balancing',
+    addConfig: '구성 추가',
+    apiKeyStatusNormal: 'APIKey 상태는 정상입니다.',
+    configLoadBalancing: 'Config 로드 밸런싱',
+    editConfig: '구성 편집',
+    loadBalancingHeadline: '로드 밸런싱',
+    modelHasBeenDeprecated: '이 모델은 더 이상 사용되지 않습니다',
+    loadBalancingDescription: '여러 자격 증명 세트로 부담을 줄입니다.',
+    upgradeForLoadBalancing: '로드 밸런싱을 사용하도록 계획을 업그레이드합니다.',
+    apiKeyRateLimit: '속도 제한에 도달했으며, {{seconds}}s 후에 사용할 수 있습니다.',
+    loadBalancingInfo: '기본적으로 부하 분산은 라운드 로빈 전략을 사용합니다. 속도 제한이 트리거되면 1분의 휴지 기간이 적용됩니다.',
+    loadBalancingLeastKeyWarning: '로드 밸런싱을 사용하려면 최소 2개의 키를 사용하도록 설정해야 합니다.',
+    providerManagedDescription: '모델 공급자가 제공하는 단일 자격 증명 집합을 사용합니다.',
   },
   dataSource: {
     add: '데이터 소스 추가하기',
@@ -366,6 +387,15 @@ const translation = {
         preview: '미리보기',
       },
     },
+    website: {
+      inactive: '게으른',
+      title: '웹 사이트',
+      configuredCrawlers: '구성된 크롤러',
+      with: '와',
+      active: '활동적인',
+      description: '웹 크롤러를 사용하여 웹 사이트에서 콘텐츠를 가져옵니다.',
+    },
+    configure: '구성',
   },
   plugin: {
     serpapi: {
@@ -534,6 +564,10 @@ const translation = {
     created: '태그가 성공적으로 생성되었습니다',
     failed: '태그 생성에 실패했습니다',
   },
+  errorMsg: {
+    urlError: 'URL은 http:// 또는 https:// 로 시작해야 합니다.',
+    fieldRequired: '{{field}}는 필수입니다.',
+  },
 }
 
 export default translation

+ 31 - 0
web/i18n/ko-KR/dataset-creation.ts

@@ -50,6 +50,30 @@ const translation = {
       confirmButton: '생성',
       failed: '생성에 실패했습니다',
     },
+    website: {
+      firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+      limit: '한계',
+      options: '옵션',
+      firecrawlDoc: 'Firecrawl 문서',
+      selectAll: '모두 선택',
+      maxDepth: '최대 수심',
+      includeOnlyPaths: '경로만 포함',
+      excludePaths: '경로 제외',
+      preview: '미리 보기',
+      run: '달리다',
+      fireCrawlNotConfigured: 'Firecrawl이 구성되지 않았습니다.',
+      firecrawlTitle: 'Firecrawl로 🔥웹 콘텐츠 추출',
+      configure: '구성',
+      resetAll: '모두 재설정',
+      crawlSubPage: '하위 페이지 크롤링',
+      exceptionErrorTitle: 'Firecrawl 작업을 실행하는 동안 예외가 발생했습니다.',
+      scrapTimeInfo: '{{time}}s 내에 총 {{total}} 페이지를 스크랩했습니다.',
+      unknownError: '알 수 없는 오류',
+      totalPageScraped: '스크랩한 총 페이지 수:',
+      fireCrawlNotConfiguredDescription: 'API 키로 Firecrawl을 구성하여 사용합니다.',
+      extractOnlyMainContent: '기본 콘텐츠만 추출합니다(머리글, 탐색, 바닥글 등 없음).',
+      maxDepthTooltip: '입력한 URL을 기준으로 크롤링할 최대 수준입니다. 깊이 0은 입력 된 url의 페이지를 긁어 내고, 깊이 1은 url과 enteredURL + one / 이후의 모든 것을 긁어 모으는 식입니다.',
+    },
   },
   stepTwo: {
     segmentation: '청크 설정',
@@ -107,6 +131,8 @@ const translation = {
     indexSettedTip: '인덱스 방식을 변경하려면,',
     retrivalSettedTip: '인덱스 방식을 변경하려면,',
     datasetSettingLink: '지식 설정',
+    webpageUnit: '페이지',
+    websiteSource: '웹 사이트 전처리',
   },
   stepThree: {
     creationTitle: '🎉 지식이 생성되었습니다',
@@ -126,6 +152,11 @@ const translation = {
     modelButtonConfirm: '확인',
     modelButtonCancel: '취소',
   },
+  firecrawl: {
+    getApiKeyLinkText: 'firecrawl.dev 에서 API 키 가져오기',
+    apiKeyPlaceholder: 'firecrawl.dev 의 API 키',
+    configFirecrawl: 'Firecrawl 구성 🔥',
+  },
 }
 
 export default translation

+ 3 - 0
web/i18n/ko-KR/dataset-documents.ts

@@ -13,6 +13,8 @@ const translation = {
         status: '상태',
         action: '동작',
       },
+      name: '이름',
+      rename: '이름 바꾸기',
     },
     action: {
       uploadFile: '새 파일 업로드',
@@ -74,6 +76,7 @@ const translation = {
       error: '가져오기 오류',
       ok: '확인',
     },
+    addUrl: 'URL 추가',
   },
   metadata: {
     title: '메타데이터',

+ 2 - 0
web/i18n/ko-KR/dataset-settings.ts

@@ -27,6 +27,8 @@ const translation = {
       longDescription: ' 검색 방법에 대한 자세한 내용은 언제든지 지식 설정에서 변경할 수 있습니다.',
     },
     save: '저장',
+    permissionsInvitedMembers: '부분 팀 구성원',
+    me: '(당신)',
   },
 }
 

+ 2 - 0
web/i18n/ko-KR/login.ts

@@ -53,6 +53,7 @@ const translation = {
     nameEmpty: '사용자 이름을 입력하세요.',
     passwordEmpty: '비밀번호를 입력하세요.',
     passwordInvalid: '비밀번호는 문자와 숫자를 포함하고 8자 이상이어야 합니다.',
+    passwordLengthInValid: '비밀번호는 8자 이상이어야 합니다.',
   },
   license: {
     tip: 'Dify Community Edition을 시작하기 전에 GitHub의',
@@ -68,6 +69,7 @@ const translation = {
   activated: '지금 로그인하세요',
   adminInitPassword: '관리자 초기화 비밀번호',
   validate: '확인',
+  sso: 'SSO로 계속하기',
 }
 
 export default translation

+ 29 - 0
web/i18n/ko-KR/workflow.ts

@@ -69,6 +69,14 @@ const translation = {
     manageInTools: '도구에서 관리',
     workflowAsToolTip: '워크플로우 업데이트 후 도구 재구성이 필요합니다.',
     viewDetailInTracingPanel: '세부 정보 보기',
+    importDSL: 'DSL 가져오기',
+    importFailure: '가져오기 실패',
+    chooseDSL: 'DSL(yml) 파일 선택',
+    backupCurrentDraft: '현재 초안 백업',
+    overwriteAndImport: '덮어쓰기 및 가져오기',
+    importSuccess: '가져오기 성공',
+    syncingData: '단 몇 초 만에 데이터를 동기화할 수 있습니다.',
+    importDSLTip: '현재 초안을 덮어씁니다. 가져오기 전에 워크플로를 백업으로 내보냅니다.',
   },
   env: {
     envPanelTitle: '환경 변수',
@@ -178,6 +186,7 @@ const translation = {
     'transform': '변환',
     'utilities': '유틸리티',
     'noResult': '일치하는 결과 없음',
+    'searchTool': '검색 도구',
   },
   blocks: {
     'start': '시작',
@@ -407,6 +416,7 @@ const translation = {
       enterValue: '값 입력',
       addCondition: '조건 추가',
       conditionNotSetup: '조건이 설정되지 않음',
+      selectVariable: '변수 선택...',
     },
     variableAssigner: {
       title: '변수 할당',
@@ -502,6 +512,25 @@ const translation = {
       iteration_other: '{{count}} 반복',
       currentIteration: '현재 반복',
     },
+    note: {
+      editor: {
+        medium: '보통',
+        showAuthor: '작성자 표시',
+        link: '링크',
+        unlink: '해제',
+        small: '작다',
+        large: '큰',
+        placeholder: '메모 쓰기...',
+        bold: '대담한',
+        enterUrl: 'URL 입력...',
+        openLink: '열다',
+        italic: '이탤릭체',
+        invalidUrl: '잘못된 URL',
+        strikethrough: '취소선',
+        bulletList: '글머리 기호 목록',
+      },
+      addNote: '메모 추가',
+    },
   },
   tracing: {
     stopBy: '{{user}}에 의해 중지됨',

+ 8 - 0
web/i18n/pl-PL/app-overview.ts

@@ -52,6 +52,8 @@ const translation = {
           title: 'Kroki przepływu pracy',
           show: 'Pokaż',
           hide: 'Ukryj',
+          subTitle: 'Szczegóły przepływu pracy',
+          showDesc: 'Pokazywanie lub ukrywanie szczegółów przepływu pracy w aplikacji internetowej',
         },
         chatColorTheme: 'Motyw kolorystyczny czatu',
         chatColorThemeDesc: 'Ustaw motyw kolorystyczny czatu',
@@ -69,6 +71,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Wprowadź oświadczenie o ochronie danych',
           customDisclaimerTip: 'Niestandardowy tekst oświadczenia będzie wyświetlany po stronie klienta, dostarczając dodatkowych informacji o aplikacji.',
         },
+        sso: {
+          tooltip: 'Skontaktuj się z administratorem, aby włączyć logowanie jednokrotne w aplikacji internetowej',
+          title: 'Logowanie jednokrotne w aplikacji internetowej',
+          label: 'Uwierzytelnianie logowania jednokrotnego',
+          description: 'Wszyscy użytkownicy muszą zalogować się za pomocą logowania jednokrotnego przed użyciem aplikacji internetowej',
+        },
       },
       embedded: {
         entry: 'Osadzone',

+ 10 - 0
web/i18n/pl-PL/app.ts

@@ -129,7 +129,17 @@ const translation = {
       removeConfirmTitle: 'Usunąć konfigurację {{key}}?',
       removeConfirmContent: 'Obecna konfiguracja jest w użyciu, jej usunięcie wyłączy funkcję Śledzenia.',
     },
+    view: 'Widok',
   },
+  answerIcon: {
+    description: 'Czy w aplikacji udostępnionej ma być używana ikona aplikacji internetowej do zamiany 🤖.',
+    title: 'Użyj ikony WebApp, aby zastąpić 🤖',
+    descriptionInExplore: 'Czy używać ikony aplikacji internetowej do zastępowania 🤖 w Eksploruj',
+  },
+  importFromDSL: 'Importowanie z DSL',
+  importFromDSLUrl: 'Z adresu URL',
+  importFromDSLFile: 'Z pliku DSL',
+  importFromDSLUrlPlaceholder: 'Wklej tutaj link DSL',
 }
 
 export default translation

+ 3 - 0
web/i18n/pl-PL/billing.ts

@@ -65,6 +65,8 @@ const translation = {
       bulkUpload: 'Masowe przesyłanie dokumentów',
       agentMode: 'Tryb agenta',
       workflow: 'Przepływ pracy',
+      llmLoadingBalancing: 'Równoważenie obciążenia LLM',
+      llmLoadingBalancingTooltip: 'Dodaj wiele kluczy API do modeli, skutecznie omijając limity szybkości interfejsu API.',
     },
     comingSoon: 'Wkrótce dostępne',
     member: 'Członek',
@@ -83,6 +85,7 @@ const translation = {
       'Odnosi się do liczby wywołań API wykorzystujących tylko zdolności przetwarzania bazy wiedzy Dify.',
     receiptInfo:
       'Tylko właściciel zespołu i administrator zespołu mogą subskrybować i przeglądać informacje o rozliczeniach',
+    annotationQuota: 'Przydział adnotacji',
   },
   plans: {
     sandbox: {

+ 34 - 0
web/i18n/pl-PL/common.ts

@@ -209,6 +209,11 @@ const translation = {
     disinvite: 'Anuluj zaproszenie',
     deleteMember: 'Usuń członka',
     you: '(Ty)',
+    datasetOperatorTip: 'Może zarządzać tylko bazą wiedzy',
+    setBuilder: 'Ustaw jako budowniczego',
+    builder: 'Budowniczy',
+    builderTip: 'Może tworzyć i edytować własne aplikacje',
+    datasetOperator: 'Wiedza Admin',
   },
   integrations: {
     connected: 'Połączony',
@@ -360,6 +365,22 @@ const translation = {
     quotaTip: 'Pozostałe dostępne darmowe tokeny',
     loadPresets: 'Załaduj ustawienia wstępne',
     parameters: 'PARAMETRY',
+    apiKey: 'KLUCZ-API',
+    loadBalancing: 'Równoważenie obciążenia',
+    defaultConfig: 'Domyślna konfiguracja',
+    providerManagedDescription: 'Użyj pojedynczego zestawu poświadczeń dostarczonych przez dostawcę modelu.',
+    loadBalancingHeadline: 'Równoważenie obciążenia',
+    modelHasBeenDeprecated: 'Ten model jest przestarzały',
+    loadBalancingDescription: 'Zmniejsz presję dzięki wielu zestawom poświadczeń.',
+    providerManaged: 'Zarządzany przez dostawcę',
+    upgradeForLoadBalancing: 'Uaktualnij swój plan, aby włączyć równoważenie obciążenia.',
+    apiKeyStatusNormal: 'Stan APIKey jest normalny',
+    loadBalancingLeastKeyWarning: 'Aby włączyć równoważenie obciążenia, muszą być włączone co najmniej 2 klucze.',
+    loadBalancingInfo: 'Domyślnie równoważenie obciążenia używa strategii działania okrężnego. Jeśli zostanie uruchomione ograniczenie szybkości, zostanie zastosowany 1-minutowy okres odnowienia.',
+    configLoadBalancing: 'Równoważenie obciążenia konfiguracji',
+    editConfig: 'Edytuj konfigurację',
+    addConfig: 'Dodaj konfigurację',
+    apiKeyRateLimit: 'Osiągnięto limit szybkości, dostępny po {{sekund}}s',
   },
   dataSource: {
     add: 'Dodaj źródło danych',
@@ -383,6 +404,15 @@ const translation = {
         preview: 'PODGLĄD',
       },
     },
+    website: {
+      active: 'Aktywny',
+      with: 'Z',
+      title: 'Strona internetowa',
+      description: 'Importuj zawartość ze stron internetowych za pomocą robota indeksującego.',
+      configuredCrawlers: 'Skonfigurowane roboty indeksujące',
+      inactive: 'Nieaktywny',
+    },
+    configure: 'Konfigurować',
   },
   plugin: {
     serpapi: {
@@ -556,6 +586,10 @@ const translation = {
     created: 'Tag został pomyślnie utworzony',
     failed: 'Nie udało się utworzyć tagu',
   },
+  errorMsg: {
+    fieldRequired: '{{field}} jest wymagane',
+    urlError: 'Adres URL powinien zaczynać się od http:// lub https://',
+  },
 }
 
 export default translation

+ 31 - 0
web/i18n/pl-PL/dataset-creation.ts

@@ -51,6 +51,30 @@ const translation = {
       confirmButton: 'Utwórz',
       failed: 'Utworzenie nie powiodło się',
     },
+    website: {
+      limit: 'Ograniczać',
+      firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+      firecrawlDoc: 'Dokumentacja Firecrawl',
+      unknownError: 'Nieznany błąd',
+      fireCrawlNotConfiguredDescription: 'Skonfiguruj Firecrawl z kluczem API, aby z niego korzystać.',
+      run: 'Biegać',
+      configure: 'Konfigurować',
+      resetAll: 'Zresetuj wszystko',
+      preview: 'Prapremiera',
+      exceptionErrorTitle: 'Wystąpił wyjątek podczas uruchamiania zadania Firecrawl:',
+      maxDepth: 'Maksymalna głębokość',
+      crawlSubPage: 'Przeszukiwanie podstron',
+      options: 'Opcje',
+      scrapTimeInfo: 'Zeskrobano {{total}} stron w sumie w ciągu {{time}}s',
+      totalPageScraped: 'Łączna liczba zeskrobanych stron:',
+      extractOnlyMainContent: 'Wyodrębnij tylko główną zawartość (bez nagłówków, nawigacji, stopek itp.)',
+      excludePaths: 'Wykluczanie ścieżek',
+      includeOnlyPaths: 'Uwzględnij tylko ścieżki',
+      selectAll: 'Zaznacz wszystko',
+      firecrawlTitle: 'Wyodrębnij zawartość internetową za pomocą 🔥Firecrawl',
+      fireCrawlNotConfigured: 'Firecrawl nie jest skonfigurowany',
+      maxDepthTooltip: 'Maksymalna głębokość przeszukiwania względem wprowadzonego adresu URL. Głębokość 0 po prostu zeskrobuje stronę z wprowadzonego adresu URL, głębokość 1 zeskrobuje adres URL i wszystko po wprowadzeniuURL+ jeden / i tak dalej.',
+    },
   },
   stepTwo: {
     segmentation: 'Ustawienia bloków tekstu',
@@ -120,6 +144,8 @@ const translation = {
     indexSettedTip: 'Aby zmienić metodę indeksowania, przejdź do ',
     retrivalSettedTip: 'Aby zmienić metodę indeksowania, przejdź do ',
     datasetSettingLink: 'ustawień Wiedzy.',
+    webpageUnit: 'Stron',
+    websiteSource: 'Witryna internetowa przetwarzania wstępnego',
   },
   stepThree: {
     creationTitle: '🎉 Utworzono Wiedzę',
@@ -141,6 +167,11 @@ const translation = {
     modelButtonConfirm: 'Potwierdź',
     modelButtonCancel: 'Anuluj',
   },
+  firecrawl: {
+    apiKeyPlaceholder: 'Klucz API od firecrawl.dev',
+    configFirecrawl: 'Konfiguracja 🔥Firecrawla',
+    getApiKeyLinkText: 'Pobierz klucz API z firecrawl.dev',
+  },
 }
 
 export default translation

+ 3 - 0
web/i18n/pl-PL/dataset-documents.ts

@@ -13,6 +13,8 @@ const translation = {
         status: 'STATUS',
         action: 'AKCJA',
       },
+      name: 'Nazwa',
+      rename: 'Przemianować',
     },
     action: {
       uploadFile: 'Wgraj nowy plik',
@@ -75,6 +77,7 @@ const translation = {
       error: 'Błąd importu',
       ok: 'OK',
     },
+    addUrl: 'Dodaj adres URL',
   },
   metadata: {
     title: 'Metadane',

+ 2 - 0
web/i18n/pl-PL/dataset-settings.ts

@@ -32,6 +32,8 @@ const translation = {
         ' dotyczące metody doboru, możesz to zmienić w dowolnym momencie w ustawieniach wiedzy.',
     },
     save: 'Zapisz',
+    permissionsInvitedMembers: 'Częściowi członkowie zespołu',
+    me: '(Ty)',
   },
 }
 

+ 1 - 0
web/i18n/pl-PL/login.ts

@@ -59,6 +59,7 @@ const translation = {
     passwordEmpty: 'Hasło jest wymagane',
     passwordInvalid:
       'Hasło musi zawierać litery i cyfry, a jego długość musi być większa niż 8',
+    passwordLengthInValid: 'Hasło musi składać się z co najmniej 8 znaków',
   },
   license: {
     tip: 'Przed rozpoczęciem wersji społecznościowej Dify, przeczytaj GitHub',

+ 34 - 0
web/i18n/pl-PL/tools.ts

@@ -5,6 +5,7 @@ const translation = {
     all: 'Wszystkie',
     builtIn: 'Wbudowane',
     custom: 'Niestandardowe',
+    workflow: 'Przepływ pracy',
   },
   contribute: {
     line1: 'Interesuje mnie ',
@@ -77,6 +78,27 @@ const translation = {
     customDisclaimerPlaceholder: 'Proszę wprowadzić oświadczenie niestandardowe',
     deleteToolConfirmTitle: 'Skasuj ten przyrząd?',
     deleteToolConfirmContent: 'Usunięcie narzędzia jest nieodwracalne. Użytkownicy nie będą mieli już dostępu do Twojego narzędzia.',
+    toolInput: {
+      name: 'Nazwa',
+      required: 'Wymagane',
+      descriptionPlaceholder: 'Opis znaczenia parametru',
+      methodParameter: 'Parametr',
+      label: 'Tagi',
+      methodSetting: 'Ustawienie',
+      description: 'Opis',
+      method: 'Metoda',
+      methodParameterTip: 'LLM wypełnia się podczas wnioskowania',
+      labelPlaceholder: 'Wybierz tagi (opcjonalnie)',
+      methodSettingTip: 'Użytkownik wypełnia konfigurację narzędzia',
+      title: 'Wprowadzanie narzędzi',
+    },
+    nameForToolCall: 'Nazwa wywołania narzędzia',
+    description: 'Opis',
+    descriptionPlaceholder: 'Krótki opis przeznaczenia narzędzia, np. zmierz temperaturę dla konkretnej lokalizacji.',
+    nameForToolCallTip: 'Obsługuje tylko cyfry, litery i podkreślenia.',
+    nameForToolCallPlaceHolder: 'Służy do rozpoznawania maszyn, takich jak getCurrentWeather, list_pets',
+    confirmTip: 'Będzie to miało wpływ na aplikacje korzystające z tego narzędzia',
+    confirmTitle: 'Potwierdź, aby zapisać ?',
   },
   test: {
     title: 'Test',
@@ -118,6 +140,18 @@ const translation = {
   toolRemoved: 'Narzędzie usunięte',
   notAuthorized: 'Narzędzie nieautoryzowane',
   howToGet: 'Jak uzyskać',
+  addToolModal: {
+    manageInTools: 'Zarządzanie w Narzędziach',
+    added: 'Dodane',
+    type: 'typ',
+    category: 'kategoria',
+    add: 'dodawać',
+    emptyTitle: 'Brak dostępnego narzędzia do przepływu pracy',
+    emptyTip: 'Przejdź do "Przepływ pracy -> Opublikuj jako narzędzie"',
+  },
+  openInStudio: 'Otwieranie w Studio',
+  customToolTip: 'Dowiedz się więcej o niestandardowych narzędziach Dify',
+  toolNameUsageTip: 'Nazwa wywołania narzędzia do wnioskowania i podpowiadania agentowi',
 }
 
 export default translation

+ 29 - 0
web/i18n/pl-PL/workflow.ts

@@ -69,6 +69,14 @@ const translation = {
     manageInTools: 'Zarządzaj w narzędziach',
     workflowAsToolTip: 'Wymagana rekonfiguracja narzędzia po aktualizacji przepływu pracy.',
     viewDetailInTracingPanel: 'Zobacz szczegóły',
+    importDSLTip: 'Bieżąca wersja robocza zostanie nadpisana. Eksportuj przepływ pracy jako kopię zapasową przed zaimportowaniem.',
+    syncingData: 'Synchronizacja danych w zaledwie kilka sekund.',
+    importSuccess: 'Import powodzenie',
+    importDSL: 'Importowanie DSL',
+    overwriteAndImport: 'Nadpisywanie i importowanie',
+    chooseDSL: 'Wybierz plik DSL(yml)',
+    backupCurrentDraft: 'Utwórz kopię zapasową bieżącej wersji roboczej',
+    importFailure: 'Niepowodzenie importu',
   },
   env: {
     envPanelTitle: 'Zmienne Środowiskowe',
@@ -178,6 +186,7 @@ const translation = {
     'transform': 'Transformacja',
     'utilities': 'Narzędzia pomocnicze',
     'noResult': 'Nie znaleziono dopasowań',
+    'searchTool': 'Wyszukiwarka',
   },
   blocks: {
     'start': 'Start',
@@ -407,6 +416,7 @@ const translation = {
       enterValue: 'Wpisz wartość',
       addCondition: 'Dodaj warunek',
       conditionNotSetup: 'Warunek NIE został ustawiony',
+      selectVariable: 'Wybierz zmienną...',
     },
     variableAssigner: {
       title: 'Przypisz zmienne',
@@ -502,6 +512,25 @@ const translation = {
       iteration_other: '{{count}} Iteracje',
       currentIteration: 'Bieżąca iteracja',
     },
+    note: {
+      editor: {
+        link: 'Łącze',
+        medium: 'Średni',
+        small: 'Mały',
+        italic: 'Kursywa',
+        enterUrl: 'Wpisz adres URL...',
+        showAuthor: 'Pokaż autora',
+        bold: 'Śmiały',
+        unlink: 'Odłączyć',
+        bulletList: 'Lista punktowana',
+        large: 'Duży',
+        openLink: 'Otwierać',
+        strikethrough: 'Przekreślenie',
+        invalidUrl: 'Nieprawidłowy adres URL',
+        placeholder: 'Napisz swoją notatkę...',
+      },
+      addNote: 'Dodaj notatkę',
+    },
   },
   tracing: {
     stopBy: 'Zatrzymane przez {{user}}',

+ 4 - 0
web/i18n/pt-BR/app-api.ts

@@ -74,6 +74,10 @@ const translation = {
     pathParams: 'Parâmetros de Caminho',
     query: 'Consulta',
   },
+  play: 'Brincar',
+  loading: 'Carregamento',
+  pause: 'Pausa',
+  playing: 'Jogar',
 }
 
 export default translation

+ 7 - 0
web/i18n/pt-BR/app-log.ts

@@ -90,6 +90,13 @@ const translation = {
     iteração: 'Iteração',
     finalProcessing: 'Processamento Final',
   },
+  agentLogDetail: {
+    iterations: 'Iterações',
+    agentMode: 'Modo Agente',
+    finalProcessing: 'Processamento final',
+    iteration: 'Iteração',
+    toolUsed: 'Ferramenta usada',
+  },
 }
 
 export default translation

+ 8 - 0
web/i18n/pt-BR/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Etapas do fluxo de trabalho',
           show: 'Mostrar',
           hide: 'Ocultar',
+          subTitle: 'Detalhes do fluxo de trabalho',
+          showDesc: 'Mostrar ou ocultar detalhes do fluxo de trabalho no WebApp',
         },
         chatColorTheme: 'Tema de cor do chatbot',
         chatColorThemeDesc: 'Defina o tema de cor do chatbot',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Insira o texto do aviso legal',
           customDisclaimerTip: 'O texto do aviso legal personalizado será exibido no lado do cliente, fornecendo informações adicionais sobre o aplicativo',
         },
+        sso: {
+          tooltip: 'Entre em contato com o administrador para habilitar o SSO do WebApp',
+          label: 'Autenticação SSO',
+          title: 'WebApp SSO',
+          description: 'Todos os usuários devem fazer login com SSO antes de usar o WebApp',
+        },
       },
       embedded: {
         entry: 'Embutido',

+ 10 - 0
web/i18n/pt-BR/app.ts

@@ -122,7 +122,17 @@ const translation = {
       removeConfirmTitle: 'Remover configuração de {{key}}?',
       removeConfirmContent: 'A configuração atual está em uso, removê-la desligará o recurso de Rastreamento.',
     },
+    view: 'Vista',
   },
+  answerIcon: {
+    descriptionInExplore: 'Se o ícone do WebApp deve ser usado para substituir 🤖 no Explore',
+    description: 'Se o ícone WebApp deve ser usado para substituir 🤖 no aplicativo compartilhado',
+    title: 'Use o ícone do WebApp para substituir 🤖',
+  },
+  importFromDSLUrlPlaceholder: 'Cole o link DSL aqui',
+  importFromDSLUrl: 'Do URL',
+  importFromDSLFile: 'Do arquivo DSL',
+  importFromDSL: 'Importar de DSL',
 }
 
 export default translation

+ 10 - 0
web/i18n/pt-BR/billing.ts

@@ -54,6 +54,11 @@ const translation = {
       customIntegration: 'Custom integration and support',
       ragAPIRequest: 'RAG API Requests',
       agentModel: 'Agent Model',
+      workflow: 'Fluxo de trabalho',
+      llmLoadingBalancing: 'Balanceamento de carga LLM',
+      bulkUpload: 'Carregar documentos em massa',
+      llmLoadingBalancingTooltip: 'Adicione várias chaves de API aos modelos, ignorando efetivamente os limites de taxa da API.',
+      agentMode: 'Modo Agente',
     },
     comingSoon: 'Coming soon',
     member: 'Member',
@@ -68,6 +73,11 @@ const translation = {
     },
     ragAPIRequestTooltip: 'Refers to the number of API calls invoking only the knowledge base processing capabilities of Dify.',
     receiptInfo: 'Somente proprietários e administradores de equipe podem se inscrever e visualizar informações de cobrança',
+    customTools: 'Ferramentas personalizadas',
+    documentsUploadQuota: 'Cota de upload de documentos',
+    annotationQuota: 'Cota de anotação',
+    contractSales: 'Entre em contato com a equipe de vendas',
+    unavailable: 'Indisponível',
   },
   plans: {
     sandbox: {

+ 34 - 0
web/i18n/pt-BR/common.ts

@@ -201,6 +201,11 @@ const translation = {
     disinvite: 'Cancelar o convite',
     deleteMember: 'Excluir Membro',
     you: '(Você)',
+    datasetOperatorTip: 'Só pode gerenciar a base de dados de conhecimento',
+    builder: 'Construtor',
+    setBuilder: 'Definir como construtor',
+    builderTip: 'Pode criar e editar seus próprios aplicativos',
+    datasetOperator: 'Administrador de conhecimento',
   },
   integrations: {
     connected: 'Conectado',
@@ -347,6 +352,22 @@ const translation = {
     quotaTip: 'Tokens gratuitos disponíveis restantes',
     loadPresets: 'Carregar Predefinições',
     parameters: 'PARÂMETROS',
+    loadBalancingDescription: 'Reduza a pressão com vários conjuntos de credenciais.',
+    configLoadBalancing: 'Balanceamento de carga de configuração',
+    upgradeForLoadBalancing: 'Atualize seu plano para habilitar o balanceamento de carga.',
+    providerManaged: 'Gerenciado pelo provedor',
+    apiKeyStatusNormal: 'O status do APIKey é normal',
+    loadBalancing: 'Balanceamento de carga',
+    addConfig: 'Adicionar configuração',
+    providerManagedDescription: 'Use o único conjunto de credenciais fornecido pelo provedor de modelo.',
+    apiKey: 'CHAVE DE API',
+    loadBalancingLeastKeyWarning: 'Para habilitar o balanceamento de carga, pelo menos 2 chaves devem estar habilitadas.',
+    editConfig: 'Editar configuração',
+    defaultConfig: 'Configuração padrão',
+    modelHasBeenDeprecated: 'Este modelo foi preterido',
+    loadBalancingInfo: 'Por padrão, o balanceamento de carga usa a estratégia Round-robin. Se a limitação de taxa for acionada, um período de espera de 1 minuto será aplicado.',
+    apiKeyRateLimit: 'O limite de taxa foi atingido, disponível após {{seconds}}s',
+    loadBalancingHeadline: 'Balanceamento de carga',
   },
   dataSource: {
     add: 'Adicionar uma fonte de dados',
@@ -370,6 +391,15 @@ const translation = {
         preview: 'PRÉ-VISUALIZAÇÃO',
       },
     },
+    website: {
+      inactive: 'Inativo',
+      active: 'Ativo',
+      title: 'Local na rede Internet',
+      with: 'Com',
+      configuredCrawlers: 'Rastreadores configurados',
+      description: 'Importe conteúdo de sites usando o rastreador da Web.',
+    },
+    configure: 'Configurar',
   },
   plugin: {
     serpapi: {
@@ -538,6 +568,10 @@ const translation = {
     created: 'Tag criada com sucesso',
     failed: 'Falha na criação da tag',
   },
+  errorMsg: {
+    fieldRequired: '{{field}} é obrigatório',
+    urlError: 'URL deve começar com http:// ou https://',
+  },
 }
 
 export default translation

+ 31 - 0
web/i18n/pt-BR/dataset-creation.ts

@@ -50,6 +50,30 @@ const translation = {
       confirmButton: 'Criar',
       failed: 'Falha na criação',
     },
+    website: {
+      fireCrawlNotConfiguredDescription: 'Configure o Firecrawl com a chave de API para usá-lo.',
+      run: 'Correr',
+      unknownError: 'Erro desconhecido',
+      crawlSubPage: 'Rastrear subpáginas',
+      selectAll: 'Selecionar tudo',
+      resetAll: 'Redefinir tudo',
+      firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+      includeOnlyPaths: 'Incluir apenas caminhos',
+      configure: 'Configurar',
+      limit: 'Limite',
+      firecrawlDoc: 'Documentos do Firecrawl',
+      preview: 'Visualizar',
+      options: 'Opções',
+      scrapTimeInfo: 'Páginas {{total}} raspadas no total dentro de {{time}}s',
+      exceptionErrorTitle: 'Ocorreu uma exceção durante a execução do trabalho Firecrawl:',
+      fireCrawlNotConfigured: 'O Firecrawl não está configurado',
+      maxDepthTooltip: 'Profundidade máxima para rastrear em relação ao URL inserido. A profundidade 0 apenas raspa a página do url inserido, a profundidade 1 raspa o url e tudo depois de inseridoURL + um / e assim por diante.',
+      firecrawlTitle: 'Extraia conteúdo da web com 🔥Firecrawl',
+      maxDepth: 'Profundidade máxima',
+      totalPageScraped: 'Total de páginas raspadas:',
+      excludePaths: 'Excluir caminhos',
+      extractOnlyMainContent: 'Extraia apenas o conteúdo principal (sem cabeçalhos, navs, rodapés, etc.)',
+    },
   },
   stepTwo: {
     segmentation: 'Configurações de fragmentação',
@@ -107,6 +131,8 @@ const translation = {
     indexSettedTip: 'Para alterar o método de índice, por favor vá para as ',
     retrivalSettedTip: 'Para alterar o método de índice, por favor vá para as ',
     datasetSettingLink: 'configurações do Conhecimento.',
+    websiteSource: 'Site de pré-processamento',
+    webpageUnit: 'Páginas',
   },
   stepThree: {
     creationTitle: '🎉 Conhecimento criado',
@@ -125,6 +151,11 @@ const translation = {
     modelButtonConfirm: 'Confirmar',
     modelButtonCancel: 'Cancelar',
   },
+  firecrawl: {
+    apiKeyPlaceholder: 'Chave de API do firecrawl.dev',
+    configFirecrawl: 'Configurar 🔥o Firecrawl',
+    getApiKeyLinkText: 'Obtenha sua chave de API do firecrawl.dev',
+  },
 }
 
 export default translation

+ 3 - 0
web/i18n/pt-BR/dataset-documents.ts

@@ -13,6 +13,8 @@ const translation = {
         status: 'STATUS',
         action: 'AÇÃO',
       },
+      name: 'Nome',
+      rename: 'Renomear',
     },
     action: {
       uploadFile: 'Enviar novo arquivo',
@@ -74,6 +76,7 @@ const translation = {
       error: 'Erro na importação',
       ok: 'OK',
     },
+    addUrl: 'Adicionar URL',
   },
   metadata: {
     title: 'Metadados',

+ 2 - 0
web/i18n/pt-BR/dataset-settings.ts

@@ -27,6 +27,8 @@ const translation = {
       longDescription: ' sobre o método de recuperação, você pode alterar isso a qualquer momento nas configurações do conhecimento.',
     },
     save: 'Salvar',
+    permissionsInvitedMembers: 'Membros parciais da equipe',
+    me: '(Você)',
   },
 }
 

+ 1 - 0
web/i18n/pt-BR/dataset.ts

@@ -70,6 +70,7 @@ const translation = {
   nTo1RetrievalLegacy: 'A recuperação N-para-1 será oficialmente descontinuada a partir de setembro. Recomenda-se usar a recuperação de múltiplos caminhos mais recente para obter melhores resultados.',
   nTo1RetrievalLegacyLink: 'Saiba mais',
   nTo1RetrievalLegacyLinkText: 'A recuperação N-para-1 será oficialmente descontinuada em setembro.',
+  intro6: 'como um plug-in de índice ChatGPT autônomo para publicar',
 }
 
 export default translation

+ 4 - 0
web/i18n/pt-BR/login.ts

@@ -53,6 +53,7 @@ const translation = {
     nameEmpty: 'O nome é obrigatório',
     passwordEmpty: 'A senha é obrigatória',
     passwordInvalid: 'A senha deve conter letras e números e ter um comprimento maior que 8',
+    passwordLengthInValid: 'A senha deve ter pelo menos 8 caracteres',
   },
   license: {
     tip: 'Antes de começar a usar a Edição Comunitária do Dify, leia a',
@@ -66,6 +67,9 @@ const translation = {
   activatedTipStart: 'Você se juntou à equipe',
   activatedTipEnd: '',
   activated: 'Entrar agora',
+  adminInitPassword: 'Senha de inicialização do administrador',
+  validate: 'Validar',
+  sso: 'Continuar com SSO',
 }
 
 export default translation

+ 34 - 0
web/i18n/pt-BR/tools.ts

@@ -5,6 +5,7 @@ const translation = {
     all: 'Todas',
     builtIn: 'Integradas',
     custom: 'Personalizadas',
+    workflow: 'Fluxo de trabalho',
   },
   contribute: {
     line1: 'Estou interessado em ',
@@ -75,6 +76,27 @@ const translation = {
     customDisclaimerPlaceholder: 'Digite o aviso personalizado',
     deleteToolConfirmTitle: 'Excluir esta ferramenta?',
     deleteToolConfirmContent: 'Excluir a ferramenta é irreversível. Os usuários não poderão mais acessar sua ferramenta.',
+    toolInput: {
+      label: 'Tags',
+      methodSetting: 'Ambiente',
+      methodParameterTip: 'Preenchimentos de LLM durante a inferência',
+      methodSettingTip: 'O usuário preenche a configuração da ferramenta',
+      methodParameter: 'Parâmetro',
+      name: 'Nome',
+      description: 'Descrição',
+      method: 'Método',
+      required: 'Necessário',
+      title: 'Entrada de ferramenta',
+      labelPlaceholder: 'Escolha tags(opcional)',
+      descriptionPlaceholder: 'Descrição do significado do parâmetro',
+    },
+    description: 'Descrição',
+    nameForToolCall: 'Nome da chamada da ferramenta',
+    confirmTip: 'Os aplicativos que usam essa ferramenta serão afetados',
+    confirmTitle: 'Confirme para salvar ?',
+    nameForToolCallTip: 'Suporta apenas números, letras e sublinhados.',
+    descriptionPlaceholder: 'Breve descrição da finalidade da ferramenta, por exemplo, obter a temperatura para um local específico.',
+    nameForToolCallPlaceHolder: 'Usado para reconhecimento de máquina, como getCurrentWeather, list_pets',
   },
   test: {
     title: 'Testar',
@@ -114,6 +136,18 @@ const translation = {
   toolRemoved: 'Ferramenta removida',
   notAuthorized: 'Ferramenta não autorizada',
   howToGet: 'Como obter',
+  addToolModal: {
+    category: 'categoria',
+    type: 'tipo',
+    emptyTip: 'Vá para "Fluxo de trabalho - > Publicar como ferramenta"',
+    add: 'adicionar',
+    emptyTitle: 'Nenhuma ferramenta de fluxo de trabalho disponível',
+    added: 'Adicionado',
+    manageInTools: 'Gerenciar em Ferramentas',
+  },
+  openInStudio: 'Abrir no Studio',
+  customToolTip: 'Saiba mais sobre as ferramentas personalizadas da Dify',
+  toolNameUsageTip: 'Nome da chamada da ferramenta para raciocínio e solicitação do agente',
 }
 
 export default translation

+ 29 - 0
web/i18n/pt-BR/workflow.ts

@@ -69,6 +69,14 @@ const translation = {
     manageInTools: 'Gerenciar nas ferramentas',
     workflowAsToolTip: 'É necessária a reconfiguração da ferramenta após a atualização do fluxo de trabalho.',
     viewDetailInTracingPanel: 'Ver detalhes',
+    importSuccess: 'Sucesso da importação',
+    chooseDSL: 'Escolha o arquivo DSL(yml)',
+    importFailure: 'Falha na importação',
+    syncingData: 'Sincronizando dados, apenas alguns segundos.',
+    overwriteAndImport: 'Substituir e importar',
+    importDSLTip: 'O rascunho atual será substituído. Exporte o fluxo de trabalho como backup antes de importar.',
+    backupCurrentDraft: 'Fazer backup do rascunho atual',
+    importDSL: 'Importar DSL',
   },
   env: {
     envPanelTitle: 'Variáveis de Ambiente',
@@ -178,6 +186,7 @@ const translation = {
     'transform': 'Transformar',
     'utilities': 'Utilitários',
     'noResult': 'Nenhum resultado encontrado',
+    'searchTool': 'Ferramenta de pesquisa',
   },
   blocks: {
     'start': 'Iniciar',
@@ -407,6 +416,7 @@ const translation = {
       enterValue: 'Digite o valor',
       addCondition: 'Adicionar condição',
       conditionNotSetup: 'Condição NÃO configurada',
+      selectVariable: 'Selecione a variável...',
     },
     variableAssigner: {
       title: 'Atribuir variáveis',
@@ -502,6 +512,25 @@ const translation = {
       iteration_other: '{{count}} Iterações',
       currentIteration: 'Iteração atual',
     },
+    note: {
+      editor: {
+        small: 'Pequeno',
+        bold: 'Ousado',
+        openLink: 'Abrir',
+        strikethrough: 'Tachado',
+        italic: 'Itálico',
+        invalidUrl: 'URL inválido',
+        placeholder: 'Escreva sua nota...',
+        bulletList: 'Lista de marcadores',
+        link: 'Link',
+        enterUrl: 'Digite o URL...',
+        medium: 'Média',
+        large: 'Grande',
+        unlink: 'Desvincular',
+        showAuthor: 'Autor do programa',
+      },
+      addNote: 'Adicionar nota',
+    },
   },
   tracing: {
     stopBy: 'Parado por {{user}}',

+ 11 - 0
web/i18n/ro-RO/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Pași flux de lucru',
           show: 'Afișați',
           hide: 'Ascundeți',
+          subTitle: 'Detalii despre fluxul de lucru',
+          showDesc: 'Afișarea sau ascunderea detaliilor fluxului de lucru în WebApp',
         },
         chatColorTheme: 'Tema de culoare a chatului',
         chatColorThemeDesc: 'Setați tema de culoare a chatbotului',
@@ -60,6 +62,15 @@ const translation = {
           privacyPolicy: 'Politica de confidențialitate',
           privacyPolicyPlaceholder: 'Introduceți link-ul politicii de confidențialitate',
           privacyPolicyTip: 'Ajută vizitatorii să înțeleagă datele pe care le colectează aplicația, consultați <privacyPolicyLink>Politica de confidențialitate</privacyPolicyLink> a Dify.',
+          customDisclaimerPlaceholder: 'Introduceți textul personalizat de declinare a responsabilității',
+          customDisclaimerTip: 'Textul personalizat de declinare a responsabilității va fi afișat pe partea clientului, oferind informații suplimentare despre aplicație',
+          customDisclaimer: 'Declinarea responsabilității personalizate',
+        },
+        sso: {
+          label: 'Autentificare SSO',
+          title: 'WebApp SSO',
+          description: 'Toți utilizatorii trebuie să se conecteze cu SSO înainte de a utiliza WebApp',
+          tooltip: 'Contactați administratorul pentru a activa WebApp SSO',
         },
       },
       embedded: {

+ 10 - 0
web/i18n/ro-RO/app.ts

@@ -122,7 +122,17 @@ const translation = {
       removeConfirmTitle: 'Eliminați configurația {{key}}?',
       removeConfirmContent: 'Configurația curentă este în uz, eliminarea acesteia va dezactiva funcția de Urmărire.',
     },
+    view: 'Vedere',
   },
+  answerIcon: {
+    descriptionInExplore: 'Dacă să utilizați pictograma WebApp pentru a înlocui 🤖 în Explore',
+    description: 'Dacă se utilizează pictograma WebApp pentru a înlocui 🤖 în aplicația partajată',
+    title: 'Utilizați pictograma WebApp pentru a înlocui 🤖',
+  },
+  importFromDSL: 'Import din DSL',
+  importFromDSLUrl: 'De la URL',
+  importFromDSLUrlPlaceholder: 'Lipiți linkul DSL aici',
+  importFromDSLFile: 'Din fișierul DSL',
 }
 
 export default translation

+ 3 - 0
web/i18n/ro-RO/billing.ts

@@ -60,6 +60,8 @@ const translation = {
       bulkUpload: 'Încărcare în bloc a documentelor',
       agentMode: 'Mod agent',
       workflow: 'Flux de lucru',
+      llmLoadingBalancing: 'Echilibrarea sarcinii LLM',
+      llmLoadingBalancingTooltip: 'Adăugați mai multe chei API la modele, ocolind efectiv limitele de rată API.',
     },
     comingSoon: 'Vine în curând',
     member: 'Membru',
@@ -74,6 +76,7 @@ const translation = {
     },
     ragAPIRequestTooltip: 'Se referă la numărul de apeluri API care invocă doar capacitățile de procesare a bazei de cunoștințe a Dify.',
     receiptInfo: 'Doar proprietarul echipei și administratorul echipei pot să se aboneze și să vizualizeze informațiile de facturare',
+    annotationQuota: 'Cota de adnotare',
   },
   plans: {
     sandbox: {

+ 35 - 0
web/i18n/ro-RO/common.ts

@@ -63,6 +63,7 @@ const translation = {
       hiIN: 'Hindi',
       trTR: 'Turcă',
       faIR: 'Persană',
+      plPL: 'Poloneză',
     },
   },
   unit: {
@@ -200,6 +201,11 @@ const translation = {
     disinvite: 'Anulează invitația',
     deleteMember: 'Șterge membru',
     you: '(Dvs.)',
+    datasetOperatorTip: 'Numai poate gestiona baza de cunoștințe',
+    builder: 'Constructor',
+    datasetOperator: 'Administrator de cunoștințe',
+    setBuilder: 'Setare ca constructor',
+    builderTip: 'Poate construi și edita propriile aplicații',
   },
   integrations: {
     connected: 'Conectat',
@@ -346,6 +352,22 @@ const translation = {
     quotaTip: 'Jetoane gratuite disponibile rămase',
     loadPresets: 'Încarcă presetări',
     parameters: 'PARAMETRI',
+    loadBalancingHeadline: 'Echilibrare',
+    loadBalancingInfo: 'În mod implicit, echilibrarea încărcării utilizează strategia Round-robin. Dacă se declanșează limitarea ratei, se va aplica o perioadă de reactivare de 1 minut.',
+    loadBalancing: 'Echilibrare',
+    apiKeyRateLimit: 'Limita de viteză a fost atinsă, disponibilă după {{secunde}}s',
+    providerManaged: 'Gestionat de furnizor',
+    providerManagedDescription: 'Utilizați setul unic de acreditări furnizat de furnizorul de modele.',
+    defaultConfig: 'Configurație implicită',
+    addConfig: 'Adăugați configurație',
+    apiKey: 'CHEIE API',
+    modelHasBeenDeprecated: 'Acest model a fost depreciat',
+    loadBalancingDescription: 'Reduceți presiunea cu mai multe seturi de acreditări.',
+    apiKeyStatusNormal: 'Starea APIKey este normală',
+    loadBalancingLeastKeyWarning: 'Pentru a activa echilibrarea încărcării trebuie activate cel puțin 2 chei.',
+    editConfig: 'Editați configurația',
+    configLoadBalancing: 'Echilibrarea încărcării de configurare',
+    upgradeForLoadBalancing: 'Actualizați-vă planul pentru a activa Load Balancing.',
   },
   dataSource: {
     add: 'Adăugați o sursă de date',
@@ -369,6 +391,15 @@ const translation = {
         preview: 'PREVIZUALIZARE',
       },
     },
+    website: {
+      inactive: 'Inactiv',
+      description: 'Importați conținut de pe site-uri web folosind crawlerul web.',
+      active: 'Activ',
+      with: 'Cu',
+      title: 'Site-ul web',
+      configuredCrawlers: 'Crawlere configurate',
+    },
+    configure: 'Configura',
   },
   plugin: {
     serpapi: {
@@ -537,6 +568,10 @@ const translation = {
     created: 'Etichetă creată cu succes',
     failed: 'Crearea etichetei a eșuat',
   },
+  errorMsg: {
+    fieldRequired: '{{câmp}} este obligatoriu',
+    urlError: 'URL-ul ar trebui să înceapă cu http:// sau https://',
+  },
 }
 
 export default translation

+ 31 - 0
web/i18n/ro-RO/dataset-creation.ts

@@ -50,6 +50,30 @@ const translation = {
       confirmButton: 'Creează',
       failed: 'Crearea a eșuat',
     },
+    website: {
+      crawlSubPage: 'Accesarea cu crawlere a subpaginilor',
+      limit: 'Limită',
+      selectAll: 'Selectează tot',
+      configure: 'Configura',
+      preview: 'Previzualizare',
+      run: 'Alerga',
+      maxDepth: 'Adâncime maximă',
+      firecrawlDoc: 'Documente Firecrawl',
+      options: 'Opțiuni',
+      exceptionErrorTitle: 'A apărut o excepție în timpul rulării lucrării Firecrawl:',
+      firecrawlTitle: 'Extrageți conținut web cu 🔥Firecrawl',
+      unknownError: 'Eroare necunoscută',
+      scrapTimeInfo: 'Pagini răzuite {{total}} în total în {{timp}}s',
+      firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
+      excludePaths: 'Excluderea căilor',
+      resetAll: 'Resetați toate',
+      extractOnlyMainContent: 'Extrageți doar conținutul principal (fără anteturi, navigări, subsoluri etc.)',
+      fireCrawlNotConfiguredDescription: 'Configurați Firecrawl cu cheia API pentru a-l utiliza.',
+      fireCrawlNotConfigured: 'Firecrawl nu este configurat',
+      includeOnlyPaths: 'Includeți numai căi',
+      totalPageScraped: 'Total pagini răzuite:',
+      maxDepthTooltip: 'Adâncimea maximă de accesat cu crawlere în raport cu adresa URL introdusă. Adâncimea 0 doar răzuiește pagina URL-ului introdus, adâncimea 1 răzuiește url-ul și tot ceea ce după ce a introdusURL + un / și așa mai departe.',
+    },
   },
   stepTwo: {
     segmentation: 'Setări de segmentare',
@@ -107,6 +131,8 @@ const translation = {
     indexSettedTip: 'Pentru a modifica metoda de indexare, vă rugăm să mergeți la ',
     retrivalSettedTip: 'Pentru a modifica metoda de indexare, vă rugăm să mergeți la ',
     datasetSettingLink: 'setările Cunoștinței.',
+    webpageUnit: 'Pagini',
+    websiteSource: 'Site-ul web de preprocesare',
   },
   stepThree: {
     creationTitle: '🎉 Cunoștință creată',
@@ -125,6 +151,11 @@ const translation = {
     modelButtonConfirm: 'Confirmă',
     modelButtonCancel: 'Anulează',
   },
+  firecrawl: {
+    configFirecrawl: 'Configurați 🔥Firecrawl',
+    getApiKeyLinkText: 'Obțineți cheia API de la firecrawl.dev',
+    apiKeyPlaceholder: 'Cheie API de la firecrawl.dev',
+  },
 }
 
 export default translation

+ 3 - 0
web/i18n/ro-RO/dataset-documents.ts

@@ -13,6 +13,8 @@ const translation = {
         status: 'STARE',
         action: 'ACȚIUNE',
       },
+      name: 'Nume',
+      rename: 'Redenumire',
     },
     action: {
       uploadFile: 'Încarcă un fișier nou',
@@ -74,6 +76,7 @@ const translation = {
       error: 'Eroare la import',
       ok: 'OK',
     },
+    addUrl: 'Adăugați adresa URL',
   },
   metadata: {
     title: 'Metadate',

+ 2 - 0
web/i18n/ro-RO/dataset-settings.ts

@@ -27,6 +27,8 @@ const translation = {
       longDescription: ' despre metoda de recuperare, o puteți schimba în orice moment în setările cunoștințelor.',
     },
     save: 'Salvare',
+    permissionsInvitedMembers: 'Membri parțiali ai echipei',
+    me: '(Tu)',
   },
 }
 

+ 1 - 0
web/i18n/ro-RO/login.ts

@@ -54,6 +54,7 @@ const translation = {
     nameEmpty: 'Numele este obligatoriu',
     passwordEmpty: 'Parola este obligatorie',
     passwordInvalid: 'Parola trebuie să conțină litere și cifre, iar lungimea trebuie să fie mai mare de 8 caractere',
+    passwordLengthInValid: 'Parola trebuie să aibă cel puțin 8 caractere',
   },
   license: {
     tip: 'Înainte de a începe Dify Community Edition, citește',

+ 36 - 0
web/i18n/ro-RO/tools.ts

@@ -5,6 +5,7 @@ const translation = {
     all: 'Toate',
     builtIn: 'Incorporat',
     custom: 'Personalizat',
+    workflow: 'Flux de lucru',
   },
   contribute: {
     line1: 'Sunt interesat să ',
@@ -73,6 +74,29 @@ const translation = {
     privacyPolicyPlaceholder: 'Vă rugăm să introduceți politica de confidențialitate',
     deleteToolConfirmTitle: 'Ștergeți această unealtă?',
     deleteToolConfirmContent: ' Ștergerea uneltă este irreversibilă. Utilizatorii nu vor mai putea accesa uneltă dvs.',
+    toolInput: {
+      methodParameter: 'Parametru',
+      description: 'Descriere',
+      methodSetting: 'Setare',
+      methodSettingTip: 'Utilizatorul completează configurația instrumentului',
+      methodParameterTip: 'Completări LLM în timpul inferenței',
+      name: 'Nume',
+      descriptionPlaceholder: 'Descrierea semnificației parametrului',
+      label: 'Tags',
+      required: 'Necesar',
+      method: 'Metodă',
+      title: 'Intrare instrument',
+      labelPlaceholder: 'Alegeți etichetele (opțional)',
+    },
+    descriptionPlaceholder: 'Scurtă descriere a scopului instrumentului, de exemplu, obțineți temperatura pentru o anumită locație.',
+    nameForToolCall: 'Numele apelului instrumentului',
+    description: 'Descriere',
+    confirmTip: 'Aplicațiile care folosesc acest instrument vor fi afectate',
+    nameForToolCallPlaceHolder: 'Utilizat pentru recunoașterea mașinii, cum ar fi getCurrentWeather, list_pets',
+    customDisclaimer: 'Declinarea responsabilității personalizate',
+    confirmTitle: 'Confirmați pentru a salva?',
+    customDisclaimerPlaceholder: 'Vă rugăm să introduceți declinarea responsabilității personalizate',
+    nameForToolCallTip: 'Acceptă doar numere, litere și caractere de subliniere.',
   },
   test: {
     title: 'Testează',
@@ -112,6 +136,18 @@ const translation = {
   toolRemoved: 'Instrument eliminat',
   notAuthorized: 'Instrument neautorizat',
   howToGet: 'Cum să obții',
+  addToolModal: {
+    added: 'adăugat',
+    category: 'categorie',
+    manageInTools: 'Gestionați în Instrumente',
+    add: 'adăuga',
+    type: 'tip',
+    emptyTitle: 'Nu este disponibil niciun instrument de flux de lucru',
+    emptyTip: 'Accesați "Flux de lucru -> Publicați ca instrument"',
+  },
+  openInStudio: 'Deschide în Studio',
+  customToolTip: 'Aflați mai multe despre instrumentele personalizate Dify',
+  toolNameUsageTip: 'Numele de apel al instrumentului pentru raționamentul și solicitarea agentului',
 }
 
 export default translation

+ 29 - 0
web/i18n/ro-RO/workflow.ts

@@ -69,6 +69,14 @@ const translation = {
     manageInTools: 'Gestionează în instrumente',
     workflowAsToolTip: 'Reconfigurarea instrumentului este necesară după actualizarea fluxului de lucru.',
     viewDetailInTracingPanel: 'Vezi detalii',
+    overwriteAndImport: 'Suprascriere și import',
+    chooseDSL: 'Alegeți fișierul DSL(yml)',
+    syncingData: 'Sincronizarea datelor, doar câteva secunde.',
+    importDSL: 'Importați DSL',
+    importFailure: 'Eșecul importului',
+    importSuccess: 'Succesul importului',
+    backupCurrentDraft: 'Backup curent draft',
+    importDSLTip: 'Proiectul curent va fi suprascris. Exportați fluxul de lucru ca backup înainte de import.',
   },
   env: {
     envPanelTitle: 'Variabile de Mediu',
@@ -178,6 +186,7 @@ const translation = {
     'transform': 'Transformare',
     'utilities': 'Utilități',
     'noResult': 'Niciun rezultat găsit',
+    'searchTool': 'Instrument de căutare',
   },
   blocks: {
     'start': 'Începe',
@@ -407,6 +416,7 @@ const translation = {
       enterValue: 'Introduceți valoarea',
       addCondition: 'Adăugați condiție',
       conditionNotSetup: 'Condiția NU este setată',
+      selectVariable: 'Selectați variabila...',
     },
     variableAssigner: {
       title: 'Atribuie variabile',
@@ -502,6 +512,25 @@ const translation = {
       iteration_other: '{{count}} Iterații',
       currentIteration: 'Iterație curentă',
     },
+    note: {
+      editor: {
+        small: 'Mic',
+        bold: 'Îndrăzneț',
+        unlink: 'Deconecta',
+        strikethrough: 'Tăiere',
+        invalidUrl: 'URL nevalidă',
+        medium: 'Medie',
+        openLink: 'Deschide',
+        large: 'Mare',
+        enterUrl: 'Introduceți adresa URL...',
+        italic: 'Cursiv',
+        placeholder: 'Scrie-ți notița...',
+        link: 'Legătură',
+        bulletList: 'Lista de marcatori',
+        showAuthor: 'Afișați autorul',
+      },
+      addNote: 'Adăugați o notă',
+    },
   },
   tracing: {
     stopBy: 'Oprit de {{user}}',

+ 5 - 0
web/i18n/ru-RU/app.ts

@@ -128,6 +128,11 @@ const translation = {
       removeConfirmContent: 'Текущая конфигурация используется, ее удаление отключит функцию трассировки.',
     },
   },
+  answerIcon: {
+    title: 'Использование значка WebApp для замены 🤖',
+    description: 'Следует ли использовать значок WebApp для замены 🤖 в общем приложении',
+    descriptionInExplore: 'Следует ли использовать значок WebApp для замены 🤖 в разделе "Обзор"',
+  },
 }
 
 export default translation

+ 8 - 0
web/i18n/tr-TR/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Workflow Adımları',
           show: 'Göster',
           hide: 'Gizle',
+          showDesc: 'WebApp\'te iş akışı ayrıntılarını gösterme veya gizleme',
+          subTitle: 'İş Akışı Detayları',
         },
         chatColorTheme: 'Sohbet renk teması',
         chatColorThemeDesc: 'Sohbet botunun renk temasını ayarlayın',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Özel ifşa metnini girin',
           customDisclaimerTip: 'Özel ifşa metni istemci tarafında görüntülenecek ve uygulama hakkında ek bilgiler sağlayacak',
         },
+        sso: {
+          title: 'WebApp SSO\'su',
+          tooltip: 'WebApp SSO\'yu etkinleştirmek için yöneticiyle iletişime geçin',
+          label: 'SSO Kimlik Doğrulaması',
+          description: 'Tüm kullanıcıların WebApp\'i kullanmadan önce SSO ile oturum açmaları gerekir',
+        },
       },
       embedded: {
         entry: 'Gömülü',

+ 6 - 0
web/i18n/tr-TR/app.ts

@@ -122,6 +122,12 @@ const translation = {
       removeConfirmTitle: '{{key}} yapılandırmasını kaldır?',
       removeConfirmContent: 'Mevcut yapılandırma kullanımda, kaldırılması İzleme özelliğini kapatacaktır.',
     },
+    view: 'Görünüm',
+  },
+  answerIcon: {
+    descriptionInExplore: 'Keşfet\'te değiştirilecek 🤖 WebApp simgesinin kullanılıp kullanılmayacağı',
+    title: 'Değiştirmek 🤖 için WebApp simgesini kullanın',
+    description: 'Paylaşılan uygulamada değiştirmek 🤖 için WebApp simgesinin kullanılıp kullanılmayacağı',
   },
 }
 

+ 1 - 0
web/i18n/tr-TR/dataset.ts

@@ -53,6 +53,7 @@ const translation = {
     semantic_search: 'VEKTÖR',
     full_text_search: 'TAM METİN',
     hybrid_search: 'HİBRİT',
+    invertedIndex: 'TERS',
   },
   mixtureHighQualityAndEconomicTip: 'Yüksek kaliteli ve ekonomik bilgi tabanlarının karışımı için Yeniden Sıralama modeli gereklidir.',
   inconsistentEmbeddingModelTip: 'Seçilen bilgi tabanlarının Yerleştirme modelleri tutarsızsa Yeniden Sıralama modeli gereklidir.',

+ 2 - 1
web/i18n/tr-TR/workflow.ts

@@ -186,6 +186,7 @@ const translation = {
     'transform': 'Dönüştür',
     'utilities': 'Yardımcı Araçlar',
     'noResult': 'Eşleşen bulunamadı',
+    'searchTool': 'Arama aracı',
   },
   blocks: {
     'start': 'Başlat',
@@ -365,6 +366,7 @@ const translation = {
         'custom': 'Özel',
         'api-key-title': 'API Anahtarı',
         'header': 'Başlık',
+        'auth-type': 'Kimlik Doğrulama Türü',
       },
       insertVarPlaceholder: 'değişkeni eklemek için \'/\' yazın',
       timeout: {
@@ -417,7 +419,6 @@ const translation = {
       conditionNotSetup: 'Koşul AYARLANMADI',
       selectVariable: 'Değişken seçin...',
     },
-
     variableAssigner: {
       title: 'Değişken ata',
       outputType: 'Çıktı Türü',

+ 17 - 0
web/i18n/uk-UA/app-api.ts

@@ -61,6 +61,23 @@ const translation = {
     pathParams: 'Параметри шляху',
     query: 'Запит',
   },
+  completionMode: {
+    messageIDTip: 'Ідентифікатор повідомлення',
+    streaming: 'Потокове передавання повертається. Реалізація повернення потокового мовлення на основі SSE (Server-Sent Events).',
+    blocking: 'Тип блокування, очікування завершення виконання та повернення результатів. (Запити можуть бути перервані, якщо процес тривалий)',
+    title: 'API програми для завершення',
+    ratingTip: 'Подобається чи не подобається, null – це скасувати',
+    createCompletionApiTip: 'Створіть повідомлення про завершення, щоб підтримувати режим запитань і відповідей.',
+    parametersApi: 'Отримання інформації про параметри програми',
+    queryTips: 'Текстовий контент, що вводиться користувачем.',
+    createCompletionApi: 'Створити повідомлення про завершення',
+    messageFeedbackApi: 'Відгук у повідомленні (подобається)',
+    messageFeedbackApiTip: 'Оцінюйте отримані повідомлення від імені кінцевих користувачів з лайками або дизлайками. Ці дані відображаються на сторінці «Журнали та анотації» та використовуються для доопрацювання майбутньої моделі.',
+    info: 'Для створення високоякісного тексту, такого як статті, резюме та переклади, використовуйте API повідомлень про завершення з введенням користувачем. Генерація тексту залежить від параметрів моделі та шаблонів підказок, встановлених у Dify Prompt Engineering.',
+    inputsTips: '(Необов\'язково.) Надайте поля введення користувача у вигляді пар ключ-значення, що відповідають змінним у Prompt Eng. Key — це ім\'я змінної, Value — значення параметра. Якщо вибрано тип поля Вибір, надіслане значення має бути одним із попередньо встановлених варіантів.',
+    parametersApiTip: 'Отримання налаштованих вхідних параметрів, включаючи імена змінних, імена полів, типи та значення за замовчуванням. Зазвичай використовується для відображення цих полів у формі або заповнення значень за замовчуванням після завантаження клієнта.',
+  },
+  loading: 'Завантаження',
 }
 
 export default translation

+ 8 - 0
web/i18n/uk-UA/app-overview.ts

@@ -48,6 +48,8 @@ const translation = {
           title: 'Кроки робочого процесу',
           show: 'Показати',
           hide: 'Приховати',
+          subTitle: 'Деталі робочого процесу',
+          showDesc: 'Відображення або приховування відомостей про робочий процес у веб-програмі',
         },
         chatColorTheme: 'Тема кольору чату',
         chatColorThemeDesc: 'Встановіть тему кольору чат-бота',
@@ -64,6 +66,12 @@ const translation = {
           customDisclaimerPlaceholder: 'Введіть відмову від відповідальності',
           customDisclaimerTip: 'Відображається на клієнтському боці, щоб визначити відповідальність за використання додатка',
         },
+        sso: {
+          title: 'Єдиний вхід для WebApp',
+          description: 'Усі користувачі повинні увійти в систему за допомогою єдиного входу перед використанням WebApp',
+          tooltip: 'Зверніться до адміністратора, щоб увімкнути єдиний вхід WebApp',
+          label: 'Автентифікація за допомогою єдиного входу',
+        },
       },
       embedded: {
         entry: 'Вбудоване',

Неке датотеке нису приказане због велике количине промена