{
  "common": {
    "appName": "CannaManage",
    "loading": "Laden...",
    "save": "Speichern",
    "cancel": "Abbrechen",
    "delete": "Löschen",
    "edit": "Bearbeiten",
    "create": "Erstellen",
    "search": "Suchen",
    "filter": "Filtern",
    "export": "Exportieren",
    "back": "Zurück",
    "next": "Weiter",
    "confirm": "Bestätigen",
    "yes": "Ja",
    "no": "Nein",
    "noData": "Keine Daten vorhanden"
  },
  "nav": {
    "dashboard": "Dashboard",
    "members": "Mitglieder",
    "stock": "Bestand",
    "distributions": "Ausgaben",
    "compliance": "Compliance",
    "reports": "Berichte",
    "settings": "Einstellungen",
    "staff": "Personal",
    "portal": "Mitgliederportal"
  },
  "auth": {
    "login": "Anmelden",
    "logout": "Abmelden",
    "email": "E-Mail-Adresse",
    "password": "Passwort",
    "forgotPassword": "Passwort vergessen?",
    "resetPassword": "Passwort zurücksetzen",
    "loginButton": "Anmelden",
    "loggingIn": "Wird angemeldet...",
    "loginSubtitle": "Melde dich bei deinem Anbauverein an",
    "invalidCredentials": "Ungültige E-Mail-Adresse oder Passwort.",
    "networkError": "Verbindungsfehler. Bitte versuche es erneut.",
    "sessionExpired": "Deine Sitzung ist abgelaufen. Bitte melde dich erneut an.",
    "emailInvalid": "Bitte gib eine gültige E-Mail-Adresse ein.",
    "passwordRequired": "Bitte gib dein Passwort ein.",
    "passwordTooShort": "Passwort muss mindestens 8 Zeichen lang sein.",
    "footerText": "Sichere Verwaltung für deinen Cannabis-Anbauverein"
  },
  "dashboard": {
    "title": "Dashboard",
    "activeMembers": "Aktive Mitglieder",
    "distributionsToday": "Ausgaben heute",
    "stockLevel": "Lagerbestand",
    "monthlyQuota": "Monatliches Kontingent",
    "quickActions": "Schnellaktionen",
    "newDistribution": "Neue Ausgabe",
    "addMember": "Mitglied hinzufügen",
    "recentDistributions": "Letzte Ausgaben",
    "stockByStrain": "Bestand nach Sorte",
    "date": "Datum",
    "member": "Mitglied",
    "strain": "Sorte",
    "amount": "Menge (g)",
    "staff": "Personal",
    "grams": "g",
    "today": "Heute",
    "trend": "+{value}% ggü. Vormonat",
    "quotaUsed": "{value}% verbraucht",
    "distributionCount": "{count} Ausgaben, {grams}g"
  },
  "members": {
    "title": "Mitgliederverwaltung",
    "addMember": "Mitglied hinzufügen",
    "name": "Name",
    "email": "E-Mail",
    "status": "Status",
    "memberSince": "Mitglied seit",
    "quota": "Kontingent",
    "actions": "Aktionen",
    "edit": "Bearbeiten",
    "active": "Aktiv",
    "suspended": "Gesperrt",
    "expelled": "Ausgeschlossen",
    "back": "Zurück zur Liste",
    "save": "Speichern",
    "create": "Mitglied anlegen",
    "firstName": "Vorname",
    "lastName": "Nachname",
    "dateOfBirth": "Geburtsdatum",
    "phone": "Telefon",
    "memberNumber": "Mitgliedsnummer",
    "joinedAt": "Beitrittsdatum",
    "notes": "Notizen",
    "notesPlaceholder": "Optionale Anmerkungen zum Mitglied...",
    "under21Warning": "Unter 21 — reduziertes Kontingent (30g/Monat)",
    "ageError": "Mitglieder müssen mindestens 18 Jahre alt sein.",
    "saved": "Änderungen gespeichert.",
    "created": "Mitglied erfolgreich angelegt.",
    "search": "Name oder E-Mail suchen...",
    "perPage": "Pro Seite",
    "showing": "{from}–{to} von {total}",
    "previous": "Zurück",
    "next": "Weiter",
    "noResults": "Keine Mitglieder gefunden.",
    "notFound": "Mitglied nicht gefunden.",
    "personalInfo": "Persönliche Daten",
    "membershipInfo": "Mitgliedschaft"
  },
  "stock": {
    "title": "Lager & Chargen",
    "newBatch": "Neue Charge",
    "stockOverview": "Bestandsübersicht",
    "batchId": "Chargen-ID",
    "strain": "Sorte",
    "thc": "THC %",
    "cbd": "CBD %",
    "status": "Status",
    "available": "Verfügbar",
    "availableGrams": "Verfügbar (g)",
    "receivedAt": "Eingangsdatum",
    "actions": "Aktionen",
    "statusAvailable": "Verfügbar",
    "statusRecalled": "Rückruf",
    "statusDepleted": "Aufgebraucht",
    "recall": "Rückruf",
    "recallConfirm": "Charge wirklich zurückrufen? Alle offenen Ausgaben mit dieser Charge werden blockiert.",
    "recallTitle": "Charge zurückrufen",
    "recallSuccess": "Charge zurückgerufen.",
    "totalBatches": "Chargen gesamt",
    "availableStock": "Verfügbarer Bestand",
    "recalledBatches": "Zurückgerufene Chargen",
    "strainCount": "Sorten",
    "filterAll": "Alle",
    "filterAvailable": "Nur verfügbar",
    "filterRecalled": "Nur Rückrufe",
    "addBatch": "Charge anlegen",
    "strainName": "Sortenname",
    "amount": "Menge (g)",
    "supplier": "Lieferant / Herkunft",
    "harvestDate": "Erntedatum",
    "notes": "Notizen",
    "notesPlaceholder": "Optionale Bemerkungen zur Charge...",
    "created": "Charge erfolgreich angelegt.",
    "grams": "g",
    "confirmRecall": "Rückruf bestätigen",
    "lowStock": "Niedrig"
  },
  "distributions": {
    "title": "Ausgaben",
    "newDistribution": "Neue Ausgabe",
    "todaySummary": "Heute: {count} Ausgaben, {grams}g verteilt",
    "dateTime": "Datum/Uhrzeit",
    "member": "Mitglied",
    "strain": "Sorte",
    "amount": "Menge (g)",
    "staff": "Personal",
    "status": "Status",
    "completed": "Abgeschlossen",
    "locked": "Gesperrt (unveränderbar)",
    "filterToday": "Heute",
    "filterWeek": "Diese Woche",
    "filterMonth": "Diesen Monat",
    "searchMember": "Mitglied suchen...",
    "step1": "Mitglied auswählen",
    "step2": "Kontingent prüfen",
    "step3": "Sorte & Menge",
    "step4": "Bestätigung",
    "selectMember": "Mitglied suchen (Name oder Nummer)...",
    "memberBlocked": "Mitglied ist gesperrt — keine Ausgabe möglich.",
    "under21Info": "Reduziertes Kontingent: 30g/Monat (unter 21)",
    "dailyRemaining": "Tagesrest",
    "monthlyRemaining": "Monatsrest",
    "selectBatch": "Charge auswählen",
    "available": "verfügbar",
    "amountLabel": "Menge in Gramm",
    "exceedsDaily": "Überschreitet das Tageslimit ({limit}g).",
    "exceedsMonthly": "Überschreitet das Monatslimit ({limit}g).",
    "exceedsBatch": "Nicht genügend Bestand in dieser Charge.",
    "confirm": "Ausgabe bestätigen",
    "summary": "Zusammenfassung",
    "success": "Ausgabe erfolgreich erfasst.",
    "grams": "g",
    "date": "Datum",
    "monthlyQuota": "Monatsquote",
    "remaining": "Verbleibend"
  },
  "reports": {
    "title": "Berichte",
    "monthly": "Monatsbericht",
    "monthlyDesc": "Übersicht aller Ausgaben im gewählten Monat, inkl. Mitglieder-Kontingente und Lagerveränderungen.",
    "memberList": "Mitgliederliste",
    "memberListDesc": "Vollständige Mitgliederliste mit Status, Kontingent-Auslastung und Kontaktdaten.",
    "recall": "Rückruf-Bericht",
    "recallDesc": "Alle Chargen mit Rückruf-Status und betroffene Ausgaben für Behörden-Meldung.",
    "downloadPdf": "Als PDF herunterladen",
    "downloadCsv": "Als CSV herunterladen",
    "preview": "Vorschau anzeigen",
    "generating": "Bericht wird generiert...",
    "downloaded": "{name} heruntergeladen.",
    "selectMonth": "Monat wählen",
    "selectStatus": "Status filtern",
    "allStatuses": "Alle",
    "activeOnly": "Aktiv",
    "suspendedOnly": "Gesperrt",
    "dateFrom": "Von",
    "dateTo": "Bis",
    "previewTitle": "Berichts-Vorschau",
    "totalDistributions": "Ausgaben gesamt",
    "totalGrams": "Gramm gesamt",
    "uniqueMembers": "Verschiedene Mitglieder",
    "averagePerMember": "Ø pro Mitglied",
    "topStrains": "Top-Sorten",
    "affectedDistributions": "Betroffene Ausgaben",
    "affectedMembers": "Betroffene Mitglieder",
    "recalledBatches": "Zurückgerufene Chargen",
    "close": "Schließen",
    "complianceNote": "Dieser Bericht ist für die Vorlage bei der zuständigen Behörde geeignet.",
    "complianceBadge": "§19 KCanG konform",
    "auditTrail": "Alle Berichte werden mit Zeitstempel generiert. Die zugrunde liegenden Ausgabe-Daten sind unveränderbar (Audit-Trail).",
    "memberNumber": "Nr.",
    "name": "Name",
    "status": "Status",
    "joinedAt": "Beitritt",
    "usage": "Verbrauch",
    "strain": "Sorte",
    "grams": "Gramm",
    "percent": "Anteil",
    "batchId": "Chargen-ID",
    "recalledAt": "Rückruf am",
    "reason": "Grund",
    "distributed": "Verteilt",
    "original": "Original"
  },
  "portal": {
    "title": "Mein Bereich",
    "login": "Mitglieder-Login",
    "loginSubtitle": "Melde dich im Mitgliederportal an",
    "email": "E-Mail-Adresse",
    "password": "Passwort",
    "loginButton": "Anmelden",
    "loggingIn": "Wird angemeldet...",
    "invalidCredentials": "Ungültige E-Mail-Adresse oder Passwort.",
    "networkError": "Verbindungsfehler. Bitte versuche es erneut.",
    "welcome": "Willkommen zurück, {name}!",
    "dashboard": "Übersicht",
    "quota": "Mein Kontingent",
    "history": "Ausgabe-Verlauf",
    "profile": "Profil",
    "settings": "Einstellungen",
    "logout": "Abmelden",
    "dailyQuota": "Tageskontingent",
    "monthlyQuota": "Monatskontingent",
    "remaining": "verbleibend",
    "used": "verbraucht",
    "of": "von",
    "lastDistribution": "Letzte Ausgabe",
    "noDistributions": "Noch keine Ausgaben in diesem Monat.",
    "memberSince": "Mitglied seit",
    "memberNumber": "Mitgliedsnummer",
    "nextAvailable": "Nächste Verfügbarkeit",
    "nextAvailableTomorrow": "Morgen ab 00:00 Uhr",
    "changePassword": "Passwort ändern",
    "currentPassword": "Aktuelles Passwort",
    "newPassword": "Neues Passwort",
    "confirmPassword": "Passwort bestätigen",
    "passwordChanged": "Passwort erfolgreich geändert.",
    "passwordMismatch": "Passwörter stimmen nicht überein.",
    "club": "Mein Verein",
    "quotaWarning": "Achtung: Du hast bereits {percent}% deines Monatskontingents verbraucht.",
    "under21Notice": "Für Mitglieder unter 21: Reduziertes Kontingent von 30g/Monat (§19 Abs. 3 KCanG).",
    "grams": "g",
    "date": "Datum",
    "strain": "Sorte",
    "amount": "Menge",
    "recordedBy": "Ausgegeben von",
    "noHistory": "Noch keine Ausgaben vorhanden.",
    "personalInfo": "Persönliche Daten",
    "language": "Sprache",
    "theme": "Design",
    "themeLight": "Hell",
    "themeDark": "Dunkel",
    "themeSystem": "System",
    "german": "Deutsch",
    "english": "Englisch",
    "quickInfo": "Kurzinfo",
    "todayAvailable": "Heute noch verfügbar",
    "monthAvailable": "Diesen Monat noch verfügbar",
    "limitReached": "Limit erreicht",
    "pagination": "{from}–{to} von {total}",
    "previous": "Zurück",
    "next": "Weiter",
    "allMonths": "Alle Monate",
    "footerText": "Cannabis-Anbauverein — Sichere Mitgliederverwaltung",
    "adminLogin": "Zum Admin-Login"
  },
  "staff": {
    "title": "Personal",
    "invite": "Neues Mitglied einladen",
    "name": "Name",
    "email": "E-Mail",
    "role": "Rolle",
    "permissions": "Berechtigungen",
    "status": "Status",
    "actions": "Aktionen",
    "active": "Aktiv",
    "revoked": "Widerrufen",
    "invited": "Eingeladen",
    "editPermissions": "Berechtigungen bearbeiten",
    "revokeAccess": "Zugang widerrufen",
    "revokeConfirm": "Zugang für {name} wirklich widerrufen? Der Mitarbeiter kann sich nicht mehr anmelden.",
    "revokeSuccess": "Zugang widerrufen.",
    "inviteTitle": "Mitarbeiter einladen",
    "inviteDesc": "Neues Teammitglied per E-Mail einladen und Berechtigungen zuweisen.",
    "inviteEmail": "E-Mail-Adresse",
    "inviteRole": "Rollenvorlage",
    "roleAusgabe": "Ausgabe",
    "roleLager": "Lager",
    "roleVorstand": "Vorstand",
    "roleCustom": "Benutzerdefiniert",
    "inviteSend": "Einladung senden",
    "inviteSuccess": "Einladung an {email} gesendet.",
    "permRecordDistribution": "Ausgabe erfassen",
    "permViewMemberList": "Mitgliederliste einsehen",
    "permViewMemberQuota": "Kontingent einsehen",
    "permAddMember": "Mitglieder anlegen",
    "permViewStock": "Lager einsehen",
    "permRecordStockIn": "Wareneingang",
    "permViewComplianceReport": "Berichte einsehen",
    "permManageGrowCalendar": "Anbaukalender verwalten",
    "savePermissions": "Speichern",
    "permissionsSaved": "Berechtigungen aktualisiert.",
    "cancel": "Abbrechen",
    "noStaff": "Noch keine Mitarbeiter vorhanden."
  },
  "api": {
    "loading": "Wird geladen...",
    "error": "Fehler beim Laden der Daten.",
    "retry": "Erneut versuchen",
    "offline": "Keine Verbindung zum Server — Daten könnten veraltet sein.",
    "networkError": "Netzwerkfehler. Bitte prüfe deine Verbindung.",
    "unauthorized": "Sitzung abgelaufen. Bitte erneut anmelden.",
    "forbidden": "Keine Berechtigung für diese Aktion.",
    "notFound": "Ressource nicht gefunden.",
    "quotaExceeded": "Kontingent überschritten.",
    "serverError": "Serverfehler. Bitte versuche es später erneut."
  }
}
