feat: complete i18n coverage — all dynamic content translated
CI / test (push) Has been cancelled
CI / security (push) Has been cancelled
CI / build (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / lint (push) Has been cancelled

All remaining French strings converted to t() calls:
- ui.js: create/delete file/dir modals, rename/copy/bookmark toasts
- palette.js: confirm dialogs, error toasts
- search.js: result summary text with interpolation
- config.js: about/diagnostics section labels
- auth.js: admin panel title
- viewer.js: forge popout labels
- dashboard.js: shared widget buttons, date locale-aware

57 new locale keys for dynamic content (modals, toasts, admin, about)
Total: 597 keys per language

All 26 modules validated — 163 exports, 0 errors
This commit is contained in:
2026-06-18 14:18:25 -04:00
parent f91a386566
commit 0403be4516
12 changed files with 796 additions and 147 deletions
+74 -27
View File
@@ -1,6 +1,8 @@
{
"_meta": { "locale": "en", "name": "English" },
"_meta": {
"locale": "en",
"name": "English"
},
"header.logo": "ObsiGate",
"header.search_placeholder": "Search all vaults...",
"header.config": "Settings",
@@ -26,7 +28,6 @@
"header.sidebar_toggle": "Toggle sidebar",
"header.menu_toggle": "Menu",
"header.quick_help": "Quick Help",
"sidebar.filter_placeholder": "Filter files...",
"sidebar.tab_vaults": "Vaults",
"sidebar.tab_tags": "Tags",
@@ -49,7 +50,6 @@
"sidebar.vault_specific": "Specific vault",
"sidebar.sidebar_dropdown": "Vault context menu",
"sidebar.sidebar_filtering": "Sidebar filtering",
"search.operators_help": "Operators: tag:word, vault:name, title:word, path:word, ext:md",
"search.results_count": "{count} result(s)",
"search.no_results": "No results found",
@@ -80,7 +80,6 @@
"search.advanced_operators": "Advanced operators",
"search.include_placeholder": "Include: **/*.md, notes/**",
"search.exclude_placeholder": "Exclude: vendor/*, *.lock",
"viewer.source": "Source",
"viewer.markdown": "Markdown",
"viewer.edit": "Edit",
@@ -108,7 +107,6 @@
"viewer.breadcrumb_home": "Home",
"viewer.unsupported_file": "This file is binary and cannot be displayed",
"viewer.click_to_download": "Click to download",
"editor.save": "Save",
"editor.cancel": "Cancel",
"editor.saved": "Saved ✓",
@@ -122,7 +120,6 @@
"editor.close": "Close",
"editor.forge_help": "Forge editor help",
"editor.forge_close_editor": "Close editor / modal",
"ai.toolbar_edit": "Edit",
"ai.toolbar_tone": "Tone",
"ai.toolbar_translate": "Translate",
@@ -150,7 +147,6 @@
"ai.done": "AI: text processed",
"ai.completion_added": "AI: completion added",
"ai.rewrite_done": "AI: text rewritten",
"dashboard.welcome": "Welcome to ObsiGate",
"dashboard.stats": "Statistics",
"dashboard.bookmarks": "Bookmarks",
@@ -165,7 +161,6 @@
"dashboard.no_recent": "No recent files",
"dashboard.no_shares": "No shared documents",
"dashboard.shares": "Shares",
"config.title": "Settings",
"config.section_search": "Search settings",
"config.section_perf": "Performance",
@@ -241,7 +236,6 @@
"config.hidden_include_label": "Include hidden files",
"config.hidden_whitelist_label": "Whitelist (comma-separated)",
"config.save_hidden": "Save",
"help.title": "ObsiGate Help",
"help.shortcuts": "Keyboard shortcuts",
"help.search_operators": "Search operators",
@@ -405,7 +399,6 @@
"help.footer": "© 2026 — Made with ☕, 🎧 and a few",
"help.nights": "sleepless nights 😅",
"help.powered_by": "Powered by Python, FastAPI, vanilla JS, CodeMirror, Mermaid, Lucide Icons and ❤️ for Obsidian.",
"auth.login_title": "Secure access to your vaults",
"auth.username": "Username",
"auth.password": "Password",
@@ -415,7 +408,6 @@
"auth.network_error": "Network error — check your connection",
"auth.logged_out": "Signed out",
"auth.session_expired": "Session expired, please sign in again",
"share.title": "Public share",
"share.create": "Create share link",
"share.copy_link": "Copy link",
@@ -423,7 +415,6 @@
"share.expires": "Expires on",
"share.never": "Never",
"share.copied": "Link copied!",
"backup.title": "Backups",
"backup.restore": "Restore",
"backup.delete": "Delete",
@@ -432,7 +423,6 @@
"backup.no_backups": "No backups",
"backup.preview": "Preview",
"backup.version": "Version from {date}",
"graph.title": "Graph",
"graph.fullscreen": "Full screen",
"graph.export_png": "Export PNG",
@@ -444,31 +434,26 @@
"graph.forward": "Forward",
"graph.parent": "Parent",
"graph.loading": "Building graph...",
"mermaid.code": "Code",
"mermaid.preview": "Preview",
"mermaid.copy_svg": "Copy SVG",
"mermaid.download_png": "Download PNG",
"mermaid.zoom_in": "Zoom in",
"mermaid.zoom_out": "Zoom out",
"palette.search_files": "Search files...",
"palette.search_commands": "Type a command...",
"palette.mode_files": "Files",
"palette.mode_commands": "Commands",
"offline.status": "Offline",
"offline.pending": "{count} pending change(s)",
"offline.sync_now": "Sync now",
"offline.conflict_title": "Sync conflict",
"offline.keep_local": "Keep local version",
"offline.keep_server": "Keep server version",
"conflict.resolve_local": "Keep local version",
"conflict.resolve_conflict": "Keep conflict version",
"conflict.no_conflicts": "No conflicts detected",
"conflict.resolved": "Conflict resolved",
"common.loading": "Loading...",
"common.error": "Error",
"common.ok": "OK",
@@ -494,7 +479,6 @@
"common.all": "All",
"common.none": "None",
"common.actions": "Actions",
"toast.saved": "Saved",
"toast.deleted": "Deleted",
"toast.created": "Created",
@@ -526,16 +510,13 @@
"toast.conflict_resolved": "Conflict resolved",
"toast.search_saved": "Search saved",
"toast.hidden_saved": "✓ Settings saved",
"confirm.logout": "Are you sure you want to sign out?",
"confirm.delete_file": "Permanently delete this file?",
"confirm.delete_dir": "Delete this folder and all its contents?",
"pwa.install_title": "Install ObsiGate",
"pwa.install_desc": "Install this app on your device for quick access.",
"pwa.install_button": "Install",
"pwa.dismiss": "Later",
"file.new_file": "New file",
"file.new_folder": "New folder",
"file.rename": "Rename",
@@ -543,13 +524,79 @@
"file.copy_path": "Copy path",
"file.properties": "Properties",
"file.graph_view": "Graph view",
"vault.add_dynamic": "Add vault",
"vault.remove_dynamic": "Remove vault",
"vault.reindex": "Reindex vault",
"theme.light": "Light",
"theme.dark": "Dark",
"theme.change": "Change theme",
"theme.title": "Theme"
}
"theme.title": "Theme",
"modal.create_file": "Create a file",
"modal.file_name": "File name",
"modal.file_type": "File type",
"modal.in_folder": "In: {path}",
"modal.create_btn": "Create",
"modal.creating": "Creating...",
"modal.delete_file": "Delete file",
"modal.delete_dir": "Delete folder",
"modal.delete_warning": "Warning!",
"modal.delete_irreversible": "This action is irreversible.",
"modal.delete_dir_warning": "All files and subfolders will be permanently deleted.",
"modal.file_to_delete": "File to delete:",
"modal.dir_to_delete": "Folder to delete:",
"modal.delete_permanently": "Delete permanently",
"admin.title": "Administration — Users",
"admin.new_user": "+ New user",
"admin.close": "Close",
"about.section_app": "Application",
"about.section_env": "Environment",
"about.section_components": "Components",
"about.name": "Name",
"about.version": "Version",
"about.api_version": "API version",
"about.status": "Status",
"about.vaults_configured": "Configured vaults",
"about.files_indexed": "Indexed files",
"about.browser": "Browser",
"about.platform": "Platform",
"about.language": "Language",
"about.backend": "Backend",
"about.markdown_renderer": "Markdown rendering",
"about.file_watcher": "File watching",
"about.frontend": "Frontend",
"about.icons": "Icons",
"about.syntax_highlight": "Syntax highlighting",
"about.editor": "Editor",
"forge.title_placeholder": "Title...",
"forge.popout": "Open in new window",
"forge.popout_label": "pop-out",
"dashboard.views": "{count} view(s)",
"dashboard.expires": "Expires {date}",
"dashboard.copy_btn": "Copy",
"dashboard.open_btn": "Open",
"search.results_for": "{count} result(s) for \"{query}\"",
"search.results_filtered": "{count} result(s) for \"{query}\" with filters",
"search.files_filtered": "{count} file(s) with filters",
"search.query_time": "({time} ms)",
"toast.file_created": "File \"{name}\" created",
"toast.dir_created": "Folder \"{name}\" created",
"toast.dir_deleted": "Folder deleted ({count} files)",
"toast.path_copied": "Path copied: {path}",
"toast.create_error": "Creation error",
"toast.rename_error": "Rename error",
"toast.delete_error": "Deletion error",
"toast.copy_error": "Copy error",
"toast.bookmark_added": "Added to bookmarks",
"toast.bookmark_removed": "Removed from bookmarks",
"toast.dir_saved_search": "Folder saved to searches",
"toast.no_open_file": "No file open",
"toast.viewer_error": "Viewer loading error",
"confirm.delete_file_named": "Delete file \"{path}\"?",
"confirm.delete_dir_named": "Delete \"{path}\" and ALL its contents?",
"tree.new_file": "New file",
"tree.new_folder": "New folder",
"tree.vault_home": "Vault home",
"toc.title": "ON THIS PAGE",
"toc.hide_panel": "Hide panel",
"toc.no_headings": "No headings in this document"
}
+74 -27
View File
@@ -1,6 +1,8 @@
{
"_meta": { "locale": "fr", "name": "Français" },
"_meta": {
"locale": "fr",
"name": "Français"
},
"header.logo": "ObsiGate",
"header.search_placeholder": "Rechercher dans toutes les vaults...",
"header.config": "Configuration",
@@ -26,7 +28,6 @@
"header.sidebar_toggle": "Afficher/Masquer la sidebar",
"header.menu_toggle": "Menu",
"header.quick_help": "Raccourcis & Astuces",
"sidebar.filter_placeholder": "Filtrer fichiers...",
"sidebar.tab_vaults": "Vaults",
"sidebar.tab_tags": "Tags",
@@ -49,7 +50,6 @@
"sidebar.vault_specific": "Vault spécifique",
"sidebar.sidebar_dropdown": "Menu contextuel vault",
"sidebar.sidebar_filtering": "Filtrage de la sidebar",
"search.operators_help": "Opérateurs : tag:mot, vault:nom, title:mot, path:mot, ext:md",
"search.results_count": "{count} résultat(s)",
"search.no_results": "Aucun résultat trouvé",
@@ -80,7 +80,6 @@
"search.advanced_operators": "Opérateurs avancés",
"search.include_placeholder": "Inclure: **/*.md, notes/**",
"search.exclude_placeholder": "Exclure: vendor/*, *.lock",
"viewer.source": "Source",
"viewer.markdown": "Markdown",
"viewer.edit": "Éditer",
@@ -108,7 +107,6 @@
"viewer.breadcrumb_home": "Accueil",
"viewer.unsupported_file": "Ce fichier est binaire et ne peut pas être affiché",
"viewer.click_to_download": "Cliquez pour le télécharger",
"editor.save": "Enregistrer",
"editor.cancel": "Annuler",
"editor.saved": "Sauvegardé ✓",
@@ -122,7 +120,6 @@
"editor.close": "Fermer",
"editor.forge_help": "Aide de l'éditeur Forge",
"editor.forge_close_editor": "Fermer l'éditeur / modale",
"ai.toolbar_edit": "Éditer",
"ai.toolbar_tone": "Ton",
"ai.toolbar_translate": "Traduire",
@@ -150,7 +147,6 @@
"ai.done": "AI: texte traité",
"ai.completion_added": "AI: complétion ajoutée",
"ai.rewrite_done": "AI: texte réécrit",
"dashboard.welcome": "Bienvenue dans ObsiGate",
"dashboard.stats": "Statistiques",
"dashboard.bookmarks": "Favoris",
@@ -165,7 +161,6 @@
"dashboard.no_recent": "Aucun fichier récent",
"dashboard.no_shares": "Aucun document partagé",
"dashboard.shares": "Partages",
"config.title": "Configuration",
"config.section_search": "Paramètres de recherche",
"config.section_perf": "Performance",
@@ -241,7 +236,6 @@
"config.hidden_include_label": "Inclure les fichiers cachés",
"config.hidden_whitelist_label": "Whitelist (séparés par des virgules)",
"config.save_hidden": "Enregistrer",
"help.title": "Aide ObsiGate",
"help.shortcuts": "Raccourcis clavier",
"help.search_operators": "Opérateurs de recherche",
@@ -405,7 +399,6 @@
"help.footer": "© 2026 — Fait avec ☕, 🎧 et quelques",
"help.nights": "nuits blanches 😅",
"help.powered_by": "Propulsé par Python, FastAPI, vanilla JS, CodeMirror, Mermaid, Lucide Icons et ❤️ pour Obsidian.",
"auth.login_title": "Accès sécurisé à vos vaults",
"auth.username": "Nom d'utilisateur",
"auth.password": "Mot de passe",
@@ -415,7 +408,6 @@
"auth.network_error": "Erreur réseau — vérifiez votre connexion",
"auth.logged_out": "Déconnecté",
"auth.session_expired": "Session expirée, veuillez vous reconnecter",
"share.title": "Partage public",
"share.create": "Créer un lien de partage",
"share.copy_link": "Copier le lien",
@@ -423,7 +415,6 @@
"share.expires": "Expire le",
"share.never": "Jamais",
"share.copied": "Lien copié !",
"backup.title": "Sauvegardes",
"backup.restore": "Restaurer",
"backup.delete": "Supprimer",
@@ -432,7 +423,6 @@
"backup.no_backups": "Aucune sauvegarde",
"backup.preview": "Aperçu",
"backup.version": "Version du {date}",
"graph.title": "Graphe",
"graph.fullscreen": "Plein écran",
"graph.export_png": "Exporter PNG",
@@ -444,31 +434,26 @@
"graph.forward": "Avancer",
"graph.parent": "Parent",
"graph.loading": "Construction du graphe...",
"mermaid.code": "Code",
"mermaid.preview": "Aperçu",
"mermaid.copy_svg": "Copier SVG",
"mermaid.download_png": "Télécharger PNG",
"mermaid.zoom_in": "Zoom avant",
"mermaid.zoom_out": "Zoom arrière",
"palette.search_files": "Rechercher un fichier...",
"palette.search_commands": "Tapez une commande...",
"palette.mode_files": "Fichiers",
"palette.mode_commands": "Commandes",
"offline.status": "Hors-ligne",
"offline.pending": "{count} modification(s) en attente",
"offline.sync_now": "Synchroniser maintenant",
"offline.conflict_title": "Conflit de synchronisation",
"offline.keep_local": "Garder version locale",
"offline.keep_server": "Garder version serveur",
"conflict.resolve_local": "Garder version locale",
"conflict.resolve_conflict": "Garder version conflit",
"conflict.no_conflicts": "Aucun conflit détecté",
"conflict.resolved": "Conflit résolu",
"common.loading": "Chargement...",
"common.error": "Erreur",
"common.ok": "OK",
@@ -494,7 +479,6 @@
"common.all": "Tous",
"common.none": "Aucun",
"common.actions": "Actions",
"toast.saved": "Sauvegardé",
"toast.deleted": "Supprimé",
"toast.created": "Créé",
@@ -526,16 +510,13 @@
"toast.conflict_resolved": "Conflit résolu",
"toast.search_saved": "Recherche sauvegardée",
"toast.hidden_saved": "✓ Paramètres sauvegardés",
"confirm.logout": "Voulez-vous vraiment vous déconnecter ?",
"confirm.delete_file": "Supprimer définitivement ce fichier ?",
"confirm.delete_dir": "Supprimer ce dossier et tout son contenu ?",
"pwa.install_title": "Installer ObsiGate",
"pwa.install_desc": "Installez cette application sur votre appareil pour un accès rapide.",
"pwa.install_button": "Installer",
"pwa.dismiss": "Plus tard",
"file.new_file": "Nouveau fichier",
"file.new_folder": "Nouveau dossier",
"file.rename": "Renommer",
@@ -543,13 +524,79 @@
"file.copy_path": "Copier le chemin",
"file.properties": "Propriétés",
"file.graph_view": "Vue graphe",
"vault.add_dynamic": "Ajouter une vault",
"vault.remove_dynamic": "Retirer la vault",
"vault.reindex": "Réindexer la vault",
"theme.light": "Clair",
"theme.dark": "Sombre",
"theme.change": "Changer le thème",
"theme.title": "Thème"
}
"theme.title": "Thème",
"modal.create_file": "Créer un fichier",
"modal.file_name": "Nom du fichier",
"modal.file_type": "Type de fichier",
"modal.in_folder": "Dans: {path}",
"modal.create_btn": "Créer",
"modal.creating": "Création...",
"modal.delete_file": "Supprimer le fichier",
"modal.delete_dir": "Supprimer le dossier",
"modal.delete_warning": "Attention !",
"modal.delete_irreversible": "Cette action est irréversible.",
"modal.delete_dir_warning": "Tous les fichiers et sous-dossiers seront supprimés définitivement.",
"modal.file_to_delete": "Fichier à supprimer:",
"modal.dir_to_delete": "Dossier à supprimer:",
"modal.delete_permanently": "Supprimer définitivement",
"admin.title": "Administration — Utilisateurs",
"admin.new_user": "+ Nouvel utilisateur",
"admin.close": "Fermer",
"about.section_app": "Application",
"about.section_env": "Environnement",
"about.section_components": "Composants",
"about.name": "Nom",
"about.version": "Version",
"about.api_version": "Version API",
"about.status": "Statut",
"about.vaults_configured": "Vaults configurés",
"about.files_indexed": "Fichiers indexés",
"about.browser": "Navigateur",
"about.platform": "Plateforme",
"about.language": "Langue",
"about.backend": "Backend",
"about.markdown_renderer": "Rendu Markdown",
"about.file_watcher": "Surveillance fichiers",
"about.frontend": "Frontend",
"about.icons": "Icônes",
"about.syntax_highlight": "Coloration syntaxe",
"about.editor": "Éditeur",
"forge.title_placeholder": "Titre...",
"forge.popout": "Ouvrir dans une nouvelle fenêtre",
"forge.popout_label": "pop-out",
"dashboard.views": "{count} vue(s)",
"dashboard.expires": "Expire le {date}",
"dashboard.copy_btn": "Copier",
"dashboard.open_btn": "Ouvrir",
"search.results_for": "{count} résultat(s) pour \"{query}\"",
"search.results_filtered": "{count} résultat(s) pour \"{query}\" avec filtres",
"search.files_filtered": "{count} fichier(s) avec filtres",
"search.query_time": "({time} ms)",
"toast.file_created": "Fichier \"{name}\" créé",
"toast.dir_created": "Dossier \"{name}\" créé",
"toast.dir_deleted": "Dossier supprimé ({count} fichiers)",
"toast.path_copied": "Chemin copié : {path}",
"toast.create_error": "Erreur lors de la création",
"toast.rename_error": "Erreur lors du renommage",
"toast.delete_error": "Erreur lors de la suppression",
"toast.copy_error": "Erreur lors de la copie",
"toast.bookmark_added": "Ajouté aux favoris",
"toast.bookmark_removed": "Retiré des favoris",
"toast.dir_saved_search": "Répertoire sauvegardé dans les recherches",
"toast.no_open_file": "Aucun fichier ouvert",
"toast.viewer_error": "Erreur lors du chargement du viewer",
"confirm.delete_file_named": "Supprimer le fichier \"{path}\" ?",
"confirm.delete_dir_named": "Supprimer \"{path}\" et TOUT son contenu ?",
"tree.new_file": "Nouveau fichier",
"tree.new_folder": "Nouveau dossier",
"tree.vault_home": "Accueil du vault",
"toc.title": "SUR CETTE PAGE",
"toc.hide_panel": "Masquer le panneau",
"toc.no_headings": "Aucun titre dans ce document"
}