import type { PartialLocaleType } from './index'; import { SAAS_CHAT_UTM_URL } from '@/app/constant'; import { getClientConfig } from '../config/client'; import { SubmitKey } from '../store/config'; 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) => { let 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;