mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-11-04 16:23:41 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			608 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			608 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { SubmitKey } from "../store/config";
 | 
						||
import type { PartialLocaleType } from "./index";
 | 
						||
import { getClientConfig } from "../config/client";
 | 
						||
import { SAAS_CHAT_UTM_URL } from "@/app/constant";
 | 
						||
const isApp = !!getClientConfig()?.isApp;
 | 
						||
 | 
						||
const fr: PartialLocaleType = {
 | 
						||
  WIP: "Prochainement...",
 | 
						||
  Error: {
 | 
						||
    Unauthorized: isApp
 | 
						||
      ? `😆 La conversation a rencontré quelques problèmes, pas de panique :
 | 
						||
    \\ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_UTM_URL})
 | 
						||
    \\ 2️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️`
 | 
						||
      : `😆 La conversation a rencontré quelques problèmes, pas de panique :
 | 
						||
    \ 1️⃣ Si vous souhaitez commencer sans configuration, [cliquez ici pour démarrer la conversation immédiatement 🚀](${SAAS_CHAT_UTM_URL})
 | 
						||
    \ 2️⃣ Si vous utilisez une version déployée privée, cliquez [ici](/#/auth) pour entrer la clé d'accès 🔑
 | 
						||
    \ 3️⃣ Si vous souhaitez utiliser vos propres ressources OpenAI, cliquez [ici](/#/settings) pour modifier les paramètres ⚙️
 | 
						||
 `,
 | 
						||
  },
 | 
						||
  Auth: {
 | 
						||
    Title: "Mot de passe requis",
 | 
						||
    Tips: "L'administrateur a activé la vérification par mot de passe. Veuillez entrer le code d'accès ci-dessous",
 | 
						||
    SubTips: "Ou entrez votre clé API OpenAI ou Google",
 | 
						||
    Input: "Entrez le code d'accès ici",
 | 
						||
    Confirm: "Confirmer",
 | 
						||
    Later: "Plus tard",
 | 
						||
    Return: "Retour",
 | 
						||
    SaasTips:
 | 
						||
      "La configuration est trop compliquée, je veux l'utiliser immédiatement",
 | 
						||
    TopTips:
 | 
						||
      "🥳 Offre de lancement NextChat AI, débloquez OpenAI o1, GPT-4o, Claude-3.5 et les derniers grands modèles",
 | 
						||
  },
 | 
						||
  ChatItem: {
 | 
						||
    ChatItemCount: (count: number) => `${count} conversations`,
 | 
						||
  },
 | 
						||
  Chat: {
 | 
						||
    SubTitle: (count: number) => `Total de ${count} conversations`,
 | 
						||
    EditMessage: {
 | 
						||
      Title: "Modifier l'historique des messages",
 | 
						||
      Topic: {
 | 
						||
        Title: "Sujet de la discussion",
 | 
						||
        SubTitle: "Modifier le sujet de la discussion actuel",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    Actions: {
 | 
						||
      ChatList: "Voir la liste des messages",
 | 
						||
      CompressedHistory: "Voir l'historique des prompts compressés",
 | 
						||
      Export: "Exporter l'historique de la discussion",
 | 
						||
      Copy: "Copier",
 | 
						||
      Stop: "Arrêter",
 | 
						||
      Retry: "Réessayer",
 | 
						||
      Pin: "Épingler",
 | 
						||
      PinToastContent: "1 conversation épinglée aux prompts prédéfinis",
 | 
						||
      PinToastAction: "Voir",
 | 
						||
      Delete: "Supprimer",
 | 
						||
      Edit: "Modifier",
 | 
						||
      RefreshTitle: "Actualiser le titre",
 | 
						||
      RefreshToast: "Demande d'actualisation du titre envoyée",
 | 
						||
    },
 | 
						||
    Commands: {
 | 
						||
      new: "Nouvelle discussion",
 | 
						||
      newm: "Créer une discussion à partir du masque",
 | 
						||
      next: "Discussion suivante",
 | 
						||
      prev: "Discussion précédente",
 | 
						||
      clear: "Effacer le contexte",
 | 
						||
      del: "Supprimer la discussion",
 | 
						||
    },
 | 
						||
    InputActions: {
 | 
						||
      Stop: "Arrêter la réponse",
 | 
						||
      ToBottom: "Aller au plus récent",
 | 
						||
      Theme: {
 | 
						||
        auto: "Thème automatique",
 | 
						||
        light: "Mode clair",
 | 
						||
        dark: "Mode sombre",
 | 
						||
      },
 | 
						||
      Prompt: "Commandes rapides",
 | 
						||
      Masks: "Tous les masques",
 | 
						||
      Clear: "Effacer la discussion",
 | 
						||
      Settings: "Paramètres de la discussion",
 | 
						||
      UploadImage: "Télécharger une image",
 | 
						||
    },
 | 
						||
    Rename: "Renommer la discussion",
 | 
						||
    Typing: "En train d'écrire…",
 | 
						||
    Input: (submitKey: string) => {
 | 
						||
      var inputHints = `${submitKey} pour envoyer`;
 | 
						||
      if (submitKey === String(SubmitKey.Enter)) {
 | 
						||
        inputHints += ",Shift + Enter pour passer à la ligne";
 | 
						||
      }
 | 
						||
      return inputHints + ",/ pour compléter, : pour déclencher des commandes";
 | 
						||
    },
 | 
						||
    Send: "Envoyer",
 | 
						||
    Config: {
 | 
						||
      Reset: "Effacer la mémoire",
 | 
						||
      SaveAs: "Enregistrer comme masque",
 | 
						||
    },
 | 
						||
    IsContext: "Prompt prédéfini",
 | 
						||
  },
 | 
						||
  Export: {
 | 
						||
    Title: "Partager l'historique des discussions",
 | 
						||
    Copy: "Tout copier",
 | 
						||
    Download: "Télécharger le fichier",
 | 
						||
    Share: "Partager sur ShareGPT",
 | 
						||
    MessageFromYou: "Utilisateur",
 | 
						||
    MessageFromChatGPT: "ChatGPT",
 | 
						||
    Format: {
 | 
						||
      Title: "Format d'exportation",
 | 
						||
      SubTitle: "Vous pouvez exporter en texte Markdown ou en image PNG",
 | 
						||
    },
 | 
						||
    IncludeContext: {
 | 
						||
      Title: "Inclure le contexte du masque",
 | 
						||
      SubTitle: "Afficher le contexte du masque dans les messages",
 | 
						||
    },
 | 
						||
    Steps: {
 | 
						||
      Select: "Sélectionner",
 | 
						||
      Preview: "Aperçu",
 | 
						||
    },
 | 
						||
    Image: {
 | 
						||
      Toast: "Génération de la capture d'écran",
 | 
						||
      Modal:
 | 
						||
        "Appuyez longuement ou faites un clic droit pour enregistrer l'image",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Select: {
 | 
						||
    Search: "Rechercher des messages",
 | 
						||
    All: "Tout sélectionner",
 | 
						||
    Latest: "Derniers messages",
 | 
						||
    Clear: "Effacer la sélection",
 | 
						||
  },
 | 
						||
  Memory: {
 | 
						||
    Title: "Résumé historique",
 | 
						||
    EmptyContent: "Le contenu de la discussion est trop court pour être résumé",
 | 
						||
    Send: "Compresser automatiquement l'historique des discussions et l'envoyer comme contexte",
 | 
						||
    Copy: "Copier le résumé",
 | 
						||
    Reset: "[unused]",
 | 
						||
    ResetConfirm: "Confirmer la suppression du résumé historique ?",
 | 
						||
  },
 | 
						||
  Home: {
 | 
						||
    NewChat: "Nouvelle discussion",
 | 
						||
    DeleteChat: "Confirmer la suppression de la discussion sélectionnée ?",
 | 
						||
    DeleteToast: "Discussion supprimée",
 | 
						||
    Revert: "Annuler",
 | 
						||
  },
 | 
						||
  Settings: {
 | 
						||
    Title: "Paramètres",
 | 
						||
    SubTitle: "Toutes les options de configuration",
 | 
						||
 | 
						||
    Danger: {
 | 
						||
      Reset: {
 | 
						||
        Title: "Réinitialiser tous les paramètres",
 | 
						||
        SubTitle:
 | 
						||
          "Réinitialiser toutes les options de configuration aux valeurs par défaut",
 | 
						||
        Action: "Réinitialiser maintenant",
 | 
						||
        Confirm: "Confirmer la réinitialisation de tous les paramètres ?",
 | 
						||
      },
 | 
						||
      Clear: {
 | 
						||
        Title: "Effacer toutes les données",
 | 
						||
        SubTitle:
 | 
						||
          "Effacer toutes les discussions et les données de configuration",
 | 
						||
        Action: "Effacer maintenant",
 | 
						||
        Confirm:
 | 
						||
          "Confirmer l'effacement de toutes les discussions et données de configuration ?",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    Lang: {
 | 
						||
      Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
 | 
						||
      All: "Toutes les langues",
 | 
						||
    },
 | 
						||
    Avatar: "Avatar",
 | 
						||
    FontSize: {
 | 
						||
      Title: "Taille de la police",
 | 
						||
      SubTitle: "Taille de la police pour le contenu des discussions",
 | 
						||
    },
 | 
						||
    FontFamily: {
 | 
						||
      Title: "Police de Chat",
 | 
						||
      SubTitle:
 | 
						||
        "Police du contenu du chat, laissez vide pour appliquer la police par défaut globale",
 | 
						||
      Placeholder: "Nom de la Police",
 | 
						||
    },
 | 
						||
    InjectSystemPrompts: {
 | 
						||
      Title: "Injecter des invites système",
 | 
						||
      SubTitle:
 | 
						||
        "Ajouter de manière forcée une invite système simulée de ChatGPT au début de chaque liste de messages",
 | 
						||
    },
 | 
						||
    InputTemplate: {
 | 
						||
      Title: "Prétraitement des entrées utilisateur",
 | 
						||
      SubTitle:
 | 
						||
        "Le dernier message de l'utilisateur sera intégré dans ce modèle",
 | 
						||
    },
 | 
						||
 | 
						||
    Update: {
 | 
						||
      Version: (x: string) => `Version actuelle : ${x}`,
 | 
						||
      IsLatest: "Vous avez la dernière version",
 | 
						||
      CheckUpdate: "Vérifier les mises à jour",
 | 
						||
      IsChecking: "Vérification des mises à jour en cours...",
 | 
						||
      FoundUpdate: (x: string) => `Nouvelle version trouvée : ${x}`,
 | 
						||
      GoToUpdate: "Aller à la mise à jour",
 | 
						||
    },
 | 
						||
    SendKey: "Touche d'envoi",
 | 
						||
    Theme: "Thème",
 | 
						||
    TightBorder: "Mode sans bordure",
 | 
						||
    SendPreviewBubble: {
 | 
						||
      Title: "Bulle d'aperçu",
 | 
						||
      SubTitle: "Aperçu du contenu Markdown dans la bulle d'aperçu",
 | 
						||
    },
 | 
						||
    AutoGenerateTitle: {
 | 
						||
      Title: "Génération automatique de titres",
 | 
						||
      SubTitle:
 | 
						||
        "Générer un titre approprié en fonction du contenu de la discussion",
 | 
						||
    },
 | 
						||
    Sync: {
 | 
						||
      CloudState: "Données cloud",
 | 
						||
      NotSyncYet: "Pas encore synchronisé",
 | 
						||
      Success: "Synchronisation réussie",
 | 
						||
      Fail: "Échec de la synchronisation",
 | 
						||
 | 
						||
      Config: {
 | 
						||
        Modal: {
 | 
						||
          Title: "Configurer la synchronisation cloud",
 | 
						||
          Check: "Vérifier la disponibilité",
 | 
						||
        },
 | 
						||
        SyncType: {
 | 
						||
          Title: "Type de synchronisation",
 | 
						||
          SubTitle: "Choisissez le serveur de synchronisation préféré",
 | 
						||
        },
 | 
						||
        Proxy: {
 | 
						||
          Title: "Activer le proxy",
 | 
						||
          SubTitle:
 | 
						||
            "Lors de la synchronisation dans le navigateur, le proxy doit être activé pour éviter les restrictions de domaine croisé",
 | 
						||
        },
 | 
						||
        ProxyUrl: {
 | 
						||
          Title: "Adresse du proxy",
 | 
						||
          SubTitle:
 | 
						||
            "Uniquement pour le proxy de domaine croisé fourni par le projet",
 | 
						||
        },
 | 
						||
 | 
						||
        WebDav: {
 | 
						||
          Endpoint: "Adresse WebDAV",
 | 
						||
          UserName: "Nom d'utilisateur",
 | 
						||
          Password: "Mot de passe",
 | 
						||
        },
 | 
						||
 | 
						||
        UpStash: {
 | 
						||
          Endpoint: "URL REST Redis UpStash",
 | 
						||
          UserName: "Nom de sauvegarde",
 | 
						||
          Password: "Token REST Redis UpStash",
 | 
						||
        },
 | 
						||
      },
 | 
						||
 | 
						||
      LocalState: "Données locales",
 | 
						||
      Overview: (overview: any) => {
 | 
						||
        return `${overview.chat} discussions, ${overview.message} messages, ${overview.prompt} invites, ${overview.mask} masques`;
 | 
						||
      },
 | 
						||
      ImportFailed: "Échec de l'importation",
 | 
						||
    },
 | 
						||
    Mask: {
 | 
						||
      Splash: {
 | 
						||
        Title: "Page de démarrage du masque",
 | 
						||
        SubTitle:
 | 
						||
          "Afficher la page de démarrage du masque lors de la création d'une nouvelle discussion",
 | 
						||
      },
 | 
						||
      Builtin: {
 | 
						||
        Title: "Masquer les masques intégrés",
 | 
						||
        SubTitle:
 | 
						||
          "Masquer les masques intégrés dans toutes les listes de masques",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    Prompt: {
 | 
						||
      Disable: {
 | 
						||
        Title: "Désactiver la complétion automatique des invites",
 | 
						||
        SubTitle:
 | 
						||
          "Saisir / au début de la zone de texte pour déclencher la complétion automatique",
 | 
						||
      },
 | 
						||
      List: "Liste des invites personnalisées",
 | 
						||
      ListCount: (builtin: number, custom: number) =>
 | 
						||
        `${builtin} intégrées, ${custom} définies par l'utilisateur`,
 | 
						||
      Edit: "Modifier",
 | 
						||
      Modal: {
 | 
						||
        Title: "Liste des invites",
 | 
						||
        Add: "Créer",
 | 
						||
        Search: "Rechercher des invites",
 | 
						||
      },
 | 
						||
      EditModal: {
 | 
						||
        Title: "Modifier les invites",
 | 
						||
      },
 | 
						||
    },
 | 
						||
    HistoryCount: {
 | 
						||
      Title: "Nombre de messages historiques",
 | 
						||
      SubTitle: "Nombre de messages historiques envoyés avec chaque demande",
 | 
						||
    },
 | 
						||
    CompressThreshold: {
 | 
						||
      Title: "Seuil de compression des messages historiques",
 | 
						||
      SubTitle:
 | 
						||
        "Compresser les messages historiques lorsque leur longueur dépasse cette valeur",
 | 
						||
    },
 | 
						||
 | 
						||
    Usage: {
 | 
						||
      Title: "Vérification du solde",
 | 
						||
      SubTitle(used: any, total: any) {
 | 
						||
        return `Utilisé ce mois-ci : $${used}, Total d'abonnement : $${total}`;
 | 
						||
      },
 | 
						||
      IsChecking: "Vérification en cours…",
 | 
						||
      Check: "Re-vérifier",
 | 
						||
      NoAccess:
 | 
						||
        "Entrez la clé API ou le mot de passe d'accès pour vérifier le solde",
 | 
						||
    },
 | 
						||
 | 
						||
    Access: {
 | 
						||
      SaasStart: {
 | 
						||
        Title: "Utiliser NextChat AI",
 | 
						||
        Label: "(La solution la plus rentable)",
 | 
						||
        SubTitle:
 | 
						||
          "Officiellement maintenu par NextChat, prêt à l'emploi sans configuration, prend en charge les derniers grands modèles comme OpenAI o1, GPT-4o et Claude-3.5",
 | 
						||
        ChatNow: "Discuter maintenant",
 | 
						||
      },
 | 
						||
 | 
						||
      AccessCode: {
 | 
						||
        Title: "Mot de passe d'accès",
 | 
						||
        SubTitle: "L'administrateur a activé l'accès sécurisé",
 | 
						||
        Placeholder: "Veuillez entrer le mot de passe d'accès",
 | 
						||
      },
 | 
						||
      CustomEndpoint: {
 | 
						||
        Title: "Interface personnalisée",
 | 
						||
        SubTitle: "Utiliser un service Azure ou OpenAI personnalisé",
 | 
						||
      },
 | 
						||
      Provider: {
 | 
						||
        Title: "Fournisseur de modèle",
 | 
						||
        SubTitle: "Changer de fournisseur de service",
 | 
						||
      },
 | 
						||
      OpenAI: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé API",
 | 
						||
          SubTitle:
 | 
						||
            "Utiliser une clé OpenAI personnalisée pour contourner les restrictions d'accès par mot de passe",
 | 
						||
          Placeholder: "Clé API OpenAI",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle: "Doit inclure http(s):// en dehors de l'adresse par défaut",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Azure: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé d'interface",
 | 
						||
          SubTitle:
 | 
						||
            "Utiliser une clé Azure personnalisée pour contourner les restrictions d'accès par mot de passe",
 | 
						||
          Placeholder: "Clé API Azure",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle: "Exemple :",
 | 
						||
        },
 | 
						||
 | 
						||
        ApiVerion: {
 | 
						||
          Title: "Version de l'interface (version API azure)",
 | 
						||
          SubTitle: "Choisissez une version spécifique",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Anthropic: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé d'interface",
 | 
						||
          SubTitle:
 | 
						||
            "Utiliser une clé Anthropic personnalisée pour contourner les restrictions d'accès par mot de passe",
 | 
						||
          Placeholder: "Clé API Anthropic",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle: "Exemple :",
 | 
						||
        },
 | 
						||
 | 
						||
        ApiVerion: {
 | 
						||
          Title: "Version de l'interface (version API claude)",
 | 
						||
          SubTitle: "Choisissez une version spécifique de l'API",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Google: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé API",
 | 
						||
          SubTitle: "Obtenez votre clé API Google AI",
 | 
						||
          Placeholder: "Entrez votre clé API Google AI Studio",
 | 
						||
        },
 | 
						||
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle: "Exemple :",
 | 
						||
        },
 | 
						||
 | 
						||
        ApiVersion: {
 | 
						||
          Title: "Version de l'API (pour gemini-pro uniquement)",
 | 
						||
          SubTitle: "Choisissez une version spécifique de l'API",
 | 
						||
        },
 | 
						||
        GoogleSafetySettings: {
 | 
						||
          Title: "Niveau de filtrage de sécurité Google",
 | 
						||
          SubTitle: "Définir le niveau de filtrage du contenu",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Baidu: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé API",
 | 
						||
          SubTitle: "Utiliser une clé API Baidu personnalisée",
 | 
						||
          Placeholder: "Clé API Baidu",
 | 
						||
        },
 | 
						||
        SecretKey: {
 | 
						||
          Title: "Clé secrète",
 | 
						||
          SubTitle: "Utiliser une clé secrète Baidu personnalisée",
 | 
						||
          Placeholder: "Clé secrète Baidu",
 | 
						||
        },
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle:
 | 
						||
            "Non pris en charge pour les configurations personnalisées dans .env",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      ByteDance: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé d'interface",
 | 
						||
          SubTitle: "Utiliser une clé API ByteDance personnalisée",
 | 
						||
          Placeholder: "Clé API ByteDance",
 | 
						||
        },
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle: "Exemple :",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      Alibaba: {
 | 
						||
        ApiKey: {
 | 
						||
          Title: "Clé d'interface",
 | 
						||
          SubTitle: "Utiliser une clé API Alibaba Cloud personnalisée",
 | 
						||
          Placeholder: "Clé API Alibaba Cloud",
 | 
						||
        },
 | 
						||
        Endpoint: {
 | 
						||
          Title: "Adresse de l'interface",
 | 
						||
          SubTitle: "Exemple :",
 | 
						||
        },
 | 
						||
      },
 | 
						||
      CustomModel: {
 | 
						||
        Title: "Nom du modèle personnalisé",
 | 
						||
        SubTitle:
 | 
						||
          "Ajouter des options de modèles personnalisés, séparées par des virgules",
 | 
						||
      },
 | 
						||
    },
 | 
						||
 | 
						||
    Model: "Modèle",
 | 
						||
    CompressModel: {
 | 
						||
      Title: "Modèle de compression",
 | 
						||
      SubTitle: "Modèle utilisé pour compresser l'historique",
 | 
						||
    },
 | 
						||
    Temperature: {
 | 
						||
      Title: "Aléatoire (temperature)",
 | 
						||
      SubTitle: "Plus la valeur est élevée, plus les réponses sont aléatoires",
 | 
						||
    },
 | 
						||
    TopP: {
 | 
						||
      Title: "Échantillonnage par noyau (top_p)",
 | 
						||
      SubTitle:
 | 
						||
        "Semblable à l'aléatoire, mais ne pas modifier en même temps que l'aléatoire",
 | 
						||
    },
 | 
						||
    MaxTokens: {
 | 
						||
      Title: "Limite de réponse unique (max_tokens)",
 | 
						||
      SubTitle: "Nombre maximal de tokens utilisés pour une interaction unique",
 | 
						||
    },
 | 
						||
    PresencePenalty: {
 | 
						||
      Title: "Nouveauté du sujet (presence_penalty)",
 | 
						||
      SubTitle:
 | 
						||
        "Plus la valeur est élevée, plus il est probable d'élargir aux nouveaux sujets",
 | 
						||
    },
 | 
						||
    FrequencyPenalty: {
 | 
						||
      Title: "Pénalité de fréquence (frequency_penalty)",
 | 
						||
      SubTitle:
 | 
						||
        "Plus la valeur est élevée, plus il est probable de réduire les répétitions",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Store: {
 | 
						||
    DefaultTopic: "Nouvelle discussion",
 | 
						||
    BotHello: "Comment puis-je vous aider ?",
 | 
						||
    Error: "Une erreur est survenue, veuillez réessayer plus tard",
 | 
						||
    Prompt: {
 | 
						||
      History: (content: string) =>
 | 
						||
        "Voici le résumé de la discussion précédente : " + content,
 | 
						||
      Topic:
 | 
						||
        "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 »",
 | 
						||
      Summarize:
 | 
						||
        "Faites un résumé succinct de la discussion, à utiliser comme prompt de contexte ultérieur, en moins de 200 mots",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Copy: {
 | 
						||
    Success: "Copié dans le presse-papiers",
 | 
						||
    Failed: "Échec de la copie, veuillez autoriser l'accès au presse-papiers",
 | 
						||
  },
 | 
						||
  Download: {
 | 
						||
    Success: "Le contenu a été téléchargé dans votre répertoire.",
 | 
						||
    Failed: "Échec du téléchargement.",
 | 
						||
  },
 | 
						||
  Context: {
 | 
						||
    Toast: (x: any) => `Contient ${x} invites prédéfinies`,
 | 
						||
    Edit: "Paramètres de la discussion actuelle",
 | 
						||
    Add: "Ajouter une discussion",
 | 
						||
    Clear: "Contexte effacé",
 | 
						||
    Revert: "Restaurer le contexte",
 | 
						||
  },
 | 
						||
  Plugin: {
 | 
						||
    Name: "Plugin",
 | 
						||
  },
 | 
						||
  FineTuned: {
 | 
						||
    Sysmessage: "Vous êtes un assistant",
 | 
						||
  },
 | 
						||
  SearchChat: {
 | 
						||
    Name: "Recherche",
 | 
						||
    Page: {
 | 
						||
      Title: "Rechercher dans l'historique des discussions",
 | 
						||
      Search: "Entrez le mot-clé de recherche",
 | 
						||
      NoResult: "Aucun résultat trouvé",
 | 
						||
      NoData: "Aucune donnée",
 | 
						||
      Loading: "Chargement",
 | 
						||
 | 
						||
      SubTitle: (count: number) => `${count} résultats trouvés`,
 | 
						||
    },
 | 
						||
    Item: {
 | 
						||
      View: "Voir",
 | 
						||
    },
 | 
						||
  },
 | 
						||
  Mask: {
 | 
						||
    Name: "Masque",
 | 
						||
    Page: {
 | 
						||
      Title: "Masques de rôle prédéfinis",
 | 
						||
      SubTitle: (count: number) => `${count} définitions de rôle prédéfinies`,
 | 
						||
      Search: "Rechercher des masques de rôle",
 | 
						||
      Create: "Créer",
 | 
						||
    },
 | 
						||
    Item: {
 | 
						||
      Info: (count: number) => `Contient ${count} discussions prédéfinies`,
 | 
						||
      Chat: "Discussion",
 | 
						||
      View: "Voir",
 | 
						||
      Edit: "Modifier",
 | 
						||
      Delete: "Supprimer",
 | 
						||
      DeleteConfirm: "Confirmer la suppression ?",
 | 
						||
    },
 | 
						||
    EditModal: {
 | 
						||
      Title: (readonly: boolean) =>
 | 
						||
        `Modifier le masque prédéfini ${readonly ? " (lecture seule)" : ""}`,
 | 
						||
      Download: "Télécharger le masque",
 | 
						||
      Clone: "Cloner le masque",
 | 
						||
    },
 | 
						||
    Config: {
 | 
						||
      Avatar: "Avatar du rôle",
 | 
						||
      Name: "Nom du rôle",
 | 
						||
      Sync: {
 | 
						||
        Title: "Utiliser les paramètres globaux",
 | 
						||
        SubTitle:
 | 
						||
          "Cette discussion utilise-t-elle les paramètres du modèle globaux ?",
 | 
						||
        Confirm:
 | 
						||
          "Les paramètres personnalisés de cette discussion seront automatiquement remplacés. Confirmer l'activation des paramètres globaux ?",
 | 
						||
      },
 | 
						||
      HideContext: {
 | 
						||
        Title: "Masquer les discussions prédéfinies",
 | 
						||
        SubTitle:
 | 
						||
          "Les discussions prédéfinies ne seront pas affichées dans l'interface de discussion après masquage",
 | 
						||
      },
 | 
						||
      Share: {
 | 
						||
        Title: "Partager ce masque",
 | 
						||
        SubTitle: "Générer un lien direct pour ce masque",
 | 
						||
        Action: "Copier le lien",
 | 
						||
      },
 | 
						||
    },
 | 
						||
  },
 | 
						||
  NewChat: {
 | 
						||
    Return: "Retour",
 | 
						||
    Skip: "Commencer directement",
 | 
						||
    NotShow: "Ne plus afficher",
 | 
						||
    ConfirmNoShow:
 | 
						||
      "Confirmer la désactivation ? Vous pourrez réactiver cette option à tout moment dans les paramètres.",
 | 
						||
    Title: "Choisir un masque",
 | 
						||
    SubTitle: "Commencez maintenant, rencontrez les pensées derrière le masque",
 | 
						||
    More: "Voir tout",
 | 
						||
  },
 | 
						||
 | 
						||
  URLCommand: {
 | 
						||
    Code: "Code d'accès détecté dans le lien, souhaitez-vous le remplir automatiquement ?",
 | 
						||
    Settings:
 | 
						||
      "Paramètres prédéfinis détectés dans le lien, souhaitez-vous les remplir automatiquement ?",
 | 
						||
  },
 | 
						||
 | 
						||
  UI: {
 | 
						||
    Confirm: "Confirmer",
 | 
						||
    Cancel: "Annuler",
 | 
						||
    Close: "Fermer",
 | 
						||
    Create: "Créer",
 | 
						||
    Edit: "Modifier",
 | 
						||
    Export: "Exporter",
 | 
						||
    Import: "Importer",
 | 
						||
    Sync: "Synchroniser",
 | 
						||
    Config: "Configurer",
 | 
						||
  },
 | 
						||
  Exporter: {
 | 
						||
    Description: {
 | 
						||
      Title:
 | 
						||
        "Seuls les messages après avoir effacé le contexte seront affichés",
 | 
						||
    },
 | 
						||
    Model: "Modèle",
 | 
						||
    Messages: "Messages",
 | 
						||
    Topic: "Sujet",
 | 
						||
    Time: "Temps",
 | 
						||
  },
 | 
						||
};
 | 
						||
 | 
						||
export default fr;
 |