This commit completes the migration to a fully module-driven architecture: ## Models Migration - Moved all domain models from models/database/ to their respective modules: - tenancy: User, Admin, Vendor, Company, Platform, VendorDomain, etc. - cms: MediaFile, VendorTheme - messaging: Email, VendorEmailSettings, VendorEmailTemplate - core: AdminMenuConfig - models/database/ now only contains Base and TimestampMixin (infrastructure) ## Schemas Migration - Moved all domain schemas from models/schema/ to their respective modules: - tenancy: company, vendor, admin, team, vendor_domain - cms: media, image, vendor_theme - messaging: email - models/schema/ now only contains base.py and auth.py (infrastructure) ## Routes Migration - Moved admin routes from app/api/v1/admin/ to modules: - menu_config.py -> core module - modules.py -> tenancy module - module_config.py -> tenancy module - app/api/v1/admin/ now only aggregates auto-discovered module routes ## Menu System - Implemented module-driven menu system with MenuDiscoveryService - Extended FrontendType enum: PLATFORM, ADMIN, VENDOR, STOREFRONT - Added MenuItemDefinition and MenuSectionDefinition dataclasses - Each module now defines its own menu items in definition.py - MenuService integrates with MenuDiscoveryService for template rendering ## Documentation - Updated docs/architecture/models-structure.md - Updated docs/architecture/menu-management.md - Updated architecture validation rules for new exceptions ## Architecture Validation - Updated MOD-019 rule to allow base.py in models/schema/ - Created core module exceptions.py and schemas/ directory - All validation errors resolved (only warnings remain) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
196 lines
5.9 KiB
JSON
196 lines
5.9 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...",
|
|
"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"
|
|
},
|
|
"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}"
|
|
}
|
|
}
|