feat: comprehensive i18n coverage — all static text + auto-translate toasts
Locale files expanded to 300+ keys covering all sections: - Header menu, sidebar, search, viewer, editor, AI toolbar - Config modal (all sections), help modal, dashboard, graph, mermaid - Context menus, offline UI, palette, auth, shares, backups - All toasts and confirmations Automatic data-i18n tagging in index.html (177 attributes) via Python script — handles all user-facing static text nodes. Zero concatenation errors verified. i18n.js: added tr() reverse-lookup function (French text → key → current locale translation) ui.js: showToast() now auto-translates via tr() — all 24 existing toast call sites benefit automatically
This commit is contained in:
+172
-190
File diff suppressed because it is too large
Load Diff
@@ -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) {
|
||||
|
||||
+3
-1
@@ -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) {
|
||||
|
||||
+288
-4
@@ -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"
|
||||
}
|
||||
|
||||
+287
-3
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user