add(translation): add trans fr(Français)
This commit is contained in:
parent
ba08b10de1
commit
e4fa75334f
|
@ -58,6 +58,7 @@ const cn = {
|
|||
en: "English",
|
||||
tw: "繁體中文",
|
||||
es: "Español",
|
||||
fr: "Français",
|
||||
},
|
||||
},
|
||||
Avatar: "头像",
|
||||
|
|
|
@ -60,6 +60,7 @@ const en: LocaleType = {
|
|||
en: "English",
|
||||
tw: "繁體中文",
|
||||
es: "Español",
|
||||
fr: "Français",
|
||||
},
|
||||
},
|
||||
Avatar: "Avatar",
|
||||
|
|
|
@ -60,6 +60,7 @@ const es: LocaleType = {
|
|||
en: "Inglés",
|
||||
tw: "繁體中文",
|
||||
es: "Español",
|
||||
fr: "Français",
|
||||
},
|
||||
},
|
||||
Avatar: "Avatar",
|
||||
|
@ -151,4 +152,4 @@ const es: LocaleType = {
|
|||
},
|
||||
};
|
||||
|
||||
export default es;
|
||||
export default es;
|
||||
|
|
|
@ -0,0 +1,155 @@
|
|||
import { SubmitKey } from "../store/app";
|
||||
import type { LocaleType } from "./index";
|
||||
|
||||
const fr: LocaleType = {
|
||||
WIP: "Travail en cours...",
|
||||
Error: {
|
||||
Unauthorized:
|
||||
"Accès non autorisé, veuillez saisir le code d'accès dans la page des paramètres.",
|
||||
},
|
||||
ChatItem: {
|
||||
ChatItemCount: (count: number) => `${count} messages`,
|
||||
},
|
||||
Chat: {
|
||||
SubTitle: (count: number) => `${count} messages avec ChatGPT`,
|
||||
Actions: {
|
||||
ChatList: "Aller à la liste des chats",
|
||||
CompressedHistory: "Historique de mémoire prompt compressé",
|
||||
Export: "Exporter tous les messages au format Markdown",
|
||||
Copy: "Copier",
|
||||
Stop: "Arrêter",
|
||||
Retry: "Réessayer",
|
||||
},
|
||||
Rename: "Renommer le chat",
|
||||
Typing: "Écriture...",
|
||||
Input: (submitKey: string) => {
|
||||
var inputHints = `Tapez quelque chose et appuyez sur ${submitKey} pour envoyer`;
|
||||
if (submitKey === String(SubmitKey.Enter)) {
|
||||
inputHints += ", appuyez sur Shift + Entrée pour une nouvelle ligne";
|
||||
}
|
||||
return inputHints;
|
||||
},
|
||||
Send: "Envoyer",
|
||||
},
|
||||
Export: {
|
||||
Title: "Tous les messages",
|
||||
Copy: "Copier tout",
|
||||
Download: "Télécharger",
|
||||
},
|
||||
Memory: {
|
||||
Title: "Mémoire Prompt",
|
||||
EmptyContent: "Rien pour le moment.",
|
||||
Copy: "Copier tout",
|
||||
},
|
||||
Home: {
|
||||
NewChat: "Nouveau chat",
|
||||
DeleteChat: "Confirmer la suppression de la conversation sélectionnée ?",
|
||||
},
|
||||
Settings: {
|
||||
Title: "Paramètres",
|
||||
SubTitle: "Tous les paramètres",
|
||||
Actions: {
|
||||
ClearAll: "Effacer toutes les données",
|
||||
ResetAll: "Réinitialiser tous les paramètres",
|
||||
Close: "Fermer",
|
||||
},
|
||||
Lang: {
|
||||
Name: "Language",
|
||||
Options: {
|
||||
cn: "简体中文",
|
||||
en: "English",
|
||||
tw: "繁體中文",
|
||||
es: "Español",
|
||||
fr: "Français",
|
||||
},
|
||||
},
|
||||
Avatar: "Avatar",
|
||||
FontSize: {
|
||||
Title: "Taille de la police",
|
||||
SubTitle: "Taille de la police de l'application",
|
||||
},
|
||||
Update: {
|
||||
Version: (x: string) => `Version ${x}`,
|
||||
IsLatest: "Dernière version",
|
||||
CheckUpdate: "Vérifier les mises à jour",
|
||||
IsChecking: "Vérification en cours...",
|
||||
FoundUpdate: (x: string) => `Nouvelle version ${x} trouvée`,
|
||||
GoToUpdate: "Mettre à jour",
|
||||
},
|
||||
SendKey: "Touche d'envoi",
|
||||
Theme: "Thème",
|
||||
TightBorder: "Bordures serrées",
|
||||
Prompt: {
|
||||
Disable: {
|
||||
Title: "Désactiver le prompt",
|
||||
SubTitle: "Désactiver le prompt pour les conversations",
|
||||
},
|
||||
List: "Liste de prompt",
|
||||
ListCount: (builtin: number, custom: number) =>
|
||||
`Prompt intégré: ${builtin}, Prompt personnalisé: ${custom}`,
|
||||
Edit: "Modifier",
|
||||
},
|
||||
HistoryCount: {
|
||||
Title: "Nombre de messages attachés par requête",
|
||||
SubTitle: "Nombre de messages envoyés et joints par demande",
|
||||
},
|
||||
CompressThreshold: {
|
||||
Title: "Seuil de compression de l'historique",
|
||||
SubTitle:
|
||||
"Compression si la longueur des messages non compressés dépasse la valeur",
|
||||
},
|
||||
Token: {
|
||||
Title: "Clé API",
|
||||
SubTitle: "Utilisez votre clé pour ignorer la limite du code d'accès",
|
||||
Placeholder: "Clé API OpenAI",
|
||||
},
|
||||
Usage: {
|
||||
Title: "Solde du compte",
|
||||
SubTitle(granted: any, used: any) {
|
||||
return `Total $${granted}, Utilisé $${used}`;
|
||||
},
|
||||
IsChecking: "Vérification...",
|
||||
Check: "Vérifier à nouveau",
|
||||
},
|
||||
AccessCode: {
|
||||
Title: "Code d'accès",
|
||||
SubTitle: "Contrôle d'accès activé",
|
||||
Placeholder: "Besoin d'un code d'accès",
|
||||
},
|
||||
Model: "Modèle",
|
||||
Temperature: {
|
||||
Title: "Température",
|
||||
SubTitle: "Une valeur plus élevée rend la sortie plus aléatoire",
|
||||
},
|
||||
MaxTokens: {
|
||||
Title: "Jetons maximums",
|
||||
SubTitle: "Longueur maximale des jetons d'entrée et des jetons générés",
|
||||
},
|
||||
PresencePenlty: {
|
||||
Title: "Présence Sanction",
|
||||
SubTitle:
|
||||
"Une valeur plus élevée augmente la probabilité d'aborder de nouveaux sujets",
|
||||
},
|
||||
},
|
||||
Store: {
|
||||
DefaultTopic: "Nouvelle conversation",
|
||||
BotHello: "Bonjour, comment puis-je vous aider aujourd'hui ?",
|
||||
Error: "Un problème s'est produit, veuillez réessayer plus tard.",
|
||||
Prompt: {
|
||||
History: (content: string) =>
|
||||
"Il s'agit d'un résumé de l'historique des discussions entre l'IA et l'utilisateur :" +
|
||||
content,
|
||||
Topic:
|
||||
"Veuillez rédiger un titre de quatre à cinq mots résumant notre conversation sans introduction, ponctuation, guillemets, points, symboles ou texte supplémentaire. Supprimez les guillemets.",
|
||||
Summarize:
|
||||
"Résumez brièvement notre discussion en 50 caractères ou moins, afin de vous y référer dans un contexte ultérieur.",
|
||||
},
|
||||
ConfirmClearAll: "Confirmer l'effacement de toutes les données de chat et de réglage ?",
|
||||
},
|
||||
Copy: {
|
||||
Success: "Copié dans le presse-papiers",
|
||||
Failed: "La copie a échoué, veuillez accorder l'autorisation d'accéder au presse-papiers",
|
||||
},
|
||||
};
|
||||
|
||||
export default fr;
|
|
@ -2,10 +2,11 @@ import CN from "./cn";
|
|||
import EN from "./en";
|
||||
import TW from "./tw";
|
||||
import ES from "./es";
|
||||
import FR from "./fr";
|
||||
|
||||
export type { LocaleType } from "./cn";
|
||||
|
||||
export const AllLangs = ["en", "cn", "tw", "es"] as const;
|
||||
export const AllLangs = ["en", "cn", "tw", "es", "fr"] as const;
|
||||
type Lang = (typeof AllLangs)[number];
|
||||
|
||||
const LANG_KEY = "lang";
|
||||
|
@ -47,7 +48,10 @@ export function getLang(): Lang {
|
|||
return "tw";
|
||||
} else if (lang.includes("es")) {
|
||||
return "es";
|
||||
} else {
|
||||
} else if (lang.includes("fr")) {
|
||||
return "fr";
|
||||
}
|
||||
else {
|
||||
return "en";
|
||||
}
|
||||
}
|
||||
|
@ -57,4 +61,4 @@ export function changeLang(lang: Lang) {
|
|||
location.reload();
|
||||
}
|
||||
|
||||
export default { en: EN, cn: CN, tw: TW, es: ES }[getLang()];
|
||||
export default { en: EN, cn: CN, tw: TW, es: ES, fr: FR }[getLang()];
|
||||
|
|
|
@ -59,6 +59,7 @@ const tw: LocaleType = {
|
|||
en: "English",
|
||||
tw: "繁體中文",
|
||||
es: "Español",
|
||||
fr: "Français",
|
||||
},
|
||||
},
|
||||
Avatar: "大頭貼",
|
||||
|
|
Loading…
Reference in New Issue