feat: page interactive, démos Play/Step et simulateur Carnot
Ajoute le pipeline PageSpec (validation, rendu, publication /p/{slug}),
les démos TipTap /demo, et le simulateur Carnot (modes frigo/PAC/moteur,
énergie kJ vs puissance W, unités K/°C/°F) avec correctifs d’équations KaTeX.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -38,7 +38,24 @@
|
||||
"createYourSpaceSubtitle": "Rejoignez la nouvelle ère de la prise de notes intelligente.",
|
||||
"forgot": "Oublié ?",
|
||||
"backToSite": "Retour",
|
||||
"privacyTerms": "© 2025 Memento Labs — Confidentialité · Conditions"
|
||||
"privacyTerms": "© 2025 Memento Labs — Confidentialité · Conditions",
|
||||
"checkEmailTitle": "Vérifiez votre e-mail",
|
||||
"checkEmailDescription": "Nous avons envoyé un lien de confirmation à {email}. Ouvrez-le pour activer votre compte avant de vous connecter.",
|
||||
"checkEmailDescriptionGeneric": "Nous avons envoyé un lien de confirmation à votre e-mail. Ouvrez-le pour activer votre compte avant de vous connecter.",
|
||||
"resendVerification": "Renvoyer l’e-mail de confirmation",
|
||||
"verifyResent": "E-mail de confirmation envoyé. Vérifiez votre boîte de réception.",
|
||||
"verifyResendFailed": "Impossible d’envoyer l’e-mail de confirmation. Réessayez plus tard.",
|
||||
"verifyMissingEmail": "Saisissez votre adresse e-mail.",
|
||||
"verifyLoading": "Confirmation de votre e-mail…",
|
||||
"verifySuccessTitle": "E-mail confirmé",
|
||||
"verifySuccessDescription": "Votre compte est prêt. Vous pouvez vous connecter.",
|
||||
"verifyExpiredTitle": "Lien expiré",
|
||||
"verifyExpiredDescription": "Ce lien de confirmation a expiré. Demandez-en un nouveau.",
|
||||
"verifyInvalidTitle": "Lien invalide",
|
||||
"verifyInvalidDescription": "Ce lien de confirmation est invalide ou déjà utilisé.",
|
||||
"emailNotVerified": "Confirmez votre e-mail avant de vous connecter.",
|
||||
"emailVerifiedBanner": "E-mail confirmé. Vous pouvez vous connecter.",
|
||||
"invalidCredentials": "E-mail ou mot de passe incorrect."
|
||||
},
|
||||
"sidebar": {
|
||||
"notes": "Notes",
|
||||
@@ -798,6 +815,18 @@
|
||||
"formal": "Formel",
|
||||
"casual": "Décontracté"
|
||||
},
|
||||
"interactiveDemo": {
|
||||
"invalid": "Démo interactive invalide",
|
||||
"empty": "Démo interactive indisponible",
|
||||
"step": "étape",
|
||||
"speed": "Vitesse de lecture",
|
||||
"needMoreText": "Sélectionne au moins ~20 mots (ou écris plus de contenu) pour générer une démo",
|
||||
"generating": "Génération de la démo interactive…",
|
||||
"generateSuccess": "Démo interactive insérée",
|
||||
"generateFailed": "Échec de la génération",
|
||||
"insertFailed": "Impossible d’insérer la démo",
|
||||
"quotaExceeded": "Quota IA insuffisant"
|
||||
},
|
||||
"memoryEcho": {
|
||||
"title": "💡 J'ai remarqué quelque chose...",
|
||||
"description": "Connexions proactives entre vos notes",
|
||||
@@ -1608,7 +1637,58 @@
|
||||
"notSynced": "Pas encore synchronisé (cron /api/cron/sync-usage)",
|
||||
"byFeature": "Par fonctionnalité (PostgreSQL)",
|
||||
"topUsers": "Utilisateurs les plus actifs",
|
||||
"noUsageData": "Aucune donnée pour cette période"
|
||||
"noUsageData": "Aucune donnée pour cette période",
|
||||
"healthTitle": "État Stripe",
|
||||
"healthDescription": "Statut des clés, webhooks, price IDs et flag facturation (les secrets ne sont jamais affichés).",
|
||||
"healthSecret": "Clé secrète (serveur)",
|
||||
"healthPublishable": "Clé publique",
|
||||
"healthWebhook": "Secret webhook",
|
||||
"healthBillingFlag": "Facturation activée",
|
||||
"healthTrial": "Essai gratuit",
|
||||
"trialDaysValue": "{days} jours au premier checkout",
|
||||
"modeTest": "Mode test (sk_test_…)",
|
||||
"modeLive": "Mode live (sk_live_…)",
|
||||
"modePlaceholder": "Clé placeholder / invalide",
|
||||
"modeMissing": "Non configurée",
|
||||
"configured": "Configuré",
|
||||
"missing": "Manquant",
|
||||
"enabled": "Activé",
|
||||
"disabled": "Désactivé",
|
||||
"priceStatusTitle": "Price IDs vs Stripe",
|
||||
"colKey": "Offre",
|
||||
"colPriceId": "Price ID",
|
||||
"colSource": "Source",
|
||||
"colStripe": "Montant Stripe",
|
||||
"priceError": "Échec lecture",
|
||||
"inactive": "inactif",
|
||||
"notChecked": "Non vérifié (pas de clé Stripe)",
|
||||
"subsTitle": "Vue des abonnements",
|
||||
"subsDescription": "Compteurs depuis la base locale (synchronisée via webhooks Stripe).",
|
||||
"statPaid": "Actifs + essai",
|
||||
"statTrialing": "En essai",
|
||||
"statPastDue": "Impayés",
|
||||
"statCanceling": "Résiliation fin de période",
|
||||
"byTier": "Par tier",
|
||||
"byStatus": "Par statut",
|
||||
"usersWithoutSub": "Utilisateurs sans ligne Subscription",
|
||||
"noSubs": "Aucun abonnement pour l’instant",
|
||||
"recentSubs": "Comptes payants / essai récents",
|
||||
"colUser": "Utilisateur",
|
||||
"colTier": "Tier",
|
||||
"colStatus": "Statut",
|
||||
"colPeriod": "Période / fin d’essai",
|
||||
"canceling": "résiliation",
|
||||
"manualTier": "manuel (pas de sub Stripe)",
|
||||
"trialUntil": "Essai jusqu’au {date}",
|
||||
"testGuideTitle": "Comment tester Stripe en local",
|
||||
"testGuideDescription": "Checklist pour valider checkout, webhooks et essai.",
|
||||
"testStep1": "Stripe Dashboard → mode Test ON. Créer produits Pro/Business + prix mensuel/annuel + packs crédits.",
|
||||
"testStep2": "Mettre sk_test_…, pk_test_… dans .env. Mettre les price_… dans Admin → Facturation (ou env) et activer la facturation.",
|
||||
"testStep3": "Copier le whsec_… dans STRIPE_WEBHOOK_SECRET et redémarrer l’app.",
|
||||
"testStep4": "npm run dev → ouvrir /settings/billing avec un compte BASIC.",
|
||||
"testStep5": "Lancer le checkout Pro. Carte : 4242 4242 4242 4242, date future, CVC quelconque. Essai 7 jours attendu.",
|
||||
"testStep6": "Vérifier Admin → Facturation (TRIALING) et /settings/billing (date de fin d’essai).",
|
||||
"testCardHint": "Autres cartes : 4000000000009995 = échec paiement · 4000002500003155 = 3D Secure. Jamais de vraie carte en mode test."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Tableau de bord",
|
||||
@@ -1818,6 +1898,8 @@
|
||||
"featureBrainstormCreate": "Créations brainstorm",
|
||||
"featureBrainstormSessions": "Sessions brainstorm",
|
||||
"featureCharts": "Graphiques IA",
|
||||
"featureInteractiveDemo": "Démos interactives",
|
||||
"featureInteractivePage": "Pages interactives",
|
||||
"featurePublishEnhance": "Publication IA",
|
||||
"featureBrainstormExpand": "Extensions brainstorm",
|
||||
"featureBrainstormEnrich": "Enrichissements brainstorm",
|
||||
@@ -2585,6 +2667,8 @@
|
||||
"slashTableDesc": "Insérer un tableau simple",
|
||||
"slashDatabase": "Vue structurée",
|
||||
"slashDatabaseDesc": "Intégrer les données structurées de votre carnet",
|
||||
"slashInteractiveDemo": "Démo interactive",
|
||||
"slashInteractiveDemoDesc": "Démo pédagogique IA étape par étape (Play / Step)",
|
||||
"slashToggle": "Section repliable",
|
||||
"slashToggleDesc": "Créer une section dépliable",
|
||||
"slashCallout": "Encadré",
|
||||
@@ -2732,6 +2816,21 @@
|
||||
"publishTemplateMagazine": "Article magazine",
|
||||
"publishTemplateBrief": "Fiche expert",
|
||||
"publishTemplateEssay": "Essai",
|
||||
"publishTemplateInteractivePage": "Page interactive",
|
||||
"publishInteractivePage": "Page interactive",
|
||||
"publishInteractivePageHint": "Page générée par IA : hero, sections, démos Play/Step — 20 crédits",
|
||||
"publishInteractivePageGenerating": "Construction de la page…",
|
||||
"publishInteractivePageGeneratingWait": "Presque prêt…",
|
||||
"publishInteractivePageGeneratingLong": "Toujours en cours…",
|
||||
"publishInteractivePagePlanning": "Analyse du contenu — plan de la page…",
|
||||
"publishInteractivePageSectionProgress": "Section {current}/{total} : {title}",
|
||||
"publishInteractivePageFallback": "Génération IA indisponible — page simplifiée affichée",
|
||||
"publishInteractivePagePartialFallback": "Certaines sections ont été générées en mode simplifié",
|
||||
"publishInteractivePageTooShort": "Note trop courte — ajoutez du contenu puis réessayez",
|
||||
"publishInteractivePageSuccess": "Page interactive publiée !",
|
||||
"publishInteractivePageFailed": "Échec de la page interactive",
|
||||
"publishInteractivePagePreviewHint": "Aperçu — vérifiez puis publiez sur l’URL publique",
|
||||
"publishInteractivePageConfirm": "Publier la page",
|
||||
"publishAiSuccess": "Page publiée avec mise en page IA !",
|
||||
"publishRewriteLabel": "Reformuler pour le web",
|
||||
"publishRewriteOnHint": "Structure vos blocs éditeur (exercices, toggles, encadrés) en page web — l'IA rédige seulement le chapô",
|
||||
@@ -3387,7 +3486,11 @@
|
||||
"fetchStatusFailed": "Échec du chargement des informations de facturation",
|
||||
"fetchQuotasFailed": "Échec du chargement des crédits",
|
||||
"fetchInvoicesFailed": "Impossible de charger l'historique de facturation.",
|
||||
"savePercent": "Économisez ~17%"
|
||||
"savePercent": "Économisez ~17%",
|
||||
"startTrialCta": "Essai gratuit {days} jours",
|
||||
"trialFeature": "Essai gratuit {days} jours (carte requise)",
|
||||
"trialEndsOn": "Votre essai gratuit se termine le {date}. Vous serez ensuite facturé automatiquement.",
|
||||
"trialEndsLabel": "Fin de l'essai"
|
||||
},
|
||||
"quotaPaywall": {
|
||||
"title": "Plus de crédits IA",
|
||||
@@ -3534,6 +3637,12 @@
|
||||
"perMonthAnnual": "/mois, facturé à l'année",
|
||||
"perUser": "+ 3,90€/user",
|
||||
"perUserAnnual": "+ 2,90€/user, à l'année",
|
||||
"savePercent": "~17 %",
|
||||
"proMonthly": "9,90€",
|
||||
"proAnnualMonthly": "8,25€",
|
||||
"businessMonthly": "29,90€",
|
||||
"businessAnnualMonthly": "24,92€",
|
||||
"enterprisePrice": "Sur devis",
|
||||
"popular": "Le plus choisi",
|
||||
"basic": {
|
||||
"name": "Basic",
|
||||
@@ -3578,7 +3687,10 @@
|
||||
"feature4": "Support dédié",
|
||||
"feature5": "Onboarding live"
|
||||
},
|
||||
"basicPrice": "Gratuit"
|
||||
"basicPrice": "Gratuit",
|
||||
"trialBadge": "Essai gratuit {days} jours",
|
||||
"trialFeature": "Essai gratuit {days} jours (carte requise)",
|
||||
"trialCta": "Essayer {days} jours gratuitement"
|
||||
},
|
||||
"cta": {
|
||||
"title": "Arrêtez de perdre vos meilleures idées.",
|
||||
|
||||
Reference in New Issue
Block a user