Files
orion/app/modules/loyalty/locales/de.json
Samir Boulahtit f804ff8442
Some checks failed
CI / ruff (push) Successful in 16s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled
fix(loyalty): cross-store enrollment, card scoping, i18n flicker
Fix duplicate card creation when the same email enrolls at different
stores under the same merchant, and implement cross-location-aware
enrollment behavior.

- Cross-location enabled (default): one card per customer per merchant.
  Re-enrolling at another store returns the existing card with a
  "works at all our locations" message + store list.
- Cross-location disabled: one card per customer per store. Enrolling
  at a different store creates a separate card for that store.

Changes:
- Migration loyalty_004: replace (merchant_id, customer_id) unique
  index with (enrolled_at_store_id, customer_id). Per-merchant
  uniqueness enforced at application layer when cross-location enabled.
- card_service.resolve_customer_id: cross-store email lookup via
  merchant_id param to find existing cardholders at other stores.
- card_service.enroll_customer: branch duplicate check on
  allow_cross_location_redemption setting.
- card_service.search_card_for_store: cross-store email search when
  cross-location enabled so staff at store2 can find cards from store1.
- card_service.get_card_by_customer_and_store: new service method.
- storefront enrollment: catch LoyaltyCardAlreadyExistsException,
  return existing card with already_enrolled flag, locations, and
  cross-location context. Server-rendered i18n via Jinja2 tojson.
- enroll-success.html: conditional cross-store/single-store messaging,
  server-rendered translations and context, i18n_modules block added.
- dashboard.html, history.html: replace $t() with server-side _() to
  fix i18n flicker across all storefront templates.
- Fix device-mobile icon → phone icon.
- 4 new i18n keys in 4 locales (en, fr, de, lb).
- Docs: updated data-model, business-logic, production-launch-plan,
  user-journeys with cross-location behavior and E2E test checklist.
- 12 new unit tests + 3 new integration tests (334 total pass).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 18:28:19 +02:00

910 lines
39 KiB
JSON

{
"loyalty": {
"module": {
"name": "Treueprogramme",
"description": "Stempel- und punktebasierte Treueprogramme mit Wallet-Integration"
},
"program": {
"title": "Treueprogramm",
"create": "Programm erstellen",
"edit": "Programm bearbeiten",
"activate": "Aktivieren",
"deactivate": "Deaktivieren",
"type": {
"stamps": "Stempel",
"points": "Punkte",
"hybrid": "Hybrid"
}
},
"card": {
"title": "Treuekarte",
"number": "Kartennummer",
"qr_code": "QR-Code",
"enroll": "Kunde anmelden",
"deactivate": "Karte deaktivieren"
},
"stamp": {
"title": "Stempel",
"add": "Stempel hinzufügen",
"redeem": "Prämie einlösen",
"count": "{current} von {target}",
"until_reward": "Noch {count} bis zur Prämie"
},
"points": {
"title": "Punkte",
"earn": "Punkte sammeln",
"redeem": "Punkte einlösen",
"balance": "{count} Punkte",
"per_euro": "{points} Punkte pro Euro"
},
"pin": {
"title": "Mitarbeiter-PINs",
"create": "PIN erstellen",
"edit": "PIN bearbeiten",
"unlock": "PIN entsperren",
"locked": "PIN gesperrt bis {time}"
},
"wallet": {
"google": "Zu Google Wallet hinzufügen",
"apple": "Zu Apple Wallet hinzufügen"
},
"stats": {
"title": "Statistiken",
"total_cards": "Karten insgesamt",
"active_cards": "Aktive Karten",
"stamps_issued": "Ausgegebene Stempel",
"rewards_redeemed": "Eingelöste Prämien"
},
"errors": {
"program_not_found": "Treueprogramm nicht gefunden",
"program_inactive": "Treueprogramm ist nicht aktiv",
"card_not_found": "Treuekarte nicht gefunden",
"card_inactive": "Treuekarte ist nicht aktiv",
"cooldown": "Bitte warten Sie {minutes} Minuten vor dem nächsten Stempel",
"daily_limit": "Tageslimit von {limit} Stempeln erreicht",
"insufficient_stamps": "Benötigt {required} Stempel, vorhanden {current}",
"insufficient_points": "Benötigt {required} Punkte, vorhanden {current}",
"pin_required": "Mitarbeiter-PIN erforderlich",
"pin_invalid": "Ungültiger PIN",
"pin_locked": "PIN wegen zu vieler Fehlversuche gesperrt"
}
},
"menu": {
"loyalty": "Treueprogramm",
"loyalty_programs": "Treueprogramme",
"programs": "Programme",
"analytics": "Analytik",
"dashboard": "Dashboard",
"terminal": "Terminal",
"customer_cards": "Kundenkarten",
"statistics": "Statistiken",
"program": "Programm",
"overview": "Übersicht",
"settings": "Einstellungen",
"wallet_debug": "Wallet Debug",
"staff_pins": "Mitarbeiter-PINs",
"transactions": "Transaktionen"
},
"permissions": {
"view_programs": "Programme anzeigen",
"view_programs_desc": "Treueprogramme und Details anzeigen",
"manage_programs": "Programme verwalten",
"manage_programs_desc": "Treueprogramme erstellen und konfigurieren",
"view_rewards": "Prämien anzeigen",
"view_rewards_desc": "Prämien und Einlösungen anzeigen",
"manage_rewards": "Prämien verwalten",
"manage_rewards_desc": "Treueprämien erstellen und verwalten"
},
"onboarding": {
"create_program": {
"title": "Treueprogramm erstellen",
"description": "Erstellen Sie Ihr erstes Stempel- oder Punkteprogramm"
}
},
"enrollment": {
"title": "Treten Sie unserem Prämienprogramm bei!",
"subtitle": "Verdienen Sie {points} Punkt pro ausgegebenem EUR",
"not_available_title": "Programm nicht verfügbar",
"not_available_message": "Dieser Shop hat noch kein Treueprogramm eingerichtet.",
"welcome_bonus": "Erhalten Sie {points} Bonuspunkte bei der Anmeldung!",
"already_member": "Bereits Mitglied? Ihre Punkte sind mit Ihrer E-Mail verknüpft.",
"form": {
"email": "E-Mail",
"first_name": "Vorname",
"last_name": "Nachname",
"phone": "Telefon (optional)",
"birthday": "Geburtstag (optional)",
"birthday_hint": "Für besondere Geburtstagsbelohnungen",
"terms_agree": "Ich stimme den",
"terms": "Allgemeinen Geschäftsbedingungen",
"marketing_consent": "Neuigkeiten und Sonderangebote senden",
"joining": "Anmeldung läuft...",
"join_button": "Beitreten & {points} Punkte erhalten"
},
"privacy_policy": "Datenschutzrichtlinie",
"close": "Schließen",
"success": {
"title": "Willkommen!",
"message": "Sie sind jetzt Mitglied unseres Prämienprogramms.",
"card_number": "Ihre Kartennummer",
"wallet_prompt": "Speichern Sie Ihre Karte auf Ihrem Handy für einfachen Zugriff:",
"next_steps_title": "Wie geht es weiter?",
"step_earn": "Zeigen Sie Ihre Kartennummer beim Einkauf, um Punkte zu sammeln",
"step_balance": "Prüfen Sie Ihren Kontostand online oder in der App",
"step_redeem": "Lösen Sie Punkte gegen Prämien an allen unseren Standorten ein",
"view_dashboard": "Mein Treue-Dashboard anzeigen",
"continue_shopping": "Weiter einkaufen"
},
"already_enrolled_title": "Sie sind bereits Mitglied!",
"cross_location_message": "Ihre Karte gilt an allen unseren Standorten:",
"single_location_message": "Ihre Karte ist bei {store_name} registriert",
"available_locations": "Nutzen Sie Ihre Karte an allen unseren Standorten:",
"errors": {
"load_failed": "Programminformationen konnten nicht geladen werden",
"email_exists": "Diese E-Mail ist bereits in unserem Treueprogramm registriert.",
"failed": "Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut."
}
},
"common": {
"active": "Aktiv",
"all_stores": "Alle Filialen",
"at": "bei",
"back": "Zurück",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"continue": "Weiter",
"delete": "Löschen",
"disabled": "Deaktiviert",
"edit": "Bearbeiten",
"enabled": "Aktiviert",
"inactive": "Inaktiv",
"loading": "Laden...",
"minutes": "Minuten",
"never": "Nie",
"no": "Nein",
"none": "Keine",
"or": "oder",
"points": "Punkte",
"program_not_setup": "Treueprogramm nicht eingerichtet",
"program_not_setup_desc": "Bitte richten Sie ein Treueprogramm ein",
"refresh": "Aktualisieren",
"save": "Speichern",
"saving": "Speichern...",
"total": "GESAMT",
"view": "Anzeigen",
"yes": "Ja",
"contact_admin_setup": "Kontaktieren Sie Ihren Administrator um das Treueprogramm einzurichten",
"setup_program": "Programm einrichten",
"unknown": "Unbekannt"
},
"transactions": {
"card_created": "Angemeldet",
"welcome_bonus": "Willkommensbonus",
"stamp_earned": "Stempel erhalten",
"stamp_redeemed": "Stempel eingelöst",
"stamp_voided": "Stempel storniert",
"stamp_adjustment": "Stempel angepasst",
"points_earned": "Punkte verdient",
"points_redeemed": "Punkte eingelöst",
"points_voided": "Punkte storniert",
"points_adjustment": "Punkte angepasst",
"points_expired": "Punkte verfallen",
"card_deactivated": "Deaktiviert",
"reward_redeemed": "Prämie eingelöst"
},
"shared": {
"analytics": {
"total_programs": "Programme insgesamt",
"total_members": "Mitglieder insgesamt",
"active_members": "Aktive Mitglieder",
"points_issued_30d": "Punkte vergeben (30T)",
"transactions_30d": "Transaktionen (30T)",
"x_active": "{count} aktiv",
"points_overview": "Punkteübersicht",
"points_issued_vs_redeemed": "Punkte vergeben vs eingelöst (30T)",
"issued": "Vergeben:",
"redeemed": "Eingelöst:",
"redemption_rate": "Einlösungsrate",
"outstanding_balance": "Ausstehender Saldo",
"member_activity": "Mitgliederaktivität",
"active_members_30d": "Aktive Mitglieder (30T)",
"new_this_month": "Neu diesen Monat",
"merchants_with_programs": "Händler mit Programmen",
"avg_points_per_member": "Durchschn. Punkte pro Mitglied",
"all_time_statistics": "Gesamtstatistiken",
"total_points_issued": "Punkte insgesamt vergeben",
"total_points_redeemed": "Punkte insgesamt eingelöst",
"points_redeemed_30d": "Punkte eingelöst (30T)",
"outstanding_liability": "Ausstehende Verbindlichkeit",
"location_breakdown": "Aufschlüsselung nach Standort",
"store": "Geschäft",
"enrolled": "Angemeldet",
"points_earned": "Punkte verdient",
"points_redeemed": "Punkte eingelöst"
},
"program_view": {
"program_configuration": "Programmkonfiguration",
"program_name": "Programmname",
"card_name": "Kartenname",
"stamps_configuration": "Stempelkonfiguration",
"stamps_target": "Stempelziel",
"reward_description": "Prämienbeschreibung",
"reward_value": "Prämienwert",
"points_configuration": "Punktekonfiguration",
"points_per_eur": "Punkte pro EUR",
"welcome_bonus": "Willkommensbonus",
"x_points": "{count} Punkte",
"minimum_redemption": "Mindesteinlösung",
"minimum_purchase": "Mindesteinkauf",
"points_expiration": "Punkteverfall",
"x_days_inactivity": "{days} Tage Inaktivität",
"redemption_rewards": "Einlösungsprämien",
"reward": "Prämie",
"points_required": "Benötigte Punkte",
"description": "Beschreibung",
"anti_fraud": "Betrugsschutz",
"cooldown": "Wartezeit",
"x_minutes": "{count} Minuten",
"max_daily_stamps": "Max. Stempel pro Tag",
"staff_pin_required": "Mitarbeiter-PIN erforderlich",
"branding": "Branding",
"primary_color": "Primärfarbe",
"secondary_color": "Sekundärfarbe",
"logo_url": "Logo-URL",
"hero_image_url": "Hintergrundbild-URL",
"terms_privacy": "AGB & Datenschutz",
"terms_conditions": "Allgemeine Geschäftsbedingungen",
"privacy_policy_url": "Datenschutzrichtlinien-URL"
},
"cards": {
"total_members": "Mitglieder gesamt",
"active_30d": "Aktiv (30T)",
"new_this_month": "Neu diesen Monat",
"total_points_balance": "Gesamtpunktestand",
"search_placeholder": "Nach Name, E-Mail, Telefon oder Kartennummer suchen...",
"all_status": "Alle Status",
"all_stores": "Alle Filialen",
"col_member": "Mitglied",
"col_card_number": "Kartennummer",
"col_points_balance": "Punktestand",
"col_last_activity": "Letzte Aktivität",
"col_status": "Status",
"col_actions": "Aktionen",
"no_members": "Keine Mitglieder gefunden",
"adjust_search": "Versuchen Sie, Ihre Suchkriterien anzupassen"
},
"card_detail": {
"title": "Kartendetail",
"loading": "Kartendetails werden geladen...",
"error_loading": "Fehler beim Laden",
"points_balance": "Punktestand",
"total_earned": "Gesamt verdient",
"total_redeemed": "Gesamt eingelöst",
"member_since": "Mitglied seit",
"customer_information": "Kundeninformationen",
"name": "Name",
"email": "E-Mail",
"phone": "Telefon",
"birthday": "Geburtstag",
"card_details": "Kartendetails",
"card_number": "Kartennummer",
"status": "Status",
"last_activity": "Letzte Aktivität",
"enrolled_at": "Angemeldet bei",
"transaction_history": "Transaktionshistorie",
"col_date": "Datum",
"col_type": "Typ",
"col_points": "Punkte",
"col_location": "Standort",
"col_notes": "Notizen",
"no_transactions": "Keine Transaktionen gefunden"
},
"transactions": {
"title": "Transaktionen",
"subtitle": "Alle Treue-Transaktionen anzeigen",
"adjust_filters": "Versuchen Sie, Ihre Filter anzupassen",
"loading": "Transaktionen werden geladen...",
"error_loading": "Fehler beim Laden",
"search_placeholder": "Transaktionen suchen...",
"all_types": "Alle Typen",
"all_stores": "Alle Filialen",
"col_date": "Datum",
"col_customer": "Kunde",
"col_type": "Typ",
"col_points": "Punkte",
"col_location": "Standort",
"col_notes": "Notizen",
"no_transactions": "Keine Transaktionen gefunden",
"type_adjust": "Anpassen",
"type_earn": "Verdienen",
"type_expire": "Ablaufen",
"type_redeem": "Einlösen"
},
"pins": {
"title": "Mitarbeiter-PINs",
"subtitle": "Mitarbeiter-Authentifizierungs-PINs verwalten",
"loading": "PINs werden geladen...",
"error_loading": "Fehler beim Laden",
"total_pins": "PINs gesamt",
"active_pins": "Aktiv",
"locked_pins": "Gesperrt",
"all_stores": "Alle Filialen",
"all_status": "Alle Status",
"status_active": "Aktiv",
"status_inactive": "Inaktiv",
"status_locked": "Gesperrt",
"col_name": "Name",
"col_staff_id": "Mitarbeiter-ID",
"col_store": "Filiale",
"col_status": "Status",
"col_locked": "Gesperrt",
"col_last_used": "Zuletzt verwendet",
"col_actions": "Aktionen",
"no_pins": "Keine PINs gefunden",
"create_pin": "PIN erstellen",
"edit_pin": "PIN bearbeiten",
"delete_pin": "PIN löschen",
"unlock_pin": "Entsperren",
"confirm_delete": "Sind Sie sicher, dass Sie diesen PIN löschen möchten?",
"pin_name": "Name des Mitarbeiters",
"pin_staff_id": "Mitarbeiter-ID (optional)",
"pin_code": "PIN-Code",
"pin_code_hint": "4-6-stelliger PIN",
"pin_edit_hint": "Leer lassen um aktuellen PIN zu behalten",
"pin_edit_placeholder": "Neuer PIN (optional)",
"pin_store": "Filiale",
"select_store": "Filiale auswählen",
"pin_created": "PIN erfolgreich erstellt",
"pin_updated": "PIN erfolgreich aktualisiert",
"pin_deleted": "PIN erfolgreich gelöscht",
"pin_unlocked": "PIN erfolgreich entsperrt",
"save": "Speichern",
"cancel": "Abbrechen",
"read_only_notice": "PINs sind in der Admin-Ansicht schreibgeschützt",
"save_changes": "Speichern",
"unlock": "Entsperren",
"no_staff_found": "Keine Mitarbeiter gefunden"
},
"program_form": {
"program_type": "Programmtyp",
"points_type_desc": "Punkte pro ausgegebenem EUR verdienen",
"stamps_type_desc": "N Stempel sammeln, Prämie erhalten",
"hybrid_type_desc": "Stempel und Punkte kombiniert",
"stamps_configuration": "Stempelkonfiguration",
"stamps_target": "Stempelziel",
"stamps_target_help": "Anzahl der Stempel für die Prämie",
"reward_description": "Prämienbeschreibung",
"reward_value_cents": "Prämienwert (Cent)",
"points_configuration": "Punktekonfiguration",
"points_per_eur": "Punkte pro ausgegebenem EUR",
"eur_equals_points": "1 EUR = {points} Punkt(e)",
"welcome_bonus_points": "Willkommensbonuspunkte",
"welcome_bonus_help": "Bonuspunkte bei der Anmeldung",
"minimum_redemption_points": "Mindesteinlösungspunkte",
"minimum_purchase_cents": "Mindesteinkauf (Cent)",
"minimum_purchase_help": "Mindesteinkaufsbetrag zum Punktesammeln (0 = kein Minimum)",
"points_expiration_days": "Punkteverfall (Tage)",
"points_expiration_help": "Tage der Inaktivität bis zum Punkteverfall (0 = nie)",
"redemption_rewards": "Einlösungsprämien",
"add_reward": "Prämie hinzufügen",
"no_rewards_configured": "Keine Prämien konfiguriert. Fügen Sie eine Prämie hinzu, damit Kunden Punkte einlösen können.",
"reward_name": "Prämienname",
"points_required": "Benötigte Punkte",
"description": "Beschreibung",
"anti_fraud_settings": "Betrugsschutz-Einstellungen",
"cooldown_minutes": "Wartezeit (Minuten)",
"cooldown_help": "Zeit zwischen Stempeln derselben Karte",
"max_daily_stamps": "Max. Stempel pro Tag",
"max_daily_stamps_help": "Maximale Stempel pro Karte pro Tag",
"require_staff_pin": "Mitarbeiter-PIN verlangen",
"branding": "Branding",
"card_name": "Kartenname",
"primary_color": "Primärfarbe",
"secondary_color": "Sekundärfarbe",
"logo_url": "Logo-URL",
"logo_url_help": "Erforderlich für Google Wallet-Integration. Muss eine öffentlich zugängliche Bild-URL sein (PNG oder JPG).",
"hero_image_url": "Hintergrundbild-URL",
"terms_privacy": "AGB & Datenschutz",
"terms_conditions": "Allgemeine Geschäftsbedingungen",
"privacy_policy_url": "Datenschutzrichtlinien-URL",
"program_status": "Programmstatus",
"program_active": "Programm aktiv",
"program_active_help": "Deaktiviert können Kunden weder sammeln noch einlösen",
"delete_program": "Programm löschen",
"create_program": "Programm erstellen",
"save_changes": "Änderungen speichern"
}
},
"admin": {
"programs": {
"title": "Treueprogramme",
"create_program": "Programm erstellen",
"loading": "Treueprogramme werden geladen...",
"error_loading": "Fehler beim Laden der Treueprogramme",
"total_programs": "Programme insgesamt",
"active": "Aktiv",
"total_members": "Mitglieder insgesamt",
"transactions_30d": "Transaktionen (30T)",
"search_placeholder": "Nach Händlername suchen...",
"all_status": "Alle Status",
"table_merchant": "Händler",
"table_program_type": "Programmtyp",
"table_members": "Mitglieder",
"table_points_issued": "Punkte vergeben",
"table_status": "Status",
"table_created": "Erstellt",
"table_actions": "Aktionen",
"no_programs": "Keine Treueprogramme gefunden",
"adjust_filters": "Versuchen Sie, Ihre Suche oder Filter anzupassen",
"no_merchants_yet": "Noch keine Händler haben Treueprogramme erstellt",
"x_active": "({count} aktiv)",
"x_redeemed": "{count} eingelöst",
"pt_per_eur": "Pkt/EUR",
"delete_title": "Treueprogramm löschen",
"delete_message": "Treueprogramm für \"{name}\" löschen? Alle zugehörigen Daten (Karten, Transaktionen, Prämien) werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.",
"delete_confirm": "Programm löschen",
"create_title": "Treueprogramm erstellen",
"create_description": "Wählen Sie einen Händler, um ein Treueprogramm zu erstellen.",
"search_merchant": "Händler suchen",
"type_merchant_name": "Händlername eingeben...",
"no_merchants_found": "Keine Händler gefunden",
"existing_program_warning": "Dieser Händler hat bereits ein Treueprogramm.",
"view_edit_existing": "Bestehendes Programm anzeigen / bearbeiten"
},
"merchant_detail": {
"title": "Händler-Treuedetails",
"loading": "Treuedetails werden geladen...",
"error_loading": "Fehler beim Laden der Händlertreue",
"program_active": "Treueprogramm aktiv",
"no_program_subtitle": "Kein Treueprogramm",
"quick_actions": "Schnellaktionen",
"edit_program": "Programm bearbeiten",
"admin_policy": "Admin-Richtlinie",
"view_merchant": "Händler anzeigen",
"total_members": "Mitglieder insgesamt",
"active_30d": "Aktiv (30T)",
"points_issued_30d": "Punkte vergeben (30T)",
"points_redeemed_30d": "Punkte eingelöst (30T)",
"no_program": "Kein Treueprogramm",
"no_program_desc": "Dieser Händler hat noch kein Treueprogramm eingerichtet.",
"create_program": "Programm erstellen",
"delete_title": "Treueprogramm löschen",
"delete_message": "Das Treueprogramm und alle zugehörigen Daten werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.",
"delete_confirm": "Programm löschen",
"location_breakdown": "Aufschlüsselung nach Standort",
"table_location": "Standort",
"table_enrolled": "Angemeldet",
"table_points_earned": "Punkte verdient",
"table_points_redeemed": "Punkte eingelöst",
"table_transactions_30d": "Transaktionen (30T)",
"admin_policy_settings": "Admin-Richtlinieneinstellungen",
"staff_pin_policy": "Mitarbeiter-PIN-Richtlinie",
"self_enrollment": "Selbstanmeldung",
"cross_location_redemption": "Standortübergreifende Einlösung",
"allowed": "Erlaubt",
"disabled": "Deaktiviert",
"modify_policy": "Admin-Richtlinie ändern",
"view_cards": "Karten anzeigen",
"view_transactions": "Transaktionen anzeigen",
"view_pins": "PINs anzeigen"
},
"merchant_cards": {
"title": "Händlerkarten",
"subtitle": "Treuekarten für diesen Händler anzeigen",
"loading": "Karten werden geladen...",
"error_loading": "Fehler beim Laden"
},
"merchant_card_detail": {
"title": "Kartendetail",
"error_loading": "Fehler beim Laden",
"loading": "Kartendetails werden geladen..."
},
"merchant_transactions": {
"title": "Händler-Transaktionen",
"subtitle": "Alle Transaktionen für diesen Händler",
"loading": "Transaktionen werden geladen...",
"error_loading": "Fehler beim Laden"
},
"merchant_pins": {
"title": "Händler-PINs",
"subtitle": "PINs für diesen Händler anzeigen (schreibgeschützt)",
"loading": "PINs werden geladen...",
"error_loading": "Fehler beim Laden"
},
"merchant_settings": {
"title": "Händler-Treueeinstellungen",
"loading": "Einstellungen werden geladen...",
"error_loading": "Fehler beim Laden der Einstellungen",
"admin_controlled": "Admin-kontrollierte Einstellungen für das Treueprogramm dieses Händlers",
"staff_pin_policy": "Mitarbeiter-PIN-Richtlinie",
"staff_pin_description": "Legen Sie fest, ob Mitarbeiter einen PIN eingeben müssen, um Treuetransaktionen zu verarbeiten.",
"required": "Erforderlich",
"required_desc": "Mitarbeiter müssen ihren PIN bei jeder Transaktion eingeben. Empfohlen für die Sicherheit.",
"optional": "Optional",
"optional_desc": "Geschäfte können wählen, ob PINs erforderlich sind.",
"pin_disabled": "Deaktiviert",
"pin_disabled_desc": "Mitarbeiter-PINs werden nicht verwendet. Jeder Mitarbeiter kann Transaktionen verarbeiten.",
"pin_lockout_settings": "PIN-Sperreinstellungen",
"max_failed_attempts": "Max. Fehlversuche",
"max_failed_attempts_help": "Anzahl falscher Versuche vor Sperrung (3-10)",
"lockout_duration": "Sperrdauer (Minuten)",
"lockout_duration_help": "Sperrdauer nach Fehlversuchen (5-120 Minuten)",
"enrollment_settings": "Anmeldeeinstellungen",
"allow_self_enrollment": "Selbstanmeldung erlauben",
"self_enrollment_desc": "Kunden können sich per QR-Code ohne Personal anmelden",
"transaction_settings": "Transaktionseinstellungen",
"allow_cross_location": "Standortübergreifende Einlösung erlauben",
"cross_location_desc": "Kunden können Punkte an allen Standorten des Händlers einlösen",
"allow_void": "Stornierungen erlauben",
"void_desc": "Mitarbeiter können Punkte/Stempel bei Rückgaben stornieren",
"save_settings": "Einstellungen speichern"
},
"analytics": {
"title": "Treue-Analytik",
"subtitle": "Plattformweite Treueprogramm-Statistiken",
"loading": "Analytik wird geladen...",
"error_loading": "Fehler beim Laden der Analytik",
"filter_by_merchant": "Nach Händler filtern",
"search_merchants_placeholder": "Händler nach Name suchen...",
"showing_stats_for": "Statistiken für:",
"wallet_status": "Wallet-Integrationsstatus",
"google_wallet": "Google Wallet",
"apple_wallet": "Apple Wallet",
"connected": "Verbunden",
"error": "Fehler",
"not_configured": "Nicht konfiguriert",
"issuer_id": "Aussteller-ID",
"project": "Projekt",
"wallet_objects": "Wallet-Objekte",
"loyalty_classes": "Treueklassen",
"pass_type_id": "Pass-Typ-ID",
"team_id": "Team-ID",
"active_passes": "Aktive Pässe",
"quick_actions": "Schnellaktionen",
"view_all_programs": "Alle Programme anzeigen",
"manage_merchants": "Händler verwalten"
},
"program_edit": {
"title": "Programmkonfiguration",
"loading": "Konfiguration wird geladen...",
"error_loading": "Fehler beim Laden der Programmkonfiguration",
"create_subtitle": "Treueprogramm für diesen Händler erstellen",
"edit_subtitle": "Programmkonfiguration bearbeiten",
"delete_title": "Treueprogramm löschen",
"delete_message": "Das Treueprogramm und alle zugehörigen Daten (Karten, Transaktionen, Prämien) werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.",
"delete_confirm": "Programm löschen"
}
},
"merchant": {
"program": {
"title": "Treueprogramm",
"subtitle": "Ihre Treueprogramm-Konfiguration.",
"edit_program": "Programm bearbeiten",
"no_program": "Kein Treueprogramm",
"no_program_desc": "Ihr Treueprogramm wurde noch nicht eingerichtet. Erstellen Sie eines, um Ihre Kunden zu belohnen.",
"create_program": "Programm erstellen"
},
"program_edit": {
"title": "Treue-Einstellungen",
"page_title": "Treueprogramm-Einstellungen",
"subtitle": "Konfigurieren Sie Ihr Treueprogramm",
"loading": "Einstellungen werden geladen...",
"error_loading": "Fehler beim Laden der Einstellungen",
"delete_title": "Treueprogramm löschen",
"delete_message": "Ihr Treueprogramm und alle zugehörigen Daten (Karten, Transaktionen, Prämien) werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.",
"delete_confirm": "Programm löschen"
},
"cards": {
"title": "Kundenkarten",
"subtitle": "Treuemitglieder über alle Standorte verwalten",
"error_loading": "Fehler beim Laden",
"loading": "Karten werden geladen..."
},
"card_detail": {
"title": "Kartendetail",
"card_label": "Karte",
"error_loading": "Fehler beim Laden",
"loading": "Kartendetails werden geladen..."
},
"transactions": {
"title": "Transaktionen",
"subtitle": "Alle Transaktionen über alle Standorte anzeigen",
"error_loading": "Fehler beim Laden",
"loading": "Transaktionen werden geladen..."
},
"pins": {
"title": "Mitarbeiter-PINs",
"subtitle": "PINs für alle Standorte verwalten",
"error_loading": "Fehler beim Laden",
"loading": "PINs werden geladen..."
},
"settings": {
"title": "Treue-Einstellungen",
"subtitle": "Treueprogramm-Einstellungen anzeigen",
"admin_controlled": "Diese Einstellungen werden vom Plattformadministrator verwaltet",
"error_loading": "Fehler beim Laden",
"loading": "Einstellungen werden geladen...",
"lockout_attempts": "Sperrversuche",
"lockout_minutes": "Sperrdauer (Min)",
"permissions": "Registrierung & Berechtigungen",
"pin_policy": "PIN-Richtlinie",
"staff_pin_policy": "Mitarbeiter-PIN-Richtlinie",
"self_enrollment": "Selbstanmeldung",
"cross_location": "Standortübergreifende Einlösung",
"void_transactions": "Stornierungen erlauben",
"enabled": "Aktiviert",
"disabled": "Deaktiviert",
"required": "Erforderlich",
"optional": "Optional"
},
"analytics": {
"title": "Treue-Analytik",
"subtitle": "Treueprogramm-Statistiken für alle Ihre Geschäfte",
"loading": "Analytik wird geladen...",
"error_loading": "Fehler beim Laden der Analytik",
"no_program": "Kein Treueprogramm",
"no_program_desc": "Richten Sie ein Treueprogramm ein, um hier Analytik zu sehen.",
"create_program": "Programm erstellen",
"quick_actions": "Schnellaktionen",
"view_program": "Programm anzeigen",
"edit_program": "Programm bearbeiten"
}
},
"store": {
"terminal": {
"title": "Treue-Terminal",
"subtitle": "Treuetransaktionen verarbeiten",
"members": "Mitglieder",
"analytics": "Analytik",
"loading": "Treue-Terminal wird geladen...",
"error_loading": "Fehler beim Laden des Terminals",
"not_setup": "Treueprogramm nicht eingerichtet",
"not_setup_desc": "Ihr Händler hat noch kein Treueprogramm konfiguriert.",
"setup_program": "Treueprogramm einrichten",
"contact_admin": "Kontaktieren Sie Ihren Administrator, um die Einrichtung abzuschließen.",
"find_customer": "Kunde finden",
"search_placeholder": "E-Mail, Telefon oder Kartennummer...",
"looking_up": "Suche läuft...",
"look_up_customer": "Kunde suchen",
"enroll_new_customer": "Neuen Kunden anmelden",
"customer_found": "Kunde gefunden",
"points_balance": "Punktestand",
"stamps": "Stempel",
"x_more_for_reward": "Noch {count} für Prämie",
"ready_to_redeem": "Bereit zum Einlösen!",
"add_stamp": "Stempel hinzufügen",
"current": "Aktuell:",
"cooldown_active": "Wartezeit aktiv",
"redeem_stamps": "Stempel einlösen",
"not_enough_stamps": "Noch nicht genug Stempel",
"earn_points": "Punkte sammeln",
"purchase_amount": "Einkaufsbetrag",
"points_to_award": "Zu vergebende Punkte:",
"award_points": "Punkte vergeben",
"redeem_reward": "Prämie einlösen",
"select_reward": "Prämie auswählen",
"select_reward_placeholder": "Prämie auswählen...",
"points_after": "Punkte danach:",
"search_to_process": "Suchen Sie einen Kunden, um eine Transaktion zu verarbeiten",
"recent_transactions": "Letzte Transaktionen an diesem Standort",
"col_time": "Zeit",
"col_customer": "Kunde",
"col_type": "Typ",
"col_points": "Punkte",
"col_notes": "Notizen",
"no_recent_transactions": "Keine aktuellen Transaktionen",
"enter_staff_pin": "Mitarbeiter-PIN eingeben",
"pin_authorize": "Geben Sie Ihren Mitarbeiter-PIN ein, um diese Transaktion zu autorisieren.",
"clear": "Löschen",
"processing": "Verarbeitung...",
"customer_not_found": "Kunde nicht gefunden. Sie können ihn als neues Mitglied anmelden.",
"error_lookup": "Fehler bei der Kundensuche: {message}",
"transaction_failed": "Transaktion fehlgeschlagen: {message}",
"stamp_added": "Stempel hinzugefügt!",
"stamps_redeemed": "Stempel eingelöst! Prämie erhalten.",
"x_points_awarded": "{points} Punkte vergeben!",
"reward_redeemed": "Prämie eingelöst: {name}",
"card_label": "Karte",
"confirm": "Bestätigen",
"pin_authorize_text": "Geben Sie Ihre Mitarbeiter-PIN ein um diese Transaktion zu autorisieren",
"free_item": "Gratis-Artikel",
"reward_label": "Belohnung",
"search_empty_state": "Suchen Sie einen Kunden um zu beginnen"
},
"cards": {
"title": "Treue-Mitglieder",
"subtitle": "Mitglieder Ihres Treueprogramms anzeigen und verwalten",
"enroll_new": "Anmelden",
"loading": "Mitglieder werden geladen...",
"error_loading": "Fehler beim Laden der Mitglieder",
"total_members": "Mitglieder insgesamt",
"active_30d": "Aktiv (30T)",
"new_this_month": "Neu diesen Monat",
"total_points_balance": "Gesamtpunktestand",
"search_placeholder": "Nach Name, E-Mail, Telefon oder Karte suchen...",
"all_status": "Alle Status",
"col_member": "Mitglied",
"col_card_number": "Kartennummer",
"col_points_balance": "Punktestand",
"col_last_activity": "Letzte Aktivität",
"col_status": "Status",
"col_actions": "Aktionen",
"no_members": "Keine Mitglieder gefunden",
"adjust_search": "Versuchen Sie, Ihre Suche anzupassen",
"enroll_first": "Melden Sie Ihren ersten Kunden an"
},
"card_detail": {
"title": "Mitgliederdetails",
"loading": "Mitgliederdetails werden geladen...",
"error_loading": "Fehler beim Laden des Mitglieds",
"points_balance": "Punktestand",
"total_earned": "Insgesamt verdient",
"total_redeemed": "Insgesamt eingelöst",
"member_since": "Mitglied seit",
"customer_information": "Kundeninformation",
"name": "Name",
"email": "E-Mail",
"phone": "Telefon",
"birthday": "Geburtstag",
"card_details": "Kartendetails",
"card_number": "Kartennummer",
"status": "Status",
"last_activity": "Letzte Aktivität",
"enrolled_at": "Angemeldet am",
"transaction_history": "Transaktionsverlauf",
"col_date": "Datum",
"col_type": "Typ",
"col_points": "Punkte",
"col_location": "Standort",
"col_notes": "Notizen",
"no_transactions": "Noch keine Transaktionen",
"card_label": "Karte"
},
"enroll": {
"title": "Kunde anmelden",
"page_title": "Neuen Kunden anmelden",
"subtitle": "Neues Mitglied zu Ihrem Treueprogramm hinzufügen",
"loading": "Laden...",
"error_loading": "Fehler beim Laden des Anmeldeformulars",
"customer_information": "Kundeninformation",
"first_name": "Vorname",
"last_name": "Nachname",
"email": "E-Mail",
"phone": "Telefon",
"birthday": "Geburtstag",
"birthday_help": "Für Geburtstagsbelohnungen (optional)",
"communication_preferences": "Kommunikationseinstellungen",
"send_emails": "Werbe-E-Mails senden",
"send_sms": "Werbe-SMS senden",
"welcome_bonus": "Willkommensbonus",
"welcome_bonus_desc": "Kunde erhält {points} Bonuspunkte!",
"enroll_customer": "Kunde anmelden",
"enrolling": "Anmeldung...",
"customer_enrolled": "Kunde angemeldet!",
"starting_balance": "Anfangssaldo:",
"x_points": "{count} Punkte",
"back_to_terminal": "Zurück zum Terminal",
"enroll_another": "Weiteren anmelden",
"enrollment_failed": "Anmeldung fehlgeschlagen: {message}",
"bonus_points": "Bonuspunkte",
"card_number_label": "Kartennummer",
"points": "Punkte"
},
"analytics": {
"title": "Treue-Analytik",
"subtitle": "Verfolgen Sie die Leistung Ihres Treueprogramms",
"loading": "Analytik wird geladen...",
"error_loading": "Fehler beim Laden der Analytik",
"quick_actions": "Schnellaktionen",
"open_terminal": "Terminal öffnen",
"view_members": "Mitglieder anzeigen",
"view_program": "Programm anzeigen"
},
"program": {
"title": "Treueprogramm",
"subtitle": "Ihre Treueprogramm-Konfiguration",
"edit_program": "Programm bearbeiten",
"loading": "Programm wird geladen...",
"error_loading": "Fehler beim Laden des Programms",
"no_program": "Kein Treueprogramm",
"no_program_desc": "Ihr Händler hat noch kein Treueprogramm konfiguriert.",
"create_program": "Programm erstellen",
"contact_admin": "Kontaktieren Sie Ihren Administrator, um ein Treueprogramm einzurichten."
},
"pins": {
"title": "Mitarbeiter-PINs",
"subtitle": "Mitarbeiter-PINs für diesen Standort verwalten",
"loading": "PINs werden geladen...",
"error_loading": "Fehler beim Laden der PINs"
},
"settings": {
"title": "Treue-Einstellungen",
"page_title": "Treueprogramm-Einstellungen",
"subtitle": "Konfigurieren Sie Ihr Treueprogramm",
"back_to_program": "Zurück zum Programm",
"loading": "Einstellungen werden geladen...",
"error_loading": "Fehler beim Laden der Einstellungen",
"access_restricted": "Zugriff eingeschränkt",
"owner_only": "Nur der Geschäftsinhaber kann die Treueprogramm-Einstellungen verwalten.",
"delete_title": "Treueprogramm löschen",
"delete_message": "Das Treueprogramm und alle zugehörigen Daten (Karten, Transaktionen, Prämien) werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.",
"delete_confirm": "Programm löschen",
"program_created": "Programm erfolgreich erstellt",
"program_updated": "Programm erfolgreich aktualisiert",
"program_deleted": "Treueprogramm gelöscht",
"save_failed": "Speichern fehlgeschlagen: {message}",
"delete_failed": "Löschen fehlgeschlagen: {message}",
"access_restricted_desc": "Nur der Inhaber kann die Einstellungen ändern",
"delete_program_confirm": "Löschen",
"delete_program_desc": "Dies löscht das Treueprogramm und alle zugehörigen Daten dauerhaft",
"delete_program_title": "Treueprogramm löschen?"
}
},
"storefront": {
"dashboard": {
"back_to_account": "Zurück zum Konto",
"my_loyalty": "Meine Treue",
"join_title": "Treten Sie unserem Prämienprogramm bei!",
"join_subtitle": "Sammeln Sie Punkte bei jedem Einkauf und lösen Sie sie gegen Prämien ein.",
"join_now": "Jetzt beitreten",
"points_balance": "Punktestand",
"card_number": "Kartennummer",
"show_card": "Karte anzeigen",
"total_earned": "Insgesamt verdient",
"total_redeemed": "Insgesamt eingelöst",
"available_rewards": "Verfügbare Prämien",
"no_rewards_yet": "Noch keine Prämien verfügbar",
"ready_to_redeem": "Bereit zum Einlösen",
"x_more_to_go": "Noch {count}",
"redeem_hint": "Zeigen Sie Ihre Karte dem Personal, um Prämien im Geschäft einzulösen.",
"recent_activity": "Letzte Aktivität",
"view_all": "Alle anzeigen",
"no_transactions": "Noch keine Transaktionen. Machen Sie einen Einkauf, um Punkte zu sammeln!",
"earn_redeem_locations": "Sammel- & Einlöse-Standorte",
"your_loyalty_card": "Ihre Treuekarte",
"show_to_staff": "Zeigen Sie dies dem Personal beim Einkauf oder Einlösen von Prämien."
},
"history": {
"back_to_loyalty": "Zurück zur Treue",
"title": "Transaktionsverlauf",
"subtitle": "Alle Ihre Treuepunkttransaktionen anzeigen",
"current_balance": "Aktueller Saldo",
"total_earned": "Insgesamt verdient",
"total_redeemed": "Insgesamt eingelöst",
"no_transactions": "Noch keine Transaktionen",
"balance": "Saldo:",
"previous": "Zurück",
"next": "Weiter",
"page_x_of_y": "Seite {page} von {pages}"
}
},
"toasts": {
"program_activated": "Programm erfolgreich aktiviert",
"program_deactivated": "Programm erfolgreich deaktiviert",
"activate_failed": "Programm konnte nicht aktiviert werden: {message}",
"deactivate_failed": "Programm konnte nicht deaktiviert werden: {message}",
"program_deleted": "Programm erfolgreich gelöscht",
"delete_failed": "Programm konnte nicht gelöscht werden: {message}",
"program_created": "Programm erfolgreich erstellt",
"program_updated": "Programm erfolgreich aktualisiert",
"loyalty_program_created": "Treueprogramm erstellt",
"loyalty_program_deleted": "Treueprogramm gelöscht",
"settings_saved": "Einstellungen erfolgreich gespeichert",
"save_failed": "Speichern fehlgeschlagen: {message}",
"settings_save_failed": "Einstellungen konnten nicht gespeichert werden: {message}",
"create_failed": "Programm konnte nicht erstellt werden: {message}",
"logo_required": "Logo-URL ist für die Wallet-Integration erforderlich.",
"pin_created": "PIN erfolgreich erstellt",
"pin_updated": "PIN erfolgreich aktualisiert",
"pin_deleted": "PIN erfolgreich gelöscht",
"pin_unlocked": "PIN erfolgreich entsperrt",
"pin_create_error": "PIN konnte nicht erstellt werden",
"pin_update_error": "PIN konnte nicht aktualisiert werden",
"pin_delete_error": "PIN konnte nicht gelöscht werden",
"pin_unlock_error": "PIN konnte nicht entsperrt werden"
},
"errors": {
"card_not_found": "Karte nicht gefunden"
}
}