feat: image AI titles (3 suggestions), describe-images action, pin/list fixes, i18n
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s

- Add image description service + API route for AI-powered image analysis
- Image title generation returns 3 selectable suggestions via TitleSuggestions component
- Add "Describe images" action in AI assistant (individual + collective)
- Fix pin refresh propagation in card and tabs view
- Fix note creation refresh in tabs mode, pass all notes to tabs view
- Add RTL support (dir="auto") on note content elements
- Pass UI language dynamically to AI endpoints instead of hardcoded 'fr'
- Add 18 missing i18n keys in both en.json and fr.json
- Sparkles button on images for AI title generation (bottom-right, pulse animation)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-29 22:34:13 +02:00
parent fc06519f56
commit d91072ed6b
11 changed files with 453 additions and 59 deletions

View File

@@ -396,11 +396,14 @@
"transformationsDesc": "Transformations — appliquées directement à la note",
"writeMinWordsAction": "Écrivez au moins 5 mots pour activer les actions IA.",
"processingAction": "Traitement en cours...",
"noImagesError": "Aucune image dans cette note",
"overview": "Résumé",
"action": {
"clarify": "Clarifier",
"shorten": "Raccourcir",
"improve": "Améliorer",
"toMarkdown": "Convertir en Markdown"
"toMarkdown": "Convertir en Markdown",
"describeImages": "Décrire les images"
},
"openAssistant": "Ouvrir l'Assistant IA",
"poweredByMomento": "Propulsé par Momento AI",
@@ -415,7 +418,9 @@
"historyTab": "Historique",
"insightsTab": "Insights",
"aiCopilot": "Copilote IA",
"suggestTitle": "Suggestion de titre IA"
"suggestTitle": "Suggestion de titre IA",
"generateTitleFromImage": "Générer un titre à partir de l'image",
"titleGenerated": "Titre généré à partir de l'image"
},
"aiSettings": {
"description": "Configurez vos fonctionnalités IA et préférences",
@@ -445,6 +450,7 @@
"notesViewLabel": "Affichage des notes",
"notesViewTabs": "Onglets (type OneNote)",
"notesViewMasonry": "Cartes (grille)",
"selectTheme": "Sélectionner le thème",
"title": "Apparence"
},
"auth": {
@@ -852,7 +858,8 @@
"pdfGeneratedOn": "Généré le :",
"confidence": "confiance",
"savingReminder": "Erreur lors de la sauvegarde du rappel",
"removingReminder": "Erreur lors de la suppression du rappel"
"removingReminder": "Erreur lors de la suppression du rappel",
"generatingDescription": "Veuillez patienter..."
},
"notebookSuggestion": {
"description": "Cette note semble appartenir à ce carnet",
@@ -1014,7 +1021,21 @@
"sortDateDesc": "Date (récent)",
"sortDateAsc": "Date (ancien)",
"sortTitleAsc": "Titre A → Z",
"sortTitleDesc": "Titre Z → A"
"sortTitleDesc": "Titre Z → A",
"suggestTitle": "Titre IA",
"generateTitleFromImage": "Générer un titre à partir de l'image",
"titleGenerated": "Titre généré",
"content": "Contenu",
"restore": "Restaurer",
"createFailed": "Impossible de créer la note",
"updateFailed": "Mise à jour échouée",
"archived": "Note archivée",
"archiveFailed": "Échec de l'archivage",
"sort": "Trier",
"confirmDeleteTitle": "Supprimer la note",
"leftShare": "Partage retiré",
"dismissed": "Note retirée des récentes",
"generalNotes": "Notes générales"
},
"pagination": {
"next": "→",
@@ -1178,7 +1199,8 @@
"noLabelsInNotebook": "Aucune étiquette dans ce carnet",
"notes": "Notes",
"reminders": "Rappels",
"trash": "Corbeille"
"trash": "Corbeille",
"clearFilter": "Retirer le filtre"
},
"support": {
"aiApiCosts": "Coûts API IA :",
@@ -1567,7 +1589,8 @@
"createFailed": "Échec de la création",
"deleteSpace": "Supprimer l'espace",
"deleted": "Espace supprimé",
"deleteError": "Erreur lors de la suppression"
"deleteError": "Erreur lors de la suppression",
"rename": "Renommer"
},
"lab": {
"initializing": "Initialisation de l'espace de travail",