{ "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." }, "consent": { "title": "Datenschutz-Einwilligung", "dataProcessing": "Datenverarbeitung", "dataProcessingDesc": "Ich willige ein, dass meine personenbezogenen Daten (Name, E-Mail, Geburtsdatum, Ausgabe-Historie) zum Zweck der Vereinsverwaltung verarbeitet werden. Rechtsgrundlage: Art. 6 Abs. 1 lit. a DSGVO.", "marketing": "Marketing-Benachrichtigungen", "marketingDesc": "Ich möchte über neue Funktionen und Angebote informiert werden.", "accept": "Ich stimme zu", "reject": "Ablehnen und Konto löschen", "required": "Erforderlich", "revoke": "Einwilligung widerrufen", "revokeWarning": "Ohne Einwilligung zur Datenverarbeitung kann der Dienst nicht genutzt werden.", "granted": "Erteilt am", "revoked": "Widerrufen" }, "dsgvo": { "title": "Datenschutz", "export": "Meine Daten exportieren", "exportDesc": "Laden Sie alle über Sie gespeicherten Daten als JSON-Datei herunter (Art. 15 DSGVO).", "exportButton": "Daten herunterladen", "exporting": "Daten werden zusammengestellt...", "exported": "Datenexport heruntergeladen.", "delete": "Konto und Daten löschen", "deleteDesc": "Alle personenbezogenen Daten werden unwiderruflich gelöscht oder anonymisiert (Art. 17 DSGVO). Ausgabe-Daten bleiben anonymisiert erhalten (gesetzliche Aufbewahrungspflicht).", "deleteButton": "Konto endgültig löschen", "deleteConfirm": "Bist du sicher? Diese Aktion kann nicht rückgängig gemacht werden.", "deleteSuccess": "Dein Konto wurde gelöscht. Du wirst jetzt abgemeldet." }, "billing": { "title": "Plan & Abrechnung", "currentPlan": "Aktueller Plan", "trial": "Testphase", "starter": "Starter", "pro": "Pro", "enterprise": "Enterprise", "trialEnds": "Testphase endet am {date}", "trialExpired": "Deine Testphase ist abgelaufen. Wähle einen Plan, um fortzufahren.", "trialDaysLeft": "{days} Tage verbleibend", "memberLimit": "Mitglieder-Limit", "membersUsed": "{used} / {limit} Mitglieder", "price": "{price}/Monat", "nextBilling": "Nächste Abrechnung", "upgrade": "Plan upgraden", "manageBilling": "Zahlungsdetails verwalten", "invoices": "Rechnungen", "noInvoices": "Noch keine Rechnungen.", "starterDesc": "Für kleine Vereine bis 30 Mitglieder", "proDesc": "Für wachsende Vereine bis 100 Mitglieder", "enterpriseDesc": "Für große Vereine — unbegrenzte Mitglieder", "starterPrice": "€19", "proPrice": "€49", "enterprisePrice": "Auf Anfrage", "selectPlan": "Plan wählen", "active": "Aktiv", "pastDue": "Zahlung ausstehend", "canceled": "Gekündigt" }, "audit": { "title": "Audit-Protokoll", "subtitle": "Unveränderliches Protokoll aller Vorgänge (10 Jahre Aufbewahrung)", "timestamp": "Zeitstempel", "type": "Typ", "description": "Beschreibung", "actor": "Akteur", "entity": "Objekt", "filterType": "Ereignistyp filtern", "filterDateFrom": "Von", "filterDateTo": "Bis", "filterActor": "Akteur suchen", "exportPdf": "Als PDF exportieren", "exporting": "PDF wird generiert...", "exported": "Audit-Protokoll exportiert.", "allTypes": "Alle Typen", "immutable": "Unveränderbar", "timezone": "Europe/Berlin", "retentionNote": "Aufbewahrungsfrist: 10 Jahre (KCanG-konform)", "types": { "DISTRIBUTION_RECORDED": "Ausgabe erfasst", "DISTRIBUTION_VOIDED": "Ausgabe storniert", "MEMBER_CREATED": "Mitglied angelegt", "MEMBER_UPDATED": "Mitglied aktualisiert", "MEMBER_SUSPENDED": "Mitglied gesperrt", "MEMBER_EXPELLED": "Mitglied ausgeschlossen", "BATCH_CREATED": "Charge angelegt", "BATCH_RECALLED": "Charge zurückgerufen", "LOGIN_SUCCESS": "Anmeldung", "LOGIN_FAILED": "Fehlgeschlagene Anmeldung", "LOGOUT": "Abmeldung", "PASSWORD_CHANGED": "Passwort geändert", "STAFF_INVITED": "Mitarbeiter eingeladen", "STAFF_PERMISSIONS_CHANGED": "Berechtigungen geändert", "STAFF_REVOKED": "Zugang entzogen", "CONSENT_GRANTED": "Einwilligung erteilt", "CONSENT_REVOKED": "Einwilligung widerrufen", "DATA_EXPORTED": "Daten exportiert", "DATA_DELETED": "Daten gelöscht", "SUBSCRIPTION_STARTED": "Abo gestartet", "SUBSCRIPTION_CANCELED": "Abo gekündigt", "PAYMENT_RECEIVED": "Zahlung erhalten", "PAYMENT_FAILED": "Zahlung fehlgeschlagen" } }, "grow": { "title": "Anbau-Kalender", "newGrow": "Neuen Anbau starten", "name": "Anbau-Name", "strain": "Sorte", "stage": "Phase", "startedAt": "Gestartet am", "expectedHarvest": "Erwartete Ernte", "daysInStage": "Tage in Phase", "stages": { "SEEDLING": "Sämling", "VEGETATIVE": "Vegetativ", "FLOWERING": "Blüte", "HARVEST": "Ernte", "DRYING": "Trocknung", "CURING": "Fermentierung", "COMPLETE": "Abgeschlossen" }, "advanceStage": "Nächste Phase", "completeHarvest": "Ernte abschließen", "harvestGrams": "Erntemenge (g)", "linkBatch": "Mit Charge verknüpfen", "sensors": "Sensordaten", "addReading": "Messwert hinzufügen", "temperature": "Temperatur", "humidity": "Luftfeuchtigkeit", "co2": "CO₂", "ph": "pH-Wert", "ec": "EC-Wert", "photos": "Fotos", "addPhoto": "Foto hinzufügen", "caption": "Beschriftung", "feeding": "Düngung", "addFeeding": "Düngung hinzufügen", "nutrient": "Nährstoff", "amountMl": "Menge (ml)", "waterLiters": "Wasser (L)", "phAfter": "pH danach", "ecAfter": "EC danach", "timeline": "Verlauf", "noGrows": "Noch keine Anbau-Einträge.", "created": "Anbau gestartet.", "stageAdvanced": "Phase gewechselt zu {stage}.", "harvestComplete": "Ernte abgeschlossen — {grams}g verknüpft mit Charge." } }