Replace hardcoded French strings with i18n calls
CI / lint (push) Failing after 1m28s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after 17s

Initialize i18n before auth so t() works when rendering
auth-dependent UI, and build the command palette lazily so
translations are loaded first. Bump service worker cache version.
This commit is contained in:
2026-07-20 20:16:34 -04:00
parent cc22ffe6df
commit 790f97e501
17 changed files with 378 additions and 147 deletions
+139 -37
View File
@@ -104,7 +104,9 @@
"auth.login_title": "Secure access to your vaults",
"auth.logout_title": "Sign out",
"auth.network_error": "Network error — check your connection",
"auth.new_password": "New password (empty = unchanged)",
"auth.password": "Password",
"auth.password_min": "Min. 8 characters",
"auth.remember_me": "Remember me (30 days)",
"auth.session_expired": "Session expired, please sign in again",
"auth.user_deleted": "User deleted",
@@ -201,6 +203,14 @@
"backup.timestamp_not_found": "Cannot find backup timestamp",
"backup.title": "Backups",
"backup.version": "Version from {date}",
"backups.delete_confirm": "Delete this backup?",
"backups.empty": "No backups available for this file.",
"backups.hint": "Backups are created automatically before each modification.",
"backups.loading": "Loading backups...",
"backups.purge_file": "Delete ALL backups of",
"backups.purge_vault": "Delete ALL backups from vault",
"backups.restore_confirm": "to the selected backup version?\nThe current version will be saved.",
"backups.title": "Backups",
"button.cancel": "Cancel",
"common.actions": "Actions",
"common.all": "All",
@@ -225,8 +235,10 @@
"common.previous": "Previous",
"common.refresh": "Refresh",
"common.rename": "Rename",
"common.root": "(root)",
"common.save": "Save",
"common.search": "Search",
"common.unknown": "Unknown",
"common.yes": "Yes",
"config.about": "About",
"config.about_error": "Loading error",
@@ -252,23 +264,25 @@
"config.error_unknown": "Unknown error",
"config.force_reindex": "Force reindex",
"config.hidden_files": "Hidden files",
"config.hidden_files_desc": "Manage display of hidden files and folders.",
"config.hidden_files_desc": "Hide files/folders starting with a dot in the interface (they remain indexed and searchable)",
"config.hidden_files_toggle": "Hide hidden files/folders",
"config.hidden_include_label": "Include hidden files",
"config.hidden_whitelist_label": "Whitelist (comma-separated)",
"config.hint_activer_d_sactiver_la_surveillance_automatique_des": "Activer/désactiver la surveillance automatique des fichiers",
"config.hint_activer_d_sactiver_la_surveillance_automatique_des": "Enable/disable automatic file monitoring",
"config.hint_annuler_la_recherche_apr_s_ce_d_lai_5000_120000_": "Cancel search after this delay (5000-120000)",
"config.hint_contenu_index_par_fichier_10k_1m_r_indexation_requ": "Max content size per file (bytes)",
"config.hint_d_lai_avant_ex_cution_de_la_recherche_100_2000_": "Delay before search execution (100-2000)",
"config.hint_d_lai_avant_traitement_des_changements_group_s_0_5": "Délai avant traitement des changements groupés (0.5-10 secondes)",
"config.hint_d_lai_avant_traitement_des_changements_group_s_0_5": "Delay before processing grouped changes (0.5-10 seconds)",
"config.hint_entre_5_et_100_fichiers_sauvegarde_sur_le_serveur_": "Between 5 and 100 files (stored on server)",
"config.hint_forcer_le_mode_polling_au_lieu_de_inotify_natif_ut": "Forcer le mode polling au lieu de inotify natif (utile si le mode natif ne fonctionne pas)",
"config.hint_intervalle_de_scrutation_en_mode_polling_1_30_seco": "Intervalle de scrutation en mode polling (1-30 secondes)",
"config.hint_multiplicateur_de_pertinence_pour_les_correspondan": "Multiplicateur de pertinence pour les correspondances dans le titre",
"config.hint_nombre_de_r_sultats_affich_s_par_page_10_200_": "Number of results displayed per page (10-200)",
"config.hint_nombre_max_de_tokens_largis_par_pr_fixe_10_200_": "Nombre max de tokens élargis par préfixe (10-200)",
"config.hint_nombre_max_de_tokens_largis_par_pr_fixe_10_200_": "Max expanded tokens per prefix (10-200)",
"config.hint_nombre_maximum_de_versions_backup_conservees_par_f": "Maximum backup versions kept per file (1-50)",
"config.hint_nombre_minimum_de_caract_res_avant_recherche_1_5_": "Minimum characters before search triggers (1-5)",
"config.hint_threads_d_di_s_la_recherche_1_8_": "Threads dédiés à la recherche (1-8)",
"config.hint_threads_d_di_s_la_recherche_1_8_": "Dedicated search threads (1-8)",
"config.just_now": "just now",
"config.lang_hint": "Used by autocomplete and ghost text.",
"config.lang_label": "Preferred language",
"config.link_copied": "Link copied!",
@@ -314,9 +328,9 @@
"config.search_workers": "Search workers",
"config.search_workers_hint": "Dedicated search threads (1-8)",
"config.search_workers_label": "Search workers",
"config.section_a-propos": "📦 À propos",
"config.section_a-propos": "📦 About",
"config.section_about": "About",
"config.section_actions-sur-fichiers": "Actions sur fichiers",
"config.section_actions-sur-fichiers": "File actions",
"config.section_activation": "Activation",
"config.section_affichage": "Affichage",
"config.section_ai": "AI API keys",
@@ -324,56 +338,56 @@
"config.section_astuces-et-bonnes-pratiques": "💡 Astuces et bonnes pratiques",
"config.section_audit-log": "Audit log",
"config.section_authentification": "Authentification",
"config.section_autocompletion": "Autocomplétion",
"config.section_autocompletion": "Autocompletion",
"config.section_backend": "🖥️ Backend Settings",
"config.section_backup-automatique": "Backup automatique",
"config.section_backups": "Backups",
"config.section_barre-d-outils-ai": "Barre d'outils AI",
"config.section_breadcrumb-et-repositionnement": "Breadcrumb et repositionnement",
"config.section_cas-d-usage": "Cas d'usage",
"config.section_cas-d-usage-avances": "Cas d'usage avancés",
"config.section_cas-d-usage-avances": "Advanced use cases",
"config.section_chips-de-filtres-actifs": "Chips de filtres actifs",
"config.section_cles-api-intelligence-artificielle": "🤖 Cles API Intelligence Artificielle",
"config.section_configuration": "Configuration",
"config.section_configuration-avancee": "Configuration avancée",
"config.section_configuration-avancee": "Advanced configuration",
"config.section_construit-avec": "Construit avec",
"config.section_diag": "Diagnostics",
"config.section_diagnostics": "Diagnostics",
"config.section_editeur-codemirror": "Éditeur CodeMirror",
"config.section_editeur-codemirror-6": "Éditeur CodeMirror 6",
"config.section_edition-avancee": "✏️ Édition avancée",
"config.section_edition-avec-codemirror-6": "Édition avec CodeMirror 6",
"config.section_en-tete": "En-tête",
"config.section_evenements-supportes": "Événements supportés",
"config.section_editeur-codemirror": "CodeMirror Editor",
"config.section_editeur-codemirror-6": "CodeMirror 6 Editor",
"config.section_edition-avancee": "✏️ Advanced Editing",
"config.section_edition-avec-codemirror-6": "Editing with CodeMirror 6",
"config.section_en-tete": "Header",
"config.section_evenements-supportes": "Supported events",
"config.section_exemples-concrets": "Exemples concrets",
"config.section_facettes-et-tri": "Facettes et tri",
"config.section_fichiers": "📄 Fichiers",
"config.section_fichiers": "📄 Files",
"config.section_filtrage-de-la-sidebar": "Filtrage de la sidebar",
"config.section_filtrage-de-tags": "Filtrage de tags",
"config.section_filtrage-de-tags-template": "Filtrage de tags template",
"config.section_fonctionnalites": "Fonctionnalités",
"config.section_fonctionnalites": "Features",
"config.section_format-du-payload": "Format du payload",
"config.section_gestion-des-onglets": "📑 Gestion des onglets",
"config.section_hidden": "🗂️ Hidden Files",
"config.section_historique-recent-redemarrage-non-requis": "📋 Historique récent\n Redémarrage non requis",
"config.section_hidden": "Hidden files",
"config.section_historique-recent-redemarrage-non-requis": "📋 Recent History\n No restart required",
"config.section_indicateurs-visuels": "Indicateurs visuels",
"config.section_intelligence-artificielle-dans-l-editeur": "🤖 Intelligence Artificielle dans l'Éditeur",
"config.section_intelligence-artificielle-dans-l-editeur": "🤖 AI in the Editor",
"config.section_interaction": "Interaction",
"config.section_interface": "Interface",
"config.section_interface-utilisateur": "🧭 Interface utilisateur",
"config.section_limitations-actuelles": "Limitations actuelles",
"config.section_mode-commandes": "Mode commandes",
"config.section_mode-fichiers": "Mode fichiers",
"config.section_mode-fichiers": "File mode",
"config.section_navigation": "Navigation",
"config.section_navigation-entre-onglets": "Navigation entre onglets",
"config.section_onglets": "Onglets",
"config.section_operateurs-avances": "Opérateurs avancés",
"config.section_operateurs-avances": "Advanced operators",
"config.section_optimisations": "Optimisations",
"config.section_ouverture": "Ouverture",
"config.section_ouverture-d-onglets": "Ouverture d'onglets",
"config.section_palette-de-commandes": "⌨️ Palette de commandes",
"config.section_parametres-backend-redemarrage-requis": "Paramètres backend\n Redémarrage requis",
"config.section_parametres-de-recherche": "Paramètres de recherche",
"config.section_parametres-backend-redemarrage-requis": "Backend settings\n Restart required",
"config.section_parametres-de-recherche": "Search settings",
"config.section_partage-et-webhooks": "🔗 Partage et Webhooks",
"config.section_partages-publics": "📤 Partages publics",
"config.section_perf": "⚡ Performance",
@@ -382,36 +396,36 @@
"config.section_profil-utilisateur": "👤 Profil utilisateur",
"config.section_profile": "User profile",
"config.section_protection": "Protection",
"config.section_providers-supportes": "Providers supportés",
"config.section_providers-supportes": "Supported providers",
"config.section_publication-publique": "Publication publique",
"config.section_raccourcis-clavier": "⌨️ Raccourcis clavier",
"config.section_recent": "📜 Recent History",
"config.section_recherche": "🔍 Recherche",
"config.section_recherche-et-autocompletion": "Recherche et autocomplétion",
"config.section_recherche-et-autocompletion": "Search and autocompletion",
"config.section_recherche-simple": "Recherche simple",
"config.section_redimensionnement-de-la-sidebar": "Redimensionnement de la sidebar",
"config.section_sauvegarde-automatique": "Sauvegarde automatique",
"config.section_sauvegardes-et-audits": "💾 Sauvegardes et Audits",
"config.section_search": "Search settings",
"config.section_securite": "🛡️ Sécurité",
"config.section_securite-signature-hmac-sha256": "Sécurité : signature HMAC-SHA256",
"config.section_selection-de-vault": "Sélection de vault",
"config.section_securite": "🛡️ Security",
"config.section_securite-signature-hmac-sha256": "Security: HMAC-SHA256 signature",
"config.section_selection-de-vault": "Vault selection",
"config.section_server": "Server",
"config.section_shares": "📤 Public Shares",
"config.section_sidebar-barre-laterale": "Sidebar (barre latérale)",
"config.section_sidebar-barre-laterale": "Sidebar",
"config.section_synchronisation-automatique": "Synchronisation automatique",
"config.section_tag-cloud": "Tag cloud",
"config.section_tags": "🏷️ Tag Filtering",
"config.section_tags-inline-vs-frontmatter": "Tags inline vs frontmatter",
"config.section_theme-clair-sombre": "Thème clair/sombre",
"config.section_themes": "🎨 Thèmes",
"config.section_theme-clair-sombre": "Light/Dark theme",
"config.section_themes": "🎨 Themes",
"config.section_trucs-et-astuces": "Trucs et astuces",
"config.section_types-de-fichiers-supportes": "Types de fichiers supportés",
"config.section_types-de-fichiers-supportes": "Supported file types",
"config.section_visualisation": "Visualisation",
"config.section_vue-graphe": "🗺️ Vue Graphe",
"config.section_watcher": "Auto sync",
"config.section_webhooks": "🔗 Webhooks",
"config.section_workflow-recommande": "Workflow recommandé",
"config.section_workflow-recommande": "Recommended workflow",
"config.section_zone-de-contenu": "Zone de contenu",
"config.server_config": "Server config",
"config.settings_saved": "✓ Settings saved",
@@ -506,6 +520,9 @@
"dragdrop.move_failed": "Move failed",
"editor.cancel": "Cancel",
"editor.close": "Close",
"editor.delete_error": "Delete error",
"editor.edit": "Edit current file",
"editor.edit_current_desc": "Open current file in editor",
"editor.find": "Find in file...",
"editor.find_case": "Case sensitive",
"editor.find_regex": "Regex",
@@ -515,6 +532,7 @@
"editor.no_results": "No results",
"editor.replace": "Replace",
"editor.save": "Save",
"editor.save_error": "Save error",
"editor.saved": "Saved ✓",
"editor.unsaved": "Unsaved changes",
"error.initialization": "Initialization error",
@@ -529,22 +547,35 @@
"forge.popout_label": "pop-out",
"forge.title_placeholder": "Title...",
"graph.back": "Back",
"graph.btn_directory": "📁 Directory",
"graph.btn_full": "🌐 All",
"graph.cache_label": "(cached)",
"graph.category": "📂 Category",
"graph.click_to_open": "click to open",
"graph.ctrl_hover_preview": "Ctrl+hover = full preview",
"graph.ctrl_hover_preview_short": "Ctrl+hover = preview",
"graph.depth": "Depth",
"graph.depth_label": "depth={depth}",
"graph.edges_count": "{count} links",
"graph.error_loading": "Loading error",
"graph.export_png": "Export PNG",
"graph.favorites": "Favorites",
"graph.filter_tag": "Filter by tag",
"graph.filter_type": "Filter by type",
"graph.focus_mode": "Focus mode",
"graph.forward": "Forward",
"graph.fullscreen": "Full screen",
"graph.loading": "Building graph...",
"graph.nodes_count": "{count} nodes",
"graph.parent": "Parent",
"graph.published": "Published",
"graph.published_badge": "✅ published",
"graph.title": "Graph",
"graph.scope_directory": "Directory",
"graph.scope_full": "Full vault",
"graph.title": "Graph View — {vault}{path}",
"graph.type_directory": "Directory",
"graph.type_file": "File",
"graph.type_markdown": "Markdown",
"header.admin_panel": "Administration",
"header.config": "Settings",
"header.help": "Help",
@@ -972,6 +1003,7 @@
"help.guide_official": "Official guide",
"help.hamburger_btn": "Hamburger menu button",
"help.header_section": "Header",
"help.help_title": "Help",
"help.hide": "Hide",
"help.hide_help": "Hide help",
"help.highlighted_snippets": "Highlighted snippets",
@@ -1131,6 +1163,7 @@
"mermaid.preview": "Preview",
"mermaid.zoom_in": "Zoom in",
"mermaid.zoom_out": "Zoom out",
"mobile.all_vaults": "📂 All vaults",
"modal.create_btn": "Create",
"modal.create_file": "Create a file",
"modal.creating": "Creating...",
@@ -1166,10 +1199,50 @@
"offline.reconnected": "Connection restored — synchronizing...",
"offline.status": "Offline",
"offline.sync_now": "Sync now",
"palette.browse_dirs": "📂 Browse directories...",
"palette.browse_hint": "Navigate vaults to find a file",
"palette.browse_in": "In {path}",
"palette.browse_no_results": "No results — browse manually",
"palette.browse_open_file": "📂 Open a file in this directory",
"palette.browse_root": "root",
"palette.close_current": "Close current file",
"palette.close_current_desc": "Close active tab without deleting",
"palette.cmd_back_home": "🏠 Home",
"palette.cmd_back_home_desc": "Back to home",
"palette.cmd_config": "⚙️ Settings",
"palette.cmd_config_desc": "Open settings",
"palette.cmd_create_dir": "📁 Create directory",
"palette.cmd_create_dir_desc": "Choose vault, navigate, then name the directory",
"palette.cmd_create_file": "📄 Create markdown file",
"palette.cmd_create_file_desc": "Choose vault, navigate, then name the file",
"palette.cmd_delete_dir": "🗑️ Delete directory",
"palette.cmd_delete_dir_desc": "Choose vault, navigate and delete",
"palette.cmd_theme": "🌓 Toggle theme",
"palette.cmd_theme_desc": "Toggle light/dark",
"palette.del_all_content": "All content will be deleted",
"palette.delete_current": "Delete current file",
"palette.delete_current_desc": "Delete file from active tab",
"palette.delete_file_desc": "Search for a file to delete",
"palette.dir_delete_confirm": "All content will be deleted",
"palette.dir_name": "Directory name",
"palette.empty_dir": "📂 Empty directory",
"palette.error_loading": "Loading error",
"palette.error_prefix": "Error: {msg}",
"palette.file_name": "File name",
"palette.help_desc": "Open the guide",
"palette.md_hint": "(.md added if needed)",
"palette.mode_commands": "Commands",
"palette.mode_files": "Files",
"palette.no_results": "No results for \"{query}\"",
"palette.no_vaults": "No vaults found",
"palette.popout_desc": "Open document in a window",
"palette.reindex_desc": "Force full reindex",
"palette.search_commands": "Type a command...",
"palette.search_error": "Search error",
"palette.search_files": "Search files...",
"palette.type_command": "Type a command...",
"palette.type_search": "Search files... (+include -exclude)",
"palette.vault_count": "{count} files",
"pwa.dismiss": "Later",
"pwa.install_button": "Install",
"pwa.install_desc": "Install this app on your device for quick access.",
@@ -1258,7 +1331,7 @@
"sidebar.filter_results_grouped": "Grouped results",
"sidebar.loading": "Loading...",
"sidebar.no_recent_files": "No recent files",
"sidebar.no_results": "No results",
"sidebar.no_results": "No matching directory or file.",
"sidebar.no_saved_searches": "No saved searches",
"sidebar.open_file": "Open file",
"sidebar.saved_dirs_tab": "Folders",
@@ -1287,17 +1360,25 @@
"sync.index_started": "Indexing started ({count} vaults)",
"sync.install_success": "ObsiGate installed successfully!",
"sync.model_not_loaded": "Model not loaded",
"sync.no_provider": "No provider",
"sync.no_recent_events": "No recent events",
"sync.not_configured": "Not configured",
"sync.processing": "Processing…",
"sync.update": "Update",
"sync.updating": "Updating...",
"sync.vault_added": "Vault \"{vault}\" added ({count} files)",
"sync.vault_added_label": "Vault added",
"sync.vault_files": "{vault} ({files} files)",
"sync.vault_indexed_label": "Vault indexed",
"sync.vault_removed": "Vault \"{vault}\" removed",
"sync.vault_removed_label": "Vault removed",
"sync.verifying": "Verifying…",
"theme.change": "Change theme",
"theme.dark": "Dark",
"theme.light": "Light",
"theme.title": "Theme",
"themes.name_gradients": "Subtle gradients",
"themes.name_terminal": "Pure black & green",
"toast.ai_keys_saved": "API keys saved",
"toast.ai_no_key": "No keys to save",
"toast.bookmark_added": "Added to bookmarks",
@@ -1351,22 +1432,42 @@
"tree.new_file": "New file",
"tree.new_folder": "New folder",
"tree.vault_home": "Vault home",
"ui.backups_versions": "Backups / Versions",
"ui.cannot_rename": "Cannot rename this item",
"ui.delete_name_empty": "Name cannot be empty",
"ui.element_not_found": "Element not found in tree",
"ui.vault_readonly": "Read-only vault",
"vault.add_dynamic": "Add vault",
"vault.reindex": "Reindex vault",
"vault.remove_dynamic": "Remove vault",
"vaulthome.empty": "No files in this directory",
"vaulthome.error_loading": "Loading error:",
"vaulthome.file_count": "{count} file",
"vaulthome.file_count_plural": "{count} files",
"vaulthome.loading": "Loading files...",
"vaulthome.size_bytes": "B",
"vaulthome.size_kb": "KB",
"vaulthome.size_mb": "MB",
"viewer.backlinks": "Backlinks",
"viewer.binary_download": "Download file",
"viewer.binary_unsupported": "Unsupported binary file",
"viewer.bookmark_add": "Add to bookmarks",
"viewer.bookmark_remove": "Remove bookmarks",
"viewer.bookmark_toggle": "Add/Remove bookmarks",
"viewer.breadcrumb_home": "Home",
"viewer.click_to_download": "Click to download",
"viewer.copied": "Copied!",
"viewer.copy": "Copy",
"viewer.copy_error": "Copy error",
"viewer.download": "Download",
"viewer.download_md": "Download as .md",
"viewer.download_pdf": "Download as PDF",
"viewer.edit": "Edit",
"viewer.error": "Loading error",
"viewer.forge_brand": "Forge",
"viewer.forge_title": "Forge (new editor)",
"viewer.index_start": "Starting index...",
"viewer.index_updated": "Updated",
"viewer.loaded_from_cache": "File loaded from offline cache",
"viewer.loading": "Loading file...",
"viewer.markdown": "Markdown",
@@ -1385,6 +1486,7 @@
"viewer.share": "Share",
"viewer.shared_doc_title": "Shared document — click to manage",
"viewer.source": "Source",
"viewer.syncing": "Updating...",
"viewer.toc": "Table of contents",
"viewer.unsupported_file": "This file is binary and cannot be displayed",
"webhook.trigger_create": "Creation via API or palette",