feat(i18n): add internationalization with DE, FR, ES, PT translations #12

Merged
sharang merged 5 commits from feat/i18n into main 2026-02-22 16:48:52 +00:00

5 Commits

Author SHA1 Message Date
Sharang Parnerkar
59bcb1204b fix(ci): remove actions/cache steps that require Node.js
All checks were successful
CI / Format (push) Successful in 3s
CI / Clippy (pull_request) Successful in 3m7s
CI / Clippy (push) Successful in 3m12s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Successful in 2s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Deploy (push) Has been skipped
CI / Deploy (pull_request) Has been skipped
The rust:1.89-bookworm container does not include Node.js, causing
actions/cache@v4 to fail with "exec: node: not found". Removed all
cache action steps. sccache still provides intra-job deduplication
when compiling both --features server and --features web.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 17:39:25 +01:00
Sharang Parnerkar
3d0fd3469b style: apply cargo fmt to sidebar component
Some checks failed
CI / Format (push) Successful in 3s
CI / Clippy (push) Failing after 4s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Successful in 3s
CI / Clippy (pull_request) Failing after 4s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Deploy (push) Has been skipped
CI / Deploy (pull_request) Has been skipped
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 17:29:49 +01:00
Sharang Parnerkar
c12ca950e1 feat(ui): add responsive mobile layout with hamburger menu
Some checks failed
CI / Format (push) Failing after 3s
CI / Clippy (push) Failing after 4s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Failing after 3s
CI / Clippy (pull_request) Failing after 4s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Deploy (push) Has been skipped
CI / Deploy (pull_request) Has been skipped
Add three responsive breakpoints (1024px, 768px, 480px) to make the
dashboard fully usable on tablets and phones. The sidebar now slides
in as an overlay on mobile with a hamburger toggle in a fixed header bar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 17:25:30 +01:00
Sharang Parnerkar
456976c494 build: add sccache for faster local and CI builds
Some checks failed
CI / Format (push) Successful in 4s
CI / Clippy (push) Failing after 40s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Successful in 3s
CI / Clippy (pull_request) Failing after 4s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Deploy (push) Has been skipped
CI / Deploy (pull_request) Has been skipped
- Add .cargo/config.toml with rustc-wrapper = sccache for local caching
- Install sccache in CI clippy/test jobs via prebuilt musl binary
- Add actions/cache to persist sccache dir across CI runs (keyed by Cargo.lock)
- Add BuildKit cache mounts in Dockerfile for sccache across Docker builds
- Disable sccache for fmt/audit jobs where it adds no value

Local clean-rebuild speedup: 1m58s -> 34s (3.4x) with warm cache.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 13:34:08 +01:00
Sharang Parnerkar
007c7e2686 feat(i18n): add internationalization with DE, FR, ES, PT translations
All checks were successful
CI / Format (push) Successful in 30s
CI / Clippy (push) Successful in 2m36s
CI / Security Audit (push) Has been skipped
CI / Tests (push) Has been skipped
CI / Format (pull_request) Successful in 3s
CI / Clippy (pull_request) Successful in 2m15s
CI / Security Audit (pull_request) Has been skipped
CI / Tests (pull_request) Has been skipped
CI / Deploy (push) Has been skipped
CI / Deploy (pull_request) Has been skipped
Add a compile-time i18n system with 270 translation keys across 5 locales
(EN, DE, FR, ES, PT). Translations are embedded via include_str! and parsed
lazily into flat HashMaps with English fallback for missing keys.

- Add src/i18n module with Locale enum, t()/tw() lookup functions, and tests
- Add JSON translation files for all 5 locales under assets/i18n/
- Provide locale Signal via Dioxus context in App, persisted to localStorage
- Replace all hardcoded UI strings across 33 component/page files
- Add compact locale picker (globe icon + ISO alpha-2 code) in sidebar header
- Add click-outside backdrop dismissal for locale dropdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 12:39:17 +01:00