Skip to content

2026-04-22 i18n Report

  • Frontend i18n runtime: app/frontend/src/i18n/index.ts, app/frontend/src/main.tsx, app/frontend/src/App.tsx
  • Frontend dictionaries: app/frontend/src/i18n/en.json, app/frontend/src/i18n/ru.json
  • Frontend components localized in this pass:
    • App
    • SidebarPanel
    • ToastSystem
    • ErrorBoundary
    • ChartErrorBoundary
    • ChartExport
    • EmptyState
    • InlineConfirmButton
    • ProjectListFilters
    • ShortcutHelp
    • TemplateGallery
    • WizardPanel
    • WizardDraftStep
    • WizardReviewStep
    • ResultsPanel
    • components/results/*
    • components/results/internal/SensitivityOverview.tsx
    • components/results/internal/SrmCheckView.tsx
    • components/results/internal/ObservedResultsView.tsx
  • Backend i18n/localized response path:
    • app/backend/app/main.py
    • app/backend/app/services/export_service.py
    • app/backend/app/rules/catalog.py
    • app/backend/app/rules/engine.py
    • app/backend/app/schemas/api.py
    • app/backend/app/i18n/en.json
    • app/backend/app/i18n/ru.json
  • POST /api/v1/analyze
    • Accept-Language: ru returns localized report payload
    • verified by app/backend/tests/test_export_api.py
  • Export renderers in app/backend/app/services/export_service.py
    • markdown/html/pdf now resolve strings through backend i18n dictionaries
  • Frontend top-level keys:
    • en.json: 19
    • ru.json: 19
  • Frontend normalized leaf keys:
    • en.json: 776
    • ru.json: 776
  • Frontend raw leaf keys:
    • en.json: 793
    • ru.json: 827
    • difference is expected because Russian pluralization uses one/few/many/other
  • Backend leaf keys:
    • app/backend/app/i18n/en.json: 235
    • app/backend/app/i18n/ru.json: 235
  • npm --prefix app/frontend run test:unit
    • passed, 197 passed
  • python -m pytest app/backend/tests/test_export_api.py -q
    • passed, 5 passed
  • python scripts/generate_frontend_api_types.py --check
    • passed, app/frontend/src/lib/generated/api-contract.ts is up to date
  • python scripts/generate_api_docs.py --check
    • passed, docs/API.md is up to date
  • A temporary sqlite3.OperationalError: database is locked appeared only when backend pytest and doc/type generators were run in parallel against the same workspace DB. Serial rerun passed.
  • Full scripts/verify_all.cmd --with-e2e was not run in this pass.
  • Lighthouse / bundle budget verification was not run in this pass.
  • app/frontend/src/components/ApiKeyManager.tsx
    • left untouched in this pass to stay inside the component list already being changed for this CX task
  • Server logs / warning traces / low-level diagnostic field values
    • kept technical/English intentionally
  • Backend route names, HTTP methods, SQLite/LLM/auth technical labels
    • left as technical identifiers rather than translated prose