Files
ERitors-Scribe-Desktop/lib/locales/fr.json
natreex 7f34421212 Add error handling, enhance syncing, and refactor deletion logic
- Introduce new error messages for syncing and book deletion in `en.json`.
- Update `DeleteBook` to support local-only deletion and synced book management.
- Refine offline/online behavior with `deleteLocalToo` checkbox and update related state handling.
- Extend repository and IPC methods to handle optional IDs for updates.
- Add `SyncQueueContext` for queueing offline changes and improving synchronization workflows.
- Enhance refined text generation logic in `DraftCompanion` and `GhostWriter` components.
- Replace PUT with PATCH for world updates to align with API expectations.
- Streamline `AlertBox` by integrating dynamic translation keys for deletion prompts.
2026-01-10 15:50:03 -05:00

998 lines
44 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"loginPage": {
"title": "Connexion",
"welcome": "Bienvenue sur ERitors",
"orSocial": "ou continuez avec",
"noAccount": "Pas encore de compte?",
"createAccount": "Créez-en un ici",
"backToLogin": "Retour à la connexion",
"offlineWarning": {
"title": "Première synchronisation requise",
"message": "Une connexion Internet est nécessaire pour votre première connexion afin de synchroniser vos données."
}
},
"loginForm": {
"error": {
"emailRequired": "Votre courriel doit être rempli.",
"passwordRequired": "Votre mot de passe doit être rempli.",
"emailLength": "Votre courriel doit avoir au moins 3 caractères.",
"emailInvalidChars": "Votre courriel contient des caractères non valides.",
"connection": "Une erreur est survenue lors de la connexion.",
"server": "Une erreur serveur est survenue lors de la connexion.",
"unknown": "Une erreur inconnue est survenue lors de la connexion."
},
"fields": {
"email": {
"label": "Adresse courriel",
"placeholder": "votre.courriel@exemple.com"
},
"password": {
"label": "Mot de passe",
"placeholder": "••••••••",
"forgot": "Mot de passe oublié?"
}
},
"loading": "Connexion en cours...",
"submit": "Se connecter"
},
"registerPage": {
"title": "Créer un compte",
"subtitle": "Créez un compte gratuitement et commencez votre aventure avec nous.",
"progress": {
"infos": "Informations",
"verif": "Vérification"
},
"backToLogin": "Retour à la connexion"
},
"registerStepOne": {
"fields": {
"firstName": {
"label": "Prénom",
"placeholder": "Votre prénom"
},
"lastName": {
"label": "Nom",
"placeholder": "Votre nom"
},
"username": {
"label": "Nom d'utilisateur",
"placeholder": "Choisissez un nom d'utilisateur",
"note": "Le nom d'utilisateur doit contenir au moins 3 caractères"
},
"email": {
"label": "Adresse courriel",
"placeholder": "votre.courriel@exemple.com"
},
"password": {
"label": "Mot de passe",
"placeholder": "••••••••"
},
"repeatPassword": {
"label": "Confirmer le mot de passe",
"placeholder": "••••••••"
}
},
"next": "Suivant"
},
"resetPassword": {
"title": "Mot de passe oublié",
"subtitle": "Réinitialisez votre mot de passe en quelques étapes simples",
"progress": {
"email": "Courriel",
"verification": "Vérification",
"final": "Finalisation"
},
"fields": {
"email": {
"label": "Adresse courriel",
"placeholder": "votre.courriel@exemple.com"
},
"code": {
"label": "Code de vérification",
"placeholder": "Entrez le code reçu par courriel"
},
"newPassword": {
"label": "Nouveau mot de passe",
"placeholder": "••••••••"
}
},
"verify": "Vérifier",
"confirm": "Confirmer",
"changePassword": "Changer mot de passe",
"back": "Retour",
"success": "Votre mot de passe a été mis à jour avec succès!",
"goToLogin": "Aller à la page de connexion",
"backToLogin": "Retour à la connexion",
"error": {
"codeServer": "Une erreur s'est produite lors de la vérification du code sur le serveur.",
"codeUnknown": "Une erreur inconnue s'est produite lors de la vérification du code.",
"emailInvalid": "Votre courriel est invalide. Veuillez entrer une adresse courriel valide.",
"emailFormat": "Votre saisie n'est pas une adresse courriel valide.",
"emailServer": "Une erreur s'est produite lors de la vérification du courriel sur le serveur.",
"emailUnknown": "Une erreur inconnue s'est produite lors de la vérification du courriel.",
"passwordServer": "Une erreur s'est produite lors de la modification du mot de passe sur le serveur.",
"passwordUnknown": "Une erreur inconnue s'est produite lors de la modification du mot de passe."
}
},
"controllerBar": {
"bookNotFound": "Aucun livre trouvé",
"errorGettingBook": "Erreur lors de la récupération des informations du livre",
"selectBook": "Sélectionner un livre",
"bookSettings": "Paramètres du livre",
"chapterNotFound": "Chapitre non trouvé",
"unknownBookError": "Erreur inconnue lors de la récupération du livre",
"unknownChapterError": "Erreur inconnue lors de la récupération du chapitre"
},
"bookList": {
"library": "Bibliothèque",
"booksAreMirrors": "« Les livres sont les miroirs de l'âme »",
"works": "œuvres",
"welcomeWritingWorkshop": "Bienvenue à votre atelier d'écriture!",
"whitePageText": "La page blanche attend votre créativité. Ajoutez votre première œuvre pour débuter votre aventure littéraire.",
"guideStep0Title": "Félicitation ",
"guideStep0Content": "Votre première œuvre a été ajoutée avec succès. Ceci est le début de votre aventure avec ERitors Scribe. Toutes vos œuvres sont ajoutées ici même, listées selon le type que vous créez.",
"guideStep1Title": "Votre œuvre",
"guideStep1Content": "Ceci est l'œuvre que vous venez d'ajouter. Un simple clic dessus vous permet d'entrer dans l'éditeur Scribe et laisser aller votre imagination.",
"guideStep2Title": "Options de l'œuvre",
"guideStep2ContentGear": "vous permet de gérer les paramètres de votre œuvre, tel le titre, la ligne de directive et bien d'autres options.",
"guideStep2ContentDownload": "vous permet de télécharger votre contenu en format EPUB, PDF et DOCX.",
"guideStep2ContentTrash": "vous permet de supprimer définitivement votre œuvre.",
"errorBookCreate": "Une erreur est survenue lors de la création du livre.",
"errorBooksFetch": "Une erreur est survenue lors de la récupération des livres.",
"errorBookDetails": "Erreur lors de la récupération des détails du livre.",
"errorUnknown": "Une erreur inconnue est survenue."
},
"bookCard": {
"noCoverAlt": "Pas de couverture",
"initialsSeparator": ".",
"subtitlePlaceholder": "Aucun sous-titre",
"synced": "Synchronisé",
"localOnly": "Local uniquement",
"serverOnly": "Sur le serveur uniquement",
"toSyncFromServer": "Télécharger depuis le serveur",
"toSyncToServer": "Envoyer vers le serveur",
"sync": "Synchroniser",
"uploadError": "Erreur lors du téléversement du livre.",
"downloadError": "Erreur lors du téléchargement du livre.",
"syncFromServerError": "Erreur lors de la synchronisation depuis le serveur.",
"syncToServerError": "Erreur lors de la synchronisation vers le serveur.",
"refreshError": "Erreur lors du rafraîchissement des livres."
},
"scribeTopBar": {
"logoAlt": "Logo",
"scribe": "Scribe",
"separator": " - "
},
"scribeLeftBar": {
"editorComponents": {
"structure": {
"title": "Structure",
"description": "Organisez votre histoire avec des chapitres, des scènes et des personnages.",
"badge": "STR"
}
},
"homeComponents": {
"addBook": {
"title": "Ajout d'un livre",
"description": "Ajoutez un livre à votre bibliothèque.",
"badge": "AJOUT"
},
"generateStory": {
"title": "Générer une histoire",
"description": "Générer une histoire à partir de zéro.",
"badge": "+"
},
"lyricGenerator": {
"title": "Générateur de paroles",
"description": "Créer des paroles de chanson en quelque cliques.",
"badge": "Lyrics"
}
}
},
"scribeChapterComponent": {
"sheetHeading": "Feuille",
"createSheet": "Créer ta feuille",
"chaptersHeading": "Chapitres",
"addChapterPlaceholder": "+ Ajouter un chapitre",
"deleteChapterTitle": "Supprimer le chapitre",
"deleteChapterMessage": "Vous êtes sur le point de supprimer un chapitre",
"errorChapterUpdate": "Une erreur est survenue lors de la mise à jour du chapitre.",
"errorChapterDelete": "Une erreur est survenue lors de la suppression du chapitre.",
"errorChapterNameRequired": "Le nom du chapitre est requis.",
"errorChapterSubmit": "Erreur lors de la soumission du chapitre {chapterName}.",
"errorFetchChapter": "Erreur lors de la récupération du chapitre.",
"errorFetchChapters": "Erreur lors de la récupération des chapitres.",
"successUpdate": "Chapitre mis à jour avec succès.",
"unknownErrorChapterDelete": "Erreur inconnue lors de la suppression du chapitre."
},
"composerRightBar": {
"editorComponents": {
"quillSense": {
"title": "QuillSense",
"description": "Obtenez des conseils d'écriture et des suggestions pour améliorer votre histoire.",
"badge": "AI"
},
"worlds": {
"title": "Mondes",
"description": "Développez les mondes de votre histoire, y compris la géographie et la culture.",
"badge": "WORLD"
},
"locations": {
"title": "Lieux",
"description": "Ajoutez des lieux et des environnements à votre histoire.",
"badge": "LOC"
},
"characters": {
"title": "Personnage",
"description": "Créez et gérez vos personnages, leurs relations et leurs arcs narratifs.",
"badge": "CHAR"
},
"items": {
"title": "Objets",
"description": "Gérez les objets importants de votre histoire.",
"badge": "ITEM"
}
},
"homeComponents": {
"about": {
"title": "À propos d'ERitors",
"description": "Découvrez les fonctionnalités et les avantages d'ERitors.",
"badge": "INFO"
},
"facebook": {
"title": "Facebook",
"description": "Rejoignez notre communauté sur Facebook.",
"badge": "FB"
},
"discord": {
"title": "Discord",
"description": "Rejoignez notre communauté sur Discord.",
"badge": "DISCORD"
}
}
},
"quillSense": {
"needSubscription": "Veuillez vous abonner à QuillSense ou Amenez vos clés pour accéder à cette fonctionnalité.",
"subscriptionDescription": "Débloquez des outils d'aide à l'écriture puissants pour enrichir votre prose.",
"toggleList": "Afficher la liste des conversations",
"options": {
"chat": "Clavardage",
"dictionary": "Dictionnaire",
"synonyms": "Synonymes",
"conjugator": "Conjugueur",
"inspiration": "Inspiration"
}
},
"dictionary": {
"fieldName": "Dictionnaire intelligent",
"searchPlaceholder": "Rechercher un mot...",
"searchAction": "Rechercher",
"loading": "Recherche en cours...",
"definitionHeading": "Définition",
"exampleHeading": "Exemple",
"literaryUsageHeading": "Usage littéraire",
"description": "Recherchez un mot pour obtenir sa définition, des exemples d'utilisation et des conseils littéraires.",
"errorUnknown": "Une erreur inconnue est survenue lors de la recherche du mot."
},
"synonyms": {
"heading": "Recherche lexicale",
"subheading": "Explorez le vocabulaire",
"optionSynonyms": "Synonymes",
"optionAntonyms": "Antonymes",
"inputPlaceholder": "Entrez un mot...",
"enterWordError": "Veuillez entrer un mot à rechercher.",
"loading": "Recherche en cours...",
"resultSynonyms": "Synonymes de \"{word}\"",
"resultAntonyms": "Antonymes de \"{word}\"",
"emptySynonymsTitle": "Recherche de synonymes",
"emptyAntonymsTitle": "Recherche d'antonymes",
"emptySynonymsDescription": "Entrez un mot pour trouver des synonymes adaptés à différents contextes d'écriture.",
"emptyAntonymsDescription": "Entrez un mot pour trouver des antonymes adaptés à différents contextes d'écriture.",
"errorUnknown": "Une erreur inconnue est survenue lors de la recherche du mot."
},
"inspireMe": {
"fieldName": "Trouver l'inspiration",
"inputPlaceholder": "En quoi aimeriez-vous être inspiré ?",
"actionLabel": "Inspire-moi",
"loading": "Recherche d'inspiration en cours...",
"resultHeading": "Idées d'inspiration",
"justificationHeading": "Justification",
"linkHeading": "Lien avec l'histoire",
"emptyHeading": "Inspire-moi",
"emptyDescription": "Recherchez des idées pour enrichir votre écriture. Entrez un prompt et laissez l'IA vous inspirer avec des suggestions créatives basées sur votre contenu actuel.",
"emptyPromptError": "Veuillez entrer un prompt pour vous inspirer.",
"errorUnknown": "Une erreur inconnue est survenue lors de la tentative d'inspiration."
},
"conjugator": {
"locked": {
"title": "Accès requis",
"description": "Un abonnement de niveau de base de QuillSense ou une clé API OpenAI est requis pour activer le conjugateur intelligent."
},
"input": {
"placeholder": "Entrez un verbe à conjuguer...",
"label": "Verbe",
"action": "Conjuguer"
},
"loading": "Conjugaison en cours...",
"welcome": {
"title": "Conjugateur",
"description": "Entrez un verbe pour voir toutes ses conjugaisons dans les différents modes et temps."
},
"error": {
"unknown": "Une erreur inconnue est survenue"
},
"persons": {
"je": "je",
"tu": "tu",
"il": "il/elle",
"nous": "nous",
"vous": "vous",
"ils": "ils/elles"
}
},
"worldSetting": {
"getWorldsError": "Erreur lors de la récupération des mondes.",
"unknownError": "Erreur inconnu.",
"newWorldNameError": "Veuillez entrer un nom pour le nouveau monde.",
"selectWorld": "Monde",
"addWorldLabel": "Ajouter un monde",
"createWorldLabel": "Créer un monde",
"selectWorldPlaceholder": "Sélectionner un monde",
"noWorldAvailable": "Aucun monde disponible.",
"newWorldPlaceholder": "Nom du nouveau monde...",
"worldName": "Nom du monde",
"worldNamePlaceholder": "Entrez le nom du monde",
"worldHistory": "Histoire du monde",
"worldHistoryPlaceholder": "Décrivez l'histoire de votre monde",
"politics": "Description politique",
"politicsPlaceholder": "La description politique de ce monde...",
"economy": "Règles et statut économique",
"economyPlaceholder": "Les règles et le statut économique du monde.",
"religion": "Religions",
"religionPlaceholder": "Parlez des règles religieuses et des restrictions.",
"languages": "Languages",
"languagesPlaceholder": "Créez votre propre langue ou mentionnez simplement celles disponibles.",
"updateWorldError": "Échec de la mise à jour :",
"addWorldError": "Erreur lors de l'ajout du monde.",
"updateWorldSuccess": "Monde mis à jour avec succès."
},
"locationComponent": {
"newSectionPlaceholder": "Nom de la nouvelle section",
"addSectionLabel": "Ajouter une section",
"elementNamePlaceholder": "Nom de l'élément",
"elementDescriptionPlaceholder": "Description de l'élément",
"subElementsHeading": "Sous-éléments",
"subElementNamePlaceholder": "Nom du sous-élément",
"subElementDescriptionPlaceholder": "Description du sous-élément",
"newSubElementPlaceholder": "Nouveau sous-élément",
"noElementAvailable": "Aucun élément disponible. Ajoutez-en un ci-dessous!",
"newElementPlaceholder": "Nouvel élément",
"noSectionAvailable": "Aucune section disponible.",
"createSectionLabel": "Créer une section",
"errorSectionNameEmpty": "Le nom de la section ne peut pas être vide.",
"errorElementNameEmpty": "Le nom de l'élément ne peut pas être vide.",
"errorSubElementNameEmpty": "Le nom du sous-élément ne peut pas être vide.",
"errorAddSection": "Une erreur est survenue lors de l'ajout de la section.",
"errorUnknownAddSection": "Impossible d'ajouter la section. Veuillez réessayer ultérieurement.",
"errorAddElement": "Une erreur est survenue lors de l'ajout de l'élément.",
"errorUnknownAddElement": "Impossible d'ajouter l'élément. Veuillez réessayer ultérieurement.",
"errorAddSubElement": "Une erreur est survenue lors de l'ajout du sous-élément.",
"errorUnknownAddSubElement": "Impossible d'ajouter le sous-élément. Veuillez réessayer ultérieurement.",
"errorDeleteElement": "Une erreur est survenue lors de la suppression de l'élément.",
"errorUnknownDeleteElement": "Impossible de supprimer l'élément. Veuillez réessayer ultérieurement.",
"errorDeleteSubElement": "Une erreur est survenue lors de la suppression du sous-élément.",
"errorUnknownDeleteSubElement": "Impossible de supprimer le sous-élément. Veuillez réessayer ultérieurement.",
"errorDeleteSection": "Une erreur est survenue lors de la suppression de la section.",
"errorUnknownDeleteSection": "Impossible de supprimer la section. Veuillez réessayer ultérieurement.",
"errorSave": "Une erreur est survenue lors de la sauvegarde des emplacements.",
"errorUnknownSave": "Impossible de sauvegarder les modifications. Veuillez réessayer ultérieurement.",
"errorUnknownFetchLocations": "Erreur inconnue lors de la récupération des emplacements.",
"successSave": "Emplacements sauvegardés avec succès."
},
"characterComponent": {
"errorNameRequired": "Le nom du personnage est requis.",
"errorCategoryRequired": "Le rôle du personnage est requis.",
"successAdd": "Personnage ajouté avec succès.",
"successUpdate": "Personnage mis à jour avec succès.",
"errorAddCharacter": "Erreur lors de l'ajout du personnage.",
"errorUpdateCharacter": "Erreur lors de la mise à jour du personnage.",
"errorAddAttribute": "Erreur lors de l'ajout de l'attribut.",
"errorRemoveAttribute": "Erreur lors de la suppression de l'attribut."
},
"characterDetail": {
"back": "Retour",
"newCharacter": "Nouveau personnage",
"basicInfo": "Informations de base",
"name": "Nom",
"namePlaceholder": "Entrer un nom",
"lastName": "Nom de famille",
"lastNamePlaceholder": "Exemple : Smith",
"role": "Rôle",
"title": "Titre",
"historySection": "Parcourt",
"biography": "Biographie",
"biographyPlaceholder": "La biographie du personnage.",
"history": "Histoire",
"historyPlaceholder": "Histoire du personnage...",
"roleFull": "Rôle",
"roleFullPlaceholder": "Rôle du personnage dans l'histoire",
"fetchAttributesError": "Erreur lors de la récupération des attributs."
},
"characterList": {
"search": "Rechercher un personnage...",
"add": "Ajouter un personnage",
"unknownImage": "?",
"unknown": "Inconnu",
"noLastName": "Sans nom",
"noTitle": "Sans titre",
"noRole": "Sans rôle"
},
"characterSectionElement": {
"newItem": "Nouveau {item}"
},
"aboutEditors": {
"title": "À propos de Scribe",
"version": "Version",
"copyrightLabel": "Copyright",
"descriptionLabel": "Description",
"teamLabel": "Équipe",
"techLabel": "Technologies",
"copyright": "© 2025, Tous droits réservés",
"description": "ERitors est une plateforme d'écriture intuitive conçue pour les auteurs. Inspirée par une passion pour les histoires captivantes, ERitors surmonte les obstacles traditionnels de l'écriture en offrant un environnement intégré pour structurer vos idées, gérer vos versions et développer vos univers narratifs. Que vous écriviez une petite histoire ou un roman épique, ERitors vous accompagne à chaque étape de votre parcours créatif. Rejoignez-nous et découvrez comment ERitors peut transformer votre processus d'écriture.",
"teamMember": "Kevin Dorion"
},
"bookSettingOption": {
"basicInformation": "Informations de base",
"guideLine": "Ligne directrice",
"storyPlan": "Plan de l'histoire",
"manageWorlds": "Gérer les mondes",
"yourLocations": "Vos lieux",
"characters": "Les personnages",
"objectsList": "Liste des objets",
"bookGoals": "Objectifs du livre",
"save": "Sauvegarder",
"notAvailable": "Option non disponible"
},
"noBookHome": {
"title": "Votre œuvre attend ses premiers mots",
"description": "Cette œuvre n'a pas encore de chapitres. Pour commencer à écrire, créez votre premier chapitre.",
"hint": "Cliquez sur l'icône Livre Ouvert dans la barre d'outils pour gérer la structure"
},
"textEditor": {
"preferences": "Préférences",
"ghostWriter": "Écrivain Fantôme",
"draftCompanion": "Draft Companion",
"save": "Enregistrer",
"saving": "Enregistrement en cours...",
"close": "Fermer",
"toolbar": {
"1": "1",
"2": "2",
"3": "3"
}
},
"draftCompanion": {
"noPreviousVersion": "Aucune version antérieure de ce chapitre",
"errorFetchDraft": "Erreur lors de la récupération du contenu du brouillon.",
"unknownError": "Une erreur inconnue s'est produite",
"errorRefineText": "Erreur lors de la correction du texte",
"errorRefineDraft": "Erreur lors de la correction du brouillon : {message}",
"unknownErrorRefineDraft": "Une erreur inconnue s'est produite lors de la correction du brouillon",
"successInsert": "Correction insérée avec succès",
"selectVersion": "Sélectionner une version",
"words": "Mots",
"refine": "Perfectionner",
"refining": "En cours de perfectionnement...",
"abortSuccess": "Génération arrêtée. Les totaux de tokens et coûts seront disponibles au prochain rafraîchissement de la page."
},
"ghostWriter": {
"title": "Écrivain Fantôme",
"description": "Transformez vos idées en prose captivante",
"subscriptionRequired": "Vous devez être abonné à Quill Sense pour utiliser Ghost Writer.",
"subscribe": "S'abonner",
"length": "Longueur du texte",
"minimum": "Minimum",
"maximum": "Maximum",
"words": "mots",
"type": "Type d'écriture",
"toneAtmosphere": "Ton et atmosphère",
"tonePlaceholder": "Ex : Mystérieux, joyeux, sombre...",
"directive": "Directives créatives",
"importPrompt": "Importer l'invite",
"directivePlaceholder": "Ex : Écris un chapitre sur...",
"save": "Sauvegarder",
"advanced": "Avancé",
"cancel": "Annuler",
"generate": "Générer",
"generating": "Création en cours...",
"stop": "Arrêter",
"successGenerate": "Texte généré avec succès.",
"successInsert": "Extrait inséré avec succès",
"successImport": "Contenu importé avec succès",
"errorGenerate": "Une erreur est survenue pendant la génération.",
"errorImport": "Une erreur est survenue pendant l'import.",
"errorUnknown": "Une erreur inconnue est survenue.",
"errorUnknownImport": "Une erreur inconnue est survenue pendant l'import.",
"noContentFound": "Aucun contenu trouvé",
"promptEmpty": "Le prompt avancé ne peut pas être vide.",
"errorSaveAdvanced": "Erreur lors de la sauvegarde des paramètres avancés.",
"successSaveAdvanced": "Paramètres avancés sauvegardés avec succès.",
"errorSave": "Une erreur est survenue pendant la sauvegarde.",
"errorUnknownSave": "Une erreur inconnue est survenue pendant la sauvegarde.",
"errorRetrieveContent": "Erreur lors de la récupération du contenu.",
"errorUnknownRetrieveContent": "Erreur inconnue lors de la récupération du contenu.",
"abortSuccess": "Génération arrêtée. Les totaux de tokens et coûts seront disponibles au prochain rafraîchissement de la page.",
"settings": {
"unknownError": "Erreur inconnue lors de la sauvegarde des paramètres."
},
"tags": {
"addTagPlaceholder": "Tags",
"unknownError": "Erreur inconnue lors de la gestion des tags."
}
},
"userEditorSettings": {
"displayPreferences": "Préférences d'affichage",
"textSize": "Taille du texte",
"zoom": {
"Très petit": "Très petit",
"Petit": "Petit",
"Normal": "Normal",
"Grand": "Grand",
"Très grand": "Très grand"
},
"indent": "Indentation des paragraphes",
"indentNone": "Aucune",
"indentMax": "Maximum",
"lineHeight": "Interligne",
"lineHeightCompact": "Compact (1.2)",
"lineHeightNormal": "Normal (1.5)",
"lineHeightSpaced": "Aéré (1.75)",
"lineHeightDouble": "Double (2.0)",
"fontFamily": "Police de caractères",
"fontLora": "Lora (Police personnalisée)",
"fontSerif": "Serif (Times, Georgia)",
"fontSansSerif": "Sans-serif (Arial, Helvetica)",
"fontMonospace": "Monospace (Courier)",
"maxWidth": "Largeur du contenu",
"maxWidthNarrow": "Étroit",
"maxWidthWide": "Large",
"theme": "Thème d'affichage",
"themeOption": {
"clair": "Clair",
"sombre": "Sombre",
"sépia": "Sépia"
},
"focusMode": "Mode focus (masquer les distractions)",
"reset": "Réinitialiser les préférences"
},
"scribeFooterBar": {
"sheet": "Feuille : ",
"madeWith": "Éditeur Scribe fait avec",
"words": "Mots",
"books": "Livres"
},
"addNewBookForm": {
"title": "Ajouter un nouvel oeuvre",
"type": "Type de livre",
"typePlaceholder": "Sélectionner un type de livre",
"bookTitle": "Titre",
"bookTitlePlaceholder": "Titre du livre",
"subtitle": "Sous-titre",
"subtitlePlaceholder": "Sous-titre (optionnel)",
"publicationDate": "Date de sortie souhaitée",
"wordGoal": "Objectif de mots",
"wordGoalPlaceholder": "Objectif de mots",
"summary": "Résumé",
"summaryPlaceholder": "Résumé du livre",
"words": "mots",
"add": "Ajouter",
"adding": "Ajout...",
"error": {
"titleMissing": "Oops! Le titre est manquant.",
"titleTooShort": "Le titre est trop court. Minimum 2 caractères requis",
"titleTooLong": "Le titre est trop long. Maximum 50 caractères autorisés",
"typeMissing": "Sélectionner un genre.",
"addingBook": "Une erreur est survenue lors de l'ajout du livre."
},
"bookTypeHint": {
"title": "Type d'oeuvre",
"nouvelle": {
"title": "Nouvelle",
"range": "2 000 - 7 500 mots",
"description": "Format court centré sur un événement unique. Structure resserrée, idéale pour débuter l'écriture de fiction."
},
"novelette": {
"title": "Novelette",
"range": "7 500 - 17 500 mots",
"description": "Format intermédiaire permettant une intrigue secondaire. Populaire en science-fiction et fantasy."
},
"novella": {
"title": "Novella",
"range": "17 500 - 40 000 mots",
"description": "Œuvre courte mais substantielle. Développement approfondi des personnages avec une densité narrative optimale."
},
"chapbook": {
"title": "Chapbook",
"range": "500 - 5 000 mots",
"description": "Publication courte, souvent expérimentale. Format libre et créatif, idéal pour tester de nouveaux styles."
},
"roman": {
"title": "Roman",
"range": "40 000+ mots",
"description": "Œuvre longue avec multiples intrigues et personnages. Nécessite une structure solide et une planification rigoureuse."
},
"tip": "💡 Conseil : Commencez par une nouvelle pour maîtriser les bases, puis évoluez vers des formats plus longs selon votre expérience."
}
},
"searchBook": {
"placeholder": "Recherchez dans votre bibliothèque..."
},
"guideLineSetting": {
"saveSuccess": "Ligne directrice sauvegardée avec succès.",
"saveError": "Erreur lors de la sauvegarde de la ligne directrice.",
"errorUnknown": "Erreur inconnue lors de la sauvegarde.",
"personal": "Personnel",
"quillsense": "QuillSense",
"tone": "Ton",
"tonePlaceholder": "Décrivez le ton de votre livre",
"atmosphere": "Atmosphère",
"atmospherePlaceholder": "Décrivez l'atmosphère de votre livre",
"writingStyle": "Style d'écriture",
"writingStylePlaceholder": "Décrivez le style d'écriture de votre livre",
"themes": "Thèmes",
"themesPlaceholder": "Décrivez les thèmes de votre livre",
"themesPlaceholderQuill": "Thèmes désirés",
"symbolism": "Symbolisme",
"symbolismPlaceholder": "Décrivez le symbolisme dans votre livre",
"motifs": "Motifs",
"motifsPlaceholder": "Décrivez les motifs récurrents de votre livre",
"narrativeVoice": "Voix narrative",
"narrativeVoicePlaceholder": "Décrivez la voix narrative de votre livre",
"pacing": "Rythme",
"pacingPlaceholder": "Décrivez le rythme de votre livre",
"intendedAudience": "Public cible",
"intendedAudiencePlaceholder": "Décrivez le public cible de votre livre",
"keyMessages": "Messages clés",
"keyMessagesPlaceholder": "Décrivez les messages clés de votre livre",
"plotSummary": "Résumé de l'intrigue",
"plotSummaryPlaceholder": "Résumé de l'intrigue généré par QuillSense",
"toneAtmosphere": "Ton et atmosphère",
"toneAtmospherePlaceholder": "Ton et atmosphère recommandés",
"verbTense": "Temps des verbes",
"verbTensePlaceholder": "Temps des verbes recommandés",
"narrativeType": "Type de narration",
"narrativeTypePlaceholder": "Type de narration recommandé",
"dialogueType": "Type de dialogue",
"dialogueTypePlaceholder": "Type de dialogue recommandé",
"language": "Langage",
"languagePlaceholder": "Langage recommandé"
},
"story": {
"errorFetch": "Une erreur est survenue lors de la récupération des données de l'histoire.",
"errorUnknownFetch": "Une erreur inconnue lors de la récupération des données de l'histoire.",
"errorSave": "Une erreur est survenue lors de la sauvegarde.",
"errorUnknownSave": "Une erreur inconnue lors de la sauvegarde.",
"successSave": "Histoire sauvegardée avec succès."
},
"mainChapter": {
"chapters": "Chapitres",
"chapterTitlePlaceholder": "Titre du chapitre",
"noChapter": "Aucun chapitre disponible. Ajoute-en un ci-dessous!",
"newChapterPlaceholder": "Nouveau chapitre",
"deleteTitle": "Supprimer le chapitre",
"deleteMessage": "Vous êtes sur le point de supprimer un chapitre",
"errorDelete": "Une erreur est survenue lors de la suppression du chapitre.",
"errorUnknownDelete": "Une erreur inconnue est survenue lors de la suppression du chapitre.",
"errorAdd": "Erreur lors de l'ajout du chapitre principal.",
"errorUnknownAdd": "Erreur inconnue lors de l'ajout du chapitre principal."
},
"actComponent": {
"errorAddIncident": "Erreur lors de l'ajout du nouvel incident déclencheur.",
"errorUnknownAddIncident": "Erreur inconnue lors de l'ajout de l'incident déclencheur.",
"errorDeleteIncident": "Une erreur est survenue lors de la suppression de l'incident.",
"errorUnknownDeleteIncident": "Une erreur inconnue est survenue lors de la suppression de l'incident.",
"errorAddPlotPoint": "Une erreur est survenue lors de l'ajout du point de plot.",
"errorUnknownAddPlotPoint": "Une erreur inconnue est survenue lors de l'ajout du point de plot.",
"errorDeletePlotPoint": "Une erreur est survenue lors de la suppression du point de plot.",
"errorUnknownDeletePlotPoint": "Une erreur inconnue est survenue lors de la suppression du point de plot.",
"errorLinkChapter": "Une erreur est survenue lors de l'ajout du chapitre.",
"errorUnknownLinkChapter": "Une erreur inconnue est survenue lors de l'ajout du chapitre.",
"errorUnlinkChapter": "Une erreur est survenue lors de la suppression du chapitre.",
"errorUnknownUnlinkChapter": "Une erreur inconnue est survenue lors de la suppression du chapitre.",
"chapterSummaryPlaceholder": "Résumé du chapitre pour cet acte",
"remove": "Retirer",
"chapters": "Chapitres",
"noLinkedChapter": "Aucun chapitre lié",
"selectChapterPlaceholder": "Sélectionner un chapitre...",
"act1Summary": "Résumé de l'acte 1",
"act4Summary": "Résumé de l'acte 4",
"act5Summary": "Résumé de l'acte 5",
"actSummary": "Résumé de l'acte",
"act1SummaryPlaceholder": "Résumé de l'acte 1",
"act4SummaryPlaceholder": "Résumé de l'acte 4",
"act5SummaryPlaceholder": "Résumé de l'acte 5",
"actSummaryPlaceholder": "Résumé de l'acte",
"delete": "Supprimer",
"incidentsTitle": "Incidents (Éléments déclencheurs)",
"noIncidentAdded": "Aucun incident ajouté",
"newIncidentPlaceholder": "Nouveau élément déclencheur",
"plotPointsTitle": "Points d'intrigue (Péripéties)",
"linkedTo": "Lié à",
"noPlotPointAdded": "Aucun point d'intrigue ajouté",
"newPlotPointPlaceholder": "Nouveau point d'intrigue",
"act1Title": "Acte 1: Introduction",
"act2Title": "Acte 2: Éléments déclencheurs",
"act3Title": "Acte 3: Péripéties",
"act4Title": "Acte 4: Dénouement",
"act5Title": "Acte 5: Conclusion"
},
"issues": {
"title": "Problématiques",
"issueNamePlaceholder": "Nom de la problématique",
"noIssue": "Aucune problématique ajoutée. Ajoutes-en une ci-dessous!",
"newIssuePlaceholder": "Nouvelle problématique",
"errorAdd": "Une erreur est survenue lors de l'ajout.",
"errorUnknownAdd": "Une erreur inconnue est survenue.",
"errorDelete": "Une erreur est survenue lors de la suppression.",
"errorUnknownDelete": "Une erreur inconnue est survenue.",
"errorEmptyName": "Le nom de la problématique ne peut pas être vide.",
"errorInvalidId": "ID de problématique invalide."
},
"worldElementComponent": {
"errorDelete": "Erreur lors de la suppression de l'élément.",
"errorAdd": "Erreur lors de l'ajout de l'élément.",
"errorUnknown": "Une erreur inattendue s'est produite.",
"emptyField": "Le champ {section} est vide.",
"namePlaceholder": "Nom {section}",
"descriptionPlaceholder": "Description de {section}",
"newPlaceholder": "Nouveau {section}"
},
"bookTypes": {
"short": "Nouvelle",
"novelette": "Novelette",
"novella": "Novella",
"chapbook": "Chapbook",
"novel": "Roman"
},
"chapterVersions": {
"prompt": "Invite",
"draft": "Brouillon",
"refine": "Perfectionnement",
"review": "Révision",
"final": "Finale"
},
"bookSetting": {
"basicInformation": "Information de base",
"guideLine": "Ligne directrice",
"story": "Histoire",
"world": "Mondes",
"locations": "Emplacements",
"characters": "Personnages",
"objects": "Objets",
"goals": "Buts"
},
"basicInformationSetting": {
"error": {
"noFileSelected": "Aucun fichier sélectionné.",
"removeCover": "Erreur lors de la suppression de la couverture du livre.",
"titleRequired": "Le titre est obligatoire.",
"update": "Erreur lors de la mise à jour des informations de base du livre.",
"unknown": "Une erreur inconnue est survenue."
},
"success": {
"update": "Informations de base mises à jour avec succès."
},
"fields": {
"title": "Titre",
"titlePlaceholder": "Entrez le titre du livre",
"subtitle": "Sous-titre",
"subtitlePlaceholder": "Entrez un sous-titre (optionnel)",
"summary": "Résumé",
"summaryPlaceholder": "Décrivez brièvement votre livre",
"publicationDate": "Date de publication",
"wordCount": "Nombre de mots",
"wordCountPlaceholder": "Entrez le nombre de mots",
"coverImage": "Image couverture",
"coverImageAlt": "Couverture actuelle",
"generateWithQuillSense": "Générer avec QuillSense"
}
},
"quillConversation": {
"emptyMessageError": "Veuillez entrer un message avant de l'envoyer.",
"inputPlaceholder": "Qu'avez-vous à l'esprit?",
"accessRequired": {
"title": "Accès au Clavardage Requis",
"description": "Un abonnement à QuillSense intermédiaire est nécessaire, ou une clé Gemini activée dans vos paramètres est nécessaire si vous êtes membre fondateur ou abonné à \"Amenez vos clés\"."
},
"loadingMessage": "QuillSense écrit",
"welcomeTitle": "Bienvenue sur QuillSense",
"welcomeDescription": "Votre assistant d'écriture intelligent. Posez-moi des questions sur votre histoire, demandez des conseils d'écriture ou explorez de nouvelles idées créatives.",
"welcomeTip": "💡 Astuce : Activez le contexte pour des réponses personnalisées à votre œuvre",
"contextLabel": "Contexte :",
"context": {
"none": "Aucun",
"chapter": "Chapitre",
"book": "Ouvrage"
},
"contextAlert": {
"title": "Activation du contexte",
"chapter": "Le contenu du chapitre actuel sera envoyé à Gemini pour fournir des réponses contextualisées.",
"book": "Le contenu complet de votre ouvrage sera envoyé à Gemini pour fournir des réponses contextualisées."
},
"genericError": "Une erreur est survenue. Veuillez réessayer.",
"loadError": "Erreur lors du chargement de la conversation.",
"sendError": "Erreur lors de l'envoi du message."
},
"qsTextPreview": {
"title": "Extrait généré",
"insert": "Insérer"
},
"common": {
"cancel": "Annuler",
"confirm": "Confirmer",
"unknownError": "Une erreur inconnue est survenue"
},
"editor": {
"error": {
"savedFailed": "Échec de l'enregistrement",
"unknownError": "Une erreur inconnue est survenue"
},
"success": {
"saved": "Enregistré avec succès"
}
},
"errors": {
"wordCountError": "Erreur lors du calcul du nombre de mots"
},
"homePage": {
"loading": "Chargement en cours...",
"guide": {
"welcome": "Bienvenue {name}",
"step0": {
"description1": "ERitors est un logiciel assisté par l'intelligence artificielle (API Anthropic et OpenAI) intégrée sous le nom de QuillSense. Son objectif est de vous fournir tous les outils nécessaires pour créer une œuvre complète de A à Z.",
"description2": "Ce guide vous accompagnera dans vos premiers pas. Vous pouvez naturellement le passer si vous le souhaitez."
},
"step1": {
"title": "Outils de base",
"addBook": "Permet d'ouvrir le panneau pour créer un nouvel ouvrage.",
"generateStory": "Permet d'ouvrir le panneau pour générer une histoire courte (nouvelle) via QuillSense."
},
"step2": {
"title": "Recherche",
"description": "Une fois votre premier ouvrage créé, vous pourrez le retrouver facilement grâce à cette barre de recherche intégrée."
},
"step3": {
"title": "Gestion de votre compte",
"description": "Accédez à vos paramètres pour gérer votre compte, activer l'authentification à deux facteurs (2FA) ou vous déconnecter en toute sécurité."
},
"step4": {
"title": "Prêt à commencer",
"description1": "Vous êtes maintenant prêt à utiliser ERitors dans sa plénitude ! Créez votre premier ouvrage ou laissez QuillSense vous inspirer avec une nouvelle histoire.",
"description2": "Bonne rédaction ! 🖋️"
}
},
"errors": {
"termsError": "Erreur lors de la récupération des conditions d'utilisation",
"userNotFound": "Utilisateur non trouvé",
"authenticationError": "Erreur pendant l'authentification",
"termsAcceptError": "Erreur lors de l'acceptation des conditions d'utilisation",
"lastChapterError": "Erreur lors de la récupération du dernier chapitre",
"localDataError": "Impossible de charger les données locales",
"encryptionKeyError": "Clé de chiffrement non trouvée",
"offlineModeError": "Erreur lors de l'initialisation du mode hors ligne",
"offlineInitError": "Erreur lors de l'initialisation du mode hors ligne",
"syncError": "Erreur lors de la synchronisation des données",
"dbInitError": "Erreur lors de l'initialisation de la base de données locale",
"offlineError": "Erreur lors de la vérification du mode hors ligne"
}
},
"shortStoryGenerator": {
"title": "Générateur d'histoires courtes",
"tabs": {
"basics": "Bases",
"structure": "Structure",
"atmosphere": "Ambiance",
"result": "Résultat"
},
"result": {
"title": "Ton histoire générée",
"generating": "Génération de l'histoire en cours...",
"words": "mots",
"noResponse": "Aucune réponse reçue du générateur.",
"saveError": "Erreur lors de la sauvegarde de l'histoire.",
"unknownError": "Une erreur inconnue est survenue.",
"abortSuccess": "Génération arrêtée. Les totaux de tokens et coûts seront disponibles au prochain rafraîchissement de la page."
},
"fields": {
"complexity": "Niveau d'écriture",
"preset": "Type prédéfini",
"language": "Langue",
"wordCount": "Nombre de mots",
"tense": "Temps du récit",
"narrative": "Personne narrative",
"dialogue": "Type de dialogues",
"directives": "Directives spéciales",
"tone": "Ton",
"atmosphere": "Ambiance",
"character": "Personnages"
},
"placeholders": {
"directives": "Ajoute des consignes ou des détails particuliers (ex: Fin heureuse, événement marquant…)",
"tone": "Décris le ton (ex: joyeux, mystérieux, dramatique…)",
"atmosphere": "Décris l'ambiance (ex: ensoleillée, sombre, tendue…)",
"character": "Liste les personnages principaux"
},
"actions": {
"generate": "Générer l'histoire",
"generating": "Génération...",
"save": "Enregistrer",
"regenerate": "Re-générer",
"improve": "Améliorer avec Magic Fix",
"stop": "Arrêter"
},
"navigation": {
"previous": "Précédent",
"next": "Suivant",
"cancel": "Annuler",
"close": "Fermer"
},
"accessDenied": {
"title": "Accès refusé",
"message": "Désolé! Cette fonctionnalité est réservée aux membres avancés. Tu dois avoir un abonnement supérieur ou loption activation IA avancée.",
"close": "Fermer"
}
},
"userMenu": {
"settings": "Paramètres",
"logout": "Déconnexion"
},
"offline": {
"mode": {
"title": "Mode Hors Ligne",
"backToOnline": "Retour à la connexion en ligne"
},
"pin": {
"setup": {
"title": "Configurer le PIN",
"titleFirstLogin": "Sécurisez votre accès hors ligne",
"subtitle": "Protégez vos données locales",
"description": "Ce PIN vous permettra d'accéder à vos œuvres même sans connexion internet",
"pinLabel": "Code PIN (4-8 chiffres)",
"confirmPinLabel": "Confirmer le PIN",
"laterButton": "Plus tard",
"configureButton": "Configurer le PIN",
"configuringButton": "Configuration...",
"footer": "Votre PIN est stocké de manière sécurisée sur votre appareil"
},
"verify": {
"title": "Mode Hors Ligne",
"subtitle": "Entrez votre PIN pour accéder à vos œuvres locales",
"placeholder": "Entrez votre PIN",
"enterPin": "Veuillez entrer votre PIN",
"incorrect": "PIN incorrect",
"tooManyAttempts": "Trop de tentatives échouées. Veuillez vous reconnecter en ligne.",
"error": "Erreur lors de la vérification du PIN",
"cancelButton": "Annuler",
"unlockButton": "Déverrouiller",
"verifyingButton": "Vérification...",
"attemptsRemaining": "{{count}} tentative(s) restante(s)"
},
"errors": {
"tooShort": "Le PIN doit contenir au moins 4 chiffres",
"tooLong": "Le PIN ne peut pas dépasser 8 chiffres",
"digitsOnly": "Le PIN doit contenir uniquement des chiffres",
"mismatch": "Les codes PIN ne correspondent pas",
"setupFailed": "Erreur lors de la configuration du PIN"
}
}
},
"deleteBook": {
"title": "Suppression du livre",
"message": "Vous êtes sur le point de supprimer votre livre définitivement.",
"confirm": "Supprimer",
"cancel": "Annuler",
"deleteLocalToo": "Supprimer également la version locale",
"deleteLocalWarning": "Attention : Cette action supprimera le livre du serveur ET de votre appareil. Cette action est irréversible.",
"errorUnknown": "Une erreur inconnue est survenue lors de la suppression du livre."
}
}