feat(i18n): translate Create Knowledge Base modal and flow dropdown menu

This commit is contained in:
RamGopalSrikar
2026-04-13 15:21:36 -04:00
parent ce5a6b4092
commit bd070cab63
12 changed files with 374 additions and 59 deletions

View File

@ -160,6 +160,11 @@
"flow.brokenEdgesWarning": "Einige Verbindungen wurden entfernt, da sie ungültig waren:", "flow.brokenEdgesWarning": "Einige Verbindungen wurden entfernt, da sie ungültig waren:",
"flow.buildStatus": "Erstellen, um den Status zu überprüfen.", "flow.buildStatus": "Erstellen, um den Status zu überprüfen.",
"flow.buildSuccess": "Erfolgreich erstellt ✨", "flow.buildSuccess": "Erfolgreich erstellt ✨",
"flow.duplicatedSuccess": "{{type}} Erfolgreich dupliziert",
"flow.menu.delete": "Löschen",
"flow.menu.duplicate": "Duplikat",
"flow.menu.editDetails": "Details bearbeiten",
"flow.menu.export": "Exportieren",
"flow.missingFields": "Bitte füllen Sie alle Pflichtfelder aus.", "flow.missingFields": "Bitte füllen Sie alle Pflichtfelder aus.",
"flow.noCompatibleComponents": "Es wurden keine kompatiblen Komponenten gefunden.", "flow.noCompatibleComponents": "Es wurden keine kompatiblen Komponenten gefunden.",
"flow.runTimestampPrefix": "Letzter Lauf: ", "flow.runTimestampPrefix": "Letzter Lauf: ",
@ -210,30 +215,68 @@
"input.titleErrorUpdatingComponent": "Fehler beim Aktualisieren der Komponente", "input.titleErrorUpdatingComponent": "Fehler beim Aktualisieren der Komponente",
"input.toolsetPlaceholder": "Als Werkzeug verwendet", "input.toolsetPlaceholder": "Als Werkzeug verwendet",
"knowledge.addKnowledge": "Wissen hinzufügen", "knowledge.addKnowledge": "Wissen hinzufügen",
"knowledge.addSources": "Quellen hinzufügen",
"knowledge.addSourcesDescription": "Dateien hochladen und Chunking-Einstellungen konfigurieren",
"knowledge.addSourcesTitle": "Quellen hinzufügen",
"knowledge.baseCreated": "Wissensdatenbank \"{{name}}\" erstellt", "knowledge.baseCreated": "Wissensdatenbank \"{{name}}\" erstellt",
"knowledge.chunkOverlapLabel": "Chunk-Überlappung",
"knowledge.chunkOverlapTooltip": "Anzahl der Zeichen, die sich zwischen den Blöcken überlappen sollen.",
"knowledge.chunkSizeLabel": "Chunkgröße",
"knowledge.chunkSizeTooltip": "Die maximale Länge jedes Chunks. Der Text wird zunächst anhand des Trennzeichens aufgeteilt, anschließend werden die Teile bis zu dieser Größe zusammengefügt.",
"knowledge.chunkingSettings": "Einstellungen für die Chunking-Funktion",
"knowledge.configureSources": "Quellen konfigurieren",
"knowledge.configureSourcesMaxSize": "(maximal 1 GB Upload)",
"knowledge.createDescription": "Geben Sie Ihrer Wissensdatenbank einen Namen, laden Sie Quellen hoch und wählen Sie ein Einbettungsmodell aus",
"knowledge.createTitle": "Wissensdatenbank erstellen",
"knowledge.delete": "Löschen", "knowledge.delete": "Löschen",
"knowledge.deleteSelected": "Löschen ( {{count}} )", "knowledge.deleteSelected": "Löschen ( {{count}} )",
"knowledge.deletedCount": "{{count}} Wissensdatenbank(en) gelöscht", "knowledge.deletedCount": "{{count}} Wissensdatenbank(en) gelöscht",
"knowledge.embeddingModelLabel": "Einbettungsmodell",
"knowledge.embeddingModelPlaceholder": "Einbettungsmodell auswählen",
"knowledge.embeddingModelUnknown": "Unbekannt",
"knowledge.emptyDescription": "Schaffen Sie leistungsstarke KI-Anwendungen, indem Sie Ihre Dokumente mit intelligenten Arbeitsabläufen verknüpfen.", "knowledge.emptyDescription": "Schaffen Sie leistungsstarke KI-Anwendungen, indem Sie Ihre Dokumente mit intelligenten Arbeitsabläufen verknüpfen.",
"knowledge.errorChunkPreview": "Die Vorschau des Chunks konnte nicht generiert werden",
"knowledge.errorCreateFailed": "Die Erstellung der Wissensdatenbank ist fehlgeschlagen",
"knowledge.errorIngestion": "Die Erfassung für \"{{name}}\" konnte nicht gestartet werden",
"knowledge.failedToDelete": "Das Löschen der Wissensdatenbanken ist fehlgeschlagen", "knowledge.failedToDelete": "Das Löschen der Wissensdatenbanken ist fehlgeschlagen",
"knowledge.failedToLoad": "Das Laden der Wissensdatenbanken ist fehlgeschlagen", "knowledge.failedToLoad": "Das Laden der Wissensdatenbanken ist fehlgeschlagen",
"knowledge.failedToLoadChunks": "Chunks konnten nicht geladen werden", "knowledge.failedToLoadChunks": "Chunks konnten nicht geladen werden",
"knowledge.helpConfigureSources": "Quellen konfigurieren",
"knowledge.helpHideConfiguration": "Konfiguration ausblenden",
"knowledge.ingestionComplete": "\"{{name}}\" Import abgeschlossen — {{chunks}} Blöcke bereit", "knowledge.ingestionComplete": "\"{{name}}\" Import abgeschlossen — {{chunks}} Blöcke bereit",
"knowledge.ingestionFailed": "Die Einbindung von \"{{name}}\" ist fehlgeschlagen", "knowledge.ingestionFailed": "Die Einbindung von \"{{name}}\" ist fehlgeschlagen",
"knowledge.loadingChunks": "Chunks werden geladen...", "knowledge.loadingChunks": "Chunks werden geladen...",
"knowledge.loadingKnowledgeBases": "Wissensdatenbanken werden geladen...", "knowledge.loadingKnowledgeBases": "Wissensdatenbanken werden geladen...",
"knowledge.nameLabel": "Ihren Namen",
"knowledge.namePlaceholder": "Geben Sie einen Namen für diese Wissensdatenbank ein",
"knowledge.noChunksFound": "Es wurden keine Chunks gefunden", "knowledge.noChunksFound": "Es wurden keine Chunks gefunden",
"knowledge.noKnowledgeBases": "Keine Wissensdatenbanken", "knowledge.noKnowledgeBases": "Keine Wissensdatenbanken",
"knowledge.ofTotal": "von {{total}}", "knowledge.ofTotal": "von {{total}}",
"knowledge.page": "Seite", "knowledge.page": "Seite",
"knowledge.pageTitle": "Wissen", "knowledge.pageTitle": "Wissen",
"knowledge.perPage": "Pro Seite:", "knowledge.perPage": "Pro Seite:",
"knowledge.reviewDescription": "Zeigen Sie in der Vorschau an, wie Ihre Dateien aufgeteilt werden, und bestätigen Sie Ihre Einstellungen",
"knowledge.reviewTitle": "Überprüfen & Erstellen",
"knowledge.searchChunks": "Chunks suchen...", "knowledge.searchChunks": "Chunks suchen...",
"knowledge.searchPlaceholder": "Wissensdatenbanken durchsuchen...", "knowledge.searchPlaceholder": "Wissensdatenbanken durchsuchen...",
"knowledge.selected": "{{count}} ausgewählt", "knowledge.selected": "{{count}} ausgewählt",
"knowledge.separatorLabel": "Trennzeichen",
"knowledge.separatorTooltip": "Das Zeichen, an dem die Trennung erfolgen soll. Verwende \\n für einen Zeilenumbruch. Beispiele: \\n\\n für Absätze, \\n für Zeilen,. für Sätze. Lassen Sie das Feld leer, wenn kein Trennzeichen gewünscht ist.",
"knowledge.showing": "Anzeige von {{start}} {{end}} von {{total}} -Blöcken", "knowledge.showing": "Anzeige von {{start}} {{end}} von {{total}} -Blöcken",
"knowledge.sourcesLabel": "Quellen",
"knowledge.submitAddSources": "Quellen hinzufügen",
"knowledge.submitCreate": "Erstellen",
"knowledge.successSourcesAdded": "Quellen wurden zu „ \"{{name}}\" “ hinzugefügt",
"knowledge.thisActionCannotBeUndone": "Diese Aktion kann nicht rückgängig gemacht werden", "knowledge.thisActionCannotBeUndone": "Diese Aktion kann nicht rückgängig gemacht werden",
"knowledge.unknownError": "Es ist ein unbekannter Fehler aufgetreten", "knowledge.unknownError": "Es ist ein unbekannter Fehler aufgetreten",
"knowledge.uploadFiles": "Dateien hochladen",
"knowledge.uploadFolder": "Ordner hochladen",
"knowledge.validationEmbeddingRequired": "Ein Einbettungsmodell ist erforderlich",
"knowledge.validationFileSizeLimit": "Die Gesamtdateigröße überschreitet das Limit von 1 GB",
"knowledge.validationNameDuplicate": "Eine Wissensdatenbank mit diesem Namen existiert bereits",
"knowledge.validationNameFormat": "Der Name darf nur [ a-zA-Z0-9._-] enthalten und muss mit [ a-zA-Z0-9 ] beginnen und enden",
"knowledge.validationNameLength": "Der Name muss zwischen 3 und 512 Zeichen lang sein",
"knowledge.validationNameRequired": "Name ist erforderlich",
"mainPage.delete": "Löschen", "mainPage.delete": "Löschen",
"mainPage.flowsDeletedSuccess": "Flows wurden erfolgreich gelöscht", "mainPage.flowsDeletedSuccess": "Flows wurden erfolgreich gelöscht",
"mainPage.flowsDownloadedSuccess": "Die Flows wurden erfolgreich heruntergeladen", "mainPage.flowsDownloadedSuccess": "Die Flows wurden erfolgreich heruntergeladen",
@ -485,4 +528,4 @@
"templatesModal.title": "Vorlagen", "templatesModal.title": "Vorlagen",
"templatesModal.tryDifferentQuery": "und versuchen Sie es mit einer anderen Abfrage.", "templatesModal.tryDifferentQuery": "und versuchen Sie es mit einer anderen Abfrage.",
"templatesModal.useCases": "Anwendungsfälle" "templatesModal.useCases": "Anwendungsfälle"
} }

View File

@ -47,6 +47,11 @@
"alerts.criticalDataWarning": "Warning: Critical data, JSON file may include API keys.", "alerts.criticalDataWarning": "Warning: Critical data, JSON file may include API keys.",
"alerts.apiKeyCopied": "API Key copied!", "alerts.apiKeyCopied": "API Key copied!",
"alerts.noTemplateVariables": "Your template does not have any variables.", "alerts.noTemplateVariables": "Your template does not have any variables.",
"flow.menu.editDetails": "Edit details",
"flow.menu.export": "Export",
"flow.menu.duplicate": "Duplicate",
"flow.menu.delete": "Delete",
"flow.duplicatedSuccess": "{{type}} duplicated successfully",
"dialog.export": "Export flow as JSON file.", "dialog.export": "Export flow as JSON file.",
"dialog.settings": "Customize your flow details and settings.", "dialog.settings": "Customize your flow details and settings.",
"dialog.logs": "Explore detailed logs of events and transactions between components.", "dialog.logs": "Explore detailed logs of events and transactions between components.",
@ -451,6 +456,44 @@
"knowledge.showing": "Showing {{start}}-{{end}} of {{total}} chunks", "knowledge.showing": "Showing {{start}}-{{end}} of {{total}} chunks",
"knowledge.page": "Page", "knowledge.page": "Page",
"knowledge.ofTotal": "of {{total}}", "knowledge.ofTotal": "of {{total}}",
"knowledge.createTitle": "Create Knowledge Base",
"knowledge.addSourcesTitle": "Add Sources",
"knowledge.reviewTitle": "Review & Build",
"knowledge.createDescription": "Name your knowledge base, upload sources, and select an embedding model",
"knowledge.addSourcesDescription": "Upload files and configure chunking settings",
"knowledge.reviewDescription": "Preview how your files will be chunked and confirm your settings",
"knowledge.nameLabel": "Name",
"knowledge.namePlaceholder": "Enter a name for this knowledge base",
"knowledge.embeddingModelLabel": "Embedding Model",
"knowledge.embeddingModelPlaceholder": "Select embedding model",
"knowledge.embeddingModelUnknown": "Unknown",
"knowledge.configureSources": "Configure Sources",
"knowledge.configureSourcesMaxSize": "(1 GB max upload)",
"knowledge.sourcesLabel": "Sources",
"knowledge.addSources": "Add Sources",
"knowledge.uploadFiles": "Upload Files",
"knowledge.uploadFolder": "Upload Folder",
"knowledge.chunkingSettings": "Chunking Settings",
"knowledge.chunkSizeLabel": "Chunk Size",
"knowledge.chunkSizeTooltip": "The maximum length of each chunk. Text is first split by separator, then chunks are merged up to this size.",
"knowledge.chunkOverlapLabel": "Chunk Overlap",
"knowledge.chunkOverlapTooltip": "Number of characters to overlap between chunks.",
"knowledge.separatorLabel": "Separator",
"knowledge.separatorTooltip": "The character to split on. Use \\n for newline. Examples: \\n\\n for paragraphs, \\n for lines, . for sentences. Leave blank for no separator.",
"knowledge.submitCreate": "Create",
"knowledge.submitAddSources": "Add Sources",
"knowledge.helpConfigureSources": "Configure Sources",
"knowledge.helpHideConfiguration": "Hide Configuration",
"knowledge.validationNameRequired": "Name is required",
"knowledge.validationNameLength": "Name must be between 3 and 512 characters",
"knowledge.validationNameFormat": "Name must only contain [a-zA-Z0-9._-] and start/end with [a-zA-Z0-9]",
"knowledge.validationNameDuplicate": "A knowledge base with this name already exists",
"knowledge.validationEmbeddingRequired": "Embedding model is required",
"knowledge.validationFileSizeLimit": "Total file size exceeds the 1 GB limit",
"knowledge.errorChunkPreview": "Failed to generate chunk preview",
"knowledge.errorIngestion": "Failed to start ingestion for \"{{name}}\"",
"knowledge.errorCreateFailed": "Failed to create knowledge base",
"knowledge.successSourcesAdded": "Sources added to \"{{name}}\"",
"files.myFiles": "My Files", "files.myFiles": "My Files",
"files.pageTitle": "Files", "files.pageTitle": "Files",
"files.noFiles": "No files", "files.noFiles": "No files",

View File

@ -160,6 +160,11 @@
"flow.brokenEdgesWarning": "Se han eliminado algunas conexiones porque no eran válidas:", "flow.brokenEdgesWarning": "Se han eliminado algunas conexiones porque no eran válidas:",
"flow.buildStatus": "Compilar para comprobar el estado.", "flow.buildStatus": "Compilar para comprobar el estado.",
"flow.buildSuccess": "Creado con éxito ✨", "flow.buildSuccess": "Creado con éxito ✨",
"flow.duplicatedSuccess": "{{type}} se ha duplicado correctamente",
"flow.menu.delete": "Suprimir",
"flow.menu.duplicate": "Duplicado",
"flow.menu.editDetails": "Editar detalles",
"flow.menu.export": "Exportar",
"flow.missingFields": "Rellene todos los campos obligatorios.", "flow.missingFields": "Rellene todos los campos obligatorios.",
"flow.noCompatibleComponents": "No se han encontrado componentes compatibles.", "flow.noCompatibleComponents": "No se han encontrado componentes compatibles.",
"flow.runTimestampPrefix": "Última carrera: ", "flow.runTimestampPrefix": "Última carrera: ",
@ -210,30 +215,68 @@
"input.titleErrorUpdatingComponent": "Se ha producido un error al actualizar el componente", "input.titleErrorUpdatingComponent": "Se ha producido un error al actualizar el componente",
"input.toolsetPlaceholder": "Se utiliza como herramienta", "input.toolsetPlaceholder": "Se utiliza como herramienta",
"knowledge.addKnowledge": "Añadir conocimiento", "knowledge.addKnowledge": "Añadir conocimiento",
"knowledge.addSources": "Añadir orígenes",
"knowledge.addSourcesDescription": "Sube archivos y configura los ajustes de fragmentación",
"knowledge.addSourcesTitle": "Añadir orígenes",
"knowledge.baseCreated": "Se ha creado la base de conocimientos \"{{name}}\"", "knowledge.baseCreated": "Se ha creado la base de conocimientos \"{{name}}\"",
"knowledge.chunkOverlapLabel": "Solapamiento de fragmentos",
"knowledge.chunkOverlapTooltip": "Número de caracteres que deben solaparse entre fragmentos.",
"knowledge.chunkSizeLabel": "Tamaño de fragmento",
"knowledge.chunkSizeTooltip": "La longitud máxima de cada fragmento. El texto se divide primero por el separador y, a continuación, los fragmentos se fusionan hasta alcanzar este tamaño.",
"knowledge.chunkingSettings": "Configuración de fragmentación",
"knowledge.configureSources": "Configurar fuentes",
"knowledge.configureSourcesMaxSize": "(1 GB como máximo de subida)",
"knowledge.createDescription": "Asigna un nombre a tu base de conocimientos, sube las fuentes y selecciona un modelo de integración",
"knowledge.createTitle": "Crear una base de conocimientos",
"knowledge.delete": "Suprimir", "knowledge.delete": "Suprimir",
"knowledge.deleteSelected": "Eliminar ( {{count}} )", "knowledge.deleteSelected": "Eliminar ( {{count}} )",
"knowledge.deletedCount": "{{count}} Se han eliminado las bases de conocimientos", "knowledge.deletedCount": "{{count}} Se han eliminado las bases de conocimientos",
"knowledge.embeddingModelLabel": "Modelo de inclusión",
"knowledge.embeddingModelPlaceholder": "Seleccionar modelo de incrustación",
"knowledge.embeddingModelUnknown": "Desconocido",
"knowledge.emptyDescription": "Crea potentes experiencias de IA conectando tus documentos a flujos de trabajo inteligentes.", "knowledge.emptyDescription": "Crea potentes experiencias de IA conectando tus documentos a flujos de trabajo inteligentes.",
"knowledge.errorChunkPreview": "No se ha podido generar la vista previa del fragmento",
"knowledge.errorCreateFailed": "No se ha podido crear la base de conocimientos",
"knowledge.errorIngestion": "No se ha podido iniciar la ingesta para \"{{name}}\"",
"knowledge.failedToDelete": "No se han podido eliminar las bases de conocimientos", "knowledge.failedToDelete": "No se han podido eliminar las bases de conocimientos",
"knowledge.failedToLoad": "No se han podido cargar las bases de conocimientos", "knowledge.failedToLoad": "No se han podido cargar las bases de conocimientos",
"knowledge.failedToLoadChunks": "No se han podido cargar los fragmentos", "knowledge.failedToLoadChunks": "No se han podido cargar los fragmentos",
"knowledge.helpConfigureSources": "Configurar fuentes",
"knowledge.helpHideConfiguration": "Ocultar configuración",
"knowledge.ingestionComplete": "\"{{name}}\" Ingestión completada — {{chunks}} fragmentos listos", "knowledge.ingestionComplete": "\"{{name}}\" Ingestión completada — {{chunks}} fragmentos listos",
"knowledge.ingestionFailed": "Error al importar \"{{name}}\"", "knowledge.ingestionFailed": "Error al importar \"{{name}}\"",
"knowledge.loadingChunks": "Cargando fragmentos...", "knowledge.loadingChunks": "Cargando fragmentos...",
"knowledge.loadingKnowledgeBases": "Cargando bases de datos...", "knowledge.loadingKnowledgeBases": "Cargando bases de datos...",
"knowledge.nameLabel": "Nombre",
"knowledge.namePlaceholder": "Introduce un nombre para esta base de conocimientos",
"knowledge.noChunksFound": "No se han encontrado fragmentos", "knowledge.noChunksFound": "No se han encontrado fragmentos",
"knowledge.noKnowledgeBases": "No hay bases de conocimientos", "knowledge.noKnowledgeBases": "No hay bases de conocimientos",
"knowledge.ofTotal": "de {{total}}", "knowledge.ofTotal": "de {{total}}",
"knowledge.page": "Página", "knowledge.page": "Página",
"knowledge.pageTitle": "Conocimientos", "knowledge.pageTitle": "Conocimientos",
"knowledge.perPage": "Por página:", "knowledge.perPage": "Por página:",
"knowledge.reviewDescription": "Previsualiza cómo se dividirán tus archivos y confirma la configuración",
"knowledge.reviewTitle": "Revisión y montaje",
"knowledge.searchChunks": "Buscar fragmentos...", "knowledge.searchChunks": "Buscar fragmentos...",
"knowledge.searchPlaceholder": "Buscar en las bases de conocimientos...", "knowledge.searchPlaceholder": "Buscar en las bases de conocimientos...",
"knowledge.selected": "{{count}} seleccionados", "knowledge.selected": "{{count}} seleccionados",
"knowledge.separatorLabel": "Separador",
"knowledge.separatorTooltip": "El carácter en el que se va a dividir. Utiliza \\n para crear un salto de línea. Ejemplos: \\n\\n para párrafos, \\n para líneas,. para las frases. Déjelo en blanco si no desea ningún separador.",
"knowledge.showing": "Mostrando {{start}} - {{end}} de {{total}} fragmentos", "knowledge.showing": "Mostrando {{start}} - {{end}} de {{total}} fragmentos",
"knowledge.sourcesLabel": "Orígenes",
"knowledge.submitAddSources": "Añadir orígenes",
"knowledge.submitCreate": "Crear",
"knowledge.successSourcesAdded": "Fuentes añadidas a \"{{name}}\"",
"knowledge.thisActionCannotBeUndone": "Esta acción no se puede deshacer", "knowledge.thisActionCannotBeUndone": "Esta acción no se puede deshacer",
"knowledge.unknownError": "Se ha producido un error desconocido", "knowledge.unknownError": "Se ha producido un error desconocido",
"knowledge.uploadFiles": "Cargar archivos",
"knowledge.uploadFolder": "Carpeta de carga",
"knowledge.validationEmbeddingRequired": "Se requiere un modelo de incrustación",
"knowledge.validationFileSizeLimit": "El tamaño total del archivo supera el límite de 1 GB",
"knowledge.validationNameDuplicate": "Ya existe una base de conocimientos con ese nombre",
"knowledge.validationNameFormat": "El nombre solo debe contener [ a-zA-Z0-9._-] y comenzar y terminar con [ a-zA-Z0-9 ]",
"knowledge.validationNameLength": "El nombre debe tener entre 3 y 512 caracteres",
"knowledge.validationNameRequired": "El nombre es obligatorio",
"mainPage.delete": "Suprimir", "mainPage.delete": "Suprimir",
"mainPage.flowsDeletedSuccess": "Los flujos se han eliminado correctamente", "mainPage.flowsDeletedSuccess": "Los flujos se han eliminado correctamente",
"mainPage.flowsDownloadedSuccess": "Los flujos se han descargado correctamente", "mainPage.flowsDownloadedSuccess": "Los flujos se han descargado correctamente",
@ -485,4 +528,4 @@
"templatesModal.title": "Plantillas", "templatesModal.title": "Plantillas",
"templatesModal.tryDifferentQuery": "y prueba con otra consulta.", "templatesModal.tryDifferentQuery": "y prueba con otra consulta.",
"templatesModal.useCases": "Casos de uso" "templatesModal.useCases": "Casos de uso"
} }

View File

@ -160,6 +160,11 @@
"flow.brokenEdgesWarning": "Certaines connexions ont été supprimées car elles n'étaient pas valides :", "flow.brokenEdgesWarning": "Certaines connexions ont été supprimées car elles n'étaient pas valides :",
"flow.buildStatus": "Compiler pour vérifier l'état.", "flow.buildStatus": "Compiler pour vérifier l'état.",
"flow.buildSuccess": "Réussite ✨", "flow.buildSuccess": "Réussite ✨",
"flow.duplicatedSuccess": "{{type}} copie effectuée avec succès",
"flow.menu.delete": "Supprimer",
"flow.menu.duplicate": "Dupliquer",
"flow.menu.editDetails": "Editer les détails",
"flow.menu.export": "Exporter",
"flow.missingFields": "Veuillez remplir tous les champs obligatoires.", "flow.missingFields": "Veuillez remplir tous les champs obligatoires.",
"flow.noCompatibleComponents": "Aucun composant compatible n'a été trouvé.", "flow.noCompatibleComponents": "Aucun composant compatible n'a été trouvé.",
"flow.runTimestampPrefix": "Dernière course : ", "flow.runTimestampPrefix": "Dernière course : ",
@ -210,30 +215,68 @@
"input.titleErrorUpdatingComponent": "Erreur lors de la mise à jour du composant", "input.titleErrorUpdatingComponent": "Erreur lors de la mise à jour du composant",
"input.toolsetPlaceholder": "Utilisé comme outil", "input.toolsetPlaceholder": "Utilisé comme outil",
"knowledge.addKnowledge": "Ajouter des connaissances", "knowledge.addKnowledge": "Ajouter des connaissances",
"knowledge.addSources": "Ajouter des sources",
"knowledge.addSourcesDescription": "Télécharger des fichiers et configurer les paramètres de fractionnement",
"knowledge.addSourcesTitle": "Ajouter des sources",
"knowledge.baseCreated": "Création de la base de connaissances \"{{name}}\"", "knowledge.baseCreated": "Création de la base de connaissances \"{{name}}\"",
"knowledge.chunkOverlapLabel": "Chevauchement de blocs",
"knowledge.chunkOverlapTooltip": "Nombre de caractères à faire chevaucher entre les segments.",
"knowledge.chunkSizeLabel": "Taille de bloc",
"knowledge.chunkSizeTooltip": "La longueur maximale de chaque bloc. Le texte est d'abord divisé à l'aide d'un séparateur, puis les segments sont regroupés jusqu'à atteindre cette taille.",
"knowledge.chunkingSettings": "Paramètres de segmentation",
"knowledge.configureSources": "Configurer les sources",
"knowledge.configureSourcesMaxSize": "(1 Go max. pour le téléchargement)",
"knowledge.createDescription": "Donnez un nom à votre base de connaissances, téléchargez les sources et sélectionnez un modèle d'intégration",
"knowledge.createTitle": "Créer une base de connaissances",
"knowledge.delete": "Supprimer", "knowledge.delete": "Supprimer",
"knowledge.deleteSelected": "Supprimer ( {{count}} )", "knowledge.deleteSelected": "Supprimer ( {{count}} )",
"knowledge.deletedCount": "{{count}} base(s) de connaissances supprimée(s)", "knowledge.deletedCount": "{{count}} base(s) de connaissances supprimée(s)",
"knowledge.embeddingModelLabel": "Modèle d'intégration",
"knowledge.embeddingModelPlaceholder": "Sélectionner un modèle d'intégration",
"knowledge.embeddingModelUnknown": "Inconnu",
"knowledge.emptyDescription": "Créez des expériences d'IA performantes en intégrant vos documents à des flux de travail intelligents.", "knowledge.emptyDescription": "Créez des expériences d'IA performantes en intégrant vos documents à des flux de travail intelligents.",
"knowledge.errorChunkPreview": "Échec de la génération de l'aperçu du bloc",
"knowledge.errorCreateFailed": "Échec de la création de la base de connaissances",
"knowledge.errorIngestion": "Échec du démarrage de l'ingestion pour \"{{name}}\"",
"knowledge.failedToDelete": "Échec de la suppression des bases de connaissances", "knowledge.failedToDelete": "Échec de la suppression des bases de connaissances",
"knowledge.failedToLoad": "Échec du chargement des bases de connaissances", "knowledge.failedToLoad": "Échec du chargement des bases de connaissances",
"knowledge.failedToLoadChunks": "Échec du chargement des blocs", "knowledge.failedToLoadChunks": "Échec du chargement des blocs",
"knowledge.helpConfigureSources": "Configurer les sources",
"knowledge.helpHideConfiguration": "Masquer la configuration",
"knowledge.ingestionComplete": "\"{{name}}\" Importation terminée — {{chunks}} morceaux prêts", "knowledge.ingestionComplete": "\"{{name}}\" Importation terminée — {{chunks}} morceaux prêts",
"knowledge.ingestionFailed": "Échec de l'importation pour \"{{name}}\"", "knowledge.ingestionFailed": "Échec de l'importation pour \"{{name}}\"",
"knowledge.loadingChunks": "Chargement des blocs...", "knowledge.loadingChunks": "Chargement des blocs...",
"knowledge.loadingKnowledgeBases": "Chargement des bases de connaissances...", "knowledge.loadingKnowledgeBases": "Chargement des bases de connaissances...",
"knowledge.nameLabel": "Nom",
"knowledge.namePlaceholder": "Entrez un nom pour cette base de connaissances",
"knowledge.noChunksFound": "Aucun bloc trouvé", "knowledge.noChunksFound": "Aucun bloc trouvé",
"knowledge.noKnowledgeBases": "Pas de base de connaissances", "knowledge.noKnowledgeBases": "Pas de base de connaissances",
"knowledge.ofTotal": "d' {{total}}", "knowledge.ofTotal": "d' {{total}}",
"knowledge.page": "Page", "knowledge.page": "Page",
"knowledge.pageTitle": "Connaissances", "knowledge.pageTitle": "Connaissances",
"knowledge.perPage": "Par page :", "knowledge.perPage": "Par page :",
"knowledge.reviewDescription": "Prévisualisez la manière dont vos fichiers seront fractionnés et validez vos paramètres",
"knowledge.reviewTitle": "Analyse et mise en place",
"knowledge.searchChunks": "Rechercher des segments...", "knowledge.searchChunks": "Rechercher des segments...",
"knowledge.searchPlaceholder": "Rechercher dans les bases de connaissances...", "knowledge.searchPlaceholder": "Rechercher dans les bases de connaissances...",
"knowledge.selected": "{{count}} sélectionné(s)", "knowledge.selected": "{{count}} sélectionné(s)",
"knowledge.separatorLabel": "Séparateur",
"knowledge.separatorTooltip": "Le caractère de séparation. Utilisez \\n pour créer un saut de ligne. Exemples : \\n\\n pour les paragraphes, \\n pour les lignes,. pour les phrases. Ne rien indiquer si vous ne souhaitez pas de séparateur.",
"knowledge.showing": "Affichage de {{start}} - {{end}} sur un total de {{total}} segments", "knowledge.showing": "Affichage de {{start}} - {{end}} sur un total de {{total}} segments",
"knowledge.sourcesLabel": "Sources",
"knowledge.submitAddSources": "Ajouter des sources",
"knowledge.submitCreate": "Créer",
"knowledge.successSourcesAdded": "Sources ajoutées à \"{{name}}\"",
"knowledge.thisActionCannotBeUndone": "Cette action ne peut pas être annulée", "knowledge.thisActionCannotBeUndone": "Cette action ne peut pas être annulée",
"knowledge.unknownError": "Une erreur inconnue s'est produite", "knowledge.unknownError": "Une erreur inconnue s'est produite",
"knowledge.uploadFiles": "Transférer les fichiers",
"knowledge.uploadFolder": "Dossier de téléchargement",
"knowledge.validationEmbeddingRequired": "Un modèle d'intégration est requis",
"knowledge.validationFileSizeLimit": "La taille totale du fichier dépasse la limite de 1 Go",
"knowledge.validationNameDuplicate": "Une base de connaissances portant ce nom existe déjà",
"knowledge.validationNameFormat": "Le nom doit uniquement contenir [ a-zA-Z0-9._-] et commencer/se terminer par [ a-zA-Z0-9 ]",
"knowledge.validationNameLength": "Le nom doit comporter entre 3 et 512 caractères",
"knowledge.validationNameRequired": "Nom obligatoire",
"mainPage.delete": "Supprimer", "mainPage.delete": "Supprimer",
"mainPage.flowsDeletedSuccess": "Les flux ont été supprimés avec succès", "mainPage.flowsDeletedSuccess": "Les flux ont été supprimés avec succès",
"mainPage.flowsDownloadedSuccess": "Les flux ont été téléchargés avec succès", "mainPage.flowsDownloadedSuccess": "Les flux ont été téléchargés avec succès",
@ -485,4 +528,4 @@
"templatesModal.title": "Modèles", "templatesModal.title": "Modèles",
"templatesModal.tryDifferentQuery": "et essayez une autre requête.", "templatesModal.tryDifferentQuery": "et essayez une autre requête.",
"templatesModal.useCases": "Cas d'usage" "templatesModal.useCases": "Cas d'usage"
} }

View File

@ -160,6 +160,11 @@
"flow.brokenEdgesWarning": "無効な接続がいくつか削除されました:", "flow.brokenEdgesWarning": "無効な接続がいくつか削除されました:",
"flow.buildStatus": "ステータスを確認するためにビルドする。", "flow.buildStatus": "ステータスを確認するためにビルドする。",
"flow.buildSuccess": "無事に完成しました ✨", "flow.buildSuccess": "無事に完成しました ✨",
"flow.duplicatedSuccess": "{{type}} 複製に成功しました",
"flow.menu.delete": "削除",
"flow.menu.duplicate": "重複",
"flow.menu.editDetails": "詳細の編集",
"flow.menu.export": "エクスポート",
"flow.missingFields": "必須項目はすべてご記入ください。", "flow.missingFields": "必須項目はすべてご記入ください。",
"flow.noCompatibleComponents": "互換性のあるコンポーネントが見つかりませんでした。", "flow.noCompatibleComponents": "互換性のあるコンポーネントが見つかりませんでした。",
"flow.runTimestampPrefix": "最終走行: ", "flow.runTimestampPrefix": "最終走行: ",
@ -210,30 +215,68 @@
"input.titleErrorUpdatingComponent": "コンポーネントの更新中にエラーが発生しました", "input.titleErrorUpdatingComponent": "コンポーネントの更新中にエラーが発生しました",
"input.toolsetPlaceholder": "道具として使われる", "input.toolsetPlaceholder": "道具として使われる",
"knowledge.addKnowledge": "知識の追加", "knowledge.addKnowledge": "知識の追加",
"knowledge.addSources": "ソースの追加",
"knowledge.addSourcesDescription": "ファイルをアップロードし、チャンキング設定を行う",
"knowledge.addSourcesTitle": "ソースの追加",
"knowledge.baseCreated": "ナレッジベース「 \"{{name}}\" 」が作成されました", "knowledge.baseCreated": "ナレッジベース「 \"{{name}}\" 」が作成されました",
"knowledge.chunkOverlapLabel": "チャンク重複",
"knowledge.chunkOverlapTooltip": "チャンク間で重なり合わせる文字数。",
"knowledge.chunkSizeLabel": "チャンク・サイズ",
"knowledge.chunkSizeTooltip": "各チャンクの最大長。 テキストはまず区切り文字で分割され、その後、このサイズまでチャンクが結合されます。",
"knowledge.chunkingSettings": "チャンキング設定",
"knowledge.configureSources": "ソースの設定",
"knowledge.configureSourcesMaxSize": "アップロード上限1 GB",
"knowledge.createDescription": "ナレッジベースに名前を付け、ソースをアップロードし、埋め込みモデルを選択してください",
"knowledge.createTitle": "ナレッジベースを作成する",
"knowledge.delete": "削除", "knowledge.delete": "削除",
"knowledge.deleteSelected": "削除 ( {{count}} )", "knowledge.deleteSelected": "削除 ( {{count}} )",
"knowledge.deletedCount": "{{count}} ナレッジベースが削除されました", "knowledge.deletedCount": "{{count}} ナレッジベースが削除されました",
"knowledge.embeddingModelLabel": "モデルのエンベッド",
"knowledge.embeddingModelPlaceholder": "埋め込みモデルを選択",
"knowledge.embeddingModelUnknown": "不明",
"knowledge.emptyDescription": "ドキュメントをインテリジェントなワークフローと連携させ、強力なAI体験を実現しましょう。", "knowledge.emptyDescription": "ドキュメントをインテリジェントなワークフローと連携させ、強力なAI体験を実現しましょう。",
"knowledge.errorChunkPreview": "チャンクのプレビューの生成に失敗しました",
"knowledge.errorCreateFailed": "ナレッジベースの作成に失敗しました",
"knowledge.errorIngestion": "\"{{name}}\" の取り込みを開始できませんでした",
"knowledge.failedToDelete": "ナレッジベースの削除に失敗しました", "knowledge.failedToDelete": "ナレッジベースの削除に失敗しました",
"knowledge.failedToLoad": "ナレッジベースの読み込みに失敗しました", "knowledge.failedToLoad": "ナレッジベースの読み込みに失敗しました",
"knowledge.failedToLoadChunks": "チャンクの読み込みに失敗しました", "knowledge.failedToLoadChunks": "チャンクの読み込みに失敗しました",
"knowledge.helpConfigureSources": "ソースの設定",
"knowledge.helpHideConfiguration": "設定を非表示にする",
"knowledge.ingestionComplete": "\"{{name}}\" 取り込み完了 — {{chunks}} チャンクが準備完了", "knowledge.ingestionComplete": "\"{{name}}\" 取り込み完了 — {{chunks}} チャンクが準備完了",
"knowledge.ingestionFailed": "\"{{name}}\" の取り込みに失敗しました", "knowledge.ingestionFailed": "\"{{name}}\" の取り込みに失敗しました",
"knowledge.loadingChunks": "チャンクを読み込んでいます...", "knowledge.loadingChunks": "チャンクを読み込んでいます...",
"knowledge.loadingKnowledgeBases": "ナレッジベースを読み込んでいます...", "knowledge.loadingKnowledgeBases": "ナレッジベースを読み込んでいます...",
"knowledge.nameLabel": "名前",
"knowledge.namePlaceholder": "このナレッジベースの名前を入力してください",
"knowledge.noChunksFound": "チャンクが見つかりませんでした", "knowledge.noChunksFound": "チャンクが見つかりませんでした",
"knowledge.noKnowledgeBases": "ナレッジベースはありません", "knowledge.noKnowledgeBases": "ナレッジベースはありません",
"knowledge.ofTotal": "{{total}} の", "knowledge.ofTotal": "{{total}} の",
"knowledge.page": "ページ", "knowledge.page": "ページ",
"knowledge.pageTitle": "ナレッジ", "knowledge.pageTitle": "ナレッジ",
"knowledge.perPage": "1ページあたり", "knowledge.perPage": "1ページあたり",
"knowledge.reviewDescription": "ファイルがどのように分割されるかを確認し、設定を確定してください",
"knowledge.reviewTitle": "レビューと作成",
"knowledge.searchChunks": "チャンクを検索...", "knowledge.searchChunks": "チャンクを検索...",
"knowledge.searchPlaceholder": "ナレッジベースを検索...", "knowledge.searchPlaceholder": "ナレッジベースを検索...",
"knowledge.selected": "{{count}} 個を選択済み", "knowledge.selected": "{{count}} 個を選択済み",
"knowledge.separatorLabel": "分離文字",
"knowledge.separatorTooltip": "分割する文字。 改行には \\n を使用してください。 例:\\n\\n段落、\\n、。 文について。 区切り文字を挿入しない場合は、空欄のままにしてください。",
"knowledge.showing": "表示中: {{start}} - {{total}} のチャンク {{end}} 個", "knowledge.showing": "表示中: {{start}} - {{total}} のチャンク {{end}} 個",
"knowledge.sourcesLabel": "ソース",
"knowledge.submitAddSources": "ソースの追加",
"knowledge.submitCreate": "作成",
"knowledge.successSourcesAdded": "\"{{name}}\" に追加された情報源",
"knowledge.thisActionCannotBeUndone": "この操作は元に戻せません", "knowledge.thisActionCannotBeUndone": "この操作は元に戻せません",
"knowledge.unknownError": "不明なエラーが発生しました", "knowledge.unknownError": "不明なエラーが発生しました",
"knowledge.uploadFiles": "ファイルのアップロード",
"knowledge.uploadFolder": "アップロードフォルダ",
"knowledge.validationEmbeddingRequired": "モデルの埋め込みが必要です",
"knowledge.validationFileSizeLimit": "ファイルの合計サイズが1 GBの制限を超えています",
"knowledge.validationNameDuplicate": "この名前のナレッジベースはすでに存在します",
"knowledge.validationNameFormat": "名前には [ a-zA-Z0-9._-] のみを含め、先頭と末尾は [ a-zA-Z0-9 ] でなければならない",
"knowledge.validationNameLength": "名前は3文字以上512文字以下で入力してください",
"knowledge.validationNameRequired": "名前は必須です",
"mainPage.delete": "削除", "mainPage.delete": "削除",
"mainPage.flowsDeletedSuccess": "フローが正常に削除されました", "mainPage.flowsDeletedSuccess": "フローが正常に削除されました",
"mainPage.flowsDownloadedSuccess": "データのダウンロードが完了しました", "mainPage.flowsDownloadedSuccess": "データのダウンロードが完了しました",
@ -485,4 +528,4 @@
"templatesModal.title": "テンプレート", "templatesModal.title": "テンプレート",
"templatesModal.tryDifferentQuery": "別のクエリを試してみてください。", "templatesModal.tryDifferentQuery": "別のクエリを試してみてください。",
"templatesModal.useCases": "ユースケース" "templatesModal.useCases": "ユースケース"
} }

View File

@ -160,6 +160,11 @@
"flow.brokenEdgesWarning": "Algumas conexões foram removidas por serem inválidas:", "flow.brokenEdgesWarning": "Algumas conexões foram removidas por serem inválidas:",
"flow.buildStatus": "Compilar para verificar o status.", "flow.buildStatus": "Compilar para verificar o status.",
"flow.buildSuccess": "Construído com sucesso ✨", "flow.buildSuccess": "Construído com sucesso ✨",
"flow.duplicatedSuccess": "{{type}} duplicado com sucesso",
"flow.menu.delete": "Excluir",
"flow.menu.duplicate": "Duplicata",
"flow.menu.editDetails": "Editar detalhes",
"flow.menu.export": "Exportar",
"flow.missingFields": "Preencha todos os campos obrigatórios.", "flow.missingFields": "Preencha todos os campos obrigatórios.",
"flow.noCompatibleComponents": "Não foram encontrados componentes compatíveis.", "flow.noCompatibleComponents": "Não foram encontrados componentes compatíveis.",
"flow.runTimestampPrefix": "Última corrida: ", "flow.runTimestampPrefix": "Última corrida: ",
@ -210,30 +215,68 @@
"input.titleErrorUpdatingComponent": "Erro ao atualizar o componente", "input.titleErrorUpdatingComponent": "Erro ao atualizar o componente",
"input.toolsetPlaceholder": "Usado como ferramenta", "input.toolsetPlaceholder": "Usado como ferramenta",
"knowledge.addKnowledge": "Incluir conhecimento", "knowledge.addKnowledge": "Incluir conhecimento",
"knowledge.addSources": "Incluir origens",
"knowledge.addSourcesDescription": "Carregue arquivos e configure as opções de fragmentação",
"knowledge.addSourcesTitle": "Incluir origens",
"knowledge.baseCreated": "Base de conhecimento \"{{name}}\" criada", "knowledge.baseCreated": "Base de conhecimento \"{{name}}\" criada",
"knowledge.chunkOverlapLabel": "Sobreposição das partes",
"knowledge.chunkOverlapTooltip": "Número de caracteres a serem sobrepostos entre blocos.",
"knowledge.chunkSizeLabel": "Tamanho do chunk",
"knowledge.chunkSizeTooltip": "O comprimento máximo de cada bloco. O texto é primeiro dividido pelo separador e, em seguida, os trechos são agrupados até atingirem esse tamanho.",
"knowledge.chunkingSettings": "Configurações de segmentação",
"knowledge.configureSources": "Configurar fontes",
"knowledge.configureSourcesMaxSize": "(máximo de 1 GB para upload)",
"knowledge.createDescription": "Dê um nome à sua base de conhecimento, carregue as fontes e selecione um modelo de incorporação",
"knowledge.createTitle": "Criar uma base de conhecimento",
"knowledge.delete": "Excluir", "knowledge.delete": "Excluir",
"knowledge.deleteSelected": "Excluir ( {{count}} )", "knowledge.deleteSelected": "Excluir ( {{count}} )",
"knowledge.deletedCount": "{{count}} base(s) de conhecimento excluída(s)", "knowledge.deletedCount": "{{count}} base(s) de conhecimento excluída(s)",
"knowledge.embeddingModelLabel": "Modelo de integração",
"knowledge.embeddingModelPlaceholder": "Selecionar modelo de incorporação",
"knowledge.embeddingModelUnknown": "Desconhecido",
"knowledge.emptyDescription": "Crie experiências de IA poderosas conectando seus documentos a fluxos de trabalho inteligentes.", "knowledge.emptyDescription": "Crie experiências de IA poderosas conectando seus documentos a fluxos de trabalho inteligentes.",
"knowledge.errorChunkPreview": "Falha ao gerar a pré-visualização do bloco",
"knowledge.errorCreateFailed": "Falha ao criar a base de conhecimento",
"knowledge.errorIngestion": "Falha ao iniciar a ingestão para \"{{name}}\"",
"knowledge.failedToDelete": "Falha ao excluir bases de conhecimento", "knowledge.failedToDelete": "Falha ao excluir bases de conhecimento",
"knowledge.failedToLoad": "Falha ao carregar as bases de conhecimento", "knowledge.failedToLoad": "Falha ao carregar as bases de conhecimento",
"knowledge.failedToLoadChunks": "Falha ao carregar os blocos", "knowledge.failedToLoadChunks": "Falha ao carregar os blocos",
"knowledge.helpConfigureSources": "Configurar fontes",
"knowledge.helpHideConfiguration": "Ocultar configuração",
"knowledge.ingestionComplete": "\"{{name}}\" Ingestão concluída — {{chunks}} blocos prontos", "knowledge.ingestionComplete": "\"{{name}}\" Ingestão concluída — {{chunks}} blocos prontos",
"knowledge.ingestionFailed": "Falha na importação de \"{{name}}\"", "knowledge.ingestionFailed": "Falha na importação de \"{{name}}\"",
"knowledge.loadingChunks": "Carregando blocos...", "knowledge.loadingChunks": "Carregando blocos...",
"knowledge.loadingKnowledgeBases": "Carregando bases de conhecimento...", "knowledge.loadingKnowledgeBases": "Carregando bases de conhecimento...",
"knowledge.nameLabel": "Nome",
"knowledge.namePlaceholder": "Digite um nome para esta base de conhecimento",
"knowledge.noChunksFound": "Não foram encontrados blocos", "knowledge.noChunksFound": "Não foram encontrados blocos",
"knowledge.noKnowledgeBases": "Não há bases de conhecimento", "knowledge.noKnowledgeBases": "Não há bases de conhecimento",
"knowledge.ofTotal": "de {{total}}", "knowledge.ofTotal": "de {{total}}",
"knowledge.page": "Página", "knowledge.page": "Página",
"knowledge.pageTitle": "Conhecimento", "knowledge.pageTitle": "Conhecimento",
"knowledge.perPage": "Por página:", "knowledge.perPage": "Por página:",
"knowledge.reviewDescription": "Visualize como seus arquivos serão divididos em partes e confirme suas configurações",
"knowledge.reviewTitle": "Análise e montagem",
"knowledge.searchChunks": "Pesquisar trechos...", "knowledge.searchChunks": "Pesquisar trechos...",
"knowledge.searchPlaceholder": "Pesquisar nas bases de conhecimento...", "knowledge.searchPlaceholder": "Pesquisar nas bases de conhecimento...",
"knowledge.selected": "{{count}} selecionado", "knowledge.selected": "{{count}} selecionado",
"knowledge.separatorLabel": "Separador",
"knowledge.separatorTooltip": "O caractere no qual a divisão deve ser feita. Use \\n para criar uma nova linha. Exemplos: \\n\\n para parágrafos, \\n para linhas,. para frases. Deixe em branco se não houver separador.",
"knowledge.showing": "Exibindo {{start}} - {{end}} de {{total}} blocos", "knowledge.showing": "Exibindo {{start}} - {{end}} de {{total}} blocos",
"knowledge.sourcesLabel": "Origens",
"knowledge.submitAddSources": "Incluir origens",
"knowledge.submitCreate": "Criar",
"knowledge.successSourcesAdded": "Fontes adicionadas ao site \"{{name}}\"",
"knowledge.thisActionCannotBeUndone": "Esta ação não pode ser revertida", "knowledge.thisActionCannotBeUndone": "Esta ação não pode ser revertida",
"knowledge.unknownError": "Ocorreu um erro desconhecido", "knowledge.unknownError": "Ocorreu um erro desconhecido",
"knowledge.uploadFiles": "Fazer upload de arquivos",
"knowledge.uploadFolder": "Carregar pasta",
"knowledge.validationEmbeddingRequired": "É necessário incorporar o modelo",
"knowledge.validationFileSizeLimit": "O tamanho total do arquivo excede o limite de 1 GB",
"knowledge.validationNameDuplicate": "Já existe uma base de conhecimento com esse nome",
"knowledge.validationNameFormat": "O nome deve conter apenas [ a-zA-Z0-9._-] e começar/terminar com [ a-zA-Z0-9 ]",
"knowledge.validationNameLength": "O nome deve ter entre 3 e 512 caracteres",
"knowledge.validationNameRequired": "O nome é obrigatório",
"mainPage.delete": "Excluir", "mainPage.delete": "Excluir",
"mainPage.flowsDeletedSuccess": "Fluxos excluídos com sucesso", "mainPage.flowsDeletedSuccess": "Fluxos excluídos com sucesso",
"mainPage.flowsDownloadedSuccess": "Fluxos baixados com sucesso", "mainPage.flowsDownloadedSuccess": "Fluxos baixados com sucesso",
@ -485,4 +528,4 @@
"templatesModal.title": "Modelos", "templatesModal.title": "Modelos",
"templatesModal.tryDifferentQuery": "e tente uma consulta diferente.", "templatesModal.tryDifferentQuery": "e tente uma consulta diferente.",
"templatesModal.useCases": "Casos de uso" "templatesModal.useCases": "Casos de uso"
} }

View File

@ -160,6 +160,11 @@
"flow.brokenEdgesWarning": "某些连接已被移除,因为它们无效:", "flow.brokenEdgesWarning": "某些连接已被移除,因为它们无效:",
"flow.buildStatus": "构建以验证状态。", "flow.buildStatus": "构建以验证状态。",
"flow.buildSuccess": "已成功构建 ✨", "flow.buildSuccess": "已成功构建 ✨",
"flow.duplicatedSuccess": "{{type}} 已成功复制",
"flow.menu.delete": "删除",
"flow.menu.duplicate": "复制",
"flow.menu.editDetails": "编辑详细信息",
"flow.menu.export": "导出",
"flow.missingFields": "请填写所有必填项。", "flow.missingFields": "请填写所有必填项。",
"flow.noCompatibleComponents": "未找到兼容的组件。", "flow.noCompatibleComponents": "未找到兼容的组件。",
"flow.runTimestampPrefix": "最后一次运行: ", "flow.runTimestampPrefix": "最后一次运行: ",
@ -210,30 +215,68 @@
"input.titleErrorUpdatingComponent": "更新组件时发生错误", "input.titleErrorUpdatingComponent": "更新组件时发生错误",
"input.toolsetPlaceholder": "作为一种工具", "input.toolsetPlaceholder": "作为一种工具",
"knowledge.addKnowledge": "添加知识", "knowledge.addKnowledge": "添加知识",
"knowledge.addSources": "添加源",
"knowledge.addSourcesDescription": "上传文件并配置分块设置",
"knowledge.addSourcesTitle": "添加源",
"knowledge.baseCreated": "知识库 \"{{name}}\" 已创建", "knowledge.baseCreated": "知识库 \"{{name}}\" 已创建",
"knowledge.chunkOverlapLabel": "块重叠",
"knowledge.chunkOverlapTooltip": "各片段之间重叠的字符数。",
"knowledge.chunkSizeLabel": "块大小",
"knowledge.chunkSizeTooltip": "每个数据块的最大长度。 首先按分隔符将文本拆分,然后将各段合并至此大小。",
"knowledge.chunkingSettings": "分块设置",
"knowledge.configureSources": "配置来源",
"knowledge.configureSourcesMaxSize": "(最大上传容量为 1 GB",
"knowledge.createDescription": "为知识库命名,上传数据源,并选择嵌入模型",
"knowledge.createTitle": "创建知识库",
"knowledge.delete": "删除", "knowledge.delete": "删除",
"knowledge.deleteSelected": "删除 ( {{count}} )", "knowledge.deleteSelected": "删除 ( {{count}} )",
"knowledge.deletedCount": "{{count}} 已删除知识库", "knowledge.deletedCount": "{{count}} 已删除知识库",
"knowledge.embeddingModelLabel": "嵌入模型",
"knowledge.embeddingModelPlaceholder": "选择嵌入模型",
"knowledge.embeddingModelUnknown": "未知",
"knowledge.emptyDescription": "通过将文档与智能工作流相连接,打造强大的 AI 体验。", "knowledge.emptyDescription": "通过将文档与智能工作流相连接,打造强大的 AI 体验。",
"knowledge.errorChunkPreview": "无法生成片段预览",
"knowledge.errorCreateFailed": "无法创建知识库",
"knowledge.errorIngestion": "无法为 \"{{name}}\" 启动数据采集",
"knowledge.failedToDelete": "无法删除知识库", "knowledge.failedToDelete": "无法删除知识库",
"knowledge.failedToLoad": "无法加载知识库", "knowledge.failedToLoad": "无法加载知识库",
"knowledge.failedToLoadChunks": "无法加载区块", "knowledge.failedToLoadChunks": "无法加载区块",
"knowledge.helpConfigureSources": "配置来源",
"knowledge.helpHideConfiguration": "隐藏配置",
"knowledge.ingestionComplete": "\"{{name}}\" 摄入完成 — {{chunks}} 个数据块已准备就绪", "knowledge.ingestionComplete": "\"{{name}}\" 摄入完成 — {{chunks}} 个数据块已准备就绪",
"knowledge.ingestionFailed": "无法将 \"{{name}}\" 导入", "knowledge.ingestionFailed": "无法将 \"{{name}}\" 导入",
"knowledge.loadingChunks": "正在加载数据块……", "knowledge.loadingChunks": "正在加载数据块……",
"knowledge.loadingKnowledgeBases": "正在加载知识库...", "knowledge.loadingKnowledgeBases": "正在加载知识库...",
"knowledge.nameLabel": "名称",
"knowledge.namePlaceholder": "请为该知识库输入名称",
"knowledge.noChunksFound": "未找到任何片段", "knowledge.noChunksFound": "未找到任何片段",
"knowledge.noKnowledgeBases": "没有知识库", "knowledge.noKnowledgeBases": "没有知识库",
"knowledge.ofTotal": "{{total}}", "knowledge.ofTotal": "{{total}}",
"knowledge.page": "页面", "knowledge.page": "页面",
"knowledge.pageTitle": "知识", "knowledge.pageTitle": "知识",
"knowledge.perPage": "每页:", "knowledge.perPage": "每页:",
"knowledge.reviewDescription": "预览文件的分块情况并确认设置",
"knowledge.reviewTitle": "评测与组装",
"knowledge.searchChunks": "搜索片段...", "knowledge.searchChunks": "搜索片段...",
"knowledge.searchPlaceholder": "搜索知识库...", "knowledge.searchPlaceholder": "搜索知识库...",
"knowledge.selected": "已选择 {{count}} 个", "knowledge.selected": "已选择 {{count}} 个",
"knowledge.separatorLabel": "分隔符",
"knowledge.separatorTooltip": "用于分割的字符。 使用 \\n 表示换行。 示例:\\n\\n 表示段落,\\n 表示换行,。 用于句子。 若不需分隔符,请留空。",
"knowledge.showing": "显示 {{start}} - {{end}} ,共 {{total}} 个片段", "knowledge.showing": "显示 {{start}} - {{end}} ,共 {{total}} 个片段",
"knowledge.sourcesLabel": "源",
"knowledge.submitAddSources": "添加源",
"knowledge.submitCreate": "创建",
"knowledge.successSourcesAdded": "已将来源添加至 \"{{name}}\"",
"knowledge.thisActionCannotBeUndone": "此操作无法撤销", "knowledge.thisActionCannotBeUndone": "此操作无法撤销",
"knowledge.unknownError": "发生了一个未知错误", "knowledge.unknownError": "发生了一个未知错误",
"knowledge.uploadFiles": "上传文件",
"knowledge.uploadFolder": "上传文件夹",
"knowledge.validationEmbeddingRequired": "需要嵌入模型",
"knowledge.validationFileSizeLimit": "文件总大小超过了 1 GB 的限制",
"knowledge.validationNameDuplicate": "已经存在一个同名的知识库",
"knowledge.validationNameFormat": "名称必须仅包含 [ a-zA-Z0-9._-],且以 [ a-zA-Z0-9 ] 开头和结尾",
"knowledge.validationNameLength": "名称必须包含3至512个字符",
"knowledge.validationNameRequired": "名称是必需的",
"mainPage.delete": "删除", "mainPage.delete": "删除",
"mainPage.flowsDeletedSuccess": "流程已成功删除", "mainPage.flowsDeletedSuccess": "流程已成功删除",
"mainPage.flowsDownloadedSuccess": "流程已成功下载", "mainPage.flowsDownloadedSuccess": "流程已成功下载",
@ -485,4 +528,4 @@
"templatesModal.title": "模板", "templatesModal.title": "模板",
"templatesModal.tryDifferentQuery": "并尝试其他查询。", "templatesModal.tryDifferentQuery": "并尝试其他查询。",
"templatesModal.useCases": "用例" "templatesModal.useCases": "用例"
} }

View File

@ -1,9 +1,10 @@
import { useState } from "react"; import { useState } from "react";
import { useTranslation } from "react-i18next";
import { StepperModal, StepperModalFooter } from "../stepperModal/StepperModal"; import { StepperModal, StepperModalFooter } from "../stepperModal/StepperModal";
import { FilesPanel } from "./components/FilesPanel"; import { FilesPanel } from "./components/FilesPanel";
import { StepConfiguration } from "./components/StepConfiguration"; import { StepConfiguration } from "./components/StepConfiguration";
import { StepReview } from "./components/StepReview"; import { StepReview } from "./components/StepReview";
import { STEP_DESCRIPTIONS, STEP_TITLES } from "./constants"; import { getStepDescriptions, getStepTitles } from "./constants";
import { useKnowledgeBaseForm } from "./hooks/useKnowledgeBaseForm"; import { useKnowledgeBaseForm } from "./hooks/useKnowledgeBaseForm";
import type { KnowledgeBaseUploadModalProps } from "./types"; import type { KnowledgeBaseUploadModalProps } from "./types";
@ -20,6 +21,7 @@ export default function KnowledgeBaseUploadModal({
hideAdvanced, hideAdvanced,
existingKnowledgeBaseNames, existingKnowledgeBaseNames,
}: KnowledgeBaseUploadModalProps) { }: KnowledgeBaseUploadModalProps) {
const { t } = useTranslation();
const [internalOpen, setInternalOpen] = useState(false); const [internalOpen, setInternalOpen] = useState(false);
const open = controlledOpen ?? internalOpen; const open = controlledOpen ?? internalOpen;
const setOpen = controlledSetOpen ?? setInternalOpen; const setOpen = controlledSetOpen ?? setInternalOpen;
@ -96,12 +98,14 @@ export default function KnowledgeBaseUploadModal({
currentStep={form.currentStep} currentStep={form.currentStep}
totalSteps={2} totalSteps={2}
title={ title={
form.isAddSourcesMode ? "Add Sources" : STEP_TITLES[form.currentStep] form.isAddSourcesMode
? t("knowledge.addSourcesTitle")
: getStepTitles()[form.currentStep]
} }
description={ description={
form.isAddSourcesMode && form.currentStep === 1 form.isAddSourcesMode && form.currentStep === 1
? "Upload files and configure chunking settings" ? t("knowledge.addSourcesDescription")
: STEP_DESCRIPTIONS[form.currentStep] : getStepDescriptions()[form.currentStep]
} }
icon="Database" icon="Database"
height={(() => { height={(() => {
@ -129,12 +133,16 @@ export default function KnowledgeBaseUploadModal({
} }
isSubmitting={form.isSubmitting} isSubmitting={form.isSubmitting}
submitTestId="kb-create-button" submitTestId="kb-create-button"
submitLabel={form.isAddSourcesMode ? "Add Sources" : "Create"} submitLabel={
form.isAddSourcesMode
? t("knowledge.submitAddSources")
: t("knowledge.submitCreate")
}
helpLabel={ helpLabel={
!hideAdvanced && form.currentStep === 1 !hideAdvanced && form.currentStep === 1
? form.showAdvanced ? form.showAdvanced
? "Hide Configuration" ? t("knowledge.helpHideConfiguration")
: "Configure Sources" : t("knowledge.helpConfigureSources")
: undefined : undefined
} }
onHelp={ onHelp={

View File

@ -1,4 +1,5 @@
import ForwardedIconComponent from "@/components/common/genericIconComponent"; import ForwardedIconComponent from "@/components/common/genericIconComponent";
import { useTranslation } from "react-i18next";
import ModelInputComponent, { import ModelInputComponent, {
type ModelOption, type ModelOption,
} from "@/components/core/parameterRenderComponent/components/modelInputComponent"; } from "@/components/core/parameterRenderComponent/components/modelInputComponent";
@ -72,17 +73,18 @@ export function StepConfiguration({
columnConfig, columnConfig,
onColumnConfigChange, onColumnConfigChange,
}: StepConfigurationProps) { }: StepConfigurationProps) {
const { t } = useTranslation();
return ( return (
<div className="relative"> <div className="relative">
<div className="flex flex-col"> <div className="flex flex-col">
{/* Name */} {/* Name */}
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<Label htmlFor="source-name" className="text-sm font-medium"> <Label htmlFor="source-name" className="text-sm font-medium">
Name <span className="text-destructive">*</span> {t("knowledge.nameLabel")} <span className="text-destructive">*</span>
</Label> </Label>
<Input <Input
id="source-name" id="source-name"
placeholder="Enter a name for this knowledge base" placeholder={t("knowledge.namePlaceholder")}
value={sourceName} value={sourceName}
onChange={(e) => { onChange={(e) => {
onSourceNameChange(e.target.value); onSourceNameChange(e.target.value);
@ -102,7 +104,7 @@ export function StepConfiguration({
{/* Model Selection */} {/* Model Selection */}
<div className="flex flex-col gap-2 pt-4"> <div className="flex flex-col gap-2 pt-4">
<Label className="text-sm font-medium"> <Label className="text-sm font-medium">
Embedding Model <span className="text-destructive">*</span> {t("knowledge.embeddingModelLabel")} <span className="text-destructive">*</span>
</Label> </Label>
{isAddSourcesMode ? ( {isAddSourcesMode ? (
<div className="flex h-10 w-full items-center gap-2 rounded-md border border-input bg-muted px-3 py-2 text-sm"> <div className="flex h-10 w-full items-center gap-2 rounded-md border border-input bg-muted px-3 py-2 text-sm">
@ -111,7 +113,7 @@ export function StepConfiguration({
className="h-4 w-4 shrink-0" className="h-4 w-4 shrink-0"
/> />
<span className="text-muted-foreground"> <span className="text-muted-foreground">
{existingEmbeddingModel || "Unknown"} {existingEmbeddingModel || t("knowledge.embeddingModelUnknown")}
</span> </span>
</div> </div>
) : ( ) : (
@ -132,7 +134,7 @@ export function StepConfiguration({
onFieldChange?.(); onFieldChange?.();
}} }}
options={embeddingModelOptions} options={embeddingModelOptions}
placeholder="Select embedding model" placeholder={t("knowledge.embeddingModelPlaceholder")}
showEmptyState showEmptyState
/> />
</div> </div>
@ -184,9 +186,9 @@ export function StepConfiguration({
className="h-4 w-4 text-muted-foreground" className="h-4 w-4 text-muted-foreground"
/> />
<span className="text-sm font-medium"> <span className="text-sm font-medium">
Configure Sources {t("knowledge.configureSources")}
<span className="text-xs text-muted-foreground ml-1"> <span className="text-xs text-muted-foreground ml-1">
(1 GB max upload) {t("knowledge.configureSourcesMaxSize")}
</span> </span>
</span> </span>
</div> </div>
@ -194,7 +196,7 @@ export function StepConfiguration({
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<div className="flex flex-col gap-2"> <div className="flex flex-col gap-2">
<Label className="text-xs text-muted-foreground"> <Label className="text-xs text-muted-foreground">
Sources {t("knowledge.sourcesLabel")}
</Label> </Label>
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
@ -211,7 +213,7 @@ export function StepConfiguration({
name="Upload" name="Upload"
className="h-4 w-4" className="h-4 w-4"
/> />
Add Sources {t("knowledge.addSources")}
</span> </span>
<ForwardedIconComponent <ForwardedIconComponent
name="ChevronDown" name="ChevronDown"
@ -229,7 +231,7 @@ export function StepConfiguration({
name="FileText" name="FileText"
className="mr-2 h-4 w-4" className="mr-2 h-4 w-4"
/> />
Upload Files {t("knowledge.uploadFiles")}
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem <DropdownMenuItem
onClick={() => onClick={() =>
@ -240,7 +242,7 @@ export function StepConfiguration({
name="Folder" name="Folder"
className="mr-2 h-4 w-4" className="mr-2 h-4 w-4"
/> />
Upload Folder {t("knowledge.uploadFolder")}
</DropdownMenuItem> </DropdownMenuItem>
</DropdownMenuContent> </DropdownMenuContent>
</DropdownMenu> </DropdownMenu>
@ -297,7 +299,7 @@ export function StepConfiguration({
name="Settings2" name="Settings2"
className="h-4 w-4 text-muted-foreground" className="h-4 w-4 text-muted-foreground"
/> />
<span className="text-sm font-medium">Chunking Settings</span> <span className="text-sm font-medium">{t("knowledge.chunkingSettings")}</span>
</div> </div>
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
@ -307,7 +309,7 @@ export function StepConfiguration({
htmlFor="chunk-size" htmlFor="chunk-size"
className="flex items-center gap-1 text-xs text-muted-foreground" className="flex items-center gap-1 text-xs text-muted-foreground"
> >
Chunk Size {t("knowledge.chunkSizeLabel")}
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
@ -319,8 +321,7 @@ export function StepConfiguration({
</span> </span>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent className="max-w-[260px]"> <TooltipContent className="max-w-[260px]">
The maximum length of each chunk. Text is first split {t("knowledge.chunkSizeTooltip")}
by separator, then chunks are merged up to this size.
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
</TooltipProvider> </TooltipProvider>
@ -344,7 +345,7 @@ export function StepConfiguration({
htmlFor="chunk-overlap" htmlFor="chunk-overlap"
className="flex items-center gap-1 text-xs text-muted-foreground" className="flex items-center gap-1 text-xs text-muted-foreground"
> >
Chunk Overlap {t("knowledge.chunkOverlapLabel")}
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
@ -356,7 +357,7 @@ export function StepConfiguration({
</span> </span>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent className="max-w-[260px]"> <TooltipContent className="max-w-[260px]">
Number of characters to overlap between chunks. {t("knowledge.chunkOverlapTooltip")}
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
</TooltipProvider> </TooltipProvider>
@ -381,7 +382,7 @@ export function StepConfiguration({
htmlFor="separator" htmlFor="separator"
className="flex items-center gap-1 text-xs text-muted-foreground" className="flex items-center gap-1 text-xs text-muted-foreground"
> >
Separator {t("knowledge.separatorLabel")}
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
@ -393,9 +394,7 @@ export function StepConfiguration({
</span> </span>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent className="max-w-[260px]"> <TooltipContent className="max-w-[260px]">
The character to split on. Use \n for newline. Examples: {t("knowledge.separatorTooltip")}
\n\n for paragraphs, \n for lines, . for sentences.
Leave blank for no separator.
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
</TooltipProvider> </TooltipProvider>

View File

@ -1,14 +1,15 @@
import i18n from "@/i18n";
import type { WizardStep } from "./types"; import type { WizardStep } from "./types";
export const STEP_TITLES: Record<WizardStep, string> = { export const getStepTitles = (): Record<WizardStep, string> => ({
1: "Create Knowledge Base", 1: i18n.t("knowledge.createTitle"),
2: "Review & Build", 2: i18n.t("knowledge.reviewTitle"),
}; });
export const STEP_DESCRIPTIONS: Record<WizardStep, string> = { export const getStepDescriptions = (): Record<WizardStep, string> => ({
1: "Name your knowledge base, upload sources, and select an embedding model", 1: i18n.t("knowledge.createDescription"),
2: "Preview how your files will be chunked and confirm your settings", 2: i18n.t("knowledge.reviewDescription"),
}; });
export const DEFAULT_CHUNK_SIZE = 100; export const DEFAULT_CHUNK_SIZE = 100;
export const DEFAULT_CHUNK_OVERLAP = 0; export const DEFAULT_CHUNK_OVERLAP = 0;

View File

@ -1,5 +1,6 @@
import { type AxiosError } from "axios"; import { type AxiosError } from "axios";
import { useCallback, useEffect, useMemo, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import type { ModelOption } from "@/components/core/parameterRenderComponent/components/modelInputComponent"; import type { ModelOption } from "@/components/core/parameterRenderComponent/components/modelInputComponent";
import { api } from "@/controllers/API/api"; import { api } from "@/controllers/API/api";
import { getURL } from "@/controllers/API/helpers/constants"; import { getURL } from "@/controllers/API/helpers/constants";
@ -39,6 +40,7 @@ export function useKnowledgeBaseForm({
| "hideAdvanced" | "hideAdvanced"
| "existingKnowledgeBaseNames" | "existingKnowledgeBaseNames"
>) { >) {
const { t } = useTranslation();
const isAddSourcesMode = !!existingKnowledgeBase; const isAddSourcesMode = !!existingKnowledgeBase;
// Wizard state // Wizard state
@ -255,7 +257,7 @@ export function useKnowledgeBaseForm({
} catch (error: unknown) { } catch (error: unknown) {
const err = error as AxiosError<{ detail?: string }>; const err = error as AxiosError<{ detail?: string }>;
setErrorData({ setErrorData({
title: "Failed to generate chunk preview", title: t("knowledge.errorChunkPreview"),
list: [err?.response?.data?.detail || err?.message || "Unknown error"], list: [err?.response?.data?.detail || err?.message || "Unknown error"],
}); });
setChunkPreviews([]); setChunkPreviews([]);
@ -275,29 +277,29 @@ export function useKnowledgeBaseForm({
const errors: Record<string, string> = {}; const errors: Record<string, string> = {};
const trimmedName = sourceName.trim().replace(/\s+/g, "_"); const trimmedName = sourceName.trim().replace(/\s+/g, "_");
if (!trimmedName) { if (!trimmedName) {
errors.sourceName = "Name is required"; errors.sourceName = t("knowledge.validationNameRequired");
} else if (trimmedName.length < 3 || trimmedName.length > 512) { } else if (trimmedName.length < 3 || trimmedName.length > 512) {
errors.sourceName = "Name must be between 3 and 512 characters"; errors.sourceName = t("knowledge.validationNameLength");
} else if (!KB_NAME_REGEX.test(trimmedName)) { } else if (!KB_NAME_REGEX.test(trimmedName)) {
errors.sourceName = errors.sourceName = t("knowledge.validationNameFormat");
"Name must only contain [a-zA-Z0-9._-] and start/end with [a-zA-Z0-9]";
} else if ( } else if (
!isAddSourcesMode && !isAddSourcesMode &&
existingKnowledgeBaseNames?.some( existingKnowledgeBaseNames?.some(
(name) => name.toLowerCase() === trimmedName.toLowerCase(), (name) => name.toLowerCase() === trimmedName.toLowerCase(),
) )
) { ) {
errors.sourceName = "A knowledge base with this name already exists"; errors.sourceName = t("knowledge.validationNameDuplicate");
} }
if (!isAddSourcesMode && selectedEmbeddingModel.length === 0) { if (!isAddSourcesMode && selectedEmbeddingModel.length === 0) {
errors.embeddingModel = "Embedding model is required"; errors.embeddingModel = t("knowledge.validationEmbeddingRequired");
} }
const totalBytes = files.reduce((acc, file) => acc + file.size, 0); const totalBytes = files.reduce((acc, file) => acc + file.size, 0);
if (totalBytes > MAX_TOTAL_FILE_SIZE) { if (totalBytes > MAX_TOTAL_FILE_SIZE) {
errors.files = "Total file size exceeds the 1 GB limit"; errors.files = t("knowledge.validationFileSizeLimit");
} }
return errors; return errors;
}, [ }, [
t,
sourceName, sourceName,
isAddSourcesMode, isAddSourcesMode,
selectedEmbeddingModel, selectedEmbeddingModel,
@ -370,7 +372,7 @@ export function useKnowledgeBaseForm({
.catch((ingestError: unknown) => { .catch((ingestError: unknown) => {
const err = ingestError as AxiosError<{ detail?: string }>; const err = ingestError as AxiosError<{ detail?: string }>;
setErrorData({ setErrorData({
title: `Failed to start ingestion for "${sourceName}"`, title: t("knowledge.errorIngestion", { name: sourceName }),
list: [ list: [
err?.response?.data?.detail || err?.message || "Unknown error", err?.response?.data?.detail || err?.message || "Unknown error",
], ],
@ -390,11 +392,11 @@ export function useKnowledgeBaseForm({
if (isAddSourcesMode) { if (isAddSourcesMode) {
setSuccessData({ setSuccessData({
title: `Sources added to "${sourceName}"`, title: t("knowledge.successSourcesAdded", { name: sourceName }),
}); });
} else { } else {
setSuccessData({ setSuccessData({
title: `Knowledge base "${sourceName}" created`, title: t("knowledge.baseCreated", { name: sourceName }),
}); });
} }
@ -406,7 +408,7 @@ export function useKnowledgeBaseForm({
const errorMessage = const errorMessage =
err?.response?.data?.detail || err?.response?.data?.detail ||
err?.message || err?.message ||
"Failed to create knowledge base"; t("knowledge.errorCreateFailed");
setErrorData({ title: errorMessage }); setErrorData({ title: errorMessage });
} finally { } finally {
setIsSubmitting(false); setIsSubmitting(false);

View File

@ -2,6 +2,7 @@ import ForwardedIconComponent from "@/components/common/genericIconComponent";
import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; import { DropdownMenuItem } from "@/components/ui/dropdown-menu";
import useAlertStore from "@/stores/alertStore"; import useAlertStore from "@/stores/alertStore";
import type { FlowType } from "@/types/flow"; import type { FlowType } from "@/types/flow";
import { useTranslation } from "react-i18next";
import useDuplicateFlow from "../../hooks/use-handle-duplicate"; import useDuplicateFlow from "../../hooks/use-handle-duplicate";
import useSelectOptionsChange from "../../hooks/use-select-options-change"; import useSelectOptionsChange from "../../hooks/use-select-options-change";
@ -18,6 +19,7 @@ const DropdownComponent = ({
handleExport, handleExport,
handleEdit, handleEdit,
}: DropdownComponentProps) => { }: DropdownComponentProps) => {
const { t } = useTranslation();
const setSuccessData = useAlertStore((state) => state.setSuccessData); const setSuccessData = useAlertStore((state) => state.setSuccessData);
const setErrorData = useAlertStore((state) => state.setErrorData); const setErrorData = useAlertStore((state) => state.setErrorData);
const { handleDuplicate } = useDuplicateFlow({ flow: flowData }); const { handleDuplicate } = useDuplicateFlow({ flow: flowData });
@ -25,7 +27,9 @@ const DropdownComponent = ({
const duplicateFlow = () => { const duplicateFlow = () => {
handleDuplicate().then(() => handleDuplicate().then(() =>
setSuccessData({ setSuccessData({
title: `${flowData.is_component ? "Component" : "Flow"} duplicated successfully`, title: t("flow.duplicatedSuccess", {
type: flowData.is_component ? "Component" : "Flow",
}),
}), }),
); );
}; };
@ -54,7 +58,7 @@ const DropdownComponent = ({
aria-hidden="true" aria-hidden="true"
className="mr-2 h-4 w-4" className="mr-2 h-4 w-4"
/> />
Edit details {t("flow.menu.editDetails")}
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem <DropdownMenuItem
onClick={(e) => { onClick={(e) => {
@ -69,7 +73,7 @@ const DropdownComponent = ({
aria-hidden="true" aria-hidden="true"
className="mr-2 h-4 w-4" className="mr-2 h-4 w-4"
/> />
Export {t("flow.menu.export")}
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem <DropdownMenuItem
onClick={(e) => { onClick={(e) => {
@ -84,7 +88,7 @@ const DropdownComponent = ({
aria-hidden="true" aria-hidden="true"
className="mr-2 h-4 w-4" className="mr-2 h-4 w-4"
/> />
Duplicate {t("flow.menu.duplicate")}
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem <DropdownMenuItem
onClick={(e) => { onClick={(e) => {
@ -99,7 +103,7 @@ const DropdownComponent = ({
aria-hidden="true" aria-hidden="true"
className="mr-2 h-4 w-4" className="mr-2 h-4 w-4"
/> />
Delete {t("flow.menu.delete")}
</DropdownMenuItem> </DropdownMenuItem>
</> </>
); );