Feat/i18n workflow (#4819)

This commit is contained in:
crazywoola
2024-05-30 21:03:32 +08:00
committed by GitHub
parent 38a470a873
commit 3de8e8fd6a
9 changed files with 1517 additions and 1062 deletions

View File

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