feat: comprehensive i18n coverage — all static text + auto-translate toasts
CI / lint (push) Failing after 18s
CI / test (push) Has been skipped
CI / build (push) Has been skipped
CI / e2e (push) Has been skipped
CI / security (push) Failing after 9s

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:
2026-06-18 14:01:37 -04:00
parent f85482214e
commit f91a386566
5 changed files with 774 additions and 198 deletions
+288 -4
View File
@@ -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"
}