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": {
"active": "Aktiv",
"inactive": "Inaktiv",
"all_stores": "Alle Filialen",
"at": "bei",
"back": "Zurück",
"cancel": "Abbrechen",
"save": "Speichern",
"delete": "Löschen",
"confirm": "Bestätigen",
"refresh": "Aktualisieren",
"loading": "Laden...",
"saving": "Speichern...",
"view": "Anzeigen",
"continue": "Weiter",
"delete": "Löschen",
"disabled": "Deaktiviert",
"edit": "Bearbeiten",
"yes": "Ja",
"enabled": "Aktiviert",
"inactive": "Inaktiv",
"loading": "Laden...",
"minutes": "Minuten",
"never": "Nie",
"no": "Nein",
"none": "Keine",
"never": "Nie",
"total": "GESAMT",
"continue": "Weiter",
"back": "Zurück",
"points": "Punkte",
"minutes": "Minuten",
"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": {
"card_created": "Angemeldet",
@@ -290,6 +295,7 @@
"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...",
@@ -301,7 +307,11 @@
"col_points": "Punkte",
"col_location": "Standort",
"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": {
"title": "Mitarbeiter-PINs",
@@ -333,6 +343,8 @@
"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",
@@ -473,7 +485,9 @@
"error_loading": "Fehler beim Laden"
},
"merchant_card_detail": {
"title": "Kartendetail"
"title": "Kartendetail",
"error_loading": "Fehler beim Laden",
"loading": "Kartendetails werden geladen..."
},
"merchant_transactions": {
"title": "Händler-Transaktionen",
@@ -572,23 +586,38 @@
},
"cards": {
"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": {
"title": "Kartendetail"
"title": "Kartendetail",
"card_label": "Karte",
"error_loading": "Fehler beim Laden",
"loading": "Kartendetails werden geladen..."
},
"transactions": {
"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": {
"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": {
"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",

View File

@@ -143,27 +143,32 @@
},
"common": {
"active": "Active",
"inactive": "Inactive",
"all_stores": "All Stores",
"at": "at",
"back": "Back",
"cancel": "Cancel",
"save": "Save",
"delete": "Delete",
"confirm": "Confirm",
"refresh": "Refresh",
"loading": "Loading...",
"saving": "Saving...",
"view": "View",
"continue": "Continue",
"delete": "Delete",
"disabled": "Disabled",
"edit": "Edit",
"yes": "Yes",
"enabled": "Enabled",
"inactive": "Inactive",
"loading": "Loading...",
"minutes": "minutes",
"never": "Never",
"no": "No",
"none": "None",
"never": "Never",
"total": "TOTAL",
"continue": "Continue",
"back": "Back",
"points": "points",
"minutes": "minutes",
"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": {
"card_created": "Enrolled",
@@ -290,6 +295,7 @@
"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...",
@@ -301,7 +307,11 @@
"col_points": "Points",
"col_location": "Location",
"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": {
"title": "Staff PINs",
@@ -333,6 +343,8 @@
"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",
@@ -473,7 +485,9 @@
"error_loading": "Error loading cards"
},
"merchant_card_detail": {
"title": "Card Detail"
"title": "Card Detail",
"error_loading": "Error loading card",
"loading": "Loading card details..."
},
"merchant_transactions": {
"title": "Merchant Transactions",
@@ -572,23 +586,38 @@
},
"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": {
"title": "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"
"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"
"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",

View File

@@ -143,27 +143,32 @@
},
"common": {
"active": "Actif",
"inactive": "Inactif",
"all_stores": "Tous les magasins",
"at": "à",
"back": "Retour",
"cancel": "Annuler",
"save": "Enregistrer",
"delete": "Supprimer",
"confirm": "Confirmer",
"refresh": "Actualiser",
"loading": "Chargement...",
"saving": "Enregistrement...",
"view": "Voir",
"continue": "Continuer",
"delete": "Supprimer",
"disabled": "Désactivé",
"edit": "Modifier",
"yes": "Oui",
"enabled": "Activé",
"inactive": "Inactif",
"loading": "Chargement...",
"minutes": "minutes",
"never": "Jamais",
"no": "Non",
"none": "Aucun",
"never": "Jamais",
"total": "TOTAL",
"continue": "Continuer",
"back": "Retour",
"points": "points",
"minutes": "minutes",
"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": {
"card_created": "Inscrit",
@@ -290,6 +295,7 @@
"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...",
@@ -301,7 +307,11 @@
"col_points": "Points",
"col_location": "Emplacement",
"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": {
"title": "PINs du personnel",
@@ -333,6 +343,8 @@
"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",
@@ -473,7 +485,9 @@
"error_loading": "Erreur lors du chargement"
},
"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": {
"title": "Transactions du commerçant",
@@ -572,23 +586,38 @@
},
"cards": {
"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": {
"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": {
"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": {
"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": {
"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",

View File

@@ -143,27 +143,32 @@
},
"common": {
"active": "Aktiv",
"inactive": "Inaktiv",
"all_stores": "All Geschäfter",
"at": "bei",
"back": "Zréck",
"cancel": "Ofbriechen",
"save": "Späicheren",
"delete": "Läschen",
"confirm": "Bestätegen",
"refresh": "Aktualiséieren",
"loading": "Lueden...",
"saving": "Späicheren...",
"view": "Kucken",
"continue": "Weider",
"delete": "Läschen",
"disabled": "Deaktivéiert",
"edit": "Beaarbechten",
"yes": "Jo",
"enabled": "Aktivéiert",
"inactive": "Inaktiv",
"loading": "Lueden...",
"minutes": "Minutten",
"never": "Ni",
"no": "Neen",
"none": "Keen",
"never": "Ni",
"total": "TOTAL",
"continue": "Weider",
"back": "Zréck",
"points": "Punkten",
"minutes": "Minutten",
"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": {
"card_created": "Ageschriwwen",
@@ -290,6 +295,7 @@
"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...",
@@ -301,7 +307,11 @@
"col_points": "Punkten",
"col_location": "Standuert",
"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": {
"title": "Mataarbechter-PINen",
@@ -333,6 +343,8 @@
"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",
@@ -473,7 +485,9 @@
"error_loading": "Feeler beim Lueden"
},
"merchant_card_detail": {
"title": "Kaartendetail"
"title": "Kaartendetail",
"error_loading": "Feeler beim Lueden",
"loading": "Kaartendetailer ginn gelueden..."
},
"merchant_transactions": {
"title": "Händler-Transaktionen",
@@ -572,23 +586,38 @@
},
"cards": {
"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": {
"title": "Kaartendetail"
"title": "Kaartendetail",
"card_label": "Kaart",
"error_loading": "Feeler beim Lueden",
"loading": "Kaartendetailer ginn gelueden..."
},
"transactions": {
"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": {
"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": {
"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",

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 class="flex items-center">
<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>

View File

@@ -26,7 +26,7 @@
<span x-html="$icon('check-circle', 'w-4 h-4')"></span>
</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>
</div>
</div>
@@ -35,7 +35,7 @@
<span x-html="$icon('lock-closed', 'w-4 h-4')"></span>
</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>
</div>
</div>
@@ -134,26 +134,26 @@
<form @submit.prevent="createPin()">
<div class="space-y-4">
<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
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>
<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
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>
<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"
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>
{% if show_store_filter %}
<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
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>
@@ -183,19 +183,19 @@
<form @submit.prevent="updatePin()">
<div class="space-y-4">
<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
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>
<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
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>
<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"
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') }}">
@@ -203,7 +203,7 @@
</div>
{% if show_store_filter %}
<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
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>
@@ -232,7 +232,7 @@
{{ confirm_modal(
'deletePinModal',
_('loyalty.shared.pins.delete_pin'),
_('loyalty.shared.pins.delete_confirm_message'),
_('loyalty.shared.pins.confirm_delete'),
'deletePin()',
'showDeleteModal',
confirm_text=_('loyalty.common.delete'),