i18n: complete audit — 55 new keys, all hardcoded strings converted to t()
- Added 4 missing keys: button.cancel, toast.dir_renamed, toast.file_deleted, toast.file_renamed
- Replaced 41 hardcoded showToast() strings with t() calls across 13 JS files
- Replaced 10 hardcoded textContent/title/innerHTML strings with t() calls
- Fixed theme labels: Sombre/Clair -> t('theme.dark')/t('theme.light')
- Fixed vault selector: Tous les vaults -> t('help.all_vaults')
- Both locale files: 983 -> 1032 keys, perfectly matched
- Bidirectional EN<->FR switching verified in browser
This commit is contained in:
@@ -984,5 +984,56 @@
|
||||
"help.graph_nodes": "Nodes",
|
||||
"help.graph_info": "Info panel",
|
||||
"help.graph_export": "Export PNG",
|
||||
"help.graph_context": "Context menu"
|
||||
}
|
||||
"help.graph_context": "Context menu",
|
||||
"ai.completion_added": "AI: completion added",
|
||||
"ai.invalid_api_key": "AI: invalid API key. Check DEEPSEEK_API_KEY in .env",
|
||||
"ai.processing": "⏳ AI: processing...",
|
||||
"ai.quota_exceeded": "AI: quota exceeded or payment required",
|
||||
"ai.select_text": "AI: select text to process",
|
||||
"ai.text_processed": "AI: text processed ✓",
|
||||
"ai.text_rewritten": "AI: text rewritten",
|
||||
"auth.cannot_delete_self": "Cannot delete your own account",
|
||||
"auth.user_deleted": "User deleted",
|
||||
"backup.file_restored": "File restored successfully",
|
||||
"backup.restore_failed": "Restore failed",
|
||||
"backup.select_to_restore": "Select a backup to restore",
|
||||
"backup.timestamp_not_found": "Cannot find backup timestamp",
|
||||
"button.cancel": "Cancel",
|
||||
"config.api_keys_saved": "API keys saved",
|
||||
"config.link_copied": "Link copied!",
|
||||
"config.link_created": "Link created!",
|
||||
"config.no_keys": "No keys to save",
|
||||
"config.reindex_error": "Reindex error",
|
||||
"config.save_error": "Save error",
|
||||
"config.settings_saved": "✓ Settings saved",
|
||||
"config.share_revoked": "Share revoked",
|
||||
"config.url_required": "URL required",
|
||||
"dashboard.conflict_resolved": "Conflict resolved",
|
||||
"dashboard.pin_error": "Pin error",
|
||||
"dragdrop.cross_vault_unsupported": "Cross-vault moves are not supported",
|
||||
"dragdrop.move_failed": "Move failed",
|
||||
"error.initialization": "Initialization error",
|
||||
"offline.all_synced": "All changes synced",
|
||||
"offline.mode_offline": "Offline mode — changes will sync when back online",
|
||||
"offline.reconnected": "Connection restored — synchronizing...",
|
||||
"search.saved": "Search saved",
|
||||
"sync.index_reloaded": "Full index reloaded",
|
||||
"sync.install_success": "ObsiGate installed successfully!",
|
||||
"toast.dir_renamed": "Directory renamed",
|
||||
"toast.file_deleted": "File deleted",
|
||||
"toast.file_renamed": "File renamed",
|
||||
"ui.cannot_rename": "Cannot rename this item",
|
||||
"ui.element_not_found": "Element not found in tree",
|
||||
"viewer.copy_error": "Copy error",
|
||||
"viewer.loaded_from_cache": "File loaded from offline cache",
|
||||
"ai.not_configured": "⚠️ AI not configured — add DEEPSEEK_API_KEY, OPENROUTER_API_KEY or GEMINI_API_KEY in .env",
|
||||
"ai.inline_completion_title": "AI Inline Completion (Ctrl+J) — Auto-complete text",
|
||||
"ai.rewrite": "💬 Rewrite",
|
||||
"ai.rewrite_title": "Rewrite text according to your instructions",
|
||||
"auth.logout_title": "Sign out",
|
||||
"config.reindexing": "Reindexing...",
|
||||
"config.force_reindex": "Force reindex",
|
||||
"search.previous": "← Previous",
|
||||
"viewer.copied": "Copied!",
|
||||
"viewer.shared_doc_title": "Shared document — click to manage"
|
||||
}
|
||||
|
||||
@@ -984,5 +984,56 @@
|
||||
"help.graph_nodes": "Nœuds",
|
||||
"help.graph_info": "Panneau d'info",
|
||||
"help.graph_export": "Export PNG",
|
||||
"help.graph_context": "Menu contextuel"
|
||||
}
|
||||
"help.graph_context": "Menu contextuel",
|
||||
"ai.completion_added": "AI: complétion ajoutée",
|
||||
"ai.invalid_api_key": "AI: clé API invalide. Vérifiez DEEPSEEK_API_KEY dans .env",
|
||||
"ai.processing": "⏳ AI: traitement en cours...",
|
||||
"ai.quota_exceeded": "AI: quota dépassé ou paiement requis",
|
||||
"ai.select_text": "AI: sélectionnez du texte à traiter",
|
||||
"ai.text_processed": "AI: texte traité ✓",
|
||||
"ai.text_rewritten": "AI: texte réécrit",
|
||||
"auth.cannot_delete_self": "Impossible de supprimer son propre compte",
|
||||
"auth.user_deleted": "Utilisateur supprimé",
|
||||
"backup.file_restored": "Fichier restauré avec succès",
|
||||
"backup.restore_failed": "Échec de la restauration",
|
||||
"backup.select_to_restore": "Sélectionnez un backup à restaurer",
|
||||
"backup.timestamp_not_found": "Impossible de trouver le timestamp du backup",
|
||||
"button.cancel": "Annuler",
|
||||
"config.api_keys_saved": "Clés API sauvegardées",
|
||||
"config.link_copied": "Lien copié !",
|
||||
"config.link_created": "Lien créé !",
|
||||
"config.no_keys": "Aucune clé à sauvegarder",
|
||||
"config.reindex_error": "Erreur de réindexation",
|
||||
"config.save_error": "Erreur de sauvegarde",
|
||||
"config.settings_saved": "✓ Paramètres sauvegardés",
|
||||
"config.share_revoked": "Partage révoqué",
|
||||
"config.url_required": "URL requise",
|
||||
"dashboard.conflict_resolved": "Conflit résolu",
|
||||
"dashboard.pin_error": "Erreur lors de l'épinglage",
|
||||
"dragdrop.cross_vault_unsupported": "Cross-vault moves are not supported",
|
||||
"dragdrop.move_failed": "Move failed",
|
||||
"error.initialization": "Erreur lors de l'initialisation",
|
||||
"offline.all_synced": "Toutes les modifications ont été synchronisées",
|
||||
"offline.mode_offline": "Mode hors-ligne — vos modifications seront synchronisées au retour",
|
||||
"offline.reconnected": "Connexion rétablie — synchronisation en cours...",
|
||||
"search.saved": "Recherche sauvegardée",
|
||||
"sync.index_reloaded": "Index complet rechargé",
|
||||
"sync.install_success": "ObsiGate installé avec succès !",
|
||||
"toast.dir_renamed": "Dossier renommé",
|
||||
"toast.file_deleted": "Fichier supprimé",
|
||||
"toast.file_renamed": "Fichier renommé",
|
||||
"ui.cannot_rename": "Impossible de renommer cet élément",
|
||||
"ui.element_not_found": "Élément introuvable dans l'arborescence",
|
||||
"viewer.copy_error": "Erreur lors de la copie",
|
||||
"viewer.loaded_from_cache": "Fichier chargé depuis le cache hors-ligne",
|
||||
"ai.not_configured": "⚠️ AI non configuré — ajouter DEEPSEEK_API_KEY, OPENROUTER_API_KEY ou GEMINI_API_KEY dans .env",
|
||||
"ai.inline_completion_title": "AI Inline Completion (Ctrl+J) — Complète le texte automatiquement",
|
||||
"ai.rewrite": "💬 Réécrire",
|
||||
"ai.rewrite_title": "Réécrit le texte selon vos instructions",
|
||||
"auth.logout_title": "Déconnexion",
|
||||
"config.reindexing": "Réindexation...",
|
||||
"config.force_reindex": "Forcer réindexation",
|
||||
"search.previous": "← Précédent",
|
||||
"viewer.copied": "Copié !",
|
||||
"viewer.shared_doc_title": "Document partagé — cliquer pour gérer"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user