Files
orion/static/locales/fr.json
Samir Boulahtit 0455e63a2e feat(tenancy): add merchant team CRUD with multi-store hub view
The merchant team page was read-only. Now merchant owners can invite,
edit roles, and remove team members across all their stores from a
single hub view.

Architecture: No new models — delegates to existing store_team_service.
Members are deduplicated across stores with per-store role badges.

New:
- 5 API endpoints: GET team (member-centric), GET store roles, POST
  invite (multi-store), PUT update role, DELETE remove member
- merchant-team.js Alpine component with invite/edit/remove modals
- Full CRUD template with stats cards, store filter, member table
- 7 Pydantic schemas for merchant team request/response
- 2 service methods: validate_store_ownership, get_merchant_team_members
- 25 new i18n keys across 4 tenancy locales + 1 core common key

Tests: 434 tenancy tests passing, arch-check green.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:57:45 +01:00

235 lines
7.8 KiB
JSON

{
"common": {
"save": "Enregistrer",
"cancel": "Annuler",
"delete": "Supprimer",
"edit": "Modifier",
"create": "Créer",
"update": "Mettre à jour",
"add": "Ajouter",
"remove": "Retirer",
"close": "Fermer",
"back": "Retour",
"next": "Suivant",
"previous": "Précédent",
"submit": "Soumettre",
"confirm": "Confirmer",
"yes": "Oui",
"no": "Non",
"ok": "OK",
"done": "Terminé",
"loading": "Chargement...",
"saving": "Enregistrement...",
"processing": "Traitement...",
"searching": "Recherche...",
"sending": "Envoi en cours",
"refresh": "Actualiser",
"retry": "Réessayer",
"view": "Voir",
"view_details": "Voir les détails",
"view_all": "Voir tout",
"show_more": "Voir plus",
"show_less": "Voir moins",
"search": "Rechercher",
"filter": "Filtrer",
"sort": "Trier",
"export": "Exporter",
"import": "Importer",
"download": "Télécharger",
"upload": "Téléverser",
"select": "Sélectionner",
"select_all": "Tout sélectionner",
"deselect_all": "Tout désélectionner",
"actions": "Actions",
"status": "Statut",
"date": "Date",
"time": "Heure",
"name": "Nom",
"email": "E-mail",
"phone": "Téléphone",
"address": "Adresse",
"description": "Description",
"notes": "Notes",
"total": "Total",
"amount": "Montant",
"quantity": "Quantité",
"price": "Prix",
"items": "Articles",
"id": "ID",
"type": "Type",
"category": "Catégorie",
"tags": "Tags",
"active": "Actif",
"inactive": "Inactif",
"enabled": "Activé",
"disabled": "Désactivé",
"pending": "En attente",
"completed": "Terminé",
"failed": "Échoué",
"success": "Succès",
"error": "Erreur",
"warning": "Avertissement",
"info": "Info",
"all": "Tous",
"none": "Aucun",
"other": "Autre",
"unknown": "Inconnu",
"not_available": "N/D",
"required": "Obligatoire",
"optional": "Optionnel",
"language": "Langue",
"settings": "Paramètres",
"help": "Aide",
"support": "Support",
"contact": "Contact",
"about": "À propos",
"privacy": "Confidentialité",
"terms": "Conditions",
"copyright": "Droits d'auteur"
},
"auth": {
"sign_in": "Se connecter",
"sign_out": "Se déconnecter",
"sign_up": "S'inscrire",
"login": "Connexion",
"logout": "Déconnexion",
"register": "Inscription",
"forgot_password": "Mot de passe oublié ?",
"reset_password": "Réinitialiser le mot de passe",
"change_password": "Changer le mot de passe",
"username": "Nom d'utilisateur",
"password": "Mot de passe",
"confirm_password": "Confirmer le mot de passe",
"current_password": "Mot de passe actuel",
"new_password": "Nouveau mot de passe",
"remember_me": "Se souvenir de moi",
"email_placeholder": "Entrez votre e-mail",
"username_placeholder": "Entrez votre nom d'utilisateur",
"password_placeholder": "Entrez votre mot de passe",
"login_success": "Connexion réussie",
"login_failed": "Échec de la connexion",
"logout_success": "Vous avez été déconnecté",
"invalid_credentials": "Nom d'utilisateur ou mot de passe invalide",
"session_expired": "Votre session a expiré. Veuillez vous reconnecter.",
"account_locked": "Votre compte a été verrouillé",
"account_inactive": "Votre compte est inactif",
"signing_in": "Connexion en cours...",
"sending": "Envoi en cours...",
"send_reset_link": "Envoyer le lien de réinitialisation",
"reset_password_desc": "Entrez votre adresse e-mail et nous vous enverrons un lien pour réinitialiser votre mot de passe.",
"back_to_login": "Retour à la connexion",
"back_to_platform": "Retour à la plateforme",
"no_account": "Vous n'avez pas de compte ?",
"visit_platform": "Visitez notre plateforme",
"already_have_account": "Vous avez déjà un compte ?",
"create_account": "Créer un compte",
"continue_shopping": "Continuer vos achats",
"admin_login": "Connexion Admin",
"merchant_login": "Connexion Marchand",
"store_login": "Connexion Portail Magasin",
"customer_login": "Connexion Client",
"create_account_title": "Créer un compte",
"creating_account": "Création du compte...",
"sign_in_instead": "Se connecter",
"first_name": "Prénom",
"last_name": "Nom",
"phone_number": "Numéro de téléphone",
"marketing_consent": "Je souhaite recevoir des actualités et offres spéciales",
"password_requirements": "Doit contenir au moins 8 caractères, une lettre et un chiffre",
"check_email": "Vérifiez votre e-mail",
"reset_link_sent": "Nous avons envoyé un lien de réinitialisation à votre adresse e-mail. Veuillez vérifier votre boîte de réception et cliquer sur le lien.",
"didnt_receive_email": "Vous n'avez pas reçu l'e-mail ? Vérifiez votre dossier spam ou",
"try_again": "réessayez",
"remember_password": "Vous vous souvenez de votre mot de passe ?"
},
"nav": {
"dashboard": "Tableau de bord",
"products": "Produits",
"orders": "Commandes",
"customers": "Clients",
"inventory": "Inventaire",
"analytics": "Analyses",
"reports": "Rapports",
"settings": "Paramètres",
"profile": "Profil",
"team": "Équipe",
"marketplace": "Marketplace",
"integrations": "Intégrations",
"notifications": "Notifications",
"help": "Aide",
"home": "Accueil",
"shop": "Boutique",
"cart": "Panier",
"checkout": "Paiement",
"account": "Compte",
"wishlist": "Liste de souhaits"
},
"errors": {
"generic": "Une erreur s'est produite",
"not_found": "Non trouvé",
"unauthorized": "Non autorisé",
"forbidden": "Interdit",
"bad_request": "Requête invalide",
"server_error": "Erreur serveur",
"network_error": "Erreur réseau",
"timeout": "Délai d'attente dépassé",
"validation_error": "Erreur de validation",
"field_required": "Ce champ est obligatoire",
"invalid_email": "Adresse e-mail invalide",
"invalid_phone": "Numéro de téléphone invalide",
"password_mismatch": "Les mots de passe ne correspondent pas",
"password_too_short": "Le mot de passe est trop court",
"try_again": "Veuillez réessayer",
"contact_support": "Veuillez contacter le support si le problème persiste"
},
"confirmations": {
"delete_title": "Confirmer la suppression",
"delete_message": "Êtes-vous sûr de vouloir supprimer cet élément ?",
"delete_warning": "Cette action est irréversible.",
"cancel_title": "Confirmer l'annulation",
"cancel_message": "Êtes-vous sûr de vouloir annuler ?",
"unsaved_changes": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir quitter ?",
"logout_title": "Confirmer la déconnexion",
"logout_message": "Êtes-vous sûr de vouloir vous déconnecter ?"
},
"footer": {
"all_rights_reserved": "Tous droits réservés",
"powered_by": "Propulsé par"
},
"time": {
"now": "Maintenant",
"today": "Aujourd'hui",
"yesterday": "Hier",
"tomorrow": "Demain",
"this_week": "Cette semaine",
"last_week": "La semaine dernière",
"this_month": "Ce mois-ci",
"last_month": "Le mois dernier",
"this_year": "Cette année",
"ago": "il y a",
"seconds": "secondes",
"minutes": "minutes",
"hours": "heures",
"days": "jours",
"weeks": "semaines",
"months": "mois",
"years": "années"
},
"formats": {
"date": "DD/MM/YYYY",
"time": "HH:mm",
"datetime": "DD/MM/YYYY HH:mm",
"currency": "{amount} {symbol}"
},
"clipboard": {
"copied": "Copié dans le presse-papiers",
"failed": "Échec de la copie"
},
"onboarding": {
"banner": {
"title": "Premiers pas",
"dismiss": "Masquer"
}
}
}