|
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> |
|---|
|
|
| README.md |
|---|
| panel/backend/app/api/auth_routes.py |
|---|
| panel/backend/app/auth.py |
|---|
| panel/backend/app/locales.py 0 → 100644 |
|---|
| panel/backend/app/schema.sql |
|---|
| panel/frontend/index.html |
|---|
| panel/frontend/src/App.vue |
|---|
| panel/frontend/src/api.js |
|---|
| panel/frontend/src/components/ServerCard.vue |
|---|
| panel/frontend/src/format.js |
|---|
| panel/frontend/src/i18n/index.js 0 → 100644 |
|---|
| panel/frontend/src/i18n/messages/en.js 0 → 100644 |
|---|
| panel/frontend/src/i18n/messages/ru.js 0 → 100644 |
|---|
| panel/frontend/src/i18n/messages/uk.js 0 → 100644 |
|---|
| panel/frontend/src/pages/DashboardPage.vue |
|---|
| panel/frontend/src/pages/ServerPage.vue |
|---|
| panel/frontend/src/pages/SettingsPage.vue 0 → 100644 |
|---|
| panel/frontend/src/pages/StoragePage.vue |
|---|
| panel/frontend/src/router.js |
|---|