fr.ts 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. import { SubmitKey } from "../store/config";
  2. import type { PartialLocaleType } from "./index";
  3. import { getClientConfig } from "../config/client";
  4. const isApp = !!getClientConfig()?.isApp;
  5. const fr: PartialLocaleType = {
  6. WIP: "Prochainement...",
  7. Error: {
  8. Unauthorized: isApp
  9. ? "Clé API invalide détectée. Veuillez vérifier si la clé API est correctement configurée dans la page [Paramètres](/#/settings)."
  10. : "Le mot de passe d'accès est incorrect ou manquant. Veuillez entrer le mot de passe d'accès correct sur la page [Connexion](/#/auth) ou entrer votre propre clé API OpenAI sur la page [Paramètres](/#/settings).",
  11. },
  12. Auth: {
  13. Title: "Mot de passe requis",
  14. Tips: "L'administrateur a activé la vérification par mot de passe. Veuillez entrer le code d'accès ci-dessous",
  15. SubTips: "Ou entrez votre clé API OpenAI ou Google",
  16. Input: "Entrez le code d'accès ici",
  17. Confirm: "Confirmer",
  18. Later: "Plus tard",
  19. },
  20. ChatItem: {
  21. ChatItemCount: (count: number) => `${count} conversations`,
  22. },
  23. Chat: {
  24. SubTitle: (count: number) => `Total de ${count} conversations`,
  25. EditMessage: {
  26. Title: "Modifier l'historique des messages",
  27. Topic: {
  28. Title: "Sujet de la discussion",
  29. SubTitle: "Modifier le sujet de la discussion actuel",
  30. },
  31. },
  32. Actions: {
  33. ChatList: "Voir la liste des messages",
  34. CompressedHistory: "Voir l'historique des prompts compressés",
  35. Export: "Exporter l'historique de la discussion",
  36. Copy: "Copier",
  37. Stop: "Arrêter",
  38. Retry: "Réessayer",
  39. Pin: "Épingler",
  40. PinToastContent: "1 conversation épinglée aux prompts prédéfinis",
  41. PinToastAction: "Voir",
  42. Delete: "Supprimer",
  43. Edit: "Modifier",
  44. RefreshTitle: "Actualiser le titre",
  45. RefreshToast: "Demande d'actualisation du titre envoyée",
  46. },
  47. Commands: {
  48. new: "Nouvelle discussion",
  49. newm: "Créer une discussion à partir du masque",
  50. next: "Discussion suivante",
  51. prev: "Discussion précédente",
  52. clear: "Effacer le contexte",
  53. del: "Supprimer la discussion",
  54. },
  55. InputActions: {
  56. Stop: "Arrêter la réponse",
  57. ToBottom: "Aller au plus récent",
  58. Theme: {
  59. auto: "Thème automatique",
  60. light: "Mode clair",
  61. dark: "Mode sombre",
  62. },
  63. Prompt: "Commandes rapides",
  64. Masks: "Tous les masques",
  65. Clear: "Effacer la discussion",
  66. Settings: "Paramètres de la discussion",
  67. UploadImage: "Télécharger une image",
  68. },
  69. Rename: "Renommer la discussion",
  70. Typing: "En train d'écrire…",
  71. Input: (submitKey: string) => {
  72. var inputHints = `${submitKey} pour envoyer`;
  73. if (submitKey === String(SubmitKey.Enter)) {
  74. inputHints += ",Shift + Enter pour passer à la ligne";
  75. }
  76. return inputHints + ",/ pour compléter, : pour déclencher des commandes";
  77. },
  78. Send: "Envoyer",
  79. Config: {
  80. Reset: "Effacer la mémoire",
  81. SaveAs: "Enregistrer comme masque",
  82. },
  83. IsContext: "Prompt prédéfini",
  84. },
  85. Export: {
  86. Title: "Partager l'historique des discussions",
  87. Copy: "Tout copier",
  88. Download: "Télécharger le fichier",
  89. Share: "Partager sur ShareGPT",
  90. MessageFromYou: "Utilisateur",
  91. MessageFromChatGPT: "ChatGPT",
  92. Format: {
  93. Title: "Format d'exportation",
  94. SubTitle: "Vous pouvez exporter en texte Markdown ou en image PNG",
  95. },
  96. IncludeContext: {
  97. Title: "Inclure le contexte du masque",
  98. SubTitle: "Afficher le contexte du masque dans les messages",
  99. },
  100. Steps: {
  101. Select: "Sélectionner",
  102. Preview: "Aperçu",
  103. },
  104. Image: {
  105. Toast: "Génération de la capture d'écran",
  106. Modal:
  107. "Appuyez longuement ou faites un clic droit pour enregistrer l'image",
  108. },
  109. },
  110. Select: {
  111. Search: "Rechercher des messages",
  112. All: "Tout sélectionner",
  113. Latest: "Derniers messages",
  114. Clear: "Effacer la sélection",
  115. },
  116. Memory: {
  117. Title: "Résumé historique",
  118. EmptyContent: "Le contenu de la discussion est trop court pour être résumé",
  119. Send: "Compresser automatiquement l'historique des discussions et l'envoyer comme contexte",
  120. Copy: "Copier le résumé",
  121. Reset: "[unused]",
  122. ResetConfirm: "Confirmer la suppression du résumé historique ?",
  123. },
  124. Home: {
  125. NewChat: "Nouvelle discussion",
  126. DeleteChat: "Confirmer la suppression de la discussion sélectionnée ?",
  127. DeleteToast: "Discussion supprimée",
  128. Revert: "Annuler",
  129. },
  130. Settings: {
  131. Title: "Paramètres",
  132. SubTitle: "Toutes les options de configuration",
  133. Danger: {
  134. Reset: {
  135. Title: "Réinitialiser tous les paramètres",
  136. SubTitle:
  137. "Réinitialiser toutes les options de configuration aux valeurs par défaut",
  138. Action: "Réinitialiser maintenant",
  139. Confirm: "Confirmer la réinitialisation de tous les paramètres ?",
  140. },
  141. Clear: {
  142. Title: "Effacer toutes les données",
  143. SubTitle:
  144. "Effacer toutes les discussions et les données de configuration",
  145. Action: "Effacer maintenant",
  146. Confirm:
  147. "Confirmer l'effacement de toutes les discussions et données de configuration ?",
  148. },
  149. },
  150. Lang: {
  151. Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
  152. All: "Toutes les langues",
  153. },
  154. Avatar: "Avatar",
  155. FontSize: {
  156. Title: "Taille de la police",
  157. SubTitle: "Taille de la police pour le contenu des discussions",
  158. },
  159. FontFamily: {
  160. Title: "Police de Chat",
  161. SubTitle:
  162. "Police du contenu du chat, laissez vide pour appliquer la police par défaut globale",
  163. Placeholder: "Nom de la Police",
  164. },
  165. InjectSystemPrompts: {
  166. Title: "Injecter des invites système",
  167. SubTitle:
  168. "Ajouter de manière forcée une invite système simulée de ChatGPT au début de chaque liste de messages",
  169. },
  170. InputTemplate: {
  171. Title: "Prétraitement des entrées utilisateur",
  172. SubTitle:
  173. "Le dernier message de l'utilisateur sera intégré dans ce modèle",
  174. },
  175. Update: {
  176. Version: (x: string) => `Version actuelle : ${x}`,
  177. IsLatest: "Vous avez la dernière version",
  178. CheckUpdate: "Vérifier les mises à jour",
  179. IsChecking: "Vérification des mises à jour en cours...",
  180. FoundUpdate: (x: string) => `Nouvelle version trouvée : ${x}`,
  181. GoToUpdate: "Aller à la mise à jour",
  182. },
  183. SendKey: "Touche d'envoi",
  184. Theme: "Thème",
  185. TightBorder: "Mode sans bordure",
  186. SendPreviewBubble: {
  187. Title: "Bulle d'aperçu",
  188. SubTitle: "Aperçu du contenu Markdown dans la bulle d'aperçu",
  189. },
  190. AutoGenerateTitle: {
  191. Title: "Génération automatique de titres",
  192. SubTitle:
  193. "Générer un titre approprié en fonction du contenu de la discussion",
  194. },
  195. Sync: {
  196. CloudState: "Données cloud",
  197. NotSyncYet: "Pas encore synchronisé",
  198. Success: "Synchronisation réussie",
  199. Fail: "Échec de la synchronisation",
  200. Config: {
  201. Modal: {
  202. Title: "Configurer la synchronisation cloud",
  203. Check: "Vérifier la disponibilité",
  204. },
  205. SyncType: {
  206. Title: "Type de synchronisation",
  207. SubTitle: "Choisissez le serveur de synchronisation préféré",
  208. },
  209. Proxy: {
  210. Title: "Activer le proxy",
  211. SubTitle:
  212. "Lors de la synchronisation dans le navigateur, le proxy doit être activé pour éviter les restrictions de domaine croisé",
  213. },
  214. ProxyUrl: {
  215. Title: "Adresse du proxy",
  216. SubTitle:
  217. "Uniquement pour le proxy de domaine croisé fourni par le projet",
  218. },
  219. WebDav: {
  220. Endpoint: "Adresse WebDAV",
  221. UserName: "Nom d'utilisateur",
  222. Password: "Mot de passe",
  223. },
  224. UpStash: {
  225. Endpoint: "URL REST Redis UpStash",
  226. UserName: "Nom de sauvegarde",
  227. Password: "Token REST Redis UpStash",
  228. },
  229. },
  230. LocalState: "Données locales",
  231. Overview: (overview: any) => {
  232. return `${overview.chat} discussions, ${overview.message} messages, ${overview.prompt} invites, ${overview.mask} masques`;
  233. },
  234. ImportFailed: "Échec de l'importation",
  235. },
  236. Mask: {
  237. Splash: {
  238. Title: "Page de démarrage du masque",
  239. SubTitle:
  240. "Afficher la page de démarrage du masque lors de la création d'une nouvelle discussion",
  241. },
  242. Builtin: {
  243. Title: "Masquer les masques intégrés",
  244. SubTitle:
  245. "Masquer les masques intégrés dans toutes les listes de masques",
  246. },
  247. },
  248. Prompt: {
  249. Disable: {
  250. Title: "Désactiver la complétion automatique des invites",
  251. SubTitle:
  252. "Saisir / au début de la zone de texte pour déclencher la complétion automatique",
  253. },
  254. List: "Liste des invites personnalisées",
  255. ListCount: (builtin: number, custom: number) =>
  256. `${builtin} intégrées, ${custom} définies par l'utilisateur`,
  257. Edit: "Modifier",
  258. Modal: {
  259. Title: "Liste des invites",
  260. Add: "Créer",
  261. Search: "Rechercher des invites",
  262. },
  263. EditModal: {
  264. Title: "Modifier les invites",
  265. },
  266. },
  267. HistoryCount: {
  268. Title: "Nombre de messages historiques",
  269. SubTitle: "Nombre de messages historiques envoyés avec chaque demande",
  270. },
  271. CompressThreshold: {
  272. Title: "Seuil de compression des messages historiques",
  273. SubTitle:
  274. "Compresser les messages historiques lorsque leur longueur dépasse cette valeur",
  275. },
  276. Usage: {
  277. Title: "Vérification du solde",
  278. SubTitle(used: any, total: any) {
  279. return `Utilisé ce mois-ci : $${used}, Total d'abonnement : $${total}`;
  280. },
  281. IsChecking: "Vérification en cours…",
  282. Check: "Re-vérifier",
  283. NoAccess:
  284. "Entrez la clé API ou le mot de passe d'accès pour vérifier le solde",
  285. },
  286. Access: {
  287. AccessCode: {
  288. Title: "Mot de passe d'accès",
  289. SubTitle: "L'administrateur a activé l'accès sécurisé",
  290. Placeholder: "Veuillez entrer le mot de passe d'accès",
  291. },
  292. CustomEndpoint: {
  293. Title: "Interface personnalisée",
  294. SubTitle: "Utiliser un service Azure ou OpenAI personnalisé",
  295. },
  296. Provider: {
  297. Title: "Fournisseur de modèle",
  298. SubTitle: "Changer de fournisseur de service",
  299. },
  300. OpenAI: {
  301. ApiKey: {
  302. Title: "Clé API",
  303. SubTitle:
  304. "Utiliser une clé OpenAI personnalisée pour contourner les restrictions d'accès par mot de passe",
  305. Placeholder: "Clé API OpenAI",
  306. },
  307. Endpoint: {
  308. Title: "Adresse de l'interface",
  309. SubTitle: "Doit inclure http(s):// en dehors de l'adresse par défaut",
  310. },
  311. },
  312. Azure: {
  313. ApiKey: {
  314. Title: "Clé d'interface",
  315. SubTitle:
  316. "Utiliser une clé Azure personnalisée pour contourner les restrictions d'accès par mot de passe",
  317. Placeholder: "Clé API Azure",
  318. },
  319. Endpoint: {
  320. Title: "Adresse de l'interface",
  321. SubTitle: "Exemple :",
  322. },
  323. ApiVerion: {
  324. Title: "Version de l'interface (version API azure)",
  325. SubTitle: "Choisissez une version spécifique",
  326. },
  327. },
  328. Anthropic: {
  329. ApiKey: {
  330. Title: "Clé d'interface",
  331. SubTitle:
  332. "Utiliser une clé Anthropic personnalisée pour contourner les restrictions d'accès par mot de passe",
  333. Placeholder: "Clé API Anthropic",
  334. },
  335. Endpoint: {
  336. Title: "Adresse de l'interface",
  337. SubTitle: "Exemple :",
  338. },
  339. ApiVerion: {
  340. Title: "Version de l'interface (version API claude)",
  341. SubTitle: "Choisissez une version spécifique de l'API",
  342. },
  343. },
  344. Google: {
  345. ApiKey: {
  346. Title: "Clé API",
  347. SubTitle: "Obtenez votre clé API Google AI",
  348. Placeholder: "Entrez votre clé API Google AI Studio",
  349. },
  350. Endpoint: {
  351. Title: "Adresse de l'interface",
  352. SubTitle: "Exemple :",
  353. },
  354. ApiVersion: {
  355. Title: "Version de l'API (pour gemini-pro uniquement)",
  356. SubTitle: "Choisissez une version spécifique de l'API",
  357. },
  358. GoogleSafetySettings: {
  359. Title: "Niveau de filtrage de sécurité Google",
  360. SubTitle: "Définir le niveau de filtrage du contenu",
  361. },
  362. },
  363. Baidu: {
  364. ApiKey: {
  365. Title: "Clé API",
  366. SubTitle: "Utiliser une clé API Baidu personnalisée",
  367. Placeholder: "Clé API Baidu",
  368. },
  369. SecretKey: {
  370. Title: "Clé secrète",
  371. SubTitle: "Utiliser une clé secrète Baidu personnalisée",
  372. Placeholder: "Clé secrète Baidu",
  373. },
  374. Endpoint: {
  375. Title: "Adresse de l'interface",
  376. SubTitle:
  377. "Non pris en charge pour les configurations personnalisées dans .env",
  378. },
  379. },
  380. ByteDance: {
  381. ApiKey: {
  382. Title: "Clé d'interface",
  383. SubTitle: "Utiliser une clé API ByteDance personnalisée",
  384. Placeholder: "Clé API ByteDance",
  385. },
  386. Endpoint: {
  387. Title: "Adresse de l'interface",
  388. SubTitle: "Exemple :",
  389. },
  390. },
  391. Alibaba: {
  392. ApiKey: {
  393. Title: "Clé d'interface",
  394. SubTitle: "Utiliser une clé API Alibaba Cloud personnalisée",
  395. Placeholder: "Clé API Alibaba Cloud",
  396. },
  397. Endpoint: {
  398. Title: "Adresse de l'interface",
  399. SubTitle: "Exemple :",
  400. },
  401. },
  402. CustomModel: {
  403. Title: "Nom du modèle personnalisé",
  404. SubTitle:
  405. "Ajouter des options de modèles personnalisés, séparées par des virgules",
  406. },
  407. },
  408. Model: "Modèle",
  409. Temperature: {
  410. Title: "Aléatoire (temperature)",
  411. SubTitle: "Plus la valeur est élevée, plus les réponses sont aléatoires",
  412. },
  413. TopP: {
  414. Title: "Échantillonnage par noyau (top_p)",
  415. SubTitle:
  416. "Semblable à l'aléatoire, mais ne pas modifier en même temps que l'aléatoire",
  417. },
  418. MaxTokens: {
  419. Title: "Limite de réponse unique (max_tokens)",
  420. SubTitle: "Nombre maximal de tokens utilisés pour une interaction unique",
  421. },
  422. PresencePenalty: {
  423. Title: "Nouveauté du sujet (presence_penalty)",
  424. SubTitle:
  425. "Plus la valeur est élevée, plus il est probable d'élargir aux nouveaux sujets",
  426. },
  427. FrequencyPenalty: {
  428. Title: "Pénalité de fréquence (frequency_penalty)",
  429. SubTitle:
  430. "Plus la valeur est élevée, plus il est probable de réduire les répétitions",
  431. },
  432. },
  433. Store: {
  434. DefaultTopic: "Nouvelle discussion",
  435. BotHello: "Comment puis-je vous aider ?",
  436. Error: "Une erreur est survenue, veuillez réessayer plus tard",
  437. Prompt: {
  438. History: (content: string) =>
  439. "Voici le résumé de la discussion précédente : " + content,
  440. Topic:
  441. "Utilisez quatre à cinq mots pour retourner le sujet succinct de cette phrase, sans explication, sans ponctuation, sans interjections, sans texte superflu, sans gras. Si aucun sujet, retournez simplement « discussion informelle »",
  442. Summarize:
  443. "Faites un résumé succinct de la discussion, à utiliser comme prompt de contexte ultérieur, en moins de 200 mots",
  444. },
  445. },
  446. Copy: {
  447. Success: "Copié dans le presse-papiers",
  448. Failed: "Échec de la copie, veuillez autoriser l'accès au presse-papiers",
  449. },
  450. Download: {
  451. Success: "Le contenu a été téléchargé dans votre répertoire.",
  452. Failed: "Échec du téléchargement.",
  453. },
  454. Context: {
  455. Toast: (x: any) => `Contient ${x} invites prédéfinies`,
  456. Edit: "Paramètres de la discussion actuelle",
  457. Add: "Ajouter une discussion",
  458. Clear: "Contexte effacé",
  459. Revert: "Restaurer le contexte",
  460. },
  461. Plugin: {
  462. Name: "Plugin",
  463. },
  464. FineTuned: {
  465. Sysmessage: "Vous êtes un assistant",
  466. },
  467. SearchChat: {
  468. Name: "Recherche",
  469. Page: {
  470. Title: "Rechercher dans l'historique des discussions",
  471. Search: "Entrez le mot-clé de recherche",
  472. NoResult: "Aucun résultat trouvé",
  473. NoData: "Aucune donnée",
  474. Loading: "Chargement",
  475. SubTitle: (count: number) => `${count} résultats trouvés`,
  476. },
  477. Item: {
  478. View: "Voir",
  479. },
  480. },
  481. Mask: {
  482. Name: "Masque",
  483. Page: {
  484. Title: "Masques de rôle prédéfinis",
  485. SubTitle: (count: number) => `${count} définitions de rôle prédéfinies`,
  486. Search: "Rechercher des masques de rôle",
  487. Create: "Créer",
  488. },
  489. Item: {
  490. Info: (count: number) => `Contient ${count} discussions prédéfinies`,
  491. Chat: "Discussion",
  492. View: "Voir",
  493. Edit: "Modifier",
  494. Delete: "Supprimer",
  495. DeleteConfirm: "Confirmer la suppression ?",
  496. },
  497. EditModal: {
  498. Title: (readonly: boolean) =>
  499. `Modifier le masque prédéfini ${readonly ? " (lecture seule)" : ""}`,
  500. Download: "Télécharger le masque",
  501. Clone: "Cloner le masque",
  502. },
  503. Config: {
  504. Avatar: "Avatar du rôle",
  505. Name: "Nom du rôle",
  506. Sync: {
  507. Title: "Utiliser les paramètres globaux",
  508. SubTitle:
  509. "Cette discussion utilise-t-elle les paramètres du modèle globaux ?",
  510. Confirm:
  511. "Les paramètres personnalisés de cette discussion seront automatiquement remplacés. Confirmer l'activation des paramètres globaux ?",
  512. },
  513. HideContext: {
  514. Title: "Masquer les discussions prédéfinies",
  515. SubTitle:
  516. "Les discussions prédéfinies ne seront pas affichées dans l'interface de discussion après masquage",
  517. },
  518. Share: {
  519. Title: "Partager ce masque",
  520. SubTitle: "Générer un lien direct pour ce masque",
  521. Action: "Copier le lien",
  522. },
  523. },
  524. },
  525. NewChat: {
  526. Return: "Retour",
  527. Skip: "Commencer directement",
  528. NotShow: "Ne plus afficher",
  529. ConfirmNoShow:
  530. "Confirmer la désactivation ? Vous pourrez réactiver cette option à tout moment dans les paramètres.",
  531. Title: "Choisir un masque",
  532. SubTitle: "Commencez maintenant, rencontrez les pensées derrière le masque",
  533. More: "Voir tout",
  534. },
  535. URLCommand: {
  536. Code: "Code d'accès détecté dans le lien, souhaitez-vous le remplir automatiquement ?",
  537. Settings:
  538. "Paramètres prédéfinis détectés dans le lien, souhaitez-vous les remplir automatiquement ?",
  539. },
  540. UI: {
  541. Confirm: "Confirmer",
  542. Cancel: "Annuler",
  543. Close: "Fermer",
  544. Create: "Créer",
  545. Edit: "Modifier",
  546. Export: "Exporter",
  547. Import: "Importer",
  548. Sync: "Synchroniser",
  549. Config: "Configurer",
  550. },
  551. Exporter: {
  552. Description: {
  553. Title:
  554. "Seuls les messages après avoir effacé le contexte seront affichés",
  555. },
  556. Model: "Modèle",
  557. Messages: "Messages",
  558. Topic: "Sujet",
  559. Time: "Temps",
  560. },
  561. };
  562. export default fr;