Skip to content

feat: i18n 10 languages + About section + deploy fix#114

Merged
scheilch merged 12 commits intomainfrom
feature/i18n-about-section
May 2, 2026
Merged

feat: i18n 10 languages + About section + deploy fix#114
scheilch merged 12 commits intomainfrom
feature/i18n-about-section

Conversation

@scheilch
Copy link
Copy Markdown
Owner

@scheilch scheilch commented May 2, 2026

Summary

This PR implements the two most-requested features from the community and includes several improvements developed over the past sprint.


About Section (closes #102)

  • New AboutSection component in Settings with app version, connected device count, GitHub/issues/BuyMeACoffee links
  • License compliance display listing all OSS dependencies
  • Health endpoint integration (/api/health, useHealth hook)
  • Fixed URLs: ISSUES_URL uses correct bug report template, BMC URL corrected

i18n – 10 Language Support (closes #109)

  • Full i18n infrastructure using
    eact-i18next with detectLocale() and changeLanguage()
  • LanguageSelector component with flag-icons, localStorage persistence, instant switch
  • 10 language bundles: en, de, fr, it, es, nl, pt-BR, ja, pl, sv
  • All UI strings externalized (components, pages, wizard steps, error messages)
  • ADR

@scheilch scheilch self-assigned this May 2, 2026
- fix(a11y): add onKeyDown + tabIndex=0 to LanguageSelector option <li>
  Fixes SonarCloud bug: 'Visible non-interactive element with click
  handler must have keyboard listener' (Reliability B → A)

- test(coverage): add errorMessages.test.ts (covers 23 previously
  uncovered lines across all error pattern branches)

- test(coverage): add WizardSteps3to8.test.tsx smoke tests for
  Steps 3-8 (covers i18n t() calls added in feature branch)

- test(coverage): add keyboard selection tests to LanguageSelector
  (Enter / Space key, tabIndex assertion)

- test(coverage): add localStorage catch-block tests to i18n.test.ts
  (detectLocale + changeLanguage error paths)

- test(coverage): add translation key parity tests for es, nl, pt-BR,
  ja, pl, sv locales

- test(backend): add test_logs_routes.py for GET /api/logs/backend
  (200, plain-text, content-disposition, empty-buffer placeholder)

Coverage: 64.4% → target ≥80% | Tests: 540 → 601 frontend, 1164 backend
- fix(db): set PRAGMA journal_mode=WAL and busy_timeout=5000 in
  BaseRepository.initialize() to prevent SQLITE_BUSY errors under
  concurrent access (regression test test_wal_mode_enabled)

- docs(openapi): add /api/bug-report POST path and BugReportRequest /
  BugReportResponse schemas to openapi.yaml (contract test
  test_yaml_has_all_live_paths)
…ection

get_log_entries() returns a plain list; replace .get_entries() method call
with [-100:] slice. Also includes black-formatted client_adapter.py.
…ex check

Use '# fmt: skip' so black does not wrap the asyncio.to_thread() call
across multiple lines. The regression test test_all_bose_methods_use_to_thread
uses re.search() which requires the pattern 'asyncio.to_thread(self._client.X'
to appear on a single line.
The sonar job in ci.yml must run on PRs to analyze coverage and upload
results to SonarCloud. Without pull_request trigger, SonarCloud has no
analysis for the PR commit and the quality gate status remains pending,
blocking the PR merge.
The sonar job downloads 'backend-coverage' and 'frontend-coverage' artifacts
and expects coverage.xml and lcov.info respectively. The previous upload steps
only saved JSON summary files, so SonarCloud had no coverage data and could
not calculate new-code coverage (resulting in stale 64.4% from old analysis).

Fix: include the actual coverage report files in the uploaded artifacts.
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 2, 2026

@scheilch scheilch merged commit 1d2904f into main May 2, 2026
10 checks passed
@scheilch scheilch deleted the feature/i18n-about-section branch May 2, 2026 23:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants