feat: settings section + i18n (en/uk/ru) for the whole UI
Language comes from the gnexus-auth account profile by default; Settings
now hosts a per-service override that survives logouts and profile-webhook
syncs (users table keeps profile JSON verbatim, override in a separate
column that the upsert never touches). Open mode stores the choice in
localStorage.

- backend: users table (zero-migration, IF NOT EXISTS), app/locales.py
  (normalize_locale/effective_locale), users upsert on session create and
  user.updated webhook, GET /me returns locale + locale_effective,
  new PATCH /api/v1/me (cookie-session only; 'auto'/'""' clears override)
- frontend: hand-rolled i18n mirror of gnexus-creds (locale ref, t() with
  Slavic plurals, EN fallback), full dictionaries (~130 strings), <html
  lang> + <title> tracked via watch; SettingsPage with language picker
  (Auto/en/uk/ru); ServerCard/ServerPage/StoragePage status triple and
  table columns unified into reactive computed t() lookups; fmtAgo/
  fmtUptime localized; nav/login/shell translated; default html lang en

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 9e139bb commit b1a82e25c99c17d472af4277c1ad95985a5e1f94
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 8 hours ago
Showing 19 changed files
View
README.md
View
panel/backend/app/api/auth_routes.py
View
panel/backend/app/auth.py
View
panel/backend/app/locales.py 0 → 100644
View
panel/backend/app/schema.sql
View
panel/frontend/index.html
View
panel/frontend/src/App.vue
View
panel/frontend/src/api.js
View
panel/frontend/src/components/ServerCard.vue
View
panel/frontend/src/format.js
View
panel/frontend/src/i18n/index.js 0 → 100644
View
panel/frontend/src/i18n/messages/en.js 0 → 100644
View
panel/frontend/src/i18n/messages/ru.js 0 → 100644
View
panel/frontend/src/i18n/messages/uk.js 0 → 100644
View
panel/frontend/src/pages/DashboardPage.vue
View
panel/frontend/src/pages/ServerPage.vue
View
panel/frontend/src/pages/SettingsPage.vue 0 → 100644
View
panel/frontend/src/pages/StoragePage.vue
View
panel/frontend/src/router.js