From e4fa75334fa12e8bbac4cc198f21c78a10e849c2 Mon Sep 17 00:00:00 2001 From: zzzsyyy Date: Sat, 1 Apr 2023 09:14:58 +0800 Subject: [PATCH] =?UTF-8?q?add(translation):=20add=20trans=20fr(Fran=C3=A7?= =?UTF-8?q?ais)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/locales/cn.ts | 1 + app/locales/en.ts | 1 + app/locales/es.ts | 3 +- app/locales/fr.ts | 155 +++++++++++++++++++++++++++++++++++++++++++ app/locales/index.ts | 10 ++- app/locales/tw.ts | 1 + 6 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 app/locales/fr.ts diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 737ccad45..eeff9a2e0 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -58,6 +58,7 @@ const cn = { en: "English", tw: "繁體中文", es: "Español", + fr: "Français", }, }, Avatar: "头像", diff --git a/app/locales/en.ts b/app/locales/en.ts index 156c03616..e154bcbc3 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -60,6 +60,7 @@ const en: LocaleType = { en: "English", tw: "繁體中文", es: "Español", + fr: "Français", }, }, Avatar: "Avatar", diff --git a/app/locales/es.ts b/app/locales/es.ts index 3f7ad1bc7..96c8f9961 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -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; \ No newline at end of file +export default es; diff --git a/app/locales/fr.ts b/app/locales/fr.ts new file mode 100644 index 000000000..c1b086be7 --- /dev/null +++ b/app/locales/fr.ts @@ -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; diff --git a/app/locales/index.ts b/app/locales/index.ts index eb96408c7..2bee9a156 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -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()]; \ No newline at end of file +export default { en: EN, cn: CN, tw: TW, es: ES, fr: FR }[getLang()]; diff --git a/app/locales/tw.ts b/app/locales/tw.ts index cfba7add5..a279ccb6f 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -59,6 +59,7 @@ const tw: LocaleType = { en: "English", tw: "繁體中文", es: "Español", + fr: "Français", }, }, Avatar: "大頭貼",