<#1041 Complete i18n: translate all feature pages ...
# osctrl
g
#1041 Complete i18n: translate all feature pages across 13 languages Pull request opened by javuto Complete i18n: translate all feature pages across 13 languages Problem Phases 1–4 established the i18n infrastructure, chrome, page titles, and locale formatting, but all feature-page content (~670 strings across 30+ files) remained hardcoded English. Change • Every feature page translated: nodes (table, detail, console, file explorer, alert modal), dashboard (KPIs with interpolated values, workload cards, endpoint health, environments table, error dialog), queries (list, detail, run, no-code builder, options, targeting), carves, users, profile/MFA, environments/config, alerts, log sinks, auth providers, audit, enrollment, tags, saved queries, settings, and service config — including hints, placeholders, bulk-action labels, empty states, and apply/confirm dialogs. • New catalog namespaces organized per feature (
nodesTable
,
dashboardExt
,
queriesPage
,
noCode
,
enrollPage
, …) plus a shared
commonExt
namespace for repeated strings (Refresh, Clear filters, Rows per page, status enums, expiration options). Two unused leftover namespaces were removed. • 13 complete catalogs — 671 keys each for en/es/fr/de/pt/ca/it/nl/ja/ko/zh/pl/ru, written in full with ICU plurals (Russian and Polish use complete one/few/many/other categories) and interpolated values. The typed key contract and the catalog-parity test enforce completeness: a missing key in any language fails
tsc
and the test suite. • Refactors required by translation: hooks added to ~30 sub-components (tables, modals, badge helpers); loop variables shadowing the i18n
t
function renamed (alerts tabs, enrollment platform tabs, provider type lookups); status-tab label arrays converted to functions of
t
. Validation •
npm run check
— clean (0 errors) •
npm test
— 362/362 passed, including 13-language catalog parity • 4 test assertions updated where localized text changed accessible names (tab selectors by role, column-header scoping) •
npm run build
— 12 lazy locale chunks (9.7–11.6 KB gz each), English bundled in the main chunk; no other bundle changes Security/operational impact Frontend-only; no backend, auth, or API contract changes. Self-hosted chunks respect the existing CSP. Status The frontend is now fully multilingual end-to-end: infrastructure, chrome, navigation, login, command palette, page titles, time/number/ date formatting, and all feature-page content across 13 languages. Follow-up (optional, separate PR): backend
PreferredLanguage
column for cross-device sync. jmpsec/osctrl