@@ -4888,11 +4870,11 @@ curl -X POST https://votre-serveur.com/webhook \
â
- Fichiers
+ Fichiers
â
- Vaults
+ Vaults
285
diff --git a/frontend/js/i18n.js b/frontend/js/i18n.js
index 664f253..bd85c51 100644
--- a/frontend/js/i18n.js
+++ b/frontend/js/i18n.js
@@ -51,6 +51,30 @@ export function t(key, params) {
return s;
}
+// ââ Reverse-lookup cache (French text â key) ââââââââââââââââââââââââââââ
+let _reverseCache = null;
+
+function _buildReverseCache() {
+ _reverseCache = {};
+ for (const [k, v] of Object.entries(_fallbackStrings)) {
+ if (k.startsWith('_')) continue;
+ // Prefer shorter keys when multiple keys map to the same French text
+ if (!_reverseCache[v] || k.length < _reverseCache[v].length) {
+ _reverseCache[v] = k;
+ }
+ }
+}
+
+/** Translate a French string to the current locale by reverse lookup.
+ * "ParamĂštres client sauvegardĂ©s" â fr: same, en: "Client settings saved".
+ * If the string is not found in the FR locale, returns it unchanged. */
+export function tr(frenchText) {
+ if (!frenchText || _currentLocale === 'fr') return frenchText;
+ if (!_reverseCache) _buildReverseCache();
+ var key = _reverseCache[frenchText];
+ return key ? t(key) : frenchText;
+}
+
/** Change locale and re-translate the entire DOM.
* Persists to localStorage. */
export async function setLocale(locale) {
diff --git a/frontend/js/ui.js b/frontend/js/ui.js
index 5457878..1f2788a 100644
--- a/frontend/js/ui.js
+++ b/frontend/js/ui.js
@@ -6,6 +6,7 @@ import { safeCreateIcons, getFileIcon, escapeHtml } from './utils.js';
import { syncActiveFileTreeItem, refreshSidebarTreePreservingState } from './sidebar.js';
import { GraphViewManager } from './graph.js';
import { DashboardConflictsWidget } from './dashboard.js';
+import { t, tr } from './i18n.js';
// ---------------------------------------------------------------------------
// Right Sidebar Manager
// ---------------------------------------------------------------------------
@@ -347,7 +348,8 @@ export function populateCustomDropdown(dropdownId, optionsList, defaultValue) {
/** Display a brief toast message at the bottom of the viewport. */
export function showToast(message, type) {
- console.log("showToast called with:", message, type);
+ // Auto-translate French messages via reverse lookup
+ message = tr(message);
type = type || "info";
let container = document.getElementById("toast-container");
if (!container) {
diff --git a/frontend/locales/en.json b/frontend/locales/en.json
index 6329d05..318b432 100644
--- a/frontend/locales/en.json
+++ b/frontend/locales/en.json
@@ -10,6 +10,22 @@
"header.refresh": "Refresh",
"header.install_app": "Install app",
"header.admin_panel": "Administration",
+ "header.menu_config": "Settings",
+ "header.menu_config_desc": "Application settings",
+ "header.menu_help": "User guide",
+ "header.menu_help_desc": "Open help",
+ "header.menu_about": "About",
+ "header.menu_about_desc": "Version, credits & info",
+ "header.menu_profile": "Profile",
+ "header.menu_profile_desc": "Language & preferences",
+ "header.menu_logout": "Sign out",
+ "header.menu_logout_desc": "End session",
+ "header.menu_admin": "Administration",
+ "header.menu_admin_desc": "Manage users",
+ "header.sync_status": "Sync",
+ "header.sidebar_toggle": "Toggle sidebar",
+ "header.menu_toggle": "Menu",
+ "header.quick_help": "Quick Help",
"sidebar.filter_placeholder": "Filter files...",
"sidebar.tab_vaults": "Vaults",
@@ -19,6 +35,20 @@
"sidebar.loading": "Loading...",
"sidebar.no_results": "No results",
"sidebar.vault_context_all": "All vaults",
+ "sidebar.saved_searches_tab": "Searches",
+ "sidebar.saved_dirs_tab": "Folders",
+ "sidebar.no_saved_searches": "No saved searches",
+ "sidebar.no_recent_files": "No recent files",
+ "sidebar.case_sensitive": "Case sensitive",
+ "sidebar.clear_filter": "Clear",
+ "sidebar.filter_results_grouped": "Grouped results",
+ "sidebar.filter_instant": "Instant search",
+ "sidebar.expand_collapse": "Expand/Collapse",
+ "sidebar.open_file": "Open file",
+ "sidebar.file_icons": "Icons",
+ "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)",
@@ -35,6 +65,21 @@
"search.case_sensitive": "Case sensitive",
"search.whole_word": "Whole word",
"search.regex": "Regular expression",
+ "search.dropdown_history": "History",
+ "search.dropdown_files": "Files",
+ "search.dropdown_clear_history": "Clear history",
+ "search.clear": "Clear",
+ "search.filter_path_title": "Path filters (Alt-F)",
+ "search.aria_label": "Search suggestions",
+ "search.sections_all_vaults": "All vaults",
+ "search.simple_search": "Simple search",
+ "search.full_text": "Search everywhere",
+ "search.smart_scoring": "Smart scoring",
+ "search.highlighted_snippets": "Highlighted snippets",
+ "search.pagination": "Pagination",
+ "search.advanced_operators": "Advanced operators",
+ "search.include_placeholder": "Include: **/*.md, notes/**",
+ "search.exclude_placeholder": "Exclude: vendor/*, *.lock",
"viewer.source": "Source",
"viewer.markdown": "Markdown",
@@ -52,6 +97,17 @@
"viewer.binary_unsupported": "Unsupported binary file",
"viewer.binary_download": "Download file",
"viewer.pdf_pages": "{count} pages",
+ "viewer.on_this_page": "ON THIS PAGE",
+ "viewer.no_headings": "No headings in this document",
+ "viewer.metadata_tags": "Tags",
+ "viewer.metadata_created": "Created",
+ "viewer.metadata_modified": "Modified",
+ "viewer.metadata_size": "Size",
+ "viewer.metadata_vault": "Vault",
+ "viewer.metadata_path": "Path",
+ "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",
@@ -64,6 +120,8 @@
"editor.find_whole": "Whole word",
"editor.no_results": "No results",
"editor.close": "Close",
+ "editor.forge_help": "Forge editor help",
+ "editor.forge_close_editor": "Close editor / modal",
"ai.toolbar_edit": "Edit",
"ai.toolbar_tone": "Tone",
@@ -90,6 +148,8 @@
"ai.no_api_key": "No API key configured",
"ai.select_text": "Select text to process",
"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",
@@ -103,8 +163,22 @@
"dashboard.no_bookmarks": "No bookmarks",
"dashboard.no_conflicts": "No conflicts",
"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",
+ "config.section_server": "Server",
+ "config.section_watcher": "Auto sync",
+ "config.section_profile": "User profile",
+ "config.section_ai": "AI API keys",
+ "config.section_hidden": "Hidden files",
+ "config.section_webhooks": "Webhooks",
+ "config.section_shares": "Public shares",
+ "config.section_backups": "Backups",
+ "config.section_diag": "Diagnostics",
+ "config.section_about": "About",
"config.profile": "User profile",
"config.profile_desc": "Personal preferences to customize your ObsiGate experience.",
"config.lang_label": "Preferred language",
@@ -130,20 +204,213 @@
"config.diagnostics_desc": "Technical information about the server state.",
"config.reindex": "Reindex",
"config.reindex_desc": "Rebuild the search index for all vaults.",
- "config.client_config": "Client configuration",
- "config.server_config": "Server configuration",
+ "config.client_config": "Client config",
+ "config.server_config": "Server config",
+ "config.restart_required": "Restart required",
+ "config.no_restart": "No restart needed",
+ "config.note": "Note:",
+ "config.test": "Test",
+ "config.debounce_label": "Debounce delay (ms)",
+ "config.results_per_page_label": "Results per page",
+ "config.min_query_label": "Min. query length",
+ "config.timeout_label": "Search timeout (ms)",
+ "config.max_backups_label": "Max backups per file",
+ "config.workers_label": "Search workers",
+ "config.max_content_label": "Max content size (bytes)",
+ "config.title_boost_label": "Title boost",
+ "config.tag_boost_label": "Tag boost",
+ "config.prefix_expansions_label": "Max prefix expansions",
+ "config.tag_filtering_label": "Tag filtering",
+ "config.watcher_enabled_label": "Enable watcher",
+ "config.watcher_polling_label": "Polling mode (fallback)",
+ "config.watcher_interval_label": "Polling interval (s)",
+ "config.watcher_debounce_label": "Debounce (s)",
+ "config.ai_deepseek_label": "DeepSeek API Key",
+ "config.ai_openrouter_label": "OpenRouter API Key",
+ "config.ai_gemini_label": "Gemini API Key",
+ "config.ai_default_provider": "Default provider",
+ "config.ai_model": "Model",
+ "config.save_ai_keys": "Save keys",
+ "config.save_backend": "Save server configuration",
+ "config.reset": "Reset",
+ "config.add_webhook": "Add",
+ "config.webhook_name_placeholder": "Name",
+ "config.webhook_url_placeholder": "URL",
+ "config.create_share": "Create share",
+ "config.shares_empty": "No active shares",
+ "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",
"help.markdown": "Markdown syntax",
"help.about": "About",
+ "help.quick_help": "Quick Help",
+ "help.shortcut_palette": "Command palette",
+ "help.shortcut_palette_cmd": "Command palette (command mode)",
+ "help.shortcut_focus_search": "Focus search bar",
+ "help.shortcut_save": "Save",
+ "help.shortcut_close": "Close editor / modal",
+ "help.shortcut_forge_help": "Forge editor help",
+ "help.guide_official": "Official guide",
+ "help.experience": "Experience",
+ "help.simple": "Simple",
+ "help.instant": "Instant",
+ "help.multi_vault": "Multi-vault",
+ "help.header_section": "Header",
+ "help.hamburger_btn": "Hamburger menu button",
+ "help.sidebar_toggle_btn": "Sidebar toggle button",
+ "help.logo": "ObsiGate logo",
+ "help.search_bar": "Search bar",
+ "help.vault_indicator": "Vault indicator",
+ "help.menu_options": "Options menu",
+ "help.sidebar_section": "Sidebar",
+ "help.sidebar_tabs": "The sidebar has two tabs:",
+ "help.sidebar_features": "Sidebar features:",
+ "help.filtering": "Filtering",
+ "help.quick_select": "Quick select",
+ "help.resize": "Resize",
+ "help.hide": "Hide",
+ "help.content_area": "Content area",
+ "help.content_shows": "The main area displays:",
+ "help.breadcrumb": "Breadcrumb",
+ "help.title_tags": "Title and tags",
+ "help.action_buttons": "Action buttons",
+ "help.rendered_content": "Rendered content",
+ "help.tree_section": "Vault tree",
+ "help.sidebar_filtering": "Sidebar filtering",
+ "help.case_sensitive": "Case-sensitive",
+ "help.clear": "Clear",
+ "help.results_grouped": "Grouped results",
+ "help.breadcrumb_reposition": "Breadcrumb and repositioning",
+ "help.click_vault": "Click the vault",
+ "help.click_segment": "Click a segment",
+ "help.auto_scroll": "Auto-scroll",
+ "help.vault_selector": "Vault selector",
+ "help.menu_header": "Header menu",
+ "help.sidebar_dropdown": "Sidebar dropdown",
+ "help.all_vaults": "All vaults",
+ "help.vault_specific": "Specific vault",
+ "help.tabs_section": "Opening tabs",
+ "help.single_click": "Single click",
+ "help.double_click": "Double click",
+ "help.recent_nav": "Recent navigation",
+ "help.tab_nav": "Tab navigation",
+ "help.click_tab": "Click a tab",
+ "help.tab_features": "Features",
+ "help.tab_bar": "Tab bar",
+ "help.active_tab": "Active tab",
+ "help.preview_tab": "Preview",
+ "help.persistent_tabs": "Persistent tabs",
+ "help.simple_search": "Simple search",
+ "help.search_everywhere": "Search everywhere",
+ "help.smart_scoring": "Smart scoring",
+ "help.highlighted_snippets": "Highlighted snippets",
+ "help.pagination": "Pagination",
+ "help.advanced_operators": "Advanced operators",
+ "help.search_facets": "Facets",
+ "help.search_save": "Saved searches",
+ "help.search_history": "Search history",
+ "help.search_filters": "Search filters",
+ "help.mermaid_section": "Mermaid diagrams",
+ "help.rendering_md": "Rendering in Markdown",
+ "help.themes": "Themes",
+ "help.code_preview": "Code + Preview",
+ "help.zoom_pan": "Zoom & Pan",
+ "help.export": "Export",
+ "help.mermaid_templates": "Templates",
+ "help.theme_section": "Theme",
+ "help.theme_toggle": "Toggle between themes:",
+ "help.light": "Light",
+ "help.dark": "Dark",
+ "help.context_menu": "Context menu (right click)",
+ "help.context_actions": "File actions",
+ "help.new_file": "New file",
+ "help.new_folder": "New folder",
+ "help.rename": "Rename",
+ "help.delete": "Delete",
+ "help.copy_path": "Copy path",
+ "help.properties": "Properties",
+ "help.graph_view": "Graph view",
+ "help.find_in_page": "Find in page",
+ "help.find_capabilities": "Regex, whole word, case-sensitive search in the displayed document with DOM TreeWalker.",
+ "help.file_viewer": "File viewer",
+ "help.file_actions": "Actions on the open file:",
+ "help.actions_available": "Buttons available above the content:",
+ "help.actions_detail": "Buttons available above the content:",
+ "help.share_button": "Share button",
+ "help.popout_button": "Dedicated button",
+ "help.outline_panel": "Outline panel (right)",
+ "help.backlinks_panel": "Backlinks panel",
+ "help.fallback_editor": "Fallback editor",
+ "help.editor_section": "Editor",
+ "help.toolbar_section": "AI toolbar",
+ "help.ai_features": "Edit, tone, translate, generate and tools via AI.",
+ "help.security_section": "Security",
+ "help.audit_log": "Audit log",
+ "help.backup_auto": "Auto backup",
+ "help.atomic_writes": "Atomic writes",
+ "help.rate_limiting": "Rate limiting",
+ "help.secret_redaction": "Secret redaction",
+ "help.syncthing_conflicts": "Syncthing conflicts",
+ "help.before_write": "Before write",
+ "help.ci_cd": "CI/CD automation",
+ "help.pwa_section": "PWA",
+ "help.external_audit": "External audit",
+ "help.shortcut_prev_tab": "Previous tab",
+ "help.shortcut_next_tab": "Next tab",
+ "help.shortcut_close_tab": "Close tab",
+ "help.shortcut_close_palette": "Close palette",
+ "help.shortcut_select": "Open/select",
+ "help.shortcut_undo": "Undo",
+ "help.shortcut_redo": "Redo",
+ "help.advanced_use_cases": "Advanced use cases",
+ "help.use_cases": "Use cases",
+ "help.other": "Other",
+ "help.supported_languages": "Many languages supported",
+ "help.active_filter_chips": "Active filter chips",
+ "help.clickable": "Clickable",
+ "help.breadcrumb_clickable": "Clickable breadcrumb",
+ "help.autocomplete": "Autocomplete",
+ "help.drag_drop_tabs": "Drag & drop tabs",
+ "help.persistent_display": "Persistent display in bar",
+ "help.close_tab_x": "â button",
+ "help.activation": "Activation",
+ "help.add_remove": "Add/Remove",
+ "help.nodes_edges": "Edges",
+ "help.graph_zoom_pan": "Scroll wheel zoom & pan",
+ "help.graph_fullscreen": "Full screen & PNG export",
+ "help.graph_filter_depth": "Filters & depth",
+ "help.graph_focus": "Focus mode",
+ "help.graph_navigation": "History navigation â â â",
+ "help.graph_sticky": "Sticky panels",
+ "help.graph_preview": "Ctrl+hover",
+ "help.rendering_images": "Image rendering",
+ "help.wikilinks": "Wikilinks",
+ "help.syncthing": "Syncthing conflicts",
+ "help.public_shares": "Public sharing",
+ "help.webhooks": "Webhooks",
+ "help.dashboard": "Dashboard statistics",
+ "help.pdf_export": "PDF export",
+ "help.command_palette": "Command palette",
+ "help.search_dropdown": "Search dropdown",
+ "help.results_counter": "Results counter",
+ "help.sort_options": "Sort options",
+ "help.filter_toggles": "Toggles Aa, wd, .*",
+ "help.mobile": "Floating results bar",
+ "help.theme_sync": "Synced theme",
+ "help.configuration": "Settings",
+ "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",
"auth.login_button": "Sign in",
- "auth.remember_me": "Remember me",
+ "auth.remember_me": "Remember me (30 days)",
"auth.login_error": "Invalid credentials",
"auth.network_error": "Network error â check your connection",
"auth.logged_out": "Signed out",
@@ -187,6 +454,8 @@
"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)",
@@ -236,6 +505,7 @@
"toast.error_delete": "Delete error",
"toast.error_load": "Loading error",
"toast.error_network": "Network error",
+ "toast.error_init": "Initialization error",
"toast.reindex_started": "Reindexing...",
"toast.reindex_done": "Reindexing complete",
"toast.index_reloaded": "Full index reloaded",
@@ -244,6 +514,18 @@
"toast.config_saved": "Configuration saved",
"toast.config_client_saved": "Client settings saved",
"toast.config_reset": "Configuration reset",
+ "toast.ai_no_key": "No keys to save",
+ "toast.ai_keys_saved": "API keys saved",
+ "toast.user_created": "User created",
+ "toast.user_modified": "User modified",
+ "toast.user_deleted": "User deleted",
+ "toast.cannot_delete_self": "Cannot delete your own account",
+ "toast.url_required": "URL required",
+ "toast.share_revoked": "Share revoked",
+ "toast.link_created": "Link created!",
+ "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?",
@@ -267,5 +549,7 @@
"vault.reindex": "Reindex vault",
"theme.light": "Light",
- "theme.dark": "Dark"
+ "theme.dark": "Dark",
+ "theme.change": "Change theme",
+ "theme.title": "Theme"
}
diff --git a/frontend/locales/fr.json b/frontend/locales/fr.json
index 2a9663f..0e27541 100644
--- a/frontend/locales/fr.json
+++ b/frontend/locales/fr.json
@@ -10,6 +10,22 @@
"header.refresh": "RafraĂźchir",
"header.install_app": "Installer l'application",
"header.admin_panel": "Administration",
+ "header.menu_config": "Configurations",
+ "header.menu_config_desc": "ParamĂštres de l'application",
+ "header.menu_help": "Guide d'utilisation",
+ "header.menu_help_desc": "Ouvrir l'aide",
+ "header.menu_about": "Ă propos",
+ "header.menu_about_desc": "Version, crédits & info",
+ "header.menu_profile": "Profil",
+ "header.menu_profile_desc": "Langue & préférences",
+ "header.menu_logout": "Déconnexion",
+ "header.menu_logout_desc": "Quitter la session",
+ "header.menu_admin": "Administration",
+ "header.menu_admin_desc": "Gérer les utilisateurs",
+ "header.sync_status": "Synchronisation",
+ "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",
@@ -19,6 +35,20 @@
"sidebar.loading": "Chargement...",
"sidebar.no_results": "Aucun résultat",
"sidebar.vault_context_all": "Toutes les vaults",
+ "sidebar.saved_searches_tab": "Recherches",
+ "sidebar.saved_dirs_tab": "Répertoires",
+ "sidebar.no_saved_searches": "Aucune recherche sauvegardée",
+ "sidebar.no_recent_files": "Aucun fichier récent",
+ "sidebar.case_sensitive": "Respecter la casse",
+ "sidebar.clear_filter": "Effacer",
+ "sidebar.filter_results_grouped": "Résultats groupés",
+ "sidebar.filter_instant": "Recherche instantanée",
+ "sidebar.expand_collapse": "Développer/Réduire",
+ "sidebar.open_file": "Ouvrir un fichier",
+ "sidebar.file_icons": "IcĂŽnes",
+ "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)",
@@ -35,6 +65,21 @@
"search.case_sensitive": "Respecter la casse",
"search.whole_word": "Mot entier",
"search.regex": "Expression réguliÚre",
+ "search.dropdown_history": "Historique",
+ "search.dropdown_files": "Fichiers",
+ "search.dropdown_clear_history": "Effacer l'historique",
+ "search.clear": "Effacer",
+ "search.filter_path_title": "Filtres de chemin (Alt-F)",
+ "search.aria_label": "Suggestions de recherche",
+ "search.sections_all_vaults": "Tous les vaults",
+ "search.simple_search": "Recherche simple",
+ "search.full_text": "Recherche dans tout",
+ "search.smart_scoring": "Scoring intelligent",
+ "search.highlighted_snippets": "Snippets surlignés",
+ "search.pagination": "Pagination",
+ "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",
@@ -52,6 +97,17 @@
"viewer.binary_unsupported": "Fichier binaire non supporté",
"viewer.binary_download": "Télécharger le fichier",
"viewer.pdf_pages": "{count} pages",
+ "viewer.on_this_page": "SUR CETTE PAGE",
+ "viewer.no_headings": "Aucun titre dans ce document",
+ "viewer.metadata_tags": "Tags",
+ "viewer.metadata_created": "Créé",
+ "viewer.metadata_modified": "Modifié",
+ "viewer.metadata_size": "Taille",
+ "viewer.metadata_vault": "Vault",
+ "viewer.metadata_path": "Chemin",
+ "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",
@@ -64,6 +120,8 @@
"editor.find_whole": "Mot entier",
"editor.no_results": "Aucun résultat",
"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",
@@ -90,6 +148,8 @@
"ai.no_api_key": "Aucune clé API configurée",
"ai.select_text": "Sélectionnez du texte à traiter",
"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",
@@ -103,8 +163,22 @@
"dashboard.no_bookmarks": "Aucun favori",
"dashboard.no_conflicts": "Aucun conflit",
"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",
+ "config.section_server": "Serveur",
+ "config.section_watcher": "Synchronisation automatique",
+ "config.section_profile": "Profil utilisateur",
+ "config.section_ai": "Clés API IA",
+ "config.section_hidden": "Fichiers cachés",
+ "config.section_webhooks": "Webhooks",
+ "config.section_shares": "Partages publics",
+ "config.section_backups": "Sauvegardes",
+ "config.section_diag": "Diagnostics",
+ "config.section_about": "Ă propos",
"config.profile": "Profil utilisateur",
"config.profile_desc": "Préférences personnelles pour personnaliser l'expérience ObsiGate.",
"config.lang_label": "Langue préférée",
@@ -132,18 +206,211 @@
"config.reindex_desc": "Reconstruire l'index de recherche pour toutes les vaults.",
"config.client_config": "Configuration client",
"config.server_config": "Configuration serveur",
+ "config.restart_required": "Redémarrage requis",
+ "config.no_restart": "Redémarrage non requis",
+ "config.note": "Note :",
+ "config.test": "Tester",
+ "config.debounce_label": "Délai debounce (ms)",
+ "config.results_per_page_label": "Résultats par page",
+ "config.min_query_label": "Longueur min. requĂȘte",
+ "config.timeout_label": "Timeout recherche (ms)",
+ "config.max_backups_label": "Max backups par fichier",
+ "config.workers_label": "Workers de recherche",
+ "config.max_content_label": "Taille max contenu (octets)",
+ "config.title_boost_label": "Boost titre",
+ "config.tag_boost_label": "Boost tags",
+ "config.prefix_expansions_label": "Expansions préfixe max",
+ "config.tag_filtering_label": "Filtrage de tags",
+ "config.watcher_enabled_label": "Activer la surveillance",
+ "config.watcher_polling_label": "Mode polling (fallback)",
+ "config.watcher_interval_label": "Intervalle polling (s)",
+ "config.watcher_debounce_label": "Debounce (s)",
+ "config.ai_deepseek_label": "DeepSeek API Key",
+ "config.ai_openrouter_label": "OpenRouter API Key",
+ "config.ai_gemini_label": "Gemini API Key",
+ "config.ai_default_provider": "Fournisseur par défaut",
+ "config.ai_model": "ModĂšle",
+ "config.save_ai_keys": "Enregistrer les clés",
+ "config.save_backend": "Sauvegarder la configuration serveur",
+ "config.reset": "Réinitialiser",
+ "config.add_webhook": "Ajouter",
+ "config.webhook_name_placeholder": "Nom",
+ "config.webhook_url_placeholder": "URL",
+ "config.create_share": "Créer un partage",
+ "config.shares_empty": "Aucun partage actif",
+ "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",
"help.markdown": "Syntaxe Markdown",
"help.about": "Ă propos",
+ "help.quick_help": "Raccourcis & Astuces",
+ "help.shortcut_palette": "Palette de commandes",
+ "help.shortcut_palette_cmd": "Palette de commandes (mode commande)",
+ "help.shortcut_focus_search": "Focus barre de recherche",
+ "help.shortcut_save": "Sauvegarder",
+ "help.shortcut_close": "Fermer l'éditeur / modale",
+ "help.shortcut_forge_help": "Aide de l'éditeur Forge",
+ "help.guide_official": "Guide officiel",
+ "help.experience": "Expérience",
+ "help.simple": "Simple",
+ "help.instant": "Instantanée",
+ "help.multi_vault": "Multi-vault",
+ "help.header_section": "En-tĂȘte",
+ "help.hamburger_btn": "Bouton menu hamburger",
+ "help.sidebar_toggle_btn": "Bouton toggle sidebar",
+ "help.logo": "Logo ObsiGate",
+ "help.search_bar": "Barre de recherche",
+ "help.vault_indicator": "Indicateur de vault",
+ "help.menu_options": "Menu Options",
+ "help.sidebar_section": "Sidebar (barre latérale)",
+ "help.sidebar_tabs": "La sidebar est divisée en deux onglets :",
+ "help.sidebar_features": "Fonctionnalités de la sidebar :",
+ "help.filtering": "Filtrage",
+ "help.quick_select": "Sélection rapide",
+ "help.resize": "Redimensionnement",
+ "help.hide": "Masquage",
+ "help.content_area": "Zone de contenu",
+ "help.content_shows": "La zone centrale affiche :",
+ "help.breadcrumb": "Breadcrumb",
+ "help.title_tags": "Titre et tags",
+ "help.action_buttons": "Boutons d'action",
+ "help.rendered_content": "Contenu rendu",
+ "help.tree_section": "Arborescence des vaults",
+ "help.sidebar_filtering": "Filtrage de la sidebar",
+ "help.case_sensitive": "Case-sensitive",
+ "help.clear": "Effacer",
+ "help.results_grouped": "Résultats groupés",
+ "help.breadcrumb_reposition": "Breadcrumb et repositionnement",
+ "help.click_vault": "Cliquez sur le vault",
+ "help.click_segment": "Cliquez sur un segment",
+ "help.auto_scroll": "Auto-scroll",
+ "help.vault_selector": "Sélection de vault",
+ "help.menu_header": "Menu header",
+ "help.sidebar_dropdown": "Sidebar dropdown",
+ "help.all_vaults": "Tous les vaults",
+ "help.vault_specific": "Vault spécifique",
+ "help.tabs_section": "Ouverture d'onglets",
+ "help.single_click": "Simple clic",
+ "help.double_click": "Double clic",
+ "help.recent_nav": "Navigation récente",
+ "help.tab_nav": "Navigation entre onglets",
+ "help.click_tab": "Clic sur un onglet",
+ "help.tab_features": "Fonctionnalités",
+ "help.tab_bar": "Barre d'onglets",
+ "help.active_tab": "Onglet actif",
+ "help.preview_tab": "Prévisualisation",
+ "help.persistent_tabs": "Onglets persistants",
+ "help.simple_search": "Recherche simple",
+ "help.search_everywhere": "Recherche dans tout",
+ "help.smart_scoring": "Scoring intelligent",
+ "help.highlighted_snippets": "Snippets surlignés",
+ "help.pagination": "Pagination",
+ "help.advanced_operators": "Opérateurs avancés",
+ "help.search_facets": "Facettes",
+ "help.search_save": "Recherches sauvegardées",
+ "help.search_history": "Historique de recherche",
+ "help.search_filters": "Filtres de recherche",
+ "help.mermaid_section": "Diagrammes Mermaid",
+ "help.rendering_md": "Rendu dans le Markdown",
+ "help.themes": "ThĂšmes",
+ "help.code_preview": "Code + Prévisualisation",
+ "help.zoom_pan": "Zoom & Pan",
+ "help.export": "Export",
+ "help.mermaid_templates": "Templates",
+ "help.theme_section": "ThĂšme",
+ "help.theme_toggle": "Basculez entre les thĂšmes :",
+ "help.light": "Clair",
+ "help.dark": "Sombre",
+ "help.context_menu": "Menu contextuel (clic droit)",
+ "help.context_actions": "Actions sur fichiers",
+ "help.new_file": "Nouveau fichier",
+ "help.new_folder": "Nouveau dossier",
+ "help.rename": "Renommer",
+ "help.delete": "Supprimer",
+ "help.copy_path": "Copier le chemin",
+ "help.properties": "Propriétés",
+ "help.graph_view": "Vue graphe",
+ "help.find_in_page": "Recherche dans la page",
+ "help.find_capabilities": "Recherche regex, mot entier, case-sensitive dans le document affiché avec TreeWalker DOM.",
+ "help.file_viewer": "Visionneur de fichier",
+ "help.file_actions": "Actions sur le fichier ouvert :",
+ "help.actions_available": "Boutons disponibles au-dessus du contenu :",
+ "help.actions_detail": "Boutons disponibles au-dessus du contenu :",
+ "help.share_button": "Bouton Partager",
+ "help.popout_button": "Bouton dédié",
+ "help.outline_panel": "Panneau Plan (droite)",
+ "help.backlinks_panel": "Panneau Backlinks",
+ "help.fallback_editor": "Ăditeur de fallback",
+ "help.editor_section": "Ăditeur",
+ "help.toolbar_section": "Barre d'outils AI",
+ "help.ai_features": "Ădition, ton, traduction, gĂ©nĂ©ration et outils via AI.",
+ "help.security_section": "Sécurité",
+ "help.audit_log": "Audit log",
+ "help.backup_auto": "Backup automatique",
+ "help.atomic_writes": "Atomic writes",
+ "help.rate_limiting": "Rate limiting",
+ "help.secret_redaction": "Redaction de secrets",
+ "help.syncthing_conflicts": "Conflits Syncthing",
+ "help.before_write": "Avant écriture",
+ "help.ci_cd": "Automatisation CI/CD",
+ "help.pwa_section": "PWA",
+ "help.external_audit": "Audit externe",
+ "help.shortcut_prev_tab": "Onglet précédent",
+ "help.shortcut_next_tab": "Onglet suivant",
+ "help.shortcut_close_tab": "Fermer l'onglet",
+ "help.shortcut_close_palette": "Fermer la palette",
+ "help.shortcut_select": "Ouvrir/sélectionner",
+ "help.shortcut_undo": "Annuler",
+ "help.shortcut_redo": "Refaire",
+ "help.advanced_use_cases": "Cas d'usage avancés",
+ "help.use_cases": "Cas d'usage",
+ "help.other": "Autres",
+ "help.supported_languages": "Support de nombreux langages",
+ "help.active_filter_chips": "Chips de filtres actifs",
+ "help.clickable": "Cliquable",
+ "help.breadcrumb_clickable": "Breadcrumb cliquable",
+ "help.autocomplete": "Autocomplétion",
+ "help.drag_drop_tabs": "Drag & drop des onglets",
+ "help.persistent_display": "Affichage persistant dans la barre",
+ "help.close_tab_x": "Bouton â",
+ "help.activation": "Activation",
+ "help.add_remove": "Ajout/Suppression",
+ "help.nodes_edges": "ArĂȘtes",
+ "help.graph_zoom_pan": "Zoom & pan molette",
+ "help.graph_fullscreen": "Plein écran & export PNG",
+ "help.graph_filter_depth": "Filtres & profondeur",
+ "help.graph_focus": "Mode focus",
+ "help.graph_navigation": "Navigation historique â â â",
+ "help.graph_sticky": "Sticky panels",
+ "help.graph_preview": "Ctrl+survol",
+ "help.rendering_images": "Rendu d'images",
+ "help.wikilinks": "Wikilinks",
+ "help.syncthing": "Conflits Syncthing",
+ "help.public_shares": "Publication publique",
+ "help.webhooks": "Webhooks",
+ "help.dashboard": "Dashboard statistiques",
+ "help.pdf_export": "Export PDF",
+ "help.command_palette": "Palette de commande",
+ "help.search_dropdown": "Dropdown de recherche",
+ "help.results_counter": "Compteur de résultats",
+ "help.sort_options": "Options de tri",
+ "help.filter_toggles": "Toggles Aa, wd, .*",
+ "help.mobile": "Barre flottante résultats",
+ "help.theme_sync": "ThÚme synchronisé",
+ "help.configuration": "Configuration",
+ "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": "Connexion",
+ "auth.login_title": "AccÚs sécurisé à vos vaults",
"auth.username": "Nom d'utilisateur",
"auth.password": "Mot de passe",
"auth.login_button": "Se connecter",
- "auth.remember_me": "Se souvenir de moi",
+ "auth.remember_me": "Se souvenir de moi (30 jours)",
"auth.login_error": "Identifiants invalides",
"auth.network_error": "Erreur rĂ©seau â vĂ©rifiez votre connexion",
"auth.logged_out": "Déconnecté",
@@ -187,6 +454,8 @@
"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",
@@ -236,6 +505,7 @@
"toast.error_delete": "Erreur de suppression",
"toast.error_load": "Erreur de chargement",
"toast.error_network": "Erreur réseau",
+ "toast.error_init": "Erreur lors de l'initialisation",
"toast.reindex_started": "Réindexation en cours...",
"toast.reindex_done": "Réindexation terminée",
"toast.index_reloaded": "Index complet rechargé",
@@ -244,6 +514,18 @@
"toast.config_saved": "Configuration sauvegardée",
"toast.config_client_saved": "ParamÚtres client sauvegardés",
"toast.config_reset": "Configuration réinitialisée",
+ "toast.ai_no_key": "Aucune clé à sauvegarder",
+ "toast.ai_keys_saved": "Clés API sauvegardées",
+ "toast.user_created": "Utilisateur créé",
+ "toast.user_modified": "Utilisateur modifié",
+ "toast.user_deleted": "Utilisateur supprimé",
+ "toast.cannot_delete_self": "Impossible de supprimer son propre compte",
+ "toast.url_required": "URL requise",
+ "toast.share_revoked": "Partage révoqué",
+ "toast.link_created": "Lien créé !",
+ "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 ?",
@@ -267,5 +549,7 @@
"vault.reindex": "Réindexer la vault",
"theme.light": "Clair",
- "theme.dark": "Sombre"
+ "theme.dark": "Sombre",
+ "theme.change": "Changer le thĂšme",
+ "theme.title": "ThĂšme"
}