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
Core: i18n.js module with t(), setLocale(), initI18n() - Flat key→string JSON locale files (fr.json + en.json, 165 keys) - data-i18n / data-i18n-placeholder / data-i18n-attr DOM attributes - Live locale switch via setLocale() - no page reload - Language detection: localStorage > navigator.language > 'fr' - Fallback: missing key → French → raw key Wired into: - app.js: await initI18n() early in init() - config.js: profile save → await setLocale(), toasts + confirm via t() - auth.js: network error toast via t() - index.html: data-i18n on login form, profile section, search placeholder