feat: update i18n

This commit is contained in:
DDMeaqua
2024-07-23 15:21:38 +08:00
parent 00be2be24f
commit 86b8bfcb1f
15 changed files with 5705 additions and 1694 deletions

View File

@@ -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",
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: "Clé d'envoi",
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",