feat(notes): liens internes, onglet Réseau, living blocks et consentement IA
Some checks failed
CI / Lint, Test & Build (push) Failing after 1m19s
CI / Deploy production (on server) (push) Has been skipped

Rend les liens entre notes visibles et persistants (sync NoteLink au save, auto-save, graphe réseau rafraîchi), ajoute living blocks, Memory Echo, recherche globale, consentement IA explicite et consolide les prototypes design en architectural-grid.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-05-24 14:27:29 +00:00
parent 077e665dfc
commit e2672cd2c2
323 changed files with 20670 additions and 42431 deletions

View File

@@ -65,6 +65,7 @@
"freezePinnedNotebook": "Figer l'état du carnet",
"unfreezePinnedNotebook": "Défiger l'état du carnet",
"newSubNotebook": "Nouveau sous-carnet",
"notebookEmpty": "Vide",
"renameNotebook": "Renommer",
"sharedNotebookBadge": "· partagé",
"sortManual": "Ordre libre",
@@ -139,6 +140,22 @@
"share": "Partager",
"showCollaborators": "Voir les collaborateurs",
"pinned": "Épinglées",
"viewNotes": "Notes",
"viewTasks": "Tâches",
"layoutGridTitle": "Vue cartes / grille",
"layoutListTitle": "Vue liste éditoriale",
"layoutTableTitle": "Vue tableau structuré",
"tasksHeader": "Tâches du carnet",
"tasksSummary": "{count} tâches · {completed} complétées",
"tasksEmptyTitle": "Aucune tâche dans ce carnet",
"tasksEmptyHint": "Ajoutez des lignes au format « - [ ] Ma tâche » dans vos notes pour les voir ici.",
"taskFromNote": "Note : {title}",
"openSourceNote": "Ouvrir la note source",
"tableTitle": "Titre",
"tableNotebook": "Carnet",
"tableLabels": "Étiquettes",
"tableTasks": "Tâches",
"tableModified": "Modifié",
"others": "Autres",
"noNotes": "Aucune note",
"noNotesFound": "Aucune note trouvée",
@@ -193,6 +210,7 @@
"loading": "Chargement...",
"exportPDF": "Exporter en PDF",
"savedStatus": "Enregistré",
"saved": "Note sauvegardée",
"dirtyStatus": "Modifié",
"completedLabel": "Terminé",
"notes": {
@@ -280,7 +298,16 @@
"notes.emptyNotebook": "Empty notebook",
"notes.emptyNotebookDesc": "This notebook has no notes. Click + to create one.",
"notes.noNoteSelected": "No note selected",
"notes.selectOrCreateNote": "Select a note from the list or create a new one."
"notes.selectOrCreateNote": "Select a note from the list or create a new one.",
"uploading": "Téléchargement...",
"open": "Ouvrir",
"illustrationGenerated": "Illustration générée",
"attachments": "Pièces jointes",
"search": "Rechercher",
"generateIllustration": "Générer une illustration",
"saveFailed": "Échec de la sauvegarde",
"createFirst": "Créez votre première note",
"unarchived": "Désarchivée"
},
"pagination": {
"previous": "←",
@@ -320,7 +347,9 @@
"count": "{count} étiquettes",
"noLabels": "Aucune étiquette",
"confirmDeleteShort": "Confirmer ?",
"labelRemoved": "Étiquette \"{label}\" supprimée"
"labelRemoved": "Étiquette \"{label}\" supprimée",
"filterByTags": "Filtrer par étiquettes",
"searchTags": "Rechercher des étiquettes"
},
"search": {
"placeholder": "Rechercher",
@@ -437,7 +466,10 @@
"create": "Créer",
"creating": "Création des étiquettes...",
"notesCount": "{count} notes",
"typeForSuggestions": "Tapez du contenu pour obtenir des suggestions d'étiquettes..."
"typeForSuggestions": "Tapez du contenu pour obtenir des suggestions d'étiquettes...",
"noNotebook": "Aucun carnet sélectionné",
"noSuggestions": "Aucune suggestion",
"regenerate": "Régénérer"
},
"batchOrganization": {
"title": "Organiser avec l'IA",
@@ -452,7 +484,10 @@
"noNotesSelected": "Aucune note sélectionnée",
"applyFailed": "Échec de l'application du plan d'organisation",
"selectAllIn": "Sélectionner toutes les notes dans {notebook}",
"selectNote": "Sélectionner la note : {title}"
"selectNote": "Sélectionner la note : {title}",
"notesToOrganize": "Notes à organiser",
"selected": "Sélectionné",
"unorganized": "Non organisé"
},
"notebookSummary": {
"regenerate": "Régénérer le résumé",
@@ -533,7 +568,9 @@
"fixGrammar": "Corriger les fautes",
"translate": "Traduire",
"explain": "Expliquer",
"toRichText": "Convertir en texte enrichi"
"toRichText": "Convertir en texte enrichi",
"generateChart": "Générer un graphique",
"customLang": "Langue personnalisée"
},
"generate": {
"slides": "Générer Slides",
@@ -574,7 +611,8 @@
"insertDiagramInNote": "Insérer PNG dans la note",
"diagramImageAlt": "Diagramme généré par IA",
"insertedInNote": "Diagramme inséré dans la note",
"insertExportError": "Erreur lors de l'export/upload du diagramme"
"insertExportError": "Erreur lors de l'export/upload du diagramme",
"noNoteId": "Aucun ID de note"
},
"openAssistant": "Ouvrir IA Note",
"poweredByMomento": "Propulsé par Momento AI",
@@ -672,7 +710,16 @@
"inlineSummaryMarkdown": "**Résumé :**",
"networkErrorShort": "Erreur réseau.",
"featureLocked": "Cette fonctionnalité nécessite le plan PRO ou supérieur.",
"quotaExceeded": "Limite mensuelle atteinte. Se réinitialise le mois prochain."
"quotaExceeded": "Limite mensuelle atteinte. Se réinitialise le mois prochain.",
"noHistory": "Aucun historique",
"webSearchDisabled": "Recherche web désactivée",
"webSearchEnabled": "Recherche web activée",
"result": {
"apply": "Appliquer",
"original": "Original",
"preview": "Aperçu",
"suggestion": "Suggestion"
}
},
"titleSuggestions": {
"available": "Suggestions de titre",
@@ -724,24 +771,54 @@
"error": "Échec du chargement des connexions"
},
"comparison": {
"title": "💡 Comparaison de notes",
"similarityInfo": "Ces notes sont connectées par {similarity}% de similarité",
"title": "Comparaison côte à côte",
"subtitle": "Relisez vos notes liées pour décider quoi garder ou fusionner.",
"similarityInfo": "Ces notes sont connectées par {similarity} % de similarité",
"highSimilarityInsight": "Ces notes traitent du même sujet avec un fort degré de similarité. Elles pourraient être fusionnées ou consolidées.",
"stayOnCurrentNote": "Vous restez sur la note en cours. Fermez cette fenêtre pour continuer à écrire.",
"untitled": "Sans titre",
"clickToView": "Cliquer pour voir la note",
"helpfulQuestion": "Cette comparaison est-elle utile ?",
"helpful": "Utile",
"notHelpful": "Pas utile"
},
"preview": {
"subtitle": "Aperçu de la note liée — vous ne quittez pas celle que vous éditez.",
"loadError": "Impossible de charger le contenu de cette note."
},
"editorSection": {
"title": "Notes connectées ({count})",
"loading": "Chargement...",
"title": "Notes connectées ({count})",
"loading": "Chargement",
"view": "Voir",
"viewLinkedNote": "Voir la note liée",
"compare": "Comparer",
"merge": "Fusionner",
"compareAll": "Tout comparer",
"mergeAll": "Tout fusionner",
"close": "Fermer"
"close": "Fermer",
"backToNote": "Revenir à ma note",
"openInEditor": "Ouvrir dans l'éditeur",
"badgeLabel": "Memory Echo",
"affinityBadge": "{percentage} % d'affinité sémantique",
"intro": "Momento a repéré une autre note sur le même sujet. Consultez-la, insérez une citation ou fusionnez — sans quitter celle-ci.",
"detectedIn": "Passage repéré dans : {title}",
"helpToggle": "Comment ça marche ?",
"helpTitle": "Que faire avec cette connexion ?",
"helpView": "Affiche l'autre note dans une fenêtre. Vous restez sur votre note.",
"helpCite": "Insère un passage de l'autre note dans celle-ci, avec un lien vers la source.",
"helpCompare": "Montre les deux notes côte à côte dans une fenêtre.",
"helpMerge": "Regroupe le contenu des deux notes en une seule.",
"embedPassage": "Citation",
"embedding": "Insertion…",
"embedSuccess": "Citation insérée dans la note",
"citationSuccess": "Citation insérée avec lien vers la source",
"embedFallback": "Ouvrez la note source, modifiez-la légèrement puis réessayez.",
"embedFailed": "Impossible d'insérer la citation pour l'instant",
"showAll": "Voir toutes les connexions ({count})",
"hideAll": "Masquer les connexions ({count})",
"retroTitle": "Notes qui citent ce contenu",
"retroDescription": "Ce passage est repris dans {count} autre(s) note(s) :",
"consentRequired": "Activez le traitement IA dans Paramètres → IA pour voir les connexions sémantiques de cette note."
},
"fusion": {
"title": "🔗 Fusion intelligente",
@@ -790,7 +867,8 @@
"brainstormInvite": "Brainstorm",
"brainstormJoined": "Brainstorm",
"systemNotification": "Système",
"downloadFailed": "Échec du téléchargement"
"downloadFailed": "Échec du téléchargement",
"brainstormShared": "Brainstorm partagé"
},
"nav": {
"home": "Accueil",
@@ -990,7 +1068,8 @@
"testConnection": "Tester la connexion",
"clean": "Nettoyer",
"indexAll": "Tout indexer",
"preview": "Aperçu"
"preview": "Aperçu",
"delete": "Supprimer"
},
"colors": {
"default": "Défaut",
@@ -1010,7 +1089,8 @@
"reminderDate": "Date du rappel",
"reminderTime": "Heure du rappel",
"save": "Définir",
"cancel": "Annuler"
"cancel": "Annuler",
"changeReminder": "Modifier le rappel"
},
"reminders": {
"title": "Rappels",
@@ -1062,7 +1142,14 @@
"createSubnotebook": "Ajouter un sous-carnet",
"createSubNotebook": "Nouveau sous-carnet…",
"rename": "Renommer",
"confirmRename": "Renommer"
"confirmRename": "Renommer",
"moveToTrash": "Déplacer vers la corbeille",
"noParent": "Aucun parent",
"parentNotebook": "Carnet parent",
"under": "Sous",
"trashCascadeWarning": "Cela supprimera également toutes les notes et sous-carnets.",
"trashConfirm": "Déplacer ce carnet vers la corbeille ?",
"trashTitle": "Déplacer vers la corbeille"
},
"notebookSuggestion": {
"title": "Déplacer vers {name} ?",
@@ -1071,7 +1158,8 @@
"dismiss": "Rejeter",
"dismissIn": "Rejeter (ferme dans {timeLeft}s)",
"moveToNotebook": "Déplacer vers un carnet",
"generalNotes": "Notes générales"
"generalNotes": "Notes générales",
"movedToNotebook": "Déplacé vers le carnet"
},
"admin": {
"title": "Tableau de bord Admin",
@@ -1481,8 +1569,17 @@
"title": "Nettoyer les données orphelines",
"description": "Supprimer les étiquettes et connexions qui référencent des notes supprimées.",
"button": "Nettoyer",
"failed": "Erreur lors du nettoyage"
}
"failed": "Erreur lors du nettoyage",
"success": "Nettoyage réussi"
},
"zipExport": {
"title": "Export complet (RGPD)",
"description": "Téléchargez toutes vos notes, pièces jointes et sessions de brainstorm au format Markdown dans un fichier ZIP.",
"button": "Exporter en ZIP",
"success": "Espace de travail exporté avec succès",
"failed": "L'exportation a échoué"
},
"zipExporting": "Exportation..."
},
"appearance": {
"title": "Apparence",
@@ -1492,6 +1589,7 @@
"notesViewTabs": "Onglets (type OneNote)",
"notesViewMasonry": "Cartes (grille)",
"notesViewList": "Liste (magazine)",
"notesViewTable": "Tableau structuré",
"selectTheme": "Choisissez votre thème",
"fontFamilyLabel": "Police",
"fontFamilyDescription": "Choisissez la police de l'application",
@@ -1506,6 +1604,9 @@
},
"usageMeter": {
"packName": "Pack découverte IA",
"packPro": "Pack Pro",
"packBusiness": "Pack Business",
"packEnterprise": "Pack Enterprise",
"featureSearch": "Recherche",
"featureTags": "Étiquettes",
"featureTitles": "Titres",
@@ -1525,6 +1626,8 @@
"featureReformulate": "Reformulations",
"featureChat": "Messages IA",
"featureBrainstormCreate": "Créations brainstorm",
"featureBrainstormSessions": "Sessions brainstorm",
"featureCharts": "Graphiques IA",
"featureBrainstormExpand": "Extensions brainstorm",
"featureBrainstormEnrich": "Enrichissements brainstorm"
},
@@ -1579,7 +1682,8 @@
"daysRemaining": "JOURS RESTANTS",
"notebookContentPreserved": "Contenu du carnet préservé",
"notebookRestoreHint": "La restauration d'un carnet restaure également toutes ses notes.",
"filterAll": "Tous"
"filterAll": "Tous",
"autoDelete30": "Suppression automatique après 30 jours"
},
"footer": {
"privacy": "Confidentialité",
@@ -1639,14 +1743,19 @@
"documentInfo": {
"tabInfo": "Infos",
"tabVersions": "Versions",
"tabNetwork": "Réseau",
"wordsLabel": "mots",
"charactersLabel": "caractères",
"linesLabel": "Lignes",
"equationsLabel": "Équations",
"imagesLabel": "Images",
"notebookLabel": "Carnet",
"typeLabel": "Type",
"createdLabel": "Créée le",
"modifiedLabel": "Modifiée",
"labelsSection": "Étiquettes",
"idLabel": "ID",
"copyId": "Copier l'ID",
"historyDisabled": "L'historique n'est pas activé pour cette note.",
"enableHistory": "Activer l'historique",
"savedVersions": "Versions sauvegardées",
@@ -1660,7 +1769,51 @@
"comparisonMode": "Mode comparaison",
"comparisonSubtitle": "Comparer les versions côte à côte",
"deleteVersionConfirm": "Supprimer cette version ?",
"latestBadge": "Récent"
"latestBadge": "Récent",
"network": {
"graphTitle": "Liens autour de cette note",
"intro": "Visualisez ici ce qui relie cette note aux autres : notes proches (IA), liens que vous avez créés vous-même, ou citations reprises ailleurs.",
"helpToggle": "Comprendre ce panneau",
"helpTitle": "Comment lire ce panneau",
"helpGraph": "Au centre : la note ouverte. Autour : les notes liées. Plus un point violet est proche du centre, plus la note est voisine en contenu. Faites glisser pour réorganiser, cliquez pour ouvrir.",
"helpSemantic": "Notes proches : lIA ne garde que les correspondances au-dessus dun seuil. Le pourcentage et la distance sont étalés entre ce seuil (0 %) et une correspondance maximale (100 %).",
"helpWiki": "Liens que vous créez : tapez [[ dans une note, choisissez une autre note, ou écrivez [[Titre exact]] puis enregistrez.",
"helpEmbed": "Citations : dautres notes reprennent un passage de celle-ci sous forme de citation synchronisée.",
"empty": "Aucun lien repéré pour linstant. Écrivez [[Titre dune note]] dans le texte pour créer un lien, ou laissez lIA détecter des notes proches.",
"consentHint": "Pour afficher les notes proches détectées par lIA, activez le consentement IA dans les paramètres.",
"dragHint": "Survolez un point pour le détail. Faites-le glisser pour le déplacer. Cliquez pour ouvrir la note.",
"clickToOpen": "Ouvrir dans un nouvel onglet",
"legendCenter": "Cette note",
"legendSemantic": "Note proche (IA)",
"legendWiki": "Lien vers une note",
"semanticShort": "Note proche",
"inboundShort": "Lien entrant",
"outboundShort": "Lien sortant",
"embedShort": "Citation",
"mentionShort": "Mention",
"affinityLine": "Proximité : {percentage} %",
"semanticListTitle": "Notes proches",
"semanticListHelp": "Ces notes couvrent des sujets voisins. Le pourcentage indique la proximité relative (0 % = seuil minimal de détection, 100 % = correspondance très forte).",
"showMoreSemantic": "Voir {count} autre(s) note(s) proche(s)",
"showLess": "Afficher moins",
"embedListTitle": "Notes qui citent ce contenu",
"embedSnippetOne": "Reprend un passage de cette note",
"wikiSectionTitle": "Liens vers d'autres notes",
"inboundHelp": "Notes qui créent un lien vers celle-ci avec [[…]] dans leur texte.",
"outboundHelp": "Notes vers lesquelles cette note pointe avec [[…]] dans son texte.",
"unlinkedListTitle": "Mentions sans lien actif",
"unlinkedHelp": "Texte [[entre crochets]] repéré ici, mais sans note correspondante ou sans lien enregistré.",
"noWikiYet": "Aucun lien vers une autre note pour le moment.",
"unknownNotebook": "Carnet",
"untitled": "Sans titre",
"unlinkedLabel": "Sans lien",
"moreNodes": "+{count} sur la carte",
"inboundList": "Vers cette note ({count})",
"outboundList": "Depuis cette note ({count})",
"unlinkedList": "Mentions non reliées ({count})",
"refBadge": "Entrant",
"toBadge": "Sortant"
}
},
"languages": {
"targets": {
@@ -2064,7 +2217,8 @@
"slideTheme": "Choisissez une palette de couleurs pour la présentation. Automatique laisse l'IA choisir.",
"slideStyle": "Le style visuel affecte les coins arrondis, l'espacement et la densité d'information."
}
}
},
"intelligenceOS": "Système d'exploitation intelligent"
},
"chat": {
"title": "Chat IA",
@@ -2181,6 +2335,12 @@
"imageModalInvalidUrl": "Veuillez entrer une URL valide",
"imageModalLoadFailed": "Échec du chargement de l'image",
"linkPlaceholder": "Collez ou tapez un lien...",
"noteLinkPickerTitle": "Lier à une autre note",
"noteLinkPickerHint": "Choisissez une note. Momento insère [[Titre]] dans le texte et crée le lien à l'enregistrement.",
"noteLinkPickerSearch": "Rechercher une note…",
"noteLinkPickerEmpty": "Aucune note trouvée. Vérifiez le titre ou créez d'abord la note cible.",
"slashNoteLink": "Lien vers une note",
"slashNoteLinkDesc": "Créer un lien vers une autre note ([[…]])",
"bold": "Gras",
"italic": "Italique",
"underline": "Souligné",
@@ -2454,7 +2614,28 @@
"enterpriseFeature2": "SSO / SAML",
"enterpriseFeature3": "Support dédié",
"enterpriseFeature4": "Facturation personnalisée",
"enterpriseFeature5": "SLA garanti"
"enterpriseFeature5": "SLA garanti",
"subtitle": "Choisissez le plan qui vous convient",
"freeDescription": "Pour découvrir Memento",
"freeF1": "30 recherches sémantiques",
"freeF2": "15 étiquettes auto",
"freeF3": "5 titres auto",
"freeF4": "100 notes",
"freeF5": "3 carnets",
"freePlanDesc": "Idéal pour découvrir Memento",
"freePrice": "Gratuit",
"proDescription": "Pour les consultants et freelances",
"proFeature5": "50 reformulations/mois",
"proFeature6": "50 messages IA/mois",
"proCta": "Passer à Pro",
"businessFeature5": "500 reformulations/mois",
"businessFeature6": "500 messages IA/mois",
"businessCta": "Passer à Business",
"recommended": "Recommandé",
"instantActivation": "Activation instantanée",
"secureDesc": "Paiements sécurisés par Stripe",
"secureTransactions": "Transactions sécurisées",
"satisfactionGuarantee": "Satisfait ou remboursé 30 jours"
},
"landing": {
"nav": {
@@ -2608,7 +2789,8 @@
"feature3": "Audit Logs & SLA",
"feature4": "Support Dédié",
"feature5": "Onboarding Live"
}
},
"basicPrice": "Gratuit"
},
"byok": {
"label": "Technologie Cloud Ouverte",
@@ -2708,6 +2890,34 @@
"cancel": "Annuler",
"save": "Enregistrer les préférences",
"saved": "Préférences mises à jour avec succès."
},
"ai": {
"modalTitle": "Consentement requis pour le traitement par IA",
"modalDescription": "Pour analyser vos notes, PDFs ou sessions de remue-méninges, Memento transmet de manière sécurisée ces données à des API d'IA tierces (OpenAI, Gemini, DeepSeek). Nous appliquons une politique de rétention de données nulle. En acceptant, vous autorisez ce traitement.",
"zeroRetentionTitle": "Zéro Rétention de Données",
"zeroRetentionDesc": "Toutes les requêtes sortantes incluent des indicateurs de non-apprentissage pour protéger votre propriété intellectuelle.",
"rememberMe": "Se souvenir de mon choix (ne plus demander)",
"acceptButton": "Autoriser et continuer",
"rejectButton": "Refuser",
"aborted": "Traitement IA annulé (consentement refusé).",
"revocationTitle": "Consentement de traitement IA (RGPD)",
"revocationDescription": "Autorisation optionnelle pour envoyer le contenu de vos notes à des fournisseurs IA tiers, uniquement lorsque vous utilisez une fonction IA.",
"revokeButton": "Révoquer le consentement",
"grantButton": "Accorder le consentement",
"statusActive": "Actif",
"statusInactive": "Non accordé",
"helpAriaLabel": "Que signifie le consentement IA ?",
"helpTooltip": "Momento ne vend pas vos données. Ce consentement ne sapplique que lorsque vous déclenchez une action IA (titres, étiquettes, chat, reformulation). Sans lui, le reste de lapplication fonctionne normalement.",
"whatItMeansTitle": "Quest-ce que cela signifie ?",
"inactiveHint": "Sans consentement, seules les fonctions propulsées par lIA sont désactivées. Vous pouvez continuer à créer, modifier et organiser vos notes comme dhabitude.",
"noCommercialUse": "Momento ne vend ni ne monétise vos données personnelles.",
"affectedFeatures": "Fonctions concernées : suggestions de titres, étiquettes, assistant chat, reformulation, Memory Echo, etc.",
"dataPortabilityHint": "Vous pouvez exporter ou supprimer toutes vos données à tout moment (Paramètres → Données).",
"dataPortabilityLink": "Exporter mes données",
"revoked": "Consentement non accordé",
"revokedToast": "Consentement IA révoqué avec succès.",
"complianceBadge": "Conformité RGPD",
"auditFailed": "Impossible d'enregistrer votre consentement. Réessayez."
}
},
"account": {
@@ -2732,5 +2942,24 @@
"successRedirect": "Votre compte a été supprimé avec succès.",
"errorFailed": "La suppression a échoué. Veuillez réessayer."
}
},
"attachments": {
"title": "Pièces jointes",
"addToNote": "Ajouter à la note",
"analyzing": "Analyse en cours...",
"askPlaceholder": "Posez une question sur ce document...",
"askQuestions": "Poser des questions",
"deleted": "Pièce jointe supprimée",
"docExpert": "Expert document",
"docQaWelcome": "Posez des questions sur ce document",
"maxSize": "Taille max",
"onlyPdf": "PDF uniquement",
"processingFailed": "Échec du traitement",
"remove": "Supprimer",
"thinking": "Réflexion en cours...",
"uploaded": "Téléchargé",
"uploadError": "Erreur de téléchargement",
"uploadFailed": "Échec du téléchargement",
"uploading": "Téléchargement..."
}
}
}