feat(i18n): translate small editor remates + admin internals (Blocks 11+12)
Block 11 — small editor surfaces
- PinPickerDialog: close, filter pins, no-match, rotate / delete
action buttons.
- RaspberryPiWorkspace: connection status (Connected / Starting…
/ Offline), Start Pi button + tooltip, Connect / Disconnect
buttons + tooltips, Terminal tab label, file-tab close, the
full offline overlay (title / subtitle / start CTA / two-line
note about the staging area), terminal-loading + no-file-
selected fallbacks.
- GitHubStarBanner: aria-label, title, body copy, Star CTA,
dismiss button.
- ExampleLoaderPage: "Loading example…" status, "Example {{id}}
not found." 404 line, "Browse all examples" recovery link.
/editor and /examples links wrapped in localize().
Block 12 — admin-only internals (only admins ever see these)
- AdminBoardsTab: section headings ("By board family" / "By
exact FQBN"), full table column headers (Family / FQBN /
Compiles / Errors / Success rate / Runs / Distinct users /
Distinct projects), range selector label, no-data fallback,
load-failed error.
- AdminDashboardTab: 8 KPI cards (Total users / Total projects
/ Compiles / Runs / DAU / WAU / MAU / Public-Private), all
chart titles + subtitles (Activity over time, Compiles by
board family, Board diversity for pricing signal, Top FQBNs,
Top countries with Cloudflare disclaimer, Top users / Top
projects), table column headers, no-data fallbacks, load
errors. Pluralised "{{count}} board(s)" via i18next plurals
in the diversity pie chart.
- UserActivityModal: title with username interpolation, subtitle,
range selector label, table column headers (Date / Project /
Compiles / Errors / Runs / Saves), pluralised
"{{count}} project(s)" line, deleted-project / no-project
placeholder strings, no-activity empty state, load-failed.
All 8 non-English locales auto-translated via the
`scripts/translate-i18n.mjs` DeepSeek pipeline (one --force run,
~7 min). sameShape() validation passed on every output.