{ "gameSystems": { "heroTitle": "Systèmes de JDR", "heroSubtitle": "Les règles que l'IA connaîtra pour vos campagnes", "noDescription": "(Pas de description)", "byAuthor": "par {{author}}", "public": "public", "newSystem": "Nouveau système", "newSystemSubtitle": "Saisir les règles d'un JDR (markdown)", "tip": "💡 Astuce : organisez vos règles par sections avec des titres ## Combat, ## Classes, ## Lore… Le système injectera les sections pertinentes selon ce que l'IA doit générer.", "deleteTitle": "Supprimer le système", "deleteMessage": "Supprimer le système \"{{name}}\" ?", "deleteDetail": "Les campagnes qui l'utilisent ne seront plus associées à aucun système." }, "gameSystemEdit": { "backToList": "Retour à la liste", "editTitle": "Éditer le système", "createTitle": "Nouveau système de JDR", "nameLabel": "Nom *", "namePlaceholder": "Ex: Nimble, D&D 5.1 SRD, Mon Homebrew...", "descriptionLabel": "Description courte", "descriptionPlaceholder": "En une ligne, de quoi parle ce système ?", "authorLabel": "Auteur", "authorPlaceholder": "Ex: Hasbro, Homebrew, moi-même...", "rulesTitle": "Règles du système", "rulesHint": "Une section = un thème. L'IA injectera automatiquement les sections pertinentes selon ce qu'elle génère (combat → Combat/Monstres, PNJ → Classes, arc → Lore/Factions).", "importButton": "Importer un PDF de règles", "importInProgress": "Import en cours…", "importHint": "L'IA propose un découpage en sections — vous révisez avant d'enregistrer.", "sectionsFound": "Sections trouvées : {{titles}}", "sectionTitlePlaceholder": "Nom de la section (ex: Combat)", "removeSection": "Supprimer cette section", "sectionContentPlaceholder": "Décrivez les règles de cette section...", "noSections": "Aucune section pour l'instant — ajoutez-en une avec les boutons ci-dessous.", "addSection": "Ajouter une section :", "addOther": "Autre…", "charactersTitle": "Fiches de personnages", "charactersHint": "Définissez la structure des fiches PJ et PNJ pour ce système. Les champs universels (nom, portrait, header) sont automatiques — ne rajoutez ici que les champs spécifiques au système (Histoire, PV, Stats…).", "pcFieldsLabel": "Champs de la fiche PJ", "pcFieldsHint": "Affichés lors de la création/édition d'un personnage joueur.", "npcFieldsLabel": "Champs de la fiche PNJ", "npcFieldsHint": "Affichés lors de la création/édition d'un personnage non-joueur.", "enemyFieldsLabel": "Champs de la fiche Ennemi", "enemyFieldsHint": "Affichés lors de la création/édition d'un ennemi (bestiaire). Nom, niveau, dossier, portrait et bandeau sont automatiques.", "importExtracting": "Extraction du texte…", "importAnalyzing": "Analyse des règles… ({{current}}/{{total}})", "importFailed": "Échec de l'import du PDF.", "importFailedReason": "Échec de l'import : {{reason}}", "importNoRules": "Aucune règle exploitable n'a été extraite de ce PDF (scan sans OCR, ou contenu non reconnu).", "importOcrSuffix": " (dont {{count}} page(s) via OCR)", "importNote": "{{added}} section(s) proposée(s) depuis {{pages}} page(s){{ocr}}. Relisez et ajustez ci-dessous avant d'enregistrer." }, "ollamaModelManager": { "installedModels": "Modèles installés", "deleteModelTitle": "Supprimer {{name}}", "pullDialogTitle": "Télécharger un modèle Ollama", "modelNameLabel": "Nom du modèle", "suggestions": "Suggestions :", "libraryHint": "La liste complète est sur ollama.com/library.", "preparing": "Préparation...", "connecting": "connexion...", "cancelled": "annulé", "pullEventError": "Échec : {{error}}", "pullFailed": "Échec du téléchargement de {{name}}.", "pullInterrupted": "Téléchargement de {{name}} interrompu avant la fin. Relancez pour reprendre.", "pullDone": "Modèle {{name}} téléchargé.", "deleteTitle": "Supprimer le modèle", "deleteMessage": "Supprimer le modèle '{{name}}' ?", "deleteDetail": "L'espace disque sera libéré.", "deleteDone": "Modèle {{name}} supprimé.", "deleteFailed": "Échec de la suppression de {{name}}." }, "updatesSection": { "title": "Mises à jour", "hint": "Vérifie auprès du registry Docker si une nouvelle version des conteneurs (core, brain, web) est disponible. Postgres et MinIO sont exclus — ils sont mis à jour manuellement.", "stableChannel": "Canal stable", "checking": "Vérification...", "checkNow": "Vérifier maintenant", "featureNotConfigured": "Feature non configurée (WATCHTOWER_TOKEN absent).", "updateAvailable": "Une mise à jour est disponible.", "checkImpossible": "Vérification impossible (baseline absente ou registry injoignable).", "upToDate": "Tout est à jour (vérifié le {{date}}).", "applying": "Mise à jour en cours...", "applyNow": "Mettre à jour maintenant", "betaChannelTitle": "Canal beta — réservé aux patrons", "betaChannelIntro": "Soutiens LoreMind sur Patreon pour accéder aux nouvelles features en avant-première. Le tier Compagnon (7€/mois) ou supérieur débloque ce canal.", "connectPatreon": "Connecter mon compte Patreon", "connectInstructions": "Une nouvelle fenêtre va s'ouvrir vers Patreon. Après autorisation, copie le token affiché et colle-le ci-dessous.", "patreonToken": "Token Patreon", "activateLicense": "Activer la licence", "licenseValid": "Compte Patreon connecté. Tier {{tier}} actif.", "licenseGrace": "Connexion Patreon expirée, mais accès beta maintenu pendant la période de tolérance. Vérifie que ton abonnement Patreon est toujours actif et clique sur \"Vérifier maintenant\".", "licenseExpired": "Connexion Patreon expirée depuis trop longtemps. Reconnecte-toi pour retrouver l'accès beta.", "licenseUnverifiable": "Le token installé ne peut plus être vérifié. Reconnecte-toi.", "infoTier": "Tier : {{tier}}", "infoValidity": "Validité : jusqu'au {{date}}", "renewalDay": "(renouvellement dans {{n}} jour)", "renewalDays": "(renouvellement dans {{n}} jours)", "infoLastRefresh": "Dernier refresh : {{date}}", "refreshOk": "OK", "refreshFailed": "échec", "enableBetaChannel": "Activer le canal beta", "disconnectPatreon": "Déconnecter Patreon", "checkingBetaImages": "Vérification des images beta...", "betaUnavailable": "Indisponible : {{reason}}", "betaCheckImpossible": "Vérification beta impossible (registry beta injoignable ou baseline absente).", "currentChannel": "Canal actuel :", "channelBeta": "Bêta", "channelStable": "Stable", "switchToBeta": "Passer sur le canal beta", "switchToStable": "Repasser sur le canal stable", "switching": "Bascule en cours...", "switchInProgressNotice": "Bascule en cours. L'application va être indisponible 10 à 30 secondes — la page se rechargera automatiquement quand le nouveau Core sera prêt.", "switcherUnavailable": "Le sidecar de bascule n'est pas installé. Pour bénéficier du switch automatique, récupère le dernier docker-compose.yml du repo et fais docker compose pull && docker compose up -d une fois. Sinon, bascule manuellement en éditant IMAGE_NAMESPACE dans ton .env (igmlcreation/loremind- pour stable, igmlcreation/loremind-beta- pour beta).", "connectUrlError": "Impossible de générer l'URL de connexion. Vérifie ta config.", "pasteTokenFirst": "Colle d'abord le token reçu après connexion Patreon.", "patreonConnectedSuccess": "Compte Patreon connecté. L'accès beta est actif.", "disconnectTitle": "Déconnecter Patreon", "disconnectMessage": "Déconnecter ton compte Patreon ?", "disconnectDetail": "Tu perdras l'accès au canal beta.", "disconnectConfirm": "Déconnecter", "patreonDisconnected": "Compte Patreon déconnecté.", "switchToBetaMessage": "Basculer LoreMind sur le canal beta ? Les containers core/brain/web vont être recréés avec les images beta. L'application sera indisponible 10-30 secondes.", "switchToStableMessage": "Repasser LoreMind sur le canal stable ? Les containers core/brain/web vont être recréés avec les images stables. L'application sera indisponible 10-30 secondes.", "switchToBetaTitle": "Passer en beta ?", "switchToStableTitle": "Repasser en stable ?", "switchDetailData": "Les données (DB, images) sont préservées.", "switchDetailReversible": "Tu pourras refaire le chemin inverse à tout moment depuis cet écran.", "switchToBetaConfirm": "Passer en beta", "switchToStableConfirm": "Repasser en stable", "switchFailed": "Échec du switch", "applyTitle": "Mettre à jour", "applyMessage": "Télécharger et redémarrer les conteneurs maintenant ?", "applyDetail": "L'app sera indisponible quelques secondes.", "applyConfirm": "Mettre à jour", "applyTriggered": "Mise à jour déclenchée. Rechargez la page dans 30s." } }