i18n: complete audit — 55 new keys, all hardcoded strings converted to t()
CI / lint (push) Failing after 22s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after 9s

- 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:
2026-06-18 22:49:19 -04:00
parent 01dec0a0ec
commit 659c227e6a
17 changed files with 163 additions and 61 deletions
+53 -2
View File
@@ -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"
}
+53 -2
View File
@@ -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"
}