{
  "app.name": "MageStock",
  "lang.label": "Langue",
  "theme.toggle": "Changer de thème",
  "btn.logout": "Déconnexion",
  "btn.login": "Se connecter",
  "btn.save": "Enregistrer",
  "btn.cancel": "Annuler",
  "btn.close": "Fermer",
  "btn.delete": "Supprimer",
  "btn.add": "Ajouter",
  "btn.edit": "Modifier",
  "btn.export": "Exporter",
  "btn.export_pdf": "Exporter PDF",
  "btn.print": "Imprimer",
  "btn.search": "Rechercher",
  "search.placeholder": "Rechercher…",
  "login.title": "Connexion",
  "login.username": "Nom d’utilisateur",
  "login.password": "Mot de passe",
  "login.error": "Identifiants incorrects.",
  "nav.dashboard": "Accueil",
  "nav.products": "Produits",
  "nav.warehouses": "Magasins",
  "nav.warehouse_manager": "Gestion des magasins",
  "nav.movements": "Mouvements",
  "nav.inventory": "Inventaires",
  "nav.scanner": "Scanner",
  "nav.barcodes": "Codes-barres",
  "nav.reports": "Rapports",
  "nav.settings": "Paramètres",
  "nav.users": "Utilisateurs",
  "nav.alerts": "Alertes",
  "nav.suppliers": "Fournisseurs",
  "nav.brands": "Marques",
  "nav.orders": "Commandes",
  "auto.21cb337616": "Tous magasins",
  "auto.318262fcf6": "Nouvelle alerte",
  "auto.b0b7cddbe9": "Alertes critiques",
  "auto.e238b76e11": "Alertes actives",
  "auto.b1a735917d": "Produits OK",
  "auto.38cfc9c7f5": "Status actuel",
  "auto.a1230fab7a": "Règles d'alerte",
  "auto.e30e2cb9aa": "Produit",
  "auto.055c3b9395": "Magasin",
  "auto.a1fa277792": "Type",
  "auto.3e8e07eb39": "Seuil",
  "auto.b7c0fdcea6": "Qté actuelle",
  "auto.87a831bc99": "Statut",
  "auto.06df33001c": "Actions",
  "auto.194eef0e3d": "Générateur d’étiquettes",
  "auto.c313d6dc96": "Sélectionnez des produits, choisissez un style + un format, prévisualisez et imprimez.",
  "auto.7ce1f3fdf2": "Vider",
  "auto.94c48b9ef5": "Exporter PDF",
  "auto.943021b255": "Imprimer",
  "auto.e06ff32467": "🎨 Style",
  "auto.2f7174f197": "📏 Format",
  "auto.a777aa1532": "🖼️ Options",
  "auto.2186767964": "🖼️ Image + Code-barres",
  "auto.99e780809b": "Visuel produit + code-barres compact",
  "auto.d46181e2a6": "📊 Code-barres seul",
  "auto.9ad7781b20": "Impression rapide et lisible",
  "auto.241ee90c1d": "🏷️ QR Code",
  "auto.1e813ad6bd": "Encodage texte/URL ou payload produit",
  "auto.dd26d4798f": "📋 Étiquette complète",
  "auto.da652b69a5": "Image + infos + code-barres",
  "auto.966f80ae51": "Format de code-barres",
  "auto.db053df979": "CODE128",
  "auto.52eb5928a3": "EAN13",
  "auto.ed7ef6f38d": "Code personnalisé (optionnel)",
  "auto.a8fe1a3b2f": "📄 A4 — planche 24",
  "auto.3ebf618916": "3 colonnes × 8 lignes",
  "auto.dbde0d64d0": "🏷️ Avery L7160",
  "auto.da16c67df4": "63,5×38,1mm (3×7)",
  "auto.6507e11634": "📦 70×37mm",
  "auto.ee40c8a5ad": "3×8 (approx.)",
  "auto.f99b1a642e": "📦 105×37mm",
  "auto.8ace2ca182": "2 colonnes (approx.)",
  "auto.d3cbaa3e9e": "🎯 Personnalisé",
  "auto.368b7fb41b": "Largeur/hauteur + grille",
  "auto.505279d1db": "Largeur (mm)",
  "auto.5cd5426490": "Hauteur (mm)",
  "auto.be920cea70": "Colonnes",
  "auto.1945ed4570": "Lignes",
  "auto.af847154be": "Contenu",
  "auto.ca0dbad92a": "Code",
  "auto.be53a0541a": "Image",
  "auto.251040e9a0": "QR — texte personnalisé (optionnel)",
  "auto.a65da323a9": "📷 Scanner un QR",
  "auto.9100e163bb": "Prévisualisation",
  "auto.00882b098c": "Aucune sélection",
  "auto.7159991d00": "📦 Sélection produits",
  "auto.bbbe4b9ce4": "Toutes catégories",
  "auto.0e520a1ffa": "Impression",
  "auto.7d206237f9": "Fermer",
  "auto.aa38fb6cd7": "Lancer l'impression",
  "auto.168a75f6c4": "window.SM_PAGE = 'barcodes';",
  "auto.2bef3061dc": "0 marque(s)",
  "auto.9aa58eb9b1": "Nouvelle marque",
  "auto.a3e2b2eac8": "Marque",
  "auto.d3b02c902c": "Fournisseurs liés",
  "auto.88c61ac25a": "Produits",
  "auto.793b746788": "Créée le",
  "auto.d045fd5356": "Valorisation par magasin",
  "auto.2b335b2844": "Activité récente",
  "auto.b1beaad72e": "Voir tout",
  "auto.b24e631664": "Gérer",
  "auto.d167478c48": "Aperçu du stock",
  "auto.91dbfff7a0": "Coût unit.",
  "auto.debedfb449": "Valeur",
  "auto.f86f444e68": "Démarrer un inventaire",
  "auto.5eb62fda83": "Sélectionner un magasin",
  "auto.8fa534403b": "Catégorie (optionnel)",
  "auto.5bb4f30971": "Démarrer",
  "auto.35723f9629": "Historique",
  "auto.54628887e8": "Total produits",
  "auto.86bdb2b73d": "Validés",
  "auto.ffacbac836": "Écarts",
  "auto.439149be8b": "En attente",
  "auto.948505fb20": "Scanner",
  "auto.d12c3b0dcf": "Annuler",
  "auto.e1c50082af": "Valider l'inventaire",
  "auto.18d925e4d5": "Ajouter",
  "auto.754a3f71bd": "Stock théorique",
  "auto.cdd262917a": "Compté",
  "auto.0dc60556d9": "Écart",
  "auto.5104751360": "\" class=\"sidebar-link",
  "auto.354e62ea5b": "\" title=\"",
  "auto.d2766d9b56": "\" data-label=\"",
  "auto.19dd00a2a6": "\" class=\"header-btn header-alerts\">",
  "auto.d0976037d2": "Développé par",
  "auto.166ad53556": "KREMER Régis",
  "auto.1e8d587771": "&copy;",
  "auto.f83511a305": "MageStock",
  "auto.b61541208d": "Menu",
  "auto.3e75196365": "\" class=\"slide-item",
  "auto.59e7b5977f": "Déconnecter",
  "auto.99fb48ddce": "Titre",
  "auto.121dc34a0d": "Codes à barres",
  "auto.2cddd28fee": "window.SM_PAGE = '",
  "auto.d3794314a9": "'; window.SM_ROLE = '",
  "auto.3978edca6e": "'; window.USER_ROLE = '",
  "auto.ecdfac8b01": "'; window.CSRF_TOKEN = '",
  "auto.5cd9831e35": "'; document.addEventListener('DOMContentLoaded', ()=> App.init());",
  "auto.47b404afa4": "Tous types",
  "auto.e49ab34478": "Ajout",
  "auto.772ae0b683": "Sortie",
  "auto.b0be74ed47": "Transfert",
  "auto.66c1fb3547": "Inventaire",
  "auto.d0f84e00bb": "Entrée",
  "auto.4cfc9c2fee": "Filtres +",
  "auto.3f181e87bd": "Opérateur",
  "auto.532a44859a": "Chantier / Site",
  "auto.fed0b874ff": "BL / Référence",
  "auto.73d163bfa7": "Fournisseur",
  "auto.612eae5e7f": "0 mouvement(s)",
  "auto.60b1cf36a1": "Ajout stock",
  "auto.6788c41f73": "Sortie stock",
  "auto.41c2e8aa4b": "Date / Heure",
  "auto.27ce7f8b56": "Stock",
  "auto.c18c12d75b": "Raison / Chantier",
  "auto.3b0649c726": "Note",
  "auto.0945359809": "Document",
  "auto.153d913716": "Pièce",
  "auto.511924d443": "Page 1 / 1",
  "auto.292d37187f": "Précédent",
  "auto.257a7b4c17": "Suivant",
  "auto.42895bd48e": "20 / page",
  "auto.1b6aabe1ed": "50 / page",
  "auto.74a0253db2": "100 / page",
  "auto.d60f3bbc79": "Toutes marques",
  "auto.f813c866dd": "0 produit(s)",
  "auto.aee5874ea5": "Entrée de stock",
  "auto.69cc8fa3c3": "Nouveau produit",
  "auto.cac8eee4d8": "📂 Import CSV",
  "auto.8c6b7f2067": "Catégorie",
  "auto.bc13813162": "Prix",
  "auto.3c5f34af12": "12 / page",
  "auto.551635d5bd": "24 / page",
  "auto.154a663289": "48 / page",
  "auto.554522921a": "📦 Stock",
  "auto.4ecf2a7c1a": "📊 Valorisation",
  "auto.1dc86dc039": "📈 Mouvements",
  "auto.7a98add9ae": "📉 Alertes",
  "auto.c53a63874f": "🏷️ Marques",
  "auto.1ce60d078c": "📊 Écarts inventaire",
  "auto.c6c34fda97": "💰 Historique prix",
  "auto.fec8c371a7": "📦 Rapport de Stock",
  "auto.50304dcf67": "🖨️ Imprimer",
  "auto.360f889205": "📥 Exporter CSV",
  "auto.feec0f0326": "🏢 Tous les magasins",
  "auto.089490558f": "📦 Toutes les catégories",
  "auto.9cbdde64e6": "🏷️ Toutes les marques",
  "auto.80343600a3": "⚠️ Tous les seuils",
  "auto.d3b1d82825": "Stock bas uniquement",
  "auto.173562e26f": "Stock normal",
  "auto.7a1206e827": "🔄 Réinitialiser",
  "auto.1f78ab905c": "Unités totales",
  "auto.6d2a66c81f": "Valeur totale",
  "auto.e1ded249ca": "Stock bas",
  "auto.894a31e48b": "Stock actuel",
  "auto.db19dd4050": "Seuil mini",
  "auto.7660ba0d20": "Coût unitaire",
  "auto.796c5a9d55": "📊 Valorisation du Stock",
  "auto.5e2c9b7c0b": "Valeur totale stock",
  "auto.95726adbb0": "Magasins",
  "auto.3059d560a9": "Unités",
  "auto.9b1acffafa": "Valeur moyenne/produit",
  "auto.2083a88a18": "📈 Rapport des Mouvements",
  "auto.42da2a07fe": "Tous les types",
  "auto.ff0f4810b8": "Entrées",
  "auto.c9a2bb2291": "Ajouts",
  "auto.4fc39f3ee2": "Sorties",
  "auto.7ebbd5c301": "Transferts",
  "auto.9d02934dab": "Tous les magasins",
  "auto.44749712db": "Date",
  "auto.1b27b371c9": "Quantité",
  "auto.f628ae7eac": "Utilisateur",
  "auto.a530dc1ad2": "📉 Alertes Stock Bas",
  "auto.d0e1705373": "⚠️ Priorité",
  "auto.3e81dfbadd": "Déficit",
  "auto.004bf6c9a4": "Action",
  "auto.82b55b0cfc": "🏷️ Rapport par Marques",
  "auto.e3d3e6972a": "Stock total",
  "auto.20a50f9498": "Fournisseurs",
  "auto.7a05a317f8": "📊 Rapport d'écarts inventaire",
  "auto.a494117a99": "Avec écart",
  "auto.15bd1cc7e9": "Valeur écarts",
  "auto.70a0ad141f": "Théorique",
  "auto.5b95306754": "Écart qté",
  "auto.7173ba9784": "Écart valeur",
  "auto.ba1154f241": "Date inventaire",
  "auto.65191f650c": "Cliquez sur l'onglet pour charger",
  "auto.1097e12af1": "💰 Historique des prix d'achat",
  "auto.1cde1caea4": "Tous les produits",
  "auto.e02d1a9572": "Prix unitaire",
  "auto.79cf6cf5a0": "Prix base",
  "auto.c92101a214": "Sélectionnez un produit",
  "auto.274f5cdec9": "window.SM_PAGE = 'reports';",
  "auto.959b190c85": "Caméra inactive",
  "auto.468f4252a6": "Activer caméra",
  "auto.2d9361e513": "Arrêter",
  "auto.9e3272ea56": "QR Code",
  "auto.110420912f": "Produit trouvé",
  "auto.6ca9a16a57": "Voir le produit",
  "auto.3ed833a118": "+ Stock",
  "auto.6cb59842f7": "- Stock",
  "auto.de0b6a7cce": "Saisie manuelle",
  "auto.3a8a7a8a2d": "Rechercher",
  "auto.a31799d611": "Scans récents",
  "auto.1c3c733a59": "Aucun scan récent",
  "auto.69fed99374": "Les codes scannés apparaîtront ici",
  "auto.4aeb99590e": "Paramètres généraux",
  "auto.c70d8f1160": "Nom de l'entreprise",
  "auto.8e2a02bfc3": "Préfixe SKU",
  "auto.f58eb11abe": "Le prochain SKU sera basé sur ce préfixe",
  "auto.aed88202e2": "Enregistrer",
  "auto.aa599a041b": "Sauvegarde & Restauration",
  "auto.267166e23f": "Exporter sauvegarde",
  "auto.306d178741": "Importer sauvegarde",
  "auto.5c21b459de": "Notifications Push",
  "auto.2ec16d5047": "Activer",
  "auto.3095c3e4f1": "Tester",
  "auto.0944d1cb93": "Types de notifications :",
  "auto.2f1ebdf889": "📤 Sorties de stock",
  "auto.cf1d483131": "📥 Entrées de stock",
  "auto.61bdca438f": "🔄 Transferts entre magasins",
  "auto.ba836f3d98": "⚠️ Alertes de stock (minimum/maximum atteint)",
  "auto.614ffce03f": "📋 Inventaires terminés",
  "auto.104fa50318": "Zone de danger",
  "auto.4f53516a3a": "Ces actions sont irréversibles. Soyez certain de ce que vous faites.",
  "auto.d9dcbeffaf": "Supprimer tous les produits",
  "auto.2e6def894b": "Supprimer tous les mouvements",
  "auto.aba3cbc459": "TOUT SUPPRIMER",
  "auto.b5fd93d382": "0 fournisseur(s)",
  "auto.ff5e5012cd": "Nouveau fournisseur",
  "auto.bbaff12800": "Contact",
  "auto.ce8ae9da5b": "Email",
  "auto.301dc874dc": "Téléphone",
  "auto.fc29e0aa3d": "Marques liées",
  "auto.1297ef5077": "Délai livraison",
  "auto.229eb04083": "Conditions",
  "auto.4eeea5804e": "0 utilisateur(s)",
  "auto.c898411faf": "Nouvel utilisateur",
  "auto.c9437f7d5f": "Identifiant",
  "auto.19772a94ff": "Rôle",
  "auto.212078f396": "Créé le",
  "auto.f7f9943ba3": "Gestion Magasins & Catégories",
  "auto.e209935d37": "Nouveau magasin",
  "auto.2a53fbe526": "window.SM_PAGE = 'warehouse-manager';",
  "auto.e5915f5f8b": "0 magasin(s)",
  "auto.50d46c2f99": "Adresse",
  "auto.83f62264e3": "Catégories",
  "btn.duplicate": "Dupliquer",
  "btn.duplicate.tooltip": "Créer une copie de ce produit",
  "sizes.type.none": "Aucun (produit standard)",
  "sizes.type.clothing": "Vêtement (XS → 4XL)",
  "sizes.type.pants": "Pantalon (taille FR 34 → 54)",
  "sizes.type.shoes": "Chaussures (EU / UK / US)",
  "sizes.type.gloves": "Gants (6 → 12)",
  "sizes.type.headwear": "Coiffure / Casque (S → XL)",
  "sizes.type.eyewear": "Lunettes / Accessoire (S → L)",
  "sizes.type.baby": "Bébé / Enfant (0M → 16A)",
  "sizes.clothing": "XS,S,M,L,XL,XXL,3XL,4XL",
  "sizes.pants.eu": "34,36,38,40,42,44,46,48,50,52,54",
  "sizes.pants.uk": "24,26,28,30,32,34,36,38,40,42",
  "sizes.pants.us": "24,26,28,30,32,34,36,38,40,42",
  "sizes.shoes.eu": "36,37,38,39,40,41,42,43,44,45,46,47,48",
  "sizes.shoes.uk": "3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11,11.5,12,13",
  "sizes.shoes.us": "4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11,11.5,12,12.5,13,14",
  "sizes.gloves": "6,7,8,9,10,11,12",
  "sizes.headwear": "S,M,L,XL,Unique",
  "sizes.eyewear": "Unique,S,M,L",
  "sizes.baby": "0M,3M,6M,9M,12M,18M,24M,2A,3A,4A,5A,6A,8A,10A,12A,14A,16A",
  "sizes.norm.eu": "EU (Europe)",
  "sizes.norm.uk": "UK (Royaume-Uni)",
  "sizes.norm.us": "US (États-Unis)",
  "sizes.label.sizeType": "Tailles & Déclinaisons",
  "sizes.label.sizeNorm": "Norme de taille",
  "sizes.label.selectSizes": "Sélectionnez les tailles à créer",
  "sizes.label.generateVariants": "Générer les déclinaisons",
  "sizes.label.variantsWillCreate": "déclinaison(s) seront créées",
  "sizes.label.parentProduct": "Produit parent",
  "sizes.label.size": "Taille",
  "sizes.label.allSizes": "Toutes les tailles",
  "settings.country.label": "Pays de l’entreprise",
  "settings.country.hint": "Le pays sert de référence administrative. Il ne change jamais les montants enregistrés.",
  "settings.locale.label": "Format régional",
  "settings.locale.hint": "En mode automatique, nombres et dates suivent la langue de chaque utilisateur.",
  "settings.locale.auto": "Automatique selon la langue",
  "settings.currency.label": "Devise comptable",
  "settings.currency.hint": "Cette devise s’applique aux prix, commandes, CUMP et valorisations.",
  "settings.currency.warning": "Changer la devise modifie uniquement l’unité affichée. MageStock ne convertit pas les valeurs financières déjà enregistrées.",
  "settings.preview.label": "Aperçu du format",
  "nav.kits": "Kits",
  "nav.reservations": "Réservations",
  "nav.locations": "Emplacements",
  "nav.plans": "Plans",
  "nav.analytics": "Pilotage",
  "nav.help": "Aides",
  "nav.more": "Plus",
  "nav.logout": "Déconnexion",
  "nav.section.operations": "Exploitation",
  "nav.section.organization": "Organisation",
  "nav.section.monitoring": "Suivi & pilotage",
  "nav.section.administration": "Administration",
  "page.dashboard": "Tableau de bord",
  "page.products": "Produits",
  "page.warehouses": "Magasins",
  "page.movements": "Mouvements",
  "page.inventory": "Inventaires",
  "page.scanner": "Scanner",
  "page.barcodes": "Codes-barres",
  "page.reports": "Rapports",
  "page.settings": "Paramètres",
  "page.users": "Utilisateurs",
  "page.alerts": "Alertes",
  "page.suppliers": "Fournisseurs",
  "page.brands": "Marques",
  "page.orders": "Bons de commande",
  "page.locations": "Emplacements",
  "page.lots": "Lots",
  "page.kits": "Kits",
  "page.reservations": "Réservations",
  "page.analytics": "Pilotage",
  "page.warehouse_manager": "Gestion des magasins",
  "page.plans": "Plans d’emplacements",
  "page.plans_edit": "Édition d’un plan",
  "page.help": "Aides",
  "shell.menu.toggle": "Ouvrir/Fermer le menu",
  "shell.menu.open": "Ouvrir le menu",
  "shell.menu.close": "Fermer le menu",
  "shell.language": "Langue / Language",
  "shell.theme.change": "Changer de thème",
  "shell.theme.light": "Passer en thème clair",
  "shell.theme.dark": "Passer en thème sombre",
  "shell.role.admin": "Administrateur",
  "shell.role.user": "Utilisateur",
  "shell.logout": "Déconnexion",
  "shell.footer.developed_by": "Développé par",
  "shell.footer.license": "Licence d’utilisation",
  "shell.modal.title": "Titre",
  "shell.pwa.title": "Installer MageStock",
  "shell.pwa.text": "Ajoutez MageStock comme application sur cet appareil. Le message s’adapte au navigateur.",
  "shell.pwa.install": "Installer",
  "shell.pwa.dismiss": "Masquer",
  "shell.print.barcodes": "Codes-barres",
  "shell.print.print": "Imprimer",
  "shell.print.close": "Fermer",
  "shell.alerts": "Alertes",
  "login.page_title": "Connexion",
  "login.meta_description": "Connexion MageStock — gestion de stock multi-magasins.",
  "login.tagline": "Gestion de stock • MageStock",
  "login.submit": "Se connecter",
  "login.language": "Langue",
  "login.theme.light": "Passer en thème clair",
  "login.theme.dark": "Passer en thème sombre",
  "login.logo_alt": "{company} — logo",
  "login.footer": "© {year} {company} — par KREMER Régis",
  "login.error.rate_limit": "Trop de tentatives de connexion. Veuillez patienter 5 minutes.",
  "login.error.users_missing": "Le fichier data/users.json est introuvable sur ce serveur.",
  "login.error.users_unreadable": "Le fichier data/users.json existe mais PHP ne peut pas le lire. Vérifiez les droits du dossier data/ et du fichier users.json.",
  "login.error.users_empty": "Le fichier data/users.json est vide ou illisible.",
  "login.error.users_invalid_json": "Le fichier data/users.json n’est pas un JSON valide : {error}",
  "login.error.invalid_credentials": "Identifiants incorrects ou compte désactivé.",
  "dashboard.greeting.morning": "Bonjour",
  "dashboard.greeting.afternoon": "Bon après-midi",
  "dashboard.greeting.evening": "Bonsoir",
  "dashboard.shortcut.scanner": "Scanner",
  "dashboard.shortcut.movement": "Mouvement",
  "dashboard.shortcut.inventory": "Inventaire",
  "dashboard.shortcut.orders": "Commandes",
  "dashboard.chart.movements_14_days": "Mouvements (14 jours)",
  "dashboard.chart.valuation_by_warehouse": "Valorisation par magasin",
  "dashboard.section.recent_activity": "Activité récente",
  "dashboard.section.active_alerts": "Alertes actives",
  "dashboard.action.view_all": "Voir tout →",
  "dashboard.action.manage": "Gérer →",
  "dashboard.kpi.products": "Produits",
  "dashboard.kpi.units_in_stock": "Unités en stock",
  "dashboard.kpi.stock_value": "Valeur du stock",
  "dashboard.kpi.active_alerts": "Alertes actives",
  "dashboard.kpi.pending_orders": "Commandes en cours",
  "dashboard.kpi.warehouses": "Magasins",
  "dashboard.chart.movements": "Mouvements",
  "dashboard.chart.value_currency": "Valeur ({currency})",
  "dashboard.warehouse_fallback": "Magasin {id}",
  "dashboard.activity.none": "Aucune activité",
  "dashboard.activity.title": "{name} — {type} ({quantity})",
  "dashboard.unit.short": "{value} u",
  "dashboard.movement.add": "Ajout",
  "dashboard.movement.remove": "Sortie",
  "dashboard.movement.transfer": "Transfert",
  "dashboard.movement.entry": "Entrée",
  "dashboard.movement.inventory": "Inventaire",
  "dashboard.pagination.previous": "◀ Précédent",
  "dashboard.pagination.page": "Page {current} / {total}",
  "dashboard.pagination.next": "Suivant ▶",
  "dashboard.alerts.all_ok": "Tout est en ordre",
  "dashboard.alerts.badge_min": "↓ MIN",
  "dashboard.alerts.badge_max": "↑ MAX",
  "dashboard.alerts.stock_detail": "Stock : <strong>{qty}</strong> / seuil <strong>{threshold}</strong>",
  "date.weekday.0": "Dimanche",
  "date.weekday.1": "Lundi",
  "date.weekday.2": "Mardi",
  "date.weekday.3": "Mercredi",
  "date.weekday.4": "Jeudi",
  "date.weekday.5": "Vendredi",
  "date.weekday.6": "Samedi",
  "date.month.1": "Janvier",
  "date.month.2": "Février",
  "date.month.3": "Mars",
  "date.month.4": "Avril",
  "date.month.5": "Mai",
  "date.month.6": "Juin",
  "date.month.7": "Juillet",
  "date.month.8": "Août",
  "date.month.9": "Septembre",
  "date.month.10": "Octobre",
  "date.month.11": "Novembre",
  "date.month.12": "Décembre",
  "date.long": "{weekday} {day} {month} {year}",
  "shell.meta_description": "MageStock — gestion de stock multi-magasins, scanner, mouvements, inventaires et alertes.",
  "shell.scroll_top": "Retour en haut",
  "shell.role.storekeeper": "Magasinier",
  "warehouse.manager.heading": "Gestion des magasins",
  "warehouse.manager.intro": "Créez les magasins, renseignez leurs informations et organisez leurs catégories.",
  "warehouse.manager.new": "Nouveau magasin",
  "warehouse.manager.load_error": "Erreur de chargement des magasins.",
  "warehouse.manager.empty_title": "Aucun magasin",
  "warehouse.manager.empty_text": "Créez le premier magasin pour organiser les stocks.",
  "warehouse.manager.not_provided": "Non renseigné",
  "warehouse.manager.edit": "Modifier le magasin",
  "warehouse.manager.add_category": "Ajouter",
  "warehouse.manager.remove_category": "Retirer {category}",
  "warehouse.manager.address": "Adresse",
  "warehouse.manager.contact": "Contact",
  "warehouse.manager.capacity": "Capacité maximale",
  "warehouse.manager.indicators": "Indicateurs du magasin",
  "warehouse.manager.products": "Produits",
  "warehouse.manager.categories": "Catégories",
  "warehouse.manager.no_categories": "Aucune catégorie",
  "warehouse.manager.cancel": "Annuler",
  "warehouse.manager.confirm": "Confirmer",
  "warehouse.manager.existing_categories": "{count} catégorie(s) existe(nt) déjà dans ce magasin.",
  "warehouse.manager.no_categories_defined": "Aucune catégorie n’est encore définie.",
  "warehouse.manager.add_category_title": "Ajouter une catégorie — {warehouse}",
  "warehouse.manager.category_name": "Nom de la catégorie",
  "warehouse.manager.category_placeholder": "Ex. Signalisation verticale",
  "warehouse.manager.add": "Ajouter",
  "warehouse.manager.category_required": "Nom de catégorie obligatoire.",
  "warehouse.manager.category_exists": "Cette catégorie existe déjà dans ce magasin.",
  "warehouse.manager.category_added": "Catégorie ajoutée.",
  "warehouse.manager.category_add_error": "Erreur lors de l’ajout.",
  "warehouse.manager.remove_category_title": "Retirer la catégorie",
  "warehouse.manager.remove_category_question": "Retirer « {category} » du magasin « {warehouse} » ? Les produits conserveront leur libellé actuel.",
  "warehouse.manager.remove": "Retirer",
  "warehouse.manager.category_removed": "Catégorie retirée.",
  "warehouse.manager.category_remove_error": "Erreur lors du retrait.",
  "warehouse.manager.edit_title": "Modifier le magasin",
  "warehouse.manager.new_title": "Nouveau magasin",
  "warehouse.manager.name": "Nom",
  "warehouse.manager.name_placeholder": "Ex. Atelier principal",
  "warehouse.manager.address_placeholder": "Adresse complète",
  "warehouse.manager.optional": "Optionnel",
  "warehouse.manager.contact_placeholder": "Responsable du magasin",
  "warehouse.manager.notes": "Notes",
  "warehouse.manager.save": "Enregistrer",
  "warehouse.manager.create": "Créer",
  "warehouse.manager.delete": "Supprimer",
  "warehouse.manager.name_required": "Nom obligatoire.",
  "warehouse.manager.updated": "Magasin mis à jour.",
  "warehouse.manager.created": "Magasin créé.",
  "warehouse.manager.save_error": "Erreur lors de l’enregistrement.",
  "warehouse.manager.dep_products": "Produits",
  "warehouse.manager.dep_stock": "Lignes de stock",
  "warehouse.manager.dep_movements": "Mouvements",
  "warehouse.manager.dep_inventories": "Inventaires",
  "warehouse.manager.dep_orders": "Commandes",
  "warehouse.manager.dep_locations": "Emplacements",
  "warehouse.manager.dep_plans": "Plans",
  "warehouse.manager.dep_alerts": "Alertes",
  "warehouse.manager.dep_reservations": "Réservations",
  "warehouse.manager.dep_users": "Utilisateurs",
  "warehouse.manager.dep_ldap": "Mappings LDAP",
  "warehouse.manager.delete_blocked_title": "Suppression impossible",
  "warehouse.manager.delete_blocked_text": "Le magasin « {warehouse} » est encore utilisé. Réaffectez les éléments ci-dessous avant de le supprimer.",
  "warehouse.manager.close": "Fermer",
  "warehouse.manager.delete_products_notice": "{count} produit(s) sont actuellement rattachés à ce magasin.",
  "warehouse.manager.delete_title": "Supprimer le magasin",
  "warehouse.manager.delete_question": "Supprimer définitivement « {warehouse} » ?",
  "warehouse.manager.deleted": "Magasin supprimé.",
  "warehouse.manager.delete_error": "Erreur lors de la suppression.",
  "update.analysis.baseline": "Baseline migrations",
  "update.analysis.blocker": "Blocage",
  "update.analysis.corrections": "Corrections nécessaires avant installation",
  "update.analysis.files": "Fichiers ciblés",
  "update.analysis.free_space": "Espace disponible",
  "update.analysis.impossible": "Opération impossible.",
  "update.analysis.install_blocked": "Installation bloquée",
  "update.analysis.installed": "Version installée",
  "update.analysis.legacy": "historique",
  "update.analysis.migrations": "Migrations déclarées",
  "update.analysis.more_files": "autre(s) fichier(s)",
  "update.analysis.permissions": "Permissions détectées : {mode}",
  "update.analysis.range": "{minimum} à {maximum}",
  "update.analysis.ready_text": "Signature, plage source, fichiers et permissions sont valides. L’installation reste soumise à votre confirmation.",
  "update.analysis.required_space": "Espace estimé",
  "update.analysis.schema": "Schéma",
  "update.analysis.server_ready": "Serveur prêt",
  "update.analysis.signature": "Signature",
  "update.analysis.sources": "Versions sources admises",
  "update.analysis.target": "Version cible",
  "update.analysis.type": "Type",
  "update.analysis.unknown": "Non déterminé",
  "update.analysis.verified_package": "Paquet officiel vérifié",
  "update.code_version": "Version du code",
  "update.installed_version": "Version installée",
  "update.kicker": "Administration système",
  "update.title": "Mises à jour MageStock",
  "update.subtitle": "Recherchez une version officielle, téléchargez son paquet signé, puis confirmez séparément son installation.",
  "update.loading": "Chargement…",
  "update.working": "Traitement…",
  "update.confirm.finalize_manual": "Finaliser les fichiers déposés manuellement ?",
  "update.confirm.install": "Sauvegarder puis installer cette mise à jour ?",
  "update.confirm.rollback": "Restaurer le point précédent ?",
  "update.discovery.available_badge": "Nouvelle version disponible",
  "update.discovery.checked": "Dernier contrôle",
  "update.discovery.checking": "Vérification du catalogue officiel, de la signature et des versions compatibles…",
  "update.discovery.compatible_sources": "Sources compatibles",
  "update.discovery.current": "Aucune version plus récente n’est publiée sur le canal stable.",
  "update.discovery.current_badge": "Version actuelle",
  "update.discovery.description": "MageStock consulte uniquement le domaine officiel en HTTPS, vérifie le manifeste Ed25519 et ne transmet aucune donnée métier.",
  "update.discovery.disk_blocked": "Espace disque insuffisant pour télécharger et préparer ce paquet.",
  "update.discovery.download": "Télécharger et analyser",
  "update.discovery.download_blocked": "Paquet officiel vérifié, mais le précontrôle du serveur bloque son installation.",
  "update.discovery.download_ready": "Paquet officiel téléchargé, vérifié et prêt à être installé après confirmation.",
  "update.discovery.downloading": "Téléchargement contrôlé, vérification SHA-256 et analyse de la signature interne…",
  "update.discovery.found": "Une mise à jour officielle compatible est disponible.",
  "update.discovery.kicker": "Catalogue officiel",
  "update.discovery.mandatory": "Importante",
  "update.discovery.never_checked": "Pas encore vérifié",
  "update.discovery.none": "MageStock utilise déjà la dernière version publiée.",
  "update.discovery.package": "Paquet sélectionné",
  "update.discovery.privacy": "Aucun utilisateur, produit, stock, magasin, réglage LDAP, secret ou identifiant d’installation n’est envoyé.",
  "update.discovery.prompt": "Lancez une recherche pour vérifier le canal stable officiel.",
  "update.discovery.published": "Publication",
  "update.discovery.release_notes": "Voir les changements",
  "update.discovery.search": "Rechercher les mises à jour",
  "update.discovery.signature": "Confiance",
  "update.discovery.size": "Taille",
  "update.discovery.title": "Rechercher une mise à jour sur MageKorp Hub",
  "update.discovery.unavailable": "Le catalogue officiel ne peut pas être joint. L’import manuel reste disponible.",
  "update.discovery.unavailable_badge": "Service indisponible",
  "update.discovery.verified": "Manifeste authentifié, origine autorisée et paquet compatible avec cette installation.",
  "update.discovery.version": "MageStock {version}",
  "update.history.empty": "Aucune mise à jour enregistrée.",
  "update.history.title": "Historique",
  "update.install.running": "Dernier précontrôle puis mise à jour en cours.",
  "update.install.success": "Mise à jour réussie. Rechargement…",
  "update.integrity.failed": "Des contrôles ont échoué.",
  "update.integrity.ok": "Intégrité validée.",
  "update.manual.analyze": "Analyser le paquet",
  "update.manual.blocked": "Paquet valide, mais installation bloquée par les permissions listées.",
  "update.manual.checking": "Signature, compatibilité de version, intégrité et permissions en cours de contrôle…",
  "update.manual.description": "Conservez cette méthode lorsque le serveur n’a pas d’accès Internet sortant. Le ZIP subit exactement les mêmes contrôles.",
  "update.manual.limit": "128 Mo maximum",
  "update.manual.ready": "Paquet validé et serveur prêt.",
  "update.manual.select": "Sélectionner un ZIP officiel",
  "update.manual.title": "Importer manuellement une mise à jour",
  "update.notice.blocked": "Le paquet est authentique, mais le serveur ne peut pas encore remplacer tous les fichiers.",
  "update.notice.idle": "Le système est prêt. La recherche distante ne déclenche jamais l’installation automatiquement.",
  "update.notice.interrupted": "Une mise à jour interrompue nécessite une action administrateur.",
  "update.notice.manual": "De nouveaux fichiers ont été détectés. Finalisez la mise à jour avant de reprendre l’activité.",
  "update.notice.orphan": "Un ancien état sans archive ni sauvegarde a été détecté. Cliquez sur Restaurer.",
  "update.notice.ready": "Paquet signé, version source compatible et système de fichiers prêts.",
  "update.package.confirmation": "L’installation ne démarre jamais automatiquement. Une confirmation administrateur reste obligatoire.",
  "update.package.install": "Installer la mise à jour",
  "update.package.kicker": "Paquet prêt",
  "update.package.recheck": "Revérifier les permissions",
  "update.package.source_manual": "Import manuel",
  "update.package.source_remote": "Téléchargé depuis MageKorp Hub",
  "update.package.title": "Analyse du paquet officiel",
  "update.preflight.blocked": "Des blocages persistent.",
  "update.preflight.ready": "Le serveur est maintenant prêt.",
  "update.preflight.running": "Nouveau contrôle des permissions en cours…",
  "update.rollup.bridge": "Pont",
  "update.rollup.bridge_desc": "Un socle intermédiaire reste possible pour une structure trop ancienne.",
  "update.rollup.cumulative": "Cumulatif",
  "update.rollup.cumulative_desc": "Une plage de versions sources rejoint la même cible.",
  "update.rollup.description": "MageKorp sélectionne le paquet direct ou cumulatif compatible avec la version installée. Le moteur MageStock revérifie ensuite sa signature interne, ses fichiers, les migrations et les permissions.",
  "update.rollup.direct": "Rollup direct",
  "update.rollup.direct_desc": "Une source historique précise rejoint la cible en un paquet.",
  "update.rollup.kicker": "Moteur cumulatif actif",
  "update.rollup.note": "La découverte distante, le téléchargement et l’analyse sont automatisés. L’installation, elle, reste toujours manuelle et confirmée.",
  "update.rollup.title": "Une installation ancienne peut rejoindre la cible sans poser chaque version intermédiaire",
  "update.system.finalize_manual": "Finaliser le dépôt manuel",
  "update.system.integrity": "Vérifier l’intégrité",
  "update.system.last_operation": "Dernière opération",
  "update.system.method": "Méthode",
  "update.system.package_mode": "Mode du paquet",
  "update.system.resume": "Reprendre",
  "update.system.rollback": "Restaurer",
  "update.system.status": "État",
  "update.system.target": "Cible",
  "update.system.title": "État du système",
  "update.method.manual_deploy": "Dépôt manuel",
  "update.method.recovery": "Récupération",
  "update.method.remote": "MageKorp Hub",
  "update.method.upload": "Import manuel",
  "update.mode.bridge": "Pont de compatibilité",
  "update.mode.cumulative": "Cumulatif",
  "update.mode.distribution": "Distribution complète",
  "update.mode.exact": "Direct",
  "update.status.backup_created": "Sauvegarde créée",
  "update.status.files_replaced": "Fichiers remplacés",
  "update.status.health_check": "Contrôle de santé",
  "update.status.inconsistent": "Installation incohérente",
  "update.status.migrations_running": "Migrations en cours",
  "update.status.pending_manual": "Mise à jour à finaliser",
  "update.status.preflight_failed": "Serveur non prêt",
  "update.status.rollback_required": "Restauration requise",
  "update.status.staged": "Fichiers préparés",
  "update.status.up_to_date": "À jour",
  "update.status.uploaded": "Paquet envoyé",
  "update.status.verified": "Paquet vérifié",
  "auth.brand.strapline": "Stocks · inventaires · terrain",
  "auth.brand.version": "MageStock {version}",
  "auth.brand.hosted": "hébergé par votre organisation",
  "auth.password.toggle": "Afficher ou masquer le mot de passe",
  "login.error.session_expired": "Session expirée. Rechargez la page puis réessayez.",
  "login.brand.lead": "Pilotez vos stocks, vos magasins et vos opérations terrain depuis un espace unique.",
  "login.brand.point.access": "Visualisez le stock disponible par magasin et emplacement",
  "login.brand.point.scope": "Réalisez les inventaires et les mouvements avec des parcours guidés",
  "login.brand.point.security": "Retrouvez le scanner et les outils terrain dans une expérience unifiée",
  "login.form.kicker": "Bienvenue",
  "login.form.title": "Accédez à votre espace",
  "login.form.intro": "Renseignez les identifiants fournis par votre organisation. MageStock vous dirigera vers les services disponibles pour votre compte.",
  "login.forgot_password": "Mot de passe oublié ?",
  "login.security_note": "Plusieurs tentatives incorrectes peuvent suspendre temporairement la connexion. En cas de difficulté, contactez votre administrateur.",
  "recovery.meta_description": "Réinitialisation contrôlée du mot de passe MageStock.",
  "recovery.page_title": "Réinitialiser le mot de passe",
  "recovery.brand.strapline": "Compte · accès · sécurité",
  "recovery.brand.lead": "Récupérez l’accès à votre espace MageStock avec un jeton temporaire créé par votre administrateur.",
  "recovery.brand.step.request.title": "Demander un jeton",
  "recovery.brand.step.request.text": "Contactez votre administrateur ou votre support interne.",
  "recovery.brand.step.expiry.title": "L’utiliser avant son expiration",
  "recovery.brand.step.expiry.text": "Le jeton est personnel, limité dans le temps et remplace tout jeton précédent.",
  "recovery.brand.step.sessions.title": "Révocation des sessions",
  "recovery.brand.step.sessions.text": "Après validation, toutes les connexions précédentes sont automatiquement fermées.",
  "recovery.brand.notice": "MageStock ne demande jamais votre ancien mot de passe et ne conserve pas le nouveau dans le navigateur.",
  "recovery.form.kicker": "Sécurité du compte",
  "recovery.form.title": "Réinitialiser le mot de passe",
  "recovery.form.intro": "Renseignez le jeton fourni par votre administrateur puis choisissez un mot de passe qui respecte tous les critères.",
  "recovery.error.session_expired": "Session expirée. Rechargez la page puis réessayez.",
  "recovery.error.rate_limit": "Trop de tentatives. Patientez avant de réessayer.",
  "recovery.error.password_mismatch": "Les deux mots de passe ne correspondent pas.",
  "recovery.error.invalid_token": "Le jeton est inconnu, expiré ou déjà utilisé.",
  "recovery.error.unavailable": "Le service de récupération est momentanément indisponible.",
  "recovery.success": "Le mot de passe a été réinitialisé. Toutes les anciennes sessions ont été fermées.",
  "recovery.return_login": "Retour à la connexion",
  "recovery.token.label": "Jeton de récupération",
  "recovery.token.hint": "Collez le jeton complet sans ajouter d’espace. Il ne peut être utilisé qu’une seule fois.",
  "recovery.password.label": "Nouveau mot de passe",
  "recovery.password_confirm.label": "Confirmer le mot de passe",
  "recovery.policy.kicker": "Critères obligatoires",
  "recovery.policy.title": "Mot de passe attendu",
  "recovery.policy.length": "Entre 14 et 255 caractères",
  "recovery.policy.lowercase": "Au moins une lettre minuscule",
  "recovery.policy.uppercase": "Au moins une lettre majuscule",
  "recovery.policy.number": "Au moins un chiffre",
  "recovery.policy.symbol": "Au moins un symbole ou signe",
  "recovery.policy.identity": "Aucune suite liée à MageStock ou au compte",
  "recovery.policy.matches": "Les deux saisies correspondent",
  "recovery.policy.pending": "Saisissez un mot de passe pour vérifier les critères.",
  "recovery.policy.valid": "Tous les critères visibles sont satisfaits.",
  "recovery.submit": "Réinitialiser et fermer les anciennes connexions",
  "recovery.no_token.title": "Vous n’avez pas de jeton ?",
  "recovery.no_token.text": "Un jeton ne peut être créé que par un administrateur MageStock autorisé. Demandez-lui d’ouvrir votre compte dans Utilisateurs et accès.",
  "login.stage.aria": "Aperçu de démonstration des opérations de stock MageStock",
  "login.stage.eyebrow": "Aperçu opérationnel",
  "login.stage.warehouse": "Magasin principal",
  "login.stage.status": "Démonstration",
  "login.stage.products": "Références disponibles",
  "login.stage.inventory": "Inventaire en cours",
  "login.stage.inventory_status": "82 % contrôlé",
  "login.stage.alerts": "Stocks faibles",
  "login.stage.alerts_value": "12 alertes",
  "login.stage.movement": "Dernier mouvement",
  "login.stage.movement_value": "Transfert validé",
  "login.stage.destination": "Dépôt Nord",
  "recovery.stage.aria": "Aperçu de démonstration de la protection du compte MageStock",
  "recovery.stage.eyebrow": "Protection du compte",
  "recovery.stage.account": "Accès MageStock",
  "recovery.stage.status": "Contrôle actif",
  "recovery.stage.token": "Jeton temporaire",
  "recovery.stage.token_value": "Usage unique",
  "recovery.stage.sessions": "Sessions",
  "recovery.stage.sessions_value": "Révocation automatique",
  "recovery.stage.storage": "Stockage",
  "recovery.stage.storage_value": "Aucun secret en clair",
  "recovery.stage.policy": "Politique de mot de passe",
  "recovery.stage.policy_value": "Contrôlée côté serveur",
  "recovery.stage.local": "Compte local",
  "products.mobile.resources": "Documents et localisation",
  "products.mobile.datasheet": "Fiche technique",
  "products.mobile.safety_sheet": "Fiche de données de sécurité",
  "products.mobile.document_unavailable": "Document non disponible",
  "products.mobile.plan": "Voir le produit sur un plan",
  "products.mobile.plan_short": "Plan",
  "products.mobile.document_opening": "ouverture du document",
  "products.mobile.create.show_steps": "Voir les 5 étapes",
  "products.mobile.create.step_identity": "Identité",
  "products.mobile.create.step_classification": "Classement",
  "products.mobile.create.step_purchase": "Achats",
  "products.mobile.create.step_traceability": "Traçabilité",
  "products.mobile.create.step_review": "Vérification",
  "products.mobile.create.identity_more": "Informations complémentaires",
  "products.mobile.create.identity_more_help": "EAN supplémentaires et description.",
  "products.mobile.create.image": "Image du produit",
  "products.mobile.create.image_help": "Photo ou visuel optionnel.",
  "products.mobile.create.storage": "Emplacement précis",
  "products.mobile.create.storage_help": "Rangement enregistré ou saisie manuelle.",
  "products.mobile.create.purchase_more": "Prix et offres fournisseurs",
  "products.mobile.create.purchase_more_help": "Informations d’achat optionnelles.",
  "products.mobile.create.trace": "Traçabilité et seuils",
  "products.mobile.create.trace_help": "Lots, péremption et stock de sécurité.",
  "products.mobile.create.variants": "Variantes et tailles",
  "products.mobile.create.variants_help": "Uniquement pour les produits concernés.",
  "products.mobile.create.documents": "Documents",
  "products.mobile.create.documents_help": "Fiche technique et fiche de sécurité.",
  "products.mobile.create.initial_stock": "Stock initial",
  "products.mobile.create.initial_stock_help": "Laissez vide si l’entrée sera faite plus tard.",
  "shell.footer.magekorp_app": "une application web MageKorp",
  "shell.footer.contact": "Contacter MageKorp"
}
