Unverified Commit 849dc056 authored by Laurent Magnien's avatar Laurent Magnien Committed by GitHub

feat: add French fr-FR (#2810)

Co-authored-by: 's avatarLaurent Magnien <laurent.magnien@adsn.fr>
parent a026c5fd
const translation = {
title: 'Annotations',
name: 'Réponse à l\'Annotation',
editBy: 'Réponse éditée par {{author}}',
noData: {
title: 'Aucune annotation',
description: 'Vous pouvez modifier les annotations en déboguant l\'application, ou importer des annotations en masse ici pour une réponse de haute qualité.',
},
table: {
header: {
question: 'question',
answer: 'réponse',
createdAt: 'créé à',
hits: 'clics',
actions: 'actions',
addAnnotation: 'Ajouter une Annotation',
bulkImport: 'Importation en Vrac',
bulkExport: 'Exportation en Vrac',
clearAll: 'Effacer toutes les annotations',
},
},
editModal: {
title: 'Modifier la réponse à l\'annotation',
queryName: 'Requête de l\'utilisateur',
answerName: 'Bot conteur',
yourAnswer: 'Votre réponse',
answerPlaceholder: 'Tapez votre réponse ici',
yourQuery: 'Votre requête',
queryPlaceholder: 'Tapez votre requête ici',
removeThisCache: 'Supprimez cette Annotation',
createdAt: 'Créé à',
},
addModal: {
title: 'Ajouter une réponse d\'annotation',
queryName: 'Question',
answerName: 'Réponse',
answerPlaceholder: 'Tapez la réponse ici',
queryPlaceholder: 'Tapez la requête ici',
createNext: 'Ajoutez une autre réponse annotée',
},
batchModal: {
title: 'Importation en masse',
csvUploadTitle: 'Glissez et déposez votre fichier CSV ici, ou',
browse: 'parcourir',
tip: 'Le fichier CSV doit se conformer à la structure suivante :',
question: 'question',
answer: 'réponse',
contentTitle: 'contenu du bloc',
content: 'contenu',
template: 'Téléchargez le modèle ici',
cancel: 'Annuler',
run: 'Exécuter le lot',
runError: 'L\'exécution du lot a échoué',
processing: 'Dans le traitement par lots',
completed: 'Importation terminée',
error: 'Erreur d\'Importation',
ok: 'D\'accord',
},
errorMessage: {
answerRequired: 'Une réponse est requise',
queryRequired: 'La question est requise',
},
viewModal: {
annotatedResponse: 'Réponse à l\'annotation',
hitHistory: 'Historique des coups',
hit: 'Clic',
hits: 'Clics',
noHitHistory: 'Aucun historique de recherche',
},
hitHistoryTable: {
query: 'Requête',
match: 'Correspondance',
response: 'Réponse',
source: 'Source',
score: 'Score',
time: 'Temps',
},
initSetup: {
title: 'Réponse d\'Annotation Configuration Initiale',
configTitle: 'Configuration de la Réponse d\'Annotation',
confirmBtn: 'Enregistrer & Activer',
configConfirmBtn: 'Enregistrer',
},
embeddingModelSwitchTip: 'Modèle de vectorisation de texte d\'annotation, changer de modèles entraînera une ré-intégration, ce qui entraînera des coûts supplémentaires.',
}
export default translation
const translation = {
apiServer: 'Serveur API',
apiKey: 'Clé API',
status: 'Statut',
disabled: 'Désactivé',
ok: 'En Service',
copy: 'Copier',
copied: 'Copié',
play: 'Jouer',
pause: 'Pause',
playing: 'Jouant',
merMaind: {
rerender: 'Refaire Rerendu',
},
never: 'Jamais',
apiKeyModal: {
apiSecretKey: 'Clé secrète de l\'API',
apiSecretKeyTips: 'Pour prévenir l\'abus de l\'API, protégez votre clé API. Évitez de l\'utiliser comme du texte brut dans le code front-end. :)',
createNewSecretKey: 'Créer une nouvelle clé secrète',
secretKey: 'Clé Secrète',
created: 'CRÉÉ',
lastUsed: 'DERNIÈRE UTILISATION',
generateTips: 'Gardez cette clé dans un endroit sûr et accessible.',
},
actionMsg: {
deleteConfirmTitle: 'Supprimer cette clé secrète ?',
deleteConfirmTips: 'Cette action ne peut pas être annulée.',
ok: 'D\'accord',
},
completionMode: {
title: 'API de l\'application Completion',
info: 'Pour une génération de texte de haute qualité, telle que des articles, des résumés et des traductions, utilisez l\'API completion-messages avec l\'entrée de l\'utilisateur. La génération de texte repose sur les paramètres du modèle et les modèles de prompt définis dans',
createCompletionApi: 'Créer un Message de Fin',
createCompletionApiTip: 'Créez un message de fin pour soutenir le mode question-réponse.',
inputsTips: '(Facultatif) Fournissez des champs de saisie utilisateur sous forme de paires clé-valeur, correspondant aux variables dans Prompt Eng. La clé est le nom de la variable, la valeur est la valeur du paramètre. Si le type de champ est Sélection, la valeur sou',
queryTips: 'Contenu du texte saisi par l\'utilisateur.',
blocking: 'Type de blocage, en attente de l\'exécution pour terminer et renvoyer les résultats. (Les demandes peuvent être interrompues si le processus est long)',
streaming: 'retours en continu. Mise en œuvre de retours en continu basée sur SSE (Server-Sent Events).',
messageFeedbackApi: 'Retour de message (j\'aime)',
messageFeedbackApiTip: 'Évaluez les messages reçus au nom des utilisateurs finaux avec des likes ou des dislikes. Ces données sont visibles sur la page Logs & Annotations et sont utilisées pour le réglage fin des modèles futurs.',
messageIDTip: 'ID de message',
ratingTip: 'aimer ou ne pas aimer, null est annuler',
parametersApi: 'Obtenir des informations sur les paramètres de l\'application',
parametersApiTip: 'Récupérer les paramètres d\'entrée configurés, y compris les noms de variables, les noms de champs, les types et les valeurs par défaut. Généralement utilisé pour afficher ces champs dans un formulaire ou pour remplir les valeurs par défaut après le charg',
},
chatMode: {
title: 'API de l\'application de chat',
info: 'Pour des applications conversationnelles polyvalentes utilisant un format Q&R, appelez l\'API de chat-messages pour initier le dialogue. Maintenez les conversations en cours en passant l\'ID de conversation retourné. Les paramètres de réponse et les modèles dépendent des paramètres de',
createChatApi: 'Créer un message de chat',
createChatApiTip: 'Créez un nouveau message de conversation ou continuez un dialogue existant.',
inputsTips: '(Facultatif) Fournir des champs de saisie utilisateur sous forme de paires clé-valeur, correspondant aux variables dans Prompt Eng. La clé est le nom de la variable, la valeur est la valeur du paramètre. Si le type de champ est Sélection, la valeur soumise',
queryTips: 'Contenu de la question/saisie de l\'utilisateur',
blocking: 'Type de blocage, en attente de l\'exécution pour terminer et renvoyer les résultats. (Les demandes peuvent être interrompues si le processus est long)',
streaming: 'retours en continu. Mise en œuvre de retours en continu basée sur SSE (Server-Sent Events).',
conversationIdTip: '(Optional) Conversation ID: leave empty for first-time conversation; pass conversation_id from context to continue dialogue.',
messageFeedbackApi: 'Message de retour d\'information de l\'utilisateur du terminal, comme',
messageFeedbackApiTip: 'Évaluez les messages reçus au nom des utilisateurs finaux avec des likes ou des dislikes. Ces données sont visibles sur la page Logs & Annotations et sont utilisées pour l\'ajustement futur du modèle.',
messageIDTip: 'ID de message',
ratingTip: 'aimer ou ne pas aimer, null est annuler',
chatMsgHistoryApi: 'Obtenez le message de l\'historique de chat',
chatMsgHistoryApiTip: 'La première page renvoie la dernière `limit` bar, qui est en ordre inverse.',
chatMsgHistoryConversationIdTip: 'ID de conversation',
chatMsgHistoryFirstId: 'ID du premier enregistrement de chat sur la page actuelle. La valeur par défaut est aucune.',
chatMsgHistoryLimit: 'Combien de chats sont renvoyés en une seule demande',
conversationsListApi: 'Obtenir la liste des conversations',
conversationsListApiTip: 'Obtient la liste des sessions de l\'utilisateur actuel. Par défaut, les 20 dernières sessions sont renvoyées.',
conversationsListFirstIdTip: 'L\'ID du dernier enregistrement sur la page actuelle, par défaut aucun.',
conversationsListLimitTip: 'Combien de chats sont renvoyés dans une seule requête',
conversationRenamingApi: 'Renommage de la conversation',
conversationRenamingApiTip: 'Renommez les conversations ; le nom est affiché dans les interfaces client multi-session.',
conversationRenamingNameTip: 'Nouveau nom',
parametersApi: 'Obtenir des informations sur les paramètres de l\'application',
parametersApiTip: 'Récupérer les paramètres d\'entrée configurés, y compris les noms de variables, les noms de champs, les types et les valeurs par défaut. Typiquement utilisé pour afficher ces champs dans un formulaire ou pour remplir les valeurs par défaut après le chargement du',
},
develop: {
requestBody: 'Corps de la Requête',
pathParams: 'Params de chemin',
query: 'Requête',
},
}
export default translation
This diff is collapsed.
const translation = {
title: 'Journaux',
description: 'Les journaux enregistrent l\'état de fonctionnement de l\'application, y compris les entrées de l\'utilisateur et les réponses de l\'IA.',
dateTimeFormat: 'JJ/MM/AAAA hh:mm A',
table: {
header: {
time: 'Temps',
endUser: 'Utilisateur final',
input: 'Entrée',
output: 'Sortie',
summary: 'Titre',
messageCount: 'Nombre de Messages',
userRate: 'Taux d\'utilisateur',
adminRate: 'Taux Op.',
},
pagination: {
previous: 'Précédent',
next: 'Suivant',
},
empty: {
noChat: 'Aucune conversation pour le moment',
noOutput: 'Aucune sortie',
element: {
title: 'Quelqu\'un est là ?',
content: 'Observez et annotez les interactions entre les utilisateurs finaux et les applications IA ici pour améliorer continuellement la précision de l\'IA. Vous pouvez essayer de <shareLink>partager</shareLink> ou de <testLink>tester</testLink> l\'application Web',
},
},
},
detail: {
time: 'Temps',
conversationId: 'ID de conversation',
promptTemplate: 'Modèle de Prompt',
promptTemplateBeforeChat: 'Modèle de Prompt Avant le Chat · En Tant que Message Système',
annotationTip: 'Améliorations Marquées par {{user}}',
timeConsuming: 'Apologies, but you haven\'t provided any text to translate. Could you please provide the text so I can help you with the translation?',
second: '"s"',
tokenCost: 'Jeton dépensé',
loading: 'chargement',
operation: {
like: 'comme',
dislike: 'déteste',
addAnnotation: 'Ajouter une amélioration',
editAnnotation: 'Amélioration de l\'édition',
annotationPlaceholder: 'Entrez la réponse attendue que vous souhaitez que l\'IA donne, qui peut être utilisée pour l\'ajustement fin du modèle et l\'amélioration continue de la qualité de génération de texte à l\'avenir.',
},
variables: 'Variables',
uploadImages: 'Images Téléchargées',
},
filter: {
period: {
today: 'Aujourd\'hui',
last7days: 'Les 7 Derniers Jours',
last4weeks: 'Les 4 dernières semaines',
last3months: 'Les 3 derniers mois',
last12months: 'Les 12 derniers mois',
monthToDate: 'Mois à ce jour',
quarterToDate: 'Trimestre à ce jour',
yearToDate: 'Année à ce jour',
allTime: 'Tout le temps',
},
annotation: {
all: 'Tout',
annotated: 'Améliorations annotées ({{count}} éléments)',
not_annotated: 'Non Annoté',
},
},
}
export default translation
const translation = {
welcome: {
firstStepTip: 'Pour commencer,',
enterKeyTip: 'entrez votre clé API OpenAI ci-dessous',
getKeyTip: 'Obtenez votre clé API depuis le tableau de bord OpenAI',
placeholder: 'Votre clé API OpenAI (par exemple, sk-xxxx)',
},
apiKeyInfo: {
cloud: {
trial: {
title: 'Vous utilisez le quota d\'essai de {{providerName}}.',
description: 'Le quota d\'essai est fourni pour votre utilisation de test. Avant que les appels de quota d\'essai ne soient épuisés, veuillez configurer votre propre fournisseur de modèle ou acheter un quota supplémentaire.',
},
exhausted: {
title: 'Votre quota d\'essai a été utilisé, veuillez configurer votre APIKey.',
description: 'Votre quota d\'essai a été épuisé. Veuillez configurer votre propre fournisseur de modèle ou acheter un quota supplémentaire.',
},
},
selfHost: {
title: {
row1: 'Pour commencer,',
row2: 'configurez d\'abord votre fournisseur de modèle.',
},
},
callTimes: 'Heures d\'appel',
usedToken: 'Token utilisé',
setAPIBtn: 'Allez configurer le fournisseur de modèle',
tryCloud: 'Ou essayez la version cloud de Dify avec un devis gratuit',
},
overview: {
title: 'Aperçu',
appInfo: {
explanation: 'WebApp IA prête à l\'emploi',
accessibleAddress: 'URL publique',
preview: 'Aperçu',
regenerate: 'Régénérer',
preUseReminder: 'Veuillez activer WebApp avant de continuer.',
settings: {
entry: 'Paramètres',
title: 'Paramètres de l\'application Web',
webName: 'Nom de l\'application Web',
webDesc: 'Description de l\'application web',
webDescTip: 'Ce texte sera affiché du côté du client, fournissant des indications de base sur comment utiliser l\'application',
webDescPlaceholder: 'Entrez la description de la WebApp',
language: 'Langue',
more: {
entry: 'Montrer plus de paramètres',
copyright: 'Droit d\'auteur',
copyRightPlaceholder: 'Entrez le nom de l\'auteur ou de l\'organisation',
privacyPolicy: 'Politique de Confidentialité',
privacyPolicyPlaceholder: 'Entrez le lien de la politique de confidentialité',
privacyPolicyTip: 'Aide les visiteurs à comprendre les données que l\'application collecte, voir la <privacyPolicyLink>Politique de Confidentialité</privacyPolicyLink> de Dify.',
},
},
embedded: {
entry: 'Intégré',
title: 'Intégrer sur le site web',
explanation: 'Choisissez la manière d\'intégrer l\'application de chat à votre site web',
iframe: 'Pour ajouter l\'application de chat n\'importe où sur votre site web, ajoutez cette iframe à votre code html.',
scripts: 'Pour ajouter une application de chat en bas à droite de votre site web, ajoutez ce code à votre html.',
chromePlugin: 'Installez l\'extension Chrome Dify Chatbot',
copied: 'Copié',
copy: 'Copier',
},
qrcode: {
title: 'QR code à partager',
scan: 'Application de Partage de Scan',
download: 'Télécharger le Code QR',
},
customize: {
way: 'manière',
entry: 'Personnaliser',
title: 'Personnaliser l\'WebApp IA',
explanation: 'Vous pouvez personnaliser l\'interface utilisateur de l\'application Web pour répondre à vos besoins en termes de scénario et de style.',
way1: {
name: 'Faites une fourchette du code client, modifiez-le et déployez-le sur Vercel (recommandé)',
step1: 'Faites une fourchette du code client et modifiez-le',
step1Tip: 'Cliquez ici pour bifurquer le code source dans votre compte GitHub et modifier le code',
step1Operation: 'Dify-WebClient',
step2: 'Déployer sur Vercel',
step2Tip: 'Cliquez ici pour importer le dépôt dans Vercel et déployer',
step2Operation: 'Importer le dépôt',
step3: 'Configurer les variables d\'environnement',
step3Tip: 'Ajoutez les variables d\'environnement suivantes dans Vercel',
},
way2: {
name: 'Écrivez du code côté client pour appeler l\'API et déployez-le sur un serveur',
operation: 'Documentation',
},
},
},
apiInfo: {
title: 'API du service Backend',
explanation: 'Facilement intégré dans votre application',
accessibleAddress: 'Point de terminaison du service API',
doc: 'Référence API',
},
status: {
running: 'En service',
disable: 'Désactiver',
},
},
analysis: {
title: 'Analyse',
ms: 'ms',
tokenPS: 'Jeton/s',
totalMessages: {
title: 'Messages Totaux',
explanation: 'Nombre quotidien d\'interactions IA ; ingénierie/debuggage de prompt exclu.',
},
activeUsers: {
title: 'Utilisateurs Actifs',
explanation: 'Utilisateurs uniques participant à des Q&A avec l\'IA ; l\'ingénierie/débogage de prompt exclu.',
},
tokenUsage: {
title: 'Utilisation de Token',
explanation: 'Reflet de l\'utilisation quotidienne des jetons du modèle de langage pour l\'application, utile à des fins de contrôle des coûts.',
consumed: 'Consommé',
},
avgSessionInteractions: {
title: 'Interactions Moyennes par Session',
explanation: 'Comptage continu de la communication utilisateur-IA ; pour les applications basées sur la conversation.',
},
userSatisfactionRate: {
title: 'Taux de Satisfaction de l\'Utilisateur',
explanation: 'Le nombre de "j\'aime" par 1 000 messages. Cela indique la proportion de réponses dont les utilisateurs sont très satisfaits.',
},
avgResponseTime: {
title: 'Temps de réponse moyen',
explanation: 'Temps (ms) pour que l\'IA traite/réponde; pour les applications basées sur le texte.',
},
tps: {
title: 'Vitesse de Sortie des Tokens',
explanation: 'Mesurez la performance du LLM. Comptez la vitesse de sortie des Tokens du LLM depuis le début de la demande jusqu\'à l\'achèvement de la sortie.',
},
},
}
export default translation
const translation = {
createApp: 'Créer une nouvelle application',
types: {
all: 'Tout',
assistant: 'Assistant',
completion: 'Complétion',
},
modes: {
completion: 'Générateur de Texte',
chat: 'Assistant de Base',
},
createFromConfigFile: 'Créer une application à partir du fichier de configuration',
deleteAppConfirmTitle: 'Supprimer cette application ?',
deleteAppConfirmContent:
'La suppression de l\'application est irréversible. Les utilisateurs ne pourront plus accéder à votre application, et toutes les configurations de prompt et les journaux seront définitivement supprimés.',
appDeleted: 'Application supprimée',
appDeleteFailed: 'Échec de la suppression de l\'application',
join: 'Rejoignez la communauté',
communityIntro:
'Discutez avec les membres de l\'équipe, les contributeurs et les développeurs sur différents canaux.',
roadmap: 'Voir notre feuille de route',
appNamePlaceholder: 'Veuillez entrer le nom de l\'application',
newApp: {
startToCreate: 'Commençons avec votre nouvelle application',
captionName: 'Icône et nom de l\'application',
captionAppType: 'Quel type d\'application voulez-vous créer ?',
previewDemo: 'Aperçu de la démo',
chatApp: 'Assistant',
chatAppIntro:
'Je veux construire une application basée sur le chat. Cette application utilise un format de questions-réponses, permettant plusieurs tours de conversation continue.',
agentAssistant: 'Nouvel Assistant Agent',
completeApp: 'Générateur de Texte',
completeAppIntro:
'Je veux créer une application qui génère du texte de haute qualité basé sur des prompts, tels que la génération d\'articles, de résumés, de traductions, et plus encore.',
showTemplates: 'Je veux choisir à partir d\'un modèle',
hideTemplates: 'Revenir à la sélection de mode',
Create: 'Créer',
Cancel: 'Annuler',
nameNotEmpty: 'Le nom ne peut pas être vide',
appTemplateNotSelected: 'Veuillez sélectionner un modèle',
appTypeRequired: 'Veuillez sélectionner un type d\'application',
appCreated: 'Application créée',
appCreateFailed: 'Échec de la création de l\'application',
},
editApp: {
startToEdit: 'Modifier l\'application',
},
emoji: {
ok: 'D\'accord',
cancel: 'Annuler',
},
}
export default translation
const translation = {
currentPlan: 'Plan Actuel',
upgradeBtn: {
plain: 'Mettre à jour le plan',
encourage: 'Mettre à niveau maintenant',
encourageShort: 'Mise à niveau',
},
viewBilling: 'Gérer la facturation et les abonnements',
buyPermissionDeniedTip: 'Veuillez contacter votre administrateur d\'entreprise pour vous abonner',
plansCommon: {
title: 'Choisissez un plan qui vous convient',
yearlyTip: 'Obtenez 2 mois gratuitement en vous abonnant annuellement !',
mostPopular: 'Le Plus Populaire',
planRange: {
monthly: 'Mensuel',
yearly: 'Annuel',
},
month: 'mois',
year: 'année',
save: 'Enregistrer',
free: 'Gratuit',
currentPlan: 'Plan Actuel',
contractSales: 'Contactez les ventes',
contractOwner: 'Contacter le chef d\'équipe',
startForFree: 'Commencez gratuitement',
getStartedWith: 'Commencez avec',
contactSales: 'Contacter les ventes',
talkToSales: 'Parlez aux Ventes',
modelProviders: 'Fournisseurs de Modèles',
teamMembers: 'Membres de l\'équipe',
buildApps: 'Construire des Applications',
vectorSpace: 'Espace Vectoriel',
vectorSpaceBillingTooltip: 'Chaque 1MB peut stocker environ 1,2 million de caractères de données vectorisées (estimé en utilisant les embeddings OpenAI, varie selon les modèles).',
vectorSpaceTooltip: 'L\'espace vectoriel est le système de mémoire à long terme nécessaire pour que les LLMs comprennent vos données.',
documentsUploadQuota: 'Quota de téléchargement de documents',
documentProcessingPriority: 'Priorité de Traitement de Document',
documentProcessingPriorityTip: 'Pour une priorité de traitement de documents plus élevée, veuillez mettre à niveau votre plan.',
documentProcessingPriorityUpgrade: 'Traitez plus de données avec une précision plus élevée à des vitesses plus rapides.',
priority: {
'standard': 'Standard',
'priority': 'Priorité',
'top-priority': 'Priorité Maximale',
},
logsHistory: 'Historique des logs',
customTools: 'Outils personnalisés',
unavailable: 'Indisponible',
days: 'jours',
unlimited: 'Illimité',
support: 'Assistance',
supportItems: {
communityForums: 'Forums communautaires',
emailSupport: 'Support par email',
priorityEmail: 'Support prioritaire par email et chat',
logoChange: 'Changement de logo',
SSOAuthentication: 'Authentification SSO',
personalizedSupport: 'Soutien personnalisé',
dedicatedAPISupport: 'Support dédié pour l\'API',
customIntegration: 'Intégration personnalisée et support',
ragAPIRequest: 'Requêtes API RAG',
bulkUpload: 'Téléchargement en masse de documents',
agentMode: 'Mode Agent',
workflow: 'Flux de travail',
},
comingSoon: 'Bientôt disponible',
member: 'Membre',
memberAfter: 'Membre',
messageRequest: {
title: 'Crédits de message',
tooltip: 'Quotas d\'invocation de messages pour divers plans utilisant les modèles OpenAI (sauf gpt4). Les messages dépassant la limite utiliseront votre clé API OpenAI.',
},
annotatedResponse: {
title: 'Limites de quota d\'annotation',
tooltip: 'L\'édition manuelle et l\'annotation des réponses fournissent des capacités de réponse aux questions de haute qualité personnalisables pour les applications. (Applicable uniquement dans les applications de chat)',
},
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',
},
plans: {
sandbox: {
name: 'Bac à sable',
description: '200 essais gratuits de GPT',
includesTitle: 'Inclus :',
},
professional: {
name: 'Professionnel',
description: 'Pour les individus et les petites équipes afin de débloquer plus de puissance à un prix abordable.',
includesTitle: 'Tout ce qui est dans le plan gratuit, plus :',
},
team: {
name: 'Équipe',
description: 'Collaborez sans limites et profitez d\'une performance de premier ordre.',
includesTitle: 'Tout ce qui est inclus dans le plan Professionnel, plus :',
},
enterprise: {
name: 'Entreprise',
description: 'Obtenez toutes les capacités et le support pour les systèmes à grande échelle et critiques pour la mission.',
includesTitle: 'Tout ce qui est inclus dans le plan Équipe, plus :',
},
},
vectorSpace: {
fullTip: 'L\'espace vectoriel est plein.',
fullSolution: 'Mettez à niveau votre plan pour obtenir plus d\'espace.',
},
apps: {
fullTipLine1: 'Mettez à jour votre plan pour',
fullTipLine2: 'construire plus d\'applications.',
},
annotatedResponse: {
fullTipLine1: 'Mettez à niveau votre plan pour',
fullTipLine2: 'annotez plus de conversations.',
quotaTitle: 'Quota de Réponse d\'Annotation',
},
}
export default translation
This diff is collapsed.
const translation = {
custom: 'Personnalisation',
upgradeTip: {
prefix: 'Mettez à niveau votre plan pour',
suffix: 'personnalisez votre marque.',
},
webapp: {
title: 'Personnalisez la marque WebApp',
removeBrand: 'Supprimer Propulsé par Dify',
changeLogo: 'Changer Propulsé par l\'Image de Marque',
changeLogoTip: 'Format SVG ou PNG avec une taille minimum de 40x40px',
},
app: {
title: 'Personnaliser la marque de l\'en-tête de l\'application',
changeLogoTip: 'Format SVG ou PNG avec une taille minimale de 80x80px',
},
upload: 'Télécharger',
uploading: 'Téléchargement',
uploadedFail: 'Le téléchargement de l\'image a échoué, veuillez la télécharger à nouveau.',
change: 'Changer',
apply: 'Appliquer',
restore: 'Rétablir les paramètres par défaut',
customize: {
contactUs: 'Contactez-nous',
prefix: 'Pour personnaliser le logo de la marque dans l\'application, s\'il vous plaît',
suffix: 'pour passer à l\'édition Enterprise.',
},
}
export default translation
const translation = {
steps: {
header: {
creation: 'Créer des Connaissances',
update: 'Ajouter des données',
},
one: 'Choisissez la source de données',
two: 'Prétraitement et Nettoyage du Texte',
three: 'Exécutez et terminez',
},
error: {
unavailable: 'Cette connaissance n\'est pas disponible',
},
stepOne: {
filePreview: 'Aperçu du fichier',
pagePreview: 'Aperçu de la page',
dataSourceType: {
file: 'Importer à partir d\'un fichier texte',
notion: 'Synchroniser depuis Notion',
web: 'Synchroniser depuis le site web',
},
uploader: {
title: 'Télécharger le fichier texte',
button: 'Glisser et déposer le fichier, ou',
browse: 'Parcourir',
tip: 'Prend en charge {{supportTypes}}. Max {{size}}MB chacun.',
validation: {
typeError: 'Type de fichier non pris en charge',
size: 'Fichier trop volumineux. Le maximum est de {{size}}MB',
count: 'Plusieurs fichiers non pris en charge',
filesNumber: 'Vous avez atteint la limite de téléchargement par lot de {{filesNumber}}.',
},
cancel: 'Annuler',
change: 'Changer',
failed: 'Le téléchargement a échoué',
},
notionSyncTitle: 'Notion n\'est pas connecté',
notionSyncTip: 'Pour synchroniser avec Notion, une connexion à Notion doit d\'abord être établie.',
connect: 'Aller à connecter',
button: 'suivant',
emptyDatasetCreation: 'Je veux créer un Savoir vide',
modal: {
title: 'Créer une Connaissance vide',
tip: 'Une Connaissance vide ne contiendra aucun document, et vous pouvez télécharger des documents à tout moment.',
input: 'Nom de la connaissance',
placeholder: 'Veuillez entrer',
nameNotEmpty: 'Le nom ne peut pas être vide',
nameLengthInvaild: 'Le nom doit comporter entre 1 et 40 caractères.',
cancelButton: 'Annuler',
confirmButton: 'Créer',
failed: 'Création échouée',
},
},
stepTwo: {
segmentation: 'Paramètres de bloc',
auto: 'Automatique',
autoDescription: 'Définir automatiquement les règles de découpage et de prétraitement. Il est recommandé aux utilisateurs non familiers de sélectionner ceci.',
custom: 'Personnalisé',
customDescription: 'Personnalisez les règles de morceaux, la longueur des morceaux et les règles de prétraitement, etc.',
separator: 'Identifiant de segment',
separatorPlaceholder: 'Par exemple, nouvelle ligne (\\\\n) ou séparateur spécial (tel que "***")',
maxLength: 'Longueur maximale du morceau',
overlap: 'Chevauchement de morceaux',
overlapTip: 'La définition d\'un chevauchement de morceaux peut maintenir la pertinence sémantique entre eux, améliorant ainsi l\'effet de récupération. Il est recommandé de définir 10%-25% de la taille maximale du morceau.',
overlapCheck: 'le chevauchement de morceaux ne doit pas être plus grand que la longueur maximale de morceau',
rules: 'Règles de prétraitement du texte',
removeExtraSpaces: 'Remplacer les espaces consécutifs, les sauts de ligne et les tabulations',
removeUrlEmails: 'Supprimez toutes les URL et adresses e-mail',
removeStopwords: 'Supprimez les mots vides tels que "a", "an", "the"',
preview: 'Confirmer & Aperçu',
reset: 'Réinitialiser',
indexMode: 'Mode d\'index',
qualified: 'Haute Qualité',
recommend: 'Recommander',
qualifiedTip: 'Appelez l\'interface d\'embedding système par défaut pour le traitement afin de fournir une précision plus élevée lorsque les utilisateurs font une requête.',
warning: 'Veuillez d\'abord configurer la clé API du fournisseur de modèle.',
click: 'Aller aux paramètres',
economical: 'Économique',
economicalTip: 'Utilisez des moteurs vectoriels hors ligne, des index de mots-clés, etc. pour réduire la précision sans dépenser de jetons',
QATitle: 'Segmentation en format Question & Réponse',
QATip: 'Activer cette option consommera plus de jetons',
QALanguage: 'Segmenter en utilisant',
emstimateCost: 'Estimation',
emstimateSegment: 'Morceaux estimés',
segmentCount: 'morceaux',
calculating: 'En calcul...',
fileSource: 'Prétraiter les documents',
notionSource: 'Prétraiter les pages',
other: 'et autres',
fileUnit: 'fichiers',
notionUnit: 'pages',
previousStep: 'Étape précédente',
nextStep: 'Enregistrer & Traiter',
save: 'Enregistrer & Traiter',
cancel: 'Annuler',
sideTipTitle: 'Pourquoi découper et prétraiter ?',
sideTipP1: 'Lors du traitement des données textuelles, le découpage et le nettoyage sont deux étapes importantes de la prétraitement.',
sideTipP2: 'La segmentation divise les longs textes en paragraphes afin que les modèles puissent mieux comprendre. Cela améliore la qualité et la pertinence des résultats du modèle.',
sideTipP3: 'Le nettoyage élimine les caractères et les formats inutiles, rendant le Savoir plus propre et plus facile à analyser.',
sideTipP4: 'Un bon découpage et nettoyage améliorent les performances du modèle, fournissant des résultats plus précis et précieux.',
previewTitle: 'Aperçu',
previewTitleButton: 'Aperçu',
previewButton: 'Passage au format Q&R',
previewSwitchTipStart: 'L\'aperçu actuel du morceau est en format texte, passer à un aperçu en format de questions-réponses va',
previewSwitchTipEnd: 'consommer des tokens supplémentaires',
characters: 'personnages',
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.',
},
stepThree: {
creationTitle: '🎉 Connaissance créée',
creationContent: 'Nous avons automatiquement nommé le Savoir, vous pouvez le modifier à tout moment',
label: 'Nom de la connaissance',
additionTitle: '🎉 Document téléchargé',
additionP1: 'Le document a été téléchargé dans la Connaissance',
additionP2: ', vous pouvez le trouver dans la liste des documents de la Connaissance.',
stop: 'Arrêter le traitement',
resume: 'Reprendre le traitement',
navTo: 'Aller au document',
sideTipTitle: 'Qu\'est-ce qui suit ?',
sideTipContent: 'Après l\'indexation du document, la Connaissance peut être intégrée dans l\'application en tant que contexte, vous pouvez trouver le paramètre de contexte sur la page d\'orchestration de prompt. Vous pouvez également le créer en tant que plugin d\'indexation ChatGPT ind',
modelTitle: 'Êtes-vous sûr de vouloir arrêter l\'embedding ?',
modelContent: 'Si vous devez reprendre le traitement plus tard, vous continuerez à partir de l\'endroit où vous vous êtes arrêté.',
modelButtonConfirm: 'Confirmer',
modelButtonCancel: 'Annuler',
},
}
export default translation
This diff is collapsed.
const translation = {
title: 'Test de Récupération',
desc: 'Testez l\'effet d\'impact de la Connaissance basée sur le texte de la requête donnée.',
dateTimeFormat: 'JJ/MM/AAAA hh:mm A',
recents: 'Récents',
table: {
header: {
source: 'Source',
text: 'Texte',
time: 'Temps',
},
},
input: {
title: 'Texte source',
placeholder: 'Veuillez entrer un texte, une phrase déclarative courte est recommandée.',
countWarning: 'Jusqu\'à 200 caractères.',
indexWarning: 'Connaissances de haute qualité uniquement.',
testing: 'Test',
},
hit: {
title: 'PARAGRAPHES DE RÉCUPÉRATION',
emptyTip: 'Les résultats des tests de récupération s\'afficheront ici',
},
noRecentTip: 'Aucun résultat de requête récent ici',
viewChart: 'Voir GRAPHIQUE VECTORIEL',
}
export default translation
const translation = {
title: 'Paramètres de connaissance',
desc: 'Ici, vous pouvez modifier les propriétés et les méthodes de fonctionnement de la Connaissance.',
form: {
name: 'Nom de la Connaissance',
namePlaceholder: 'Veuillez entrer le nom de la Connaissance',
nameError: 'Le nom ne peut pas être vide',
desc: 'Description des connaissances',
descInfo: 'Veuillez rédiger une description textuelle claire pour décrire le contenu de la Connaissance. Cette description sera utilisée comme base pour la correspondance lors de la sélection parmi plusieurs Connaissances pour l\'inférence.',
descPlaceholder: 'Décrivez ce qui se trouve dans cette Connaissance. Une description détaillée permet à l\'IA d\'accéder au contenu de la Connaissance en temps opportun. Si vide, Dify utilisera la stratégie de hit par défaut.',
descWrite: 'Apprenez comment rédiger une bonne description de connaissance.',
permissions: 'Autorisations',
permissionsOnlyMe: 'Seulement moi',
permissionsAllMember: 'Tous les membres de l\'équipe',
indexMethod: 'Méthode d\'Indexation',
indexMethodHighQuality: 'Haute Qualité',
indexMethodHighQualityTip: 'Appelez l\'interface d\'embedding d\'OpenAI pour le traitement afin de fournir une précision plus élevée lorsque les utilisateurs font une requête.',
indexMethodEconomy: 'Économique',
indexMethodEconomyTip: 'Utilisez des moteurs vectoriels hors ligne, des index de mots-clés, etc. pour réduire la précision sans dépenser de jetons',
embeddingModel: 'Modèle d\'Embedding',
embeddingModelTip: 'Changez le modèle intégré, veuillez aller à',
embeddingModelTipLink: 'Paramètres',
retrievalSetting: {
title: 'Paramètre de récupération',
learnMore: 'En savoir plus',
description: 'à propos de la méthode de récupération.',
longDescription: 'À propos de la méthode de récupération, vous pouvez la modifier à tout moment dans les paramètres de Connaissance.',
},
save: 'Enregistrer',
},
}
export default translation
const translation = {
knowledge: 'Connaissance',
documentCount: ' documents',
wordCount: 'k mots',
appCount: ' applications liées',
createDataset: 'Créer des Connaissances',
createDatasetIntro: 'Importez vos propres données textuelles ou écrivez des données en temps réel via Webhook pour l\'amélioration du contexte LLM.',
deleteDatasetConfirmTitle: 'Supprimer cette Connaissance ?',
deleteDatasetConfirmContent:
'La suppression de la Connaissance est irréversible. Les utilisateurs ne pourront plus accéder à votre Savoir, et toutes les configurations de prompt et les journaux seront supprimés de façon permanente.',
datasetDeleted: 'Connaissance supprimée',
datasetDeleteFailed: 'Échec de la suppression de la Connaissance',
didYouKnow: 'Saviez-vous ?',
intro1: 'La Connaissance peut être intégrée dans l\'application Dify',
intro2: 'comme un contexte',
intro3: ',',
intro4: 'ou ça ',
intro5: 'peut être créé',
intro6: 'comme un plug-in d\'index ChatGPT autonome à publier',
unavailable: 'Indisponible',
unavailableTip: 'Le modèle d\'embedding n\'est pas disponible, le modèle d\'embedding par défaut doit être configuré',
datasets: 'CONNAISSANCE',
datasetsApi: 'API',
retrieval: {
semantic_search: {
title: 'Recherche Vectorielle',
description: 'Générez des embeddings de requête et recherchez le morceau de texte le plus similaire à sa représentation vectorielle.',
},
full_text_search: {
title: 'Recherche en Texte Intégral',
description: 'Indexez tous les termes dans le document, permettant aux utilisateurs de rechercher n\'importe quel terme et de récupérer le fragment de texte pertinent contenant ces termes.',
},
hybrid_search: {
title: 'Recherche Hybride',
description: 'Exécutez une recherche en texte intégral et des recherches vectorielles en même temps, réorganisez pour sélectionner la meilleure correspondance pour la requête de l\'utilisateur. La configuration de l\'API du modèle de réorganisation est nécessaire.',
recommend: 'Recommander',
},
invertedIndex: {
title: 'Index inversé',
description: 'L\'Index inversé est une structure utilisée pour une récupération efficace. Organisé par termes, chaque terme pointe vers des documents ou des pages web le contenant.',
},
change: 'Changer',
changeRetrievalMethod: 'Changer la méthode de récupération',
},
}
export default translation
const translation = {
title: 'Explorer',
sidebar: {
discovery: 'Découverte',
chat: 'Discussion',
workspace: 'Espace de travail',
action: {
pin: 'Épingle',
unpin: 'Détacher',
rename: 'Renommer',
delete: 'Supprimer',
},
delete: {
title: 'Supprimer l\'application',
content: 'Êtes-vous sûr de vouloir supprimer cette application ?',
},
},
apps: {
title: 'Explorez les applications par Dify',
description: 'Utilisez ces applications modèles instantanément ou personnalisez vos propres applications basées sur les modèles.',
allCategories: 'Toutes les catégories',
},
appCard: {
addToWorkspace: 'Ajouter à l\'espace de travail',
customize: 'Personnaliser',
},
appCustomize: {
title: 'Créer une application à partir de {{name}}',
subTitle: 'Icône de l\'application & nom',
nameRequired: 'Le nom de l\'application est requis',
},
category: {
Assistant: 'Assistant',
Writing: 'Écriture',
Translate: 'Traduire',
Programming: 'Programmation',
HR: 'RH',
},
}
export default translation
const translation = {
}
export default translation
const translation = {
pageTitle: 'Salut, commençons !👋',
welcome: 'Bienvenue sur Dify, veuillez vous connecter pour continuer.',
email: 'Adresse e-mail',
emailPlaceholder: 'Votre email',
password: 'Mot de passe',
passwordPlaceholder: 'Votre mot de passe',
name: 'Nom d\'utilisateur',
namePlaceholder: 'Votre nom d\'utilisateur',
forget: 'Mot de passe oublié ?',
signBtn: 'Se connecter',
installBtn: 'Mettre en place',
setAdminAccount: 'Configuration d\'un compte administrateur',
setAdminAccountDesc: 'Privilèges maximum pour le compte administrateur, qui peut être utilisé pour créer des applications et gérer les fournisseurs de LLM, etc.',
createAndSignIn: 'Créer et se connecter',
oneMoreStep: 'Une étape de plus',
createSample: 'Sur la base de ces informations, nous créerons une application exemple pour vous',
invitationCode: 'Code d\'invitation',
invitationCodePlaceholder: 'Votre code d\'invitation',
interfaceLanguage: 'Langue de l\'interface',
timezone: 'Fuseau horaire',
go: 'Aller à Dify',
sendUsMail: 'Envoyez-nous votre introduction, et nous nous occuperons de la demande d\'invitation.',
acceptPP: 'J\'ai lu et j\'accepte la politique de confidentialité',
reset: 'Veuillez exécuter la commande suivante pour réinitialiser votre mot de passe',
withGitHub: 'Continuer avec GitHub',
withGoogle: 'Continuer avec Google',
rightTitle: 'Débloquez le plein potentiel des LLM',
rightDesc: 'Construisez sans effort des applications IA visuellement captivantes, opérationnelles et améliorables.',
tos: 'Conditions de Service',
pp: 'Politique de Confidentialité',
tosDesc: 'En vous inscrivant, vous acceptez nos',
donthave: 'Vous n\'avez pas ?',
invalidInvitationCode: 'Code d\'invitation invalide',
accountAlreadyInited: 'Compte déjà initialisé',
error: {
emailEmpty: 'Une adresse e-mail est requise',
emailInValid: 'Veuillez entrer une adresse email valide',
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.',
},
license: {
tip: 'Avant de commencer Dify Community Edition, lisez le GitHub',
link: 'Licence Open-source',
},
join: 'Rejoindre',
joinTipStart: 'Je vous invite à rejoindre',
joinTipEnd: 'équipe sur Dify',
invalid: 'Le lien a expiré',
explore: 'Explorez Dify',
activatedTipStart: 'Vous avez rejoint le',
activatedTipEnd: 'équipe',
activated: 'Connectez-vous maintenant',
adminInitPassword: 'Mot de passe d\'initialisation de l\'administrateur',
validate: 'Valider',
}
export default translation
const translation = {
}
export default translation
const translation = {
common: {
welcome: 'Bienvenue à l\'utilisation',
appUnavailable: 'L\'application n\'est pas disponible',
appUnkonwError: 'L\'application n\'est pas disponible',
},
chat: {
newChat: 'Nouveau chat',
pinnedTitle: 'Épinglé',
unpinnedTitle: 'Discussions',
newChatDefaultName: 'Nouvelle conversation',
resetChat: 'Réinitialiser la conversation',
powerBy: 'Propulsé par',
prompt: 'Prompt',
privatePromptConfigTitle: 'Paramètres de conversation',
publicPromptConfigTitle: 'Prompt Initial',
configStatusDes: 'Avant de commencer, vous pouvez modifier les paramètres de conversation',
configDisabled:
'Les paramètres de la session précédente ont été utilisés pour cette session.',
startChat: 'Commencer le Chat',
privacyPolicyLeft:
'Veuillez lire',
privacyPolicyMiddle:
'politique de confidentialité',
privacyPolicyRight:
'fourni par le développeur de l\'application.',
deleteConversation: {
title: 'Supprimer la conversation',
content: 'Êtes-vous sûr de vouloir supprimer cette conversation ?',
},
tryToSolve: 'Essayez de résoudre',
temporarySystemIssue: 'Désolé, problème temporaire du système.',
},
generation: {
tabs: {
create: 'Exécuter une fois',
batch: 'Exécuter le lot',
saved: 'Enregistré',
},
savedNoData: {
title: 'Vous n\'avez pas encore enregistré de résultat !',
description: 'Commencez à générer du contenu et retrouvez vos résultats sauvegardés ici.',
startCreateContent: 'Commencez à créer du contenu',
},
title: 'Complétion IA',
queryTitle: 'Contenu de la requête',
completionResult: 'Résultat de la complétion',
queryPlaceholder: 'Rédigez le contenu de votre requête...',
run: 'Exécuter',
copy: 'Copier',
resultTitle: 'Complétion IA',
noData: 'L\'IA vous donnera ce que vous voulez ici.',
csvUploadTitle: 'Faites glisser et déposez votre fichier CSV ici, ou',
browse: 'parcourir',
csvStructureTitle: 'Le fichier CSV doit se conformer à la structure suivante :',
downloadTemplate: 'Téléchargez le modèle ici',
field: 'Champ',
batchFailed: {
info: '{{num}} exécutions échouées',
retry: 'Réessayer',
outputPlaceholder: 'Aucun contenu de sortie',
},
errorMsg: {
empty: 'Veuillez entrer le contenu dans le fichier téléchargé.',
fileStructNotMatch: 'Le fichier CSV téléchargé ne correspond pas à la structure.',
emptyLine: 'La ligne {{rowIndex}} est vide',
invalidLine: 'Row {{rowIndex}}: {{varName}} value can not be empty',
moreThanMaxLengthLine: 'Row {{rowIndex}}: {{varName}} value can not be more than {{maxLength}} characters',
atLeastOne: 'Veuillez entrer au moins une ligne dans le fichier téléchargé.',
},
},
}
export default translation
const translation = {
title: 'Outils',
createCustomTool: 'Créer un Outil Personnalisé',
type: {
all: 'Tout',
builtIn: 'Intégré',
custom: 'Personnalisé',
},
contribute: {
line1: 'Je suis intéressé par',
line2: 'contribuer des outils à Dify.',
viewGuide: 'Voir le guide',
},
author: 'Par',
auth: {
unauthorized: 'Pour Autoriser',
authorized: 'Autorisé',
setup: 'Mettez en place l\'autorisation à utiliser',
setupModalTitle: 'Configurer l\'Autorisation',
setupModalTitleDescription: 'Après avoir configuré les identifiants, tous les membres de l\'espace de travail peuvent utiliser cet outil lors de l\'orchestration des applications.',
},
includeToolNum: '{{num}} outils inclus',
addTool: 'Ajouter un outil',
createTool: {
title: 'Créer un Outil Personnalisé',
editAction: 'Configurer',
editTitle: 'Modifier l\'Outil Personnalisé',
name: 'Nom',
toolNamePlaceHolder: 'Entrez le nom de l\'outil',
schema: 'Schéma',
schemaPlaceHolder: 'Entrez votre schéma OpenAPI ici',
viewSchemaSpec: 'Voir la spécification OpenAPI-Swagger',
importFromUrl: 'Importer depuis l\'URL',
importFromUrlPlaceHolder: 'https://...',
urlError: 'Veuillez entrer une URL valide',
examples: 'Exemples',
exampleOptions: {
json: 'Météo(JSON)',
yaml: 'Animalerie (YAML)',
blankTemplate: 'Modèle Vierge',
},
availableTools: {
title: 'Outils Disponibles',
name: 'Nom',
description: 'Description',
method: 'Méthode',
path: 'Chemin',
action: 'Actions',
test: 'Test',
},
authMethod: {
title: 'Méthode d\'autorisation',
type: 'Type d\'autorisation',
keyTooltip: 'Clé de l\'en-tête HTTP. Vous pouvez la laisser telle quelle avec "Autorisation" si vous n\'avez aucune idée de ce que c\'est, ou la définir sur une valeur personnalisée.',
types: {
none: 'Aucun',
api_key: 'Clé API',
apiKeyPlaceholder: 'Nom de l\'en-tête HTTP pour la clé API',
apiValuePlaceholder: 'Entrez la clé API',
},
key: 'Clé',
value: 'Valeur',
},
authHeaderPrefix: {
title: 'Type d\'Authentification',
types: {
basic: 'Basique',
bearer: 'Porteur',
custom: 'Personnalisé',
},
},
privacyPolicy: 'Politique de confidentialité',
privacyPolicyPlaceholder: 'Veuillez entrer la politique de confidentialité',
},
test: {
title: 'Test',
parametersValue: 'Paramètres & Valeur',
parameters: 'Paramètres',
value: 'Valeur',
testResult: 'Résultats du Test',
testResultPlaceholder: 'Le résultat du test s\'affichera ici',
},
thought: {
using: 'Utilisation',
used: 'Utilisé',
requestTitle: 'Demande à',
responseTitle: 'Réponse de',
},
setBuiltInTools: {
info: 'Infos',
setting: 'Paramètres',
toolDescription: 'Description de l\'outil',
parameters: 'paramètres',
string: 'chaîne',
number: 'nombre',
required: 'Requis',
infoAndSetting: 'Infos & Paramètres',
},
noCustomTool: {
title: 'Pas d\'outils personnalisés !',
content: 'Ajoutez et gérez vos outils personnalisés ici pour construire des applications IA.',
createTool: 'Créer un outil',
},
noSearchRes: {
title: 'Désolé, aucun résultat !',
content: 'Nous n\'avons trouvé aucun outil correspondant à votre recherche.',
reset: 'Réinitialiser la recherche',
},
builtInPromptTitle: 'Invite',
toolRemoved: 'Outil supprimé',
notAuthorized: 'Outil non autorisé',
howToGet: 'Comment obtenir',
}
export default translation
......@@ -48,7 +48,7 @@ export const languages = [
value: 'fr-FR',
name: 'Français(France)',
example: 'Bonjour, Dify!',
supported: false,
supported: true,
},
{
value: 'de-DE',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment