From ec43f4e6ab07dd3c03c7b59045320f3896151b3b Mon Sep 17 00:00:00 2001 From: Gan-Xing <41600413+Gan-Xing@users.noreply.github.com> Date: Thu, 11 May 2023 16:31:42 +0800 Subject: [PATCH 1/8] Update README.md Change My Deployment URL --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 90ed7d42..e0267ec2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ One-Click to deploy well-designed ChatGPT web UI on Vercel. [演示](https://chatgpt.nextweb.fun/) / [反馈](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [QQ 群](https://user-images.githubusercontent.com/16968934/236402186-fa76e930-64f5-47ae-b967-b0f04b1fbf56.jpg) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FGan-Xing%2FChatGPT-Next-Web%2F&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) + [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) From f2b81a2f23d3695293577b286ebd42b5678edb7c Mon Sep 17 00:00:00 2001 From: "599153574@qq.com" Date: Fri, 12 May 2023 07:51:04 +0800 Subject: [PATCH 2/8] =?UTF-8?q?add=20french=20translation=20-=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B3=95=E8=AF=AD=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/locales/cn.ts | 1 + app/locales/cs.ts | 14 +-- app/locales/de.ts | 1 + app/locales/en.ts | 1 + app/locales/es.ts | 1 + app/locales/fr.ts | 251 +++++++++++++++++++++++++++++++++++++++++++ app/locales/index.ts | 3 + app/locales/it.ts | 1 + app/locales/jp.ts | 1 + app/locales/ru.ts | 96 +++++++++-------- app/locales/tr.ts | 1 + app/locales/tw.ts | 1 + app/locales/vi.ts | 1 + 13 files changed, 321 insertions(+), 52 deletions(-) create mode 100644 app/locales/fr.ts diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 0cf3b55e..e586708d 100644 --- a/app/locales/cn.ts +++ b/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", diff --git a/app/locales/cs.ts b/app/locales/cs.ts index ab9b39a5..ca2c2304 100644 --- a/app/locales/cs.ts +++ b/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; diff --git a/app/locales/de.ts b/app/locales/de.ts index 8cfe3be4..dd888e7a 100644 --- a/app/locales/de.ts +++ b/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", diff --git a/app/locales/en.ts b/app/locales/en.ts index 420f1690..ba138172 100644 --- a/app/locales/en.ts +++ b/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", diff --git a/app/locales/es.ts b/app/locales/es.ts index 5f66071c..9b6070f6 100644 --- a/app/locales/es.ts +++ b/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", diff --git a/app/locales/fr.ts b/app/locales/fr.ts new file mode 100644 index 00000000..79795851 --- /dev/null +++ b/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; diff --git a/app/locales/index.ts b/app/locales/index.ts index e41dfcdf..ac90f770 100644 --- a/app/locales/index.ts +++ b/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, diff --git a/app/locales/it.ts b/app/locales/it.ts index f9daa7a3..31334370 100644 --- a/app/locales/it.ts +++ b/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", diff --git a/app/locales/jp.ts b/app/locales/jp.ts index 526574b3..a55734a6 100644 --- a/app/locales/jp.ts +++ b/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", diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 437a54b2..49079b74 100644 --- a/app/locales/ru.ts +++ b/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: "Настроить размер шрифта контента чата", + 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: "Ввод / для запуска автозаполнения", }, - Update: { - Version: (x: string) => `Версия: ${x}`, - IsLatest: "Последняя версия", - CheckUpdate: "Проверить обновление", - IsChecking: "Проверка обновления...", - FoundUpdate: (x: string) => `Найдена новая версия: ${x}`, - GoToUpdate: "Обновить", + List: "Список подсказок", + ListCount: (builtin: number, custom: number) => + `${builtin} встроенных, ${custom} пользовательских`, + Edit: "Редактировать", + Modal: { + Title: "Список подсказок", + Add: "Добавить", + Search: "Поиск подсказок", }, - SendKey: "Клавиша отправки", - Theme: "Тема", - TightBorder: "Узкая граница", - SendPreviewBubble: { - Title: "Отправить предпросмотр", - SubTitle: "Предварительный просмотр markdown в пузыре", + EditModal: { + Title: "Редактировать подсказку", }, - Mask: { - Title: "Экран заставки маски", - SubTitle: "Показывать экран заставки маски перед началом нового чата", - }, - Prompt: { - Disable: { - Title: "Отключить автозаполнение", - SubTitle: "Ввод / для запуска автозаполнения", - }, - List: "Список подсказок", - ListCount: (builtin: number, custom: number) => - `${builtin} встроенных, ${custom} пользовательских`, - Edit: "Редактировать", - Modal: { - Title: "Список подсказок", - Add: "Добавить", - Search: "Поиск подсказок", - }, - 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: { diff --git a/app/locales/tr.ts b/app/locales/tr.ts index 42c3f78e..88e76543 100644 --- a/app/locales/tr.ts +++ b/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", diff --git a/app/locales/tw.ts b/app/locales/tw.ts index a8dbf91a..d1ab127a 100644 --- a/app/locales/tw.ts +++ b/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", diff --git a/app/locales/vi.ts b/app/locales/vi.ts index d3be6105..f8b5bebc 100644 --- a/app/locales/vi.ts +++ b/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", From 505a68093d931bec7459a17147dc17dc8ec29cbf Mon Sep 17 00:00:00 2001 From: GanXing Date: Fri, 12 May 2023 08:17:11 +0800 Subject: [PATCH 3/8] =?UTF-8?q?add=20french=20translation=20-=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B3=95=E8=AF=AD=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/locales/cn.ts | 1 + app/locales/cs.ts | 14 +-- app/locales/de.ts | 1 + app/locales/en.ts | 1 + app/locales/es.ts | 1 + app/locales/fr.ts | 251 +++++++++++++++++++++++++++++++++++++++++++ app/locales/index.ts | 3 + app/locales/it.ts | 1 + app/locales/jp.ts | 1 + app/locales/ru.ts | 96 +++++++++-------- app/locales/tr.ts | 1 + app/locales/tw.ts | 1 + app/locales/vi.ts | 1 + 13 files changed, 321 insertions(+), 52 deletions(-) create mode 100644 app/locales/fr.ts diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 0cf3b55e..e586708d 100644 --- a/app/locales/cn.ts +++ b/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", diff --git a/app/locales/cs.ts b/app/locales/cs.ts index ab9b39a5..ca2c2304 100644 --- a/app/locales/cs.ts +++ b/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; diff --git a/app/locales/de.ts b/app/locales/de.ts index 8cfe3be4..dd888e7a 100644 --- a/app/locales/de.ts +++ b/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", diff --git a/app/locales/en.ts b/app/locales/en.ts index 420f1690..ba138172 100644 --- a/app/locales/en.ts +++ b/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", diff --git a/app/locales/es.ts b/app/locales/es.ts index 5f66071c..9b6070f6 100644 --- a/app/locales/es.ts +++ b/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", diff --git a/app/locales/fr.ts b/app/locales/fr.ts new file mode 100644 index 00000000..79795851 --- /dev/null +++ b/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; diff --git a/app/locales/index.ts b/app/locales/index.ts index e41dfcdf..ac90f770 100644 --- a/app/locales/index.ts +++ b/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, diff --git a/app/locales/it.ts b/app/locales/it.ts index f9daa7a3..31334370 100644 --- a/app/locales/it.ts +++ b/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", diff --git a/app/locales/jp.ts b/app/locales/jp.ts index 526574b3..a55734a6 100644 --- a/app/locales/jp.ts +++ b/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", diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 437a54b2..49079b74 100644 --- a/app/locales/ru.ts +++ b/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: "Настроить размер шрифта контента чата", + 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: "Ввод / для запуска автозаполнения", }, - Update: { - Version: (x: string) => `Версия: ${x}`, - IsLatest: "Последняя версия", - CheckUpdate: "Проверить обновление", - IsChecking: "Проверка обновления...", - FoundUpdate: (x: string) => `Найдена новая версия: ${x}`, - GoToUpdate: "Обновить", + List: "Список подсказок", + ListCount: (builtin: number, custom: number) => + `${builtin} встроенных, ${custom} пользовательских`, + Edit: "Редактировать", + Modal: { + Title: "Список подсказок", + Add: "Добавить", + Search: "Поиск подсказок", }, - SendKey: "Клавиша отправки", - Theme: "Тема", - TightBorder: "Узкая граница", - SendPreviewBubble: { - Title: "Отправить предпросмотр", - SubTitle: "Предварительный просмотр markdown в пузыре", + EditModal: { + Title: "Редактировать подсказку", }, - Mask: { - Title: "Экран заставки маски", - SubTitle: "Показывать экран заставки маски перед началом нового чата", - }, - Prompt: { - Disable: { - Title: "Отключить автозаполнение", - SubTitle: "Ввод / для запуска автозаполнения", - }, - List: "Список подсказок", - ListCount: (builtin: number, custom: number) => - `${builtin} встроенных, ${custom} пользовательских`, - Edit: "Редактировать", - Modal: { - Title: "Список подсказок", - Add: "Добавить", - Search: "Поиск подсказок", - }, - 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: { diff --git a/app/locales/tr.ts b/app/locales/tr.ts index 42c3f78e..88e76543 100644 --- a/app/locales/tr.ts +++ b/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", diff --git a/app/locales/tw.ts b/app/locales/tw.ts index a8dbf91a..d1ab127a 100644 --- a/app/locales/tw.ts +++ b/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", diff --git a/app/locales/vi.ts b/app/locales/vi.ts index d3be6105..f8b5bebc 100644 --- a/app/locales/vi.ts +++ b/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", From 881cf082c2928af5956d6d169f11d4ca3c420056 Mon Sep 17 00:00:00 2001 From: Gan-Xing <41600413+Gan-Xing@users.noreply.github.com> Date: Fri, 12 May 2023 10:57:32 +0800 Subject: [PATCH 4/8] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 多国语言支持增加法语 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0267ec2..4d9c8465 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ One-Click to deploy well-designed ChatGPT web UI on Vercel. - 预制角色功能(面具),方便地创建、分享和调试你的个性化对话 - 海量的内置 prompt 列表,来自[中文](https://github.com/PlexPt/awesome-chatgpt-prompts-zh)和[英文](https://github.com/f/awesome-chatgpt-prompts) - 自动压缩上下文聊天记录,在节省 Token 的同时支持超长对话 -- 多国语言支持:English, 简体中文, 繁体中文, 日本語, Español, Italiano, Türkçe, Deutsch +- 多国语言支持:English, 简体中文, 繁体中文, 日本語, Français, Español, Italiano, Türkçe, Deutsch - 拥有自己的域名?好上加好,绑定后即可在任何地方**无障碍**快速访问 ## 开发计划 From a28293746804f530f485132adb641c99d8fd3c6f Mon Sep 17 00:00:00 2001 From: Gan-Xing <41600413+Gan-Xing@users.noreply.github.com> Date: Thu, 11 May 2023 16:31:42 +0800 Subject: [PATCH 5/8] Update README.md Change My Deployment URL --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 90ed7d42..e0267ec2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ One-Click to deploy well-designed ChatGPT web UI on Vercel. [演示](https://chatgpt.nextweb.fun/) / [反馈](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [QQ 群](https://user-images.githubusercontent.com/16968934/236402186-fa76e930-64f5-47ae-b967-b0f04b1fbf56.jpg) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FGan-Xing%2FChatGPT-Next-Web%2F&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) + [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) From 9b000ff242631208edc63871d1bd9265a4930c16 Mon Sep 17 00:00:00 2001 From: Gan-Xing <41600413+Gan-Xing@users.noreply.github.com> Date: Fri, 12 May 2023 10:57:32 +0800 Subject: [PATCH 6/8] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 多国语言支持增加法语 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0267ec2..4d9c8465 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ One-Click to deploy well-designed ChatGPT web UI on Vercel. - 预制角色功能(面具),方便地创建、分享和调试你的个性化对话 - 海量的内置 prompt 列表,来自[中文](https://github.com/PlexPt/awesome-chatgpt-prompts-zh)和[英文](https://github.com/f/awesome-chatgpt-prompts) - 自动压缩上下文聊天记录,在节省 Token 的同时支持超长对话 -- 多国语言支持:English, 简体中文, 繁体中文, 日本語, Español, Italiano, Türkçe, Deutsch +- 多国语言支持:English, 简体中文, 繁体中文, 日本語, Français, Español, Italiano, Türkçe, Deutsch - 拥有自己的域名?好上加好,绑定后即可在任何地方**无障碍**快速访问 ## 开发计划 From 99c854ce1df21eab4e33ebc40d601250aa54b2ca Mon Sep 17 00:00:00 2001 From: Gan-Xing Date: Tue, 16 May 2023 07:38:06 +0800 Subject: [PATCH 7/8] merge update --- .husky/_/pre-commit | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 .husky/_/pre-commit diff --git a/.husky/_/pre-commit b/.husky/_/pre-commit new file mode 100755 index 00000000..0312b760 --- /dev/null +++ b/.husky/_/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged \ No newline at end of file From 8a548ef25216ba7e519a0398f121fdb5924801f2 Mon Sep 17 00:00:00 2001 From: Gan-Xing Date: Tue, 16 May 2023 07:41:26 +0800 Subject: [PATCH 8/8] merge update --- .husky/{_ => }/pre-commit | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .husky/{_ => }/pre-commit (100%) diff --git a/.husky/_/pre-commit b/.husky/pre-commit similarity index 100% rename from .husky/_/pre-commit rename to .husky/pre-commit