|
|
@@ -1,294 +1,538 @@
|
|
|
import { SubmitKey } from "../store/config";
|
|
|
import type { PartialLocaleType } from "./index";
|
|
|
+import { getClientConfig } from "../config/client";
|
|
|
+
|
|
|
+const isApp = !!getClientConfig()?.isApp;
|
|
|
|
|
|
const fr: PartialLocaleType = {
|
|
|
WIP: "Prochainement...",
|
|
|
Error: {
|
|
|
- Unauthorized:
|
|
|
- "Accès non autorisé, veuillez saisir le code d'accès dans la [page](/#/auth) des paramètres.",
|
|
|
+ Unauthorized: isApp
|
|
|
+ ? "Clé API invalide détectée. Veuillez vérifier si la clé API est correctement configurée dans la page [Paramètres](/#/settings)."
|
|
|
+ : "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).",
|
|
|
+ },
|
|
|
+ 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",
|
|
|
},
|
|
|
ChatItem: {
|
|
|
- ChatItemCount: (count: number) => `${count} messages en total`,
|
|
|
+ ChatItemCount: (count: number) => `${count} conversations`,
|
|
|
},
|
|
|
Chat: {
|
|
|
- SubTitle: (count: number) => `${count} messages échangés avec ChatGPT`,
|
|
|
+ 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: "Aller à la liste de discussion",
|
|
|
- CompressedHistory: "Mémoire d'historique compressée Prompt",
|
|
|
- Export: "Exporter tous les messages en tant que Markdown",
|
|
|
+ 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",
|
|
|
- Delete: "Supprimer",
|
|
|
Pin: "Épingler",
|
|
|
- PinToastContent: "Épingler 2 messages à des messages contextuels",
|
|
|
+ PinToastContent: "1 conversation épinglée aux prompts prédéfinis",
|
|
|
PinToastAction: "Voir",
|
|
|
+ Delete: "Supprimer",
|
|
|
Edit: "Modifier",
|
|
|
},
|
|
|
Commands: {
|
|
|
- new: "Commencer une nouvelle conversation",
|
|
|
- newm: "Démarrer une nouvelle conversation avec un assistant",
|
|
|
- next: "Conversation suivante",
|
|
|
- prev: "Conversation précédente",
|
|
|
+ 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 Conversation",
|
|
|
+ del: "Supprimer la discussion",
|
|
|
},
|
|
|
InputActions: {
|
|
|
- Stop: "Stop",
|
|
|
- ToBottom: "Au dernier",
|
|
|
+ Stop: "Arrêter la réponse",
|
|
|
+ ToBottom: "Aller au plus récent",
|
|
|
Theme: {
|
|
|
- auto: "Auto",
|
|
|
- light: "Thème clair",
|
|
|
- dark: "Thème sombre",
|
|
|
+ auto: "Thème automatique",
|
|
|
+ light: "Mode clair",
|
|
|
+ dark: "Mode sombre",
|
|
|
},
|
|
|
- Prompt: "Instructions",
|
|
|
- Masks: "Assistants",
|
|
|
- Clear: "Effacer le contexte",
|
|
|
- Settings: "Réglages",
|
|
|
+ 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 conversation",
|
|
|
+ Rename: "Renommer la discussion",
|
|
|
Typing: "En train d'écrire…",
|
|
|
Input: (submitKey: string) => {
|
|
|
- var inputHints = `Appuyez sur ${submitKey} pour envoyer`;
|
|
|
+ var inputHints = `${submitKey} pour envoyer`;
|
|
|
if (submitKey === String(SubmitKey.Enter)) {
|
|
|
- inputHints += ", Shift + Enter pour insérer un saut de ligne";
|
|
|
+ inputHints += ",Shift + Enter pour passer à la ligne";
|
|
|
}
|
|
|
- return inputHints + ", / pour rechercher des prompts";
|
|
|
+ return inputHints + ",/ pour compléter, : pour déclencher des commandes";
|
|
|
},
|
|
|
Send: "Envoyer",
|
|
|
Config: {
|
|
|
- Reset: "Restaurer les paramètres par défaut",
|
|
|
- SaveAs: "Enregistrer en tant que masque",
|
|
|
+ Reset: "Effacer la mémoire",
|
|
|
+ SaveAs: "Enregistrer comme masque",
|
|
|
},
|
|
|
+ IsContext: "Prompt prédéfini",
|
|
|
},
|
|
|
Export: {
|
|
|
- Title: "Tous les messages",
|
|
|
- Copy: "Tout sélectionner",
|
|
|
- Download: "Télécharger",
|
|
|
- MessageFromYou: "Message de votre part",
|
|
|
- MessageFromChatGPT: "Message de ChatGPT",
|
|
|
+ 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: "Prompt mémoire",
|
|
|
- EmptyContent: "Rien encore.",
|
|
|
- Send: "Envoyer la mémoire",
|
|
|
- Copy: "Copier la mémoire",
|
|
|
- Reset: "Réinitialiser la session",
|
|
|
- ResetConfirm:
|
|
|
- "La réinitialisation supprimera l'historique de la conversation actuelle ainsi que la mémoire de l'historique. Êtes-vous sûr de vouloir procéder à la réinitialisation?",
|
|
|
+ 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 conversation sélectionnée ?",
|
|
|
- DeleteToast: "Conversation supprimée",
|
|
|
- Revert: "Revenir en arrière",
|
|
|
+ DeleteChat: "Confirmer la suppression de la discussion sélectionnée ?",
|
|
|
+ DeleteToast: "Discussion supprimée",
|
|
|
+ Revert: "Annuler",
|
|
|
},
|
|
|
Settings: {
|
|
|
Title: "Paramètres",
|
|
|
- SubTitle: "Toutes les configurations",
|
|
|
+ SubTitle: "Toutes les options de configuration",
|
|
|
+
|
|
|
Danger: {
|
|
|
Reset: {
|
|
|
- Title: "Restaurer les paramètres",
|
|
|
- SubTitle: "Restaurer les paramètres par défaut",
|
|
|
- Action: "Reinitialiser",
|
|
|
- Confirm: "Confirmer la réinitialisation des paramètres?",
|
|
|
+ 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: "Supprimer toutes les données",
|
|
|
+ Title: "Effacer toutes les données",
|
|
|
SubTitle:
|
|
|
- "Effacer toutes les données, y compris les conversations et les paramètres",
|
|
|
- Action: "Supprimer",
|
|
|
- Confirm: "Confirmer la suppression de toutes les données?",
|
|
|
+ "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 : si vous souhaitez ajouter une nouvelle traduction, ne traduisez pas cette valeur, laissez-la sous forme de `Language`
|
|
|
+ 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 des polices",
|
|
|
- SubTitle: "Ajuste la taille de police du contenu de la conversation",
|
|
|
+ Title: "Taille de la police",
|
|
|
+ SubTitle: "Taille de la police pour le contenu des discussions",
|
|
|
},
|
|
|
InjectSystemPrompts: {
|
|
|
Title: "Injecter des invites système",
|
|
|
SubTitle:
|
|
|
- "Ajoute de force une invite système simulée de ChatGPT au début de la liste des messages pour chaque demande",
|
|
|
+ "Ajouter de manière forcée une invite système simulée de ChatGPT au début de chaque liste de messages",
|
|
|
},
|
|
|
InputTemplate: {
|
|
|
- Title: "Template",
|
|
|
- SubTitle: "Le message le plus récent sera ajouté à ce template.",
|
|
|
+ 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 : ${x}`,
|
|
|
- IsLatest: "Dernière version",
|
|
|
- CheckUpdate: "Vérifier la mise à jour",
|
|
|
- IsChecking: "Vérification de la mise à jour...",
|
|
|
- FoundUpdate: (x: string) => `Nouvelle version disponible : ${x}`,
|
|
|
- GoToUpdate: "Mise à jour",
|
|
|
- },
|
|
|
- SendKey: "Clé d'envoi",
|
|
|
+ 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: "Bordure serrée",
|
|
|
+ TightBorder: "Mode sans bordure",
|
|
|
SendPreviewBubble: {
|
|
|
- Title: "Aperçu de l'envoi dans une bulle",
|
|
|
- SubTitle: "Aperçu du Markdown dans une bulle",
|
|
|
+ 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: "Écran de masque",
|
|
|
+ Title: "Page de démarrage du masque",
|
|
|
SubTitle:
|
|
|
- "Afficher un écran de masque avant de démarrer une nouvelle discussion",
|
|
|
+ "Afficher la page de démarrage du masque lors de la création d'une nouvelle discussion",
|
|
|
},
|
|
|
Builtin: {
|
|
|
- Title: "Masquer Les Assistants Intégrés",
|
|
|
- SubTitle: "Masquer les assistants intégrés par défaut",
|
|
|
+ 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 saisie semi-automatique",
|
|
|
- SubTitle: "Appuyez sur / pour activer la saisie semi-automatique",
|
|
|
+ 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 de prompts",
|
|
|
+ List: "Liste des invites personnalisées",
|
|
|
ListCount: (builtin: number, custom: number) =>
|
|
|
- `${builtin} intégré, ${custom} personnalisé`,
|
|
|
+ `${builtin} intégrées, ${custom} définies par l'utilisateur`,
|
|
|
Edit: "Modifier",
|
|
|
Modal: {
|
|
|
- Title: "Liste de prompts",
|
|
|
- Add: "Ajouter un élément",
|
|
|
- Search: "Rechercher des prompts",
|
|
|
+ Title: "Liste des invites",
|
|
|
+ Add: "Créer",
|
|
|
+ Search: "Rechercher des invites",
|
|
|
},
|
|
|
EditModal: {
|
|
|
- Title: "Modifier le prompt",
|
|
|
+ Title: "Modifier les invites",
|
|
|
},
|
|
|
},
|
|
|
HistoryCount: {
|
|
|
- Title: "Nombre de messages joints",
|
|
|
- SubTitle: "Nombre de messages envoyés attachés par demande",
|
|
|
+ Title: "Nombre de messages historiques",
|
|
|
+ SubTitle: "Nombre de messages historiques envoyés avec chaque demande",
|
|
|
},
|
|
|
CompressThreshold: {
|
|
|
- Title: "Seuil de compression de l'historique",
|
|
|
+ Title: "Seuil de compression des messages historiques",
|
|
|
SubTitle:
|
|
|
- "Comprimera si la longueur des messages non compressés dépasse cette valeur",
|
|
|
+ "Compresser les messages historiques lorsque leur longueur dépasse cette valeur",
|
|
|
},
|
|
|
|
|
|
Usage: {
|
|
|
- Title: "Solde du compte",
|
|
|
+ Title: "Vérification du solde",
|
|
|
SubTitle(used: any, total: any) {
|
|
|
- return `Épuisé ce mois-ci $${used}, abonnement $${total}`;
|
|
|
+ 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: {
|
|
|
+ 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",
|
|
|
},
|
|
|
- IsChecking: "Vérification...",
|
|
|
- Check: "Vérifier",
|
|
|
- NoAccess: "Entrez la clé API pour vérifier le solde",
|
|
|
},
|
|
|
|
|
|
Model: "Modèle",
|
|
|
Temperature: {
|
|
|
- Title: "Température",
|
|
|
- SubTitle: "Une valeur plus élevée rendra les réponses plus aléatoires",
|
|
|
+ Title: "Aléatoire (temperature)",
|
|
|
+ SubTitle: "Plus la valeur est élevée, plus les réponses sont aléatoires",
|
|
|
},
|
|
|
TopP: {
|
|
|
- Title: "Top P",
|
|
|
+ Title: "Échantillonnage par noyau (top_p)",
|
|
|
SubTitle:
|
|
|
- "Ne modifiez pas à moins que vous ne sachiez ce que vous faites",
|
|
|
+ "Semblable à l'aléatoire, mais ne pas modifier en même temps que l'aléatoire",
|
|
|
},
|
|
|
MaxTokens: {
|
|
|
- Title: "Limite de Tokens",
|
|
|
- SubTitle: "Longueur maximale des tokens d'entrée et des tokens générés",
|
|
|
+ Title: "Limite de réponse unique (max_tokens)",
|
|
|
+ SubTitle: "Nombre maximal de tokens utilisés pour une interaction unique",
|
|
|
},
|
|
|
PresencePenalty: {
|
|
|
- Title: "Pénalité de présence",
|
|
|
+ Title: "Nouveauté du sujet (presence_penalty)",
|
|
|
SubTitle:
|
|
|
- "Une valeur plus élevée augmentera la probabilité d'introduire de nouveaux sujets",
|
|
|
+ "Plus la valeur est élevée, plus il est probable d'élargir aux nouveaux sujets",
|
|
|
},
|
|
|
FrequencyPenalty: {
|
|
|
- Title: "Pénalité de fréquence",
|
|
|
+ Title: "Pénalité de fréquence (frequency_penalty)",
|
|
|
SubTitle:
|
|
|
- "Une valeur plus élevée diminuant la probabilité de répéter la même ligne",
|
|
|
+ "Plus la valeur est élevée, plus il est probable de réduire les répétitions",
|
|
|
},
|
|
|
},
|
|
|
Store: {
|
|
|
- DefaultTopic: "Nouvelle conversation",
|
|
|
- BotHello: "Bonjour ! Comment puis-je vous aider aujourd'hui ?",
|
|
|
- Error: "Quelque chose s'est mal passé, veuillez réessayer plus tard.",
|
|
|
+ DefaultTopic: "Nouvelle discussion",
|
|
|
+ BotHello: "Comment puis-je vous aider ?",
|
|
|
+ Error: "Une erreur est survenue, veuillez réessayer plus tard",
|
|
|
Prompt: {
|
|
|
History: (content: string) =>
|
|
|
- "Ceci est un résumé de l'historique des discussions entre l'IA et l'utilisateur : " +
|
|
|
- content,
|
|
|
+ "Voici le résumé de la discussion précédente : " + content,
|
|
|
Topic:
|
|
|
- "Veuillez générer un titre de quatre à cinq mots résumant notre conversation sans introduction, ponctuation, guillemets, points, symboles ou texte supplémentaire. Supprimez les guillemets inclus.",
|
|
|
+ "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:
|
|
|
- "Résumez brièvement nos discussions en 200 mots ou moins pour les utiliser comme prompt de contexte futur.",
|
|
|
+ "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:
|
|
|
- "La copie a échoué, veuillez accorder l'autorisation d'accès au 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) => `Avec ${x} contextes de prompts`,
|
|
|
- Edit: "Contextes et mémoires de prompts",
|
|
|
- Add: "Ajouter un prompt",
|
|
|
+ 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: "Extension",
|
|
|
+ Name: "Plugin",
|
|
|
},
|
|
|
FineTuned: {
|
|
|
- Sysmessage: "Eres un asistente que",
|
|
|
+ Sysmessage: "Vous êtes un assistant",
|
|
|
},
|
|
|
Mask: {
|
|
|
Name: "Masque",
|
|
|
Page: {
|
|
|
- Title: "Modèle de prompt",
|
|
|
- SubTitle: (count: number) => `${count} modèles de prompts`,
|
|
|
- Search: "Rechercher des modèles",
|
|
|
+ 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) => `${count} prompts`,
|
|
|
+ Info: (count: number) => `Contient ${count} discussions prédéfinies`,
|
|
|
Chat: "Discussion",
|
|
|
- View: "Vue",
|
|
|
+ View: "Voir",
|
|
|
Edit: "Modifier",
|
|
|
Delete: "Supprimer",
|
|
|
- DeleteConfirm: "Confirmer la suppression?",
|
|
|
+ DeleteConfirm: "Confirmer la suppression ?",
|
|
|
},
|
|
|
EditModal: {
|
|
|
Title: (readonly: boolean) =>
|
|
|
- `Modifier le modèle de prompt ${readonly ? "(en lecture seule)" : ""}`,
|
|
|
- Download: "Télécharger",
|
|
|
- Clone: "Dupliquer",
|
|
|
+ `Modifier le masque prédéfini ${readonly ? " (lecture seule)" : ""}`,
|
|
|
+ Download: "Télécharger le masque",
|
|
|
+ Clone: "Cloner le masque",
|
|
|
},
|
|
|
Config: {
|
|
|
- Avatar: "Avatar de lassistant",
|
|
|
- Name: "Nom de lassistant",
|
|
|
+ Avatar: "Avatar du rôle",
|
|
|
+ Name: "Nom du rôle",
|
|
|
Sync: {
|
|
|
- Title: "Utiliser la configuration globale",
|
|
|
- SubTitle: "Utiliser la configuration globale dans cette conversation",
|
|
|
- Confirm: "Voulez-vous definir votre configuration personnalisée ?",
|
|
|
+ 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 invites contextuelles",
|
|
|
- SubTitle: "Ne pas afficher les instructions contextuelles dans le chat",
|
|
|
+ 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 vers ce masque",
|
|
|
+ SubTitle: "Générer un lien direct pour ce masque",
|
|
|
Action: "Copier le lien",
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
NewChat: {
|
|
|
Return: "Retour",
|
|
|
- Skip: "Passer",
|
|
|
- Title: "Choisir un assitant",
|
|
|
- SubTitle: "Discutez avec l'âme derrière le masque",
|
|
|
- More: "En savoir plus",
|
|
|
- NotShow: "Ne pas afficher à nouveau",
|
|
|
+ Skip: "Commencer directement",
|
|
|
+ NotShow: "Ne plus afficher",
|
|
|
ConfirmNoShow:
|
|
|
- "Confirmez-vous vouloir désactiver cela? Vous pouvez le réactiver plus tard dans les paramètres.",
|
|
|
+ "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: {
|
|
|
@@ -296,9 +540,17 @@ const fr: PartialLocaleType = {
|
|
|
Cancel: "Annuler",
|
|
|
Close: "Fermer",
|
|
|
Create: "Créer",
|
|
|
- Edit: "Éditer",
|
|
|
+ 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",
|