Files
orion/app/modules/loyalty/locales/fr.json
Samir Boulahtit adc36246b8
Some checks failed
CI / ruff (push) Successful in 14s
CI / pytest (push) Failing after 2h32m45s
CI / validate (push) Successful in 30s
CI / dependency-scanning (push) Successful in 31s
CI / docs (push) Has been skipped
CI / deploy (push) Has been skipped
feat(storefront): homepage, module gating, widget protocol, i18n fixes
Storefront homepage & module gating:
- CMS owns storefront GET / (slug="home" with 3-tier resolution)
- Catalog loses GET / (keeps /products only)
- Store root redirect (GET / → /store/dashboard or /store/login)
- Route gating: non-core modules return 404 when disabled for platform
- Seed store default homepages per platform

Widget protocol for customer dashboard:
- StorefrontDashboardCard contract in widgets.py
- Widget aggregator get_storefront_dashboard_cards()
- Orders and Loyalty module widget providers
- Dashboard template renders contributed cards (no module names)

Landing template module-agnostic:
- CTAs driven by storefront_nav (not hardcoded module names)
- Header actions check nav item IDs (not enabled_modules)
- Remove hardcoded "Add Product" sidebar button
- Remove all enabled_modules checks from storefront templates

i18n fixes:
- Title placeholder resolution ({{store_name}}) for store default pages
- Storefront nav label_keys prefixed with module code
- Add storefront.account.* keys to 6 modules (en/fr/de/lb)
- Header/footer CMS pages use get_translated_title(current_language)
- Footer labels use i18n keys instead of hardcoded English

Icon cleanup:
- Standardize on map-pin (remove location-marker alias)
- Replace all location-marker references across templates and docs

Docs:
- Storefront builder vision proposal (6 phases)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 22:53:17 +02:00

916 lines
46 KiB
JSON

{
"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"
}
},
"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"
},
"already_enrolled_title": "Vous êtes déjà membre !",
"cross_location_message": "Votre carte est valable dans tous nos points de vente :",
"single_location_message": "Votre carte est enregistrée chez {store_name}",
"available_locations": "Utilisez votre carte dans tous nos points de vente :",
"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é",
"setup_program": "Configurer le programme",
"unknown": "Inconnu"
},
"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": {
"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",
"save_changes": "Enregistrer",
"unlock": "Déverrouiller",
"no_staff_found": "Aucun membre du personnel trouvé"
},
"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_cms_page": "Slug de page CMS",
"terms_cms_page_hint": "Entrez un slug de page CMS (ex. conditions-generales) pour afficher les CGV complètes depuis le module CMS",
"terms_conditions": "Conditions Générales (secours)",
"terms_fallback_hint": "Utilisé quand aucun slug CMS n'est défini",
"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}",
"card_label": "Carte",
"confirm": "Confirmer",
"pin_authorize_text": "Entrez votre PIN personnel pour autoriser cette transaction",
"free_item": "Article gratuit",
"reward_label": "Récompense",
"search_empty_state": "Recherchez un client pour commencer"
},
"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",
"card_label": "Carte"
},
"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}",
"bonus_points": "Points bonus",
"card_number_label": "Numéro de carte",
"points": "points"
},
"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}",
"access_restricted_desc": "Seul le propriétaire peut modifier les paramètres",
"delete_program_confirm": "Supprimer",
"delete_program_desc": "Cela supprimera définitivement le programme et toutes les données associées",
"delete_program_title": "Supprimer le programme fidélité ?"
}
},
"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}"
},
"account": {
"loyalty": "Récompenses fidélité"
}
},
"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.",
"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",
"pin_create_error": "Erreur lors de la création du PIN",
"pin_update_error": "Erreur lors de la modification du PIN",
"pin_delete_error": "Erreur lors de la suppression du PIN",
"pin_unlock_error": "Erreur lors du déverrouillage du PIN"
},
"errors": {
"card_not_found": "Carte non trouvée"
}
}