Browse Source

add french translation -增加法语翻译

GanXing 1 year ago
parent
commit
505a68093d

+ 1 - 0
app/locales/cn.ts

@@ -73,6 +73,7 @@ const cn = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 7 - 7
app/locales/cs.ts

@@ -70,11 +70,12 @@ const cs: LocaleType = {
     },
     Lang: {
       Name: "Language", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language`
-        All: "Všechny jazyky",
-        Options: {
+      All: "Všechny jazyky",
+      Options: {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",
@@ -166,8 +167,7 @@ const cs: LocaleType = {
     },
     PresencePenlty: {
       Title: "Přítomnostní korekce",
-      SubTitle:
-        "Větší hodnota zvyšuje pravděpodobnost nových témat.",
+      SubTitle: "Větší hodnota zvyšuje pravděpodobnost nových témat.",
     },
   },
   Store: {
@@ -182,7 +182,7 @@ const cs: LocaleType = {
         "Vytvořte prosím název o čtyřech až pěti slovech vystihující průběh našeho rozhovoru bez jakýchkoli úvodních slov, interpunkčních znamének, uvozovek, teček, symbolů nebo dalšího textu. Odstraňte uvozovky.",
       Summarize:
         "Krátce shrň naši diskusi v rozsahu do 200 slov a použij ji jako podnět pro budoucí kontext.",
-      },
+    },
   },
   Copy: {
     Success: "Zkopírováno do schránky",
@@ -231,7 +231,7 @@ const cs: LocaleType = {
     More: "Najít více",
     NotShow: "Nezobrazovat znovu",
     ConfirmNoShow: "Potvrdit zakázání?Můžete jej povolit později v nastavení.",
-},
+  },
 
   UI: {
     Confirm: "Potvrdit",
@@ -239,7 +239,7 @@ const cs: LocaleType = {
     Close: "Zavřít",
     Create: "Vytvořit",
     Edit: "Upravit",
-  }
+  },
 };
 
 export default cs;

+ 1 - 0
app/locales/de.ts

@@ -76,6 +76,7 @@ const de: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 1 - 0
app/locales/en.ts

@@ -75,6 +75,7 @@ const en: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 1 - 0
app/locales/es.ts

@@ -75,6 +75,7 @@ const es: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 251 - 0
app/locales/fr.ts

@@ -0,0 +1,251 @@
+import { SubmitKey } from "../store/config";
+import type { LocaleType } from "./index";
+
+const fr: LocaleType = {
+  WIP: "Prochainement...",
+  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 en total`,
+  },
+  Chat: {
+    SubTitle: (count: number) => `${count} messages échangés avec ChatGPT`,
+    Actions: {
+      ChatList: "Aller à la liste de discussion",
+      CompressedHistory: "Mémoire d'historique compressée Prompt",
+      Export: "Exporter tous les messages en tant que Markdown",
+      Copy: "Copier",
+      Stop: "Arrêter",
+      Retry: "Réessayer",
+      Delete: "Supprimer",
+    },
+    Rename: "Renommer la conversation",
+    Typing: "En train d'écrire…",
+    Input: (submitKey: string) => {
+      var inputHints = `Appuyez sur ${submitKey} pour envoyer`;
+      if (submitKey === String(SubmitKey.Enter)) {
+        inputHints += ", Shift + Enter pour insérer un saut de ligne";
+      }
+      return inputHints + ", / pour rechercher des prompts";
+    },
+    Send: "Envoyer",
+    Config: {
+      Reset: "Restaurer les paramètres par défaut",
+      SaveAs: "Enregistrer en tant que masque",
+    },
+  },
+  Export: {
+    Title: "Tous les messages",
+    Copy: "Tout sélectionner",
+    Download: "Télécharger",
+    MessageFromYou: "Message de votre part",
+    MessageFromChatGPT: "Message de ChatGPT",
+  },
+  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?",
+  },
+  Home: {
+    NewChat: "Nouvelle discussion",
+    DeleteChat: "Confirmer la suppression de la conversation sélectionnée ?",
+    DeleteToast: "Conversation supprimée",
+    Revert: "Revenir en arrière",
+  },
+  Settings: {
+    Title: "Paramètres",
+    SubTitle: "Toutes les configurations",
+    Actions: {
+      ClearAll: "Effacer toutes les données",
+      ResetAll: "Réinitialiser les configurations",
+      Close: "Fermer",
+      ConfirmResetAll:
+        "Êtes-vous sûr de vouloir réinitialiser toutes les configurations?",
+      ConfirmClearAll: "Êtes-vous sûr de vouloir supprimer toutes les données?",
+    },
+    Lang: {
+      Name: "Language", // ATTENTION : si vous souhaitez ajouter une nouvelle traduction, ne traduisez pas cette valeur, laissez-la sous forme de `Language`
+      All: "Toutes les langues",
+      Options: {
+        cn: "简体中文",
+        en: "English",
+        tw: "繁體中文",
+        fr: "Français",
+        es: "Español",
+        it: "Italiano",
+        tr: "Türkçe",
+        jp: "日本語",
+        de: "Deutsch",
+        vi: "Vietnamese",
+        ru: "Русский",
+        cs: "Čeština",
+      },
+    },
+
+    Avatar: "Avatar",
+    FontSize: {
+      Title: "Taille des polices",
+      SubTitle: "Ajuste la taille de police du contenu de la conversation",
+    },
+    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",
+    Theme: "Thème",
+    TightBorder: "Bordure serrée",
+    SendPreviewBubble: {
+      Title: "Aperçu de l'envoi dans une bulle",
+      SubTitle: "Aperçu du Markdown dans une bulle",
+    },
+    Mask: {
+      Title: "Écran de masque",
+      SubTitle:
+        "Afficher un écran de masque avant de démarrer une nouvelle discussion",
+    },
+    Prompt: {
+      Disable: {
+        Title: "Désactiver la saisie semi-automatique",
+        SubTitle: "Appuyez sur / pour activer la saisie semi-automatique",
+      },
+      List: "Liste de prompts",
+      ListCount: (builtin: number, custom: number) =>
+        `${builtin} intégré, ${custom} personnalisé`,
+      Edit: "Modifier",
+      Modal: {
+        Title: "Liste de prompts",
+        Add: "Ajouter un élément",
+        Search: "Rechercher des prompts",
+      },
+      EditModal: {
+        Title: "Modifier le prompt",
+      },
+    },
+    HistoryCount: {
+      Title: "Nombre de messages joints",
+      SubTitle: "Nombre de messages envoyés attachés par demande",
+    },
+    CompressThreshold: {
+      Title: "Seuil de compression de l'historique",
+      SubTitle:
+        "Comprimera si la longueur des messages non compressés dépasse cette valeur",
+    },
+    Token: {
+      Title: "Clé API",
+      SubTitle: "Utilisez votre clé pour ignorer la limite du code d'accès",
+      Placeholder: "Clé OpenAI API",
+    },
+    Usage: {
+      Title: "Solde du compte",
+      SubTitle(used: any, total: any) {
+        return `Épuisé ce mois-ci $${used}, abonnement $${total}`;
+      },
+      IsChecking: "Vérification...",
+      Check: "Vérifier",
+      NoAccess: "Entrez la clé API pour vérifier le solde",
+    },
+    AccessCode: {
+      Title: "Code d'accès",
+      SubTitle: "Contrôle d'accès activé",
+      Placeholder: "Code d'accès requis",
+    },
+    Model: "Modèle",
+    Temperature: {
+      Title: "Température",
+      SubTitle: "Une valeur plus élevée rendra les réponses plus aléatoires",
+    },
+    MaxTokens: {
+      Title: "Max Tokens",
+      SubTitle: "Longueur maximale des tokens d'entrée et des tokens générés",
+    },
+    PresencePenlty: {
+      Title: "Pénalité de présence",
+      SubTitle:
+        "Une valeur plus élevée augmentera la probabilité d'introduire de nouveaux sujets",
+    },
+  },
+  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.",
+    Prompt: {
+      History: (content: string) =>
+        "Ceci est un résumé de l'historique des discussions entre l'IA et l'utilisateur : " +
+        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.",
+      Summarize:
+        "Résumez brièvement nos discussions en 200 mots ou moins pour les utiliser comme prompt de contexte futur.",
+    },
+  },
+  Copy: {
+    Success: "Copié dans le presse-papiers",
+    Failed:
+      "La copie a échoué, veuillez accorder l'autorisation d'accès au presse-papiers",
+  },
+  Context: {
+    Toast: (x: any) => `Avec ${x} contextes de prompts`,
+    Edit: "Contextes et mémoires de prompts",
+    Add: "Ajouter un prompt",
+  },
+  Plugin: {
+    Name: "Extension",
+  },
+  Mask: {
+    Name: "Masque",
+    Page: {
+      Title: "Modèle de prompt",
+      SubTitle: (count: number) => `${count} modèles de prompts`,
+      Search: "Rechercher des modèles",
+      Create: "Créer",
+    },
+    Item: {
+      Info: (count: number) => `${count} prompts`,
+      Chat: "Discussion",
+      View: "Vue",
+      Edit: "Modifier",
+      Delete: "Supprimer",
+      DeleteConfirm: "Confirmer la suppression?",
+    },
+    EditModal: {
+      Title: (readonly: boolean) =>
+        `Modifier le modèle de prompt ${readonly ? "(en lecture seule)" : ""}`,
+      Download: "Télécharger",
+      Clone: "Dupliquer",
+    },
+    Config: {
+      Avatar: "Avatar du bot",
+      Name: "Nom du bot",
+    },
+  },
+  NewChat: {
+    Return: "Retour",
+    Skip: "Passer",
+    Title: "Choisir un masque",
+    SubTitle: "Discutez avec l'âme derrière le masque",
+    More: "En savoir plus",
+    NotShow: "Ne pas afficher à nouveau",
+    ConfirmNoShow:
+      "Confirmez-vous vouloir désactiver cela? Vous pouvez le réactiver plus tard dans les paramètres.",
+  },
+
+  UI: {
+    Confirm: "Confirmer",
+    Cancel: "Annuler",
+    Close: "Fermer",
+    Create: "Créer",
+    Edit: "Éditer",
+  },
+};
+
+export default fr;

+ 3 - 0
app/locales/index.ts

@@ -1,6 +1,7 @@
 import CN from "./cn";
 import EN from "./en";
 import TW from "./tw";
+import FR from "./fr";
 import ES from "./es";
 import IT from "./it";
 import TR from "./tr";
@@ -16,6 +17,7 @@ export const AllLangs = [
   "en",
   "cn",
   "tw",
+  "fr",
   "es",
   "it",
   "tr",
@@ -80,6 +82,7 @@ export default {
   en: EN,
   cn: CN,
   tw: TW,
+  fr: FR,
   es: ES,
   it: IT,
   tr: TR,

+ 1 - 0
app/locales/it.ts

@@ -75,6 +75,7 @@ const it: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 1 - 0
app/locales/jp.ts

@@ -75,6 +75,7 @@ const jp: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 51 - 45
app/locales/ru.ts

@@ -75,6 +75,7 @@ const ru: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",
@@ -85,51 +86,52 @@ const ru: LocaleType = {
         cs: "Čeština",
       },
     },
-      Avatar: "Аватар",
-      FontSize: {
-        Title: "Размер шрифта",
-        SubTitle: "Настроить размер шрифта контента чата",
-      },
-      Update: {
-        Version: (x: string) => `Версия: ${x}`,
-        IsLatest: "Последняя версия",
-        CheckUpdate: "Проверить обновление",
-        IsChecking: "Проверка обновления...",
-        FoundUpdate: (x: string) => `Найдена новая версия: ${x}`,
-        GoToUpdate: "Обновить",
-      },
-      SendKey: "Клавиша отправки",
-      Theme: "Тема",
-      TightBorder: "Узкая граница",
-      SendPreviewBubble: {
-        Title: "Отправить предпросмотр",
-        SubTitle: "Предварительный просмотр markdown в пузыре",
+    Avatar: "Аватар",
+    FontSize: {
+      Title: "Размер шрифта",
+      SubTitle: "Настроить размер шрифта контента чата",
+    },
+    Update: {
+      Version: (x: string) => `Версия: ${x}`,
+      IsLatest: "Последняя версия",
+      CheckUpdate: "Проверить обновление",
+      IsChecking: "Проверка обновления...",
+      FoundUpdate: (x: string) => `Найдена новая версия: ${x}`,
+      GoToUpdate: "Обновить",
+    },
+    SendKey: "Клавиша отправки",
+    Theme: "Тема",
+    TightBorder: "Узкая граница",
+    SendPreviewBubble: {
+      Title: "Отправить предпросмотр",
+      SubTitle: "Предварительный просмотр markdown в пузыре",
+    },
+    Mask: {
+      Title: "Экран заставки маски",
+      SubTitle: "Показывать экран заставки маски перед началом нового чата",
+    },
+    Prompt: {
+      Disable: {
+        Title: "Отключить автозаполнение",
+        SubTitle: "Ввод / для запуска автозаполнения",
       },
-      Mask: {
-        Title: "Экран заставки маски",
-        SubTitle: "Показывать экран заставки маски перед началом нового чата",
+      List: "Список подсказок",
+      ListCount: (builtin: number, custom: number) =>
+        `${builtin} встроенных, ${custom} пользовательских`,
+      Edit: "Редактировать",
+      Modal: {
+        Title: "Список подсказок",
+        Add: "Добавить",
+        Search: "Поиск подсказок",
       },
-      Prompt: {
-        Disable: {
-          Title: "Отключить автозаполнение",
-          SubTitle: "Ввод / для запуска автозаполнения",
-        },
-        List: "Список подсказок",
-        ListCount: (builtin: number, custom: number) =>
-          `${builtin} встроенных, ${custom} пользовательских`,
-        Edit: "Редактировать",
-        Modal: {
-          Title: "Список подсказок",
-          Add: "Добавить",
-          Search: "Поиск подсказок",
-        },
-        EditModal: {
-          Title: "Редактировать подсказку",
-        },
+      EditModal: {
+        Title: "Редактировать подсказку",
       },
-      HistoryCount: {
-        Title: "Количество прикрепляемых сообщений",
-        SubTitle: "Количество отправляемых сообщений, прикрепляемых к каждому запросу",
+    },
+    HistoryCount: {
+      Title: "Количество прикрепляемых сообщений",
+      SubTitle:
+        "Количество отправляемых сообщений, прикрепляемых к каждому запросу",
     },
     CompressThreshold: {
       Title: "Порог сжатия истории",
@@ -186,7 +188,8 @@ const ru: LocaleType = {
   },
   Copy: {
     Success: "Скопировано в буфер обмена",
-    Failed: "Не удалось скопировать, пожалуйста, предоставьте разрешение на доступ к буферу обмена",
+    Failed:
+      "Не удалось скопировать, пожалуйста, предоставьте разрешение на доступ к буферу обмена",
   },
   Context: {
     Toast: (x: any) => `С ${x} контекстными подсказками`,
@@ -214,7 +217,9 @@ const ru: LocaleType = {
     },
     EditModal: {
       Title: (readonly: boolean) =>
-        `Редактирование шаблона подсказки ${readonly ? "(только для чтения)" : ""}`,
+        `Редактирование шаблона подсказки ${
+          readonly ? "(только для чтения)" : ""
+        }`,
       Download: "Скачать",
       Clone: "Клонировать",
     },
@@ -230,7 +235,8 @@ const ru: LocaleType = {
     SubTitle: "Общайтесь с душой за маской",
     More: "Найти еще",
     NotShow: "Не показывать снова",
-    ConfirmNoShow: "Подтвердите отключение? Вы можете включить это позже в настройках.",
+    ConfirmNoShow:
+      "Подтвердите отключение? Вы можете включить это позже в настройках.",
   },
 
   UI: {

+ 1 - 0
app/locales/tr.ts

@@ -75,6 +75,7 @@ const tr: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 1 - 0
app/locales/tw.ts

@@ -73,6 +73,7 @@ const tw: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",

+ 1 - 0
app/locales/vi.ts

@@ -75,6 +75,7 @@ const vi: LocaleType = {
         cn: "简体中文",
         en: "English",
         tw: "繁體中文",
+        fr: "Français",
         es: "Español",
         it: "Italiano",
         tr: "Türkçe",