diff --git a/i18n/i18next-config.ts b/i18n/i18next-config.ts index 522fa398..d091cdf1 100644 --- a/i18n/i18next-config.ts +++ b/i18n/i18next-config.ts @@ -6,15 +6,18 @@ import commonEs from './lang/common.es' import commonZh from './lang/common.zh' import commonVi from './lang/common.vi' import commonJa from './lang/common.ja' +import commonFr from './lang/common.fr' import appEn from './lang/app.en' import appEs from './lang/app.es' import appZh from './lang/app.zh' import appVi from './lang/app.vi' import appJa from './lang/app.ja' +import appFr from './lang/app.fr' import toolsEn from './lang/tools.en' import toolsZh from './lang/tools.zh' import toolsVi from './lang/tools.vi' import toolsJa from './lang/tools.ja' +import toolsFr from './lang/tools.fr' import type { Locale } from '.' @@ -57,6 +60,14 @@ const resources = { tools: toolsJa, }, }, + 'fr': { + translation: { + common: commonFr, + app: appFr, + // tools + tools: toolsFr, + }, + }, } i18n.use(initReactI18next) diff --git a/i18n/index.ts b/i18n/index.ts index 1a2729ff..82a212b6 100644 --- a/i18n/index.ts +++ b/i18n/index.ts @@ -1,6 +1,6 @@ export const i18n = { defaultLocale: 'en', - locales: ['en', 'es', 'zh-Hans', 'ja'], + locales: ['en', 'es', 'zh-Hans', 'ja', 'fr'], } as const export type Locale = typeof i18n['locales'][number] diff --git a/i18n/lang/app.fr.ts b/i18n/lang/app.fr.ts new file mode 100644 index 00000000..68500778 --- /dev/null +++ b/i18n/lang/app.fr.ts @@ -0,0 +1,37 @@ +const translation = { + common: { + welcome: 'Bienvenue sur l\'application', + appUnavailable: 'L\'application n\'est pas disponible', + appUnkonwError: 'L\'application n\'est pas disponible', + }, + chat: { + newChat: 'Nouvelle conversation', + newChatDefaultName: 'Nouvelle conversation', + openingStatementTitle: 'Phrase d\'ouverture', + powerBy: 'Propulsé par', + prompt: 'Prompt', + privatePromptConfigTitle: 'Param tres de la conversation', + publicPromptConfigTitle: 'Prompt initial', + configStatusDes: 'Avant de commencer, vous pouvez modifier les paramètres de la conversation', + configDisabled: + 'Les paramètres de la session précédente ont été utilisés pour cette session.', + startChat: 'Démarrer la conversation', + privacyPolicyLeft: + 'Veuillez lire la ', + privacyPolicyMiddle: + 'politique de confidentialité ', + privacyPolicyRight: + ' fournie par le développeur de l\'application.', + }, + errorMessage: { + valueOfVarRequired: 'La valeur des variables ne peut pas être vide', + waitForResponse: + 'Veuillez attendre que la réponse au message précédent soit terminée.', + }, + variableTable: { + optional: 'Facultatif', + }, +} + +export default translation + diff --git a/i18n/lang/common.fr.ts b/i18n/lang/common.fr.ts new file mode 100644 index 00000000..9389d85c --- /dev/null +++ b/i18n/lang/common.fr.ts @@ -0,0 +1,34 @@ +const translation = { + api: { + success: 'Succès', + saved: 'Enregistré', + create: 'Créé', + }, + operation: { + confirm: 'Confirmer', + cancel: 'Annuler', + clear: 'Effacer', + save: 'Enregistrer', + edit: 'Éditer', + refresh: 'Redémarrer', + search: 'Rechercher', + send: 'Envoyer', + lineBreak: 'Saut de ligne', + like: 'like', + dislike: 'dislike', + ok: 'D\'accord', + }, + imageUploader: { + uploadFromComputer: 'Télécharger depuis l\'ordinateur', + uploadFromComputerReadError: 'Édition de l\'image échouée, veuillez essayer à nouveau.', + uploadFromComputerUploadError: 'Édition de l\'image échouée, veuillez télécharger à nouveau.', + uploadFromComputerLimit: 'Les images téléchargées ne peuvent pas dépasser {{size}} Mo', + pasteImageLink: 'Coller le lien de l\'image', + pasteImageLinkInputPlaceholder: 'Coller le lien de l\'image ici', + pasteImageLinkInvalid: 'Lien d\'image invalide', + imageUpload: 'Téléchargement d\'image', + }, +} + +export default translation + diff --git a/i18n/lang/tools.fr.ts b/i18n/lang/tools.fr.ts new file mode 100644 index 00000000..d6aeb25d --- /dev/null +++ b/i18n/lang/tools.fr.ts @@ -0,0 +1,104 @@ +const translation = { + title: 'Outils', + createCustomTool: 'Créer un outil personnalisé', + type: { + all: 'Tous', + builtIn: 'Intégré', + custom: 'Personnalisé', + }, + contribute: { + line1: 'Je suis intéressé pour ', + line2: ' contribuer à des outils de Dify.', + viewGuide: 'Voir le guide', + }, + author: 'Par', + auth: { + unauthorized: 'Autoriser', + authorized: 'Autorisé', + setup: 'Configurer l\'autorisation pour utiliser', + setupModalTitle: 'Configurer l\'autorisation', + setupModalTitleDescription: 'Aprèss avoir configuré les informations d\'identification, tous les membres de l\'espace de travail pourront utiliser cet outil pour orchestrer les applications.', + }, + includeToolNum: '{{num}} outils inclus', + addTool: 'Ajouter un outil', + createTool: { + title: 'Créer un outil personnalisé', + editAction: 'Configurer', + editTitle: 'Éditer l\'outil personnalisé', + name: 'Nom', + toolNamePlaceHolder: 'Saisissez le nom de l\'outil', + schema: 'Schéma', + schemaPlaceHolder: 'Saisissez votre schéma OpenAPI ici', + viewSchemaSpec: 'Voir la spécification OpenAPI-Swagger', + importFromUrl: 'Importer depuis une URL', + importFromUrlPlaceHolder: 'https://...', + urlError: 'Veuillez saisir une URL valide', + examples: 'Exemples', + exampleOptions: { + json: 'Météo (JSON)', + yaml: 'Pet Store (YAML)', + blankTemplate: 'Modèle vide', + }, + 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', + types: { + none: 'Aucun', + api_key: 'Clé API', + }, + key: 'Clé', + value: 'Valeur', + }, + privacyPolicy: 'Politique de confidentialité', + privacyPolicyPlaceholder: 'Veuillez saisir la politique de confidentialité', + }, + test: { + title: 'Test', + parametersValue: 'Paramètres & Valeurs', + parameters: 'Paramètres', + value: 'Valeurs', + testResult: 'Résultats du test', + testResultPlaceholder: 'Le résultat du test sera affiché ici', + }, + thought: { + using: 'En cours d\'utilisation', + used: 'Utilisé', + requestTitle: 'Demande ', + responseTitle: 'Réponse de ', + }, + setBuiltInTools: { + info: 'Informations', + setting: 'Paramétrage', + toolDescription: 'Description de l\'outil', + parameters: 'paramètres', + string: 'chaine de caractères', + number: 'nombre', + required: 'Requis', + infoAndSetting: 'Informations & Paramétrage', + }, + noCustomTool: { + title: 'Aucun outil personnalisé !', + content: 'Ajoutez et gérez vos outils personnalisé pour créer des applications d\'apprentissage automatique.', + createTool: 'Créer un outil', + }, + noSearchRes: { + title: 'Désolé, pas de résultats!', + content: 'Nous n\'avons pas trouvé d\'outils qui correspondent à votre recherche.', + reset: 'Réinitialiser la recherche', + }, + builtInPromptTitle: 'Suggestion', + toolRemoved: 'Outil supprimé', + notAuthorized: 'Outil non autorisé', +} + +export default translation +