fix(loyalty): resolve 40 missing i18n keys across all frontends

Fix template references to match existing locale key names (11 renames
in pins-list.html and settings.html) and add 29 missing keys to all 4
locale files (en/fr/de/lb). All 299 template keys now resolve correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-22 20:52:38 +01:00
parent 6161d69ba2
commit 52a5f941fe
6 changed files with 217 additions and 101 deletions

View File

@@ -143,27 +143,32 @@
}, },
"common": { "common": {
"active": "Aktiv", "active": "Aktiv",
"inactive": "Inaktiv", "all_stores": "Alle Filialen",
"at": "bei",
"back": "Zurück",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"save": "Speichern",
"delete": "Löschen",
"confirm": "Bestätigen", "confirm": "Bestätigen",
"refresh": "Aktualisieren", "continue": "Weiter",
"loading": "Laden...", "delete": "Löschen",
"saving": "Speichern...", "disabled": "Deaktiviert",
"view": "Anzeigen",
"edit": "Bearbeiten", "edit": "Bearbeiten",
"yes": "Ja", "enabled": "Aktiviert",
"inactive": "Inaktiv",
"loading": "Laden...",
"minutes": "Minuten",
"never": "Nie",
"no": "Nein", "no": "Nein",
"none": "Keine", "none": "Keine",
"never": "Nie",
"total": "GESAMT",
"continue": "Weiter",
"back": "Zurück",
"points": "Punkte",
"minutes": "Minuten",
"or": "oder", "or": "oder",
"at": "bei" "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"
}, },
"transactions": { "transactions": {
"card_created": "Angemeldet", "card_created": "Angemeldet",
@@ -290,6 +295,7 @@
"transactions": { "transactions": {
"title": "Transaktionen", "title": "Transaktionen",
"subtitle": "Alle Treue-Transaktionen anzeigen", "subtitle": "Alle Treue-Transaktionen anzeigen",
"adjust_filters": "Versuchen Sie, Ihre Filter anzupassen",
"loading": "Transaktionen werden geladen...", "loading": "Transaktionen werden geladen...",
"error_loading": "Fehler beim Laden", "error_loading": "Fehler beim Laden",
"search_placeholder": "Transaktionen suchen...", "search_placeholder": "Transaktionen suchen...",
@@ -301,7 +307,11 @@
"col_points": "Punkte", "col_points": "Punkte",
"col_location": "Standort", "col_location": "Standort",
"col_notes": "Notizen", "col_notes": "Notizen",
"no_transactions": "Keine Transaktionen gefunden" "no_transactions": "Keine Transaktionen gefunden",
"type_adjust": "Anpassen",
"type_earn": "Verdienen",
"type_expire": "Ablaufen",
"type_redeem": "Einlösen"
}, },
"pins": { "pins": {
"title": "Mitarbeiter-PINs", "title": "Mitarbeiter-PINs",
@@ -333,6 +343,8 @@
"pin_staff_id": "Mitarbeiter-ID (optional)", "pin_staff_id": "Mitarbeiter-ID (optional)",
"pin_code": "PIN-Code", "pin_code": "PIN-Code",
"pin_code_hint": "4-6-stelliger PIN", "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", "pin_store": "Filiale",
"select_store": "Filiale auswählen", "select_store": "Filiale auswählen",
"pin_created": "PIN erfolgreich erstellt", "pin_created": "PIN erfolgreich erstellt",
@@ -473,7 +485,9 @@
"error_loading": "Fehler beim Laden" "error_loading": "Fehler beim Laden"
}, },
"merchant_card_detail": { "merchant_card_detail": {
"title": "Kartendetail" "title": "Kartendetail",
"error_loading": "Fehler beim Laden",
"loading": "Kartendetails werden geladen..."
}, },
"merchant_transactions": { "merchant_transactions": {
"title": "Händler-Transaktionen", "title": "Händler-Transaktionen",
@@ -572,23 +586,38 @@
}, },
"cards": { "cards": {
"title": "Kundenkarten", "title": "Kundenkarten",
"subtitle": "Treuemitglieder über alle Standorte verwalten" "subtitle": "Treuemitglieder über alle Standorte verwalten",
"error_loading": "Fehler beim Laden",
"loading": "Karten werden geladen..."
}, },
"card_detail": { "card_detail": {
"title": "Kartendetail" "title": "Kartendetail",
"card_label": "Karte",
"error_loading": "Fehler beim Laden",
"loading": "Kartendetails werden geladen..."
}, },
"transactions": { "transactions": {
"title": "Transaktionen", "title": "Transaktionen",
"subtitle": "Alle Transaktionen über alle Standorte anzeigen" "subtitle": "Alle Transaktionen über alle Standorte anzeigen",
"error_loading": "Fehler beim Laden",
"loading": "Transaktionen werden geladen..."
}, },
"pins": { "pins": {
"title": "Mitarbeiter-PINs", "title": "Mitarbeiter-PINs",
"subtitle": "PINs für alle Standorte verwalten" "subtitle": "PINs für alle Standorte verwalten",
"error_loading": "Fehler beim Laden",
"loading": "PINs werden geladen..."
}, },
"settings": { "settings": {
"title": "Treue-Einstellungen", "title": "Treue-Einstellungen",
"subtitle": "Treueprogramm-Einstellungen anzeigen", "subtitle": "Treueprogramm-Einstellungen anzeigen",
"admin_controlled": "Diese Einstellungen werden vom Plattformadministrator verwaltet", "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", "staff_pin_policy": "Mitarbeiter-PIN-Richtlinie",
"self_enrollment": "Selbstanmeldung", "self_enrollment": "Selbstanmeldung",
"cross_location": "Standortübergreifende Einlösung", "cross_location": "Standortübergreifende Einlösung",

View File

@@ -143,27 +143,32 @@
}, },
"common": { "common": {
"active": "Active", "active": "Active",
"inactive": "Inactive", "all_stores": "All Stores",
"at": "at",
"back": "Back",
"cancel": "Cancel", "cancel": "Cancel",
"save": "Save",
"delete": "Delete",
"confirm": "Confirm", "confirm": "Confirm",
"refresh": "Refresh", "continue": "Continue",
"loading": "Loading...", "delete": "Delete",
"saving": "Saving...", "disabled": "Disabled",
"view": "View",
"edit": "Edit", "edit": "Edit",
"yes": "Yes", "enabled": "Enabled",
"inactive": "Inactive",
"loading": "Loading...",
"minutes": "minutes",
"never": "Never",
"no": "No", "no": "No",
"none": "None", "none": "None",
"never": "Never",
"total": "TOTAL",
"continue": "Continue",
"back": "Back",
"points": "points",
"minutes": "minutes",
"or": "or", "or": "or",
"at": "at" "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"
}, },
"transactions": { "transactions": {
"card_created": "Enrolled", "card_created": "Enrolled",
@@ -290,6 +295,7 @@
"transactions": { "transactions": {
"title": "Transactions", "title": "Transactions",
"subtitle": "View all loyalty transactions", "subtitle": "View all loyalty transactions",
"adjust_filters": "Try adjusting your filters",
"loading": "Loading transactions...", "loading": "Loading transactions...",
"error_loading": "Error loading transactions", "error_loading": "Error loading transactions",
"search_placeholder": "Search transactions...", "search_placeholder": "Search transactions...",
@@ -301,7 +307,11 @@
"col_points": "Points", "col_points": "Points",
"col_location": "Location", "col_location": "Location",
"col_notes": "Notes", "col_notes": "Notes",
"no_transactions": "No transactions found" "no_transactions": "No transactions found",
"type_adjust": "Adjust",
"type_earn": "Earn",
"type_expire": "Expire",
"type_redeem": "Redeem"
}, },
"pins": { "pins": {
"title": "Staff PINs", "title": "Staff PINs",
@@ -333,6 +343,8 @@
"pin_staff_id": "Employee ID (optional)", "pin_staff_id": "Employee ID (optional)",
"pin_code": "PIN Code", "pin_code": "PIN Code",
"pin_code_hint": "4-6 digit PIN", "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", "pin_store": "Store",
"select_store": "Select store", "select_store": "Select store",
"pin_created": "PIN created successfully", "pin_created": "PIN created successfully",
@@ -473,7 +485,9 @@
"error_loading": "Error loading cards" "error_loading": "Error loading cards"
}, },
"merchant_card_detail": { "merchant_card_detail": {
"title": "Card Detail" "title": "Card Detail",
"error_loading": "Error loading card",
"loading": "Loading card details..."
}, },
"merchant_transactions": { "merchant_transactions": {
"title": "Merchant Transactions", "title": "Merchant Transactions",
@@ -572,23 +586,38 @@
}, },
"cards": { "cards": {
"title": "Customer Cards", "title": "Customer Cards",
"subtitle": "View and manage loyalty members across all locations" "subtitle": "View and manage loyalty members across all locations",
"error_loading": "Error loading cards",
"loading": "Loading cards..."
}, },
"card_detail": { "card_detail": {
"title": "Card Detail" "title": "Card Detail",
"card_label": "Card",
"error_loading": "Error loading card",
"loading": "Loading card details..."
}, },
"transactions": { "transactions": {
"title": "Transactions", "title": "Transactions",
"subtitle": "View all loyalty transactions across locations" "subtitle": "View all loyalty transactions across locations",
"error_loading": "Error loading transactions",
"loading": "Loading transactions..."
}, },
"pins": { "pins": {
"title": "Staff PINs", "title": "Staff PINs",
"subtitle": "Manage staff PINs across all locations" "subtitle": "Manage staff PINs across all locations",
"error_loading": "Error loading PINs",
"loading": "Loading PINs..."
}, },
"settings": { "settings": {
"title": "Loyalty Settings", "title": "Loyalty Settings",
"subtitle": "View loyalty program settings", "subtitle": "View loyalty program settings",
"admin_controlled": "These settings are managed by the platform administrator", "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", "staff_pin_policy": "Staff PIN Policy",
"self_enrollment": "Self Enrollment", "self_enrollment": "Self Enrollment",
"cross_location": "Cross-Location Redemption", "cross_location": "Cross-Location Redemption",

View File

@@ -143,27 +143,32 @@
}, },
"common": { "common": {
"active": "Actif", "active": "Actif",
"inactive": "Inactif", "all_stores": "Tous les magasins",
"at": "à",
"back": "Retour",
"cancel": "Annuler", "cancel": "Annuler",
"save": "Enregistrer",
"delete": "Supprimer",
"confirm": "Confirmer", "confirm": "Confirmer",
"refresh": "Actualiser", "continue": "Continuer",
"loading": "Chargement...", "delete": "Supprimer",
"saving": "Enregistrement...", "disabled": "Désactivé",
"view": "Voir",
"edit": "Modifier", "edit": "Modifier",
"yes": "Oui", "enabled": "Activé",
"inactive": "Inactif",
"loading": "Chargement...",
"minutes": "minutes",
"never": "Jamais",
"no": "Non", "no": "Non",
"none": "Aucun", "none": "Aucun",
"never": "Jamais",
"total": "TOTAL",
"continue": "Continuer",
"back": "Retour",
"points": "points",
"minutes": "minutes",
"or": "ou", "or": "ou",
"at": "à" "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"
}, },
"transactions": { "transactions": {
"card_created": "Inscrit", "card_created": "Inscrit",
@@ -290,6 +295,7 @@
"transactions": { "transactions": {
"title": "Transactions", "title": "Transactions",
"subtitle": "Voir toutes les transactions", "subtitle": "Voir toutes les transactions",
"adjust_filters": "Essayez de modifier vos filtres",
"loading": "Chargement des transactions...", "loading": "Chargement des transactions...",
"error_loading": "Erreur lors du chargement", "error_loading": "Erreur lors du chargement",
"search_placeholder": "Rechercher des transactions...", "search_placeholder": "Rechercher des transactions...",
@@ -301,7 +307,11 @@
"col_points": "Points", "col_points": "Points",
"col_location": "Emplacement", "col_location": "Emplacement",
"col_notes": "Notes", "col_notes": "Notes",
"no_transactions": "Aucune transaction trouvée" "no_transactions": "Aucune transaction trouvée",
"type_adjust": "Ajuster",
"type_earn": "Gagner",
"type_expire": "Expirer",
"type_redeem": "Échanger"
}, },
"pins": { "pins": {
"title": "PINs du personnel", "title": "PINs du personnel",
@@ -333,6 +343,8 @@
"pin_staff_id": "ID employé (optionnel)", "pin_staff_id": "ID employé (optionnel)",
"pin_code": "Code PIN", "pin_code": "Code PIN",
"pin_code_hint": "PIN à 4-6 chiffres", "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", "pin_store": "Magasin",
"select_store": "Sélectionner un magasin", "select_store": "Sélectionner un magasin",
"pin_created": "PIN créé avec succès", "pin_created": "PIN créé avec succès",
@@ -473,7 +485,9 @@
"error_loading": "Erreur lors du chargement" "error_loading": "Erreur lors du chargement"
}, },
"merchant_card_detail": { "merchant_card_detail": {
"title": "Détail de la carte" "title": "Détail de la carte",
"error_loading": "Erreur lors du chargement",
"loading": "Chargement des détails..."
}, },
"merchant_transactions": { "merchant_transactions": {
"title": "Transactions du commerçant", "title": "Transactions du commerçant",
@@ -572,23 +586,38 @@
}, },
"cards": { "cards": {
"title": "Cartes clients", "title": "Cartes clients",
"subtitle": "Voir et gérer les membres fidélité sur tous les sites" "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": { "card_detail": {
"title": "Détail de la carte" "title": "Détail de la carte",
"card_label": "Carte",
"error_loading": "Erreur lors du chargement",
"loading": "Chargement des détails..."
}, },
"transactions": { "transactions": {
"title": "Transactions", "title": "Transactions",
"subtitle": "Voir toutes les transactions sur tous les sites" "subtitle": "Voir toutes les transactions sur tous les sites",
"error_loading": "Erreur lors du chargement",
"loading": "Chargement des transactions..."
}, },
"pins": { "pins": {
"title": "PINs du personnel", "title": "PINs du personnel",
"subtitle": "Gérer les PINs sur tous les sites" "subtitle": "Gérer les PINs sur tous les sites",
"error_loading": "Erreur lors du chargement",
"loading": "Chargement des PINs..."
}, },
"settings": { "settings": {
"title": "Paramètres fidélité", "title": "Paramètres fidélité",
"subtitle": "Voir les paramètres du programme", "subtitle": "Voir les paramètres du programme",
"admin_controlled": "Ces paramètres sont gérés par l'administrateur", "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", "staff_pin_policy": "Politique PIN personnel",
"self_enrollment": "Auto-inscription", "self_enrollment": "Auto-inscription",
"cross_location": "Échange multi-sites", "cross_location": "Échange multi-sites",

View File

@@ -143,27 +143,32 @@
}, },
"common": { "common": {
"active": "Aktiv", "active": "Aktiv",
"inactive": "Inaktiv", "all_stores": "All Geschäfter",
"at": "bei",
"back": "Zréck",
"cancel": "Ofbriechen", "cancel": "Ofbriechen",
"save": "Späicheren",
"delete": "Läschen",
"confirm": "Bestätegen", "confirm": "Bestätegen",
"refresh": "Aktualiséieren", "continue": "Weider",
"loading": "Lueden...", "delete": "Läschen",
"saving": "Späicheren...", "disabled": "Deaktivéiert",
"view": "Kucken",
"edit": "Beaarbechten", "edit": "Beaarbechten",
"yes": "Jo", "enabled": "Aktivéiert",
"inactive": "Inaktiv",
"loading": "Lueden...",
"minutes": "Minutten",
"never": "Ni",
"no": "Neen", "no": "Neen",
"none": "Keen", "none": "Keen",
"never": "Ni",
"total": "TOTAL",
"continue": "Weider",
"back": "Zréck",
"points": "Punkten",
"minutes": "Minutten",
"or": "oder", "or": "oder",
"at": "bei" "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"
}, },
"transactions": { "transactions": {
"card_created": "Ageschriwwen", "card_created": "Ageschriwwen",
@@ -290,6 +295,7 @@
"transactions": { "transactions": {
"title": "Transaktionen", "title": "Transaktionen",
"subtitle": "All Treieprogramm-Transaktioune kucken", "subtitle": "All Treieprogramm-Transaktioune kucken",
"adjust_filters": "Probéiert Är Filteren unzepassen",
"loading": "Transaktioune ginn gelueden...", "loading": "Transaktioune ginn gelueden...",
"error_loading": "Feeler beim Lueden", "error_loading": "Feeler beim Lueden",
"search_placeholder": "Transaktioune sichen...", "search_placeholder": "Transaktioune sichen...",
@@ -301,7 +307,11 @@
"col_points": "Punkten", "col_points": "Punkten",
"col_location": "Standuert", "col_location": "Standuert",
"col_notes": "Notizen", "col_notes": "Notizen",
"no_transactions": "Keng Transaktioune fonnt" "no_transactions": "Keng Transaktioune fonnt",
"type_adjust": "Upassen",
"type_earn": "Verdéngen",
"type_expire": "Oflafen",
"type_redeem": "Aléisen"
}, },
"pins": { "pins": {
"title": "Mataarbechter-PINen", "title": "Mataarbechter-PINen",
@@ -333,6 +343,8 @@
"pin_staff_id": "Mataarbechter-ID (optional)", "pin_staff_id": "Mataarbechter-ID (optional)",
"pin_code": "PIN-Code", "pin_code": "PIN-Code",
"pin_code_hint": "4-6-stellegen PIN", "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", "pin_store": "Geschäft",
"select_store": "Geschäft wielen", "select_store": "Geschäft wielen",
"pin_created": "PIN erfollegräich erstallt", "pin_created": "PIN erfollegräich erstallt",
@@ -473,7 +485,9 @@
"error_loading": "Feeler beim Lueden" "error_loading": "Feeler beim Lueden"
}, },
"merchant_card_detail": { "merchant_card_detail": {
"title": "Kaartendetail" "title": "Kaartendetail",
"error_loading": "Feeler beim Lueden",
"loading": "Kaartendetailer ginn gelueden..."
}, },
"merchant_transactions": { "merchant_transactions": {
"title": "Händler-Transaktionen", "title": "Händler-Transaktionen",
@@ -572,23 +586,38 @@
}, },
"cards": { "cards": {
"title": "Clientskaarten", "title": "Clientskaarten",
"subtitle": "Treieprogramm-Memberen iwwer all Standuerter verwalten" "subtitle": "Treieprogramm-Memberen iwwer all Standuerter verwalten",
"error_loading": "Feeler beim Lueden",
"loading": "Kaarte ginn gelueden..."
}, },
"card_detail": { "card_detail": {
"title": "Kaartendetail" "title": "Kaartendetail",
"card_label": "Kaart",
"error_loading": "Feeler beim Lueden",
"loading": "Kaartendetailer ginn gelueden..."
}, },
"transactions": { "transactions": {
"title": "Transaktionen", "title": "Transaktionen",
"subtitle": "All Transaktioune vun all Standuerter kucken" "subtitle": "All Transaktioune vun all Standuerter kucken",
"error_loading": "Feeler beim Lueden",
"loading": "Transaktioune ginn gelueden..."
}, },
"pins": { "pins": {
"title": "Mataarbechter-PINen", "title": "Mataarbechter-PINen",
"subtitle": "PINen fir all Standuerter verwalten" "subtitle": "PINen fir all Standuerter verwalten",
"error_loading": "Feeler beim Lueden",
"loading": "PINe ginn gelueden..."
}, },
"settings": { "settings": {
"title": "Treieprogramm-Astellungen", "title": "Treieprogramm-Astellungen",
"subtitle": "Treieprogramm-Astellungen kucken", "subtitle": "Treieprogramm-Astellungen kucken",
"admin_controlled": "Dës Astellungen ginn vum Plattformadministrateur geréiert", "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", "staff_pin_policy": "Mataarbechter-PIN-Richtlinn",
"self_enrollment": "Selwer-Umeldung", "self_enrollment": "Selwer-Umeldung",
"cross_location": "Standuert-iwwergräifend Aléisung", "cross_location": "Standuert-iwwergräifend Aléisung",

View File

@@ -21,7 +21,7 @@
<div x-show="!loading && !error" class="mb-6 px-4 py-3 bg-blue-50 border border-blue-200 rounded-lg dark:bg-blue-900/20 dark:border-blue-800"> <div x-show="!loading && !error" class="mb-6 px-4 py-3 bg-blue-50 border border-blue-200 rounded-lg dark:bg-blue-900/20 dark:border-blue-800">
<div class="flex items-center"> <div class="flex items-center">
<span x-html="$icon('information-circle', 'w-5 h-5 text-blue-500 mr-2 flex-shrink-0')"></span> <span x-html="$icon('information-circle', 'w-5 h-5 text-blue-500 mr-2 flex-shrink-0')"></span>
<p class="text-sm text-blue-700 dark:text-blue-300">{{ _('loyalty.merchant.settings.managed_by_admin') }}</p> <p class="text-sm text-blue-700 dark:text-blue-300">{{ _('loyalty.merchant.settings.admin_controlled') }}</p>
</div> </div>
</div> </div>

View File

@@ -26,7 +26,7 @@
<span x-html="$icon('check-circle', 'w-4 h-4')"></span> <span x-html="$icon('check-circle', 'w-4 h-4')"></span>
</div> </div>
<div> <div>
<p class="text-xs font-medium text-gray-600 dark:text-gray-400">{{ _('loyalty.shared.pins.active') }}</p> <p class="text-xs font-medium text-gray-600 dark:text-gray-400">{{ _('loyalty.shared.pins.active_pins') }}</p>
<p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="formatNumber(pinStats.active)">0</p> <p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="formatNumber(pinStats.active)">0</p>
</div> </div>
</div> </div>
@@ -35,7 +35,7 @@
<span x-html="$icon('lock-closed', 'w-4 h-4')"></span> <span x-html="$icon('lock-closed', 'w-4 h-4')"></span>
</div> </div>
<div> <div>
<p class="text-xs font-medium text-gray-600 dark:text-gray-400">{{ _('loyalty.shared.pins.locked') }}</p> <p class="text-xs font-medium text-gray-600 dark:text-gray-400">{{ _('loyalty.shared.pins.locked_pins') }}</p>
<p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="formatNumber(pinStats.locked)">0</p> <p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="formatNumber(pinStats.locked)">0</p>
</div> </div>
</div> </div>
@@ -134,26 +134,26 @@
<form @submit.prevent="createPin()"> <form @submit.prevent="createPin()">
<div class="space-y-4"> <div class="space-y-4">
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_name') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_name') }}</label>
<input type="text" x-model="pinForm.name" required <input type="text" x-model="pinForm.name" required
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300" class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"
placeholder="{{ _('loyalty.shared.pins.name_placeholder') }}"> placeholder="{{ _('loyalty.shared.pins.pin_name') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_staff_id') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_staff_id') }}</label>
<input type="text" x-model="pinForm.staff_id" required <input type="text" x-model="pinForm.staff_id" required
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300" class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"
placeholder="{{ _('loyalty.shared.pins.staff_id_placeholder') }}"> placeholder="{{ _('loyalty.shared.pins.pin_staff_id') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_pin') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_code') }}</label>
<input type="password" x-model="pinForm.pin" required minlength="4" maxlength="8" <input type="password" x-model="pinForm.pin" required minlength="4" maxlength="8"
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300" class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"
placeholder="{{ _('loyalty.shared.pins.pin_placeholder') }}"> placeholder="{{ _('loyalty.shared.pins.pin_code_hint') }}">
</div> </div>
{% if show_store_filter %} {% if show_store_filter %}
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_store') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_store') }}</label>
<select x-model="pinForm.store_id" required <select x-model="pinForm.store_id" required
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"> class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300">
<option value="">{{ _('loyalty.shared.pins.select_store') }}</option> <option value="">{{ _('loyalty.shared.pins.select_store') }}</option>
@@ -183,19 +183,19 @@
<form @submit.prevent="updatePin()"> <form @submit.prevent="updatePin()">
<div class="space-y-4"> <div class="space-y-4">
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_name') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_name') }}</label>
<input type="text" x-model="pinForm.name" required <input type="text" x-model="pinForm.name" required
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300" class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"
placeholder="{{ _('loyalty.shared.pins.name_placeholder') }}"> placeholder="{{ _('loyalty.shared.pins.pin_name') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_staff_id') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_staff_id') }}</label>
<input type="text" x-model="pinForm.staff_id" required <input type="text" x-model="pinForm.staff_id" required
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300" class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"
placeholder="{{ _('loyalty.shared.pins.staff_id_placeholder') }}"> placeholder="{{ _('loyalty.shared.pins.pin_staff_id') }}">
</div> </div>
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_pin') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_code') }}</label>
<input type="password" x-model="pinForm.pin" minlength="4" maxlength="8" <input type="password" x-model="pinForm.pin" minlength="4" maxlength="8"
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300" class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"
placeholder="{{ _('loyalty.shared.pins.pin_edit_placeholder') }}"> placeholder="{{ _('loyalty.shared.pins.pin_edit_placeholder') }}">
@@ -203,7 +203,7 @@
</div> </div>
{% if show_store_filter %} {% if show_store_filter %}
<div> <div>
<label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.field_store') }}</label> <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">{{ _('loyalty.shared.pins.pin_store') }}</label>
<select x-model="pinForm.store_id" required <select x-model="pinForm.store_id" required
class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300"> class="w-full px-3 py-2 text-sm border border-gray-300 dark:border-gray-600 rounded-lg focus:border-purple-400 focus:outline-none dark:bg-gray-700 dark:text-gray-300">
<option value="">{{ _('loyalty.shared.pins.select_store') }}</option> <option value="">{{ _('loyalty.shared.pins.select_store') }}</option>
@@ -232,7 +232,7 @@
{{ confirm_modal( {{ confirm_modal(
'deletePinModal', 'deletePinModal',
_('loyalty.shared.pins.delete_pin'), _('loyalty.shared.pins.delete_pin'),
_('loyalty.shared.pins.delete_confirm_message'), _('loyalty.shared.pins.confirm_delete'),
'deletePin()', 'deletePin()',
'showDeleteModal', 'showDeleteModal',
confirm_text=_('loyalty.common.delete'), confirm_text=_('loyalty.common.delete'),