diff --git a/app/modules/core/static/store/js/init-alpine.js b/app/modules/core/static/store/js/init-alpine.js index 83ad6c97..5de4df15 100644 --- a/app/modules/core/static/store/js/init-alpine.js +++ b/app/modules/core/static/store/js/init-alpine.js @@ -65,16 +65,14 @@ function data() { openSections: getStoreSidebarSectionsFromStorage(), init() { - // Set current page from URL (only if not already set by child component) - if (!this.currentPage) { - const path = window.location.pathname; - const segments = path.split('/').filter(Boolean); - // For /store/ABC/orders/123 -> 'orders' (skip numeric IDs) - const last = segments[segments.length - 1] || 'dashboard'; - this.currentPage = /^\d+$/.test(last) && segments.length > 2 - ? segments[segments.length - 2] - : last; - } + // Set current page from URL + const path = window.location.pathname; + const segments = path.split('/').filter(Boolean); + // For /store/ABC/orders/123 -> 'orders' (skip numeric IDs) + const last = segments[segments.length - 1] || 'dashboard'; + this.currentPage = /^\d+$/.test(last) && segments.length > 2 + ? segments[segments.length - 2] + : last; // Get store code from server-rendered value or URL fallback this.storeCode = window.STORE_CODE || null; diff --git a/app/modules/loyalty/definition.py b/app/modules/loyalty/definition.py index 358ae888..17cf0054 100644 --- a/app/modules/loyalty/definition.py +++ b/app/modules/loyalty/definition.py @@ -132,16 +132,17 @@ loyalty_module = ModuleDefinition( FrontendType.STORE: [ "terminal", # Loyalty terminal "cards", # Customer cards - "loyalty-program", # Program config - "loyalty-analytics", # Store analytics + "pins", # Staff PINs + "program", # Program config + "analytics", # Store analytics ], FrontendType.MERCHANT: [ - "loyalty-program", # Merchant loyalty program - "loyalty-cards", # Customer cards - "loyalty-analytics", # Merchant loyalty analytics - "loyalty-transactions", # Transaction feed - "loyalty-pins", # Staff PINs - "loyalty-settings", # Settings (read-only) + "program", # Merchant loyalty program + "cards", # Customer cards + "analytics", # Merchant loyalty analytics + "transactions", # Transaction feed + "pins", # Staff PINs + "settings", # Settings (read-only) ], }, # New module-driven menu definitions @@ -210,7 +211,7 @@ loyalty_module = ModuleDefinition( requires_permission="loyalty.view_programs", ), MenuItemDefinition( - id="loyalty-program", + id="program", label_key="loyalty.menu.program", icon="cog", route="/store/{store_code}/loyalty/program", @@ -218,7 +219,7 @@ loyalty_module = ModuleDefinition( requires_permission="loyalty.view_programs", ), MenuItemDefinition( - id="loyalty-analytics", + id="analytics", label_key="loyalty.menu.analytics", icon="chart-bar", route="/store/{store_code}/loyalty/analytics", @@ -236,42 +237,42 @@ loyalty_module = ModuleDefinition( order=60, items=[ MenuItemDefinition( - id="loyalty-program", + id="program", label_key="loyalty.menu.program", icon="gift", route="/merchants/loyalty/program", order=10, ), MenuItemDefinition( - id="loyalty-cards", + id="cards", label_key="loyalty.menu.customer_cards", icon="identification", route="/merchants/loyalty/cards", order=15, ), MenuItemDefinition( - id="loyalty-analytics", + id="analytics", label_key="loyalty.menu.analytics", icon="chart-bar", route="/merchants/loyalty/analytics", order=20, ), MenuItemDefinition( - id="loyalty-transactions", + id="transactions", label_key="loyalty.menu.transactions", icon="clock", route="/merchants/loyalty/transactions", order=25, ), MenuItemDefinition( - id="loyalty-pins", + id="pins", label_key="loyalty.menu.staff_pins", icon="key", route="/merchants/loyalty/pins", order=30, ), MenuItemDefinition( - id="loyalty-settings", + id="settings", label_key="loyalty.menu.settings", icon="cog", route="/merchants/loyalty/settings", diff --git a/app/modules/loyalty/locales/de.json b/app/modules/loyalty/locales/de.json index 0d4db7c7..4c53134e 100644 --- a/app/modules/loyalty/locales/de.json +++ b/app/modules/loyalty/locales/de.json @@ -1,874 +1,875 @@ { - "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" - } + "loyalty": { + "module": { + "name": "Treueprogramme", + "description": "Stempel- und punktebasierte Treueprogramme mit Wallet-Integration" }, - "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" - }, - "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", + "program": { + "title": "Treueprogramm", + "create": "Programm erstellen", + "edit": "Programm bearbeiten", + "activate": "Aktivieren", + "deactivate": "Deaktivieren", + "type": { + "stamps": "Stempel", "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" + "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" + }, + "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" + }, + "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": { - "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" + "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" }, - "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" - }, - "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" - } + "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" }, - "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}" - }, - "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" - }, - "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}" - }, - "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}" - } - }, - "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." + "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}" + }, + "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" + }, + "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}" + }, + "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}" + } + }, + "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." + } } diff --git a/app/modules/loyalty/locales/en.json b/app/modules/loyalty/locales/en.json index 589998a4..62e1be88 100644 --- a/app/modules/loyalty/locales/en.json +++ b/app/modules/loyalty/locales/en.json @@ -1,874 +1,875 @@ { - "loyalty": { - "module": { - "name": "Loyalty Programs", - "description": "Stamp-based and points-based loyalty programs with wallet integration" - }, - "program": { - "title": "Loyalty Program", - "create": "Create Program", - "edit": "Edit Program", - "activate": "Activate", - "deactivate": "Deactivate", - "type": { - "stamps": "Stamps", - "points": "Points", - "hybrid": "Hybrid" - } - }, - "card": { - "title": "Loyalty Card", - "number": "Card Number", - "qr_code": "QR Code", - "enroll": "Enroll Customer", - "deactivate": "Deactivate Card" - }, - "stamp": { - "title": "Stamps", - "add": "Add Stamp", - "redeem": "Redeem Reward", - "count": "{current} of {target}", - "until_reward": "{count} until reward" - }, - "points": { - "title": "Points", - "earn": "Earn Points", - "redeem": "Redeem Points", - "balance": "{count} points", - "per_euro": "{points} points per euro" - }, - "pin": { - "title": "Staff PINs", - "create": "Create PIN", - "edit": "Edit PIN", - "unlock": "Unlock PIN", - "locked": "PIN locked until {time}" - }, - "wallet": { - "google": "Add to Google Wallet", - "apple": "Add to Apple Wallet" - }, - "stats": { - "title": "Statistics", - "total_cards": "Total Cards", - "active_cards": "Active Cards", - "stamps_issued": "Stamps Issued", - "rewards_redeemed": "Rewards Redeemed" - }, - "errors": { - "program_not_found": "Loyalty program not found", - "program_inactive": "Loyalty program is not active", - "card_not_found": "Loyalty card not found", - "card_inactive": "Loyalty card is not active", - "cooldown": "Please wait {minutes} minutes before next stamp", - "daily_limit": "Daily stamp limit of {limit} reached", - "insufficient_stamps": "Need {required} stamps, have {current}", - "insufficient_points": "Need {required} points, have {current}", - "pin_required": "Staff PIN is required", - "pin_invalid": "Invalid staff PIN", - "pin_locked": "PIN locked due to too many failed attempts" - } + "loyalty": { + "module": { + "name": "Loyalty Programs", + "description": "Stamp-based and points-based loyalty programs with wallet integration" }, - "permissions": { - "view_programs": "View Programs", - "view_programs_desc": "View loyalty programs and details", - "manage_programs": "Manage Programs", - "manage_programs_desc": "Create and configure loyalty programs", - "view_rewards": "View Rewards", - "view_rewards_desc": "View loyalty rewards and redemptions", - "manage_rewards": "Manage Rewards", - "manage_rewards_desc": "Create and manage loyalty rewards" + "program": { + "title": "Loyalty Program", + "create": "Create Program", + "edit": "Edit Program", + "activate": "Activate", + "deactivate": "Deactivate", + "type": { + "stamps": "Stamps", + "points": "Points", + "hybrid": "Hybrid" + } }, - "menu": { - "loyalty": "Loyalty", - "loyalty_programs": "Loyalty Programs", - "programs": "Programs", - "analytics": "Analytics", - "dashboard": "Dashboard", - "terminal": "Terminal", - "customer_cards": "Customer Cards", - "statistics": "Statistics", - "program": "Program", - "overview": "Overview", - "settings": "Settings", - "wallet_debug": "Wallet Debug", - "staff_pins": "Staff PINs", - "transactions": "Transactions" + "card": { + "title": "Loyalty Card", + "number": "Card Number", + "qr_code": "QR Code", + "enroll": "Enroll Customer", + "deactivate": "Deactivate Card" }, - "onboarding": { - "create_program": { - "title": "Create a loyalty program", - "description": "Set up your first stamp or points program" - } + "stamp": { + "title": "Stamps", + "add": "Add Stamp", + "redeem": "Redeem Reward", + "count": "{current} of {target}", + "until_reward": "{count} until reward" }, - "enrollment": { - "title": "Join Our Rewards Program!", - "subtitle": "Earn {points} point for every EUR you spend", - "not_available_title": "Program Not Available", - "not_available_message": "This store doesn't have a loyalty program set up yet.", - "welcome_bonus": "Get {points} bonus points when you join!", - "already_member": "Already a member? Your points are linked to your email.", - "form": { - "email": "Email", - "first_name": "First Name", - "last_name": "Last Name", - "phone": "Phone (optional)", - "birthday": "Birthday (optional)", - "birthday_hint": "For special birthday rewards", - "terms_agree": "I agree to the", - "terms": "Terms & Conditions", - "marketing_consent": "Send me news and special offers", - "joining": "Joining...", - "join_button": "Join & Get {points} Points" - }, - "privacy_policy": "Privacy Policy", - "close": "Close", - "success": { - "title": "Welcome!", - "message": "You're now a member of our rewards program.", - "card_number": "Your Card Number", - "wallet_prompt": "Save your card to your phone for easy access:", - "next_steps_title": "What's Next?", - "step_earn": "Show your card number when making purchases to earn points", - "step_balance": "Check your balance online or in the app", - "step_redeem": "Redeem points for rewards at any of our locations", - "view_dashboard": "View My Loyalty Dashboard", - "continue_shopping": "Continue Shopping" - }, - "errors": { - "load_failed": "Failed to load program information", - "email_exists": "This email is already registered in our loyalty program.", - "failed": "Enrollment failed. Please try again." - } + "points": { + "title": "Points", + "earn": "Earn Points", + "redeem": "Redeem Points", + "balance": "{count} points", + "per_euro": "{points} points per euro" }, - "common": { - "active": "Active", - "all_stores": "All Stores", - "at": "at", - "back": "Back", - "cancel": "Cancel", - "confirm": "Confirm", - "continue": "Continue", - "delete": "Delete", - "disabled": "Disabled", - "edit": "Edit", - "enabled": "Enabled", - "inactive": "Inactive", - "loading": "Loading...", - "minutes": "minutes", - "never": "Never", - "no": "No", - "none": "None", - "or": "or", - "points": "points", - "program_not_setup": "Loyalty program not set up", - "program_not_setup_desc": "Please set up a loyalty program to get started", - "refresh": "Refresh", - "save": "Save", - "saving": "Saving...", - "total": "TOTAL", - "view": "View", - "yes": "Yes" + "pin": { + "title": "Staff PINs", + "create": "Create PIN", + "edit": "Edit PIN", + "unlock": "Unlock PIN", + "locked": "PIN locked until {time}" + }, + "wallet": { + "google": "Add to Google Wallet", + "apple": "Add to Apple Wallet" + }, + "stats": { + "title": "Statistics", + "total_cards": "Total Cards", + "active_cards": "Active Cards", + "stamps_issued": "Stamps Issued", + "rewards_redeemed": "Rewards Redeemed" + }, + "errors": { + "program_not_found": "Loyalty program not found", + "program_inactive": "Loyalty program is not active", + "card_not_found": "Loyalty card not found", + "card_inactive": "Loyalty card is not active", + "cooldown": "Please wait {minutes} minutes before next stamp", + "daily_limit": "Daily stamp limit of {limit} reached", + "insufficient_stamps": "Need {required} stamps, have {current}", + "insufficient_points": "Need {required} points, have {current}", + "pin_required": "Staff PIN is required", + "pin_invalid": "Invalid staff PIN", + "pin_locked": "PIN locked due to too many failed attempts" + } + }, + "permissions": { + "view_programs": "View Programs", + "view_programs_desc": "View loyalty programs and details", + "manage_programs": "Manage Programs", + "manage_programs_desc": "Create and configure loyalty programs", + "view_rewards": "View Rewards", + "view_rewards_desc": "View loyalty rewards and redemptions", + "manage_rewards": "Manage Rewards", + "manage_rewards_desc": "Create and manage loyalty rewards" + }, + "menu": { + "loyalty": "Loyalty", + "loyalty_programs": "Loyalty Programs", + "programs": "Programs", + "analytics": "Analytics", + "dashboard": "Dashboard", + "terminal": "Terminal", + "customer_cards": "Customer Cards", + "statistics": "Statistics", + "program": "Program", + "overview": "Overview", + "settings": "Settings", + "wallet_debug": "Wallet Debug", + "staff_pins": "Staff PINs", + "transactions": "Transactions" + }, + "onboarding": { + "create_program": { + "title": "Create a loyalty program", + "description": "Set up your first stamp or points program" + } + }, + "enrollment": { + "title": "Join Our Rewards Program!", + "subtitle": "Earn {points} point for every EUR you spend", + "not_available_title": "Program Not Available", + "not_available_message": "This store doesn't have a loyalty program set up yet.", + "welcome_bonus": "Get {points} bonus points when you join!", + "already_member": "Already a member? Your points are linked to your email.", + "form": { + "email": "Email", + "first_name": "First Name", + "last_name": "Last Name", + "phone": "Phone (optional)", + "birthday": "Birthday (optional)", + "birthday_hint": "For special birthday rewards", + "terms_agree": "I agree to the", + "terms": "Terms & Conditions", + "marketing_consent": "Send me news and special offers", + "joining": "Joining...", + "join_button": "Join & Get {points} Points" + }, + "privacy_policy": "Privacy Policy", + "close": "Close", + "success": { + "title": "Welcome!", + "message": "You're now a member of our rewards program.", + "card_number": "Your Card Number", + "wallet_prompt": "Save your card to your phone for easy access:", + "next_steps_title": "What's Next?", + "step_earn": "Show your card number when making purchases to earn points", + "step_balance": "Check your balance online or in the app", + "step_redeem": "Redeem points for rewards at any of our locations", + "view_dashboard": "View My Loyalty Dashboard", + "continue_shopping": "Continue Shopping" + }, + "errors": { + "load_failed": "Failed to load program information", + "email_exists": "This email is already registered in our loyalty program.", + "failed": "Enrollment failed. Please try again." + } + }, + "common": { + "active": "Active", + "all_stores": "All Stores", + "at": "at", + "back": "Back", + "cancel": "Cancel", + "confirm": "Confirm", + "continue": "Continue", + "delete": "Delete", + "disabled": "Disabled", + "edit": "Edit", + "enabled": "Enabled", + "inactive": "Inactive", + "loading": "Loading...", + "minutes": "minutes", + "never": "Never", + "no": "No", + "none": "None", + "or": "or", + "points": "points", + "program_not_setup": "Loyalty program not set up", + "program_not_setup_desc": "Please set up a loyalty program to get started", + "refresh": "Refresh", + "save": "Save", + "saving": "Saving...", + "total": "TOTAL", + "view": "View", + "yes": "Yes", + "contact_admin_setup": "Contact your administrator to set up the loyalty program" + }, + "transactions": { + "card_created": "Enrolled", + "welcome_bonus": "Welcome Bonus", + "stamp_earned": "Stamp Earned", + "stamp_redeemed": "Stamp Redeemed", + "stamp_voided": "Stamp Voided", + "stamp_adjustment": "Stamp Adjusted", + "points_earned": "Points Earned", + "points_redeemed": "Points Redeemed", + "points_voided": "Points Voided", + "points_adjustment": "Points Adjusted", + "points_expired": "Points Expired", + "card_deactivated": "Deactivated", + "reward_redeemed": "Reward Redeemed" + }, + "shared": { + "analytics": { + "total_programs": "Total Programs", + "total_members": "Total Members", + "active_members": "Active Members", + "points_issued_30d": "Points Issued (30d)", + "transactions_30d": "Transactions (30d)", + "x_active": "{count} active", + "points_overview": "Points Overview", + "points_issued_vs_redeemed": "Points Issued vs Redeemed (30d)", + "issued": "Issued:", + "redeemed": "Redeemed:", + "redemption_rate": "Redemption Rate", + "outstanding_balance": "Outstanding Balance", + "member_activity": "Member Activity", + "active_members_30d": "Active Members (30d)", + "new_this_month": "New This Month", + "merchants_with_programs": "Merchants with Programs", + "avg_points_per_member": "Avg Points Per Member", + "all_time_statistics": "All-Time Statistics", + "total_points_issued": "Total Points Issued", + "total_points_redeemed": "Total Points Redeemed", + "points_redeemed_30d": "Points Redeemed (30d)", + "outstanding_liability": "Outstanding Liability", + "location_breakdown": "Location Breakdown", + "store": "Store", + "enrolled": "Enrolled", + "points_earned": "Points Earned", + "points_redeemed": "Points Redeemed" + }, + "program_view": { + "program_configuration": "Program Configuration", + "program_name": "Program Name", + "card_name": "Card Name", + "stamps_configuration": "Stamps Configuration", + "stamps_target": "Stamps Target", + "reward_description": "Reward Description", + "reward_value": "Reward Value", + "points_configuration": "Points Configuration", + "points_per_eur": "Points per EUR", + "welcome_bonus": "Welcome Bonus", + "x_points": "{count} points", + "minimum_redemption": "Minimum Redemption", + "minimum_purchase": "Minimum Purchase", + "points_expiration": "Points Expiration", + "x_days_inactivity": "{days} days of inactivity", + "redemption_rewards": "Redemption Rewards", + "reward": "Reward", + "points_required": "Points Required", + "description": "Description", + "anti_fraud": "Anti-Fraud", + "cooldown": "Cooldown", + "x_minutes": "{count} minutes", + "max_daily_stamps": "Max Daily Stamps", + "staff_pin_required": "Staff PIN Required", + "branding": "Branding", + "primary_color": "Primary Color", + "secondary_color": "Secondary Color", + "logo_url": "Logo URL", + "hero_image_url": "Hero Image URL", + "terms_privacy": "Terms & Privacy", + "terms_conditions": "Terms & Conditions", + "privacy_policy_url": "Privacy Policy URL" + }, + "cards": { + "total_members": "Total Members", + "active_30d": "Active (30d)", + "new_this_month": "New This Month", + "total_points_balance": "Total Points Balance", + "search_placeholder": "Search by name, email, phone, or card number...", + "all_status": "All Status", + "all_stores": "All Stores", + "col_member": "Member", + "col_card_number": "Card Number", + "col_points_balance": "Points Balance", + "col_last_activity": "Last Activity", + "col_status": "Status", + "col_actions": "Actions", + "no_members": "No members found", + "adjust_search": "Try adjusting your search criteria" + }, + "card_detail": { + "title": "Card Detail", + "loading": "Loading card details...", + "error_loading": "Error loading card details", + "points_balance": "Points Balance", + "total_earned": "Total Earned", + "total_redeemed": "Total Redeemed", + "member_since": "Member Since", + "customer_information": "Customer Information", + "name": "Name", + "email": "Email", + "phone": "Phone", + "birthday": "Birthday", + "card_details": "Card Details", + "card_number": "Card Number", + "status": "Status", + "last_activity": "Last Activity", + "enrolled_at": "Enrolled At", + "transaction_history": "Transaction History", + "col_date": "Date", + "col_type": "Type", + "col_points": "Points", + "col_location": "Location", + "col_notes": "Notes", + "no_transactions": "No transactions found" }, "transactions": { - "card_created": "Enrolled", - "welcome_bonus": "Welcome Bonus", - "stamp_earned": "Stamp Earned", - "stamp_redeemed": "Stamp Redeemed", - "stamp_voided": "Stamp Voided", - "stamp_adjustment": "Stamp Adjusted", - "points_earned": "Points Earned", - "points_redeemed": "Points Redeemed", - "points_voided": "Points Voided", - "points_adjustment": "Points Adjusted", - "points_expired": "Points Expired", - "card_deactivated": "Deactivated", - "reward_redeemed": "Reward Redeemed" + "title": "Transactions", + "subtitle": "View all loyalty transactions", + "adjust_filters": "Try adjusting your filters", + "loading": "Loading transactions...", + "error_loading": "Error loading transactions", + "search_placeholder": "Search transactions...", + "all_types": "All Types", + "all_stores": "All Stores", + "col_date": "Date", + "col_customer": "Customer", + "col_type": "Type", + "col_points": "Points", + "col_location": "Location", + "col_notes": "Notes", + "no_transactions": "No transactions found", + "type_adjust": "Adjust", + "type_earn": "Earn", + "type_expire": "Expire", + "type_redeem": "Redeem" }, - "shared": { - "analytics": { - "total_programs": "Total Programs", - "total_members": "Total Members", - "active_members": "Active Members", - "points_issued_30d": "Points Issued (30d)", - "transactions_30d": "Transactions (30d)", - "x_active": "{count} active", - "points_overview": "Points Overview", - "points_issued_vs_redeemed": "Points Issued vs Redeemed (30d)", - "issued": "Issued:", - "redeemed": "Redeemed:", - "redemption_rate": "Redemption Rate", - "outstanding_balance": "Outstanding Balance", - "member_activity": "Member Activity", - "active_members_30d": "Active Members (30d)", - "new_this_month": "New This Month", - "merchants_with_programs": "Merchants with Programs", - "avg_points_per_member": "Avg Points Per Member", - "all_time_statistics": "All-Time Statistics", - "total_points_issued": "Total Points Issued", - "total_points_redeemed": "Total Points Redeemed", - "points_redeemed_30d": "Points Redeemed (30d)", - "outstanding_liability": "Outstanding Liability", - "location_breakdown": "Location Breakdown", - "store": "Store", - "enrolled": "Enrolled", - "points_earned": "Points Earned", - "points_redeemed": "Points Redeemed" - }, - "program_view": { - "program_configuration": "Program Configuration", - "program_name": "Program Name", - "card_name": "Card Name", - "stamps_configuration": "Stamps Configuration", - "stamps_target": "Stamps Target", - "reward_description": "Reward Description", - "reward_value": "Reward Value", - "points_configuration": "Points Configuration", - "points_per_eur": "Points per EUR", - "welcome_bonus": "Welcome Bonus", - "x_points": "{count} points", - "minimum_redemption": "Minimum Redemption", - "minimum_purchase": "Minimum Purchase", - "points_expiration": "Points Expiration", - "x_days_inactivity": "{days} days of inactivity", - "redemption_rewards": "Redemption Rewards", - "reward": "Reward", - "points_required": "Points Required", - "description": "Description", - "anti_fraud": "Anti-Fraud", - "cooldown": "Cooldown", - "x_minutes": "{count} minutes", - "max_daily_stamps": "Max Daily Stamps", - "staff_pin_required": "Staff PIN Required", - "branding": "Branding", - "primary_color": "Primary Color", - "secondary_color": "Secondary Color", - "logo_url": "Logo URL", - "hero_image_url": "Hero Image URL", - "terms_privacy": "Terms & Privacy", - "terms_conditions": "Terms & Conditions", - "privacy_policy_url": "Privacy Policy URL" - }, - "cards": { - "total_members": "Total Members", - "active_30d": "Active (30d)", - "new_this_month": "New This Month", - "total_points_balance": "Total Points Balance", - "search_placeholder": "Search by name, email, phone, or card number...", - "all_status": "All Status", - "all_stores": "All Stores", - "col_member": "Member", - "col_card_number": "Card Number", - "col_points_balance": "Points Balance", - "col_last_activity": "Last Activity", - "col_status": "Status", - "col_actions": "Actions", - "no_members": "No members found", - "adjust_search": "Try adjusting your search criteria" - }, - "card_detail": { - "title": "Card Detail", - "loading": "Loading card details...", - "error_loading": "Error loading card details", - "points_balance": "Points Balance", - "total_earned": "Total Earned", - "total_redeemed": "Total Redeemed", - "member_since": "Member Since", - "customer_information": "Customer Information", - "name": "Name", - "email": "Email", - "phone": "Phone", - "birthday": "Birthday", - "card_details": "Card Details", - "card_number": "Card Number", - "status": "Status", - "last_activity": "Last Activity", - "enrolled_at": "Enrolled At", - "transaction_history": "Transaction History", - "col_date": "Date", - "col_type": "Type", - "col_points": "Points", - "col_location": "Location", - "col_notes": "Notes", - "no_transactions": "No transactions found" - }, - "transactions": { - "title": "Transactions", - "subtitle": "View all loyalty transactions", - "adjust_filters": "Try adjusting your filters", - "loading": "Loading transactions...", - "error_loading": "Error loading transactions", - "search_placeholder": "Search transactions...", - "all_types": "All Types", - "all_stores": "All Stores", - "col_date": "Date", - "col_customer": "Customer", - "col_type": "Type", - "col_points": "Points", - "col_location": "Location", - "col_notes": "Notes", - "no_transactions": "No transactions found", - "type_adjust": "Adjust", - "type_earn": "Earn", - "type_expire": "Expire", - "type_redeem": "Redeem" - }, - "pins": { - "title": "Staff PINs", - "subtitle": "Manage staff authentication PINs", - "loading": "Loading PINs...", - "error_loading": "Error loading PINs", - "total_pins": "Total PINs", - "active_pins": "Active", - "locked_pins": "Locked", - "all_stores": "All Stores", - "all_status": "All Status", - "status_active": "Active", - "status_inactive": "Inactive", - "status_locked": "Locked", - "col_name": "Name", - "col_staff_id": "Staff ID", - "col_store": "Store", - "col_status": "Status", - "col_locked": "Locked", - "col_last_used": "Last Used", - "col_actions": "Actions", - "no_pins": "No staff PINs found", - "create_pin": "Create PIN", - "edit_pin": "Edit PIN", - "delete_pin": "Delete PIN", - "unlock_pin": "Unlock", - "confirm_delete": "Are you sure you want to delete this PIN?", - "pin_name": "Staff member name", - "pin_staff_id": "Employee ID (optional)", - "pin_code": "PIN Code", - "pin_code_hint": "4-6 digit PIN", - "pin_edit_hint": "Leave blank to keep current PIN", - "pin_edit_placeholder": "New PIN (optional)", - "pin_store": "Store", - "select_store": "Select store", - "pin_created": "PIN created successfully", - "pin_updated": "PIN updated successfully", - "pin_deleted": "PIN deleted successfully", - "pin_unlocked": "PIN unlocked successfully", - "save": "Save", - "cancel": "Cancel", - "read_only_notice": "PINs are read-only in admin view" - }, - "program_form": { - "program_type": "Program Type", - "points_type_desc": "Earn points per EUR spent", - "stamps_type_desc": "Collect N stamps, get reward", - "hybrid_type_desc": "Both stamps and points", - "stamps_configuration": "Stamps Configuration", - "stamps_target": "Stamps Target", - "stamps_target_help": "Number of stamps needed for reward", - "reward_description": "Reward Description", - "reward_value_cents": "Reward Value (cents)", - "points_configuration": "Points Configuration", - "points_per_eur": "Points per EUR spent", - "eur_equals_points": "1 EUR = {points} point(s)", - "welcome_bonus_points": "Welcome Bonus Points", - "welcome_bonus_help": "Bonus points awarded on enrollment", - "minimum_redemption_points": "Minimum Redemption Points", - "minimum_purchase_cents": "Minimum Purchase (cents)", - "minimum_purchase_help": "Minimum purchase amount to earn points (0 = no minimum)", - "points_expiration_days": "Points Expiration (days)", - "points_expiration_help": "Days of inactivity before points expire (0 = never)", - "redemption_rewards": "Redemption Rewards", - "add_reward": "Add Reward", - "no_rewards_configured": "No rewards configured. Add a reward to allow customers to redeem points.", - "reward_name": "Reward Name", - "points_required": "Points Required", - "description": "Description", - "anti_fraud_settings": "Anti-Fraud Settings", - "cooldown_minutes": "Cooldown (minutes)", - "cooldown_help": "Time between stamps from the same card", - "max_daily_stamps": "Max Daily Stamps", - "max_daily_stamps_help": "Maximum stamps per card per day", - "require_staff_pin": "Require Staff PIN", - "branding": "Branding", - "card_name": "Card Name", - "primary_color": "Primary Color", - "secondary_color": "Secondary Color", - "logo_url": "Logo URL", - "logo_url_help": "Required for Google Wallet integration. Must be a publicly accessible image URL (PNG or JPG).", - "hero_image_url": "Hero Image URL", - "terms_privacy": "Terms & Privacy", - "terms_conditions": "Terms & Conditions", - "privacy_policy_url": "Privacy Policy URL", - "program_status": "Program Status", - "program_active": "Program Active", - "program_active_help": "When disabled, customers cannot earn or redeem", - "delete_program": "Delete Program", - "create_program": "Create Program", - "save_changes": "Save Changes" - } + "pins": { + "title": "Staff PINs", + "subtitle": "Manage staff authentication PINs", + "loading": "Loading PINs...", + "error_loading": "Error loading PINs", + "total_pins": "Total PINs", + "active_pins": "Active", + "locked_pins": "Locked", + "all_stores": "All Stores", + "all_status": "All Status", + "status_active": "Active", + "status_inactive": "Inactive", + "status_locked": "Locked", + "col_name": "Name", + "col_staff_id": "Staff ID", + "col_store": "Store", + "col_status": "Status", + "col_locked": "Locked", + "col_last_used": "Last Used", + "col_actions": "Actions", + "no_pins": "No staff PINs found", + "create_pin": "Create PIN", + "edit_pin": "Edit PIN", + "delete_pin": "Delete PIN", + "unlock_pin": "Unlock", + "confirm_delete": "Are you sure you want to delete this PIN?", + "pin_name": "Staff member name", + "pin_staff_id": "Employee ID (optional)", + "pin_code": "PIN Code", + "pin_code_hint": "4-6 digit PIN", + "pin_edit_hint": "Leave blank to keep current PIN", + "pin_edit_placeholder": "New PIN (optional)", + "pin_store": "Store", + "select_store": "Select store", + "pin_created": "PIN created successfully", + "pin_updated": "PIN updated successfully", + "pin_deleted": "PIN deleted successfully", + "pin_unlocked": "PIN unlocked successfully", + "save": "Save", + "cancel": "Cancel", + "read_only_notice": "PINs are read-only in admin view" }, - "admin": { - "programs": { - "title": "Loyalty Programs", - "create_program": "Create Program", - "loading": "Loading loyalty programs...", - "error_loading": "Error loading loyalty programs", - "total_programs": "Total Programs", - "active": "Active", - "total_members": "Total Members", - "transactions_30d": "Transactions (30d)", - "search_placeholder": "Search by merchant name...", - "all_status": "All Status", - "table_merchant": "Merchant", - "table_program_type": "Program Type", - "table_members": "Members", - "table_points_issued": "Points Issued", - "table_status": "Status", - "table_created": "Created", - "table_actions": "Actions", - "no_programs": "No loyalty programs found", - "adjust_filters": "Try adjusting your search or filters", - "no_merchants_yet": "No merchants have set up loyalty programs yet", - "x_active": "({count} active)", - "x_redeemed": "{count} redeemed", - "pt_per_eur": "pt/EUR", - "delete_title": "Delete Loyalty Program", - "delete_message": "Delete the loyalty program for \"{name}\"? This will permanently remove all associated data (cards, transactions, rewards). This cannot be undone.", - "delete_confirm": "Delete Program", - "create_title": "Create Loyalty Program", - "create_description": "Select a merchant to create a loyalty program for.", - "search_merchant": "Search Merchant", - "type_merchant_name": "Type merchant name...", - "no_merchants_found": "No merchants found", - "existing_program_warning": "This merchant already has a loyalty program.", - "view_edit_existing": "View / Edit existing program" - }, - "merchant_detail": { - "title": "Merchant Loyalty Details", - "loading": "Loading merchant loyalty details...", - "error_loading": "Error loading merchant loyalty", - "program_active": "Loyalty Program Active", - "no_program_subtitle": "No Loyalty Program", - "quick_actions": "Quick Actions", - "edit_program": "Edit Program", - "admin_policy": "Admin Policy", - "view_merchant": "View Merchant", - "total_members": "Total Members", - "active_30d": "Active (30d)", - "points_issued_30d": "Points Issued (30d)", - "points_redeemed_30d": "Points Redeemed (30d)", - "no_program": "No Loyalty Program", - "no_program_desc": "This merchant has not set up a loyalty program yet.", - "create_program": "Create Program", - "delete_title": "Delete Loyalty Program", - "delete_message": "This will permanently delete the loyalty program and all associated data. This action cannot be undone.", - "delete_confirm": "Delete Program", - "location_breakdown": "Location Breakdown", - "table_location": "Location", - "table_enrolled": "Enrolled", - "table_points_earned": "Points Earned", - "table_points_redeemed": "Points Redeemed", - "table_transactions_30d": "Transactions (30d)", - "admin_policy_settings": "Admin Policy Settings", - "staff_pin_policy": "Staff PIN Policy", - "self_enrollment": "Self Enrollment", - "cross_location_redemption": "Cross-Location Redemption", - "allowed": "Allowed", - "disabled": "Disabled", - "modify_policy": "Modify admin policy", - "view_cards": "View Cards", - "view_transactions": "View Transactions", - "view_pins": "View PINs" - }, - "merchant_cards": { - "title": "Merchant Cards", - "subtitle": "View loyalty cards for this merchant", - "loading": "Loading cards...", - "error_loading": "Error loading cards" - }, - "merchant_card_detail": { - "title": "Card Detail", - "error_loading": "Error loading card", - "loading": "Loading card details..." - }, - "merchant_transactions": { - "title": "Merchant Transactions", - "subtitle": "View all transactions for this merchant", - "loading": "Loading transactions...", - "error_loading": "Error loading transactions" - }, - "merchant_pins": { - "title": "Merchant Staff PINs", - "subtitle": "View staff PINs for this merchant (read-only)", - "loading": "Loading PINs...", - "error_loading": "Error loading PINs" - }, - "merchant_settings": { - "title": "Merchant Loyalty Settings", - "loading": "Loading settings...", - "error_loading": "Error loading settings", - "admin_controlled": "Admin-controlled settings for this merchant's loyalty program", - "staff_pin_policy": "Staff PIN Policy", - "staff_pin_description": "Control whether staff members at this merchant's locations must enter a PIN to process loyalty transactions.", - "required": "Required", - "required_desc": "Staff must enter their PIN for every transaction. Recommended for security.", - "optional": "Optional", - "optional_desc": "Stores can choose whether to require PINs at their locations.", - "pin_disabled": "Disabled", - "pin_disabled_desc": "Staff PINs are not used. Any staff member can process transactions.", - "pin_lockout_settings": "PIN Lockout Settings", - "max_failed_attempts": "Max Failed Attempts", - "max_failed_attempts_help": "Number of wrong attempts before lockout (3-10)", - "lockout_duration": "Lockout Duration (minutes)", - "lockout_duration_help": "How long to lock out after failed attempts (5-120 minutes)", - "enrollment_settings": "Enrollment Settings", - "allow_self_enrollment": "Allow Self-Service Enrollment", - "self_enrollment_desc": "Customers can sign up via QR code without staff assistance", - "transaction_settings": "Transaction Settings", - "allow_cross_location": "Allow Cross-Location Redemption", - "cross_location_desc": "Customers can redeem points at any merchant location", - "allow_void": "Allow Void Transactions", - "void_desc": "Staff can void points/stamps for returns", - "save_settings": "Save Settings" - }, - "analytics": { - "title": "Loyalty Analytics", - "subtitle": "Platform-wide loyalty program statistics", - "loading": "Loading analytics...", - "error_loading": "Error loading analytics", - "filter_by_merchant": "Filter by Merchant", - "search_merchants_placeholder": "Search merchants by name...", - "showing_stats_for": "Showing stats for:", - "wallet_status": "Wallet Integration Status", - "google_wallet": "Google Wallet", - "apple_wallet": "Apple Wallet", - "connected": "Connected", - "error": "Error", - "not_configured": "Not Configured", - "issuer_id": "Issuer ID", - "project": "Project", - "wallet_objects": "Wallet Objects", - "loyalty_classes": "Loyalty Classes", - "pass_type_id": "Pass Type ID", - "team_id": "Team ID", - "active_passes": "Active Passes", - "quick_actions": "Quick Actions", - "view_all_programs": "View All Programs", - "manage_merchants": "Manage Merchants" - }, - "program_edit": { - "title": "Program Configuration", - "loading": "Loading program configuration...", - "error_loading": "Error loading program configuration", - "create_subtitle": "Create a loyalty program for this merchant", - "edit_subtitle": "Edit program configuration", - "delete_title": "Delete Loyalty Program", - "delete_message": "This will permanently delete the loyalty program and all associated data (cards, transactions, rewards). This action cannot be undone.", - "delete_confirm": "Delete Program" - } - }, - "merchant": { - "program": { - "title": "Loyalty Program", - "subtitle": "Your loyalty program configuration.", - "edit_program": "Edit Program", - "no_program": "No Loyalty Program", - "no_program_desc": "Your loyalty program hasn't been set up yet. Create one to start rewarding your customers.", - "create_program": "Create Program" - }, - "program_edit": { - "title": "Loyalty Settings", - "page_title": "Loyalty Program Settings", - "subtitle": "Configure your loyalty program", - "loading": "Loading settings...", - "error_loading": "Error loading settings", - "delete_title": "Delete Loyalty Program", - "delete_message": "This will permanently delete your loyalty program and all associated data (cards, transactions, rewards). This action cannot be undone.", - "delete_confirm": "Delete Program" - }, - "cards": { - "title": "Customer Cards", - "subtitle": "View and manage loyalty members across all locations", - "error_loading": "Error loading cards", - "loading": "Loading cards..." - }, - "card_detail": { - "title": "Card Detail", - "card_label": "Card", - "error_loading": "Error loading card", - "loading": "Loading card details..." - }, - "transactions": { - "title": "Transactions", - "subtitle": "View all loyalty transactions across locations", - "error_loading": "Error loading transactions", - "loading": "Loading transactions..." - }, - "pins": { - "title": "Staff PINs", - "subtitle": "Manage staff PINs across all locations", - "error_loading": "Error loading PINs", - "loading": "Loading PINs..." - }, - "settings": { - "title": "Loyalty Settings", - "subtitle": "View loyalty program settings", - "admin_controlled": "These settings are managed by the platform administrator", - "error_loading": "Error loading settings", - "loading": "Loading settings...", - "lockout_attempts": "Lockout Attempts", - "lockout_minutes": "Lockout Duration (min)", - "permissions": "Enrollment & Permissions", - "pin_policy": "PIN Policy", - "staff_pin_policy": "Staff PIN Policy", - "self_enrollment": "Self Enrollment", - "cross_location": "Cross-Location Redemption", - "void_transactions": "Allow Void Transactions", - "enabled": "Enabled", - "disabled": "Disabled", - "required": "Required", - "optional": "Optional" - }, - "analytics": { - "title": "Loyalty Analytics", - "subtitle": "Loyalty program statistics across all your stores", - "loading": "Loading analytics...", - "error_loading": "Error loading analytics", - "no_program": "No Loyalty Program", - "no_program_desc": "Set up a loyalty program to see analytics here.", - "create_program": "Create Program", - "quick_actions": "Quick Actions", - "view_program": "View Program", - "edit_program": "Edit Program" - } - }, - "store": { - "terminal": { - "title": "Loyalty Terminal", - "subtitle": "Process loyalty transactions", - "members": "Members", - "analytics": "Analytics", - "loading": "Loading loyalty terminal...", - "error_loading": "Error loading terminal", - "not_setup": "Loyalty Program Not Set Up", - "not_setup_desc": "Your merchant doesn't have a loyalty program configured yet.", - "setup_program": "Set Up Loyalty Program", - "contact_admin": "Contact your administrator to complete the setup.", - "find_customer": "Find Customer", - "search_placeholder": "Email, phone, or card number...", - "looking_up": "Looking up...", - "look_up_customer": "Look Up Customer", - "enroll_new_customer": "Enroll New Customer", - "customer_found": "Customer Found", - "points_balance": "Points Balance", - "stamps": "Stamps", - "x_more_for_reward": "{count} more for reward", - "ready_to_redeem": "Ready to redeem!", - "add_stamp": "Add Stamp", - "current": "Current:", - "cooldown_active": "Cooldown active", - "redeem_stamps": "Redeem Stamps", - "not_enough_stamps": "Not enough stamps yet", - "earn_points": "Earn Points", - "purchase_amount": "Purchase Amount", - "points_to_award": "Points to award:", - "award_points": "Award Points", - "redeem_reward": "Redeem Reward", - "select_reward": "Select Reward", - "select_reward_placeholder": "Select reward...", - "points_after": "Points after:", - "search_to_process": "Search for a customer to process a transaction", - "recent_transactions": "Recent Transactions at This Location", - "col_time": "Time", - "col_customer": "Customer", - "col_type": "Type", - "col_points": "Points", - "col_notes": "Notes", - "no_recent_transactions": "No recent transactions", - "enter_staff_pin": "Enter Staff PIN", - "pin_authorize": "Enter your staff PIN to authorize this transaction.", - "clear": "Clear", - "processing": "Processing...", - "customer_not_found": "Customer not found. You can enroll them as a new member.", - "error_lookup": "Error looking up customer: {message}", - "transaction_failed": "Transaction failed: {message}", - "stamp_added": "Stamp added!", - "stamps_redeemed": "Stamps redeemed! Reward earned.", - "x_points_awarded": "{points} points awarded!", - "reward_redeemed": "Reward redeemed: {name}" - }, - "cards": { - "title": "Loyalty Members", - "subtitle": "View and manage your loyalty program members", - "enroll_new": "Enroll New", - "loading": "Loading members...", - "error_loading": "Error loading members", - "total_members": "Total Members", - "active_30d": "Active (30d)", - "new_this_month": "New This Month", - "total_points_balance": "Total Points Balance", - "search_placeholder": "Search by name, email, phone, or card...", - "all_status": "All Status", - "col_member": "Member", - "col_card_number": "Card Number", - "col_points_balance": "Points Balance", - "col_last_activity": "Last Activity", - "col_status": "Status", - "col_actions": "Actions", - "no_members": "No members found", - "adjust_search": "Try adjusting your search", - "enroll_first": "Enroll your first customer to get started" - }, - "card_detail": { - "title": "Member Details", - "loading": "Loading member details...", - "error_loading": "Error loading member", - "points_balance": "Points Balance", - "total_earned": "Total Earned", - "total_redeemed": "Total Redeemed", - "member_since": "Member Since", - "customer_information": "Customer Information", - "name": "Name", - "email": "Email", - "phone": "Phone", - "birthday": "Birthday", - "card_details": "Card Details", - "card_number": "Card Number", - "status": "Status", - "last_activity": "Last Activity", - "enrolled_at": "Enrolled At", - "transaction_history": "Transaction History", - "col_date": "Date", - "col_type": "Type", - "col_points": "Points", - "col_location": "Location", - "col_notes": "Notes", - "no_transactions": "No transactions yet" - }, - "enroll": { - "title": "Enroll Customer", - "page_title": "Enroll New Customer", - "subtitle": "Add a new member to your loyalty program", - "loading": "Loading...", - "error_loading": "Error loading enrollment form", - "customer_information": "Customer Information", - "first_name": "First Name", - "last_name": "Last Name", - "email": "Email", - "phone": "Phone", - "birthday": "Birthday", - "birthday_help": "For birthday rewards (optional)", - "communication_preferences": "Communication Preferences", - "send_emails": "Send promotional emails", - "send_sms": "Send promotional SMS", - "welcome_bonus": "Welcome Bonus", - "welcome_bonus_desc": "Customer will receive {points} bonus points!", - "enroll_customer": "Enroll Customer", - "enrolling": "Enrolling...", - "customer_enrolled": "Customer Enrolled!", - "starting_balance": "Starting Balance:", - "x_points": "{count} points", - "back_to_terminal": "Back to Terminal", - "enroll_another": "Enroll Another", - "enrollment_failed": "Enrollment failed: {message}" - }, - "analytics": { - "title": "Loyalty Analytics", - "subtitle": "Track your loyalty program performance", - "loading": "Loading analytics...", - "error_loading": "Error loading analytics", - "quick_actions": "Quick Actions", - "open_terminal": "Open Terminal", - "view_members": "View Members", - "view_program": "View Program" - }, - "program": { - "title": "Loyalty Program", - "subtitle": "Your loyalty program configuration", - "edit_program": "Edit Program", - "loading": "Loading program...", - "error_loading": "Error loading program", - "no_program": "No Loyalty Program", - "no_program_desc": "Your merchant doesn't have a loyalty program configured yet.", - "create_program": "Create Program", - "contact_admin": "Contact your administrator to set up a loyalty program." - }, - "pins": { - "title": "Staff PINs", - "subtitle": "Manage staff authentication PINs for this location", - "loading": "Loading PINs...", - "error_loading": "Error loading PINs" - }, - "settings": { - "title": "Loyalty Settings", - "page_title": "Loyalty Program Settings", - "subtitle": "Configure your loyalty program", - "back_to_program": "Back to Program", - "loading": "Loading settings...", - "error_loading": "Error loading settings", - "access_restricted": "Access Restricted", - "owner_only": "Only the merchant owner can manage loyalty program settings.", - "delete_title": "Delete Loyalty Program", - "delete_message": "This will permanently delete the loyalty program and all associated data (cards, transactions, rewards). This action cannot be undone.", - "delete_confirm": "Delete Program", - "program_created": "Program created successfully", - "program_updated": "Program updated successfully", - "program_deleted": "Loyalty program deleted", - "save_failed": "Failed to save: {message}", - "delete_failed": "Failed to delete: {message}" - } - }, - "storefront": { - "dashboard": { - "back_to_account": "Back to Account", - "my_loyalty": "My Loyalty", - "join_title": "Join Our Rewards Program!", - "join_subtitle": "Earn points on every purchase and redeem for rewards.", - "join_now": "Join Now", - "points_balance": "Points Balance", - "card_number": "Card Number", - "show_card": "Show Card", - "total_earned": "Total Earned", - "total_redeemed": "Total Redeemed", - "available_rewards": "Available Rewards", - "no_rewards_yet": "No rewards available yet", - "ready_to_redeem": "Ready to redeem", - "x_more_to_go": "{count} more to go", - "redeem_hint": "Show your card to staff to redeem rewards in-store.", - "recent_activity": "Recent Activity", - "view_all": "View All", - "no_transactions": "No transactions yet. Make a purchase to start earning points!", - "earn_redeem_locations": "Earn & Redeem Locations", - "your_loyalty_card": "Your Loyalty Card", - "show_to_staff": "Show this to staff when making a purchase or redeeming rewards." - }, - "history": { - "back_to_loyalty": "Back to Loyalty", - "title": "Transaction History", - "subtitle": "View all your loyalty point transactions", - "current_balance": "Current Balance", - "total_earned": "Total Earned", - "total_redeemed": "Total Redeemed", - "no_transactions": "No transactions yet", - "balance": "Balance:", - "previous": "Previous", - "next": "Next", - "page_x_of_y": "Page {page} of {pages}" - } - }, - "toasts": { - "program_activated": "Program activated successfully", - "program_deactivated": "Program deactivated successfully", - "activate_failed": "Failed to activate program: {message}", - "deactivate_failed": "Failed to deactivate program: {message}", - "program_deleted": "Program deleted successfully", - "delete_failed": "Failed to delete program: {message}", - "program_created": "Program created successfully", - "program_updated": "Program updated successfully", - "loyalty_program_created": "Loyalty program created", - "loyalty_program_deleted": "Loyalty program deleted", - "settings_saved": "Settings saved successfully", - "save_failed": "Failed to save: {message}", - "settings_save_failed": "Failed to save settings: {message}", - "create_failed": "Failed to create program: {message}", - "logo_required": "Logo URL is required for wallet integration." + "program_form": { + "program_type": "Program Type", + "points_type_desc": "Earn points per EUR spent", + "stamps_type_desc": "Collect N stamps, get reward", + "hybrid_type_desc": "Both stamps and points", + "stamps_configuration": "Stamps Configuration", + "stamps_target": "Stamps Target", + "stamps_target_help": "Number of stamps needed for reward", + "reward_description": "Reward Description", + "reward_value_cents": "Reward Value (cents)", + "points_configuration": "Points Configuration", + "points_per_eur": "Points per EUR spent", + "eur_equals_points": "1 EUR = {points} point(s)", + "welcome_bonus_points": "Welcome Bonus Points", + "welcome_bonus_help": "Bonus points awarded on enrollment", + "minimum_redemption_points": "Minimum Redemption Points", + "minimum_purchase_cents": "Minimum Purchase (cents)", + "minimum_purchase_help": "Minimum purchase amount to earn points (0 = no minimum)", + "points_expiration_days": "Points Expiration (days)", + "points_expiration_help": "Days of inactivity before points expire (0 = never)", + "redemption_rewards": "Redemption Rewards", + "add_reward": "Add Reward", + "no_rewards_configured": "No rewards configured. Add a reward to allow customers to redeem points.", + "reward_name": "Reward Name", + "points_required": "Points Required", + "description": "Description", + "anti_fraud_settings": "Anti-Fraud Settings", + "cooldown_minutes": "Cooldown (minutes)", + "cooldown_help": "Time between stamps from the same card", + "max_daily_stamps": "Max Daily Stamps", + "max_daily_stamps_help": "Maximum stamps per card per day", + "require_staff_pin": "Require Staff PIN", + "branding": "Branding", + "card_name": "Card Name", + "primary_color": "Primary Color", + "secondary_color": "Secondary Color", + "logo_url": "Logo URL", + "logo_url_help": "Required for Google Wallet integration. Must be a publicly accessible image URL (PNG or JPG).", + "hero_image_url": "Hero Image URL", + "terms_privacy": "Terms & Privacy", + "terms_conditions": "Terms & Conditions", + "privacy_policy_url": "Privacy Policy URL", + "program_status": "Program Status", + "program_active": "Program Active", + "program_active_help": "When disabled, customers cannot earn or redeem", + "delete_program": "Delete Program", + "create_program": "Create Program", + "save_changes": "Save Changes" } + }, + "admin": { + "programs": { + "title": "Loyalty Programs", + "create_program": "Create Program", + "loading": "Loading loyalty programs...", + "error_loading": "Error loading loyalty programs", + "total_programs": "Total Programs", + "active": "Active", + "total_members": "Total Members", + "transactions_30d": "Transactions (30d)", + "search_placeholder": "Search by merchant name...", + "all_status": "All Status", + "table_merchant": "Merchant", + "table_program_type": "Program Type", + "table_members": "Members", + "table_points_issued": "Points Issued", + "table_status": "Status", + "table_created": "Created", + "table_actions": "Actions", + "no_programs": "No loyalty programs found", + "adjust_filters": "Try adjusting your search or filters", + "no_merchants_yet": "No merchants have set up loyalty programs yet", + "x_active": "({count} active)", + "x_redeemed": "{count} redeemed", + "pt_per_eur": "pt/EUR", + "delete_title": "Delete Loyalty Program", + "delete_message": "Delete the loyalty program for \"{name}\"? This will permanently remove all associated data (cards, transactions, rewards). This cannot be undone.", + "delete_confirm": "Delete Program", + "create_title": "Create Loyalty Program", + "create_description": "Select a merchant to create a loyalty program for.", + "search_merchant": "Search Merchant", + "type_merchant_name": "Type merchant name...", + "no_merchants_found": "No merchants found", + "existing_program_warning": "This merchant already has a loyalty program.", + "view_edit_existing": "View / Edit existing program" + }, + "merchant_detail": { + "title": "Merchant Loyalty Details", + "loading": "Loading merchant loyalty details...", + "error_loading": "Error loading merchant loyalty", + "program_active": "Loyalty Program Active", + "no_program_subtitle": "No Loyalty Program", + "quick_actions": "Quick Actions", + "edit_program": "Edit Program", + "admin_policy": "Admin Policy", + "view_merchant": "View Merchant", + "total_members": "Total Members", + "active_30d": "Active (30d)", + "points_issued_30d": "Points Issued (30d)", + "points_redeemed_30d": "Points Redeemed (30d)", + "no_program": "No Loyalty Program", + "no_program_desc": "This merchant has not set up a loyalty program yet.", + "create_program": "Create Program", + "delete_title": "Delete Loyalty Program", + "delete_message": "This will permanently delete the loyalty program and all associated data. This action cannot be undone.", + "delete_confirm": "Delete Program", + "location_breakdown": "Location Breakdown", + "table_location": "Location", + "table_enrolled": "Enrolled", + "table_points_earned": "Points Earned", + "table_points_redeemed": "Points Redeemed", + "table_transactions_30d": "Transactions (30d)", + "admin_policy_settings": "Admin Policy Settings", + "staff_pin_policy": "Staff PIN Policy", + "self_enrollment": "Self Enrollment", + "cross_location_redemption": "Cross-Location Redemption", + "allowed": "Allowed", + "disabled": "Disabled", + "modify_policy": "Modify admin policy", + "view_cards": "View Cards", + "view_transactions": "View Transactions", + "view_pins": "View PINs" + }, + "merchant_cards": { + "title": "Merchant Cards", + "subtitle": "View loyalty cards for this merchant", + "loading": "Loading cards...", + "error_loading": "Error loading cards" + }, + "merchant_card_detail": { + "title": "Card Detail", + "error_loading": "Error loading card", + "loading": "Loading card details..." + }, + "merchant_transactions": { + "title": "Merchant Transactions", + "subtitle": "View all transactions for this merchant", + "loading": "Loading transactions...", + "error_loading": "Error loading transactions" + }, + "merchant_pins": { + "title": "Merchant Staff PINs", + "subtitle": "View staff PINs for this merchant (read-only)", + "loading": "Loading PINs...", + "error_loading": "Error loading PINs" + }, + "merchant_settings": { + "title": "Merchant Loyalty Settings", + "loading": "Loading settings...", + "error_loading": "Error loading settings", + "admin_controlled": "Admin-controlled settings for this merchant's loyalty program", + "staff_pin_policy": "Staff PIN Policy", + "staff_pin_description": "Control whether staff members at this merchant's locations must enter a PIN to process loyalty transactions.", + "required": "Required", + "required_desc": "Staff must enter their PIN for every transaction. Recommended for security.", + "optional": "Optional", + "optional_desc": "Stores can choose whether to require PINs at their locations.", + "pin_disabled": "Disabled", + "pin_disabled_desc": "Staff PINs are not used. Any staff member can process transactions.", + "pin_lockout_settings": "PIN Lockout Settings", + "max_failed_attempts": "Max Failed Attempts", + "max_failed_attempts_help": "Number of wrong attempts before lockout (3-10)", + "lockout_duration": "Lockout Duration (minutes)", + "lockout_duration_help": "How long to lock out after failed attempts (5-120 minutes)", + "enrollment_settings": "Enrollment Settings", + "allow_self_enrollment": "Allow Self-Service Enrollment", + "self_enrollment_desc": "Customers can sign up via QR code without staff assistance", + "transaction_settings": "Transaction Settings", + "allow_cross_location": "Allow Cross-Location Redemption", + "cross_location_desc": "Customers can redeem points at any merchant location", + "allow_void": "Allow Void Transactions", + "void_desc": "Staff can void points/stamps for returns", + "save_settings": "Save Settings" + }, + "analytics": { + "title": "Loyalty Analytics", + "subtitle": "Platform-wide loyalty program statistics", + "loading": "Loading analytics...", + "error_loading": "Error loading analytics", + "filter_by_merchant": "Filter by Merchant", + "search_merchants_placeholder": "Search merchants by name...", + "showing_stats_for": "Showing stats for:", + "wallet_status": "Wallet Integration Status", + "google_wallet": "Google Wallet", + "apple_wallet": "Apple Wallet", + "connected": "Connected", + "error": "Error", + "not_configured": "Not Configured", + "issuer_id": "Issuer ID", + "project": "Project", + "wallet_objects": "Wallet Objects", + "loyalty_classes": "Loyalty Classes", + "pass_type_id": "Pass Type ID", + "team_id": "Team ID", + "active_passes": "Active Passes", + "quick_actions": "Quick Actions", + "view_all_programs": "View All Programs", + "manage_merchants": "Manage Merchants" + }, + "program_edit": { + "title": "Program Configuration", + "loading": "Loading program configuration...", + "error_loading": "Error loading program configuration", + "create_subtitle": "Create a loyalty program for this merchant", + "edit_subtitle": "Edit program configuration", + "delete_title": "Delete Loyalty Program", + "delete_message": "This will permanently delete the loyalty program and all associated data (cards, transactions, rewards). This action cannot be undone.", + "delete_confirm": "Delete Program" + } + }, + "merchant": { + "program": { + "title": "Loyalty Program", + "subtitle": "Your loyalty program configuration.", + "edit_program": "Edit Program", + "no_program": "No Loyalty Program", + "no_program_desc": "Your loyalty program hasn't been set up yet. Create one to start rewarding your customers.", + "create_program": "Create Program" + }, + "program_edit": { + "title": "Loyalty Settings", + "page_title": "Loyalty Program Settings", + "subtitle": "Configure your loyalty program", + "loading": "Loading settings...", + "error_loading": "Error loading settings", + "delete_title": "Delete Loyalty Program", + "delete_message": "This will permanently delete your loyalty program and all associated data (cards, transactions, rewards). This action cannot be undone.", + "delete_confirm": "Delete Program" + }, + "cards": { + "title": "Customer Cards", + "subtitle": "View and manage loyalty members across all locations", + "error_loading": "Error loading cards", + "loading": "Loading cards..." + }, + "card_detail": { + "title": "Card Detail", + "card_label": "Card", + "error_loading": "Error loading card", + "loading": "Loading card details..." + }, + "transactions": { + "title": "Transactions", + "subtitle": "View all loyalty transactions across locations", + "error_loading": "Error loading transactions", + "loading": "Loading transactions..." + }, + "pins": { + "title": "Staff PINs", + "subtitle": "Manage staff PINs across all locations", + "error_loading": "Error loading PINs", + "loading": "Loading PINs..." + }, + "settings": { + "title": "Loyalty Settings", + "subtitle": "View loyalty program settings", + "admin_controlled": "These settings are managed by the platform administrator", + "error_loading": "Error loading settings", + "loading": "Loading settings...", + "lockout_attempts": "Lockout Attempts", + "lockout_minutes": "Lockout Duration (min)", + "permissions": "Enrollment & Permissions", + "pin_policy": "PIN Policy", + "staff_pin_policy": "Staff PIN Policy", + "self_enrollment": "Self Enrollment", + "cross_location": "Cross-Location Redemption", + "void_transactions": "Allow Void Transactions", + "enabled": "Enabled", + "disabled": "Disabled", + "required": "Required", + "optional": "Optional" + }, + "analytics": { + "title": "Loyalty Analytics", + "subtitle": "Loyalty program statistics across all your stores", + "loading": "Loading analytics...", + "error_loading": "Error loading analytics", + "no_program": "No Loyalty Program", + "no_program_desc": "Set up a loyalty program to see analytics here.", + "create_program": "Create Program", + "quick_actions": "Quick Actions", + "view_program": "View Program", + "edit_program": "Edit Program" + } + }, + "store": { + "terminal": { + "title": "Loyalty Terminal", + "subtitle": "Process loyalty transactions", + "members": "Members", + "analytics": "Analytics", + "loading": "Loading loyalty terminal...", + "error_loading": "Error loading terminal", + "not_setup": "Loyalty Program Not Set Up", + "not_setup_desc": "Your merchant doesn't have a loyalty program configured yet.", + "setup_program": "Set Up Loyalty Program", + "contact_admin": "Contact your administrator to complete the setup.", + "find_customer": "Find Customer", + "search_placeholder": "Email, phone, or card number...", + "looking_up": "Looking up...", + "look_up_customer": "Look Up Customer", + "enroll_new_customer": "Enroll New Customer", + "customer_found": "Customer Found", + "points_balance": "Points Balance", + "stamps": "Stamps", + "x_more_for_reward": "{count} more for reward", + "ready_to_redeem": "Ready to redeem!", + "add_stamp": "Add Stamp", + "current": "Current:", + "cooldown_active": "Cooldown active", + "redeem_stamps": "Redeem Stamps", + "not_enough_stamps": "Not enough stamps yet", + "earn_points": "Earn Points", + "purchase_amount": "Purchase Amount", + "points_to_award": "Points to award:", + "award_points": "Award Points", + "redeem_reward": "Redeem Reward", + "select_reward": "Select Reward", + "select_reward_placeholder": "Select reward...", + "points_after": "Points after:", + "search_to_process": "Search for a customer to process a transaction", + "recent_transactions": "Recent Transactions at This Location", + "col_time": "Time", + "col_customer": "Customer", + "col_type": "Type", + "col_points": "Points", + "col_notes": "Notes", + "no_recent_transactions": "No recent transactions", + "enter_staff_pin": "Enter Staff PIN", + "pin_authorize": "Enter your staff PIN to authorize this transaction.", + "clear": "Clear", + "processing": "Processing...", + "customer_not_found": "Customer not found. You can enroll them as a new member.", + "error_lookup": "Error looking up customer: {message}", + "transaction_failed": "Transaction failed: {message}", + "stamp_added": "Stamp added!", + "stamps_redeemed": "Stamps redeemed! Reward earned.", + "x_points_awarded": "{points} points awarded!", + "reward_redeemed": "Reward redeemed: {name}" + }, + "cards": { + "title": "Loyalty Members", + "subtitle": "View and manage your loyalty program members", + "enroll_new": "Enroll New", + "loading": "Loading members...", + "error_loading": "Error loading members", + "total_members": "Total Members", + "active_30d": "Active (30d)", + "new_this_month": "New This Month", + "total_points_balance": "Total Points Balance", + "search_placeholder": "Search by name, email, phone, or card...", + "all_status": "All Status", + "col_member": "Member", + "col_card_number": "Card Number", + "col_points_balance": "Points Balance", + "col_last_activity": "Last Activity", + "col_status": "Status", + "col_actions": "Actions", + "no_members": "No members found", + "adjust_search": "Try adjusting your search", + "enroll_first": "Enroll your first customer to get started" + }, + "card_detail": { + "title": "Member Details", + "loading": "Loading member details...", + "error_loading": "Error loading member", + "points_balance": "Points Balance", + "total_earned": "Total Earned", + "total_redeemed": "Total Redeemed", + "member_since": "Member Since", + "customer_information": "Customer Information", + "name": "Name", + "email": "Email", + "phone": "Phone", + "birthday": "Birthday", + "card_details": "Card Details", + "card_number": "Card Number", + "status": "Status", + "last_activity": "Last Activity", + "enrolled_at": "Enrolled At", + "transaction_history": "Transaction History", + "col_date": "Date", + "col_type": "Type", + "col_points": "Points", + "col_location": "Location", + "col_notes": "Notes", + "no_transactions": "No transactions yet" + }, + "enroll": { + "title": "Enroll Customer", + "page_title": "Enroll New Customer", + "subtitle": "Add a new member to your loyalty program", + "loading": "Loading...", + "error_loading": "Error loading enrollment form", + "customer_information": "Customer Information", + "first_name": "First Name", + "last_name": "Last Name", + "email": "Email", + "phone": "Phone", + "birthday": "Birthday", + "birthday_help": "For birthday rewards (optional)", + "communication_preferences": "Communication Preferences", + "send_emails": "Send promotional emails", + "send_sms": "Send promotional SMS", + "welcome_bonus": "Welcome Bonus", + "welcome_bonus_desc": "Customer will receive {points} bonus points!", + "enroll_customer": "Enroll Customer", + "enrolling": "Enrolling...", + "customer_enrolled": "Customer Enrolled!", + "starting_balance": "Starting Balance:", + "x_points": "{count} points", + "back_to_terminal": "Back to Terminal", + "enroll_another": "Enroll Another", + "enrollment_failed": "Enrollment failed: {message}" + }, + "analytics": { + "title": "Loyalty Analytics", + "subtitle": "Track your loyalty program performance", + "loading": "Loading analytics...", + "error_loading": "Error loading analytics", + "quick_actions": "Quick Actions", + "open_terminal": "Open Terminal", + "view_members": "View Members", + "view_program": "View Program" + }, + "program": { + "title": "Loyalty Program", + "subtitle": "Your loyalty program configuration", + "edit_program": "Edit Program", + "loading": "Loading program...", + "error_loading": "Error loading program", + "no_program": "No Loyalty Program", + "no_program_desc": "Your merchant doesn't have a loyalty program configured yet.", + "create_program": "Create Program", + "contact_admin": "Contact your administrator to set up a loyalty program." + }, + "pins": { + "title": "Staff PINs", + "subtitle": "Manage staff authentication PINs for this location", + "loading": "Loading PINs...", + "error_loading": "Error loading PINs" + }, + "settings": { + "title": "Loyalty Settings", + "page_title": "Loyalty Program Settings", + "subtitle": "Configure your loyalty program", + "back_to_program": "Back to Program", + "loading": "Loading settings...", + "error_loading": "Error loading settings", + "access_restricted": "Access Restricted", + "owner_only": "Only the merchant owner can manage loyalty program settings.", + "delete_title": "Delete Loyalty Program", + "delete_message": "This will permanently delete the loyalty program and all associated data (cards, transactions, rewards). This action cannot be undone.", + "delete_confirm": "Delete Program", + "program_created": "Program created successfully", + "program_updated": "Program updated successfully", + "program_deleted": "Loyalty program deleted", + "save_failed": "Failed to save: {message}", + "delete_failed": "Failed to delete: {message}" + } + }, + "storefront": { + "dashboard": { + "back_to_account": "Back to Account", + "my_loyalty": "My Loyalty", + "join_title": "Join Our Rewards Program!", + "join_subtitle": "Earn points on every purchase and redeem for rewards.", + "join_now": "Join Now", + "points_balance": "Points Balance", + "card_number": "Card Number", + "show_card": "Show Card", + "total_earned": "Total Earned", + "total_redeemed": "Total Redeemed", + "available_rewards": "Available Rewards", + "no_rewards_yet": "No rewards available yet", + "ready_to_redeem": "Ready to redeem", + "x_more_to_go": "{count} more to go", + "redeem_hint": "Show your card to staff to redeem rewards in-store.", + "recent_activity": "Recent Activity", + "view_all": "View All", + "no_transactions": "No transactions yet. Make a purchase to start earning points!", + "earn_redeem_locations": "Earn & Redeem Locations", + "your_loyalty_card": "Your Loyalty Card", + "show_to_staff": "Show this to staff when making a purchase or redeeming rewards." + }, + "history": { + "back_to_loyalty": "Back to Loyalty", + "title": "Transaction History", + "subtitle": "View all your loyalty point transactions", + "current_balance": "Current Balance", + "total_earned": "Total Earned", + "total_redeemed": "Total Redeemed", + "no_transactions": "No transactions yet", + "balance": "Balance:", + "previous": "Previous", + "next": "Next", + "page_x_of_y": "Page {page} of {pages}" + } + }, + "toasts": { + "program_activated": "Program activated successfully", + "program_deactivated": "Program deactivated successfully", + "activate_failed": "Failed to activate program: {message}", + "deactivate_failed": "Failed to deactivate program: {message}", + "program_deleted": "Program deleted successfully", + "delete_failed": "Failed to delete program: {message}", + "program_created": "Program created successfully", + "program_updated": "Program updated successfully", + "loyalty_program_created": "Loyalty program created", + "loyalty_program_deleted": "Loyalty program deleted", + "settings_saved": "Settings saved successfully", + "save_failed": "Failed to save: {message}", + "settings_save_failed": "Failed to save settings: {message}", + "create_failed": "Failed to create program: {message}", + "logo_required": "Logo URL is required for wallet integration." + } } diff --git a/app/modules/loyalty/locales/fr.json b/app/modules/loyalty/locales/fr.json index f5892e72..f5434ea7 100644 --- a/app/modules/loyalty/locales/fr.json +++ b/app/modules/loyalty/locales/fr.json @@ -1,874 +1,875 @@ { - "loyalty": { - "module": { - "name": "Programmes de Fidélité", - "description": "Programmes de fidélité par tampons et points avec intégration wallet" - }, - "program": { - "title": "Programme de Fidélité", - "create": "Créer un Programme", - "edit": "Modifier le Programme", - "activate": "Activer", - "deactivate": "Désactiver", - "type": { - "stamps": "Tampons", - "points": "Points", - "hybrid": "Hybride" - } - }, - "card": { - "title": "Carte de Fidélité", - "number": "Numéro de Carte", - "qr_code": "Code QR", - "enroll": "Inscrire un Client", - "deactivate": "Désactiver la Carte" - }, - "stamp": { - "title": "Tampons", - "add": "Ajouter un Tampon", - "redeem": "Échanger la Récompense", - "count": "{current} sur {target}", - "until_reward": "Plus que {count} pour la récompense" - }, - "points": { - "title": "Points", - "earn": "Gagner des Points", - "redeem": "Échanger des Points", - "balance": "{count} points", - "per_euro": "{points} points par euro" - }, - "pin": { - "title": "Codes PIN du Personnel", - "create": "Créer un PIN", - "edit": "Modifier le PIN", - "unlock": "Débloquer le PIN", - "locked": "PIN bloqué jusqu'à {time}" - }, - "wallet": { - "google": "Ajouter à Google Wallet", - "apple": "Ajouter à Apple Wallet" - }, - "stats": { - "title": "Statistiques", - "total_cards": "Total des Cartes", - "active_cards": "Cartes Actives", - "stamps_issued": "Tampons Émis", - "rewards_redeemed": "Récompenses Échangées" - }, - "errors": { - "program_not_found": "Programme de fidélité introuvable", - "program_inactive": "Le programme de fidélité n'est pas actif", - "card_not_found": "Carte de fidélité introuvable", - "card_inactive": "La carte de fidélité n'est pas active", - "cooldown": "Veuillez attendre {minutes} minutes avant le prochain tampon", - "daily_limit": "Limite quotidienne de {limit} tampons atteinte", - "insufficient_stamps": "Il faut {required} tampons, vous en avez {current}", - "insufficient_points": "Il faut {required} points, vous en avez {current}", - "pin_required": "Le code PIN du personnel est requis", - "pin_invalid": "Code PIN invalide", - "pin_locked": "PIN bloqué suite à trop de tentatives échouées" - } + "loyalty": { + "module": { + "name": "Programmes de Fidélité", + "description": "Programmes de fidélité par tampons et points avec intégration wallet" }, - "menu": { - "loyalty": "Fidélité", - "loyalty_programs": "Programmes de fidélité", - "programs": "Programmes", - "analytics": "Analytique", - "dashboard": "Tableau de bord", - "terminal": "Terminal", - "customer_cards": "Cartes clients", - "statistics": "Statistiques", - "program": "Programme", - "overview": "Aperçu", - "settings": "Paramètres", - "wallet_debug": "Wallet Debug", - "staff_pins": "PINs du personnel", - "transactions": "Transactions" + "program": { + "title": "Programme de Fidélité", + "create": "Créer un Programme", + "edit": "Modifier le Programme", + "activate": "Activer", + "deactivate": "Désactiver", + "type": { + "stamps": "Tampons", + "points": "Points", + "hybrid": "Hybride" + } }, - "permissions": { - "view_programs": "Voir les programmes", - "view_programs_desc": "Voir les programmes de fidélité et leurs détails", - "manage_programs": "Gérer les programmes", - "manage_programs_desc": "Créer et configurer les programmes de fidélité", - "view_rewards": "Voir les récompenses", - "view_rewards_desc": "Voir les récompenses et les échanges", - "manage_rewards": "Gérer les récompenses", - "manage_rewards_desc": "Créer et gérer les récompenses de fidélité" + "card": { + "title": "Carte de Fidélité", + "number": "Numéro de Carte", + "qr_code": "Code QR", + "enroll": "Inscrire un Client", + "deactivate": "Désactiver la Carte" }, - "onboarding": { - "create_program": { - "title": "Créer un programme de fidélité", - "description": "Créez votre premier programme de tampons ou de points" - } + "stamp": { + "title": "Tampons", + "add": "Ajouter un Tampon", + "redeem": "Échanger la Récompense", + "count": "{current} sur {target}", + "until_reward": "Plus que {count} pour la récompense" }, - "enrollment": { - "title": "Rejoignez notre programme de récompenses !", - "subtitle": "Gagnez {points} point pour chaque EUR dépensé", - "not_available_title": "Programme non disponible", - "not_available_message": "Ce magasin n'a pas encore de programme de fidélité.", - "welcome_bonus": "Obtenez {points} points bonus en vous inscrivant !", - "already_member": "Déjà membre ? Vos points sont liés à votre e-mail.", - "form": { - "email": "E-mail", - "first_name": "Prénom", - "last_name": "Nom", - "phone": "Téléphone (facultatif)", - "birthday": "Date de naissance (facultatif)", - "birthday_hint": "Pour des récompenses d'anniversaire spéciales", - "terms_agree": "J'accepte les", - "terms": "Conditions Générales", - "marketing_consent": "M'envoyer des nouvelles et offres spéciales", - "joining": "Inscription en cours...", - "join_button": "S'inscrire et obtenir {points} points" - }, - "privacy_policy": "Politique de confidentialité", - "close": "Fermer", - "success": { - "title": "Bienvenue !", - "message": "Vous êtes maintenant membre de notre programme de récompenses.", - "card_number": "Votre numéro de carte", - "wallet_prompt": "Enregistrez votre carte sur votre téléphone pour un accès facile :", - "next_steps_title": "Et maintenant ?", - "step_earn": "Présentez votre numéro de carte lors de vos achats pour gagner des points", - "step_balance": "Consultez votre solde en ligne ou dans l'application", - "step_redeem": "Échangez vos points contre des récompenses dans tous nos points de vente", - "view_dashboard": "Voir mon tableau de bord fidélité", - "continue_shopping": "Continuer mes achats" - }, - "errors": { - "load_failed": "Impossible de charger les informations du programme", - "email_exists": "Cet e-mail est déjà inscrit dans notre programme de fidélité.", - "failed": "L'inscription a échoué. Veuillez réessayer." - } + "points": { + "title": "Points", + "earn": "Gagner des Points", + "redeem": "Échanger des Points", + "balance": "{count} points", + "per_euro": "{points} points par euro" }, - "common": { - "active": "Actif", - "all_stores": "Tous les magasins", - "at": "à", - "back": "Retour", - "cancel": "Annuler", - "confirm": "Confirmer", - "continue": "Continuer", - "delete": "Supprimer", - "disabled": "Désactivé", - "edit": "Modifier", - "enabled": "Activé", - "inactive": "Inactif", - "loading": "Chargement...", - "minutes": "minutes", - "never": "Jamais", - "no": "Non", - "none": "Aucun", - "or": "ou", - "points": "points", - "program_not_setup": "Programme fidélité non configuré", - "program_not_setup_desc": "Veuillez configurer un programme fidélité", - "refresh": "Actualiser", - "save": "Enregistrer", - "saving": "Enregistrement...", - "total": "TOTAL", - "view": "Voir", - "yes": "Oui" + "pin": { + "title": "Codes PIN du Personnel", + "create": "Créer un PIN", + "edit": "Modifier le PIN", + "unlock": "Débloquer le PIN", + "locked": "PIN bloqué jusqu'à {time}" + }, + "wallet": { + "google": "Ajouter à Google Wallet", + "apple": "Ajouter à Apple Wallet" + }, + "stats": { + "title": "Statistiques", + "total_cards": "Total des Cartes", + "active_cards": "Cartes Actives", + "stamps_issued": "Tampons Émis", + "rewards_redeemed": "Récompenses Échangées" + }, + "errors": { + "program_not_found": "Programme de fidélité introuvable", + "program_inactive": "Le programme de fidélité n'est pas actif", + "card_not_found": "Carte de fidélité introuvable", + "card_inactive": "La carte de fidélité n'est pas active", + "cooldown": "Veuillez attendre {minutes} minutes avant le prochain tampon", + "daily_limit": "Limite quotidienne de {limit} tampons atteinte", + "insufficient_stamps": "Il faut {required} tampons, vous en avez {current}", + "insufficient_points": "Il faut {required} points, vous en avez {current}", + "pin_required": "Le code PIN du personnel est requis", + "pin_invalid": "Code PIN invalide", + "pin_locked": "PIN bloqué suite à trop de tentatives échouées" + } + }, + "menu": { + "loyalty": "Fidélité", + "loyalty_programs": "Programmes de fidélité", + "programs": "Programmes", + "analytics": "Analytique", + "dashboard": "Tableau de bord", + "terminal": "Terminal", + "customer_cards": "Cartes clients", + "statistics": "Statistiques", + "program": "Programme", + "overview": "Aperçu", + "settings": "Paramètres", + "wallet_debug": "Wallet Debug", + "staff_pins": "PINs du personnel", + "transactions": "Transactions" + }, + "permissions": { + "view_programs": "Voir les programmes", + "view_programs_desc": "Voir les programmes de fidélité et leurs détails", + "manage_programs": "Gérer les programmes", + "manage_programs_desc": "Créer et configurer les programmes de fidélité", + "view_rewards": "Voir les récompenses", + "view_rewards_desc": "Voir les récompenses et les échanges", + "manage_rewards": "Gérer les récompenses", + "manage_rewards_desc": "Créer et gérer les récompenses de fidélité" + }, + "onboarding": { + "create_program": { + "title": "Créer un programme de fidélité", + "description": "Créez votre premier programme de tampons ou de points" + } + }, + "enrollment": { + "title": "Rejoignez notre programme de récompenses !", + "subtitle": "Gagnez {points} point pour chaque EUR dépensé", + "not_available_title": "Programme non disponible", + "not_available_message": "Ce magasin n'a pas encore de programme de fidélité.", + "welcome_bonus": "Obtenez {points} points bonus en vous inscrivant !", + "already_member": "Déjà membre ? Vos points sont liés à votre e-mail.", + "form": { + "email": "E-mail", + "first_name": "Prénom", + "last_name": "Nom", + "phone": "Téléphone (facultatif)", + "birthday": "Date de naissance (facultatif)", + "birthday_hint": "Pour des récompenses d'anniversaire spéciales", + "terms_agree": "J'accepte les", + "terms": "Conditions Générales", + "marketing_consent": "M'envoyer des nouvelles et offres spéciales", + "joining": "Inscription en cours...", + "join_button": "S'inscrire et obtenir {points} points" + }, + "privacy_policy": "Politique de confidentialité", + "close": "Fermer", + "success": { + "title": "Bienvenue !", + "message": "Vous êtes maintenant membre de notre programme de récompenses.", + "card_number": "Votre numéro de carte", + "wallet_prompt": "Enregistrez votre carte sur votre téléphone pour un accès facile :", + "next_steps_title": "Et maintenant ?", + "step_earn": "Présentez votre numéro de carte lors de vos achats pour gagner des points", + "step_balance": "Consultez votre solde en ligne ou dans l'application", + "step_redeem": "Échangez vos points contre des récompenses dans tous nos points de vente", + "view_dashboard": "Voir mon tableau de bord fidélité", + "continue_shopping": "Continuer mes achats" + }, + "errors": { + "load_failed": "Impossible de charger les informations du programme", + "email_exists": "Cet e-mail est déjà inscrit dans notre programme de fidélité.", + "failed": "L'inscription a échoué. Veuillez réessayer." + } + }, + "common": { + "active": "Actif", + "all_stores": "Tous les magasins", + "at": "à", + "back": "Retour", + "cancel": "Annuler", + "confirm": "Confirmer", + "continue": "Continuer", + "delete": "Supprimer", + "disabled": "Désactivé", + "edit": "Modifier", + "enabled": "Activé", + "inactive": "Inactif", + "loading": "Chargement...", + "minutes": "minutes", + "never": "Jamais", + "no": "Non", + "none": "Aucun", + "or": "ou", + "points": "points", + "program_not_setup": "Programme fidélité non configuré", + "program_not_setup_desc": "Veuillez configurer un programme fidélité", + "refresh": "Actualiser", + "save": "Enregistrer", + "saving": "Enregistrement...", + "total": "TOTAL", + "view": "Voir", + "yes": "Oui", + "contact_admin_setup": "Contactez votre administrateur pour configurer le programme fidélité" + }, + "transactions": { + "card_created": "Inscrit", + "welcome_bonus": "Bonus de bienvenue", + "stamp_earned": "Tampon obtenu", + "stamp_redeemed": "Tampon échangé", + "stamp_voided": "Tampon annulé", + "stamp_adjustment": "Tampon ajusté", + "points_earned": "Points gagnés", + "points_redeemed": "Points échangés", + "points_voided": "Points annulés", + "points_adjustment": "Points ajustés", + "points_expired": "Points expirés", + "card_deactivated": "Désactivé", + "reward_redeemed": "Récompense échangée" + }, + "shared": { + "analytics": { + "total_programs": "Programmes au total", + "total_members": "Membres au total", + "active_members": "Membres actifs", + "points_issued_30d": "Points émis (30j)", + "transactions_30d": "Transactions (30j)", + "x_active": "{count} actifs", + "points_overview": "Aperçu des points", + "points_issued_vs_redeemed": "Points émis vs échangés (30j)", + "issued": "Émis :", + "redeemed": "Échangés :", + "redemption_rate": "Taux d'échange", + "outstanding_balance": "Solde restant", + "member_activity": "Activité des membres", + "active_members_30d": "Membres actifs (30j)", + "new_this_month": "Nouveaux ce mois", + "merchants_with_programs": "Commerçants avec programmes", + "avg_points_per_member": "Moy. points par membre", + "all_time_statistics": "Statistiques globales", + "total_points_issued": "Total points émis", + "total_points_redeemed": "Total points échangés", + "points_redeemed_30d": "Points échangés (30j)", + "outstanding_liability": "Passif en cours", + "location_breakdown": "Répartition par point de vente", + "store": "Magasin", + "enrolled": "Inscrits", + "points_earned": "Points gagnés", + "points_redeemed": "Points échangés" + }, + "program_view": { + "program_configuration": "Configuration du programme", + "program_name": "Nom du programme", + "card_name": "Nom de la carte", + "stamps_configuration": "Configuration des tampons", + "stamps_target": "Objectif de tampons", + "reward_description": "Description de la récompense", + "reward_value": "Valeur de la récompense", + "points_configuration": "Configuration des points", + "points_per_eur": "Points par EUR", + "welcome_bonus": "Bonus de bienvenue", + "x_points": "{count} points", + "minimum_redemption": "Échange minimum", + "minimum_purchase": "Achat minimum", + "points_expiration": "Expiration des points", + "x_days_inactivity": "{days} jours d'inactivité", + "redemption_rewards": "Récompenses d'échange", + "reward": "Récompense", + "points_required": "Points requis", + "description": "Description", + "anti_fraud": "Anti-fraude", + "cooldown": "Temps d'attente", + "x_minutes": "{count} minutes", + "max_daily_stamps": "Tampons max par jour", + "staff_pin_required": "PIN personnel requis", + "branding": "Image de marque", + "primary_color": "Couleur principale", + "secondary_color": "Couleur secondaire", + "logo_url": "URL du logo", + "hero_image_url": "URL de l'image principale", + "terms_privacy": "Conditions & Confidentialité", + "terms_conditions": "Conditions Générales", + "privacy_policy_url": "URL politique de confidentialité" + }, + "cards": { + "total_members": "Membres totaux", + "active_30d": "Actifs (30j)", + "new_this_month": "Nouveaux ce mois", + "total_points_balance": "Solde total des points", + "search_placeholder": "Rechercher par nom, email, téléphone ou numéro de carte...", + "all_status": "Tous les statuts", + "all_stores": "Tous les magasins", + "col_member": "Membre", + "col_card_number": "Numéro de carte", + "col_points_balance": "Solde de points", + "col_last_activity": "Dernière activité", + "col_status": "Statut", + "col_actions": "Actions", + "no_members": "Aucun membre trouvé", + "adjust_search": "Essayez de modifier vos critères de recherche" + }, + "card_detail": { + "title": "Détail de la carte", + "loading": "Chargement des détails...", + "error_loading": "Erreur lors du chargement", + "points_balance": "Solde de points", + "total_earned": "Total gagné", + "total_redeemed": "Total échangé", + "member_since": "Membre depuis", + "customer_information": "Informations client", + "name": "Nom", + "email": "E-mail", + "phone": "Téléphone", + "birthday": "Anniversaire", + "card_details": "Détails de la carte", + "card_number": "Numéro de carte", + "status": "Statut", + "last_activity": "Dernière activité", + "enrolled_at": "Inscrit à", + "transaction_history": "Historique des transactions", + "col_date": "Date", + "col_type": "Type", + "col_points": "Points", + "col_location": "Emplacement", + "col_notes": "Notes", + "no_transactions": "Aucune transaction trouvée" }, "transactions": { - "card_created": "Inscrit", - "welcome_bonus": "Bonus de bienvenue", - "stamp_earned": "Tampon obtenu", - "stamp_redeemed": "Tampon échangé", - "stamp_voided": "Tampon annulé", - "stamp_adjustment": "Tampon ajusté", - "points_earned": "Points gagnés", - "points_redeemed": "Points échangés", - "points_voided": "Points annulés", - "points_adjustment": "Points ajustés", - "points_expired": "Points expirés", - "card_deactivated": "Désactivé", - "reward_redeemed": "Récompense échangée" + "title": "Transactions", + "subtitle": "Voir toutes les transactions", + "adjust_filters": "Essayez de modifier vos filtres", + "loading": "Chargement des transactions...", + "error_loading": "Erreur lors du chargement", + "search_placeholder": "Rechercher des transactions...", + "all_types": "Tous les types", + "all_stores": "Tous les magasins", + "col_date": "Date", + "col_customer": "Client", + "col_type": "Type", + "col_points": "Points", + "col_location": "Emplacement", + "col_notes": "Notes", + "no_transactions": "Aucune transaction trouvée", + "type_adjust": "Ajuster", + "type_earn": "Gagner", + "type_expire": "Expirer", + "type_redeem": "Échanger" }, - "shared": { - "analytics": { - "total_programs": "Programmes au total", - "total_members": "Membres au total", - "active_members": "Membres actifs", - "points_issued_30d": "Points émis (30j)", - "transactions_30d": "Transactions (30j)", - "x_active": "{count} actifs", - "points_overview": "Aperçu des points", - "points_issued_vs_redeemed": "Points émis vs échangés (30j)", - "issued": "Émis :", - "redeemed": "Échangés :", - "redemption_rate": "Taux d'échange", - "outstanding_balance": "Solde restant", - "member_activity": "Activité des membres", - "active_members_30d": "Membres actifs (30j)", - "new_this_month": "Nouveaux ce mois", - "merchants_with_programs": "Commerçants avec programmes", - "avg_points_per_member": "Moy. points par membre", - "all_time_statistics": "Statistiques globales", - "total_points_issued": "Total points émis", - "total_points_redeemed": "Total points échangés", - "points_redeemed_30d": "Points échangés (30j)", - "outstanding_liability": "Passif en cours", - "location_breakdown": "Répartition par point de vente", - "store": "Magasin", - "enrolled": "Inscrits", - "points_earned": "Points gagnés", - "points_redeemed": "Points échangés" - }, - "program_view": { - "program_configuration": "Configuration du programme", - "program_name": "Nom du programme", - "card_name": "Nom de la carte", - "stamps_configuration": "Configuration des tampons", - "stamps_target": "Objectif de tampons", - "reward_description": "Description de la récompense", - "reward_value": "Valeur de la récompense", - "points_configuration": "Configuration des points", - "points_per_eur": "Points par EUR", - "welcome_bonus": "Bonus de bienvenue", - "x_points": "{count} points", - "minimum_redemption": "Échange minimum", - "minimum_purchase": "Achat minimum", - "points_expiration": "Expiration des points", - "x_days_inactivity": "{days} jours d'inactivité", - "redemption_rewards": "Récompenses d'échange", - "reward": "Récompense", - "points_required": "Points requis", - "description": "Description", - "anti_fraud": "Anti-fraude", - "cooldown": "Temps d'attente", - "x_minutes": "{count} minutes", - "max_daily_stamps": "Tampons max par jour", - "staff_pin_required": "PIN personnel requis", - "branding": "Image de marque", - "primary_color": "Couleur principale", - "secondary_color": "Couleur secondaire", - "logo_url": "URL du logo", - "hero_image_url": "URL de l'image principale", - "terms_privacy": "Conditions & Confidentialité", - "terms_conditions": "Conditions Générales", - "privacy_policy_url": "URL politique de confidentialité" - }, - "cards": { - "total_members": "Membres totaux", - "active_30d": "Actifs (30j)", - "new_this_month": "Nouveaux ce mois", - "total_points_balance": "Solde total des points", - "search_placeholder": "Rechercher par nom, email, téléphone ou numéro de carte...", - "all_status": "Tous les statuts", - "all_stores": "Tous les magasins", - "col_member": "Membre", - "col_card_number": "Numéro de carte", - "col_points_balance": "Solde de points", - "col_last_activity": "Dernière activité", - "col_status": "Statut", - "col_actions": "Actions", - "no_members": "Aucun membre trouvé", - "adjust_search": "Essayez de modifier vos critères de recherche" - }, - "card_detail": { - "title": "Détail de la carte", - "loading": "Chargement des détails...", - "error_loading": "Erreur lors du chargement", - "points_balance": "Solde de points", - "total_earned": "Total gagné", - "total_redeemed": "Total échangé", - "member_since": "Membre depuis", - "customer_information": "Informations client", - "name": "Nom", - "email": "E-mail", - "phone": "Téléphone", - "birthday": "Anniversaire", - "card_details": "Détails de la carte", - "card_number": "Numéro de carte", - "status": "Statut", - "last_activity": "Dernière activité", - "enrolled_at": "Inscrit à", - "transaction_history": "Historique des transactions", - "col_date": "Date", - "col_type": "Type", - "col_points": "Points", - "col_location": "Emplacement", - "col_notes": "Notes", - "no_transactions": "Aucune transaction trouvée" - }, - "transactions": { - "title": "Transactions", - "subtitle": "Voir toutes les transactions", - "adjust_filters": "Essayez de modifier vos filtres", - "loading": "Chargement des transactions...", - "error_loading": "Erreur lors du chargement", - "search_placeholder": "Rechercher des transactions...", - "all_types": "Tous les types", - "all_stores": "Tous les magasins", - "col_date": "Date", - "col_customer": "Client", - "col_type": "Type", - "col_points": "Points", - "col_location": "Emplacement", - "col_notes": "Notes", - "no_transactions": "Aucune transaction trouvée", - "type_adjust": "Ajuster", - "type_earn": "Gagner", - "type_expire": "Expirer", - "type_redeem": "Échanger" - }, - "pins": { - "title": "PINs du personnel", - "subtitle": "Gérer les PINs d'authentification", - "loading": "Chargement des PINs...", - "error_loading": "Erreur lors du chargement", - "total_pins": "Total PINs", - "active_pins": "Actifs", - "locked_pins": "Verrouillés", - "all_stores": "Tous les magasins", - "all_status": "Tous les statuts", - "status_active": "Actif", - "status_inactive": "Inactif", - "status_locked": "Verrouillé", - "col_name": "Nom", - "col_staff_id": "ID employé", - "col_store": "Magasin", - "col_status": "Statut", - "col_locked": "Verrouillé", - "col_last_used": "Dernière utilisation", - "col_actions": "Actions", - "no_pins": "Aucun PIN trouvé", - "create_pin": "Créer un PIN", - "edit_pin": "Modifier le PIN", - "delete_pin": "Supprimer le PIN", - "unlock_pin": "Déverrouiller", - "confirm_delete": "Êtes-vous sûr de vouloir supprimer ce PIN ?", - "pin_name": "Nom de l'employé", - "pin_staff_id": "ID employé (optionnel)", - "pin_code": "Code PIN", - "pin_code_hint": "PIN à 4-6 chiffres", - "pin_edit_hint": "Laisser vide pour garder le PIN actuel", - "pin_edit_placeholder": "Nouveau PIN (optionnel)", - "pin_store": "Magasin", - "select_store": "Sélectionner un magasin", - "pin_created": "PIN créé avec succès", - "pin_updated": "PIN modifié avec succès", - "pin_deleted": "PIN supprimé avec succès", - "pin_unlocked": "PIN déverrouillé avec succès", - "save": "Enregistrer", - "cancel": "Annuler", - "read_only_notice": "Les PINs sont en lecture seule en mode admin" - }, - "program_form": { - "program_type": "Type de programme", - "points_type_desc": "Gagner des points par EUR dépensé", - "stamps_type_desc": "Collecter N tampons, obtenir une récompense", - "hybrid_type_desc": "Tampons et points combinés", - "stamps_configuration": "Configuration des tampons", - "stamps_target": "Objectif de tampons", - "stamps_target_help": "Nombre de tampons nécessaires pour la récompense", - "reward_description": "Description de la récompense", - "reward_value_cents": "Valeur de la récompense (centimes)", - "points_configuration": "Configuration des points", - "points_per_eur": "Points par EUR dépensé", - "eur_equals_points": "1 EUR = {points} point(s)", - "welcome_bonus_points": "Points bonus de bienvenue", - "welcome_bonus_help": "Points bonus attribués à l'inscription", - "minimum_redemption_points": "Points minimum d'échange", - "minimum_purchase_cents": "Achat minimum (centimes)", - "minimum_purchase_help": "Montant minimum d'achat pour gagner des points (0 = pas de minimum)", - "points_expiration_days": "Expiration des points (jours)", - "points_expiration_help": "Jours d'inactivité avant expiration des points (0 = jamais)", - "redemption_rewards": "Récompenses d'échange", - "add_reward": "Ajouter une récompense", - "no_rewards_configured": "Aucune récompense configurée. Ajoutez une récompense pour permettre aux clients d'échanger des points.", - "reward_name": "Nom de la récompense", - "points_required": "Points requis", - "description": "Description", - "anti_fraud_settings": "Paramètres anti-fraude", - "cooldown_minutes": "Temps d'attente (minutes)", - "cooldown_help": "Temps entre les tampons d'une même carte", - "max_daily_stamps": "Tampons max par jour", - "max_daily_stamps_help": "Maximum de tampons par carte par jour", - "require_staff_pin": "Exiger le PIN du personnel", - "branding": "Image de marque", - "card_name": "Nom de la carte", - "primary_color": "Couleur principale", - "secondary_color": "Couleur secondaire", - "logo_url": "URL du logo", - "logo_url_help": "Requis pour l'intégration Google Wallet. Doit être une URL d'image publique (PNG ou JPG).", - "hero_image_url": "URL de l'image principale", - "terms_privacy": "Conditions & Confidentialité", - "terms_conditions": "Conditions Générales", - "privacy_policy_url": "URL politique de confidentialité", - "program_status": "Statut du programme", - "program_active": "Programme actif", - "program_active_help": "Désactivé, les clients ne peuvent ni gagner ni échanger", - "delete_program": "Supprimer le programme", - "create_program": "Créer le programme", - "save_changes": "Enregistrer les modifications" - } + "pins": { + "title": "PINs du personnel", + "subtitle": "Gérer les PINs d'authentification", + "loading": "Chargement des PINs...", + "error_loading": "Erreur lors du chargement", + "total_pins": "Total PINs", + "active_pins": "Actifs", + "locked_pins": "Verrouillés", + "all_stores": "Tous les magasins", + "all_status": "Tous les statuts", + "status_active": "Actif", + "status_inactive": "Inactif", + "status_locked": "Verrouillé", + "col_name": "Nom", + "col_staff_id": "ID employé", + "col_store": "Magasin", + "col_status": "Statut", + "col_locked": "Verrouillé", + "col_last_used": "Dernière utilisation", + "col_actions": "Actions", + "no_pins": "Aucun PIN trouvé", + "create_pin": "Créer un PIN", + "edit_pin": "Modifier le PIN", + "delete_pin": "Supprimer le PIN", + "unlock_pin": "Déverrouiller", + "confirm_delete": "Êtes-vous sûr de vouloir supprimer ce PIN ?", + "pin_name": "Nom de l'employé", + "pin_staff_id": "ID employé (optionnel)", + "pin_code": "Code PIN", + "pin_code_hint": "PIN à 4-6 chiffres", + "pin_edit_hint": "Laisser vide pour garder le PIN actuel", + "pin_edit_placeholder": "Nouveau PIN (optionnel)", + "pin_store": "Magasin", + "select_store": "Sélectionner un magasin", + "pin_created": "PIN créé avec succès", + "pin_updated": "PIN modifié avec succès", + "pin_deleted": "PIN supprimé avec succès", + "pin_unlocked": "PIN déverrouillé avec succès", + "save": "Enregistrer", + "cancel": "Annuler", + "read_only_notice": "Les PINs sont en lecture seule en mode admin" }, - "admin": { - "programs": { - "title": "Programmes de fidélité", - "create_program": "Créer un programme", - "loading": "Chargement des programmes de fidélité...", - "error_loading": "Erreur de chargement des programmes de fidélité", - "total_programs": "Programmes au total", - "active": "Actifs", - "total_members": "Membres au total", - "transactions_30d": "Transactions (30j)", - "search_placeholder": "Rechercher par nom de commerçant...", - "all_status": "Tous les statuts", - "table_merchant": "Commerçant", - "table_program_type": "Type de programme", - "table_members": "Membres", - "table_points_issued": "Points émis", - "table_status": "Statut", - "table_created": "Créé", - "table_actions": "Actions", - "no_programs": "Aucun programme de fidélité trouvé", - "adjust_filters": "Essayez d'ajuster votre recherche ou vos filtres", - "no_merchants_yet": "Aucun commerçant n'a encore créé de programme de fidélité", - "x_active": "({count} actifs)", - "x_redeemed": "{count} échangés", - "pt_per_eur": "pt/EUR", - "delete_title": "Supprimer le programme de fidélité", - "delete_message": "Supprimer le programme de fidélité de \"{name}\" ? Cela supprimera définitivement toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", - "delete_confirm": "Supprimer le programme", - "create_title": "Créer un programme de fidélité", - "create_description": "Sélectionnez un commerçant pour créer un programme de fidélité.", - "search_merchant": "Rechercher un commerçant", - "type_merchant_name": "Tapez le nom du commerçant...", - "no_merchants_found": "Aucun commerçant trouvé", - "existing_program_warning": "Ce commerçant a déjà un programme de fidélité.", - "view_edit_existing": "Voir / Modifier le programme existant" - }, - "merchant_detail": { - "title": "Détails fidélité du commerçant", - "loading": "Chargement des détails de fidélité...", - "error_loading": "Erreur de chargement de la fidélité du commerçant", - "program_active": "Programme de fidélité actif", - "no_program_subtitle": "Aucun programme de fidélité", - "quick_actions": "Actions rapides", - "edit_program": "Modifier le programme", - "admin_policy": "Politique admin", - "view_merchant": "Voir le commerçant", - "total_members": "Membres au total", - "active_30d": "Actifs (30j)", - "points_issued_30d": "Points émis (30j)", - "points_redeemed_30d": "Points échangés (30j)", - "no_program": "Aucun programme de fidélité", - "no_program_desc": "Ce commerçant n'a pas encore configuré de programme de fidélité.", - "create_program": "Créer un programme", - "delete_title": "Supprimer le programme de fidélité", - "delete_message": "Cela supprimera définitivement le programme de fidélité et toutes les données associées. Cette action est irréversible.", - "delete_confirm": "Supprimer le programme", - "location_breakdown": "Répartition par point de vente", - "table_location": "Point de vente", - "table_enrolled": "Inscrits", - "table_points_earned": "Points gagnés", - "table_points_redeemed": "Points échangés", - "table_transactions_30d": "Transactions (30j)", - "admin_policy_settings": "Paramètres de politique admin", - "staff_pin_policy": "Politique PIN du personnel", - "self_enrollment": "Auto-inscription", - "cross_location_redemption": "Échange inter-points de vente", - "allowed": "Autorisé", - "disabled": "Désactivé", - "modify_policy": "Modifier la politique admin", - "view_cards": "Voir les cartes", - "view_transactions": "Voir les transactions", - "view_pins": "Voir les PINs" - }, - "merchant_cards": { - "title": "Cartes du commerçant", - "subtitle": "Voir les cartes de ce commerçant", - "loading": "Chargement des cartes...", - "error_loading": "Erreur lors du chargement" - }, - "merchant_card_detail": { - "title": "Détail de la carte", - "error_loading": "Erreur lors du chargement", - "loading": "Chargement des détails..." - }, - "merchant_transactions": { - "title": "Transactions du commerçant", - "subtitle": "Voir toutes les transactions de ce commerçant", - "loading": "Chargement des transactions...", - "error_loading": "Erreur lors du chargement" - }, - "merchant_pins": { - "title": "PINs du commerçant", - "subtitle": "Voir les PINs de ce commerçant (lecture seule)", - "loading": "Chargement des PINs...", - "error_loading": "Erreur lors du chargement" - }, - "merchant_settings": { - "title": "Paramètres de fidélité du commerçant", - "loading": "Chargement des paramètres...", - "error_loading": "Erreur de chargement des paramètres", - "admin_controlled": "Paramètres contrôlés par l'admin pour le programme de fidélité de ce commerçant", - "staff_pin_policy": "Politique PIN du personnel", - "staff_pin_description": "Contrôlez si les membres du personnel doivent saisir un PIN pour traiter les transactions de fidélité.", - "required": "Obligatoire", - "required_desc": "Le personnel doit saisir son PIN pour chaque transaction. Recommandé pour la sécurité.", - "optional": "Facultatif", - "optional_desc": "Les magasins peuvent choisir d'exiger ou non les PINs.", - "pin_disabled": "Désactivé", - "pin_disabled_desc": "Les PINs du personnel ne sont pas utilisés. Tout membre du personnel peut traiter les transactions.", - "pin_lockout_settings": "Paramètres de verrouillage PIN", - "max_failed_attempts": "Tentatives échouées max", - "max_failed_attempts_help": "Nombre de tentatives erronées avant verrouillage (3-10)", - "lockout_duration": "Durée de verrouillage (minutes)", - "lockout_duration_help": "Durée du verrouillage après échecs (5-120 minutes)", - "enrollment_settings": "Paramètres d'inscription", - "allow_self_enrollment": "Autoriser l'auto-inscription", - "self_enrollment_desc": "Les clients peuvent s'inscrire via QR code sans aide du personnel", - "transaction_settings": "Paramètres de transaction", - "allow_cross_location": "Autoriser l'échange inter-points de vente", - "cross_location_desc": "Les clients peuvent échanger des points dans tous les points de vente du commerçant", - "allow_void": "Autoriser les annulations", - "void_desc": "Le personnel peut annuler des points/tampons pour les retours", - "save_settings": "Enregistrer les paramètres" - }, - "analytics": { - "title": "Analytique fidélité", - "subtitle": "Statistiques de fidélité à l'échelle de la plateforme", - "loading": "Chargement des analytiques...", - "error_loading": "Erreur de chargement des analytiques", - "filter_by_merchant": "Filtrer par commerçant", - "search_merchants_placeholder": "Rechercher des commerçants par nom...", - "showing_stats_for": "Statistiques pour :", - "wallet_status": "Statut de l'intégration Wallet", - "google_wallet": "Google Wallet", - "apple_wallet": "Apple Wallet", - "connected": "Connecté", - "error": "Erreur", - "not_configured": "Non configuré", - "issuer_id": "ID émetteur", - "project": "Projet", - "wallet_objects": "Objets Wallet", - "loyalty_classes": "Classes de fidélité", - "pass_type_id": "ID type de pass", - "team_id": "ID équipe", - "active_passes": "Pass actifs", - "quick_actions": "Actions rapides", - "view_all_programs": "Voir tous les programmes", - "manage_merchants": "Gérer les commerçants" - }, - "program_edit": { - "title": "Configuration du programme", - "loading": "Chargement de la configuration...", - "error_loading": "Erreur de chargement de la configuration du programme", - "create_subtitle": "Créer un programme de fidélité pour ce commerçant", - "edit_subtitle": "Modifier la configuration du programme", - "delete_title": "Supprimer le programme de fidélité", - "delete_message": "Cela supprimera définitivement le programme de fidélité et toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", - "delete_confirm": "Supprimer le programme" - } - }, - "merchant": { - "program": { - "title": "Programme de fidélité", - "subtitle": "Configuration de votre programme de fidélité.", - "edit_program": "Modifier le programme", - "no_program": "Aucun programme de fidélité", - "no_program_desc": "Votre programme de fidélité n'a pas encore été configuré. Créez-en un pour commencer à récompenser vos clients.", - "create_program": "Créer un programme" - }, - "program_edit": { - "title": "Paramètres de fidélité", - "page_title": "Paramètres du programme de fidélité", - "subtitle": "Configurez votre programme de fidélité", - "loading": "Chargement des paramètres...", - "error_loading": "Erreur de chargement des paramètres", - "delete_title": "Supprimer le programme de fidélité", - "delete_message": "Cela supprimera définitivement votre programme de fidélité et toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", - "delete_confirm": "Supprimer le programme" - }, - "cards": { - "title": "Cartes clients", - "subtitle": "Voir et gérer les membres fidélité sur tous les sites", - "error_loading": "Erreur lors du chargement", - "loading": "Chargement des cartes..." - }, - "card_detail": { - "title": "Détail de la carte", - "card_label": "Carte", - "error_loading": "Erreur lors du chargement", - "loading": "Chargement des détails..." - }, - "transactions": { - "title": "Transactions", - "subtitle": "Voir toutes les transactions sur tous les sites", - "error_loading": "Erreur lors du chargement", - "loading": "Chargement des transactions..." - }, - "pins": { - "title": "PINs du personnel", - "subtitle": "Gérer les PINs sur tous les sites", - "error_loading": "Erreur lors du chargement", - "loading": "Chargement des PINs..." - }, - "settings": { - "title": "Paramètres fidélité", - "subtitle": "Voir les paramètres du programme", - "admin_controlled": "Ces paramètres sont gérés par l'administrateur", - "error_loading": "Erreur lors du chargement", - "loading": "Chargement des paramètres...", - "lockout_attempts": "Tentatives avant verrouillage", - "lockout_minutes": "Durée de verrouillage (min)", - "permissions": "Inscription et permissions", - "pin_policy": "Politique PIN", - "staff_pin_policy": "Politique PIN personnel", - "self_enrollment": "Auto-inscription", - "cross_location": "Échange multi-sites", - "void_transactions": "Autoriser les annulations", - "enabled": "Activé", - "disabled": "Désactivé", - "required": "Obligatoire", - "optional": "Optionnel" - }, - "analytics": { - "title": "Analytique fidélité", - "subtitle": "Statistiques de fidélité pour tous vos magasins", - "loading": "Chargement des analytiques...", - "error_loading": "Erreur de chargement des analytiques", - "no_program": "Aucun programme de fidélité", - "no_program_desc": "Configurez un programme de fidélité pour voir les analytiques ici.", - "create_program": "Créer un programme", - "quick_actions": "Actions rapides", - "view_program": "Voir le programme", - "edit_program": "Modifier le programme" - } - }, - "store": { - "terminal": { - "title": "Terminal de fidélité", - "subtitle": "Traiter les transactions de fidélité", - "members": "Membres", - "analytics": "Analytique", - "loading": "Chargement du terminal de fidélité...", - "error_loading": "Erreur de chargement du terminal", - "not_setup": "Programme de fidélité non configuré", - "not_setup_desc": "Votre commerçant n'a pas encore configuré de programme de fidélité.", - "setup_program": "Configurer le programme de fidélité", - "contact_admin": "Contactez votre administrateur pour terminer la configuration.", - "find_customer": "Trouver un client", - "search_placeholder": "E-mail, téléphone ou numéro de carte...", - "looking_up": "Recherche en cours...", - "look_up_customer": "Rechercher un client", - "enroll_new_customer": "Inscrire un nouveau client", - "customer_found": "Client trouvé", - "points_balance": "Solde de points", - "stamps": "Tampons", - "x_more_for_reward": "Encore {count} pour la récompense", - "ready_to_redeem": "Prêt à échanger !", - "add_stamp": "Ajouter un tampon", - "current": "Actuel :", - "cooldown_active": "Temps d'attente actif", - "redeem_stamps": "Échanger les tampons", - "not_enough_stamps": "Pas assez de tampons encore", - "earn_points": "Gagner des points", - "purchase_amount": "Montant de l'achat", - "points_to_award": "Points à attribuer :", - "award_points": "Attribuer des points", - "redeem_reward": "Échanger une récompense", - "select_reward": "Sélectionner une récompense", - "select_reward_placeholder": "Sélectionner une récompense...", - "points_after": "Points après :", - "search_to_process": "Recherchez un client pour traiter une transaction", - "recent_transactions": "Transactions récentes dans ce point de vente", - "col_time": "Heure", - "col_customer": "Client", - "col_type": "Type", - "col_points": "Points", - "col_notes": "Notes", - "no_recent_transactions": "Aucune transaction récente", - "enter_staff_pin": "Saisir le PIN du personnel", - "pin_authorize": "Saisissez votre PIN personnel pour autoriser cette transaction.", - "clear": "Effacer", - "processing": "Traitement...", - "customer_not_found": "Client introuvable. Vous pouvez l'inscrire comme nouveau membre.", - "error_lookup": "Erreur de recherche du client : {message}", - "transaction_failed": "Transaction échouée : {message}", - "stamp_added": "Tampon ajouté !", - "stamps_redeemed": "Tampons échangés ! Récompense obtenue.", - "x_points_awarded": "{points} points attribués !", - "reward_redeemed": "Récompense échangée : {name}" - }, - "cards": { - "title": "Membres fidélité", - "subtitle": "Voir et gérer les membres de votre programme de fidélité", - "enroll_new": "Inscrire", - "loading": "Chargement des membres...", - "error_loading": "Erreur de chargement des membres", - "total_members": "Membres au total", - "active_30d": "Actifs (30j)", - "new_this_month": "Nouveaux ce mois", - "total_points_balance": "Solde total de points", - "search_placeholder": "Rechercher par nom, e-mail, téléphone ou carte...", - "all_status": "Tous les statuts", - "col_member": "Membre", - "col_card_number": "Numéro de carte", - "col_points_balance": "Solde de points", - "col_last_activity": "Dernière activité", - "col_status": "Statut", - "col_actions": "Actions", - "no_members": "Aucun membre trouvé", - "adjust_search": "Essayez d'ajuster votre recherche", - "enroll_first": "Inscrivez votre premier client pour commencer" - }, - "card_detail": { - "title": "Détails du membre", - "loading": "Chargement des détails du membre...", - "error_loading": "Erreur de chargement du membre", - "points_balance": "Solde de points", - "total_earned": "Total gagné", - "total_redeemed": "Total échangé", - "member_since": "Membre depuis", - "customer_information": "Informations client", - "name": "Nom", - "email": "E-mail", - "phone": "Téléphone", - "birthday": "Date de naissance", - "card_details": "Détails de la carte", - "card_number": "Numéro de carte", - "status": "Statut", - "last_activity": "Dernière activité", - "enrolled_at": "Inscrit le", - "transaction_history": "Historique des transactions", - "col_date": "Date", - "col_type": "Type", - "col_points": "Points", - "col_location": "Point de vente", - "col_notes": "Notes", - "no_transactions": "Aucune transaction" - }, - "enroll": { - "title": "Inscrire un client", - "page_title": "Inscrire un nouveau client", - "subtitle": "Ajouter un nouveau membre à votre programme de fidélité", - "loading": "Chargement...", - "error_loading": "Erreur de chargement du formulaire d'inscription", - "customer_information": "Informations client", - "first_name": "Prénom", - "last_name": "Nom", - "email": "E-mail", - "phone": "Téléphone", - "birthday": "Date de naissance", - "birthday_help": "Pour les récompenses d'anniversaire (facultatif)", - "communication_preferences": "Préférences de communication", - "send_emails": "Envoyer des e-mails promotionnels", - "send_sms": "Envoyer des SMS promotionnels", - "welcome_bonus": "Bonus de bienvenue", - "welcome_bonus_desc": "Le client recevra {points} points bonus !", - "enroll_customer": "Inscrire le client", - "enrolling": "Inscription...", - "customer_enrolled": "Client inscrit !", - "starting_balance": "Solde initial :", - "x_points": "{count} points", - "back_to_terminal": "Retour au terminal", - "enroll_another": "Inscrire un autre", - "enrollment_failed": "Inscription échouée : {message}" - }, - "analytics": { - "title": "Analytique fidélité", - "subtitle": "Suivez les performances de votre programme de fidélité", - "loading": "Chargement des analytiques...", - "error_loading": "Erreur de chargement des analytiques", - "quick_actions": "Actions rapides", - "open_terminal": "Ouvrir le terminal", - "view_members": "Voir les membres", - "view_program": "Voir le programme" - }, - "program": { - "title": "Programme de fidélité", - "subtitle": "Configuration de votre programme de fidélité", - "edit_program": "Modifier le programme", - "loading": "Chargement du programme...", - "error_loading": "Erreur de chargement du programme", - "no_program": "Aucun programme de fidélité", - "no_program_desc": "Votre commerçant n'a pas encore configuré de programme de fidélité.", - "create_program": "Créer un programme", - "contact_admin": "Contactez votre administrateur pour configurer un programme de fidélité." - }, - "pins": { - "title": "PINs du personnel", - "subtitle": "Gérer les PINs d'authentification pour ce magasin", - "loading": "Chargement des PINs...", - "error_loading": "Erreur lors du chargement des PINs" - }, - "settings": { - "title": "Paramètres de fidélité", - "page_title": "Paramètres du programme de fidélité", - "subtitle": "Configurez votre programme de fidélité", - "back_to_program": "Retour au programme", - "loading": "Chargement des paramètres...", - "error_loading": "Erreur de chargement des paramètres", - "access_restricted": "Accès restreint", - "owner_only": "Seul le propriétaire du commerce peut gérer les paramètres du programme de fidélité.", - "delete_title": "Supprimer le programme de fidélité", - "delete_message": "Cela supprimera définitivement le programme de fidélité et toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", - "delete_confirm": "Supprimer le programme", - "program_created": "Programme créé avec succès", - "program_updated": "Programme mis à jour avec succès", - "program_deleted": "Programme de fidélité supprimé", - "save_failed": "Échec de l'enregistrement : {message}", - "delete_failed": "Échec de la suppression : {message}" - } - }, - "storefront": { - "dashboard": { - "back_to_account": "Retour au compte", - "my_loyalty": "Ma fidélité", - "join_title": "Rejoignez notre programme de récompenses !", - "join_subtitle": "Gagnez des points à chaque achat et échangez-les contre des récompenses.", - "join_now": "Rejoindre maintenant", - "points_balance": "Solde de points", - "card_number": "Numéro de carte", - "show_card": "Afficher la carte", - "total_earned": "Total gagné", - "total_redeemed": "Total échangé", - "available_rewards": "Récompenses disponibles", - "no_rewards_yet": "Aucune récompense disponible pour le moment", - "ready_to_redeem": "Prêt à échanger", - "x_more_to_go": "Encore {count}", - "redeem_hint": "Montrez votre carte au personnel pour échanger des récompenses en magasin.", - "recent_activity": "Activité récente", - "view_all": "Tout voir", - "no_transactions": "Aucune transaction. Faites un achat pour commencer à gagner des points !", - "earn_redeem_locations": "Points de vente partenaires", - "your_loyalty_card": "Votre carte de fidélité", - "show_to_staff": "Montrez ceci au personnel lors d'un achat ou d'un échange de récompense." - }, - "history": { - "back_to_loyalty": "Retour à la fidélité", - "title": "Historique des transactions", - "subtitle": "Voir toutes vos transactions de points de fidélité", - "current_balance": "Solde actuel", - "total_earned": "Total gagné", - "total_redeemed": "Total échangé", - "no_transactions": "Aucune transaction", - "balance": "Solde :", - "previous": "Précédent", - "next": "Suivant", - "page_x_of_y": "Page {page} sur {pages}" - } - }, - "toasts": { - "program_activated": "Programme activé avec succès", - "program_deactivated": "Programme désactivé avec succès", - "activate_failed": "Échec de l'activation du programme : {message}", - "deactivate_failed": "Échec de la désactivation du programme : {message}", - "program_deleted": "Programme supprimé avec succès", - "delete_failed": "Échec de la suppression du programme : {message}", - "program_created": "Programme créé avec succès", - "program_updated": "Programme mis à jour avec succès", - "loyalty_program_created": "Programme de fidélité créé", - "loyalty_program_deleted": "Programme de fidélité supprimé", - "settings_saved": "Paramètres enregistrés avec succès", - "save_failed": "Échec de l'enregistrement : {message}", - "settings_save_failed": "Échec de l'enregistrement des paramètres : {message}", - "create_failed": "Échec de la création du programme : {message}", - "logo_required": "L'URL du logo est requise pour l'intégration wallet." + "program_form": { + "program_type": "Type de programme", + "points_type_desc": "Gagner des points par EUR dépensé", + "stamps_type_desc": "Collecter N tampons, obtenir une récompense", + "hybrid_type_desc": "Tampons et points combinés", + "stamps_configuration": "Configuration des tampons", + "stamps_target": "Objectif de tampons", + "stamps_target_help": "Nombre de tampons nécessaires pour la récompense", + "reward_description": "Description de la récompense", + "reward_value_cents": "Valeur de la récompense (centimes)", + "points_configuration": "Configuration des points", + "points_per_eur": "Points par EUR dépensé", + "eur_equals_points": "1 EUR = {points} point(s)", + "welcome_bonus_points": "Points bonus de bienvenue", + "welcome_bonus_help": "Points bonus attribués à l'inscription", + "minimum_redemption_points": "Points minimum d'échange", + "minimum_purchase_cents": "Achat minimum (centimes)", + "minimum_purchase_help": "Montant minimum d'achat pour gagner des points (0 = pas de minimum)", + "points_expiration_days": "Expiration des points (jours)", + "points_expiration_help": "Jours d'inactivité avant expiration des points (0 = jamais)", + "redemption_rewards": "Récompenses d'échange", + "add_reward": "Ajouter une récompense", + "no_rewards_configured": "Aucune récompense configurée. Ajoutez une récompense pour permettre aux clients d'échanger des points.", + "reward_name": "Nom de la récompense", + "points_required": "Points requis", + "description": "Description", + "anti_fraud_settings": "Paramètres anti-fraude", + "cooldown_minutes": "Temps d'attente (minutes)", + "cooldown_help": "Temps entre les tampons d'une même carte", + "max_daily_stamps": "Tampons max par jour", + "max_daily_stamps_help": "Maximum de tampons par carte par jour", + "require_staff_pin": "Exiger le PIN du personnel", + "branding": "Image de marque", + "card_name": "Nom de la carte", + "primary_color": "Couleur principale", + "secondary_color": "Couleur secondaire", + "logo_url": "URL du logo", + "logo_url_help": "Requis pour l'intégration Google Wallet. Doit être une URL d'image publique (PNG ou JPG).", + "hero_image_url": "URL de l'image principale", + "terms_privacy": "Conditions & Confidentialité", + "terms_conditions": "Conditions Générales", + "privacy_policy_url": "URL politique de confidentialité", + "program_status": "Statut du programme", + "program_active": "Programme actif", + "program_active_help": "Désactivé, les clients ne peuvent ni gagner ni échanger", + "delete_program": "Supprimer le programme", + "create_program": "Créer le programme", + "save_changes": "Enregistrer les modifications" } + }, + "admin": { + "programs": { + "title": "Programmes de fidélité", + "create_program": "Créer un programme", + "loading": "Chargement des programmes de fidélité...", + "error_loading": "Erreur de chargement des programmes de fidélité", + "total_programs": "Programmes au total", + "active": "Actifs", + "total_members": "Membres au total", + "transactions_30d": "Transactions (30j)", + "search_placeholder": "Rechercher par nom de commerçant...", + "all_status": "Tous les statuts", + "table_merchant": "Commerçant", + "table_program_type": "Type de programme", + "table_members": "Membres", + "table_points_issued": "Points émis", + "table_status": "Statut", + "table_created": "Créé", + "table_actions": "Actions", + "no_programs": "Aucun programme de fidélité trouvé", + "adjust_filters": "Essayez d'ajuster votre recherche ou vos filtres", + "no_merchants_yet": "Aucun commerçant n'a encore créé de programme de fidélité", + "x_active": "({count} actifs)", + "x_redeemed": "{count} échangés", + "pt_per_eur": "pt/EUR", + "delete_title": "Supprimer le programme de fidélité", + "delete_message": "Supprimer le programme de fidélité de \"{name}\" ? Cela supprimera définitivement toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", + "delete_confirm": "Supprimer le programme", + "create_title": "Créer un programme de fidélité", + "create_description": "Sélectionnez un commerçant pour créer un programme de fidélité.", + "search_merchant": "Rechercher un commerçant", + "type_merchant_name": "Tapez le nom du commerçant...", + "no_merchants_found": "Aucun commerçant trouvé", + "existing_program_warning": "Ce commerçant a déjà un programme de fidélité.", + "view_edit_existing": "Voir / Modifier le programme existant" + }, + "merchant_detail": { + "title": "Détails fidélité du commerçant", + "loading": "Chargement des détails de fidélité...", + "error_loading": "Erreur de chargement de la fidélité du commerçant", + "program_active": "Programme de fidélité actif", + "no_program_subtitle": "Aucun programme de fidélité", + "quick_actions": "Actions rapides", + "edit_program": "Modifier le programme", + "admin_policy": "Politique admin", + "view_merchant": "Voir le commerçant", + "total_members": "Membres au total", + "active_30d": "Actifs (30j)", + "points_issued_30d": "Points émis (30j)", + "points_redeemed_30d": "Points échangés (30j)", + "no_program": "Aucun programme de fidélité", + "no_program_desc": "Ce commerçant n'a pas encore configuré de programme de fidélité.", + "create_program": "Créer un programme", + "delete_title": "Supprimer le programme de fidélité", + "delete_message": "Cela supprimera définitivement le programme de fidélité et toutes les données associées. Cette action est irréversible.", + "delete_confirm": "Supprimer le programme", + "location_breakdown": "Répartition par point de vente", + "table_location": "Point de vente", + "table_enrolled": "Inscrits", + "table_points_earned": "Points gagnés", + "table_points_redeemed": "Points échangés", + "table_transactions_30d": "Transactions (30j)", + "admin_policy_settings": "Paramètres de politique admin", + "staff_pin_policy": "Politique PIN du personnel", + "self_enrollment": "Auto-inscription", + "cross_location_redemption": "Échange inter-points de vente", + "allowed": "Autorisé", + "disabled": "Désactivé", + "modify_policy": "Modifier la politique admin", + "view_cards": "Voir les cartes", + "view_transactions": "Voir les transactions", + "view_pins": "Voir les PINs" + }, + "merchant_cards": { + "title": "Cartes du commerçant", + "subtitle": "Voir les cartes de ce commerçant", + "loading": "Chargement des cartes...", + "error_loading": "Erreur lors du chargement" + }, + "merchant_card_detail": { + "title": "Détail de la carte", + "error_loading": "Erreur lors du chargement", + "loading": "Chargement des détails..." + }, + "merchant_transactions": { + "title": "Transactions du commerçant", + "subtitle": "Voir toutes les transactions de ce commerçant", + "loading": "Chargement des transactions...", + "error_loading": "Erreur lors du chargement" + }, + "merchant_pins": { + "title": "PINs du commerçant", + "subtitle": "Voir les PINs de ce commerçant (lecture seule)", + "loading": "Chargement des PINs...", + "error_loading": "Erreur lors du chargement" + }, + "merchant_settings": { + "title": "Paramètres de fidélité du commerçant", + "loading": "Chargement des paramètres...", + "error_loading": "Erreur de chargement des paramètres", + "admin_controlled": "Paramètres contrôlés par l'admin pour le programme de fidélité de ce commerçant", + "staff_pin_policy": "Politique PIN du personnel", + "staff_pin_description": "Contrôlez si les membres du personnel doivent saisir un PIN pour traiter les transactions de fidélité.", + "required": "Obligatoire", + "required_desc": "Le personnel doit saisir son PIN pour chaque transaction. Recommandé pour la sécurité.", + "optional": "Facultatif", + "optional_desc": "Les magasins peuvent choisir d'exiger ou non les PINs.", + "pin_disabled": "Désactivé", + "pin_disabled_desc": "Les PINs du personnel ne sont pas utilisés. Tout membre du personnel peut traiter les transactions.", + "pin_lockout_settings": "Paramètres de verrouillage PIN", + "max_failed_attempts": "Tentatives échouées max", + "max_failed_attempts_help": "Nombre de tentatives erronées avant verrouillage (3-10)", + "lockout_duration": "Durée de verrouillage (minutes)", + "lockout_duration_help": "Durée du verrouillage après échecs (5-120 minutes)", + "enrollment_settings": "Paramètres d'inscription", + "allow_self_enrollment": "Autoriser l'auto-inscription", + "self_enrollment_desc": "Les clients peuvent s'inscrire via QR code sans aide du personnel", + "transaction_settings": "Paramètres de transaction", + "allow_cross_location": "Autoriser l'échange inter-points de vente", + "cross_location_desc": "Les clients peuvent échanger des points dans tous les points de vente du commerçant", + "allow_void": "Autoriser les annulations", + "void_desc": "Le personnel peut annuler des points/tampons pour les retours", + "save_settings": "Enregistrer les paramètres" + }, + "analytics": { + "title": "Analytique fidélité", + "subtitle": "Statistiques de fidélité à l'échelle de la plateforme", + "loading": "Chargement des analytiques...", + "error_loading": "Erreur de chargement des analytiques", + "filter_by_merchant": "Filtrer par commerçant", + "search_merchants_placeholder": "Rechercher des commerçants par nom...", + "showing_stats_for": "Statistiques pour :", + "wallet_status": "Statut de l'intégration Wallet", + "google_wallet": "Google Wallet", + "apple_wallet": "Apple Wallet", + "connected": "Connecté", + "error": "Erreur", + "not_configured": "Non configuré", + "issuer_id": "ID émetteur", + "project": "Projet", + "wallet_objects": "Objets Wallet", + "loyalty_classes": "Classes de fidélité", + "pass_type_id": "ID type de pass", + "team_id": "ID équipe", + "active_passes": "Pass actifs", + "quick_actions": "Actions rapides", + "view_all_programs": "Voir tous les programmes", + "manage_merchants": "Gérer les commerçants" + }, + "program_edit": { + "title": "Configuration du programme", + "loading": "Chargement de la configuration...", + "error_loading": "Erreur de chargement de la configuration du programme", + "create_subtitle": "Créer un programme de fidélité pour ce commerçant", + "edit_subtitle": "Modifier la configuration du programme", + "delete_title": "Supprimer le programme de fidélité", + "delete_message": "Cela supprimera définitivement le programme de fidélité et toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", + "delete_confirm": "Supprimer le programme" + } + }, + "merchant": { + "program": { + "title": "Programme de fidélité", + "subtitle": "Configuration de votre programme de fidélité.", + "edit_program": "Modifier le programme", + "no_program": "Aucun programme de fidélité", + "no_program_desc": "Votre programme de fidélité n'a pas encore été configuré. Créez-en un pour commencer à récompenser vos clients.", + "create_program": "Créer un programme" + }, + "program_edit": { + "title": "Paramètres de fidélité", + "page_title": "Paramètres du programme de fidélité", + "subtitle": "Configurez votre programme de fidélité", + "loading": "Chargement des paramètres...", + "error_loading": "Erreur de chargement des paramètres", + "delete_title": "Supprimer le programme de fidélité", + "delete_message": "Cela supprimera définitivement votre programme de fidélité et toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", + "delete_confirm": "Supprimer le programme" + }, + "cards": { + "title": "Cartes clients", + "subtitle": "Voir et gérer les membres fidélité sur tous les sites", + "error_loading": "Erreur lors du chargement", + "loading": "Chargement des cartes..." + }, + "card_detail": { + "title": "Détail de la carte", + "card_label": "Carte", + "error_loading": "Erreur lors du chargement", + "loading": "Chargement des détails..." + }, + "transactions": { + "title": "Transactions", + "subtitle": "Voir toutes les transactions sur tous les sites", + "error_loading": "Erreur lors du chargement", + "loading": "Chargement des transactions..." + }, + "pins": { + "title": "PINs du personnel", + "subtitle": "Gérer les PINs sur tous les sites", + "error_loading": "Erreur lors du chargement", + "loading": "Chargement des PINs..." + }, + "settings": { + "title": "Paramètres fidélité", + "subtitle": "Voir les paramètres du programme", + "admin_controlled": "Ces paramètres sont gérés par l'administrateur", + "error_loading": "Erreur lors du chargement", + "loading": "Chargement des paramètres...", + "lockout_attempts": "Tentatives avant verrouillage", + "lockout_minutes": "Durée de verrouillage (min)", + "permissions": "Inscription et permissions", + "pin_policy": "Politique PIN", + "staff_pin_policy": "Politique PIN personnel", + "self_enrollment": "Auto-inscription", + "cross_location": "Échange multi-sites", + "void_transactions": "Autoriser les annulations", + "enabled": "Activé", + "disabled": "Désactivé", + "required": "Obligatoire", + "optional": "Optionnel" + }, + "analytics": { + "title": "Analytique fidélité", + "subtitle": "Statistiques de fidélité pour tous vos magasins", + "loading": "Chargement des analytiques...", + "error_loading": "Erreur de chargement des analytiques", + "no_program": "Aucun programme de fidélité", + "no_program_desc": "Configurez un programme de fidélité pour voir les analytiques ici.", + "create_program": "Créer un programme", + "quick_actions": "Actions rapides", + "view_program": "Voir le programme", + "edit_program": "Modifier le programme" + } + }, + "store": { + "terminal": { + "title": "Terminal de fidélité", + "subtitle": "Traiter les transactions de fidélité", + "members": "Membres", + "analytics": "Analytique", + "loading": "Chargement du terminal de fidélité...", + "error_loading": "Erreur de chargement du terminal", + "not_setup": "Programme de fidélité non configuré", + "not_setup_desc": "Votre commerçant n'a pas encore configuré de programme de fidélité.", + "setup_program": "Configurer le programme de fidélité", + "contact_admin": "Contactez votre administrateur pour terminer la configuration.", + "find_customer": "Trouver un client", + "search_placeholder": "E-mail, téléphone ou numéro de carte...", + "looking_up": "Recherche en cours...", + "look_up_customer": "Rechercher un client", + "enroll_new_customer": "Inscrire un nouveau client", + "customer_found": "Client trouvé", + "points_balance": "Solde de points", + "stamps": "Tampons", + "x_more_for_reward": "Encore {count} pour la récompense", + "ready_to_redeem": "Prêt à échanger !", + "add_stamp": "Ajouter un tampon", + "current": "Actuel :", + "cooldown_active": "Temps d'attente actif", + "redeem_stamps": "Échanger les tampons", + "not_enough_stamps": "Pas assez de tampons encore", + "earn_points": "Gagner des points", + "purchase_amount": "Montant de l'achat", + "points_to_award": "Points à attribuer :", + "award_points": "Attribuer des points", + "redeem_reward": "Échanger une récompense", + "select_reward": "Sélectionner une récompense", + "select_reward_placeholder": "Sélectionner une récompense...", + "points_after": "Points après :", + "search_to_process": "Recherchez un client pour traiter une transaction", + "recent_transactions": "Transactions récentes dans ce point de vente", + "col_time": "Heure", + "col_customer": "Client", + "col_type": "Type", + "col_points": "Points", + "col_notes": "Notes", + "no_recent_transactions": "Aucune transaction récente", + "enter_staff_pin": "Saisir le PIN du personnel", + "pin_authorize": "Saisissez votre PIN personnel pour autoriser cette transaction.", + "clear": "Effacer", + "processing": "Traitement...", + "customer_not_found": "Client introuvable. Vous pouvez l'inscrire comme nouveau membre.", + "error_lookup": "Erreur de recherche du client : {message}", + "transaction_failed": "Transaction échouée : {message}", + "stamp_added": "Tampon ajouté !", + "stamps_redeemed": "Tampons échangés ! Récompense obtenue.", + "x_points_awarded": "{points} points attribués !", + "reward_redeemed": "Récompense échangée : {name}" + }, + "cards": { + "title": "Membres fidélité", + "subtitle": "Voir et gérer les membres de votre programme de fidélité", + "enroll_new": "Inscrire", + "loading": "Chargement des membres...", + "error_loading": "Erreur de chargement des membres", + "total_members": "Membres au total", + "active_30d": "Actifs (30j)", + "new_this_month": "Nouveaux ce mois", + "total_points_balance": "Solde total de points", + "search_placeholder": "Rechercher par nom, e-mail, téléphone ou carte...", + "all_status": "Tous les statuts", + "col_member": "Membre", + "col_card_number": "Numéro de carte", + "col_points_balance": "Solde de points", + "col_last_activity": "Dernière activité", + "col_status": "Statut", + "col_actions": "Actions", + "no_members": "Aucun membre trouvé", + "adjust_search": "Essayez d'ajuster votre recherche", + "enroll_first": "Inscrivez votre premier client pour commencer" + }, + "card_detail": { + "title": "Détails du membre", + "loading": "Chargement des détails du membre...", + "error_loading": "Erreur de chargement du membre", + "points_balance": "Solde de points", + "total_earned": "Total gagné", + "total_redeemed": "Total échangé", + "member_since": "Membre depuis", + "customer_information": "Informations client", + "name": "Nom", + "email": "E-mail", + "phone": "Téléphone", + "birthday": "Date de naissance", + "card_details": "Détails de la carte", + "card_number": "Numéro de carte", + "status": "Statut", + "last_activity": "Dernière activité", + "enrolled_at": "Inscrit le", + "transaction_history": "Historique des transactions", + "col_date": "Date", + "col_type": "Type", + "col_points": "Points", + "col_location": "Point de vente", + "col_notes": "Notes", + "no_transactions": "Aucune transaction" + }, + "enroll": { + "title": "Inscrire un client", + "page_title": "Inscrire un nouveau client", + "subtitle": "Ajouter un nouveau membre à votre programme de fidélité", + "loading": "Chargement...", + "error_loading": "Erreur de chargement du formulaire d'inscription", + "customer_information": "Informations client", + "first_name": "Prénom", + "last_name": "Nom", + "email": "E-mail", + "phone": "Téléphone", + "birthday": "Date de naissance", + "birthday_help": "Pour les récompenses d'anniversaire (facultatif)", + "communication_preferences": "Préférences de communication", + "send_emails": "Envoyer des e-mails promotionnels", + "send_sms": "Envoyer des SMS promotionnels", + "welcome_bonus": "Bonus de bienvenue", + "welcome_bonus_desc": "Le client recevra {points} points bonus !", + "enroll_customer": "Inscrire le client", + "enrolling": "Inscription...", + "customer_enrolled": "Client inscrit !", + "starting_balance": "Solde initial :", + "x_points": "{count} points", + "back_to_terminal": "Retour au terminal", + "enroll_another": "Inscrire un autre", + "enrollment_failed": "Inscription échouée : {message}" + }, + "analytics": { + "title": "Analytique fidélité", + "subtitle": "Suivez les performances de votre programme de fidélité", + "loading": "Chargement des analytiques...", + "error_loading": "Erreur de chargement des analytiques", + "quick_actions": "Actions rapides", + "open_terminal": "Ouvrir le terminal", + "view_members": "Voir les membres", + "view_program": "Voir le programme" + }, + "program": { + "title": "Programme de fidélité", + "subtitle": "Configuration de votre programme de fidélité", + "edit_program": "Modifier le programme", + "loading": "Chargement du programme...", + "error_loading": "Erreur de chargement du programme", + "no_program": "Aucun programme de fidélité", + "no_program_desc": "Votre commerçant n'a pas encore configuré de programme de fidélité.", + "create_program": "Créer un programme", + "contact_admin": "Contactez votre administrateur pour configurer un programme de fidélité." + }, + "pins": { + "title": "PINs du personnel", + "subtitle": "Gérer les PINs d'authentification pour ce magasin", + "loading": "Chargement des PINs...", + "error_loading": "Erreur lors du chargement des PINs" + }, + "settings": { + "title": "Paramètres de fidélité", + "page_title": "Paramètres du programme de fidélité", + "subtitle": "Configurez votre programme de fidélité", + "back_to_program": "Retour au programme", + "loading": "Chargement des paramètres...", + "error_loading": "Erreur de chargement des paramètres", + "access_restricted": "Accès restreint", + "owner_only": "Seul le propriétaire du commerce peut gérer les paramètres du programme de fidélité.", + "delete_title": "Supprimer le programme de fidélité", + "delete_message": "Cela supprimera définitivement le programme de fidélité et toutes les données associées (cartes, transactions, récompenses). Cette action est irréversible.", + "delete_confirm": "Supprimer le programme", + "program_created": "Programme créé avec succès", + "program_updated": "Programme mis à jour avec succès", + "program_deleted": "Programme de fidélité supprimé", + "save_failed": "Échec de l'enregistrement : {message}", + "delete_failed": "Échec de la suppression : {message}" + } + }, + "storefront": { + "dashboard": { + "back_to_account": "Retour au compte", + "my_loyalty": "Ma fidélité", + "join_title": "Rejoignez notre programme de récompenses !", + "join_subtitle": "Gagnez des points à chaque achat et échangez-les contre des récompenses.", + "join_now": "Rejoindre maintenant", + "points_balance": "Solde de points", + "card_number": "Numéro de carte", + "show_card": "Afficher la carte", + "total_earned": "Total gagné", + "total_redeemed": "Total échangé", + "available_rewards": "Récompenses disponibles", + "no_rewards_yet": "Aucune récompense disponible pour le moment", + "ready_to_redeem": "Prêt à échanger", + "x_more_to_go": "Encore {count}", + "redeem_hint": "Montrez votre carte au personnel pour échanger des récompenses en magasin.", + "recent_activity": "Activité récente", + "view_all": "Tout voir", + "no_transactions": "Aucune transaction. Faites un achat pour commencer à gagner des points !", + "earn_redeem_locations": "Points de vente partenaires", + "your_loyalty_card": "Votre carte de fidélité", + "show_to_staff": "Montrez ceci au personnel lors d'un achat ou d'un échange de récompense." + }, + "history": { + "back_to_loyalty": "Retour à la fidélité", + "title": "Historique des transactions", + "subtitle": "Voir toutes vos transactions de points de fidélité", + "current_balance": "Solde actuel", + "total_earned": "Total gagné", + "total_redeemed": "Total échangé", + "no_transactions": "Aucune transaction", + "balance": "Solde :", + "previous": "Précédent", + "next": "Suivant", + "page_x_of_y": "Page {page} sur {pages}" + } + }, + "toasts": { + "program_activated": "Programme activé avec succès", + "program_deactivated": "Programme désactivé avec succès", + "activate_failed": "Échec de l'activation du programme : {message}", + "deactivate_failed": "Échec de la désactivation du programme : {message}", + "program_deleted": "Programme supprimé avec succès", + "delete_failed": "Échec de la suppression du programme : {message}", + "program_created": "Programme créé avec succès", + "program_updated": "Programme mis à jour avec succès", + "loyalty_program_created": "Programme de fidélité créé", + "loyalty_program_deleted": "Programme de fidélité supprimé", + "settings_saved": "Paramètres enregistrés avec succès", + "save_failed": "Échec de l'enregistrement : {message}", + "settings_save_failed": "Échec de l'enregistrement des paramètres : {message}", + "create_failed": "Échec de la création du programme : {message}", + "logo_required": "L'URL du logo est requise pour l'intégration wallet." + } } diff --git a/app/modules/loyalty/locales/lb.json b/app/modules/loyalty/locales/lb.json index e428d334..a287b6c0 100644 --- a/app/modules/loyalty/locales/lb.json +++ b/app/modules/loyalty/locales/lb.json @@ -1,874 +1,875 @@ { - "loyalty": { - "module": { - "name": "Treieprogrammer", - "description": "Stempel- a Punktebaséiert Treieprogrammer mat Wallet-Integratioun" - }, - "program": { - "title": "Treieprogramm", - "create": "Programm erstellen", - "edit": "Programm beaarbechten", - "activate": "Aktivéieren", - "deactivate": "Deaktivéieren", - "type": { - "stamps": "Stempelen", - "points": "Punkten", - "hybrid": "Hybrid" - } - }, - "card": { - "title": "Treiekaart", - "number": "Kaartnummer", - "qr_code": "QR-Code", - "enroll": "Client aschreiben", - "deactivate": "Kaart deaktivéieren" - }, - "stamp": { - "title": "Stempelen", - "add": "Stempel derbäisetzen", - "redeem": "Belounung aléisen", - "count": "{current} vun {target}", - "until_reward": "{count} bis zur Belounung" - }, - "points": { - "title": "Punkten", - "earn": "Punkten sammelen", - "redeem": "Punkten aléisen", - "balance": "{count} Punkten", - "per_euro": "{points} Punkten pro Euro" - }, - "pin": { - "title": "Personal-PINen", - "create": "PIN erstellen", - "edit": "PIN beaarbechten", - "unlock": "PIN entspären", - "locked": "PIN gespaart bis {time}" - }, - "wallet": { - "google": "An Google Wallet derbäisetzen", - "apple": "An Apple Wallet derbäisetzen" - }, - "stats": { - "title": "Statistiken", - "total_cards": "Total Kaarten", - "active_cards": "Aktiv Kaarten", - "stamps_issued": "Stempelen ausgestallt", - "rewards_redeemed": "Belounungen agelées" - }, - "errors": { - "program_not_found": "Treieprogramm net fonnt", - "program_inactive": "Treieprogramm ass net aktiv", - "card_not_found": "Treiekaart net fonnt", - "card_inactive": "Treiekaart ass net aktiv", - "cooldown": "W.e.g. waart {minutes} Minutten virum nächste Stempel", - "daily_limit": "Deeglecht Stempel-Limit vun {limit} erreecht", - "insufficient_stamps": "Brauch {required} Stempelen, huet {current}", - "insufficient_points": "Brauch {required} Punkten, huet {current}", - "pin_required": "Personal-PIN erfuerderlech", - "pin_invalid": "Ongëlteg Personal-PIN", - "pin_locked": "PIN gespaart wéinst ze vill Fehlversich" - } + "loyalty": { + "module": { + "name": "Treieprogrammer", + "description": "Stempel- a Punktebaséiert Treieprogrammer mat Wallet-Integratioun" }, - "menu": { - "loyalty": "Treiprogramm", - "loyalty_programs": "Treiprogrammer", - "programs": "Programmer", - "analytics": "Analytik", - "dashboard": "Dashboard", - "terminal": "Terminal", - "customer_cards": "Clientekaarten", - "statistics": "Statistiken", - "program": "Programm", - "overview": "Iwwersiicht", - "settings": "Astellungen", - "wallet_debug": "Wallet Debug", - "staff_pins": "Mataarbechter-PINen", - "transactions": "Transaktionen" - }, - "permissions": { - "view_programs": "Programmer kucken", - "view_programs_desc": "Treiheet-Programmer an Detailer kucken", - "manage_programs": "Programmer verwalten", - "manage_programs_desc": "Treiheet-Programmer erstellen a konfiguréieren", - "view_rewards": "Beloununge kucken", - "view_rewards_desc": "Belounungen an Aléisunge kucken", - "manage_rewards": "Beloununge verwalten", - "manage_rewards_desc": "Treiheet-Belounungen erstellen a verwalten" - }, - "onboarding": { - "create_program": { - "title": "Treieprogramm erstellen", - "description": "Erstellt Äert éischt Stempel- oder Punkteprogramm" - } - }, - "enrollment": { - "title": "Gitt Member vun eisem Belounungsprogramm!", - "subtitle": "Verdéngt {points} Punkt pro ausgegoenen EUR", - "not_available_title": "Programm net verfügbar", - "not_available_message": "Dëse Buttek huet nach kee Treieprogramm ageriicht.", - "welcome_bonus": "Kritt {points} Bonuspunkten wann Dir Iech umellt!", - "already_member": "Schonn Member? Är Punkten sinn mat Ärer E-Mail verlinkt.", - "form": { - "email": "E-Mail", - "first_name": "Virnumm", - "last_name": "Nonumm", - "phone": "Telefon (fakultativ)", - "birthday": "Gebuertsdag (fakultativ)", - "birthday_hint": "Fir speziell Gebuertsdagsbelounungen", - "terms_agree": "Ech akzeptéieren d'", - "terms": "Allgemeng Geschäftsbedingungen", - "marketing_consent": "Mir Neiegkeeten an Sonderoffere schécken", - "joining": "Umeldung leeft...", - "join_button": "Bäitrieden & {points} Punkten kréien" - }, - "privacy_policy": "Dateschutzrichtlinn", - "close": "Zoumaachen", - "success": { - "title": "Wëllkomm!", - "message": "Dir sidd elo Member vun eisem Belounungsprogramm.", - "card_number": "Är Kaartnummer", - "wallet_prompt": "Späichert Är Kaart op Ärem Handy fir einfachen Zougang:", - "next_steps_title": "Wéi geet et weider?", - "step_earn": "Weist Är Kaartnummer beim Akaf fir Punkten ze sammelen", - "step_balance": "Préift Äre Kontostand online oder an der App", - "step_redeem": "Léist Punkten géint Belounungen an all eise Standuerter an", - "view_dashboard": "Mäin Treie-Dashboard kucken", - "continue_shopping": "Weider akafen" - }, - "errors": { - "load_failed": "Programminformatiounen konnten net gelueden ginn", - "email_exists": "Dës E-Mail ass schonn an eisem Treieprogramm registréiert.", - "failed": "Umeldung feelgeschloen. Probéiert w.e.g. nach eng Kéier." - } - }, - "common": { - "active": "Aktiv", - "all_stores": "All Geschäfter", - "at": "bei", - "back": "Zréck", - "cancel": "Ofbriechen", - "confirm": "Bestätegen", - "continue": "Weider", - "delete": "Läschen", - "disabled": "Deaktivéiert", - "edit": "Beaarbechten", - "enabled": "Aktivéiert", - "inactive": "Inaktiv", - "loading": "Lueden...", - "minutes": "Minutten", - "never": "Ni", - "no": "Neen", - "none": "Keen", - "or": "oder", + "program": { + "title": "Treieprogramm", + "create": "Programm erstellen", + "edit": "Programm beaarbechten", + "activate": "Aktivéieren", + "deactivate": "Deaktivéieren", + "type": { + "stamps": "Stempelen", "points": "Punkten", - "program_not_setup": "Treieprogramm net ageriicht", - "program_not_setup_desc": "Riicht w.e.g. en Treieprogramm an", - "refresh": "Aktualiséieren", - "save": "Späicheren", - "saving": "Späicheren...", - "total": "TOTAL", - "view": "Kucken", - "yes": "Jo" + "hybrid": "Hybrid" + } + }, + "card": { + "title": "Treiekaart", + "number": "Kaartnummer", + "qr_code": "QR-Code", + "enroll": "Client aschreiben", + "deactivate": "Kaart deaktivéieren" + }, + "stamp": { + "title": "Stempelen", + "add": "Stempel derbäisetzen", + "redeem": "Belounung aléisen", + "count": "{current} vun {target}", + "until_reward": "{count} bis zur Belounung" + }, + "points": { + "title": "Punkten", + "earn": "Punkten sammelen", + "redeem": "Punkten aléisen", + "balance": "{count} Punkten", + "per_euro": "{points} Punkten pro Euro" + }, + "pin": { + "title": "Personal-PINen", + "create": "PIN erstellen", + "edit": "PIN beaarbechten", + "unlock": "PIN entspären", + "locked": "PIN gespaart bis {time}" + }, + "wallet": { + "google": "An Google Wallet derbäisetzen", + "apple": "An Apple Wallet derbäisetzen" + }, + "stats": { + "title": "Statistiken", + "total_cards": "Total Kaarten", + "active_cards": "Aktiv Kaarten", + "stamps_issued": "Stempelen ausgestallt", + "rewards_redeemed": "Belounungen agelées" + }, + "errors": { + "program_not_found": "Treieprogramm net fonnt", + "program_inactive": "Treieprogramm ass net aktiv", + "card_not_found": "Treiekaart net fonnt", + "card_inactive": "Treiekaart ass net aktiv", + "cooldown": "W.e.g. waart {minutes} Minutten virum nächste Stempel", + "daily_limit": "Deeglecht Stempel-Limit vun {limit} erreecht", + "insufficient_stamps": "Brauch {required} Stempelen, huet {current}", + "insufficient_points": "Brauch {required} Punkten, huet {current}", + "pin_required": "Personal-PIN erfuerderlech", + "pin_invalid": "Ongëlteg Personal-PIN", + "pin_locked": "PIN gespaart wéinst ze vill Fehlversich" + } + }, + "menu": { + "loyalty": "Treiprogramm", + "loyalty_programs": "Treiprogrammer", + "programs": "Programmer", + "analytics": "Analytik", + "dashboard": "Dashboard", + "terminal": "Terminal", + "customer_cards": "Clientekaarten", + "statistics": "Statistiken", + "program": "Programm", + "overview": "Iwwersiicht", + "settings": "Astellungen", + "wallet_debug": "Wallet Debug", + "staff_pins": "Mataarbechter-PINen", + "transactions": "Transaktionen" + }, + "permissions": { + "view_programs": "Programmer kucken", + "view_programs_desc": "Treiheet-Programmer an Detailer kucken", + "manage_programs": "Programmer verwalten", + "manage_programs_desc": "Treiheet-Programmer erstellen a konfiguréieren", + "view_rewards": "Beloununge kucken", + "view_rewards_desc": "Belounungen an Aléisunge kucken", + "manage_rewards": "Beloununge verwalten", + "manage_rewards_desc": "Treiheet-Belounungen erstellen a verwalten" + }, + "onboarding": { + "create_program": { + "title": "Treieprogramm erstellen", + "description": "Erstellt Äert éischt Stempel- oder Punkteprogramm" + } + }, + "enrollment": { + "title": "Gitt Member vun eisem Belounungsprogramm!", + "subtitle": "Verdéngt {points} Punkt pro ausgegoenen EUR", + "not_available_title": "Programm net verfügbar", + "not_available_message": "Dëse Buttek huet nach kee Treieprogramm ageriicht.", + "welcome_bonus": "Kritt {points} Bonuspunkten wann Dir Iech umellt!", + "already_member": "Schonn Member? Är Punkten sinn mat Ärer E-Mail verlinkt.", + "form": { + "email": "E-Mail", + "first_name": "Virnumm", + "last_name": "Nonumm", + "phone": "Telefon (fakultativ)", + "birthday": "Gebuertsdag (fakultativ)", + "birthday_hint": "Fir speziell Gebuertsdagsbelounungen", + "terms_agree": "Ech akzeptéieren d'", + "terms": "Allgemeng Geschäftsbedingungen", + "marketing_consent": "Mir Neiegkeeten an Sonderoffere schécken", + "joining": "Umeldung leeft...", + "join_button": "Bäitrieden & {points} Punkten kréien" + }, + "privacy_policy": "Dateschutzrichtlinn", + "close": "Zoumaachen", + "success": { + "title": "Wëllkomm!", + "message": "Dir sidd elo Member vun eisem Belounungsprogramm.", + "card_number": "Är Kaartnummer", + "wallet_prompt": "Späichert Är Kaart op Ärem Handy fir einfachen Zougang:", + "next_steps_title": "Wéi geet et weider?", + "step_earn": "Weist Är Kaartnummer beim Akaf fir Punkten ze sammelen", + "step_balance": "Préift Äre Kontostand online oder an der App", + "step_redeem": "Léist Punkten géint Belounungen an all eise Standuerter an", + "view_dashboard": "Mäin Treie-Dashboard kucken", + "continue_shopping": "Weider akafen" + }, + "errors": { + "load_failed": "Programminformatiounen konnten net gelueden ginn", + "email_exists": "Dës E-Mail ass schonn an eisem Treieprogramm registréiert.", + "failed": "Umeldung feelgeschloen. Probéiert w.e.g. nach eng Kéier." + } + }, + "common": { + "active": "Aktiv", + "all_stores": "All Geschäfter", + "at": "bei", + "back": "Zréck", + "cancel": "Ofbriechen", + "confirm": "Bestätegen", + "continue": "Weider", + "delete": "Läschen", + "disabled": "Deaktivéiert", + "edit": "Beaarbechten", + "enabled": "Aktivéiert", + "inactive": "Inaktiv", + "loading": "Lueden...", + "minutes": "Minutten", + "never": "Ni", + "no": "Neen", + "none": "Keen", + "or": "oder", + "points": "Punkten", + "program_not_setup": "Treieprogramm net ageriicht", + "program_not_setup_desc": "Riicht w.e.g. en Treieprogramm an", + "refresh": "Aktualiséieren", + "save": "Späicheren", + "saving": "Späicheren...", + "total": "TOTAL", + "view": "Kucken", + "yes": "Jo", + "contact_admin_setup": "Kontaktéiert Ären Administrator fir d'Treieprogramm anzeriichten" + }, + "transactions": { + "card_created": "Ageschriwwen", + "welcome_bonus": "Wëllkommensbonus", + "stamp_earned": "Stempel kritt", + "stamp_redeemed": "Stempel agelées", + "stamp_voided": "Stempel stornéiert", + "stamp_adjustment": "Stempel ugepasst", + "points_earned": "Punkten verdéngt", + "points_redeemed": "Punkten agelées", + "points_voided": "Punkten stornéiert", + "points_adjustment": "Punkten ugepasst", + "points_expired": "Punkten ofgelaf", + "card_deactivated": "Deaktivéiert", + "reward_redeemed": "Belounung agelées" + }, + "shared": { + "analytics": { + "total_programs": "Programmer insgesamt", + "total_members": "Memberen insgesamt", + "active_members": "Aktiv Memberen", + "points_issued_30d": "Punkten vergi (30D)", + "transactions_30d": "Transaktiounen (30D)", + "x_active": "{count} aktiv", + "points_overview": "Punkteniwwersiicht", + "points_issued_vs_redeemed": "Punkten vergi vs agelées (30D)", + "issued": "Vergi:", + "redeemed": "Agelées:", + "redemption_rate": "Aléisungsquot", + "outstanding_balance": "Ausstehende Solde", + "member_activity": "Memberaktivitéit", + "active_members_30d": "Aktiv Memberen (30D)", + "new_this_month": "Nei dëse Mount", + "merchants_with_programs": "Händler mat Programmer", + "avg_points_per_member": "Durchschn. Punkten pro Member", + "all_time_statistics": "Gesamtstatistiken", + "total_points_issued": "Total Punkten vergi", + "total_points_redeemed": "Total Punkten agelées", + "points_redeemed_30d": "Punkten agelées (30D)", + "outstanding_liability": "Ausstehend Verbindlechkeet", + "location_breakdown": "Opschlësselung no Standuert", + "store": "Geschäft", + "enrolled": "Ageschriwwen", + "points_earned": "Punkten verdéngt", + "points_redeemed": "Punkten agelées" + }, + "program_view": { + "program_configuration": "Programmkonfiguratioun", + "program_name": "Programmnumm", + "card_name": "Kaartnumm", + "stamps_configuration": "Stempelkonfiguratioun", + "stamps_target": "Stempelzil", + "reward_description": "Belounungsbeschreiwung", + "reward_value": "Belounungswäert", + "points_configuration": "Punktekonfiguratioun", + "points_per_eur": "Punkten pro EUR", + "welcome_bonus": "Wëllkommensbonus", + "x_points": "{count} Punkten", + "minimum_redemption": "Mindest-Aléisung", + "minimum_purchase": "Mindest-Akaf", + "points_expiration": "Punktenoflaaf", + "x_days_inactivity": "{days} Deeg Inaktivitéit", + "redemption_rewards": "Aléisungsbelounungen", + "reward": "Belounung", + "points_required": "Néideg Punkten", + "description": "Beschreiwung", + "anti_fraud": "Betrugsschutz", + "cooldown": "Waardezäit", + "x_minutes": "{count} Minutten", + "max_daily_stamps": "Max. Stempelen pro Dag", + "staff_pin_required": "Personal-PIN erfuerderlech", + "branding": "Branding", + "primary_color": "Haaptfaarf", + "secondary_color": "Secondärfaarf", + "logo_url": "Logo-URL", + "hero_image_url": "Hannergrondbild-URL", + "terms_privacy": "AGB & Dateschutz", + "terms_conditions": "Allgemeng Geschäftsbedingungen", + "privacy_policy_url": "Dateschutzrichtlinn-URL" + }, + "cards": { + "total_members": "Memberen total", + "active_30d": "Aktiv (30D)", + "new_this_month": "Nei dëse Mount", + "total_points_balance": "Total Punktestand", + "search_placeholder": "No Numm, E-Mail, Telefon oder Kaartennummer sichen...", + "all_status": "All Statussen", + "all_stores": "All Geschäfter", + "col_member": "Member", + "col_card_number": "Kaartennummer", + "col_points_balance": "Punktestand", + "col_last_activity": "Lescht Aktivitéit", + "col_status": "Status", + "col_actions": "Aktiounen", + "no_members": "Keng Memberen fonnt", + "adjust_search": "Probéiert Är Sichkriterien unzepassen" + }, + "card_detail": { + "title": "Kaartendetail", + "loading": "Kaartendetailer ginn gelueden...", + "error_loading": "Feeler beim Lueden", + "points_balance": "Punktestand", + "total_earned": "Total verdéngt", + "total_redeemed": "Total ageléist", + "member_since": "Member zënter", + "customer_information": "Clientsinformatiounen", + "name": "Numm", + "email": "E-Mail", + "phone": "Telefon", + "birthday": "Gebuertsdag", + "card_details": "Kaartendetailer", + "card_number": "Kaartennummer", + "status": "Status", + "last_activity": "Lescht Aktivitéit", + "enrolled_at": "Ageschriwwen bei", + "transaction_history": "Transaktiouns-Historique", + "col_date": "Datum", + "col_type": "Typ", + "col_points": "Punkten", + "col_location": "Standuert", + "col_notes": "Notizen", + "no_transactions": "Keng Transaktioune fonnt" }, "transactions": { - "card_created": "Ageschriwwen", - "welcome_bonus": "Wëllkommensbonus", - "stamp_earned": "Stempel kritt", - "stamp_redeemed": "Stempel agelées", - "stamp_voided": "Stempel stornéiert", - "stamp_adjustment": "Stempel ugepasst", - "points_earned": "Punkten verdéngt", - "points_redeemed": "Punkten agelées", - "points_voided": "Punkten stornéiert", - "points_adjustment": "Punkten ugepasst", - "points_expired": "Punkten ofgelaf", - "card_deactivated": "Deaktivéiert", - "reward_redeemed": "Belounung agelées" + "title": "Transaktionen", + "subtitle": "All Treieprogramm-Transaktioune kucken", + "adjust_filters": "Probéiert Är Filteren unzepassen", + "loading": "Transaktioune ginn gelueden...", + "error_loading": "Feeler beim Lueden", + "search_placeholder": "Transaktioune sichen...", + "all_types": "All Typen", + "all_stores": "All Geschäfter", + "col_date": "Datum", + "col_customer": "Client", + "col_type": "Typ", + "col_points": "Punkten", + "col_location": "Standuert", + "col_notes": "Notizen", + "no_transactions": "Keng Transaktioune fonnt", + "type_adjust": "Upassen", + "type_earn": "Verdéngen", + "type_expire": "Oflafen", + "type_redeem": "Aléisen" }, - "shared": { - "analytics": { - "total_programs": "Programmer insgesamt", - "total_members": "Memberen insgesamt", - "active_members": "Aktiv Memberen", - "points_issued_30d": "Punkten vergi (30D)", - "transactions_30d": "Transaktiounen (30D)", - "x_active": "{count} aktiv", - "points_overview": "Punkteniwwersiicht", - "points_issued_vs_redeemed": "Punkten vergi vs agelées (30D)", - "issued": "Vergi:", - "redeemed": "Agelées:", - "redemption_rate": "Aléisungsquot", - "outstanding_balance": "Ausstehende Solde", - "member_activity": "Memberaktivitéit", - "active_members_30d": "Aktiv Memberen (30D)", - "new_this_month": "Nei dëse Mount", - "merchants_with_programs": "Händler mat Programmer", - "avg_points_per_member": "Durchschn. Punkten pro Member", - "all_time_statistics": "Gesamtstatistiken", - "total_points_issued": "Total Punkten vergi", - "total_points_redeemed": "Total Punkten agelées", - "points_redeemed_30d": "Punkten agelées (30D)", - "outstanding_liability": "Ausstehend Verbindlechkeet", - "location_breakdown": "Opschlësselung no Standuert", - "store": "Geschäft", - "enrolled": "Ageschriwwen", - "points_earned": "Punkten verdéngt", - "points_redeemed": "Punkten agelées" - }, - "program_view": { - "program_configuration": "Programmkonfiguratioun", - "program_name": "Programmnumm", - "card_name": "Kaartnumm", - "stamps_configuration": "Stempelkonfiguratioun", - "stamps_target": "Stempelzil", - "reward_description": "Belounungsbeschreiwung", - "reward_value": "Belounungswäert", - "points_configuration": "Punktekonfiguratioun", - "points_per_eur": "Punkten pro EUR", - "welcome_bonus": "Wëllkommensbonus", - "x_points": "{count} Punkten", - "minimum_redemption": "Mindest-Aléisung", - "minimum_purchase": "Mindest-Akaf", - "points_expiration": "Punktenoflaaf", - "x_days_inactivity": "{days} Deeg Inaktivitéit", - "redemption_rewards": "Aléisungsbelounungen", - "reward": "Belounung", - "points_required": "Néideg Punkten", - "description": "Beschreiwung", - "anti_fraud": "Betrugsschutz", - "cooldown": "Waardezäit", - "x_minutes": "{count} Minutten", - "max_daily_stamps": "Max. Stempelen pro Dag", - "staff_pin_required": "Personal-PIN erfuerderlech", - "branding": "Branding", - "primary_color": "Haaptfaarf", - "secondary_color": "Secondärfaarf", - "logo_url": "Logo-URL", - "hero_image_url": "Hannergrondbild-URL", - "terms_privacy": "AGB & Dateschutz", - "terms_conditions": "Allgemeng Geschäftsbedingungen", - "privacy_policy_url": "Dateschutzrichtlinn-URL" - }, - "cards": { - "total_members": "Memberen total", - "active_30d": "Aktiv (30D)", - "new_this_month": "Nei dëse Mount", - "total_points_balance": "Total Punktestand", - "search_placeholder": "No Numm, E-Mail, Telefon oder Kaartennummer sichen...", - "all_status": "All Statussen", - "all_stores": "All Geschäfter", - "col_member": "Member", - "col_card_number": "Kaartennummer", - "col_points_balance": "Punktestand", - "col_last_activity": "Lescht Aktivitéit", - "col_status": "Status", - "col_actions": "Aktiounen", - "no_members": "Keng Memberen fonnt", - "adjust_search": "Probéiert Är Sichkriterien unzepassen" - }, - "card_detail": { - "title": "Kaartendetail", - "loading": "Kaartendetailer ginn gelueden...", - "error_loading": "Feeler beim Lueden", - "points_balance": "Punktestand", - "total_earned": "Total verdéngt", - "total_redeemed": "Total ageléist", - "member_since": "Member zënter", - "customer_information": "Clientsinformatiounen", - "name": "Numm", - "email": "E-Mail", - "phone": "Telefon", - "birthday": "Gebuertsdag", - "card_details": "Kaartendetailer", - "card_number": "Kaartennummer", - "status": "Status", - "last_activity": "Lescht Aktivitéit", - "enrolled_at": "Ageschriwwen bei", - "transaction_history": "Transaktiouns-Historique", - "col_date": "Datum", - "col_type": "Typ", - "col_points": "Punkten", - "col_location": "Standuert", - "col_notes": "Notizen", - "no_transactions": "Keng Transaktioune fonnt" - }, - "transactions": { - "title": "Transaktionen", - "subtitle": "All Treieprogramm-Transaktioune kucken", - "adjust_filters": "Probéiert Är Filteren unzepassen", - "loading": "Transaktioune ginn gelueden...", - "error_loading": "Feeler beim Lueden", - "search_placeholder": "Transaktioune sichen...", - "all_types": "All Typen", - "all_stores": "All Geschäfter", - "col_date": "Datum", - "col_customer": "Client", - "col_type": "Typ", - "col_points": "Punkten", - "col_location": "Standuert", - "col_notes": "Notizen", - "no_transactions": "Keng Transaktioune fonnt", - "type_adjust": "Upassen", - "type_earn": "Verdéngen", - "type_expire": "Oflafen", - "type_redeem": "Aléisen" - }, - "pins": { - "title": "Mataarbechter-PINen", - "subtitle": "Mataarbechter-Authentifizéierungs-PINen verwalten", - "loading": "PINe ginn gelueden...", - "error_loading": "Feeler beim Lueden", - "total_pins": "PINen total", - "active_pins": "Aktiv", - "locked_pins": "Gespaart", - "all_stores": "All Geschäfter", - "all_status": "All Statussen", - "status_active": "Aktiv", - "status_inactive": "Inaktiv", - "status_locked": "Gespaart", - "col_name": "Numm", - "col_staff_id": "Mataarbechter-ID", - "col_store": "Geschäft", - "col_status": "Status", - "col_locked": "Gespaart", - "col_last_used": "Lescht benotzt", - "col_actions": "Aktiounen", - "no_pins": "Keng PINen fonnt", - "create_pin": "PIN erstellen", - "edit_pin": "PIN änneren", - "delete_pin": "PIN läschen", - "unlock_pin": "Entspären", - "confirm_delete": "Sidd Dir sécher, datt Dir dësen PIN läsche wëllt?", - "pin_name": "Numm vum Mataarbechter", - "pin_staff_id": "Mataarbechter-ID (optional)", - "pin_code": "PIN-Code", - "pin_code_hint": "4-6-stellegen PIN", - "pin_edit_hint": "Eidel loossen fir den aktuelle PIN ze behalen", - "pin_edit_placeholder": "Neie PIN (optional)", - "pin_store": "Geschäft", - "select_store": "Geschäft wielen", - "pin_created": "PIN erfollegräich erstallt", - "pin_updated": "PIN erfollegräich aktualiséiert", - "pin_deleted": "PIN erfollegräich geläscht", - "pin_unlocked": "PIN erfollegräich entspäert", - "save": "Späicheren", - "cancel": "Ofbriechen", - "read_only_notice": "PINen sinn an der Admin-Usiicht nëmmen ze liesen" - }, - "program_form": { - "program_type": "Programmtyp", - "points_type_desc": "Punkten pro ausgegoenen EUR verdéngen", - "stamps_type_desc": "N Stempelen sammelen, Belounung kréien", - "hybrid_type_desc": "Stempelen a Punkten kombinéiert", - "stamps_configuration": "Stempelkonfiguratioun", - "stamps_target": "Stempelzil", - "stamps_target_help": "Unzuel vun de Stempelen fir d'Belounung", - "reward_description": "Belounungsbeschreiwung", - "reward_value_cents": "Belounungswäert (Cent)", - "points_configuration": "Punktekonfiguratioun", - "points_per_eur": "Punkten pro ausgegoenen EUR", - "eur_equals_points": "1 EUR = {points} Punkt(en)", - "welcome_bonus_points": "Wëllkommensbonuspunkten", - "welcome_bonus_help": "Bonuspunkten bei der Umeldung", - "minimum_redemption_points": "Mindest-Aléisungspunkten", - "minimum_purchase_cents": "Mindest-Akaf (Cent)", - "minimum_purchase_help": "Mindestakafsbetrag fir Punkten ze sammelen (0 = kee Minimum)", - "points_expiration_days": "Punktenoflaaf (Deeg)", - "points_expiration_help": "Deeg vun Inaktivitéit bis zum Punktenoflaaf (0 = ni)", - "redemption_rewards": "Aléisungsbelounungen", - "add_reward": "Belounung derbäisetzen", - "no_rewards_configured": "Keng Belounungen konfiguréiert. Setzt eng Belounung derbäi fir datt Clienten Punkten aléise kënnen.", - "reward_name": "Belounungsnumm", - "points_required": "Néideg Punkten", - "description": "Beschreiwung", - "anti_fraud_settings": "Betrugsschutz-Astellungen", - "cooldown_minutes": "Waardezäit (Minutten)", - "cooldown_help": "Zäit tëschent Stempelen vun der selwechter Kaart", - "max_daily_stamps": "Max. Stempelen pro Dag", - "max_daily_stamps_help": "Maximal Stempelen pro Kaart pro Dag", - "require_staff_pin": "Personal-PIN verlaangen", - "branding": "Branding", - "card_name": "Kaartnumm", - "primary_color": "Haaptfaarf", - "secondary_color": "Secondärfaarf", - "logo_url": "Logo-URL", - "logo_url_help": "Erfuerderlech fir Google Wallet-Integratioun. Muss eng ëffentlech zougänglech Bild-URL sinn (PNG oder JPG).", - "hero_image_url": "Hannergrondbild-URL", - "terms_privacy": "AGB & Dateschutz", - "terms_conditions": "Allgemeng Geschäftsbedingungen", - "privacy_policy_url": "Dateschutzrichtlinn-URL", - "program_status": "Programmstatus", - "program_active": "Programm aktiv", - "program_active_help": "Deaktivéiert kënne Clienten net sammelen oder aléisen", - "delete_program": "Programm läschen", - "create_program": "Programm erstellen", - "save_changes": "Ännerunge späicheren" - } + "pins": { + "title": "Mataarbechter-PINen", + "subtitle": "Mataarbechter-Authentifizéierungs-PINen verwalten", + "loading": "PINe ginn gelueden...", + "error_loading": "Feeler beim Lueden", + "total_pins": "PINen total", + "active_pins": "Aktiv", + "locked_pins": "Gespaart", + "all_stores": "All Geschäfter", + "all_status": "All Statussen", + "status_active": "Aktiv", + "status_inactive": "Inaktiv", + "status_locked": "Gespaart", + "col_name": "Numm", + "col_staff_id": "Mataarbechter-ID", + "col_store": "Geschäft", + "col_status": "Status", + "col_locked": "Gespaart", + "col_last_used": "Lescht benotzt", + "col_actions": "Aktiounen", + "no_pins": "Keng PINen fonnt", + "create_pin": "PIN erstellen", + "edit_pin": "PIN änneren", + "delete_pin": "PIN läschen", + "unlock_pin": "Entspären", + "confirm_delete": "Sidd Dir sécher, datt Dir dësen PIN läsche wëllt?", + "pin_name": "Numm vum Mataarbechter", + "pin_staff_id": "Mataarbechter-ID (optional)", + "pin_code": "PIN-Code", + "pin_code_hint": "4-6-stellegen PIN", + "pin_edit_hint": "Eidel loossen fir den aktuelle PIN ze behalen", + "pin_edit_placeholder": "Neie PIN (optional)", + "pin_store": "Geschäft", + "select_store": "Geschäft wielen", + "pin_created": "PIN erfollegräich erstallt", + "pin_updated": "PIN erfollegräich aktualiséiert", + "pin_deleted": "PIN erfollegräich geläscht", + "pin_unlocked": "PIN erfollegräich entspäert", + "save": "Späicheren", + "cancel": "Ofbriechen", + "read_only_notice": "PINen sinn an der Admin-Usiicht nëmmen ze liesen" }, - "admin": { - "programs": { - "title": "Treieprogrammer", - "create_program": "Programm erstellen", - "loading": "Treieprogrammer gi gelueden...", - "error_loading": "Feeler beim Luede vun den Treieprogrammer", - "total_programs": "Programmer insgesamt", - "active": "Aktiv", - "total_members": "Memberen insgesamt", - "transactions_30d": "Transaktiounen (30D)", - "search_placeholder": "No Händlernumm sichen...", - "all_status": "All Status", - "table_merchant": "Händler", - "table_program_type": "Programmtyp", - "table_members": "Memberen", - "table_points_issued": "Punkten vergi", - "table_status": "Status", - "table_created": "Erstellt", - "table_actions": "Aktiounen", - "no_programs": "Keng Treieprogrammer fonnt", - "adjust_filters": "Probéiert Är Sich oder Filter unzepassen", - "no_merchants_yet": "Nach kee Händler huet en Treieprogramm erstellt", - "x_active": "({count} aktiv)", - "x_redeemed": "{count} agelées", - "pt_per_eur": "Pkt/EUR", - "delete_title": "Treieprogramm läschen", - "delete_message": "Treieprogramm fir \"{name}\" läschen? All verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", - "delete_confirm": "Programm läschen", - "create_title": "Treieprogramm erstellen", - "create_description": "Wielt en Händler fir en Treieprogramm ze erstellen.", - "search_merchant": "Händler sichen", - "type_merchant_name": "Händlernumm aginn...", - "no_merchants_found": "Keen Händler fonnt", - "existing_program_warning": "Dësen Händler huet schonn en Treieprogramm.", - "view_edit_existing": "Bestehend Programm kucken / beaarbechten" - }, - "merchant_detail": { - "title": "Händler-Treiedetailer", - "loading": "Treiedetailer gi gelueden...", - "error_loading": "Feeler beim Luede vun der Händlertreie", - "program_active": "Treieprogramm aktiv", - "no_program_subtitle": "Keen Treieprogramm", - "quick_actions": "Schnellaktiounen", - "edit_program": "Programm beaarbechten", - "admin_policy": "Admin-Richtlinn", - "view_merchant": "Händler kucken", - "total_members": "Memberen insgesamt", - "active_30d": "Aktiv (30D)", - "points_issued_30d": "Punkten vergi (30D)", - "points_redeemed_30d": "Punkten agelées (30D)", - "no_program": "Keen Treieprogramm", - "no_program_desc": "Dësen Händler huet nach keen Treieprogramm ageriicht.", - "create_program": "Programm erstellen", - "delete_title": "Treieprogramm läschen", - "delete_message": "D'Treieprogramm an all verbonnen Daten ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", - "delete_confirm": "Programm läschen", - "location_breakdown": "Opschlësselung no Standuert", - "table_location": "Standuert", - "table_enrolled": "Ageschriwwen", - "table_points_earned": "Punkten verdéngt", - "table_points_redeemed": "Punkten agelées", - "table_transactions_30d": "Transaktiounen (30D)", - "admin_policy_settings": "Admin-Richtlinn-Astellungen", - "staff_pin_policy": "Personal-PIN-Richtlinn", - "self_enrollment": "Selbstumeldung", - "cross_location_redemption": "Standuertiwergreifend Aléisung", - "allowed": "Erlaabt", - "disabled": "Deaktivéiert", - "modify_policy": "Admin-Richtlinn änneren", - "view_cards": "Kaarten kucken", - "view_transactions": "Transaktioune kucken", - "view_pins": "PINen kucken" - }, - "merchant_cards": { - "title": "Händlerkaarten", - "subtitle": "Treiekaarten fir dësen Händler kucken", - "loading": "Kaarte ginn gelueden...", - "error_loading": "Feeler beim Lueden" - }, - "merchant_card_detail": { - "title": "Kaartendetail", - "error_loading": "Feeler beim Lueden", - "loading": "Kaartendetailer ginn gelueden..." - }, - "merchant_transactions": { - "title": "Händler-Transaktionen", - "subtitle": "All Transaktioune fir dësen Händler", - "loading": "Transaktioune ginn gelueden...", - "error_loading": "Feeler beim Lueden" - }, - "merchant_pins": { - "title": "Händler-PINen", - "subtitle": "PINen fir dësen Händler kucken (nëmmen liesen)", - "loading": "PINe ginn gelueden...", - "error_loading": "Feeler beim Lueden" - }, - "merchant_settings": { - "title": "Händler-Treieastelllungen", - "loading": "Astellunge gi gelueden...", - "error_loading": "Feeler beim Luede vun den Astellungen", - "admin_controlled": "Admin-kontrolléiert Astellungen fir d'Treieprogramm vun dësem Händler", - "staff_pin_policy": "Personal-PIN-Richtlinn", - "staff_pin_description": "Bestëmmt ob Mataarbechter e PIN aginn mussen fir Treietransaktiounen ze veraarbechten.", - "required": "Erfuerderlech", - "required_desc": "Personal muss säin PIN bei all Transaktioun aginn. Recommandéiert fir d'Sécherheet.", - "optional": "Fakultativ", - "optional_desc": "Geschäfter kënne wielen ob PINe verlaangt ginn.", - "pin_disabled": "Deaktivéiert", - "pin_disabled_desc": "Personal-PINe ginn net benotzt. All Mataarbechter kann Transaktiounen veraarbechten.", - "pin_lockout_settings": "PIN-Sparrastellungen", - "max_failed_attempts": "Max. Fehlversich", - "max_failed_attempts_help": "Unzuel vu falschen Versich virun der Spär (3-10)", - "lockout_duration": "Spärauer (Minutten)", - "lockout_duration_help": "Wéi laang d'Spär no Fehlversich dauert (5-120 Minutten)", - "enrollment_settings": "Umeldungsastellungen", - "allow_self_enrollment": "Selbstumeldung erlaben", - "self_enrollment_desc": "Clienten kënne sech per QR-Code ouni Personal umellen", - "transaction_settings": "Transaktiouns-Astellungen", - "allow_cross_location": "Standuertiwergreifend Aléisung erlaben", - "cross_location_desc": "Clienten kënne Punkten an all Standuerter vum Händler aléisen", - "allow_void": "Stornéierungen erlaben", - "void_desc": "Personal kann Punkten/Stempelen bei Réckgaben stornéieren", - "save_settings": "Astellunge späicheren" - }, - "analytics": { - "title": "Treie-Analytik", - "subtitle": "Plattformwäit Treieprogramm-Statistiken", - "loading": "Analytik gëtt gelueden...", - "error_loading": "Feeler beim Luede vun der Analytik", - "filter_by_merchant": "No Händler filtréieren", - "search_merchants_placeholder": "Händler no Numm sichen...", - "showing_stats_for": "Statistike fir:", - "wallet_status": "Wallet-Integratiounsstatus", - "google_wallet": "Google Wallet", - "apple_wallet": "Apple Wallet", - "connected": "Verbonnen", - "error": "Feeler", - "not_configured": "Net konfiguréiert", - "issuer_id": "Aussteller-ID", - "project": "Projet", - "wallet_objects": "Wallet-Objeten", - "loyalty_classes": "Treieklassen", - "pass_type_id": "Pass-Typ-ID", - "team_id": "Team-ID", - "active_passes": "Aktiv Päss", - "quick_actions": "Schnellaktiounen", - "view_all_programs": "All Programmer kucken", - "manage_merchants": "Händler verwalten" - }, - "program_edit": { - "title": "Programmkonfiguratioun", - "loading": "Konfiguratioun gëtt gelueden...", - "error_loading": "Feeler beim Luede vun der Programmkonfiguratioun", - "create_subtitle": "Treieprogramm fir dësen Händler erstellen", - "edit_subtitle": "Programmkonfiguratioun beaarbechten", - "delete_title": "Treieprogramm läschen", - "delete_message": "D'Treieprogramm an all verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", - "delete_confirm": "Programm läschen" - } - }, - "merchant": { - "program": { - "title": "Treieprogramm", - "subtitle": "Är Treieprogramm-Konfiguratioun.", - "edit_program": "Programm beaarbechten", - "no_program": "Keen Treieprogramm", - "no_program_desc": "Ärt Treieprogramm gouf nach net ageriicht. Erstellt eent fir Är Clienten ze belounegen.", - "create_program": "Programm erstellen" - }, - "program_edit": { - "title": "Treie-Astellungen", - "page_title": "Treieprogramm-Astellungen", - "subtitle": "Konfiguréiert Ärt Treieprogramm", - "loading": "Astellunge gi gelueden...", - "error_loading": "Feeler beim Luede vun den Astellungen", - "delete_title": "Treieprogramm läschen", - "delete_message": "Ärt Treieprogramm an all verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", - "delete_confirm": "Programm läschen" - }, - "cards": { - "title": "Clientskaarten", - "subtitle": "Treieprogramm-Memberen iwwer all Standuerter verwalten", - "error_loading": "Feeler beim Lueden", - "loading": "Kaarte ginn gelueden..." - }, - "card_detail": { - "title": "Kaartendetail", - "card_label": "Kaart", - "error_loading": "Feeler beim Lueden", - "loading": "Kaartendetailer ginn gelueden..." - }, - "transactions": { - "title": "Transaktionen", - "subtitle": "All Transaktioune vun all Standuerter kucken", - "error_loading": "Feeler beim Lueden", - "loading": "Transaktioune ginn gelueden..." - }, - "pins": { - "title": "Mataarbechter-PINen", - "subtitle": "PINen fir all Standuerter verwalten", - "error_loading": "Feeler beim Lueden", - "loading": "PINe ginn gelueden..." - }, - "settings": { - "title": "Treieprogramm-Astellungen", - "subtitle": "Treieprogramm-Astellungen kucken", - "admin_controlled": "Dës Astellungen ginn vum Plattformadministrateur geréiert", - "error_loading": "Feeler beim Lueden", - "loading": "Astellunge ginn gelueden...", - "lockout_attempts": "Spärversich", - "lockout_minutes": "Spärdauer (Min)", - "permissions": "Umeldung & Berechtigungen", - "pin_policy": "PIN-Richtlinn", - "staff_pin_policy": "Mataarbechter-PIN-Richtlinn", - "self_enrollment": "Selwer-Umeldung", - "cross_location": "Standuert-iwwergräifend Aléisung", - "void_transactions": "Stornéierungen erlaben", - "enabled": "Aktivéiert", - "disabled": "Deaktivéiert", - "required": "Obligatoresch", - "optional": "Optional" - }, - "analytics": { - "title": "Treie-Analytik", - "subtitle": "Treieprogramm-Statistiken fir all Är Geschäfter", - "loading": "Analytik gëtt gelueden...", - "error_loading": "Feeler beim Luede vun der Analytik", - "no_program": "Keen Treieprogramm", - "no_program_desc": "Riicht en Treieprogramm an fir hei Analytik ze gesinn.", - "create_program": "Programm erstellen", - "quick_actions": "Schnellaktiounen", - "view_program": "Programm kucken", - "edit_program": "Programm beaarbechten" - } - }, - "store": { - "terminal": { - "title": "Treie-Terminal", - "subtitle": "Treietransaktiounen veraarbechten", - "members": "Memberen", - "analytics": "Analytik", - "loading": "Treie-Terminal gëtt gelueden...", - "error_loading": "Feeler beim Luede vum Terminal", - "not_setup": "Treieprogramm net ageriicht", - "not_setup_desc": "Ären Händler huet nach keen Treieprogramm konfiguréiert.", - "setup_program": "Treieprogramm ariichten", - "contact_admin": "Kontaktéiert Ären Administrateur fir d'Ariichtung ofzeschléissen.", - "find_customer": "Client fannen", - "search_placeholder": "E-Mail, Telefon oder Kaartnummer...", - "looking_up": "Sich leeft...", - "look_up_customer": "Client sichen", - "enroll_new_customer": "Neie Client umellen", - "customer_found": "Client fonnt", - "points_balance": "Punktestand", - "stamps": "Stempelen", - "x_more_for_reward": "Nach {count} fir d'Belounung", - "ready_to_redeem": "Prett fir anzeléisen!", - "add_stamp": "Stempel derbäisetzen", - "current": "Aktuell:", - "cooldown_active": "Waardezäit aktiv", - "redeem_stamps": "Stempelen aléisen", - "not_enough_stamps": "Nach net genuch Stempelen", - "earn_points": "Punkten sammelen", - "purchase_amount": "Akafsbetrag", - "points_to_award": "Punkten ze verginn:", - "award_points": "Punkten verginn", - "redeem_reward": "Belounung aléisen", - "select_reward": "Belounung wielen", - "select_reward_placeholder": "Belounung wielen...", - "points_after": "Punkten duerno:", - "search_to_process": "Sicht e Client fir eng Transaktioun ze veraarbechten", - "recent_transactions": "Rezent Transaktiounen un dësem Standuert", - "col_time": "Zäit", - "col_customer": "Client", - "col_type": "Typ", - "col_points": "Punkten", - "col_notes": "Notizen", - "no_recent_transactions": "Keng rezent Transaktiounen", - "enter_staff_pin": "Personal-PIN aginn", - "pin_authorize": "Gitt Äre Personal-PIN an fir dës Transaktioun ze autoriséieren.", - "clear": "Läschen", - "processing": "Veraarbechtung...", - "customer_not_found": "Client net fonnt. Dir kënnt hien als neit Member umellen.", - "error_lookup": "Feeler bei der Clientesich: {message}", - "transaction_failed": "Transaktioun feelgeschloen: {message}", - "stamp_added": "Stempel derbäigesat!", - "stamps_redeemed": "Stempelen agelées! Belounung kritt.", - "x_points_awarded": "{points} Punkten vergi!", - "reward_redeemed": "Belounung agelées: {name}" - }, - "cards": { - "title": "Treie-Memberen", - "subtitle": "Memberen vun Ärem Treieprogramm kucken a verwalten", - "enroll_new": "Umellen", - "loading": "Membere gi gelueden...", - "error_loading": "Feeler beim Luede vun de Memberen", - "total_members": "Memberen insgesamt", - "active_30d": "Aktiv (30D)", - "new_this_month": "Nei dëse Mount", - "total_points_balance": "Gesamtpunktestand", - "search_placeholder": "No Numm, E-Mail, Telefon oder Kaart sichen...", - "all_status": "All Status", - "col_member": "Member", - "col_card_number": "Kaartnummer", - "col_points_balance": "Punktestand", - "col_last_activity": "Lescht Aktivitéit", - "col_status": "Status", - "col_actions": "Aktiounen", - "no_members": "Keng Membere fonnt", - "adjust_search": "Probéiert Är Sich unzepassen", - "enroll_first": "Mellt Ären éischte Client un" - }, - "card_detail": { - "title": "Memberdetailer", - "loading": "Memberdetailer gi gelueden...", - "error_loading": "Feeler beim Luede vum Member", - "points_balance": "Punktestand", - "total_earned": "Insgesamt verdéngt", - "total_redeemed": "Insgesamt agelées", - "member_since": "Member zënter", - "customer_information": "Clienteninformatioun", - "name": "Numm", - "email": "E-Mail", - "phone": "Telefon", - "birthday": "Gebuertsdag", - "card_details": "Kaartdetailer", - "card_number": "Kaartnummer", - "status": "Status", - "last_activity": "Lescht Aktivitéit", - "enrolled_at": "Ugemellt um", - "transaction_history": "Transaktiounsverlaf", - "col_date": "Datum", - "col_type": "Typ", - "col_points": "Punkten", - "col_location": "Standuert", - "col_notes": "Notizen", - "no_transactions": "Nach keng Transaktiounen" - }, - "enroll": { - "title": "Client umellen", - "page_title": "Neie Client umellen", - "subtitle": "Neit Member bei Ärem Treieprogramm derbäisetzen", - "loading": "Lueden...", - "error_loading": "Feeler beim Luede vum Umeldungsformular", - "customer_information": "Clienteninformatioun", - "first_name": "Virnumm", - "last_name": "Nonumm", - "email": "E-Mail", - "phone": "Telefon", - "birthday": "Gebuertsdag", - "birthday_help": "Fir Gebuertsdagsbelounungen (fakultativ)", - "communication_preferences": "Kommunikatiounsastellungen", - "send_emails": "Promotiounsmaile schécken", - "send_sms": "Promotiounssms schécken", - "welcome_bonus": "Wëllkommensbonus", - "welcome_bonus_desc": "Client kritt {points} Bonuspunkten!", - "enroll_customer": "Client umellen", - "enrolling": "Umeldung...", - "customer_enrolled": "Client ugemellt!", - "starting_balance": "Ufankssolde:", - "x_points": "{count} Punkten", - "back_to_terminal": "Zréck zum Terminal", - "enroll_another": "Weider umellen", - "enrollment_failed": "Umeldung feelgeschloen: {message}" - }, - "analytics": { - "title": "Treie-Analytik", - "subtitle": "Verfollegt d'Performance vun Ärem Treieprogramm", - "loading": "Analytik gëtt gelueden...", - "error_loading": "Feeler beim Luede vun der Analytik", - "quick_actions": "Schnellaktiounen", - "open_terminal": "Terminal opmaachen", - "view_members": "Membere kucken", - "view_program": "Programm kucken" - }, - "program": { - "title": "Treieprogramm", - "subtitle": "Är Treieprogramm-Konfiguratioun", - "edit_program": "Programm beaarbechten", - "loading": "Programm gëtt gelueden...", - "error_loading": "Feeler beim Luede vum Programm", - "no_program": "Keen Treieprogramm", - "no_program_desc": "Ären Händler huet nach keen Treieprogramm konfiguréiert.", - "create_program": "Programm erstellen", - "contact_admin": "Kontaktéiert Ären Administrateur fir en Treieprogramm anzerichten." - }, - "pins": { - "title": "Mataarbechter-PINen", - "subtitle": "Mataarbechter-PINen fir dëse Standuert verwalten", - "loading": "PINe ginn gelueden...", - "error_loading": "Feeler beim Lueden vun den PINen" - }, - "settings": { - "title": "Treie-Astellungen", - "page_title": "Treieprogramm-Astellungen", - "subtitle": "Konfiguréiert Ärt Treieprogramm", - "back_to_program": "Zréck zum Programm", - "loading": "Astellunge gi gelueden...", - "error_loading": "Feeler beim Luede vun den Astellungen", - "access_restricted": "Zougang ageschränkt", - "owner_only": "Nëmmen den Geschäftseigentümer kann d'Treieprogramm-Astellungen verwalten.", - "delete_title": "Treieprogramm läschen", - "delete_message": "D'Treieprogramm an all verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", - "delete_confirm": "Programm läschen", - "program_created": "Programm erfollegräich erstellt", - "program_updated": "Programm erfollegräich aktualiséiert", - "program_deleted": "Treieprogramm geläscht", - "save_failed": "Späichere feelgeschloen: {message}", - "delete_failed": "Läsche feelgeschloen: {message}" - } - }, - "storefront": { - "dashboard": { - "back_to_account": "Zréck zum Kont", - "my_loyalty": "Meng Treie", - "join_title": "Gitt Member vun eisem Belounungsprogramm!", - "join_subtitle": "Sammelt Punkten bei all Akaf an léist se géint Belounungen an.", - "join_now": "Elo bäitrieden", - "points_balance": "Punktestand", - "card_number": "Kaartnummer", - "show_card": "Kaart weisen", - "total_earned": "Insgesamt verdéngt", - "total_redeemed": "Insgesamt agelées", - "available_rewards": "Verfügbar Belounungen", - "no_rewards_yet": "Nach keng Belounungen verfügbar", - "ready_to_redeem": "Prett fir anzeléisen", - "x_more_to_go": "Nach {count}", - "redeem_hint": "Weist Är Kaart dem Personal fir Belounungen am Geschäft anzeléisen.", - "recent_activity": "Rezent Aktivitéit", - "view_all": "Alles kucken", - "no_transactions": "Nach keng Transaktiounen. Maacht en Akaf fir Punkten ze sammelen!", - "earn_redeem_locations": "Sammel- & Aléisungs-Standuerter", - "your_loyalty_card": "Är Treiekaart", - "show_to_staff": "Weist dëst dem Personal beim Akaf oder beim Aléise vu Belounungen." - }, - "history": { - "back_to_loyalty": "Zréck zur Treie", - "title": "Transaktiounsverlaf", - "subtitle": "All Är Treiepunkttransaktiounen kucken", - "current_balance": "Aktuell Solde", - "total_earned": "Insgesamt verdéngt", - "total_redeemed": "Insgesamt agelées", - "no_transactions": "Nach keng Transaktiounen", - "balance": "Solde:", - "previous": "Zréck", - "next": "Weider", - "page_x_of_y": "Säit {page} vun {pages}" - } - }, - "toasts": { - "program_activated": "Programm erfollegräich aktivéiert", - "program_deactivated": "Programm erfollegräich deaktivéiert", - "activate_failed": "Programm konnt net aktivéiert ginn: {message}", - "deactivate_failed": "Programm konnt net deaktivéiert ginn: {message}", - "program_deleted": "Programm erfollegräich geläscht", - "delete_failed": "Programm konnt net geläscht ginn: {message}", - "program_created": "Programm erfollegräich erstellt", - "program_updated": "Programm erfollegräich aktualiséiert", - "loyalty_program_created": "Treieprogramm erstellt", - "loyalty_program_deleted": "Treieprogramm geläscht", - "settings_saved": "Astellungen erfollegräich gespäichert", - "save_failed": "Späichere feelgeschloen: {message}", - "settings_save_failed": "Astellunge konnten net gespäichert ginn: {message}", - "create_failed": "Programm konnt net erstellt ginn: {message}", - "logo_required": "Logo-URL ass erfuerderlech fir d'Wallet-Integratioun." + "program_form": { + "program_type": "Programmtyp", + "points_type_desc": "Punkten pro ausgegoenen EUR verdéngen", + "stamps_type_desc": "N Stempelen sammelen, Belounung kréien", + "hybrid_type_desc": "Stempelen a Punkten kombinéiert", + "stamps_configuration": "Stempelkonfiguratioun", + "stamps_target": "Stempelzil", + "stamps_target_help": "Unzuel vun de Stempelen fir d'Belounung", + "reward_description": "Belounungsbeschreiwung", + "reward_value_cents": "Belounungswäert (Cent)", + "points_configuration": "Punktekonfiguratioun", + "points_per_eur": "Punkten pro ausgegoenen EUR", + "eur_equals_points": "1 EUR = {points} Punkt(en)", + "welcome_bonus_points": "Wëllkommensbonuspunkten", + "welcome_bonus_help": "Bonuspunkten bei der Umeldung", + "minimum_redemption_points": "Mindest-Aléisungspunkten", + "minimum_purchase_cents": "Mindest-Akaf (Cent)", + "minimum_purchase_help": "Mindestakafsbetrag fir Punkten ze sammelen (0 = kee Minimum)", + "points_expiration_days": "Punktenoflaaf (Deeg)", + "points_expiration_help": "Deeg vun Inaktivitéit bis zum Punktenoflaaf (0 = ni)", + "redemption_rewards": "Aléisungsbelounungen", + "add_reward": "Belounung derbäisetzen", + "no_rewards_configured": "Keng Belounungen konfiguréiert. Setzt eng Belounung derbäi fir datt Clienten Punkten aléise kënnen.", + "reward_name": "Belounungsnumm", + "points_required": "Néideg Punkten", + "description": "Beschreiwung", + "anti_fraud_settings": "Betrugsschutz-Astellungen", + "cooldown_minutes": "Waardezäit (Minutten)", + "cooldown_help": "Zäit tëschent Stempelen vun der selwechter Kaart", + "max_daily_stamps": "Max. Stempelen pro Dag", + "max_daily_stamps_help": "Maximal Stempelen pro Kaart pro Dag", + "require_staff_pin": "Personal-PIN verlaangen", + "branding": "Branding", + "card_name": "Kaartnumm", + "primary_color": "Haaptfaarf", + "secondary_color": "Secondärfaarf", + "logo_url": "Logo-URL", + "logo_url_help": "Erfuerderlech fir Google Wallet-Integratioun. Muss eng ëffentlech zougänglech Bild-URL sinn (PNG oder JPG).", + "hero_image_url": "Hannergrondbild-URL", + "terms_privacy": "AGB & Dateschutz", + "terms_conditions": "Allgemeng Geschäftsbedingungen", + "privacy_policy_url": "Dateschutzrichtlinn-URL", + "program_status": "Programmstatus", + "program_active": "Programm aktiv", + "program_active_help": "Deaktivéiert kënne Clienten net sammelen oder aléisen", + "delete_program": "Programm läschen", + "create_program": "Programm erstellen", + "save_changes": "Ännerunge späicheren" } + }, + "admin": { + "programs": { + "title": "Treieprogrammer", + "create_program": "Programm erstellen", + "loading": "Treieprogrammer gi gelueden...", + "error_loading": "Feeler beim Luede vun den Treieprogrammer", + "total_programs": "Programmer insgesamt", + "active": "Aktiv", + "total_members": "Memberen insgesamt", + "transactions_30d": "Transaktiounen (30D)", + "search_placeholder": "No Händlernumm sichen...", + "all_status": "All Status", + "table_merchant": "Händler", + "table_program_type": "Programmtyp", + "table_members": "Memberen", + "table_points_issued": "Punkten vergi", + "table_status": "Status", + "table_created": "Erstellt", + "table_actions": "Aktiounen", + "no_programs": "Keng Treieprogrammer fonnt", + "adjust_filters": "Probéiert Är Sich oder Filter unzepassen", + "no_merchants_yet": "Nach kee Händler huet en Treieprogramm erstellt", + "x_active": "({count} aktiv)", + "x_redeemed": "{count} agelées", + "pt_per_eur": "Pkt/EUR", + "delete_title": "Treieprogramm läschen", + "delete_message": "Treieprogramm fir \"{name}\" läschen? All verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", + "delete_confirm": "Programm läschen", + "create_title": "Treieprogramm erstellen", + "create_description": "Wielt en Händler fir en Treieprogramm ze erstellen.", + "search_merchant": "Händler sichen", + "type_merchant_name": "Händlernumm aginn...", + "no_merchants_found": "Keen Händler fonnt", + "existing_program_warning": "Dësen Händler huet schonn en Treieprogramm.", + "view_edit_existing": "Bestehend Programm kucken / beaarbechten" + }, + "merchant_detail": { + "title": "Händler-Treiedetailer", + "loading": "Treiedetailer gi gelueden...", + "error_loading": "Feeler beim Luede vun der Händlertreie", + "program_active": "Treieprogramm aktiv", + "no_program_subtitle": "Keen Treieprogramm", + "quick_actions": "Schnellaktiounen", + "edit_program": "Programm beaarbechten", + "admin_policy": "Admin-Richtlinn", + "view_merchant": "Händler kucken", + "total_members": "Memberen insgesamt", + "active_30d": "Aktiv (30D)", + "points_issued_30d": "Punkten vergi (30D)", + "points_redeemed_30d": "Punkten agelées (30D)", + "no_program": "Keen Treieprogramm", + "no_program_desc": "Dësen Händler huet nach keen Treieprogramm ageriicht.", + "create_program": "Programm erstellen", + "delete_title": "Treieprogramm läschen", + "delete_message": "D'Treieprogramm an all verbonnen Daten ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", + "delete_confirm": "Programm läschen", + "location_breakdown": "Opschlësselung no Standuert", + "table_location": "Standuert", + "table_enrolled": "Ageschriwwen", + "table_points_earned": "Punkten verdéngt", + "table_points_redeemed": "Punkten agelées", + "table_transactions_30d": "Transaktiounen (30D)", + "admin_policy_settings": "Admin-Richtlinn-Astellungen", + "staff_pin_policy": "Personal-PIN-Richtlinn", + "self_enrollment": "Selbstumeldung", + "cross_location_redemption": "Standuertiwergreifend Aléisung", + "allowed": "Erlaabt", + "disabled": "Deaktivéiert", + "modify_policy": "Admin-Richtlinn änneren", + "view_cards": "Kaarten kucken", + "view_transactions": "Transaktioune kucken", + "view_pins": "PINen kucken" + }, + "merchant_cards": { + "title": "Händlerkaarten", + "subtitle": "Treiekaarten fir dësen Händler kucken", + "loading": "Kaarte ginn gelueden...", + "error_loading": "Feeler beim Lueden" + }, + "merchant_card_detail": { + "title": "Kaartendetail", + "error_loading": "Feeler beim Lueden", + "loading": "Kaartendetailer ginn gelueden..." + }, + "merchant_transactions": { + "title": "Händler-Transaktionen", + "subtitle": "All Transaktioune fir dësen Händler", + "loading": "Transaktioune ginn gelueden...", + "error_loading": "Feeler beim Lueden" + }, + "merchant_pins": { + "title": "Händler-PINen", + "subtitle": "PINen fir dësen Händler kucken (nëmmen liesen)", + "loading": "PINe ginn gelueden...", + "error_loading": "Feeler beim Lueden" + }, + "merchant_settings": { + "title": "Händler-Treieastelllungen", + "loading": "Astellunge gi gelueden...", + "error_loading": "Feeler beim Luede vun den Astellungen", + "admin_controlled": "Admin-kontrolléiert Astellungen fir d'Treieprogramm vun dësem Händler", + "staff_pin_policy": "Personal-PIN-Richtlinn", + "staff_pin_description": "Bestëmmt ob Mataarbechter e PIN aginn mussen fir Treietransaktiounen ze veraarbechten.", + "required": "Erfuerderlech", + "required_desc": "Personal muss säin PIN bei all Transaktioun aginn. Recommandéiert fir d'Sécherheet.", + "optional": "Fakultativ", + "optional_desc": "Geschäfter kënne wielen ob PINe verlaangt ginn.", + "pin_disabled": "Deaktivéiert", + "pin_disabled_desc": "Personal-PINe ginn net benotzt. All Mataarbechter kann Transaktiounen veraarbechten.", + "pin_lockout_settings": "PIN-Sparrastellungen", + "max_failed_attempts": "Max. Fehlversich", + "max_failed_attempts_help": "Unzuel vu falschen Versich virun der Spär (3-10)", + "lockout_duration": "Spärauer (Minutten)", + "lockout_duration_help": "Wéi laang d'Spär no Fehlversich dauert (5-120 Minutten)", + "enrollment_settings": "Umeldungsastellungen", + "allow_self_enrollment": "Selbstumeldung erlaben", + "self_enrollment_desc": "Clienten kënne sech per QR-Code ouni Personal umellen", + "transaction_settings": "Transaktiouns-Astellungen", + "allow_cross_location": "Standuertiwergreifend Aléisung erlaben", + "cross_location_desc": "Clienten kënne Punkten an all Standuerter vum Händler aléisen", + "allow_void": "Stornéierungen erlaben", + "void_desc": "Personal kann Punkten/Stempelen bei Réckgaben stornéieren", + "save_settings": "Astellunge späicheren" + }, + "analytics": { + "title": "Treie-Analytik", + "subtitle": "Plattformwäit Treieprogramm-Statistiken", + "loading": "Analytik gëtt gelueden...", + "error_loading": "Feeler beim Luede vun der Analytik", + "filter_by_merchant": "No Händler filtréieren", + "search_merchants_placeholder": "Händler no Numm sichen...", + "showing_stats_for": "Statistike fir:", + "wallet_status": "Wallet-Integratiounsstatus", + "google_wallet": "Google Wallet", + "apple_wallet": "Apple Wallet", + "connected": "Verbonnen", + "error": "Feeler", + "not_configured": "Net konfiguréiert", + "issuer_id": "Aussteller-ID", + "project": "Projet", + "wallet_objects": "Wallet-Objeten", + "loyalty_classes": "Treieklassen", + "pass_type_id": "Pass-Typ-ID", + "team_id": "Team-ID", + "active_passes": "Aktiv Päss", + "quick_actions": "Schnellaktiounen", + "view_all_programs": "All Programmer kucken", + "manage_merchants": "Händler verwalten" + }, + "program_edit": { + "title": "Programmkonfiguratioun", + "loading": "Konfiguratioun gëtt gelueden...", + "error_loading": "Feeler beim Luede vun der Programmkonfiguratioun", + "create_subtitle": "Treieprogramm fir dësen Händler erstellen", + "edit_subtitle": "Programmkonfiguratioun beaarbechten", + "delete_title": "Treieprogramm läschen", + "delete_message": "D'Treieprogramm an all verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", + "delete_confirm": "Programm läschen" + } + }, + "merchant": { + "program": { + "title": "Treieprogramm", + "subtitle": "Är Treieprogramm-Konfiguratioun.", + "edit_program": "Programm beaarbechten", + "no_program": "Keen Treieprogramm", + "no_program_desc": "Ärt Treieprogramm gouf nach net ageriicht. Erstellt eent fir Är Clienten ze belounegen.", + "create_program": "Programm erstellen" + }, + "program_edit": { + "title": "Treie-Astellungen", + "page_title": "Treieprogramm-Astellungen", + "subtitle": "Konfiguréiert Ärt Treieprogramm", + "loading": "Astellunge gi gelueden...", + "error_loading": "Feeler beim Luede vun den Astellungen", + "delete_title": "Treieprogramm läschen", + "delete_message": "Ärt Treieprogramm an all verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", + "delete_confirm": "Programm läschen" + }, + "cards": { + "title": "Clientskaarten", + "subtitle": "Treieprogramm-Memberen iwwer all Standuerter verwalten", + "error_loading": "Feeler beim Lueden", + "loading": "Kaarte ginn gelueden..." + }, + "card_detail": { + "title": "Kaartendetail", + "card_label": "Kaart", + "error_loading": "Feeler beim Lueden", + "loading": "Kaartendetailer ginn gelueden..." + }, + "transactions": { + "title": "Transaktionen", + "subtitle": "All Transaktioune vun all Standuerter kucken", + "error_loading": "Feeler beim Lueden", + "loading": "Transaktioune ginn gelueden..." + }, + "pins": { + "title": "Mataarbechter-PINen", + "subtitle": "PINen fir all Standuerter verwalten", + "error_loading": "Feeler beim Lueden", + "loading": "PINe ginn gelueden..." + }, + "settings": { + "title": "Treieprogramm-Astellungen", + "subtitle": "Treieprogramm-Astellungen kucken", + "admin_controlled": "Dës Astellungen ginn vum Plattformadministrateur geréiert", + "error_loading": "Feeler beim Lueden", + "loading": "Astellunge ginn gelueden...", + "lockout_attempts": "Spärversich", + "lockout_minutes": "Spärdauer (Min)", + "permissions": "Umeldung & Berechtigungen", + "pin_policy": "PIN-Richtlinn", + "staff_pin_policy": "Mataarbechter-PIN-Richtlinn", + "self_enrollment": "Selwer-Umeldung", + "cross_location": "Standuert-iwwergräifend Aléisung", + "void_transactions": "Stornéierungen erlaben", + "enabled": "Aktivéiert", + "disabled": "Deaktivéiert", + "required": "Obligatoresch", + "optional": "Optional" + }, + "analytics": { + "title": "Treie-Analytik", + "subtitle": "Treieprogramm-Statistiken fir all Är Geschäfter", + "loading": "Analytik gëtt gelueden...", + "error_loading": "Feeler beim Luede vun der Analytik", + "no_program": "Keen Treieprogramm", + "no_program_desc": "Riicht en Treieprogramm an fir hei Analytik ze gesinn.", + "create_program": "Programm erstellen", + "quick_actions": "Schnellaktiounen", + "view_program": "Programm kucken", + "edit_program": "Programm beaarbechten" + } + }, + "store": { + "terminal": { + "title": "Treie-Terminal", + "subtitle": "Treietransaktiounen veraarbechten", + "members": "Memberen", + "analytics": "Analytik", + "loading": "Treie-Terminal gëtt gelueden...", + "error_loading": "Feeler beim Luede vum Terminal", + "not_setup": "Treieprogramm net ageriicht", + "not_setup_desc": "Ären Händler huet nach keen Treieprogramm konfiguréiert.", + "setup_program": "Treieprogramm ariichten", + "contact_admin": "Kontaktéiert Ären Administrateur fir d'Ariichtung ofzeschléissen.", + "find_customer": "Client fannen", + "search_placeholder": "E-Mail, Telefon oder Kaartnummer...", + "looking_up": "Sich leeft...", + "look_up_customer": "Client sichen", + "enroll_new_customer": "Neie Client umellen", + "customer_found": "Client fonnt", + "points_balance": "Punktestand", + "stamps": "Stempelen", + "x_more_for_reward": "Nach {count} fir d'Belounung", + "ready_to_redeem": "Prett fir anzeléisen!", + "add_stamp": "Stempel derbäisetzen", + "current": "Aktuell:", + "cooldown_active": "Waardezäit aktiv", + "redeem_stamps": "Stempelen aléisen", + "not_enough_stamps": "Nach net genuch Stempelen", + "earn_points": "Punkten sammelen", + "purchase_amount": "Akafsbetrag", + "points_to_award": "Punkten ze verginn:", + "award_points": "Punkten verginn", + "redeem_reward": "Belounung aléisen", + "select_reward": "Belounung wielen", + "select_reward_placeholder": "Belounung wielen...", + "points_after": "Punkten duerno:", + "search_to_process": "Sicht e Client fir eng Transaktioun ze veraarbechten", + "recent_transactions": "Rezent Transaktiounen un dësem Standuert", + "col_time": "Zäit", + "col_customer": "Client", + "col_type": "Typ", + "col_points": "Punkten", + "col_notes": "Notizen", + "no_recent_transactions": "Keng rezent Transaktiounen", + "enter_staff_pin": "Personal-PIN aginn", + "pin_authorize": "Gitt Äre Personal-PIN an fir dës Transaktioun ze autoriséieren.", + "clear": "Läschen", + "processing": "Veraarbechtung...", + "customer_not_found": "Client net fonnt. Dir kënnt hien als neit Member umellen.", + "error_lookup": "Feeler bei der Clientesich: {message}", + "transaction_failed": "Transaktioun feelgeschloen: {message}", + "stamp_added": "Stempel derbäigesat!", + "stamps_redeemed": "Stempelen agelées! Belounung kritt.", + "x_points_awarded": "{points} Punkten vergi!", + "reward_redeemed": "Belounung agelées: {name}" + }, + "cards": { + "title": "Treie-Memberen", + "subtitle": "Memberen vun Ärem Treieprogramm kucken a verwalten", + "enroll_new": "Umellen", + "loading": "Membere gi gelueden...", + "error_loading": "Feeler beim Luede vun de Memberen", + "total_members": "Memberen insgesamt", + "active_30d": "Aktiv (30D)", + "new_this_month": "Nei dëse Mount", + "total_points_balance": "Gesamtpunktestand", + "search_placeholder": "No Numm, E-Mail, Telefon oder Kaart sichen...", + "all_status": "All Status", + "col_member": "Member", + "col_card_number": "Kaartnummer", + "col_points_balance": "Punktestand", + "col_last_activity": "Lescht Aktivitéit", + "col_status": "Status", + "col_actions": "Aktiounen", + "no_members": "Keng Membere fonnt", + "adjust_search": "Probéiert Är Sich unzepassen", + "enroll_first": "Mellt Ären éischte Client un" + }, + "card_detail": { + "title": "Memberdetailer", + "loading": "Memberdetailer gi gelueden...", + "error_loading": "Feeler beim Luede vum Member", + "points_balance": "Punktestand", + "total_earned": "Insgesamt verdéngt", + "total_redeemed": "Insgesamt agelées", + "member_since": "Member zënter", + "customer_information": "Clienteninformatioun", + "name": "Numm", + "email": "E-Mail", + "phone": "Telefon", + "birthday": "Gebuertsdag", + "card_details": "Kaartdetailer", + "card_number": "Kaartnummer", + "status": "Status", + "last_activity": "Lescht Aktivitéit", + "enrolled_at": "Ugemellt um", + "transaction_history": "Transaktiounsverlaf", + "col_date": "Datum", + "col_type": "Typ", + "col_points": "Punkten", + "col_location": "Standuert", + "col_notes": "Notizen", + "no_transactions": "Nach keng Transaktiounen" + }, + "enroll": { + "title": "Client umellen", + "page_title": "Neie Client umellen", + "subtitle": "Neit Member bei Ärem Treieprogramm derbäisetzen", + "loading": "Lueden...", + "error_loading": "Feeler beim Luede vum Umeldungsformular", + "customer_information": "Clienteninformatioun", + "first_name": "Virnumm", + "last_name": "Nonumm", + "email": "E-Mail", + "phone": "Telefon", + "birthday": "Gebuertsdag", + "birthday_help": "Fir Gebuertsdagsbelounungen (fakultativ)", + "communication_preferences": "Kommunikatiounsastellungen", + "send_emails": "Promotiounsmaile schécken", + "send_sms": "Promotiounssms schécken", + "welcome_bonus": "Wëllkommensbonus", + "welcome_bonus_desc": "Client kritt {points} Bonuspunkten!", + "enroll_customer": "Client umellen", + "enrolling": "Umeldung...", + "customer_enrolled": "Client ugemellt!", + "starting_balance": "Ufankssolde:", + "x_points": "{count} Punkten", + "back_to_terminal": "Zréck zum Terminal", + "enroll_another": "Weider umellen", + "enrollment_failed": "Umeldung feelgeschloen: {message}" + }, + "analytics": { + "title": "Treie-Analytik", + "subtitle": "Verfollegt d'Performance vun Ärem Treieprogramm", + "loading": "Analytik gëtt gelueden...", + "error_loading": "Feeler beim Luede vun der Analytik", + "quick_actions": "Schnellaktiounen", + "open_terminal": "Terminal opmaachen", + "view_members": "Membere kucken", + "view_program": "Programm kucken" + }, + "program": { + "title": "Treieprogramm", + "subtitle": "Är Treieprogramm-Konfiguratioun", + "edit_program": "Programm beaarbechten", + "loading": "Programm gëtt gelueden...", + "error_loading": "Feeler beim Luede vum Programm", + "no_program": "Keen Treieprogramm", + "no_program_desc": "Ären Händler huet nach keen Treieprogramm konfiguréiert.", + "create_program": "Programm erstellen", + "contact_admin": "Kontaktéiert Ären Administrateur fir en Treieprogramm anzerichten." + }, + "pins": { + "title": "Mataarbechter-PINen", + "subtitle": "Mataarbechter-PINen fir dëse Standuert verwalten", + "loading": "PINe ginn gelueden...", + "error_loading": "Feeler beim Lueden vun den PINen" + }, + "settings": { + "title": "Treie-Astellungen", + "page_title": "Treieprogramm-Astellungen", + "subtitle": "Konfiguréiert Ärt Treieprogramm", + "back_to_program": "Zréck zum Programm", + "loading": "Astellunge gi gelueden...", + "error_loading": "Feeler beim Luede vun den Astellungen", + "access_restricted": "Zougang ageschränkt", + "owner_only": "Nëmmen den Geschäftseigentümer kann d'Treieprogramm-Astellungen verwalten.", + "delete_title": "Treieprogramm läschen", + "delete_message": "D'Treieprogramm an all verbonnen Daten (Kaarten, Transaktiounen, Belounungen) ginn dauerhaft geläscht. Dëst kann net réckgängeg gemaach ginn.", + "delete_confirm": "Programm läschen", + "program_created": "Programm erfollegräich erstellt", + "program_updated": "Programm erfollegräich aktualiséiert", + "program_deleted": "Treieprogramm geläscht", + "save_failed": "Späichere feelgeschloen: {message}", + "delete_failed": "Läsche feelgeschloen: {message}" + } + }, + "storefront": { + "dashboard": { + "back_to_account": "Zréck zum Kont", + "my_loyalty": "Meng Treie", + "join_title": "Gitt Member vun eisem Belounungsprogramm!", + "join_subtitle": "Sammelt Punkten bei all Akaf an léist se géint Belounungen an.", + "join_now": "Elo bäitrieden", + "points_balance": "Punktestand", + "card_number": "Kaartnummer", + "show_card": "Kaart weisen", + "total_earned": "Insgesamt verdéngt", + "total_redeemed": "Insgesamt agelées", + "available_rewards": "Verfügbar Belounungen", + "no_rewards_yet": "Nach keng Belounungen verfügbar", + "ready_to_redeem": "Prett fir anzeléisen", + "x_more_to_go": "Nach {count}", + "redeem_hint": "Weist Är Kaart dem Personal fir Belounungen am Geschäft anzeléisen.", + "recent_activity": "Rezent Aktivitéit", + "view_all": "Alles kucken", + "no_transactions": "Nach keng Transaktiounen. Maacht en Akaf fir Punkten ze sammelen!", + "earn_redeem_locations": "Sammel- & Aléisungs-Standuerter", + "your_loyalty_card": "Är Treiekaart", + "show_to_staff": "Weist dëst dem Personal beim Akaf oder beim Aléise vu Belounungen." + }, + "history": { + "back_to_loyalty": "Zréck zur Treie", + "title": "Transaktiounsverlaf", + "subtitle": "All Är Treiepunkttransaktiounen kucken", + "current_balance": "Aktuell Solde", + "total_earned": "Insgesamt verdéngt", + "total_redeemed": "Insgesamt agelées", + "no_transactions": "Nach keng Transaktiounen", + "balance": "Solde:", + "previous": "Zréck", + "next": "Weider", + "page_x_of_y": "Säit {page} vun {pages}" + } + }, + "toasts": { + "program_activated": "Programm erfollegräich aktivéiert", + "program_deactivated": "Programm erfollegräich deaktivéiert", + "activate_failed": "Programm konnt net aktivéiert ginn: {message}", + "deactivate_failed": "Programm konnt net deaktivéiert ginn: {message}", + "program_deleted": "Programm erfollegräich geläscht", + "delete_failed": "Programm konnt net geläscht ginn: {message}", + "program_created": "Programm erfollegräich erstellt", + "program_updated": "Programm erfollegräich aktualiséiert", + "loyalty_program_created": "Treieprogramm erstellt", + "loyalty_program_deleted": "Treieprogramm geläscht", + "settings_saved": "Astellungen erfollegräich gespäichert", + "save_failed": "Späichere feelgeschloen: {message}", + "settings_save_failed": "Astellunge konnten net gespäichert ginn: {message}", + "create_failed": "Programm konnt net erstellt ginn: {message}", + "logo_required": "Logo-URL ass erfuerderlech fir d'Wallet-Integratioun." + } } diff --git a/app/modules/loyalty/static/merchant/js/loyalty-analytics.js b/app/modules/loyalty/static/merchant/js/loyalty-analytics.js index 0071c970..2b155918 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-analytics.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-analytics.js @@ -6,7 +6,7 @@ const loyaltyAnalyticsLog = window.LogConfig.loggers.loyaltyAnalytics || window. function merchantLoyaltyAnalytics() { return { ...data(), - currentPage: 'loyalty-analytics', + currentPage: 'analytics', program: null, locations: [], diff --git a/app/modules/loyalty/static/merchant/js/loyalty-card-detail.js b/app/modules/loyalty/static/merchant/js/loyalty-card-detail.js index 9a33940a..c939bada 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-card-detail.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-card-detail.js @@ -7,7 +7,7 @@ function merchantLoyaltyCardDetail() { return loyaltyCardDetailView({ apiPrefix: '/merchants/loyalty', backUrl: '/merchants/loyalty/cards', - currentPage: 'loyalty-cards', + currentPage: 'cards', }); } diff --git a/app/modules/loyalty/static/merchant/js/loyalty-cards.js b/app/modules/loyalty/static/merchant/js/loyalty-cards.js index 88dff441..3b3795d0 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-cards.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-cards.js @@ -8,7 +8,7 @@ function merchantLoyaltyCards() { apiPrefix: '/merchants/loyalty', baseUrl: '/merchants/loyalty/cards', showStoreFilter: true, - currentPage: 'loyalty-cards', + currentPage: 'cards', }); } diff --git a/app/modules/loyalty/static/merchant/js/loyalty-merchant-settings.js b/app/modules/loyalty/static/merchant/js/loyalty-merchant-settings.js index adb7b4db..aecf872f 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-merchant-settings.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-merchant-settings.js @@ -6,7 +6,7 @@ const merchantSettingsViewLog = window.LogConfig.loggers.merchantSettingsView || function merchantLoyaltyMerchantSettings() { return { ...data(), - currentPage: 'loyalty-settings', + currentPage: 'settings', settings: null, loading: false, diff --git a/app/modules/loyalty/static/merchant/js/loyalty-pins.js b/app/modules/loyalty/static/merchant/js/loyalty-pins.js index 2765ec7b..5a2b6988 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-pins.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-pins.js @@ -8,7 +8,7 @@ function merchantLoyaltyPins() { apiPrefix: '/merchants/loyalty', showStoreFilter: true, showCrud: true, - currentPage: 'loyalty-pins', + currentPage: 'pins', }); } diff --git a/app/modules/loyalty/static/merchant/js/loyalty-settings.js b/app/modules/loyalty/static/merchant/js/loyalty-settings.js index 0e121526..162e6c01 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-settings.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-settings.js @@ -7,7 +7,7 @@ function merchantLoyaltySettings() { return { ...data(), ...createProgramFormMixin(), - currentPage: 'loyalty-program', + currentPage: 'program', loading: false, error: null, diff --git a/app/modules/loyalty/static/merchant/js/loyalty-transactions.js b/app/modules/loyalty/static/merchant/js/loyalty-transactions.js index 79df0f03..cb612393 100644 --- a/app/modules/loyalty/static/merchant/js/loyalty-transactions.js +++ b/app/modules/loyalty/static/merchant/js/loyalty-transactions.js @@ -7,7 +7,7 @@ function merchantLoyaltyTransactions() { return loyaltyTransactionsList({ apiPrefix: '/merchants/loyalty', showStoreFilter: true, - currentPage: 'loyalty-transactions', + currentPage: 'transactions', }); } diff --git a/app/modules/loyalty/static/store/js/loyalty-analytics.js b/app/modules/loyalty/static/store/js/loyalty-analytics.js index 3cb0bf90..4240ca73 100644 --- a/app/modules/loyalty/static/store/js/loyalty-analytics.js +++ b/app/modules/loyalty/static/store/js/loyalty-analytics.js @@ -6,7 +6,7 @@ const loyaltyAnalyticsLog = window.LogConfig.loggers.loyaltyAnalytics || window. function storeLoyaltyAnalytics() { return { ...data(), - currentPage: 'loyalty-analytics', + currentPage: 'analytics', program: null, diff --git a/app/modules/loyalty/static/store/js/loyalty-card-detail.js b/app/modules/loyalty/static/store/js/loyalty-card-detail.js index 68303d93..5c321551 100644 --- a/app/modules/loyalty/static/store/js/loyalty-card-detail.js +++ b/app/modules/loyalty/static/store/js/loyalty-card-detail.js @@ -6,7 +6,7 @@ const loyaltyCardDetailLog = window.LogConfig.loggers.loyaltyCardDetail || windo function storeLoyaltyCardDetail() { return { ...data(), - currentPage: 'loyalty-card-detail', + currentPage: 'cards', cardId: null, card: null, diff --git a/app/modules/loyalty/static/store/js/loyalty-cards.js b/app/modules/loyalty/static/store/js/loyalty-cards.js index 3ed83a43..54635b17 100644 --- a/app/modules/loyalty/static/store/js/loyalty-cards.js +++ b/app/modules/loyalty/static/store/js/loyalty-cards.js @@ -6,7 +6,7 @@ const loyaltyCardsLog = window.LogConfig.loggers.loyaltyCards || window.LogConfi function storeLoyaltyCards() { return { ...data(), - currentPage: 'loyalty-cards', + currentPage: 'cards', // Data cards: [], diff --git a/app/modules/loyalty/static/store/js/loyalty-enroll.js b/app/modules/loyalty/static/store/js/loyalty-enroll.js index 0360ac78..0827824c 100644 --- a/app/modules/loyalty/static/store/js/loyalty-enroll.js +++ b/app/modules/loyalty/static/store/js/loyalty-enroll.js @@ -6,7 +6,7 @@ const loyaltyEnrollLog = window.LogConfig.loggers.loyaltyEnroll || window.LogCon function storeLoyaltyEnroll() { return { ...data(), - currentPage: 'loyalty-enroll', + currentPage: 'terminal', program: null, form: { diff --git a/app/modules/loyalty/static/store/js/loyalty-settings.js b/app/modules/loyalty/static/store/js/loyalty-settings.js index adbc0b62..aa730536 100644 --- a/app/modules/loyalty/static/store/js/loyalty-settings.js +++ b/app/modules/loyalty/static/store/js/loyalty-settings.js @@ -13,7 +13,7 @@ function loyaltySettings() { ...createProgramFormMixin(), // Page identifier - currentPage: 'loyalty-program', + currentPage: 'program', // State loading: false, diff --git a/app/modules/loyalty/static/store/js/loyalty-terminal.js b/app/modules/loyalty/static/store/js/loyalty-terminal.js index 4f6abc84..cc648680 100644 --- a/app/modules/loyalty/static/store/js/loyalty-terminal.js +++ b/app/modules/loyalty/static/store/js/loyalty-terminal.js @@ -13,7 +13,7 @@ function storeLoyaltyTerminal() { ...data(), // Page identifier - currentPage: 'loyalty-terminal', + currentPage: 'terminal', // Program state program: null, diff --git a/app/modules/loyalty/templates/loyalty/store/program.html b/app/modules/loyalty/templates/loyalty/store/program.html index 52f99232..0e9b7eb4 100644 --- a/app/modules/loyalty/templates/loyalty/store/program.html +++ b/app/modules/loyalty/templates/loyalty/store/program.html @@ -61,7 +61,7 @@ function storeLoyaltyProgram() { return { ...data(), - currentPage: 'loyalty-program', + currentPage: 'program', program: null, loading: false,