feat: RTL/i18n, AI translate+undo, no-refresh saves, settings perf
- RTL: force dir=rtl on LabelFilter, NotesViewToggle, LabelManagementDialog - i18n: add missing keys (notifications, privacy, edit/preview, AI translate/undo) - Settings pages: convert to Server Components (general, appearance) + loading skeleton - AI menu: add Translate option (10 languages) + Undo AI button in toolbar - Fix: saveInline uses REST API instead of Server Action → eliminates all implicit refreshes in list mode - Fix: NotesTabsView notes sync effect preserves selected note on content changes - Fix: auto-tag suggestions now filter already-assigned labels - Fix: color change in card view uses local state (no refresh) - Fix: nav links use <Link> for prefetching (Settings, Admin) - Fix: suppress duplicate label suggestions already on note - Route: add /api/ai/translate endpoint
This commit is contained in:
@@ -254,7 +254,21 @@
|
||||
"transformError": "Erreur lors de la transformation",
|
||||
"transformMarkdown": "Transformer en Markdown",
|
||||
"transformSuccess": "Texte transformé en Markdown avec succès !",
|
||||
"transforming": "Transformation..."
|
||||
"transforming": "Transformation...",
|
||||
"clarifyDesc": "Rendre le propos plus clair et compréhensible",
|
||||
"shortenDesc": "Résumer le texte et aller à l'essentiel",
|
||||
"improve": "Améliorer la rédaction",
|
||||
"improveDesc": "Corriger les fautes et le style",
|
||||
"toMarkdown": "Formater en Markdown",
|
||||
"toMarkdownDesc": "Ajouter des titres, des puces et structurer le texte",
|
||||
"translate": "Traduire",
|
||||
"translateDesc": "Changer la langue du texte",
|
||||
"translateBack": "Retour",
|
||||
"translationApplied": "Traduction appliquée",
|
||||
"translationFailed": "Traduction échouée",
|
||||
"undo": "Annuler IA",
|
||||
"undoAI": "Annuler la transformation IA",
|
||||
"undoApplied": "Texte original restauré"
|
||||
},
|
||||
"aiSettings": {
|
||||
"description": "Configurez vos fonctionnalités IA et préférences",
|
||||
@@ -280,6 +294,10 @@
|
||||
},
|
||||
"appearance": {
|
||||
"description": "Personnaliser l'apparence de l'application",
|
||||
"notesViewDescription": "Choisissez comment afficher les notes sur l'accueil et dans les carnets.",
|
||||
"notesViewLabel": "Affichage des notes",
|
||||
"notesViewTabs": "Onglets (type OneNote)",
|
||||
"notesViewMasonry": "Cartes (grille)",
|
||||
"title": "Apparence"
|
||||
},
|
||||
"auth": {
|
||||
@@ -557,7 +575,8 @@
|
||||
"showLess": "Voir moins",
|
||||
"showMore": "Voir plus",
|
||||
"tagAdded": "Étiquette \"{tag}\" ajoutée",
|
||||
"title": "Étiquettes"
|
||||
"title": "Étiquettes",
|
||||
"confirmDeleteShort": "Confirmer ?"
|
||||
},
|
||||
"memoryEcho": {
|
||||
"clickToView": "Cliquer pour voir la note →",
|
||||
@@ -659,7 +678,7 @@
|
||||
"logout": "Déconnexion",
|
||||
"manageAISettings": "Gérer les paramètres IA",
|
||||
"myLibrary": "Ma bibliothèque",
|
||||
"notebooks": "Cahiers",
|
||||
"notebooks": "CARNETS",
|
||||
"notes": "Notes",
|
||||
"proPlan": "Pro Plan",
|
||||
"profile": "Profil",
|
||||
@@ -749,8 +768,9 @@
|
||||
"delete": "Supprimer",
|
||||
"dragToReorder": "Glisser pour réorganiser",
|
||||
"duplicate": "Dupliquer",
|
||||
"edit": "Modifier la note",
|
||||
"edit": "Éditer",
|
||||
"emptyState": "Aucune note encore. Créez votre première note !",
|
||||
"emptyStateTabs": "Aucune note dans cette vue. Utilisez « Nouvelle note » dans la barre latérale pour en ajouter une (titres suggérés par l’IA disponibles dans le compositeur).",
|
||||
"fileTooLarge": "Fichier trop volumineux : {fileName}. Taille maximale : {maxSize}.",
|
||||
"improveFailed": "Échec de l'amélioration du texte",
|
||||
"inNotebook": "Dans le carnet",
|
||||
@@ -821,7 +841,15 @@
|
||||
"unpinned": "Désépinglées",
|
||||
"untitled": "Sans titre",
|
||||
"uploadFailed": "Échec du téléchargement",
|
||||
"view": "Voir la note"
|
||||
"view": "Voir la note",
|
||||
"viewCards": "Vue par cartes",
|
||||
"viewCardsTooltip": "Grille de cartes et réorganisation par glisser-déposer",
|
||||
"viewTabs": "Vue par onglets",
|
||||
"viewTabsTooltip": "Onglets en haut, contenu dessous — glisser les onglets pour réordonner",
|
||||
"viewModeGroup": "Mode d'affichage des notes",
|
||||
"reorderTabs": "Réordonner l'onglet",
|
||||
"modified": "Modifiée",
|
||||
"created": "Créée"
|
||||
},
|
||||
"pagination": {
|
||||
"next": "→",
|
||||
@@ -952,7 +980,15 @@
|
||||
"themeLight": "Clair",
|
||||
"themeSystem": "Système",
|
||||
"title": "Paramètres",
|
||||
"version": "Version"
|
||||
"version": "Version",
|
||||
"emailNotifications": "Notifications par email",
|
||||
"emailNotificationsDesc": "Recevoir des notifications importantes par email",
|
||||
"desktopNotifications": "Notifications bureau",
|
||||
"desktopNotificationsDesc": "Recevoir des notifications dans votre navigateur",
|
||||
"anonymousAnalytics": "Analyses anonymes",
|
||||
"anonymousAnalyticsDesc": "Partager des données d'utilisation anonymes pour améliorer l'application",
|
||||
"notificationsDesc": "Gérez vos préférences de notifications",
|
||||
"privacyDesc": "Contrôlez vos données et votre confidentialité"
|
||||
},
|
||||
"reminders": {
|
||||
"title": "Rappels",
|
||||
@@ -970,6 +1006,8 @@
|
||||
"archive": "Archives",
|
||||
"editLabels": "Modifier les étiquettes",
|
||||
"labels": "Étiquettes",
|
||||
"newNoteTabs": "Nouvelle note",
|
||||
"newNoteTabsHint": "Créer une note dans ce carnet",
|
||||
"noLabelsInNotebook": "Aucune étiquette dans ce carnet",
|
||||
"notes": "Notes",
|
||||
"reminders": "Rappels",
|
||||
@@ -1053,5 +1091,65 @@
|
||||
"collapse": "Réduire",
|
||||
"expand": "Développer",
|
||||
"open": "Ouvrir"
|
||||
},
|
||||
"mcpSettings": {
|
||||
"title": "Paramètres MCP",
|
||||
"description": "Gérez vos clés API et configurez les outils externes",
|
||||
"whatIsMcp": {
|
||||
"title": "Qu'est-ce que MCP ?",
|
||||
"description": "Le Model Context Protocol (MCP) est un protocole ouvert qui permet aux modèles IA d'interagir de manière sécurisée avec des outils et sources de données externes. Avec MCP, vous pouvez connecter des outils comme Claude Code, Cursor ou N8N à votre instance Keep Notes pour lire, créer et organiser vos notes par programmation.",
|
||||
"learnMore": "En savoir plus sur MCP"
|
||||
},
|
||||
"serverStatus": {
|
||||
"title": "État du serveur",
|
||||
"running": "En cours",
|
||||
"stopped": "Arrêté",
|
||||
"mode": "Mode",
|
||||
"url": "URL"
|
||||
},
|
||||
"apiKeys": {
|
||||
"title": "Clés API",
|
||||
"description": "Les clés API permettent aux outils externes d'accéder à vos notes via MCP. Gardez vos clés secrètes.",
|
||||
"generate": "Générer une nouvelle clé",
|
||||
"empty": "Aucune clé API. Générez-en une pour commencer.",
|
||||
"active": "Active",
|
||||
"revoked": "Révoquée",
|
||||
"revoke": "Révoquer",
|
||||
"delete": "Supprimer",
|
||||
"createdAt": "Créée le",
|
||||
"lastUsed": "Dernière utilisation",
|
||||
"never": "Jamais",
|
||||
"confirmRevoke": "Êtes-vous sûr de vouloir révoquer cette clé ? Les outils qui l'utilisent perdront leur accès.",
|
||||
"confirmDelete": "Êtes-vous sûr de vouloir supprimer définitivement cette clé ?"
|
||||
},
|
||||
"createDialog": {
|
||||
"title": "Générer une clé API",
|
||||
"description": "Créez une nouvelle clé API pour connecter des outils externes à vos notes.",
|
||||
"nameLabel": "Nom de la clé",
|
||||
"namePlaceholder": "ex. Claude Code, Cursor, N8N",
|
||||
"generating": "Génération...",
|
||||
"generate": "Générer",
|
||||
"successTitle": "Clé API générée",
|
||||
"successDescription": "Copiez votre clé API maintenant. Vous ne pourrez plus la voir ensuite.",
|
||||
"copy": "Copier",
|
||||
"copied": "Copiée !",
|
||||
"done": "Terminé"
|
||||
},
|
||||
"configInstructions": {
|
||||
"title": "Instructions de configuration",
|
||||
"description": "Utilisez votre clé API pour configurer ces outils.",
|
||||
"claudeCode": {
|
||||
"title": "Claude Code",
|
||||
"description": "Ajoutez ceci à votre fichier de configuration MCP de Claude Code :"
|
||||
},
|
||||
"cursor": {
|
||||
"title": "Cursor",
|
||||
"description": "Ajoutez ceci à vos paramètres MCP de Cursor :"
|
||||
},
|
||||
"n8n": {
|
||||
"title": "N8N",
|
||||
"description": "Utilisez ces identifiants dans votre nœud MCP N8N :"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user