feat: Phase 0 – Gerüst (FastAPI+SQLite, Multi-User-Login, React-App-Shell, Deploy)
Grundgerüst für Certain Finance: - Backend: FastAPI + SQLAlchemy + SQLite, Alembic-Migrationen (Batch-Mode), argon2-Passwort-Hashing, server-seitige Sitzungen im Cookie, Erst-Admin, Benutzerverwaltung mit Temporär-Passwort, Einstellungen je Benutzer. - Ein Prozess, ein Port: uvicorn liefert API (/api) und gebautes SPA aus, inkl. SPA-Deeplink-Fallback. - Frontend: React 18 + Vite + JSX, Design-Tokens (Light/Dark), i18n DE/EN, Inline-SVG-Icons (keine Emojis), Login, Passwort-ändern, Dashboard-Platzhalter, Benutzer- und Einstellungsseiten. - Deploy: nativer LXC-Installer + Update-Skript (systemd), env-Vorlage, Doku. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"common": {
|
||||
"save": "Speichern",
|
||||
"cancel": "Abbrechen",
|
||||
"delete": "Löschen",
|
||||
"create": "Anlegen",
|
||||
"edit": "Bearbeiten",
|
||||
"loading": "Lädt…",
|
||||
"logout": "Abmelden",
|
||||
"admin": "Administrator",
|
||||
"user": "Benutzer",
|
||||
"close": "Schließen",
|
||||
"retry": "Erneut versuchen",
|
||||
"actions": "Aktionen"
|
||||
},
|
||||
"nav": {
|
||||
"overview": "Übersicht",
|
||||
"accounts": "Konten",
|
||||
"categories": "Kategorien",
|
||||
"transactions": "Buchungen",
|
||||
"budget": "Budget",
|
||||
"import": "Import",
|
||||
"system": "System",
|
||||
"users": "Benutzer",
|
||||
"settings": "Einstellungen"
|
||||
},
|
||||
"login": {
|
||||
"subtitle": "Bitte anmelden",
|
||||
"username": "Benutzername",
|
||||
"password": "Passwort",
|
||||
"submit": "Anmelden",
|
||||
"error": "Benutzername oder Passwort falsch",
|
||||
"expired": "Deine Sitzung ist abgelaufen. Bitte erneut anmelden."
|
||||
},
|
||||
"changepw": {
|
||||
"title": "Passwort ändern",
|
||||
"forcedHint": "Bitte lege ein eigenes Passwort fest, bevor du fortfährst.",
|
||||
"current": "Aktuelles Passwort",
|
||||
"new": "Neues Passwort",
|
||||
"repeat": "Neues Passwort wiederholen",
|
||||
"submit": "Passwort speichern",
|
||||
"mismatch": "Die neuen Passwörter stimmen nicht überein.",
|
||||
"saved": "Passwort geändert."
|
||||
},
|
||||
"users": {
|
||||
"title": "Benutzer",
|
||||
"new": "Neuer Benutzer",
|
||||
"username": "Benutzername",
|
||||
"displayName": "Anzeigename",
|
||||
"password": "Temporär-Passwort",
|
||||
"passwordHint": "Der Benutzer wird beim ersten Login zum Ändern aufgefordert.",
|
||||
"role": "Rolle",
|
||||
"status": "Status",
|
||||
"active": "Aktiv",
|
||||
"inactive": "Deaktiviert",
|
||||
"resetPassword": "Passwort zurücksetzen",
|
||||
"deleteConfirm": "Diesen Benutzer wirklich löschen?",
|
||||
"created": "Benutzer angelegt.",
|
||||
"you": "(du)"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Einstellungen",
|
||||
"baseCurrency": "Hauptwährung",
|
||||
"baseCurrencyHint": "Währung für Budget-Summen und Dashboard-Gesamtwerte.",
|
||||
"locale": "Sprache",
|
||||
"theme": "Darstellung",
|
||||
"themeSystem": "Automatisch (System)",
|
||||
"themeLight": "Hell",
|
||||
"themeDark": "Dunkel",
|
||||
"budgetStartDay": "Budget-Monat beginnt am",
|
||||
"budgetStartDayHint": "Tag, an dem dein Budget-Monat startet (z. B. 25.).",
|
||||
"dateFormat": "Datumsformat",
|
||||
"saved": "Gespeichert.",
|
||||
"languageDe": "Deutsch",
|
||||
"languageEn": "Englisch"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Übersicht",
|
||||
"empty": "Noch keine Karten. Das Dashboard wird in einer späteren Phase ausgebaut."
|
||||
},
|
||||
"server": {
|
||||
"unreachable": "Server nicht erreichbar.",
|
||||
"sessionKept": "Deine Anmeldung ist noch gültig – sobald der Server wieder antwortet, geht es weiter."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user