fix: i18n system overhaul and sidebar UI bugs
- Fix LanguageProvider: add RTL support (ar/fa), translation caching, prevent blank flash during load, browser language detection - Fix detect-user-language: extend whitelist from 5 to all 15 languages - Remove hardcoded initialLanguage="fr" from auth layout - Complete fr.json translation (all sections translated from English) - Add missing admin.ai keys to all 13 non-English locales - Translate ai.autoLabels, ai.batchOrganization, memoryEcho sections for all locales - Remove duplicate top-level autoLabels/batchOrganization from en.json - Fix notebook creation: replace window.location.reload() with createNotebookOptimistic + router.refresh() - Fix notebook name truncation in sidebar with min-w-0 - Remove redundant router.refresh() after note creation in page.tsx Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -45,16 +45,22 @@
|
||||
"baseUrl": "URL de base",
|
||||
"commonEmbeddingModels": "Modèles d'embeddings courants pour API compatibles OpenAI",
|
||||
"commonModelsDescription": "Modèles courants pour API compatibles OpenAI",
|
||||
"description": "Configurez les fournisseurs IA pour l'étiquetage auto et la recherche sémantique.",
|
||||
"description": "Configurez les fournisseurs IA pour l'étiquetage auto et la recherche sémantique. Utilisez différents fournisseurs pour des performances optimales.",
|
||||
"embeddingsDescription": "Fournisseur IA pour la recherche sémantique. Recommandé : OpenAI (meilleure qualité).",
|
||||
"embeddingsProvider": "Fournisseur d'embeddings",
|
||||
"model": "Modèle",
|
||||
"modelRecommendations": "gpt-4o-mini = Meilleur prix • gpt-4o = Meilleure qualité",
|
||||
"modelRecommendations": "gpt-4o-mini = Meilleur rapport qualité/prix • gpt-4o = Meilleure qualité",
|
||||
"openAIKeyDescription": "Votre clé API OpenAI depuis platform.openai.com",
|
||||
"openTestPanel": "Ouvrir le panneau de test IA",
|
||||
"provider": "Fournisseur",
|
||||
"providerEmbeddingRequired": "AI_PROVIDER_EMBEDDING est requis",
|
||||
"providerTagsRequired": "AI_PROVIDER_TAGS est requis",
|
||||
"providerOllamaOption": "🦙 Ollama (Local & Gratuit)",
|
||||
"providerOpenAIOption": "🤖 OpenAI (GPT-5, GPT-4)",
|
||||
"providerCustomOption": "🔧 Custom Compatible OpenAI",
|
||||
"bestValue": "Meilleur rapport qualité/prix",
|
||||
"bestQuality": "Meilleure qualité",
|
||||
"saved": "(Enregistré)",
|
||||
"saveSettings": "Enregistrer les paramètres IA",
|
||||
"saving": "Enregistrement...",
|
||||
"selectEmbeddingModel": "Sélectionnez un modèle d'embedding installé localement",
|
||||
@@ -63,83 +69,77 @@
|
||||
"tagsGenerationProvider": "Fournisseur de génération d'étiquettes",
|
||||
"title": "Configuration IA",
|
||||
"updateFailed": "Échec de la mise à jour des paramètres IA",
|
||||
"updateSuccess": "Paramètres IA mis à jour avec succès",
|
||||
"providerOllamaOption": "🦙 Ollama (Local & Gratuit)",
|
||||
"providerOpenAIOption": "🤖 OpenAI (GPT-5, GPT-4)",
|
||||
"providerCustomOption": "🔧 Custom Compatible OpenAI",
|
||||
"bestValue": "Meilleur rapport qualité/prix",
|
||||
"bestQuality": "Meilleure qualité",
|
||||
"saved": "(Enregistré)"
|
||||
"updateSuccess": "Paramètres IA mis à jour avec succès"
|
||||
},
|
||||
"aiTest": {
|
||||
"description": "Test your AI providers for tag generation and semantic search embeddings",
|
||||
"embeddingDimensions": "Embedding Dimensions:",
|
||||
"embeddingsTestDescription": "Test the AI provider responsible for semantic search embeddings",
|
||||
"embeddingsTestTitle": "Embeddings Test",
|
||||
"error": "Error:",
|
||||
"first5Values": "First 5 values:",
|
||||
"generatedTags": "Generated Tags:",
|
||||
"howItWorksTitle": "How Testing Works",
|
||||
"model": "Model:",
|
||||
"provider": "Provider:",
|
||||
"responseTime": "Response time: {time}ms",
|
||||
"runTest": "Run Test",
|
||||
"tagsTestDescription": "Test the AI provider responsible for automatic tag suggestions",
|
||||
"tagsTestTitle": "Tags Generation Test",
|
||||
"testError": "Test Error: {error}",
|
||||
"testFailed": "Test Failed",
|
||||
"testPassed": "Test Passed",
|
||||
"testing": "Testing...",
|
||||
"tipDescription": "Use the AI Test Panel to diagnose configuration issues before testing.",
|
||||
"tipTitle": "Tip:",
|
||||
"title": "AI Provider Testing",
|
||||
"vectorDimensions": "vector dimensions"
|
||||
"description": "Testez vos fournisseurs IA pour la génération d'étiquettes et les embeddings de recherche sémantique",
|
||||
"embeddingDimensions": "Dimensions de l'embedding :",
|
||||
"embeddingsTestDescription": "Testez le fournisseur IA responsable des embeddings de recherche sémantique",
|
||||
"embeddingsTestTitle": "Test d'embeddings",
|
||||
"error": "Erreur :",
|
||||
"first5Values": "5 premières valeurs :",
|
||||
"generatedTags": "Étiquettes générées :",
|
||||
"howItWorksTitle": "Fonctionnement des tests",
|
||||
"model": "Modèle :",
|
||||
"provider": "Fournisseur :",
|
||||
"responseTime": "Temps de réponse : {time}ms",
|
||||
"runTest": "Lancer le test",
|
||||
"tagsTestDescription": "Testez le fournisseur IA responsable des suggestions d'étiquettes automatiques",
|
||||
"tagsTestTitle": "Test de génération d'étiquettes",
|
||||
"testError": "Erreur de test : {error}",
|
||||
"testFailed": "Test échoué",
|
||||
"testPassed": "Test réussi",
|
||||
"testing": "Test en cours...",
|
||||
"tipDescription": "Utilisez le panneau de test IA pour diagnostiquer les problèmes de configuration avant de tester.",
|
||||
"tipTitle": "Astuce :",
|
||||
"title": "Test des fournisseurs IA",
|
||||
"vectorDimensions": "dimensions vectorielles"
|
||||
},
|
||||
"aiTesting": "AI Testing",
|
||||
"aiTesting": "Test IA",
|
||||
"security": {
|
||||
"allowPublicRegistration": "Allow Public Registration",
|
||||
"allowPublicRegistrationDescription": "If disabled, new users can only be added by an Administrator via the User Management page.",
|
||||
"description": "Manage access control and registration policies.",
|
||||
"title": "Security Settings",
|
||||
"updateFailed": "Failed to update security settings",
|
||||
"updateSuccess": "Security Settings updated"
|
||||
"allowPublicRegistration": "Autoriser l'inscription publique",
|
||||
"allowPublicRegistrationDescription": "Si désactivé, les nouveaux utilisateurs ne peuvent être ajoutés que par un administrateur via la page de gestion des utilisateurs.",
|
||||
"description": "Gérez le contrôle d'accès et les politiques d'inscription.",
|
||||
"title": "Paramètres de sécurité",
|
||||
"updateFailed": "Échec de la mise à jour des paramètres de sécurité",
|
||||
"updateSuccess": "Paramètres de sécurité mis à jour"
|
||||
},
|
||||
"settings": "Admin Settings",
|
||||
"settings": "Paramètres administrateur",
|
||||
"smtp": {
|
||||
"description": "Configure email server for password resets.",
|
||||
"forceSSL": "Force SSL/TLS (usually for port 465)",
|
||||
"fromEmail": "From Email",
|
||||
"host": "Host",
|
||||
"ignoreCertErrors": "Ignore Certificate Errors (Self-hosted/Dev only)",
|
||||
"password": "Password",
|
||||
"description": "Configurez le serveur email pour les réinitialisations de mot de passe.",
|
||||
"forceSSL": "Forcer SSL/TLS (généralement pour le port 465)",
|
||||
"fromEmail": "Email d'expédition",
|
||||
"host": "Hôte",
|
||||
"ignoreCertErrors": "Ignorer les erreurs de certificat (Auto-hébergé/Dev uniquement)",
|
||||
"password": "Mot de passe",
|
||||
"port": "Port",
|
||||
"saveSettings": "Save SMTP Settings",
|
||||
"sending": "Sending...",
|
||||
"testEmail": "Test Email",
|
||||
"testFailed": "Failed: {error}",
|
||||
"testSuccess": "Test email sent successfully!",
|
||||
"title": "SMTP Configuration",
|
||||
"updateFailed": "Failed to update SMTP settings",
|
||||
"updateSuccess": "SMTP Settings updated",
|
||||
"username": "Username"
|
||||
"saveSettings": "Enregistrer les paramètres SMTP",
|
||||
"sending": "Envoi en cours...",
|
||||
"testEmail": "Email de test",
|
||||
"testFailed": "Échec : {error}",
|
||||
"testSuccess": "Email de test envoyé avec succès !",
|
||||
"title": "Configuration SMTP",
|
||||
"updateFailed": "Échec de la mise à jour des paramètres SMTP",
|
||||
"updateSuccess": "Paramètres SMTP mis à jour",
|
||||
"username": "Nom d'utilisateur"
|
||||
},
|
||||
"title": "Admin Dashboard",
|
||||
"userManagement": "User Management",
|
||||
"title": "Tableau de bord Admin",
|
||||
"userManagement": "Gestion des utilisateurs",
|
||||
"users": {
|
||||
"addUser": "Add User",
|
||||
"addUser": "Ajouter un utilisateur",
|
||||
"confirmDelete": "Êtes-vous sûr ? Cette action est irréversible.",
|
||||
"createFailed": "Failed to create user",
|
||||
"createSuccess": "User created successfully",
|
||||
"createUser": "Create User",
|
||||
"createUserDescription": "Add a new user to the system.",
|
||||
"createFailed": "Échec de la création de l'utilisateur",
|
||||
"createSuccess": "Utilisateur créé avec succès",
|
||||
"createUser": "Créer un utilisateur",
|
||||
"createUserDescription": "Ajouter un nouvel utilisateur au système.",
|
||||
"deleteFailed": "Échec de la suppression",
|
||||
"deleteSuccess": "Utilisateur supprimé",
|
||||
"demote": "Rétrograder en utilisateur",
|
||||
"email": "Email",
|
||||
"name": "Name",
|
||||
"password": "Password",
|
||||
"name": "Nom",
|
||||
"password": "Mot de passe",
|
||||
"promote": "Promouvoir en admin",
|
||||
"role": "Role",
|
||||
"role": "Rôle",
|
||||
"roleUpdateFailed": "Échec de la mise à jour du rôle",
|
||||
"roleUpdateSuccess": "Rôle de l'utilisateur mis à jour à {role}",
|
||||
"roles": {
|
||||
@@ -156,79 +156,80 @@
|
||||
}
|
||||
},
|
||||
"ai": {
|
||||
"analyzing": "AI analyzing...",
|
||||
"assistant": "AI Assistant",
|
||||
"analyzing": "Analyse IA en cours...",
|
||||
"assistant": "Assistant IA",
|
||||
"autoLabels": {
|
||||
"analyzing": "Analyse de vos notes pour les suggestions d'étiquettes...",
|
||||
"create": "Créer",
|
||||
"createNewLabel": "Créer cette nouvelle étiquette et l'ajouter",
|
||||
"created": "{count} labels created successfully",
|
||||
"created": "{count} étiquettes créées avec succès",
|
||||
"creating": "Création des étiquettes...",
|
||||
"description": "I've detected recurring themes in \"{notebookName}\" ({totalNotes} notes). Create labels for them?",
|
||||
"error": "Failed to fetch label suggestions",
|
||||
"description": "J'ai détecté des thèmes récurrents dans \"{notebookName}\" ({totalNotes} notes). Créer des étiquettes pour eux ?",
|
||||
"error": "Échec de la récupération des suggestions d'étiquettes",
|
||||
"new": "(nouveau)",
|
||||
"noLabelsSelected": "No labels selected",
|
||||
"noLabelsSelected": "Aucune étiquette sélectionnée",
|
||||
"note": "note",
|
||||
"notes": "notes",
|
||||
"title": "Suggestions d'étiquettes",
|
||||
"typeContent": "Type content to get label suggestions...",
|
||||
"typeForSuggestions": "Tapez du contenu pour obtenir des suggestions d'étiquettes..."
|
||||
"typeContent": "Tapez du contenu pour obtenir des suggestions d'étiquettes...",
|
||||
"typeForSuggestions": "Tapez du contenu pour obtenir des suggestions d'étiquettes...",
|
||||
"notesCount": "{count} notes"
|
||||
},
|
||||
"batchOrganization": {
|
||||
"analyzing": "Analyzing your notes...",
|
||||
"apply": "Apply",
|
||||
"analyzing": "Analyse de vos notes...",
|
||||
"apply": "Appliquer",
|
||||
"applyFailed": "Échec de l'application du plan d'organisation",
|
||||
"applying": "Applying...",
|
||||
"applying": "Application...",
|
||||
"description": "L'IA analysera vos notes et suggérera de les organiser dans des carnets.",
|
||||
"error": "Échec de la création du plan d'organisation",
|
||||
"noNotebooks": "No notebooks available. Create notebooks first to organize your notes.",
|
||||
"noNotebooks": "Aucun carnet disponible. Créez d'abord des carnets pour organiser vos notes.",
|
||||
"noNotesSelected": "Aucune note sélectionnée",
|
||||
"noSuggestions": "AI could not find a good way to organize these notes.",
|
||||
"noSuggestions": "L'IA n'a pas trouvé de bonne manière d'organiser ces notes.",
|
||||
"selectAllIn": "Sélectionner toutes les notes dans {notebook}",
|
||||
"selectNote": "Sélectionner la note : {title}",
|
||||
"success": "{count} notes déplacées avec succès",
|
||||
"title": "Organiser avec l'IA"
|
||||
},
|
||||
"clarify": "Clarify",
|
||||
"clickToAddTag": "Click to add this tag",
|
||||
"generateTitles": "Generate titles",
|
||||
"generateTitlesTooltip": "Generate titles with AI",
|
||||
"generating": "Generating...",
|
||||
"generatingTitles": "Generating titles...",
|
||||
"ignoreSuggestion": "Ignore this suggestion",
|
||||
"improveStyle": "Improve style",
|
||||
"languageDetected": "Language detected",
|
||||
"clarify": "Clarifier",
|
||||
"clickToAddTag": "Cliquer pour ajouter cette étiquette",
|
||||
"generateTitles": "Générer des titres",
|
||||
"generateTitlesTooltip": "Générer des titres avec l'IA",
|
||||
"generating": "Génération...",
|
||||
"generatingTitles": "Génération de titres...",
|
||||
"ignoreSuggestion": "Ignorer cette suggestion",
|
||||
"improveStyle": "Améliorer le style",
|
||||
"languageDetected": "Langue détectée",
|
||||
"notebookSummary": {
|
||||
"regenerate": "Régénérer le résumé",
|
||||
"regenerating": "Régénération du résumé..."
|
||||
},
|
||||
"original": "Original",
|
||||
"poweredByAI": "Powered by AI",
|
||||
"processing": "Processing...",
|
||||
"reformulateText": "Reformulate text",
|
||||
"reformulated": "Reformulated",
|
||||
"reformulating": "Reformulating...",
|
||||
"reformulationApplied": "Reformulated text applied!",
|
||||
"reformulationComparison": "Reformulation Comparison",
|
||||
"reformulationError": "Error during reformulation",
|
||||
"reformulationFailed": "Failed to reformulate text",
|
||||
"reformulationMaxWords": "Text must have maximum 500 words",
|
||||
"reformulationMinWords": "Text must have at least 10 words (current: {count} words)",
|
||||
"reformulationNoText": "Please select text or add content",
|
||||
"reformulationSelectionTooShort": "Selection too short, using full content",
|
||||
"shorten": "Shorten",
|
||||
"tagAdded": "Tag \"{tag}\" added",
|
||||
"titleApplied": "Title applied!",
|
||||
"titleGenerateWithAI": "Generate titles with AI",
|
||||
"titleGenerating": "Generating...",
|
||||
"titleGenerationError": "Error generating titles",
|
||||
"titleGenerationFailed": "Failed to generate titles",
|
||||
"titleGenerationMinWords": "Content must have at least 10 words to generate titles (current: {count} words)",
|
||||
"titlesGenerated": "💡 {count} titles generated!",
|
||||
"transformError": "Error during transformation",
|
||||
"transformMarkdown": "Transform to Markdown",
|
||||
"transformSuccess": "Text transformed to Markdown successfully!",
|
||||
"transforming": "Transforming..."
|
||||
"poweredByAI": "Propulsé par l'IA",
|
||||
"processing": "Traitement en cours...",
|
||||
"reformulateText": "Reformuler le texte",
|
||||
"reformulated": "Reformulé",
|
||||
"reformulating": "Reformulation...",
|
||||
"reformulationApplied": "Texte reformulé appliqué !",
|
||||
"reformulationComparison": "Comparaison de reformulation",
|
||||
"reformulationError": "Erreur lors de la reformulation",
|
||||
"reformulationFailed": "Échec de la reformulation du texte",
|
||||
"reformulationMaxWords": "Le texte doit avoir au maximum 500 mots",
|
||||
"reformulationMinWords": "Le texte doit avoir au moins 10 mots (actuel : {count} mots)",
|
||||
"reformulationNoText": "Veuillez sélectionner du texte ou ajouter du contenu",
|
||||
"reformulationSelectionTooShort": "Sélection trop courte, utilisation du contenu complet",
|
||||
"shorten": "Raccourcir",
|
||||
"tagAdded": "Étiquette \"{tag}\" ajoutée",
|
||||
"titleApplied": "Titre appliqué !",
|
||||
"titleGenerateWithAI": "Générer des titres avec l'IA",
|
||||
"titleGenerating": "Génération...",
|
||||
"titleGenerationError": "Erreur lors de la génération des titres",
|
||||
"titleGenerationFailed": "Échec de la génération des titres",
|
||||
"titleGenerationMinWords": "Le contenu doit avoir au moins 10 mots pour générer des titres (actuel : {count} mots)",
|
||||
"titlesGenerated": "💡 {count} titres générés !",
|
||||
"transformError": "Erreur lors de la transformation",
|
||||
"transformMarkdown": "Transformer en Markdown",
|
||||
"transformSuccess": "Texte transformé en Markdown avec succès !",
|
||||
"transforming": "Transformation..."
|
||||
},
|
||||
"aiSettings": {
|
||||
"description": "Configurez vos fonctionnalités IA et préférences",
|
||||
@@ -282,7 +283,7 @@
|
||||
"sending": "Envoi en cours...",
|
||||
"signIn": "Connexion",
|
||||
"signInToAccount": "Connectez-vous à votre compte",
|
||||
"signOut": "Sign out",
|
||||
"signOut": "Déconnexion",
|
||||
"signUp": "S'inscrire"
|
||||
},
|
||||
"autoLabels": {
|
||||
@@ -387,51 +388,51 @@
|
||||
},
|
||||
"dataManagement": {
|
||||
"cleanup": {
|
||||
"button": "Cleanup",
|
||||
"description": "Remove labels and connections that reference deleted notes.",
|
||||
"failed": "Error during cleanup",
|
||||
"title": "Cleanup Orphaned Data"
|
||||
"button": "Nettoyer",
|
||||
"description": "Supprimer les étiquettes et connexions qui référencent des notes supprimées.",
|
||||
"failed": "Erreur lors du nettoyage",
|
||||
"title": "Nettoyer les données orphelines"
|
||||
},
|
||||
"cleanupComplete": "Nettoyage terminé : {created} créés, {deleted} supprimés",
|
||||
"cleanupError": "Erreur lors du nettoyage",
|
||||
"dangerZone": "Zone de danger",
|
||||
"dangerZoneDescription": "Supprimer définitivement vos données",
|
||||
"delete": {
|
||||
"button": "Delete All Notes",
|
||||
"confirm": "Are you sure? This will permanently delete all your notes.",
|
||||
"description": "Permanently delete all your notes. This action cannot be undone.",
|
||||
"failed": "Failed to delete notes",
|
||||
"success": "All notes deleted",
|
||||
"title": "Delete All Notes"
|
||||
"button": "Supprimer toutes les notes",
|
||||
"confirm": "Êtes-vous sûr ? Cette action supprimera définitivement toutes vos notes.",
|
||||
"description": "Supprimer définitivement toutes vos notes. Cette action est irréversible.",
|
||||
"failed": "Échec de la suppression des notes",
|
||||
"success": "Toutes les notes ont été supprimées",
|
||||
"title": "Supprimer toutes les notes"
|
||||
},
|
||||
"deleting": "Suppression...",
|
||||
"export": {
|
||||
"button": "Export Notes",
|
||||
"description": "Download all your notes as a JSON file. This includes all content, labels, and metadata.",
|
||||
"failed": "Failed to export notes",
|
||||
"success": "Notes exported successfully",
|
||||
"title": "Export All Notes"
|
||||
"button": "Exporter les notes",
|
||||
"description": "Télécharger toutes vos notes au format JSON. Inclut tout le contenu, les étiquettes et les métadonnées.",
|
||||
"failed": "Échec de l'exportation des notes",
|
||||
"success": "Notes exportées avec succès",
|
||||
"title": "Exporter toutes les notes"
|
||||
},
|
||||
"exporting": "Exportation...",
|
||||
"import": {
|
||||
"button": "Import Notes",
|
||||
"description": "Upload a JSON file to import notes. This will add to your existing notes, not replace them.",
|
||||
"failed": "Failed to import notes",
|
||||
"success": "Imported {count} notes",
|
||||
"title": "Import Notes"
|
||||
"button": "Importer des notes",
|
||||
"description": "Téléchargez un fichier JSON pour importer des notes. Les notes seront ajoutées aux existantes, pas remplacées.",
|
||||
"failed": "Échec de l'importation des notes",
|
||||
"success": "{count} notes importées",
|
||||
"title": "Importer des notes"
|
||||
},
|
||||
"importing": "Importation...",
|
||||
"indexing": {
|
||||
"button": "Rebuild Index",
|
||||
"description": "Regenerate embeddings for all notes to improve semantic search.",
|
||||
"failed": "Error during indexing",
|
||||
"success": "Indexing complete: {count} notes processed",
|
||||
"title": "Rebuild Search Index"
|
||||
"button": "Reconstruire l'index",
|
||||
"description": "Régénérer les embeddings pour toutes les notes afin d'améliorer la recherche sémantique.",
|
||||
"failed": "Erreur lors de l'indexation",
|
||||
"success": "Indexation terminée : {count} notes traitées",
|
||||
"title": "Reconstruire l'index de recherche"
|
||||
},
|
||||
"indexingComplete": "Indexation terminée : {count} notes traitées",
|
||||
"indexingError": "Erreur lors de l'indexation",
|
||||
"title": "Data Management",
|
||||
"toolsDescription": "Tools to maintain your database health"
|
||||
"title": "Gestion des données",
|
||||
"toolsDescription": "Outils pour maintenir la santé de votre base de données"
|
||||
},
|
||||
"demoMode": {
|
||||
"activated": "Mode Démo activé ! Memory Echo fonctionnera maintenant instantanément.",
|
||||
@@ -501,53 +502,53 @@
|
||||
"title": "Paramètres généraux"
|
||||
},
|
||||
"labels": {
|
||||
"addLabel": "Add label",
|
||||
"allLabels": "All Labels",
|
||||
"changeColor": "Change Color",
|
||||
"changeColorTooltip": "Change color",
|
||||
"clearAll": "Clear all",
|
||||
"confirmDelete": "Are you sure you want to delete this label?",
|
||||
"addLabel": "Ajouter une étiquette",
|
||||
"allLabels": "Toutes les étiquettes",
|
||||
"changeColor": "Changer la couleur",
|
||||
"changeColorTooltip": "Changer la couleur",
|
||||
"clearAll": "Tout effacer",
|
||||
"confirmDelete": "Êtes-vous sûr de vouloir supprimer cette étiquette ?",
|
||||
"count": "{count} étiquettes",
|
||||
"createLabel": "Create label",
|
||||
"delete": "Delete",
|
||||
"deleteTooltip": "Delete label",
|
||||
"editLabels": "Edit Labels",
|
||||
"editLabelsDescription": "Create, edit colors, or delete labels.",
|
||||
"filter": "Filter by Label",
|
||||
"filterByLabel": "Filter by label",
|
||||
"labelColor": "Label color",
|
||||
"labelName": "Label name",
|
||||
"loading": "Loading...",
|
||||
"manage": "Manage Labels",
|
||||
"manageLabels": "Manage labels",
|
||||
"manageLabelsDescription": "Add or remove labels for this note. Click on a label to change its color.",
|
||||
"manageTooltip": "Manage Labels",
|
||||
"namePlaceholder": "Enter label name",
|
||||
"newLabelPlaceholder": "Create new label",
|
||||
"createLabel": "Créer une étiquette",
|
||||
"delete": "Supprimer",
|
||||
"deleteTooltip": "Supprimer l'étiquette",
|
||||
"editLabels": "Modifier les étiquettes",
|
||||
"editLabelsDescription": "Créer, modifier les couleurs ou supprimer des étiquettes.",
|
||||
"filter": "Filtrer par étiquette",
|
||||
"filterByLabel": "Filtrer par étiquette",
|
||||
"labelColor": "Couleur de l'étiquette",
|
||||
"labelName": "Nom de l'étiquette",
|
||||
"loading": "Chargement...",
|
||||
"manage": "Gérer les étiquettes",
|
||||
"manageLabels": "Gérer les étiquettes",
|
||||
"manageLabelsDescription": "Ajouter ou supprimer des étiquettes pour cette note. Cliquez sur une étiquette pour changer sa couleur.",
|
||||
"manageTooltip": "Gérer les étiquettes",
|
||||
"namePlaceholder": "Entrez le nom de l'étiquette",
|
||||
"newLabelPlaceholder": "Créer une nouvelle étiquette",
|
||||
"noLabels": "Aucune étiquette",
|
||||
"noLabelsFound": "No labels found.",
|
||||
"notebookRequired": "⚠️ Labels are only available in notebooks. Move this note to a notebook first.",
|
||||
"selectedLabels": "Selected Labels",
|
||||
"showLess": "Show less",
|
||||
"showMore": "Show more",
|
||||
"tagAdded": "Tag \"{tag}\" added",
|
||||
"title": "Labels"
|
||||
"noLabelsFound": "Aucune étiquette trouvée.",
|
||||
"notebookRequired": "⚠️ Les étiquettes sont uniquement disponibles dans les carnets. Déplacez cette note dans un carnet d'abord.",
|
||||
"selectedLabels": "Étiquettes sélectionnées",
|
||||
"showLess": "Voir moins",
|
||||
"showMore": "Voir plus",
|
||||
"tagAdded": "Étiquette \"{tag}\" ajoutée",
|
||||
"title": "Étiquettes"
|
||||
},
|
||||
"memoryEcho": {
|
||||
"clickToView": "Cliquer pour voir la note →",
|
||||
"comparison": {
|
||||
"clickToView": "Click to view note",
|
||||
"helpful": "Helpful",
|
||||
"helpfulQuestion": "Is this comparison helpful?",
|
||||
"highSimilarityInsight": "These notes deal with the same topic with a high degree of similarity. They could be merged or consolidated.",
|
||||
"notHelpful": "Not Helpful",
|
||||
"similarityInfo": "These notes are connected by {similarity}% similarity",
|
||||
"title": "💡 Note Comparison",
|
||||
"untitled": "Untitled"
|
||||
"clickToView": "Cliquer pour voir la note",
|
||||
"helpful": "Utile",
|
||||
"helpfulQuestion": "Cette comparaison est-elle utile ?",
|
||||
"highSimilarityInsight": "Ces notes traitent du même sujet avec un fort degré de similarité. Elles pourraient être fusionnées ou consolidées.",
|
||||
"notHelpful": "Pas utile",
|
||||
"similarityInfo": "Ces notes sont connectées par {similarity}% de similarité",
|
||||
"title": "💡 Comparaison de notes",
|
||||
"untitled": "Sans titre"
|
||||
},
|
||||
"connection": "connection",
|
||||
"connections": "Connections",
|
||||
"connectionsBadge": "{count} connection{plural}",
|
||||
"connection": "connexion",
|
||||
"connections": "Connexions",
|
||||
"connectionsBadge": "{count} connexion{plural}",
|
||||
"title": "💡 J'ai remarqué quelque chose...",
|
||||
"description": "Connexions proactives entre vos notes",
|
||||
"dailyInsight": "Aperçu quotidien de vos notes",
|
||||
@@ -568,8 +569,44 @@
|
||||
"sortSimilarity": "Similarité",
|
||||
"sortOldest": "Plus ancien"
|
||||
},
|
||||
"thanksFeedback": "Thanks for your feedback!",
|
||||
"thanksFeedbackImproving": "Thanks! We'll use this to improve."
|
||||
"thanksFeedback": "Merci pour votre retour !",
|
||||
"thanksFeedbackImproving": "Merci ! Nous l'utiliserons pour nous améliorer.",
|
||||
"fused": "Fusionné",
|
||||
"editorSection": {
|
||||
"title": "⚡ Notes connectées ({count})",
|
||||
"loading": "Chargement...",
|
||||
"view": "Voir",
|
||||
"compare": "Comparer",
|
||||
"merge": "Fusionner",
|
||||
"compareAll": "Tout comparer",
|
||||
"mergeAll": "Tout fusionner",
|
||||
"close": "Fermer"
|
||||
},
|
||||
"fusion": {
|
||||
"title": "🔗 Fusion intelligente",
|
||||
"mergeNotes": "Fusionner {count} note(s)",
|
||||
"notesToMerge": "📝 Notes à fusionner",
|
||||
"optionalPrompt": "💬 Prompt de fusion (optionnel)",
|
||||
"promptPlaceholder": "Instructions optionnelles pour l'IA (ex. : 'Garder le style formel de la note 1')...",
|
||||
"generateFusion": "Générer la fusion",
|
||||
"generating": "Génération...",
|
||||
"previewTitle": "📝 Aperçu de la note fusionnée",
|
||||
"edit": "Modifier",
|
||||
"modify": "Modifier",
|
||||
"finishEditing": "Terminer l'édition",
|
||||
"optionsTitle": "Options de fusion",
|
||||
"archiveOriginals": "Archiver les notes originales",
|
||||
"keepAllTags": "Conserver toutes les étiquettes",
|
||||
"useLatestTitle": "Utiliser la note la plus récente comme titre",
|
||||
"createBacklinks": "Créer un lien vers les notes originales",
|
||||
"cancel": "Annuler",
|
||||
"confirmFusion": "Confirmer la fusion",
|
||||
"success": "Notes fusionnées avec succès !",
|
||||
"error": "Échec de la fusion des notes",
|
||||
"generateError": "Échec de la génération de la fusion",
|
||||
"noContentReturned": "Aucun contenu de fusion retourné par l'API",
|
||||
"unknownDate": "Date inconnue"
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"accountSettings": "Paramètres du compte",
|
||||
@@ -607,33 +644,33 @@
|
||||
"workspace": "Espace de travail"
|
||||
},
|
||||
"notebook": {
|
||||
"cancel": "Cancel",
|
||||
"create": "Create Notebook",
|
||||
"createDescription": "Start a new collection to organize your notes, ideas, and projects efficiently.",
|
||||
"createNew": "Create New Notebook",
|
||||
"creating": "Creating...",
|
||||
"delete": "Delete Notebook",
|
||||
"deleteConfirm": "Delete",
|
||||
"deleteWarning": "Are you sure you want to delete this notebook? Notes will be moved to General Notes.",
|
||||
"edit": "Edit Notebook",
|
||||
"editDescription": "Change the name, icon, and color of your notebook.",
|
||||
"generating": "Generating summary...",
|
||||
"cancel": "Annuler",
|
||||
"create": "Créer un carnet",
|
||||
"createDescription": "Commencez une nouvelle collection pour organiser vos notes, idées et projets efficacement.",
|
||||
"createNew": "Créer un nouveau carnet",
|
||||
"creating": "Création...",
|
||||
"delete": "Supprimer le carnet",
|
||||
"deleteConfirm": "Supprimer",
|
||||
"deleteWarning": "Êtes-vous sûr de vouloir supprimer ce carnet ? Les notes seront déplacées dans les Notes générales.",
|
||||
"edit": "Modifier le carnet",
|
||||
"editDescription": "Changer le nom, l'icône et la couleur de votre carnet.",
|
||||
"generating": "Génération du résumé...",
|
||||
"labels": "Étiquettes :",
|
||||
"name": "Notebook Name",
|
||||
"name": "Nom du carnet",
|
||||
"noLabels": "Aucune étiquette",
|
||||
"selectColor": "Color",
|
||||
"selectIcon": "Icon",
|
||||
"summary": "Notebook Summary",
|
||||
"summaryDescription": "Generate an AI-powered summary of all notes in this notebook.",
|
||||
"summaryError": "Error generating summary"
|
||||
"selectColor": "Couleur",
|
||||
"selectIcon": "Icône",
|
||||
"summary": "Résumé du carnet",
|
||||
"summaryDescription": "Générer un résumé alimenté par l'IA de toutes les notes de ce carnet.",
|
||||
"summaryError": "Erreur lors de la génération du résumé"
|
||||
},
|
||||
"notebookSuggestion": {
|
||||
"description": "Cette note semble appartenir à ce notebook",
|
||||
"description": "Cette note semble appartenir à ce carnet",
|
||||
"dismiss": "Rejeter",
|
||||
"dismissIn": "Rejeter (ferme dans {timeLeft}s)",
|
||||
"generalNotes": "Notes générales",
|
||||
"move": "Déplacer",
|
||||
"moveToNotebook": "Déplacer vers un notebook",
|
||||
"moveToNotebook": "Déplacer vers un carnet",
|
||||
"title": "Déplacer vers {icon} {name} ?"
|
||||
},
|
||||
"notebooks": {
|
||||
@@ -643,106 +680,106 @@
|
||||
"noNotebooks": "Aucun carnet encore"
|
||||
},
|
||||
"notes": {
|
||||
"add": "Add",
|
||||
"addCollaborators": "Add collaborators",
|
||||
"addImage": "Add image",
|
||||
"addItem": "Add item",
|
||||
"addLink": "Add link",
|
||||
"addListItem": "+ List item",
|
||||
"add": "Ajouter",
|
||||
"addCollaborators": "Ajouter des collaborateurs",
|
||||
"addImage": "Ajouter une image",
|
||||
"addItem": "Ajouter un élément",
|
||||
"addLink": "Ajouter un lien",
|
||||
"addListItem": "+ Élément de liste",
|
||||
"addNote": "Ajouter une note",
|
||||
"adding": "Adding...",
|
||||
"aiAssistant": "AI Assistant",
|
||||
"archive": "Archive",
|
||||
"backgroundOptions": "Background options",
|
||||
"changeColor": "Change color",
|
||||
"changeSize": "Change size",
|
||||
"adding": "Ajout...",
|
||||
"aiAssistant": "Assistant IA",
|
||||
"archive": "Archiver",
|
||||
"backgroundOptions": "Options d'arrière-plan",
|
||||
"changeColor": "Changer la couleur",
|
||||
"changeSize": "Changer la taille",
|
||||
"clarifyFailed": "Échec de la clarification du texte",
|
||||
"close": "Close",
|
||||
"color": "Color",
|
||||
"confirmDelete": "Are you sure you want to delete this note?",
|
||||
"confirmLeaveShare": "Are you sure you want to leave this shared note?",
|
||||
"contentOrMediaRequired": "Please enter some content or add a link/image",
|
||||
"copy": "Copy",
|
||||
"copyFailed": "Failed to copy note",
|
||||
"copySuccess": "Note copied successfully!",
|
||||
"createFirstNote": "Create your first note",
|
||||
"close": "Fermer",
|
||||
"color": "Couleur",
|
||||
"confirmDelete": "Êtes-vous sûr de vouloir supprimer cette note ?",
|
||||
"confirmLeaveShare": "Êtes-vous sûr de vouloir quitter cette note partagée ?",
|
||||
"contentOrMediaRequired": "Veuillez entrer du contenu ou ajouter un lien/image",
|
||||
"copy": "Copier",
|
||||
"copyFailed": "Échec de la copie de la note",
|
||||
"copySuccess": "Note copiée avec succès !",
|
||||
"createFirstNote": "Créez votre première note",
|
||||
"date": "Date",
|
||||
"delete": "Delete",
|
||||
"delete": "Supprimer",
|
||||
"dragToReorder": "Glisser pour réorganiser",
|
||||
"duplicate": "Duplicate",
|
||||
"edit": "Edit Note",
|
||||
"duplicate": "Dupliquer",
|
||||
"edit": "Modifier la note",
|
||||
"emptyState": "Aucune note encore. Créez votre première note !",
|
||||
"fileTooLarge": "File too large: {fileName}. Maximum size is {maxSize}.",
|
||||
"fileTooLarge": "Fichier trop volumineux : {fileName}. Taille maximale : {maxSize}.",
|
||||
"improveFailed": "Échec de l'amélioration du texte",
|
||||
"inNotebook": "Dans le carnet",
|
||||
"invalidDateTime": "Invalid date or time",
|
||||
"invalidFileType": "Invalid file type: {fileName}. Only JPEG, PNG, GIF, and WebP allowed.",
|
||||
"itemOrMediaRequired": "Please add at least one item or media",
|
||||
"large": "Large",
|
||||
"leaveShare": "Leave",
|
||||
"linkAddFailed": "Failed to add link",
|
||||
"linkAdded": "Link added",
|
||||
"linkMetadataFailed": "Could not fetch link metadata",
|
||||
"listItem": "List item",
|
||||
"makeCopy": "Make a copy",
|
||||
"invalidDateTime": "Date ou heure invalide",
|
||||
"invalidFileType": "Type de fichier invalide : {fileName}. Seuls JPEG, PNG, GIF et WebP sont autorisés.",
|
||||
"itemOrMediaRequired": "Veuillez ajouter au moins un élément ou média",
|
||||
"large": "Grande",
|
||||
"leaveShare": "Quitter",
|
||||
"linkAddFailed": "Échec de l'ajout du lien",
|
||||
"linkAdded": "Lien ajouté",
|
||||
"linkMetadataFailed": "Impossible de récupérer les métadonnées du lien",
|
||||
"listItem": "Élément de liste",
|
||||
"makeCopy": "Faire une copie",
|
||||
"markdown": "Markdown",
|
||||
"markdownMode": "Markdown",
|
||||
"markdownOff": "Markdown OFF",
|
||||
"markdownOn": "Markdown ON",
|
||||
"markdownPlaceholder": "Take a note... (Markdown supported)",
|
||||
"medium": "Medium",
|
||||
"markdownOff": "Markdown DÉSACTIVÉ",
|
||||
"markdownOn": "Markdown ACTIVÉ",
|
||||
"markdownPlaceholder": "Prenez une note... (Markdown supporté)",
|
||||
"medium": "Moyenne",
|
||||
"more": "Plus d'options",
|
||||
"moreOptions": "More options",
|
||||
"moreOptions": "Plus d'options",
|
||||
"moveFailed": "Échec du déplacement de la note. Veuillez réessayer.",
|
||||
"newChecklist": "New checklist",
|
||||
"newNote": "New note",
|
||||
"noContent": "No content",
|
||||
"noNotes": "No notes",
|
||||
"noNotesFound": "No notes found",
|
||||
"noteCreateFailed": "Failed to create note",
|
||||
"noteCreated": "Note created successfully",
|
||||
"others": "Others",
|
||||
"pin": "Pin",
|
||||
"pinned": "Pinned",
|
||||
"newChecklist": "Nouvelle checklist",
|
||||
"newNote": "Nouvelle note",
|
||||
"noContent": "Pas de contenu",
|
||||
"noNotes": "Aucune note",
|
||||
"noNotesFound": "Aucune note trouvée",
|
||||
"noteCreateFailed": "Échec de la création de la note",
|
||||
"noteCreated": "Note créée avec succès",
|
||||
"others": "Autres",
|
||||
"pin": "Épingler",
|
||||
"pinned": "Épinglées",
|
||||
"pinnedNotes": "Notes épinglées",
|
||||
"placeholder": "Take a note...",
|
||||
"preview": "Preview",
|
||||
"readOnly": "Read Only",
|
||||
"placeholder": "Prenez une note...",
|
||||
"preview": "Aperçu",
|
||||
"readOnly": "Lecture seule",
|
||||
"recent": "Récent",
|
||||
"redo": "Redo (Ctrl+Y)",
|
||||
"redo": "Rétablir (Ctrl+Y)",
|
||||
"redoShortcut": "Rétablir (Ctrl+Y)",
|
||||
"remindMe": "Remind me",
|
||||
"reminderDateTimeRequired": "Please enter date and time",
|
||||
"reminderMustBeFuture": "Reminder must be in the future",
|
||||
"reminderPastError": "Reminder must be in the future",
|
||||
"reminderRemoved": "Reminder removed",
|
||||
"reminderSet": "Reminder set for {datetime}",
|
||||
"remindMe": "Me rappeler",
|
||||
"reminderDateTimeRequired": "Veuillez entrer la date et l'heure",
|
||||
"reminderMustBeFuture": "Le rappel doit être dans le futur",
|
||||
"reminderPastError": "Le rappel doit être dans le futur",
|
||||
"reminderRemoved": "Rappel supprimé",
|
||||
"reminderSet": "Rappel défini pour {datetime}",
|
||||
"remove": "Supprimer",
|
||||
"saving": "Saving...",
|
||||
"setReminder": "Set reminder",
|
||||
"setReminderButton": "Set Reminder",
|
||||
"share": "Share",
|
||||
"shareWithCollaborators": "Share with collaborators",
|
||||
"sharedBy": "Shared by",
|
||||
"sharedReadOnly": "This note is shared with you in read-only mode",
|
||||
"saving": "Enregistrement...",
|
||||
"setReminder": "Définir un rappel",
|
||||
"setReminderButton": "Définir un rappel",
|
||||
"share": "Partager",
|
||||
"shareWithCollaborators": "Partager avec les collaborateurs",
|
||||
"sharedBy": "Partagé par",
|
||||
"sharedReadOnly": "Cette note est partagée avec vous en lecture seule",
|
||||
"shortenFailed": "Échec du raccourcissement du texte",
|
||||
"showCollaborators": "Show collaborators",
|
||||
"size": "Size",
|
||||
"small": "Small",
|
||||
"takeNote": "Take a note...",
|
||||
"takeNoteMarkdown": "Take a note... (Markdown supported)",
|
||||
"time": "Time",
|
||||
"showCollaborators": "Voir les collaborateurs",
|
||||
"size": "Taille",
|
||||
"small": "Petite",
|
||||
"takeNote": "Prenez une note...",
|
||||
"takeNoteMarkdown": "Prenez une note... (Markdown supporté)",
|
||||
"time": "Heure",
|
||||
"title": "Notes",
|
||||
"titlePlaceholder": "Title",
|
||||
"titlePlaceholder": "Titre",
|
||||
"transformFailed": "Échec de la transformation du texte",
|
||||
"unarchive": "Unarchive",
|
||||
"undo": "Undo (Ctrl+Z)",
|
||||
"unarchive": "Désarchiver",
|
||||
"undo": "Annuler (Ctrl+Z)",
|
||||
"undoShortcut": "Annuler (Ctrl+Z)",
|
||||
"unpin": "Unpin",
|
||||
"unpin": "Désépingler",
|
||||
"unpinned": "Désépinglées",
|
||||
"untitled": "Untitled",
|
||||
"untitled": "Sans titre",
|
||||
"uploadFailed": "Échec du téléchargement",
|
||||
"view": "View Note"
|
||||
"view": "Voir la note"
|
||||
},
|
||||
"pagination": {
|
||||
"next": "→",
|
||||
@@ -842,37 +879,37 @@
|
||||
"searching": "Recherche en cours..."
|
||||
},
|
||||
"settings": {
|
||||
"about": "About",
|
||||
"account": "Account",
|
||||
"appearance": "Appearance",
|
||||
"cleanTags": "Clean Orphan Tags",
|
||||
"cleanTagsDescription": "Remove tags that are no longer used by any notes",
|
||||
"description": "Manage your settings and preferences",
|
||||
"language": "Language",
|
||||
"about": "À propos",
|
||||
"account": "Compte",
|
||||
"appearance": "Apparence",
|
||||
"cleanTags": "Nettoyer les étiquettes orphelines",
|
||||
"cleanTagsDescription": "Supprimer les étiquettes qui ne sont plus utilisées par aucune note",
|
||||
"description": "Gérez vos paramètres et préférences",
|
||||
"language": "Langue",
|
||||
"languageAuto": "Langue définie sur Auto",
|
||||
"maintenance": "Maintenance",
|
||||
"maintenanceDescription": "Tools to maintain your database health",
|
||||
"maintenanceDescription": "Outils pour maintenir la santé de votre base de données",
|
||||
"notifications": "Notifications",
|
||||
"privacy": "Privacy",
|
||||
"privacy": "Confidentialité",
|
||||
"profile": "Profil",
|
||||
"searchNoResults": "Aucun paramètre trouvé",
|
||||
"security": "Security",
|
||||
"selectLanguage": "Select language",
|
||||
"semanticIndexing": "Semantic Indexing",
|
||||
"semanticIndexingDescription": "Generate vectors for all notes to enable intent-based search",
|
||||
"settingsError": "Error saving settings",
|
||||
"settingsSaved": "Settings saved",
|
||||
"theme": "Theme",
|
||||
"themeDark": "Dark",
|
||||
"themeLight": "Light",
|
||||
"themeSystem": "System",
|
||||
"title": "Settings",
|
||||
"security": "Sécurité",
|
||||
"selectLanguage": "Sélectionner une langue",
|
||||
"semanticIndexing": "Indexation sémantique",
|
||||
"semanticIndexingDescription": "Générer des vecteurs pour toutes les notes afin de permettre la recherche par intention",
|
||||
"settingsError": "Erreur lors de la sauvegarde des paramètres",
|
||||
"settingsSaved": "Paramètres enregistrés",
|
||||
"theme": "Thème",
|
||||
"themeDark": "Sombre",
|
||||
"themeLight": "Clair",
|
||||
"themeSystem": "Système",
|
||||
"title": "Paramètres",
|
||||
"version": "Version"
|
||||
},
|
||||
"sidebar": {
|
||||
"archive": "Archives",
|
||||
"editLabels": "Modifier les libellés",
|
||||
"labels": "Libellés",
|
||||
"editLabels": "Modifier les étiquettes",
|
||||
"labels": "Étiquettes",
|
||||
"notes": "Notes",
|
||||
"reminders": "Rappels",
|
||||
"trash": "Corbeille"
|
||||
@@ -956,4 +993,4 @@
|
||||
"expand": "Développer",
|
||||
"open": "Ouvrir"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user