{
  "app": {
    "name": "PianoPlanner",
    "tagline": "Planification intelligente pour accordeurs de piano"
  },
  "landing": {
    "heroTitle": "Planification piano, simplifiée.",
    "heroSubtitle": "Planification intelligente conçue pour les techniciens piano. Routage IA, rappels automatiques et une page de réservation que vos clients adoreront.",
    "heroCta": "Essai gratuit",
    "heroCta2": "Voir comment ça marche",
    "featuresTitle": "Tout ce dont vous avez besoin",
    "featuresSubtitle": "Outils professionnels conçus spécifiquement pour les techniciens piano.",
    "storyPlanTitle": "Planifiez mieux, roulez moins",
    "storyPlanDesc": "Voyez en un coup d'œil l'efficacité de votre journée. Combinez les rendez-vous dans la même zone et économisez des heures de trajet par semaine.",
    "storyPlanF1": "Efficacité des itinéraires colorée par rendez-vous",
    "storyPlanF2": "Suggestions IA : regroupez automatiquement les clients proches",
    "storyPlanF3": "Alertes planning trop serré + solution en 1 clic",
    "storyPlanF4": "Suivi kilométrique avec séparation pro/perso",
    "storyWorkshopTitle": "Atelier & projets",
    "storyWorkshopDesc": "Gérez les révisions et travaux d'atelier du devis à la livraison. Planifiez les tâches, suivez les heures et gardez le contrôle de la capacité.",
    "storyWorkshopF1": "Planificateur de projets avec tâches, délais et progression",
    "storyWorkshopF2": "Suivi du temps : réservez les heures atelier sur un projet",
    "storyWorkshopF3": "Devis : main d'œuvre, matériaux & coûts en PDF",
    "storyWorkshopF4": "Capacité hebdo : voyez instantanément votre disponibilité",
    "storyPianoTitle": "Chaque piano, chaque détail",
    "storyPianoDesc": "Historique de service complet par piano. Les clients réservent via leur lien personnel. Les salles de concert ont leurs créneaux du soir.",
    "storyPianoF1": "Historique de service, notes et photos par instrument",
    "storyPianoF2": "Liens de réservation personnels avec données pré-remplies",
    "storyPianoF3": "Mode théâtre : horaires séparés pour salles de concert",
    "storyPianoF4": "Rappels d'accord automatiques selon l'intervalle",
    "bannerSyncTitle": "Sync Calendrier",
    "bannerSyncDesc": "Sync bidirectionnelle avec Google, Apple & Microsoft 365. Ou utilisez iCal — fonctionne avec toute appli calendrier.",
    "bannerMobileTitle": "Accès partout",
    "bannerMobileDesc": "PWA sur votre écran d'accueil. Fonctionne hors ligne. Notifications push pour nouvelles réservations.",
    "bannerPrivacyTitle": "100% hébergé aux Pays-Bas",
    "bannerPrivacyDesc": "Données sur serveurs néerlandais. Pas de cloud Big Tech. Entièrement conforme RGPD.",
    "compactEmailTitle": "E-mails professionnels",
    "compactEmailDesc": "Confirmations & rappels en 4 langues. Domaine SMTP personnalisé.",
    "compactPrivateTitle": "Rendez-vous privés",
    "compactPrivateDesc": "Trajets personnels séparés. Synchronisé comme 'Occupé' sans détails.",
    "compactWalkInTitle": "Sans RDV & plan rapide",
    "compactWalkInDesc": "Planifiez directement depuis le dashboard. Pas besoin de fiche client.",
    "compactInvoiceTitle": "Facturation en 1 clic",
    "compactInvoiceDesc": "Créez des factures depuis votre agenda. Lien de paiement en ligne intégré.",
    "compactLangTitle": "4 langues",
    "compactLangDesc": "Néerlandais, anglais, allemand et français. Le client voit sa propre langue.",
    "desktopTitle": "Puissant sur Desktop.",
    "desktopDesc": "Expérience dashboard complète sur votre Mac ou PC. Gérez toute votre entreprise.",
    "desktopFeature1": "Aperçu dashboard complet",
    "desktopFeature2": "Glisser-déposer les rendez-vous",
    "desktopFeature3": "Optimisation intelligente des routes",
    "desktopFeature4": "Sync calendrier & intégrations",
    "mobileTitle": "Votre planning, partout.",
    "mobileDesc": "Ajoutez PianoPlanner à l'écran d'accueil de votre iPhone ou Android. Ça fonctionne comme une app native - même sans internet.",
    "mobileFeature1Title": "Ajouter à l'Écran d'Accueil",
    "mobileFeature1Desc": "Un tap pour installer. Pas besoin d'app store.",
    "mobileFeature2Title": "Fonctionne Hors Ligne",
    "mobileFeature2Desc": "Consultez rendez-vous et clients sans internet.",
    "mobileFeature3Title": "Notifications Push",
    "mobileFeature3Desc": "Recevez des alertes pour nouvelles réservations et rappels.",
    "mobileFeature4Title": "Gestes Tactiles",
    "mobileFeature4Desc": "Glissez pour naviguer. Tirez pour actualiser.",
    "ctaTitle": "Prêt à optimiser votre planning ?",
    "ctaSubtitle": "Rejoignez les techniciens piano qui économisent des heures chaque semaine.",
    "ctaButton": "Essai gratuit",
    "footerTagline": "Planification intelligente pour techniciens piano",
    "startToday": "Commencez gratuitement",
    "joinTechnicians": "Rejoignez les techniciens piano qui économisent des heures chaque semaine grâce à une planification plus intelligente.",
    "yourName": "Votre nom",
    "password": "Mot de passe (min. 8 caractères)",
    "createAccount": "Créer un compte gratuit",
    "accountCreated": "Compte créé !",
    "awaitingApproval": "Votre compte est en attente d'approbation. Vous recevrez un e-mail une fois activé.",
    "installApp": "Installer l'app",
    "gettingStarted": {
      "title": "Démarrez rapidement avec PianoPlanner",
      "subtitle": "Suivez ces 6 étapes dans l'assistant de configuration. Votre planification intelligente sera prête en 5 minutes.",
      "step1Title": "Coordonnées entreprise",
      "step1Desc": "Assurez-vous que votre communication ait l'air professionnelle.",
      "step1Item1": "Entrez le nom et l'adresse de votre entreprise.",
      "step1Item2": "Votre adresse est complétée automatiquement pour un calcul d'itinéraire précis.",
      "step2Title": "Vos services",
      "step2Item1": "Ajoutez vos services (ex: 'Accord', 'Expertise', 'Service concert').",
      "step2Item2": "Définissez la durée et le prix standard par service.",
      "step3Title": "Préférences de déplacement",
      "step3MaxTravel": "Temps de trajet max :",
      "step3MaxTravelDesc": "Combien de temps voulez-vous conduire au maximum vers un client ?",
      "step3Buffer": "Marge :",
      "step3BufferDesc": "Combien de temps entre les rendez-vous ?",
      "step4Title": "Connecter le calendrier",
      "step4Desc": "Voyez vos rendez-vous d'accordage dans votre propre agenda de confiance.",
      "step4Google": "Synchronisation bidirectionnelle, la plus complète",
      "step4Apple": "Intégration transparente",
      "step4Ical": "Fonctionne avec n'importe quelle application d'agenda",
      "step5Title": "Votre premier client test",
      "step5Item1": "Créez un client fictif (ou vous-même).",
      "step5Item2": "Ajoutez un piano à ce client.",
      "step5Tip": "💡 Ainsi vous verrez directement à quoi ressemble le dossier client.",
      "step6Title": "Prêt à démarrer ! 🎉",
      "step6Desc": "Votre tableau de bord est maintenant actif. Voici ce que signifient les couleurs :",
      "step6Green": "Rendez-vous planifiés efficacement (peu de temps de trajet)",
      "step6Red": "Rendez-vous éloignés — utilisez Smart Appointment !",
      "step6ShareLink": "Partagez votre lien :",
      "step6ShareLinkDesc": "Envoyez aux clients votre lien de réservation personnel et laissez l'agenda se remplir tout seul."
    },
    "skipNav": "Aller au contenu",
    "creatingAccount": "Création du compte...",
    "passwordTooShort": "Le mot de passe doit comporter au moins 8 caractères",
    "signupError": "Quelque chose s'est mal passé.",
    "connectionError": "Erreur de connexion.",
    "trialInfo": "30 jours d'essai gratuit · Pas de carte de crédit · Démarrez immédiatement",
    "notifTitle": "Nouvelle Réservation!",
    "notifText": "Jean Dupont - Accordage Piano",
    "storyReminderTitle": "Plus jamais de rappels manuels",
    "storyReminderDesc": "PianoPlanner envoie automatiquement des rappels d'accord au bon moment. Avec des relances intelligentes et un lien de réservation pour que les clients prennent rendez-vous eux-mêmes.",
    "storyReminderF1": "E-mail automatique basé sur l'intervalle d'accord",
    "storyReminderF2": "Relances intelligentes : jusqu'à 4 rappels par cycle",
    "storyReminderF3": "Lien de réservation direct dans chaque rappel",
    "storyReminderF4": "Lien de désinscription — 100% conforme RGPD",
    "compactRouteFillTitle": "Remplir route",
    "compactRouteFillDesc": "Trouvez des clients à proximité qui ont besoin d'un accordage. Envoyez des invitations en un clic.",
    "headline": "Le logiciel professionnel le plus intelligent pour les techniciens piano.",
    "subheadline": "Laissez votre agenda se remplir tout seul sans laisser de trous. Optimisez vos itinéraires, gérez vos clients et pianos, et réduisez votre administration. Le tout dans un outil clair qui comprend vraiment votre métier.",
    "builtFor": "Conçu par et pour les techniciens piano. Chaque fonctionnalité est pensée pour vous faire gagner du temps.",
    "everythingYouNeed": "Tout ce dont vous avez besoin.",
    "features": "Fonctionnalités",
    "myStory": "Mon Histoire",
    "getStarted": "Commencer",
    "startFree": "Commencer gratuitement",
    "learnMore": "En savoir plus",
    "nowLive": "Maintenant en ligne",
    "pricing": "Tarifs",
    "privacy": "Confidentialité",
    "terms": "Conditions",
    "login": "Connexion",
    "storyInvoiceTitle": "Facturez instantanément, soyez payé plus vite",
    "storyInvoiceDesc": "L'accordeur est encore chez le client et la facture est déjà envoyée — avec un lien de paiement. Créez des factures professionnelles en quelques secondes.",
    "storyInvoiceF1": "Facture en 1 clic depuis votre calendrier — détails du client pré-remplis",
    "storyInvoiceF2": "Lien de paiement en ligne — le client paie directement",
    "storyInvoiceF3": "PDF professionnel avec votre propre en-tête et numérotation automatique",
    "storyInvoiceF4": "Créez des factures sur votre téléphone — iPhone et Android, même en déplacement",
    "storyInvoiceF5": "Intégration comptable et facturation électronique UBL",
    "demoPaid": "Payé ✓",
    "demoTuningDesc": "Accord — Steinway & Sons D",
    "demoPaymentLink": "Lien de paiement en ligne",
    "demoPdfSent": "PDF envoyé",
    "demoNew": "NOUVEAU",
    "demoTravelSaved": "-2h de trajet",
    "demoRevision": "Révision Steinway",
    "demoHoursProgress": "17.5 / 26.0 heures • 4 tâches terminées",
    "demoStrings": "✓ Cordes",
    "demoHammers": "✓ Marteaux",
    "demoIntonation": "⏳ Harmonisation",
    "demoRegulation": "○ Réglage",
    "demoPianoDetail": "Fam. De Vries • Dernière accord: 14 jan. 2026",
    "demoTuningJan": "✓ Accord jan. '26",
    "demoRegulationOct": "✓ Réglage oct. '25",
    "demoPhotos": "📎 Photos",
    "demoAutoReminders": "Rappels automatiques",
    "demoReminder1": "Rappel 1",
    "demo14days": "+14 jours",
    "demoReminder2": "Rappel 2",
    "demoBooked": "Réservé !",
    "demoBookingInEmail": "Lien de réservation par e-mail",
    "tryFree": "Essayer gratuitement"
  },
  "launcher": {
    "agenda": "Agenda",
    "customers": "Clients",
    "pianos": "Pianos",
    "smart": "Smart",
    "share": "Partager le lien",
    "tagline": "Vos accordages, planifiés intelligemment"
  },
  "nav": {
    "dashboard": "Tableau de bord",
    "agenda": "Calendrier",
    "customers": "Clients",
    "pianos": "Pianos",
    "settings": "Paramètres",
    "guide": "Guide",
    "support": "Assistance",
    "help": "Aide",
    "logout": "Déconnexion",
    "upgrade": "Mettre à niveau",
    "home": "Accueil",
    "pageHelp": "Aide pour cette page",
    "helpDashboard": "Planifiez des rendez-vous, utilisez Smart Pick pour des suggestions intelligentes et gérez votre agenda avec des codes couleur et des rappels.",
    "helpCustomers": "Gérez les clients, partagez des liens de réservation personnels, consultez le statut d'accord et remplissez intelligemment les itinéraires.",
    "helpPianos": "Enregistrez les pianos, définissez les intervalles d'accord, suivez le statut avec des codes couleur et consultez l'historique de maintenance.",
    "helpProjects": "Créez des projets d'atelier, gérez les tâches, liez les rendez-vous et suivez la progression avec des délais.",
    "helpTravel": "Enregistrez les frais de déplacement par rendez-vous, consultez les aperçus mensuels et exportez pour votre comptabilité.",
    "helpInvoices": "Créez des factures, envoyez par e-mail, suivez les paiements et personnalisez la mise en page avec vos propres données.",
    "helpSettings": "Configurez vos données d'entreprise, modèles d'e-mail, rappels d'accord, heures de travail et intégrations de calendrier.",
    "helpGuide": "Consultez le guide complet avec des explications sur toutes les fonctionnalités de PianoPlanner.",
    "helpSupport": "Contactez le support pour des questions, bugs ou demandes de fonctionnalités.",
    "pricing": "Tarifs",
    "travelReport": "Trajets",
    "invoices": "Factures",
    "routeOptimizer": "Optimiseur d'itinéraire",
    "loggingOut": "Déconnexion...",
    "admin": "Admin",
    "billing": "Abonnement",
    "projects": "Projets",
    "calendar": "Calendrier"
  },
  "smartWizard": {
    "title": "Rendez-vous intelligent",
    "button": "Rendez-vous intelligent",
    "step1": "Client",
    "step2": "Piano",
    "step3": "Rendez-vous",
    "dayStatus": "Statut du jour",
    "done": "Terminé",
    "busy": "Occupé",
    "toDo": "À faire",
    "currentAppointment": "Rendez-vous actuel",
    "noActiveAppointment": "Pas de rendez-vous actif",
    "nextAppointmentHere": "Votre prochain rendez-vous apparaîtra ici",
    "todayRemaining": "Restant aujourd'hui",
    "toComplete": "À compléter",
    "selectOrAddCustomer": "Sélectionner ou ajouter un client",
    "searchOrCreate": "Rechercher un client existant ou en créer un nouveau",
    "searchExistingOrCreate": "Rechercher un client existant ou en créer un nouveau",
    "searchExisting": "Rechercher un client existant",
    "searchExistingCustomer": "Rechercher un client existant",
    "searchPlaceholder": "Tapez nom, e-mail ou téléphone...",
    "searchCustomerPlaceholder": "Nom, e-mail ou téléphone...",
    "or": "ou",
    "createNewCustomer": "Créer un nouveau client",
    "name": "Nom",
    "email": "E-mail",
    "phone": "Téléphone",
    "address": "Adresse",
    "postalCode": "Code postal",
    "city": "Ville",
    "notes": "Notes",
    "saveCustomer": "Enregistrer le client",
    "selectOrAddPiano": "Sélectionner ou ajouter un piano",
    "selectExistingOrRegister": "Choisir un piano existant ou en enregistrer un nouveau",
    "customerPianos": "Pianos du client",
    "selectCustomerFirst": "Sélectionnez d'abord un client",
    "addNewPiano": "Ajouter un nouveau piano",
    "brand": "Marque",
    "model": "Modèle",
    "type": "Type",
    "typeUpright": "Piano",
    "typeGrand": "Piano à queue",
    "typeDigital": "Piano numérique",
    "buildYear": "Année de construction",
    "serialNumber": "Numéro de série",
    "finish": "Finition",
    "finishBlackPolish": "Noir brillant",
    "finishBlackMatte": "Noir mat",
    "finishWhitePolish": "Blanc brillant",
    "finishWhiteMatte": "Blanc mat",
    "finishWood": "Bois",
    "finishOther": "Autre",
    "location": "Emplacement",
    "floor": "Étage",
    "floorGround": "Rez-de-chaussée",
    "floor1": "1er étage",
    "floor2": "2e étage",
    "floor3": "3e étage",
    "floorBasement": "Sous-sol",
    "condition": "État",
    "conditionExcellent": "Excellent",
    "conditionGood": "Bon",
    "conditionFair": "Moyen",
    "conditionPoor": "Mauvais",
    "tuningInterval": "Intervalle d'accordage",
    "interval6months": "6 mois",
    "interval12months": "12 mois",
    "interval18months": "18 mois",
    "interval24months": "24 mois",
    "intervalOnRequest": "Sur demande",
    "savePiano": "Enregistrer le piano",
    "aiSuggestions": "Suggestions IA",
    "smartRecommendations": "Recommandations intelligentes basées sur l'emplacement et le calendrier",
    "chooseService": "Choisir le service",
    "selectService": "-- Sélectionner un service --",
    "smartestMoments": "Meilleurs créneaux",
    "calculatedBasedOn": "Calculé automatiquement selon votre calendrier et temps de trajet",
    "findingBestMoments": "Recherche des meilleurs créneaux...",
    "selectServiceToSee": "Sélectionnez un service pour voir les meilleurs créneaux",
    "loadMoreOptions": "Charger plus d'options",
    "chosenMoment": "Créneau choisi",
    "sendConfirmationEmail": "Envoyer un e-mail de confirmation au client",
    "sendConfirmationEmailTo": "Envoyer un e-mail de confirmation à",
    "createAppointment": "Créer le rendez-vous",
    "customerHasNoPianos": "Ce client n'a pas encore de pianos. Ajoutez-en un !",
    "monthsAgoTuned": "mois depuis l'accordage",
    "noTuningKnown": "Aucun accordage connu",
    "months": "mois",
    "monthsAgo": "mois",
    "pianoOverdueAlert": "Ce piano n'a pas été",
    "notTuned": "accordé",
    "tuningRecommended": "Un accordage est recommandé !",
    "noTuningKnownForPiano": "Aucun accordage connu pour ce piano. Ceci pourrait être le premier rendez-vous.",
    "lastTuning": "Dernier accordage",
    "pianoWellMaintained": "Piano bien entretenu.",
    "lastTuningWas": "Dernier accordage il y a",
    "lastTuningColon": "Dernier accordage :",
    "considerCheckup": "Un contrôle serait judicieux.",
    "noRecentTuningKnown": "Aucun accordage récent connu. Un premier contrôle est recommandé.",
    "findingMoreOptions": "Recherche d'autres options...",
    "calculatingBestMoment": "Calcul du meilleur créneau...",
    "smartSearching": "Nous recherchons les meilleures options pour vous...",
    "noMomentsFound": "Aucun créneau disponible dans les semaines à venir. Vérifiez vos paramètres de calendrier.",
    "errorFindingMoments": "Erreur lors de la recherche de créneaux disponibles.",
    "bestChoice": "Meilleur choix",
    "preferOtherMoment": "Préférez un autre créneau ? Choisissez vous-même",
    "backToBestChoice": "Retour au meilleur choix",
    "viewRoute": "Voir l'itinéraire",
    "saved": "économisé",
    "after": "Après",
    "chooseOrRegister": "Choisissez un piano existant ou enregistrez-en un nouveau",
    "customerNotesPlaceholder": "Notes facultatives sur ce client...",
    "pianoNotesPlaceholder": "Particularités, historique, points d'attention...",
    "streetAndNumber": "Rue et numéro",
    "tuningPitch": "Hauteur d'accord",
    "tuningPitchPlaceholder": "ex. 440 Hz",
    "tuningData": "Données d'accord",
    "climateControl": "Contrôle climatique",
    "climateControlActive": "Actif",
    "furtherAway": "Plus éloigné",
    "preferOtherMomentCount": "Préférez un autre moment ? {{count}} alternatives disponibles",
    "addressSearch": "Rechercher une adresse",
    "addressSearchPlaceholder": "Commencez à taper pour des suggestions...",
    "street": "Rue + numéro",
    "cityRequired": "Ville *",
    "fullNamePlaceholder": "Nom complet",
    "customerNotInSystem": "Client pas encore dans le système",
    "addPianoForCustomer": "Ajouter un piano pour le client",
    "locationOptional": "Emplacement (optionnel)",
    "whatNeedsDone": "Que faut-il faire ?",
    "basedOnCalendarAndTravel": "Basé sur votre calendrier et le temps de trajet",
    "filterMorning": "Matin",
    "filterAfternoon": "Après-midi",
    "filterEvening": "Soir",
    "tabCalendar": "Calendrier",
    "tabCustomers": "Clients",
    "tabPianos": "Pianos",
    "tabSmart": "Smart",
    "enterName": "Veuillez saisir un nom",
    "noPianosForCustomer": "Aucun piano enregistré pour ce client",
    "enterBrand": "Veuillez saisir une marque",
    "calculatingSuggestions": "Calcul des suggestions intelligentes...",
    "noAvailableMoments": "Aucun créneau disponible trouvé",
    "errorLoadingSuggestions": "Erreur lors du chargement des suggestions",
    "appointmentPlanned": "Rendez-vous planifié !",
    "confirmationEmailSent": "E-mail de confirmation envoyé",
    "goToCalendar": "Aller au calendrier",
    "badgeBest": "Meilleur",
    "badgeWorkshop": "Atelier",
    "badgeRemote": "À distance",
    "badgeRoute": "Route",
    "badgeNearby": "À proximité",
    "noTravelTime": "Pas de temps de trajet",
    "daySunday": "Dimanche",
    "dayMonday": "Lundi",
    "dayTuesday": "Mardi",
    "dayWednesday": "Mercredi",
    "dayThursday": "Jeudi",
    "dayFriday": "Vendredi",
    "daySaturday": "Samedi",
    "nameRequired": "Nom *",
    "emailPlaceholder": "email@exemple.fr",
    "phonePlaceholder": "01 23 45 67 89",
    "brandRequired": "Marque *",
    "brandPlaceholder": "ex. Steinway",
    "modelPlaceholder": "ex. Model D",
    "yearPlaceholder": "ex. 1985",
    "locationPlaceholder": "Si le piano est à un autre emplacement",
    "filterAll": "Tous",
    "noCustomersFound": "Aucun client trouvé",
    "errorSavingCustomer": "Erreur lors de l'enregistrement du client",
    "loadingPianos": "Chargement des pianos...",
    "errorLoadingPianos": "Erreur lors du chargement des pianos",
    "errorSavingPiano": "Erreur lors de l'enregistrement du piano",
    "fillAllFields": "Veuillez remplir tous les champs obligatoires",
    "errorCreatingAppointment": "Erreur lors de la création du rendez-vous",
    "travelTime": "Temps de trajet"
  },
  "book": {
    "bestChoice": "Meilleur choix",
    "available": "Disponible",
    "findingBestTimes": "Recherche des meilleurs créneaux...",
    "preferOtherTime": "Préférez un autre créneau ? Choisissez vous-même",
    "chooseDateTime": "Choisir date & heure",
    "chooseService": "Choisir un service",
    "notesOptional": "Notes (optionnel)",
    "bookAppointment": "Réserver le rendez-vous",
    "suggestedTimes": "Créneaux suggérés",
    "school": {
      "selectPianos": "Sélectionner les pianos",
      "selectPianosSub": "Cochez les pianos à accorder",
      "chooseService": "Choisir le service",
      "chooseServiceSub": "Quel service pour les pianos sélectionnés ?",
      "pickDate": "Date & heure",
      "pickDateSub": "Choisissez quand vous souhaitez le rendez-vous",
      "pianoOverview": "Aperçu des pianos",
      "pianoOverviewSub": "Sélectionnez les pianos à accorder",
      "back": "Retour",
      "brand": "Marque",
      "lastTuned": "Dernier accord",
      "location": "Emplacement",
      "model": "Modèle",
      "nextChooseDate": "Suivant : choisir la date",
      "nextChooseService": "Suivant : choisir le service",
      "pianosSelected": "pianos sélectionnés",
      "scheduled": "Planifié",
      "selectedPianos": "pianos sélectionnés ?",
      "selectedPianosTitle": "Pianos sélectionnés",
      "serialNumber": "N° série",
      "type": "Type",
      "whichServiceForPianos": "Quel service pour les"
    },
    "sendConfirmation": "Envoyer une confirmation par email",
    "welcome": "Bienvenue",
    "loading": "Chargement...",
    "loadingCalendar": "Chargement du calendrier...",
    "loadingTimes": "Chargement des horaires...",
    "linkInvalid": "Ce lien de réservation n'est pas valide",
    "linkNotFound": "Lien de réservation introuvable",
    "selectPiano": "Sélectionner un piano",
    "availableTimesFor": "Horaires disponibles pour",
    "noTimesAvailable": "Pas d'horaires disponibles",
    "firstAvailable": "Premier disponible",
    "smartSuggestions": "Suggestions intelligentes",
    "smartSuggestionsDesc": "Moments recommandés basés sur la localisation et le planning",
    "calculatingSmart": "Calcul des suggestions...",
    "smartSearching": "Nous recherchons les meilleures options pour vous...",
    "noSmartSuggestions": "Pas de suggestions intelligentes disponibles",
    "chooseManualTime": "Choisir manuellement",
    "moreOptions": "Plus d'options",
    "planHere": "Réserver ici",
    "booked": "Réservé !",
    "confirmEmail": "Un e-mail de confirmation a été envoyé",
    "notesPlaceholder": "Remarques éventuelles...",
    "legendAvailable": "Disponible",
    "legendFull": "Complet",
    "legendClosed": "Fermé",
    "appointmentsSub": "Vos rendez-vous",
    "chooseDateTimeSub": "Choisir date et heure",
    "chooseServiceSub": "Choisir un service",
    "notesSub": "Remarques",
    "selectPianoSub": "Sélectionner un piano",
    "theaterInstructionsTitle": "Comment réserver",
    "theaterStep1": "Choisissez un service",
    "theaterStep2": "Sélectionnez un piano",
    "theaterStep3": "Choisissez une date et une heure",
    "theaterStep4": "Confirmez votre réservation",
    "appointments": "Rendez-vous",
    "contactForBooking": "Aucun créneau disponible. Veuillez nous contacter pour prendre rendez-vous.",
    "loadMoreSuggestions": "Charger plus de suggestions"
  },
  "dashboard": {
    "title": "Tableau de bord",
    "howToUse": "Comment ça marche ?",
    "guideTitle": "Agenda - Guide",
    "guideSchedule": "Planifier un rendez-vous",
    "guideScheduleDesc": "Cliquez sur un créneau horaire dans l'agenda ou utilisez le bouton +. Remplissez client, lieu, heure et durée. Smart Pick suggère automatiquement les meilleurs pianos pour l'entretien.",
    "guideLocation": "Types de lieu",
    "guideLocationDesc": "Choisissez 'Chez le client' pour les rendez-vous sur place, ou 'Atelier' pour lier les heures à un projet de restauration. Les heures liées sont suivies automatiquement.",
    "guideSmartPick": "Smart Pick",
    "guideSmartPickDesc": "La lueur jaune autour des pianos signifie que Smart Pick les recommande. Basé sur l'intervalle d'accord, le dernier accord et la saison. Parfait pour l'entretien !",
    "guideReminders": "Rappels",
    "guideRemindersDesc": "Les clients reçoivent automatiquement un e-mail de confirmation et optionnellement un rappel. Personnalisez les modèles d'e-mail dans Paramètres selon votre image de marque.",
    "guideColors": "Codes couleur agenda",
    "guideColorsDesc": "Les rendez-vous reçoivent automatiquement une couleur basée sur le temps de trajet :",
    "guideColorGreen": "Vert — temps de trajet court, route efficace",
    "guideColorOrange": "Orange — temps de trajet moyen",
    "guideColorRed": "Rouge — temps de trajet long",
    "guideColorDefault": "Par défaut — pas de données de trajet disponibles",
    "guideColorPrivate": "Violet — rendez-vous privé",
    "guideTip": "<strong>Conseil :</strong> Utilisez la vue semaine pour l'aperçu ou la vue jour pour les détails. Faites glisser les rendez-vous pour les déplacer. Double-cliquez pour modifier.",
    "currentAppointment": "Rendez-vous actuel",
    "dayStatus": "Statut du jour",
    "done": "Terminé",
    "inProgress": "En cours",
    "toDo": "À faire",
    "upcomingToday": "À venir aujourd'hui",
    "noActiveAppointment": "Pas de rendez-vous actif",
    "nextAppointmentAppears": "Votre prochain rendez-vous apparaîtra ici",
    "toProcess": "À traiter",
    "todayAppointments": "Rendez-vous du jour",
    "upcomingAppointments": "Rendez-vous à venir",
    "noAppointments": "Aucun rendez-vous prévu",
    "workshopStats": "Atelier / Terrain",
    "workshopLabel": "Atelier",
    "fieldLabel": "Terrain",
    "remoteLabel": "À distance",
    "actionSheetWorkshopTitle": "Tâche atelier",
    "actionSheetWorkshopSubtitle": "Tâche interne sans client",
    "actionSheetWalkInTitle": "Client sans rendez-vous",
    "actionSheetWalkInSubtitle": "Le client vient à l'atelier",
    "workshopTaskTitle": "Tâche atelier",
    "walkInTitle": "Enregistrement walk-in",
    "walkInSearchHint": "Chercher ou créer un client...",
    "workshopPeriodView": "Vue actuelle",
    "workshopPeriodWeek": "Cette semaine",
    "workshopPeriodMonth": "Ce mois",
    "workshopHoursTotal": "Total heures",
    "viewAll": "Voir tout",
    "customer": "Client",
    "searchCustomer": "Rechercher un client...",
    "noCustomersFound": "Aucun client trouvé",
    "selectCustomerFirst": "Sélectionnez d'abord un client",
    "selectOrCreateCustomer": "Sélectionnez d'abord un client ou créez-en un nouveau",
    "selectOrCreatePiano": "Sélectionnez d'abord un piano ou créez-en un nouveau",
    "selectAllFields": "Sélectionner tous les champs",
    "selectService": "-- Sélectionner un service --",
    "sendTo": "Envoyer à",
    "customerNoEmail": "Le client n'a pas d'adresse e-mail",
    "confirmationSentTo": "E-mail de confirmation envoyé à",
    "applying": "Application en cours...",
    "applyRoute": "Appliquer l'itinéraire",
    "appointmentsUpdated": "{{count}} rendez-vous mis à jour !",
    "errorApplyingRoute": "Erreur lors de l'application de l'itinéraire : ",
    "selectCustomerServiceDate": "Veuillez sélectionner un client, un service et une date",
    "route": "Itinéraire",
    "sync": "Sync",
    "calcTravelTimesTitle": "Calculer les temps de trajet pour tous les rendez-vous",
    "syncCalendarTitle": "Synchroniser avec le calendrier",
    "streamline": "Rationaliser",
    "streamlineTitle": "Rationaliser la journée",
    "streamlineDesc": "Décaler les rendez-vous selon les temps de trajet réels Google Maps",
    "streamlineLoading": "Calcul des temps de trajet...",
    "streamlineNoAppointments": "Pas assez de rendez-vous",
    "streamlineMinTwo": "Il faut au moins 2 rendez-vous pour rationaliser.",
    "streamlineAlreadyOptimal": "Déjà optimal !",
    "streamlineNoChanges": "Votre planning est déjà bien organisé. Aucun changement nécessaire.",
    "streamlineChanges": "modifications",
    "streamlineTotal": "rendez-vous au total",
    "streamlineApply": "Appliquer",
    "streamlineApplied": "Planning rationalisé",
    "streamlineAppointmentsMoved": "rendez-vous déplacés",
    "streamlineFailed": "Échec de la rationalisation",
    "addCustomer": "Ajouter un client",
    "addPianoTitle": "Ajouter un nouveau piano",
    "savePiano": "Ajouter piano",
    "actionSheetFillHereTitle": "Remplir ici",
    "actionSheetFillHereSubtitle": "Créer un rendez-vous à cette heure",
    "actionSheetSmartTitle": "Trouver le meilleur moment",
    "actionSheetSmartSubtitle": "Laissez-moi trouver le meilleur moment",
    "addCustomerButton": "Ajouter un client",
    "addNewCustomerTitle": "Ajouter un nouveau client",
    "createNewCustomer": "créer un nouveau client",
    "customerRequired": "Client *",
    "emailPlaceholder": "email@exemple.fr",
    "nameRequired": "Nom *",
    "newCustomerTitle": "Nouveau client",
    "phonePlaceholder": "01 23 45 67 89",
    "pianoOptionalLabel": "Piano (facultatif)",
    "pianoPlaceholder": "p.ex. Yamaha U1",
    "searchHint": "Rechercher par nom, ou",
    "selectOrCreateCustomerTitle": "Sélectionner ou créer un client",
    "streetPlaceholder": "Rue et numéro 123",
    "tuningReminders": "Rappels d'accord",
    "wizardStepCustomer": "Client",
    "wizardStepPiano": "Piano",
    "wizardStepServiceTime": "Service & heure",
    "openPayments": "Paiements en attente",
    "openPaymentsHint": "Voir et facturer dans Factures →",
    "missingAddressesTitle": "{count} rendez-vous sans adresse",
    "missingAddressesSub": "Les temps de trajet ne peuvent pas être calculés",
    "missingAddressesEdit": "Modifier",
    "missingAddressesMore": "de plus",
    "payStatusPending": "À facturer",
    "payStatusInvoiced": "Facture envoyée",
    "createInvoice": "Créer une facture",
    "markPaid": "Marquer comme payé",
    "confirmMarkPaid": "Marquer ce paiement comme payé ?",
    "paymentMarkedPaid": "Paiement marqué comme payé",
    "mileageTitle": "Suivi kilométrique",
    "mileageFullView": "Aperçu complet",
    "mileageBusiness": "Professionnel",
    "mileagePrivate": "Privé",
    "mileageTotal": "Total km",
    "mileageYearTotal": "Total annuel",
    "mileageQuickAdd": "Ajouter un trajet",
    "mileagePrivateTrip": "Privé",
    "mileageRoundTrip": "Aller-retour ×2",
    "mileageEnterKm": "Saisissez les km",
    "mileageTripAdded": "Trajet ajouté",
    "outsideHoursBeforeSingle": "↑ {{count}} rendez-vous avant {{hour}}h00",
    "outsideHoursBeforeMultiple": "↑ {{count}} rendez-vous avant {{hour}}h00",
    "outsideHoursAfterSingle": "↓ {{count}} rendez-vous après {{hour}}h00",
    "outsideHoursAfterMultiple": "↓ {{count}} rendez-vous après {{hour}}h00",
    "totalSent": "Total",
    "thisMonth": "Ce mois-ci",
    "optedOut": "Désabonné",
    "auto": "Auto",
    "calculatingRoute": "Calcul de l'itinéraire...",
    "emailConfirmation": "Confirmation par e-mail",
    "endTime": "Heure de fin",
    "endTimeHint": "Heure de fin calculée : durée du service + marge",
    "newCustomerInline": "👤 Nouveau client",
    "newPianoInline": "🎹 Nouveau piano",
    "noPianosAvailable": "Aucun piano disponible",
    "optimizeRoute": "Optimiser l'itinéraire",
    "pianosForAppointment": "Pianos pour ce rendez-vous",
    "selectPianos": "Sélectionner piano(s)",
    "selectPianosHint": "Sélectionnez un ou plusieurs pianos. La durée est calculée automatiquement.",
    "selectServiceEdit": "-- Sélectionner un service --",
    "sendConfirmationLabel": "Envoyer un e-mail de confirmation au client",
    "serviceAndTime": "Service & heure",
    "serviceRequired": "Service *",
    "startTimeRequired": "Heure de début *",
    "titleRequired": "Titre *",
    "actionSheetUnavailableSubtitle": "Bloquer des jours pour vacances ou congé",
    "actionSheetUnavailableTitle": "Indisponible",
    "today": "Aujourd'hui",
    "yesterday": "Hier",
    "appointment": "Rendez-vous",
    "sendConfirmationTo": "Envoyer confirmation à",
    "teamBanner": "Vous avez un abonnement Teams — gérez vos accordeurs et consultez le calendrier d'équipe",
    "teamDashboardBtn": "Tableau de bord équipe",
    "titlePlaceholder": "ex. Accorder Steinway",
    "addressAutoFilled": "Adresse (remplie automatiquement)",
    "additionalInfoPlaceholder": "Informations supplémentaires...",
    "titleExamplePlaceholder": "ex. Accord de piano",
    "searchCustomerPlaceholder": "Rechercher client...",
    "noMoreAppointmentsToday": "Plus de rendez-vous aujourd'hui",
    "enjoyFreeTime": "Profitez de votre temps libre !",
    "blockDays": "Bloquer des jour(s)",
    "blockDaysDesc": "Les jours bloqués ne sont pas disponibles pour les clients.",
    "fromDate": "Date de début",
    "untilDate": "Date de fin",
    "untilDateOptional": "(optionnel, pour plusieurs jours)",
    "reasonLabel": "Raison",
    "reasonOptional": "(optionnel)",
    "reasonPlaceholder": "ex. Vacances, jour de congé, médecin...",
    "blockButton": "Bloquer",
    "prevNav": "Précédent",
    "nextNav": "Suivant",
    "prevNavTitle": "Précédent (←)",
    "nextNavTitle": "Suivant (→)",
    "routeAnalysisTitle": "Analyse d'itinéraire",
    "timeInterval": "Intervalle de temps",
    "zoomControls": "Zoom (Cmd +/-)",
    "viewMode": "Vue (J/S/M)",
    "zoomOut": "Dézoomer",
    "zoomIn": "Zoomer",
    "zoomOutTitle": "Dézoomer (Cmd −)",
    "zoomInTitle": "Zoomer (Cmd +)",
    "resetZoomTitle": "Cliquer pour réinitialiser (Cmd 0)",
    "completedAppointments": "Rendez-vous terminés",
    "activeAppointments": "Rendez-vous actifs",
    "pendingAppointments": "Rendez-vous en attente",
    "onSchedule": "À l'heure",
    "busy": "Occupé",
    "stillToDo": "Encore à faire",
    "oneHour": "1 heure",
    "calendarView": "Vue calendrier",
    "goToToday": "Aller à aujourd'hui",
    "calendarSyncPromptTitle": "Synchroniser votre Google Agenda",
    "calendarSyncPromptDesc": "Vous vous êtes connecté avec Google. Souhaitez-vous connecter votre agenda pour synchroniser automatiquement les rendez-vous ?",
    "calendarSyncPromptYes": "Oui, connecter",
    "calendarSyncPromptLater": "Plus tard",
    "bookingLeads": "Demandes de réservation",
    "bulkComplete": "Tout terminer",
    "bulkConfirm": "Marquer les {count} rendez-vous comme terminés ? Les dates d'accord seront mises à jour.",
    "bulkSuccess": "{completed} rendez-vous terminés, {pianos} pianos mis à jour",
    "bulkError": "Impossible de terminer les rendez-vous",
    "pendingAll": "Tout"
  },
  "customers": {
    "title": "Clients",
    "howToUse": "Comment ça marche ?",
    "guideTitle": "Clients - Guide",
    "guideAdd": "Ajouter un client",
    "guideAddDesc": "Cliquez sur 'Nouveau client' pour créer un client. Remplissez le nom, l'adresse et les coordonnées. Les pianos peuvent être ajoutés plus tard depuis le profil client.",
    "guideBookingLink": "Lien de réservation personnel",
    "guideBookingLinkDesc": "Chaque client reçoit un lien de réservation unique. Partagez-le avec le client pour qu'il puisse consulter et planifier ses rendez-vous. Trouvez le lien dans le profil client sous 'Lien de réservation'.",
    "guideTheater": "Clients théâtre",
    "guideTheaterDesc": "Marquez les théâtres, salles de concert et clients réguliers comme 'Théâtre'. Ces clients peuvent voir leur historique complet de rendez-vous et réserver directement via leur lien.",
    "guideReminders": "Rappels d'accordage",
    "guideRemindersDesc": "Définissez un intervalle d'accordage par piano (3, 6 ou 12 mois). PianoPlanner envoie automatiquement un e-mail d'invitation quand il est temps pour l'entretien.",
    "guideDuplicates": "Fusionner les doublons",
    "guideDuplicatesDesc": "Clients importés en double ? Utilisez 'Gérer les doublons' pour trouver et fusionner les clients dupliqués. La détection trouve les correspondances exactes (email, nom+téléphone, nom) et les noms similaires. Tous les pianos, rendez-vous, factures et projets sont transférés. Les clients fusionnés sont soft-supprimés et peuvent être restaurés dans les 30 jours via 'Historique'.",
    "guideTip": "<strong>Conseil :</strong> La colonne 'Dernier accord' montre par client le piano accordé il y a le plus longtemps — idéal pour planifier rapidement quelqu'un entre deux rendez-vous. Triez par cette colonne pour voir les clients les plus urgents en premier.",
    "addCustomer": "Nouveau client",
    "editCustomer": "Modifier le client",
    "deleteCustomer": "Supprimer le client",
    "name": "Nom",
    "namePlaceholder": "Nom complet",
    "email": "E-mail",
    "phone": "Téléphone",
    "address": "Adresse",
    "addressSearch": "Rechercher une adresse",
    "addressSearchPlaceholder": "Commencez à taper pour des suggestions...",
    "street": "Rue + N°",
    "postalCode": "Code postal",
    "city": "Ville",
    "type": "Type de client",
    "typePrivate": "Particulier",
    "typeBusiness": "Entreprise",
    "typeSchool": "École",
    "typeChurch": "Église",
    "typeTheater": "Théâtre",
    "typeStudio": "Studio",
    "typeHoreca": "Horeca",
    "typeGovernment": "Administration",
    "notes": "Notes",
    "notesPlaceholder": "Notes internes...",
    "noNotes": "Aucune note",
    "withPiano": "Avec piano",
    "needsTuning": "Accordage à prévoir",
    "newThisMonth": "Nouveau ce mois",
    "noCustomers": "Aucun client",
    "searchPlaceholder": "Rechercher des clients...",
    "backToList": "Retour aux clients",
    "contactDetails": "Coordonnées",
    "personalBookingLink": "Lien de réservation personnel",
    "bookingLinkHint": "Envoyez ce lien à votre client pour qu'il puisse prendre rendez-vous lui-même.",
    "appointmentHistory": "Rendez-vous",
    "scheduleAppointment": "Planifier un rendez-vous",
    "call": "Appeler",
    "route": "Itinéraire",
    "noAddressKnown": "Aucune adresse connue",
    "nameRequired": "Veuillez entrer un nom",
    "errorSavingCustomer": "Erreur lors de l'enregistrement du client",
    "errorSavingCustomerMsg": "Impossible d'enregistrer le client : ",
    "errorCreatingCustomer": "Impossible de créer le client. Veuillez réessayer.",
    "loadingCustomers": "Chargement des clients...",
    "errorLoadingCustomers": "Impossible de charger les clients",
    "noCustomerId": "Aucun ID client fourni",
    "errorLoadingCustomer": "Erreur lors du chargement du client",
    "customerNotFound": "Client non trouvé",
    "noContactDetails": "Aucune coordonnée",
    "unknownPiano": "Piano inconnu",
    "noAppointmentsYet": "Aucun rendez-vous encore",
    "noPiano": "Pas de piano",
    "lastTuning": "Dernier accord",
    "noResults": "Aucun résultat",
    "errorDeleting": "Erreur lors de la suppression",
    "tryDifferentSearch": "Essayez un autre terme de recherche",
    "addFirstCustomer": "Ajoutez votre premier client pour commencer",
    "customersDeleted": "{{count}} client(s) supprimé(s)",
    "manageDuplicates": "Gérer les doublons",
    "duplicatesFound": "Doublons",
    "duplicatesTitle": "Doublons possibles",
    "mergeCustomers": "Fusionner les clients",
    "mergeWarningTitle": "Attention :",
    "mergeWarning": "Sélectionnez ci-dessous les données à conserver. Le client source sera soft-supprimé et tous les rendez-vous, pianos, factures et notes seront transférés. Cette action peut être annulée dans les 30 jours via Historique.",
    "confirmMerge": "Fusionner",
    "merge": "Fusionner",
    "noDuplicates": "Aucun doublon trouvé",
    "duplicatesBy": "Doublons par",
    "selectFieldsToKeep": "Sélectionnez les données à conserver :",
    "fieldName": "Nom",
    "fieldEmail": "E-mail",
    "fieldPhone": "Téléphone",
    "fieldAddress": "Adresse",
    "fieldType": "Type",
    "fieldNotes": "Notes",
    "mergeSuccess": "Clients fusionnés avec succès !",
    "mergeError": "Erreur lors de la fusion",
    "mergeConfirmMsg": "Êtes-vous sûr de vouloir fusionner ces clients ? Tous les rendez-vous, pianos, factures et notes seront transférés au client cible. Le client source sera soft-supprimé. Vous pouvez annuler cette action dans les 30 jours via l'Historique.",
    "keepThis": "Garder",
    "appointments": "rendez-vous",
    "pianoCount": "pianos",
    "export": "Exporter",
    "delete": "Supprimer",
    "deselect": "Tout désélectionner",
    "convertAddresses": "Convertir les adresses",
    "cityPlaceholder": "Paris",
    "fullName": "Nom complet",
    "postalCodePlaceholder": "75001",
    "guideSmartFill": "Remplissage intelligent",
    "guideSmartFillDesc": "Remplissez votre itinéraire intelligemment : recherchez par ville ou code postal pour trouver les clients à proximité.",
    "billingAdmin": "Facturation / Administration",
    "billingAdminDesc": "Envoyez les factures à un comptable au lieu du client",
    "billingEmail": "E-mail de facturation",
    "billingName": "À l'attention de (administration)",
    "billingToAdmin": "Factures vers l'administration",
    "billingToAdminToggle": "Envoyer les factures à l'administration",
    "billingToAdminToggleDesc": "Les factures vont à l'adresse de l'administration, pas au client",
    "paymentTerms": "Conditions de paiement",
    "paymentTermsDefault": "Par défaut (paramètre)",
    "preferredPayment": "Mode de paiement préféré",
    "noPreference": "Pas encore connu",
    "emailLog": "Journal des e-mails",
    "noEmailsYet": "Aucun e-mail envoyé à ce client",
    "contactInfo": "Coordonnées",
    "streetPlaceholder": "Nom de rue 123",
    "customerUpdated": "Client mis à jour",
    "customerAdded": "Client ajouté",
    "customerDeleted": "Client supprimé",
    "confirmDeleteNamed": "Êtes-vous sûr de vouloir supprimer « {{name}} » ?",
    "errorSaving": "Erreur lors de l'enregistrement",
    "emptyStateText": "Ajoutez votre premier client pour commencer",
    "cityRequired": "Ville *",
    "newCustomer": "Nouveau client",
    "customerCreated": "Client créé",
    "customerSaved": "Client enregistré",
    "pianosAfterSave": "Les pianos et rendez-vous apparaissent après l'enregistrement du client",
    "noCustomersFound": "Aucun client trouvé",
    "fullNamePlaceholder": "Nom complet",
    "emailPlaceholder": "email@exemple.fr",
    "phonePlaceholder": "+33 6 12 34 56 78",
    "noContactInfo": "Pas d'informations de contact",
    "couldNotLoadMap": "Impossible de charger la carte : ",
    "couldNotLoadMapData": "Impossible de charger les données de la carte",
    "noCity": "Pas de ville",
    "remainingToProcess": "{{count}} restant(s) à traiter",
    "geocodingFailed": "Géocodage échoué",
    "duplicatesFetchError": "Erreur lors de la récupération des doublons",
    "duplicateDetectionDesc": "La détection de doublons recherche par email, nom+téléphone, nom seul et correspondance floue (orthographe similaire).",
    "searchingDuplicates": "Recherche de doublons...",
    "duplicateGroupsFound": "groupes de doublons possibles trouvés",
    "pageOf": "Page {{current}} sur {{total}}",
    "clickToSelectPrimary": "Cliquez sur un client pour le sélectionner comme principal",
    "chooseFieldValues": "Choisissez la valeur à conserver pour chaque champ :",
    "mergeFailed": "Fusion échouée",
    "mergeErrorOccurred": "Une erreur est survenue lors de la fusion",
    "searchFailed": "Recherche échouée",
    "connectionFailed": "Connexion échouée : ",
    "sendFailed": "Envoi échoué",
    "failed": "Échoué",
    "addFirstCustomerDesc": "Ajoutez votre premier client pour commencer",
    "status": "Statut",
    "edit": "Modifier",
    "newAppointment": "Nouveau rendez-vous",
    "customerCount": "clients",
    "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce client ?",
    "exportSuccess": "Export réussi",
    "selected": "sélectionné(s)",
    "billingNamePlaceholder": "Cabinet comptable",
    "billingEmailPlaceholder": "comptabilite@cabinet.fr",
    "mergeHistory": "Historique",
    "mergeHistoryTitle": "Historique des fusions",
    "mergeWarningWithUndo": "Les autres clients seront soft-supprimés. Tous les pianos, rendez-vous, factures et projets seront transférés. Vous pouvez annuler ceci dans les 30 jours.",
    "noMergeHistory": "Aucune fusion récente à annuler.",
    "daysToUndo": "jours pour annuler",
    "undoExpired": "Annulation expirée",
    "confirmUndo": "Êtes-vous sûr de vouloir annuler cette fusion ? Les clients originaux seront restaurés.",
    "undoSuccess": "Fusion annulée ! Clients restaurés.",
    "fuzzyMatch": "approx.",
    "confirmMergeWithUndo": "sera fusionné avec {target}. Ceci peut être annulé dans les 30 jours. Continuer ?",
    "undo": "Annuler",
    "undoFailed": "Échec de l'annulation",
    "pianos": "pianos",
    "placeholders": {
      "fullName": "Nom complet",
      "streetExample": "Rue Principale 1",
      "internalNotes": "Notes internes...",
      "search": "Rechercher par nom, e-mail, téléphone, ville...",
      "cityPostalExample": "ex. Lyon, 69001"
    }
  },
  "pianos": {
    "title": "Pianos",
    "howToUse": "Comment ça marche ?",
    "guideTitle": "Pianos - Guide",
    "guideAdd": "Ajouter un piano",
    "guideAddDesc": "Cliquez sur 'Nouveau piano' ou ajoutez un piano depuis le profil client. Remplissez marque, modèle, numéro de série et emplacement. Liez le piano à un client.",
    "guideInterval": "Définir l'intervalle d'accordage",
    "guideIntervalDesc": "Définissez un intervalle d'accordage par piano : 3, 6 ou 12 mois. Ou choisissez 'Le client prend contact' si le client appelle lui-même. La couleur du statut indique si l'entretien est nécessaire.",
    "guideStatus": "Couleurs de statut",
    "guideStatusDesc": "Vert = à jour, Jaune = accordage bientôt, Rouge = en retard. Les couleurs sont calculées en fonction du dernier accordage et de l'intervalle défini.",
    "guideSmartPick": "Smart Pick",
    "guideSmartPickDesc": "Lors de la planification d'un rendez-vous, Smart Pick affiche les pianos nécessitant un entretien. Lueur jaune = recommandé pour l'accordage selon l'intervalle et la saison.",
    "guideHistory": "Historique d'entretien",
    "guideHistoryDesc": "Consultez l'historique d'entretien complet par piano. Tous les rendez-vous sont automatiquement enregistrés avec date, type de service et notes.",
    "guideTip": "<strong>Conseil :</strong> Utilisez les filtres 'En retard' ou 'Jamais' pour trouver rapidement les pianos qui nécessitent une attention. Cliquez sur un piano pour voir les détails et l'historique.",
    "addPiano": "Nouveau piano",
    "editPiano": "Modifier le piano",
    "deletePiano": "Supprimer le piano",
    "brand": "Marque",
    "brandPlaceholder": "ex. Steinway",
    "model": "Modèle",
    "serialNumber": "Numéro de série",
    "year": "Année",
    "yearPlaceholder": "Année",
    "type": "Type",
    "typeUpright": "Piano",
    "typeGrand": "Piano à queue",
    "upright": "Piano",
    "grand": "Piano à queue",
    "digital": "Numérique",
    "condition": "État",
    "conditionExcellent": "Excellent",
    "conditionGood": "Bon",
    "conditionFair": "Moyen",
    "conditionPoor": "Mauvais",
    "excellent": "Excellent",
    "good": "Bon",
    "fair": "Moyen",
    "poor": "Mauvais",
    "finish": "Finition",
    "finishPlaceholder": "ex. Noir brillant",
    "location": "Emplacement",
    "locationPlaceholder": "ex. Salon",
    "tuningInterval": "Intervalle d'accordage",
    "intervalNone": "Le client prend contact lui-même",
    "interval3": "Tous les 3 mois",
    "interval6": "Tous les 6 mois",
    "interval12": "Annuellement",
    "owner": "Propriétaire",
    "noOwner": "-- Pas de propriétaire --",
    "notes": "Notes",
    "totalPianos": "Total des pianos",
    "onSchedule": "À jour",
    "dueSoon": "Bientôt dû",
    "overdue": "En retard",
    "neverTuned": "Jamais accordé",
    "byBrand": "Pianos par marque",
    "searchPlaceholder": "Rechercher par marque, modèle, numéro de série ou client...",
    "lastTuning": "Dernier accordage",
    "noPianos": "Aucun piano",
    "serviceHistory": "Historique de service",
    "addService": "Ajouter un service",
    "serviceTuning": "Accordage",
    "serviceRepair": "Réparation",
    "serviceRegulation": "Réglage",
    "serviceVoicing": "Harmonisation",
    "noServiceHistory": "Aucun historique de service",
    "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce piano ?",
    "lastTuned": "Dernier accordage",
    "errorLoading": "Erreur lors du chargement des données",
    "everyMonths": "Tous les {{months}} mois",
    "noOwnerLinked": "Aucun propriétaire associé",
    "linkOwner": "Associer un propriétaire",
    "linkOwnerFirst": "Associez d'abord un propriétaire",
    "dueSoonStatus": "Bientôt dû",
    "overdueStatus": "En retard",
    "nextTuning": "Prochain",
    "planFirstTuning": "Planifier le premier accordage",
    "loadingHistory": "Chargement de l'historique...",
    "noNotes": "Aucune note",
    "brandRequired": "La marque est obligatoire",
    "pianoUpdated": "Piano mis à jour",
    "pianoAdded": "Piano ajouté",
    "pianoDeleted": "Piano supprimé",
    "thisPiano": "ce piano",
    "confirmDeleteNamed": "Êtes-vous sûr de vouloir supprimer \"{{name}}\" ?",
    "selectDate": "Sélectionner une date",
    "tuningAdded": "Accordage ajouté",
    "errorSavingPiano": "Erreur lors de l'enregistrement du piano",
    "errorSavingPianoMsg": "Impossible d'enregistrer le piano : ",
    "loadingPianos": "Chargement des pianos...",
    "errorLoadingPianos": "Erreur lors du chargement des pianos",
    "newPiano": "Nouveau piano",
    "totalPianosLabel": "Total des pianos",
    "serviceOverdue": "Service en retard",
    "serviceSoon": "Service bientôt",
    "serviceOk": "Bien entretenu",
    "filterOverdue": "En retard",
    "filterDueSoon": "Bientôt",
    "filterOk": "Bon",
    "filterUnknown": "Inconnu",
    "colStatus": "Statut",
    "colBrandModel": "Marque & Modèle",
    "colType": "Type",
    "colSerialNumber": "N° de série",
    "colCustomer": "Client",
    "colLocation": "Emplacement",
    "colLastTuning": "Dernier accordage",
    "colNextService": "Prochain service",
    "colActions": "Actions",
    "noResults": "Aucun piano trouvé",
    "tryDifferentSearch": "Essayez une autre recherche ou filtre",
    "serviceStatus": "État du service",
    "pianoDetails": "Détails du piano",
    "scheduleService": "Planifier un rendez-vous",
    "viewCustomer": "Voir le client",
    "nextService": "Prochain service",
    "serviceInterval": "Intervalle de service",
    "statusUnknown": "Inconnu",
    "statusGood": "Bon",
    "monthsLate": "{{count}} mois de retard",
    "withinMonths": "Dans {{count}} mois",
    "noCustomer": "Pas de client",
    "typePiano": "Piano",
    "typeGrandPiano": "Queue",
    "typeDigitalPiano": "Numérique",
    "schedule": "Planifier",
    "edit": "Modifier",
    "selected": "sélectionné(s)",
    "exportCsv": "Exporter",
    "bulkLastTuning": "Dernier accord",
    "bulkTuningTitle": "Mettre à jour le dernier accord",
    "bulkTuningDesc": "pianos seront mis à jour",
    "lastTuningDate": "Date du dernier accord",
    "bulkApply": "Appliquer",
    "selectDateFirst": "Veuillez d'abord sélectionner une date",
    "bulkTuningSuccess": "Pianos mis à jour !",
    "loading": "Chargement...",
    "noPianoId": "Aucun ID de piano fourni",
    "pianoNotFound": "Piano non trouvé",
    "errorLoadingPiano": "Impossible de charger le piano",
    "noRemarks": "Aucune remarque",
    "noServiceInfo": "Aucune information de service disponible",
    "monthsLateForService": "{{count}} mois de retard pour le service",
    "serviceSoonNeeded": "Service bientôt nécessaire",
    "monthsUntilService": "{{count}} mois jusqu'au service",
    "monthsAgoTuned": "Accordé il y a {{count}} mois",
    "addFirstService": "Ajouter un premier service",
    "scheduleAppointment": "Planifier un rendez-vous",
    "basement": "Sous-sol",
    "blackPolish": "Noir brillant",
    "blackSatin": "Noir satin",
    "floor": "Étage",
    "floor1": "1er étage",
    "floor2": "2e étage",
    "floor3": "3e étage",
    "floor4plus": "4e étage ou plus",
    "groundFloor": "Rez-de-chaussée",
    "mahogany": "Acajou",
    "needsRepair": "Réparation nécessaire",
    "oak": "Chêne",
    "other": "Autre",
    "piano": "Piano",
    "walnut": "Noyer",
    "whitePolish": "Blanc brillant",
    "modelPlaceholder": "p.ex. U1, Model D",
    "tuningPitch": "Hauteur d'accord",
    "tuningPitchPlaceholder": "ex. 440 Hz",
    "tuningData": "Données d'accord",
    "climateControl": "Contrôle climatique",
    "climateControlActive": "Actif",
    "basicInfo": "Informations de base",
    "locationMaintenance": "Emplacement et entretien",
    "emptyStateText": "Ajoutez votre premier piano pour commencer",
    "photos": "Photos",
    "addPhoto": "Ajouter une photo",
    "deletePhoto": "Supprimer la photo",
    "photoAdded": "Photo ajoutée",
    "photosAdded": "{{count}} photos ajoutées",
    "photoDeleted": "Photo supprimée",
    "maxPhotos": "Maximum 10 photos par piano",
    "uploadFailed": "Échec du téléchargement de la photo",
    "deleteFailed": "Échec de la suppression",
    "linkCustomer": "Lier un client",
    "changeCustomer": "Modifier",
    "unlinkCustomer": "Délier",
    "selectCustomer": "Sélectionner un client",
    "customerLinked": "Client lié",
    "customerUnlinked": "Propriétaire délié",
    "typeDigital": "Piano numérique",
    "typeRequired": "Type *",
    "featurePopupTitle": "Nouveau !",
    "featurePopupBody": "Vous pouvez maintenant sélectionner les pianos nécessitant un entretien et envoyer des invitations d'accordage directement depuis cette page. Utilisez les cases à cocher et cliquez sur 'Envoyer une invitation' dans la barre d'actions.",
    "featurePopupGotIt": "Compris !",
    "customerRequired": "Veuillez d'abord sélectionner un client",
    "errorSaving": "Impossible d'enregistrer le piano",
    "noPianosForCustomer": "Pas encore de pianos pour ce client",
    "notesPlaceholder": "Informations supplémentaires...",
    "noDetails": "Pas de détails",
    "errorDeleting": "Erreur lors de la suppression",
    "noCustomersFound": "Aucun client trouvé",
    "confirmDeletePhoto": "Supprimer la photo ?",
    "pianoDataUnavailable": "Données du piano indisponibles",
    "noCustomerLinked": "Pas de client lié",
    "linkFailed": "Liaison échouée",
    "confirmUnlinkOwner": "Dissocier le propriétaire de ce piano ?",
    "unlinkFailed": "Dissociation échouée",
    "buildYear": "Année de construction",
    "placeholders": {
      "brandExample": "ex. Steinway",
      "roomExample": "ex. Salon"
    }
  },
  "appointments": {
    "title": "Rendez-vous",
    "appointment": "Rendez-vous",
    "newAppointment": "Nouveau rendez-vous",
    "editAppointment": "Modifier le rendez-vous",
    "deleteAppointment": "Supprimer le rendez-vous",
    "deleteTitle": "Supprimer le rendez-vous",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer ce rendez-vous ? Cette action est irréversible.",
    "date": "Date",
    "time": "Heure",
    "duration": "Durée",
    "service": "Service",
    "customer": "Client",
    "piano": "Piano",
    "location": "Lieu",
    "notes": "Notes",
    "status": "Statut",
    "scheduled": "Planifié",
    "completed": "Terminé",
    "cancelled": "Annulé",
    "appointmentCreated": "Rendez-vous créé !",
    "appointmentDeleted": "Rendez-vous supprimé",
    "createAppointment": "Créer le rendez-vous",
    "thisAppointment": "ce rendez-vous",
    "confirmDeleteNamed": "Êtes-vous sûr de vouloir supprimer \"{{title}}\" ?",
    "errorCreatingAppointment": "Erreur lors de la création du rendez-vous : ",
    "errorSavingAppointment": "Impossible d'enregistrer le rendez-vous : ",
    "errorDeletingAppointment": "Impossible de supprimer le rendez-vous. Veuillez réessayer.",
    "slotTaken": "Ce créneau est déjà pris. Veuillez choisir un autre horaire.",
    "fillTitleStartEnd": "Veuillez remplir le titre, l'heure de début et de fin",
    "errorMovingAppointment": "Impossible de déplacer le rendez-vous : ",
    "errorMovingAppointmentRetry": "Impossible de déplacer le rendez-vous. Veuillez réessayer.",
    "locationType": "Où ?",
    "locationCustomer": "Chez le client",
    "locationWorkshop": "Atelier",
    "locationRemote": "À distance",
    "atWorkshop": "Atelier",
    "atCustomer": "Chez le client",
    "atRemote": "À distance",
    "workshopAddress": "Votre adresse d'atelier",
    "noTravelNeeded": "Pas de déplacement",
    "travelToWorkshop": "Vers l'atelier",
    "travelFromWorkshop": "Depuis l'atelier",
    "workshopAppointment": "Rendez-vous atelier",
    "workshopCount": "atelier",
    "customerCount": "client",
    "remoteCount": "à distance",
    "hours": "heures",
    "newProject": "Nouveau",
    "noProject": "Pas de projet (heures d'atelier libres)",
    "privateAppointment": "Rendez-vous privé",
    "privatePurposePlaceholder": "p.ex. Courses, médecin, famille...",
    "project": "Projet",
    "remainingHours": "Restant",
    "travelWarningPrevious": "Attention : seulement {{gapMinutes}} min de trajet depuis le rendez-vous précédent (minimum {{neededMinutes}} min recommandé)",
    "travelWarningNext": "Attention : seulement {{gapMinutes}} min de trajet vers le rendez-vous suivant (minimum {{neededMinutes}} min recommandé)",
    "travelWarningBoth": "Attention : temps de trajet insuffisant vers les rendez-vous environnants (minimum {{neededMinutes}} min recommandé)",
    "call": "Appeler",
    "whatsapp": "WhatsApp",
    "message": "Message",
    "route": "Itinéraire",
    "done": "Terminé",
    "markDone": "Marquer comme terminé",
    "privateAppointmentHint": "Non professionnel, comptabilisé séparément pour le suivi kilométrique",
    "privatePurpose": "Motif du trajet",
    "workshopTimer": "Chronomètre atelier",
    "startsIn": "Commence dans",
    "elapsed": "écoulé",
    "remaining": "restant",
    "timerDone": "Terminé",
    "viewProject": "Voir le projet",
    "linkedProject": "Projet lié",
    "selectProject": "Sélectionner un projet",
    "couldNotLoad": "Impossible de charger les rendez-vous",
    "enjoyYourDay": "Profitez de votre journée !",
    "noAppointmentsToday": "Aucun rendez-vous aujourd'hui",
    "tryAgain": "Réessayer",
    "schedule": "Planifier"
  },
  "services": {
    "title": "Services",
    "addService": "Ajouter un service",
    "editService": "Modifier le service",
    "deleteService": "Supprimer le service",
    "name": "Nom",
    "duration": "Durée",
    "price": "Prix",
    "description": "Description",
    "minutes": "minutes"
  },
  "settings": {
    "title": "Paramètres",
    "subtitle": "Gérez votre calendrier, e-mail, compte et paramètres professionnels.",
    "syncOverview": "Aperçu de la synchronisation",
    "hideGuide": "Masquer les guides",
    "hideGuideDesc": "Masquer les sections 'Comment ça marche ?' sur toutes les pages",
    "sidebar": {
      "calendar": "Calendrier",
      "googleCalendar": "Google Agenda",
      "microsoftCalendar": "Microsoft 365",
      "appleCalendar": "Apple iCloud",
      "displaySettings": "Paramètres d'affichage",
      "icalFeed": "Flux iCal",
      "email": "E-mail",
      "customDomain": "Domaine personnalisé",
      "emailNotifications": "Notifications",
      "emailTemplates": "Modèles",
      "notifications": "Notifications",
      "pushNotifications": "Notifications push",
      "business": "Entreprise",
      "companyDetails": "Coordonnées entreprise",
      "bookingSettings": "Paramètres de réservation",
      "travelSettings": "Déplacement & Zone de service",
      "regionalSettings": "Paramètres régionaux",
      "services": "Services",
      "manageServices": "Gérer les services",
      "account": "Compte",
      "profile": "Profil",
      "subscription": "Abonnement",
      "language": "Langue",
      "importData": "Importer des données",
      "accounting": "Comptabilité",
      "availability": "Disponibilité",
      "bookingPlanning": "Réservation et planification",
      "communication": "Communication",
      "emailLog": "Journal des e-mails",
      "integrations": "Intégrations",
      "mileageTracking": "Suivi kilométrique",
      "onlineBooking": "Réservation en ligne",
      "teamManagement": "Gestion d'équipe",
      "travelArea": "Zone de déplacement"
    },
    "cards": {
      "password": "Mot de passe",
      "companyAvailability": "Entreprise & Disponibilité",
      "dangerZone": "Zone de danger",
      "resetData": "Réinitialiser les données"
    },
    "googleCalendar": "Sync Google Agenda",
    "appleCalendar": "Sync Apple Calendar",
    "emailNotifications": "Notifications par e-mail",
    "bookingLink": "Lien de réservation public",
    "companyProfile": "Profil de l'entreprise",
    "account": {
      "subscriptionTitle": "Abonnement",
      "subscriptionDesc": "Gérez votre abonnement, consultez les factures et modifiez votre mode de paiement.",
      "manageSubscription": "Gérer l'abonnement",
      "importTitle": "Importer des données",
      "importTypes": "Contacts, Calendrier, CSV",
      "importDesc": "Importez vos données existantes depuis d'autres applications ou fichiers.",
      "importContacts": "Contacts",
      "importContactsDesc": "vCard, CSV\niPhone, Google, Outlook",
      "importCalendar": "Calendrier",
      "importCalendarDesc": "iCal (.ics)\nApple, Google, Outlook",
      "importGazelle": "Import Gazelle",
      "importGazelleDesc": "Étape par étape\navec rapport détaillé",
      "cleanNotes": "Nettoyer les notes",
      "cleanNotesDesc": "Supprimez les textes en double et les lignes répétées dans les notes clients et pianos. Utile après une importation de données.",
      "cleanAllNotes": "Nettoyer toutes les notes",
      "timezone": "Fuseau horaire",
      "timezoneDesc": "Définissez votre fuseau horaire pour une planification précise des rendez-vous et la synchronisation du calendrier.",
      "autoDetect": "Détection automatique",
      "saveTimezone": "Enregistrer le fuseau horaire",
      "name": "Nom",
      "profileEmail": "E-mail",
      "email": "E-mail",
      "loginMethod": "Méthode de connexion",
      "saveProfile": "Enregistrer le profil",
      "currentPassword": "Mot de passe actuel",
      "newPassword": "Nouveau mot de passe",
      "confirmPassword": "Confirmer le mot de passe",
      "minChars": "Minimum 6 caractères",
      "changePassword": "Changer le mot de passe",
      "interfaceLanguage": "Langue de l'interface",
      "deleteTitle": "Supprimer définitivement le compte",
      "deleteWarning": "Cette action est irréversible. Toutes vos données, rendez-vous, clients et paramètres seront définitivement supprimés.",
      "deleteAccountBtn": "Supprimer le compte",
      "deleteAccountConfirmTitle": "Supprimer le compte",
      "deleteAccountPermanent": "Cette action est permanente !",
      "deleteAccountConfirmMsg": "Votre compte, tous les rendez-vous, clients, pianos, services et paramètres seront définitivement supprimés et ne pourront pas être récupérés.",
      "deleteConfirmPrompt": "Entrez votre mot de passe pour confirmer :",
      "deleteConfirmPassword": "Mot de passe",
      "deleteConfirmBtn": "Supprimer mon compte",
      "password": "Mot de passe",
      "permanentAction": "Cette action est permanente !",
      "deleteModalWarning": "Votre compte, tous les rendez-vous, clients, pianos, services et paramètres seront définitivement supprimés et ne pourront pas être récupérés.",
      "confirmDeletion": "Entrez votre mot de passe pour confirmer :",
      "deleteMyAccount": "Supprimer mon compte",
      "resetTitle": "Supprimer toutes les données, conserver les paramètres",
      "resetDescription": "Supprimez tous vos clients, pianos, rendez-vous, factures et historique de service. Votre compte, paramètres, services, modèles d'e-mails et abonnement restent inchangés.",
      "resetWillDelete": "Sera supprimé :",
      "resetCustomers": "Tous les clients",
      "resetPianos": "Tous les pianos et photos",
      "resetAppointments": "Tous les rendez-vous",
      "resetInvoices": "Toutes les factures",
      "resetServiceHistory": "Tout l'historique de service",
      "resetMileage": "Enregistrements kilométriques",
      "resetWillKeep": "Sera conservé :",
      "keepAccount": "Votre compte et profil",
      "keepSettings": "Paramètres entreprise et page de réservation",
      "keepServices": "Vos services et prix",
      "keepTemplates": "Modèles d'e-mails",
      "keepSubscription": "Abonnement et synchronisation calendrier",
      "resetDataBtn": "Recommencer",
      "resetConfirmWarning": "Cela supprimera toutes vos données !",
      "resetConfirmDetail": "Tous les clients, pianos, rendez-vous, factures et historique de service seront définitivement supprimés. Vos paramètres et compte seront conservés.",
      "resetConfirmPrompt": "Tapez RESET pour confirmer :",
      "resetConfirmLabel": "Confirmation",
      "confirmReset": "Recommencer",
      "resetTypeReset": "Tapez RESET pour confirmer",
      "resetting": "Réinitialisation en cours...",
      "resetSuccess": "Toutes les données ont été effacées. Vos paramètres et compte ont été conservés.",
      "resetFailed": "Impossible de réinitialiser les données"
    },
    "language": "Langue",
    "selectLanguage": "Choisir la langue",
    "save": "Enregistrer",
    "saved": "Enregistré !",
    "connect": "Connecter",
    "disconnect": "Déconnecter",
    "connected": "Connecté",
    "notConnected": "Non connecté",
    "enabled": "Activé",
    "disabled": "Désactivé",
    "selectTimezone": "Veuillez sélectionner un fuseau horaire",
    "couldNotSaveTimezone": "Impossible d'enregistrer le fuseau horaire",
    "timezoneSaved": "🌍 Fuseau horaire enregistré !",
    "nameEmailRequired": "Le nom et l'e-mail sont obligatoires",
    "couldNotSaveProfile": "Impossible d'enregistrer le profil",
    "profileSaved": "Profil enregistré !",
    "fillAllPasswordFields": "Veuillez remplir tous les champs de mot de passe",
    "passwordsDoNotMatch": "Les nouveaux mots de passe ne correspondent pas",
    "passwordMinLength": "Le mot de passe doit contenir au moins 6 caractères",
    "couldNotChangePassword": "Impossible de changer le mot de passe",
    "passwordChanged": "Mot de passe changé !",
    "modalNotFound": "Erreur : Modal non trouvé",
    "editService": "Modifier le service",
    "newService": "Nouveau service",
    "serviceNotFound": "Service non trouvé. Essayez d'actualiser la page.",
    "serviceUpdated": "Service mis à jour !",
    "serviceAdded": "Service ajouté !",
    "couldNotSaveService": "Impossible d'enregistrer le service",
    "confirmDeleteService": "Êtes-vous sûr de vouloir supprimer ce service ?",
    "serviceDeleted": "Service supprimé",
    "couldNotDeleteService": "Impossible de supprimer le service",
    "enterAppleCredentials": "Veuillez entrer votre Apple ID et votre mot de passe spécifique à l'app",
    "connectingToApple": "Connexion à Apple Calendar...",
    "appleCalendarConnected": "🍎 Apple Calendar connecté avec succès !",
    "selectCalendarFirst": "Veuillez d'abord sélectionner un calendrier",
    "appleSyncEnabled": "🍎 Sync Apple Calendar activée !",
    "failedToEnableSync": "Impossible d'activer la synchronisation : ",
    "syncingWithApple": "Synchronisation avec Apple Calendar...",
    "confirmDisconnectMicrosoft": "Êtes-vous sûr de vouloir déconnecter Microsoft Calendar ?",
    "microsoftDisconnected": "Microsoft Calendar déconnecté",
    "failedToDisconnect": "Échec de la déconnexion : ",
    "logoUploaded": "Logo téléchargé avec succès !",
    "uploadLogo": "Télécharger le logo",
    "logoRequirements": "PNG, JPG ou GIF. Max 2 Mo recommandé. Utilisez de préférence une image de max 400×400px avec un fond transparent.",
    "uploadFailed": "Échec du téléchargement : ",
    "confirmRemoveLogo": "Êtes-vous sûr de vouloir supprimer votre logo ?",
    "logoRemoved": "Logo supprimé",
    "couldNotRemoveLogo": "Impossible de supprimer le logo : ",
    "fileTooLarge": "Le fichier est trop volumineux. Taille maximale : 5 Mo.",
    "couldNotSaveSettings": "Impossible d'enregistrer les paramètres",
    "bookingSettingsSaved": "Paramètres de réservation enregistrés !",
    "linkCopied": "Lien copié dans le presse-papiers !",
    "confirmCleanNotes": "Ceci nettoiera toutes les notes des clients et pianos en supprimant les textes en double et les lignes répétées.\n\nVoulez-vous continuer ?",
    "couldNotLoadTemplate": "Impossible de charger le modèle",
    "fillSubjectAndContent": "Veuillez remplir l'objet et le contenu",
    "saveFailed": "Échec de l'enregistrement",
    "templateSaved": "Modèle enregistré !",
    "saveFailedWithError": "Échec de l'enregistrement : ",
    "confirmResetTemplate": "Êtes-vous sûr de vouloir réinitialiser ce modèle à la version par défaut ? Vos modifications seront supprimées.",
    "resetFailed": "Échec de la réinitialisation",
    "templateReset": "Modèle réinitialisé par défaut",
    "resetFailedWithError": "Échec de la réinitialisation : ",
    "testEmailSending": "Envoi de l'e-mail de test...",
    "sendFailed": "Échec de l'envoi",
    "testEmailSent": "✅ E-mail de test envoyé à votre adresse !",
    "testEmailFailed": "❌ Échec de l'e-mail de test : ",
    "syncEnabled": "Synchronisation activée !",
    "somethingWentWrong": "Une erreur s'est produite",
    "errorSavingSettings": "Erreur lors de l'enregistrement des paramètres",
    "syncing": "Synchronisation...",
    "syncComplete": "Synchronisation terminée ! Éléments synchronisés.",
    "syncFailed": "Échec de la synchronisation",
    "errorSyncing": "Erreur de synchronisation",
    "syncNow": "Synchroniser maintenant",
    "confirmDisconnectGoogle": "Êtes-vous sûr de vouloir déconnecter Google Calendar ? Votre synchronisation sera désactivée et vous devrez vous reconnecter avec Google.",
    "googleDisconnected": "Google Calendar déconnecté",
    "couldNotConnectApple": "Impossible de se connecter à Apple Calendar",
    "connectionError": "Erreur de connexion. Veuillez réessayer.",
    "confirmDisconnectApple": "Êtes-vous sûr de vouloir déconnecter Apple Calendar ?",
    "appleDisconnected": "Apple Calendar déconnecté",
    "couldNotDisconnect": "Impossible de déconnecter",
    "errorDisconnecting": "Erreur lors de la déconnexion",
    "couldNotEnableSync": "Impossible d'activer la synchronisation",
    "singleProviderTitle": "Autre agenda actif",
    "singleProviderMessage": "Votre agenda est connecté à {provider}. Déconnectez d'abord {provider} dans les paramètres ci-dessus avant de changer.",
    "singleProviderError": "Vous avez déjà une synchronisation active avec un autre agenda. Déconnectez d'abord l'agenda actuel.",
    "errorSyncingApple": "Erreur de synchronisation avec Apple Calendar",
    "calendarSelectionSaved": "Sélection de calendrier enregistrée !",
    "couldNotSaveCalendarSelection": "Impossible d'enregistrer la sélection de calendrier",
    "emailSettingsSaved": "Paramètres e-mail enregistrés",
    "errorSavingEmailSettings": "Erreur lors de l'enregistrement des paramètres e-mail",
    "sending": "Envoi...",
    "testEmailSentCheckInbox": "E-mail de test envoyé ! Vérifiez votre boîte de réception.",
    "couldNotSendTestEmail": "Impossible d'envoyer l'e-mail de test",
    "errorSendingTestEmail": "Erreur lors de l'envoi de l'e-mail de test",
    "sendTestEmail": "Envoyer un e-mail de test",
    "languageChanged": "Langue changée",
    "pleaseEnterPassword": "Veuillez entrer votre mot de passe",
    "deleting": "Suppression...",
    "accountDeletedRedirecting": "Compte supprimé avec succès. Redirection...",
    "failedToDeleteAccount": "Impossible de supprimer le compte",
    "deleteMyAccount": "Supprimer mon compte",
    "somethingWentWrongTryAgain": "Une erreur s'est produite. Veuillez réessayer.",
    "companyProfileSaved": "Profil entreprise enregistré !",
    "couldNotSaveCompanyProfile": "Impossible d'enregistrer le profil entreprise : ",
    "failedToConnect": "Échec de la connexion : ",
    "notesCleanedSuccess": "Notes nettoyées !",
    "errorCleaningNotes": "Erreur lors du nettoyage des notes : ",
    "emailsViaPianoPlanner": "Les e-mails seront désormais envoyés via PianoPlanner",
    "errorSaving": "Erreur lors de l'enregistrement : ",
    "enterEmailAddress": "Veuillez entrer votre adresse e-mail",
    "enterAppPassword": "Veuillez entrer votre mot de passe spécifique à l'app",
    "smtpSettingsSaved": "Paramètres SMTP enregistrés ! Testez maintenant la connexion.",
    "smtpTestSuccess": "Test SMTP réussi ! Vérifiez votre boîte de réception.",
    "syncRangeSaved": "Plage de sync enregistrée. Les apps de calendrier se mettront à jour au prochain rafraîchissement.",
    "couldNotSaveRange": "Impossible d'enregistrer la plage : ",
    "calendarFeedActive": "Le flux de calendrier est maintenant actif ! Copiez l'URL pour vous abonner.",
    "couldNotEnableFeed": "Impossible d'activer le flux",
    "couldNotEnableFeedError": "Impossible d'activer le flux : ",
    "confirmDisableFeed": "Êtes-vous sûr de vouloir désactiver le flux de calendrier ? Les abonnements existants cesseront de fonctionner.",
    "calendarFeedDisabled": "Flux de calendrier désactivé",
    "couldNotDisableFeed": "Impossible de désactiver le flux",
    "couldNotDisableFeedError": "Impossible de désactiver le flux : ",
    "confirmRegenerateFeed": "Êtes-vous sûr de vouloir générer un nouveau lien ? Le lien actuel cessera de fonctionner et vous devrez vous réabonner dans vos apps de calendrier.",
    "generating": "Génération...",
    "newFeedLinkGenerated": "Nouveau lien de flux généré. N'oubliez pas de vous réabonner !",
    "couldNotRegenerateFeed": "Impossible de régénérer le flux",
    "couldNotGenerateNewLink": "Impossible de générer un nouveau lien : ",
    "syncCompleteItems": "Synchronisation terminée ! Éléments synchronisés.",
    "errors": "erreurs",
    "syncFailedError": "Échec de la synchronisation : ",
    "workshopAvailability": "Disponibilité atelier",
    "workshopAvailabilityHint": "Définissez des heures d'atelier dédiées. Pendant ces heures, aucun rendez-vous client ne sera planifié — uniquement les travaux d'atelier.",
    "enableWorkshopHours": "Activer les heures d'atelier",
    "workshopAddress": "Adresse de l'atelier",
    "workshopAddressPlaceholder": "ex. 5 Rue Industrielle, 75001 Paris",
    "workshopAddressHint": "Laissez vide pour utiliser l'adresse de votre entreprise pour les rendez-vous d'atelier.",
    "saveWorkshopAvailability": "Enregistrer la disponibilité atelier",
    "workshopAvailabilitySaved": "Disponibilité atelier enregistrée",
    "workshopAvailabilityFailed": "Échec de l'enregistrement de la disponibilité atelier",
    "availabilitySaved": "Disponibilité hebdomadaire enregistrée",
    "availabilityFailed": "Échec de l'enregistrement de la disponibilité",
    "theaterAvailabilitySaved": "Disponibilité théâtre enregistrée",
    "theaterAvailabilityFailed": "Échec de l'enregistrement de la disponibilité théâtre",
    "saving": "Enregistrement...",
    "travel": {
      "title": "Paramètres de déplacement",
      "desc": "Définissez la distance maximale que vous souhaitez parcourir et le temps de pause entre les rendez-vous.",
      "enableLimits": "Activer les limites de déplacement",
      "bookingRadius": "Zone de service pour les réservations en ligne",
      "bookingRadiusDesc": "À quelle distance maximale vos clients peuvent-ils habiter pour réserver en ligne ?",
      "maxTravelBooking": "Temps de trajet maximum pour les réservations",
      "noLimit": "Pas de limite",
      "noPreference": "Pas de préférence",
      "farMessage": "Message pour les lieux éloignés",
      "farMessageHint": "Ce message s'affiche quand un client habite trop loin pour réserver en ligne.",
      "routeEfficiency": "Temps de trajet entre rendez-vous",
      "routeEfficiencyDesc": "Combien de temps souhaitez-vous conduire entre deux clients le même jour au maximum ? Le système utilise cette préférence pour planifier votre journée efficacement.",
      "maxBetween": "Temps de trajet entre rendez-vous",
      "maxBetweenInfo": "💡 Cela ne concerne que les <strong>suggestions intelligentes</strong>. Les clients plus éloignés peuvent toujours être planifiés manuellement ou réserver via votre lien de réservation. Ce réglage détermine quels horaires le système suggère automatiquement — pas quels clients vous pouvez accepter.",
      "maxBetweenAdviceNone": "⚪ <strong>Aucune préférence définie.</strong><br>▸ Le système planifie toujours intelligemment : les clients proches obtiennent la <strong>priorité</strong> et les jours avec plusieurs clients dans la même zone sont regroupés<br>▸ Aucun client n'est rétrogradé — tout le monde a une chance équitable<br>▸ Idéal si vous avez une grande zone de service ou souhaitez donner au système une flexibilité maximale",
      "maxBetweenAdvice10": "🔴 <strong>Très serré — max. ~10 min.</strong><br>▸ Clients < 10 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 10–15 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 15 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Idéal pour un quartier ou petit village",
      "maxBetweenAdvice15": "🟠 <strong>Serré — max. ~15 min.</strong><br>▸ Clients < 15 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 15–22 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 22 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Adapté à une seule ville ou petite commune",
      "maxBetweenAdvice20": "🟡 <strong>Compact — max. ~20 min.</strong><br>▸ Clients < 20 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 20–30 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 30 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Votre ville et les communes voisines directes",
      "maxBetweenAdvice25": "🟢 <strong>Moyen — max. ~25 min.</strong><br>▸ Clients < 25 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 25–37 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 37 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Une petite région. Bon si vous desservez quelques communes",
      "maxBetweenAdvice30": "🟢 <strong>Standard — max. ~30 min.</strong> ⭐ Le plus choisi<br>▸ Clients < 30 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 30–45 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 45 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Bon équilibre — journées complètes dans la même région, sans manquer de clients",
      "maxBetweenAdvice35": "🔵 <strong>Détendu — max. ~35 min.</strong><br>▸ Clients < 35 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 35–52 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 52 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Région plus large. Peu de clients manqués",
      "maxBetweenAdvice40": "🔵 <strong>Large — max. ~40 min.</strong><br>▸ Clients < 40 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 40–60 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 60 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Grande zone de service. Seuls les longs trajets (1h+) sont classés plus bas",
      "maxBetweenAdvice45": "🔵 <strong>Grand — max. ~45 min.</strong><br>▸ Clients < 45 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 45–67 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 67 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Adapté à un département entier",
      "maxBetweenAdvice60": "⚪ <strong>Maximum — max. ~60 min.</strong><br>▸ Clients < 60 min de trajet obtiennent la <strong>priorité</strong><br>▸ Clients 60–90 min de trajet apparaissent <strong>plus bas dans la liste</strong><br>▸ Clients > 90 min de trajet apparaissent <strong>uniquement s'il n'y a pas de meilleures options</strong><br>▸ Pratiquement tout est suggéré",
      "travelInfoHint": "Le système planifie votre journée le plus efficacement possible. Les clients proches obtiennent la priorité, les clients plus éloignés apparaissent plus bas dans les suggestions.",
      "analyzeBtn": "Analyser ma base clients",
      "analyzeLoading": "Analyse de la base clients en cours...",
      "analyzeNotEnough": "Pas assez de clients avec des données d'adresse pour analyser. Au moins 5 clients avec une adresse requis.",
      "analyzeTitle": "Analyse de votre base clients",
      "analyzeCustomers": "clients analysés",
      "analyzeTopCities": "Plus grandes villes",
      "analyzeMedian": "Distance médiane entre clients",
      "analyzeCoverage": "Pourcentage de paires de clients dans chaque réglage",
      "analyzeRecommended": "recommandé",
      "analyzeAdvice": "Recommandation",
      "analyzeExplain": "Cela couvre la plupart des trajets entre clients consécutifs. Les clients plus éloignés apparaissent toujours dans vos suggestions mais classés plus bas.",
      "analyzeApply": "Appliquer ce réglage",
      "analyzeError": "Une erreur s'est produite lors de l'analyse. Veuillez réessayer.",
      "saveTravelSettings": "Enregistrer les paramètres de déplacement",
      "30min": "30 minutes",
      "45min": "45 minutes",
      "1hour": "1 heure",
      "90min": "1h30",
      "2hours": "2 heures",
      "15min": "15 minutes",
      "10min": "10 minutes",
      "20min": "20 minutes",
      "25min": "25 minutes",
      "35min": "35 minutes",
      "40min": "40 minutes",
      "bookingRadiusHint": "À quelle distance maximale vos clients peuvent-ils habiter pour réserver en ligne ?",
      "bookingRadiusExplain": "🗺️ C'est la limite de votre zone de service pour les réservations en ligne. Les clients habitant plus loin ne peuvent pas réserver en ligne — ils verront un message pour vous contacter. Vous pouvez toujours les planifier manuellement.",
      "maxBookingTravel": "Temps de trajet maximum pour les réservations",
      "routeEfficiencyHint": "Combien de temps souhaitez-vous conduire entre deux clients le même jour au maximum ? Le système utilise cette préférence pour planifier votre journée efficacement.",
      "saveTravel": "Enregistrer les paramètres de déplacement",
      "trafficPrediction": "Prévision du trafic",
      "trafficPredictionHint": "Utilisez les conditions de circulation prévues lors du calcul des temps de trajet entre les rendez-vous.",
      "enableTrafficPrediction": "Activer la prévision du trafic",
      "trafficPredictionExplain": "🚦 Les temps de trajet tiennent compte du trafic prévu au moment du rendez-vous. Pendant les heures de pointe, des temps de trajet plus longs sont calculés pour une planification plus réaliste.",
      "workshopAddress": "Adresse de l'atelier",
      "maxTravelTime": "Temps de trajet maximum",
      "maxTravelDistance": "Distance maximum"
    },
    "syncDisclaimer": "Attention : lors de l’activation de la synchronisation du calendrier, les données de rendez-vous seront partagées avec Google (sous-traitant externe). PianoPlanner n’est pas responsable du traitement de vos données par Google. Voir notre Accord de Sous-traitance (Art. 3.3).\n\nVoulez-vous continuer ?",
    "syncDisclaimerApple": "Attention : lors de la connexion d’Apple Calendar, les données de rendez-vous seront partagées avec Apple (sous-traitant externe). PianoPlanner n’est pas responsable du traitement de vos données par Apple. Voir notre Accord de Sous-traitance (Art. 3.3).\n\nVoulez-vous continuer ?",
    "validateVat": "Valider",
    "blockedDays": {
      "title": "Vacances et jours bloqués",
      "hint": "Jours où vous n'êtes pas disponible. Les clients ne peuvent pas réserver ces jours-là.",
      "fromDate": "Date de début",
      "toDate": "Date de fin",
      "reason": "Raison",
      "add": "Ajouter",
      "empty": "Aucun jour bloqué programmé",
      "remove": "Supprimer",
      "loadError": "Impossible de charger les jours bloqués",
      "selectStartDate": "Sélectionnez une date de début",
      "endBeforeStart": "La date de fin ne peut pas être antérieure à la date de début",
      "unavailable": "Indisponible",
      "daysBlocked": "{count} jours bloqués",
      "dayBlocked": "1 jour bloqué",
      "blockError": "Impossible de bloquer les jours",
      "confirmRemoveSingle": "Êtes-vous sûr de vouloir débloquer ce jour ?",
      "confirmRemoveMultiple": "Êtes-vous sûr de vouloir débloquer ces {count} jours ?",
      "dayUnblocked": "Jour débloqué",
      "daysUnblocked": "{count} jours débloqués",
      "through": "au",
      "dayCount": "{count} jours"
    },
    "panelIntro": {
      "accountTitle": "Compte",
      "accountDesc": "Gérez vos informations personnelles et les paramètres de votre compte",
      "businessTitle": "Entreprise",
      "businessDesc": "Informations sur votre entreprise, adresse et coordonnées",
      "servicesTitle": "Services",
      "servicesDesc": "Définissez vos services, tarifs et durées",
      "calendarTitle": "Calendrier",
      "calendarDesc": "Paramètres du calendrier, disponibilité et synchronisation",
      "emailTitle": "E-mail",
      "emailDesc": "Modèles d'e-mail et paramètres de notification",
      "bookingTitle": "Réservation",
      "bookingDesc": "Paramètres de réservation en ligne et planification",
      "integrationsTitle": "Intégrations",
      "integrationsDesc": "Connectez-vous à des calendriers, à la comptabilité et à d'autres services"
    },
    "services": {
      "title": "Services",
      "desc": "Gérez vos services et tarifs",
      "newService": "Nouveau service",
      "newServiceTitle": "Nouveau service",
      "serviceName": "Nom du service",
      "description": "Description",
      "duration": "Durée",
      "rate": "Tarif",
      "bufferBefore": "Tampon avant",
      "bufferAfter": "Tampon après",
      "calendarColor": "Couleur du calendrier",
      "customerTypes": "Types de clients",
      "customerTypesDesc": "Restreindre ce service à certains types de clients",
      "cancel": "Annuler",
      "loadingServices": "Chargement des services...",
      "serviceNamePlaceholder": "ex. Accord piano à queue",
      "descriptionPlaceholder": "Description courte"
    },
    "tuningReminders": {
      "title": "Rappels d'accord",
      "description": "Envoyez automatiquement des rappels aux clients lorsque leur piano doit être accordé",
      "enable": "Activer",
      "enableDesc": "Envoyer automatiquement des rappels d'accord",
      "advanceDays": "Jours à l'avance",
      "daysBeforeDue": "jours avant l'échéance",
      "followupInterval": "Intervalle de relance",
      "daysBetweenFollowups": "jours entre les relances",
      "maxFollowups": "Maximum de relances",
      "remindersPer": "rappels par",
      "sendTime": "Heure d'envoi",
      "sendTimeDesc": "Heure à laquelle les rappels sont envoyés",
      "editTemplate": "Modifier le modèle",
      "sendTest": "Envoyer un test",
      "howItWorks": "Comment ça marche",
      "howStep1": "Définissez un intervalle d'accord par piano",
      "howStep2": "Le système vérifie quotidiennement quels pianos sont à accorder",
      "howStep3": "Un e-mail de rappel est envoyé automatiquement",
      "howStep4": "Le client peut réserver directement via le lien",
      "howStep5": "Les relances sont envoyées automatiquement",
      "statsTotalSent": "Total envoyé",
      "statsThisMonth": "Ce mois-ci",
      "statsOptedOut": "Désinscrits",
      "saved": "Paramètres de rappel d'accord enregistrés",
      "saveError": "Erreur lors de l'enregistrement des paramètres de rappel",
      "testSent": "Rappel test envoyé à votre propre adresse e-mail. Vérifiez votre boîte de réception.",
      "testError": "Impossible d'envoyer le rappel test",
      "active": "Actif",
      "inactive": "Inactif",
      "previewTitle": "Attention",
      "previewWarning": "Il y a actuellement {pianoCount} pianos de {customerCount} clients nécessitant un accord. Après enregistrement, les rappels seront envoyés.",
      "previewNone": "Il n'y a actuellement aucun piano nécessitant un accord. Les pianos nouvellement importés ne sont inclus qu'après 24 heures."
    },
    "loading": "Chargement des paramètres...",
    "workshopProMessage": "Fonctionnalité Business — Disponible avec l'abonnement Business",
    "calendar": {
      "sync": "Synchroniser",
      "syncDesc": "Synchronisez votre calendrier avec Google ou Apple",
      "singleProviderTitle": "Un seul calendrier actif",
      "singleProviderMessage": "Vous ne pouvez utiliser qu'une seule intégration de calendrier à la fois",
      "historyImport": "Import historique",
      "historyImportDesc": "Importez vos rendez-vous existants depuis votre calendrier",
      "addToCalendar": "Ajouter à votre calendrier :",
      "appSpecificPassword": "Mot de passe spécifique à l'application",
      "appleDesc": "Synchronisez avec iCloud / Apple Calendrier.",
      "appleId": "Apple ID",
      "appleTitle": "Apple Calendrier",
      "calendarLabel": "Calendrier",
      "connect": "Connecter",
      "connectGoogle": "Connecter un compte Google",
      "googleLoginRequired": "La synchronisation Google Calendar nécessite une connexion avec votre compte Google.",
      "googleLoginRequiredDesc": "Déconnectez-vous et choisissez 'Se connecter avec Google' sur l'écran de connexion. Vos données existantes seront conservées.",
      "googleLoginRequiredBtn": "Se déconnecter et se connecter avec Google",
      "connectMicrosoft": "Connecter un compte Microsoft",
      "copy": "Copier",
      "disable": "Désactiver",
      "displayDesc": "Configurez les heures visibles dans votre vue calendrier.",
      "displayTitle": "Affichage du calendrier",
      "downloadIcs": "Télécharger .ics",
      "enableFeed": "Activer le flux",
      "enableSync": "✓ Activer la synchronisation",
      "endHour": "Heure de fin",
      "exportDesc": "Téléchargez votre calendrier en fichier .ics pour sauvegarde ou importation.",
      "exportHint": "Laissez les dates vides pour exporter 1 an en arrière et en avant.",
      "exportOnly": "Exporter uniquement",
      "exportOnlyAppleDesc": "PianoPlanner → Apple",
      "exportOnlyGoogleDesc": "PianoPlanner → Google",
      "exportTitle": "Export / Sauvegarde",
      "feedDesc": "Abonnez-vous à votre calendrier depuis n'importe quelle application (flux iCal en lecture seule).",
      "feedTitle": "Abonnement calendrier",
      "feedUrlLabel": "URL d'abonnement :",
      "from": "De",
      "googleDesc": "Synchronisation bidirectionnelle entre PianoPlanner et Google Agenda.",
      "betaDisclaimer": "La synchronisation Google Agenda est actuellement en bêta. Google examine notre application pour vérification. Pendant cette période, un écran d'avertissement peut s'afficher lors de la connexion. C'est normal et vos données sont en sécurité.",
      "googleTitle": "Google Agenda",
      "importOnly": "Importer uniquement",
      "importOnlyAppleDesc": "Apple → PianoPlanner",
      "importOnlyGoogleDesc": "Google → PianoPlanner",
      "inactive": "Inactif",
      "lastSync": "Dernière synchronisation :",
      "microsoftConnected": "Connecté !",
      "microsoftDesc": "Synchronisez avec Outlook.com, Hotmail ou Microsoft 365.",
      "microsoftSynced": "Votre calendrier Microsoft est synchronisé.",
      "microsoftTitle": "Microsoft 365 / Outlook",
      "monthsAhead": "Mois en avance",
      "never": "Jamais",
      "newLink": "Nouveau lien",
      "outsideHoursInfo": "Les rendez-vous en dehors de ces heures affichent un indicateur au-dessus/en dessous du calendrier.",
      "saveRange": "Enregistrer la plage",
      "selectCalendar": "Sélectionner le calendrier :",
      "setupInstructions": "Instructions d'installation :",
      "startDate": "Date de début",
      "startHour": "Heure de début",
      "syncDirection": "Direction de synchronisation",
      "syncRange": "Plage de synchronisation :",
      "to": "À",
      "twoWayAppleDesc": "PianoPlanner ↔ Apple (recommandé)",
      "twoWayGoogleDesc": "PianoPlanner ↔ Google (recommandé)",
      "twoWaySync": "Synchronisation bidirectionnelle",
      "appleIdLabel": "Identifiant Apple",
      "appPasswordLabel": "Mot de passe spécifique à l'application",
      "feedInstructionsTitle": "Ajouter à votre calendrier :",
      "feedInstructionApple": "Apple : Fichier → Nouvel abonnement à un calendrier",
      "feedInstructionGoogle": "Google : Paramètres → Ajouter un calendrier → À partir d'une URL",
      "feedInstructionOutlook": "Outlook : Ajouter un calendrier → S'abonner depuis le web",
      "feedAutoRefresh": "Les applications de calendrier se rafraîchissent automatiquement (généralement toutes les heures).",
      "disableFeed": "Désactiver",
      "calendarExportTitle": "Exporter / Sauvegarder",
      "calendarExportDesc": "Téléchargez votre calendrier en fichier .ics pour sauvegarde ou importation.",
      "singleProviderError": "Vous ne pouvez connecter qu'un seul fournisseur de calendrier. Déconnectez d'abord le fournisseur actuel."
    },
    "export": {
      "title": "Exporter",
      "tipTitle": "Astuce",
      "appointments": "Rendez-vous",
      "customers": "Clients",
      "description": "Téléchargez toutes vos données professionnelles en tant que sauvegarde. Le fichier contient les clients, pianos, rendez-vous, historique de service et paramètres.",
      "downloadBtn": "Télécharger la sauvegarde",
      "pianos": "Pianos",
      "serviceRecords": "Historique de service",
      "statusLabel": "Sauvegarde & Téléchargement",
      "tipText": "Conservez le fichier dans un endroit sûr, par exemple dans votre cloud personnel ou sur un disque externe. Ainsi, vous avez toujours une copie de vos données.",
      "preparing": "Préparation de l'export...",
      "success": "Sauvegarde téléchargée !",
      "error": "Échec de l'export"
    },
    "iban": {
      "validateBtn": "Valider",
      "enterNumber": "Veuillez d'abord saisir un IBAN",
      "invalidFormat": "Format IBAN invalide",
      "wrongLength": "L'IBAN pour {country} doit comporter {length} caractères",
      "invalid": "IBAN invalide — vérifiez les chiffres",
      "valid": "IBAN valide"
    },
    "mileage": {
      "title": "Suivi kilométrique",
      "description": "Suivez vos kilomètres professionnels et privés",
      "business": "Professionnel",
      "private": "Privé",
      "businessKm": "Km professionnels",
      "privateKm": "Km privés",
      "totalKm": "Total km",
      "year": "Année",
      "licensePlate": "Plaque d'immatriculation",
      "vehicleName": "Nom du véhicule",
      "vehicleTitle": "Véhicule",
      "saveVehicle": "Enregistrer le véhicule",
      "odometerTitle": "Compteur kilométrique",
      "odometerReading": "Relevé du compteur",
      "odometerDate": "Date du relevé",
      "manualTrips": "Trajets manuels",
      "manualTripsTitle": "Trajets manuels",
      "addTrip": "Ajouter un trajet",
      "addTripTitle": "Ajouter un trajet",
      "tripDate": "Date",
      "tripFrom": "De",
      "tripTo": "À",
      "tripDistance": "Distance (km)",
      "tripPurpose": "Objet",
      "tripPrivate": "Privé",
      "tripRoundTrip": "Aller-retour",
      "monthlyBreakdown": "Répartition mensuelle",
      "dashboardLink": "Voir le tableau de bord",
      "exportCSV": "Exporter CSV",
      "exportPDF": "Exporter PDF",
      "trips": "trajets",
      "pdfComingSoon": "Export PDF bientôt disponible !",
      "vehicleSaved": "Véhicule enregistré",
      "vehicleError": "Erreur lors de l'enregistrement du véhicule",
      "noReadings": "Aucun relevé kilométrique saisi.",
      "selectDate": "Sélectionnez une date",
      "enterReading": "Saisissez un relevé kilométrique valide",
      "readingSaved": "Relevé kilométrique enregistré",
      "tripAdded": "Trajet ajouté",
      "tripDeleted": "Trajet supprimé",
      "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce trajet ?",
      "enterDistance": "Saisissez une distance",
      "noData": "Aucune donnée kilométrique chargée",
      "generatingPdf": "Génération du PDF...",
      "pdfReady": "PDF téléchargé",
      "pdfError": "Erreur lors de la génération du PDF",
      "exportPrefix": "suivi-kilometrique",
      "pdfTitle": "Registre kilométrique",
      "pdfGeneratedOn": "Généré le",
      "pdfAdministration": "administration kilométrique",
      "pdfCompanyDetails": "Coordonnées de l'entreprise",
      "pdfVehicle": "Véhicule",
      "pdfLicensePlate": "Immatriculation",
      "pdfStartOdometer": "Compteur initial",
      "pdfEndOdometer": "Compteur final",
      "pdfActuallyDriven": "Réellement parcourus",
      "pdfTotal": "Total",
      "pdfBusiness": "Professionnel",
      "pdfPrivate": "Privé",
      "pdfMonthlyOverview": "Aperçu mensuel",
      "pdfMonth": "Mois",
      "pdfTripLog": "Journal des trajets",
      "pdfDate": "Date",
      "pdfType": "Type",
      "pdfFrom": "De",
      "pdfTo": "Vers",
      "pdfPurpose": "Objet",
      "pdfOutward": "Aller",
      "pdfReturn": "Retour",
      "pdfSource": "Source",
      "pdfPrint": "Imprimer / Enregistrer PDF",
      "pdfLegendOverride": "Distance corrigée manuellement",
      "pdfLegendManual": "Trajet ajouté manuellement",
      "pdfFooterNote": "Ce document a été généré automatiquement par PianoPlanner le",
      "pdfTaxNote": "Conservez ce document avec vos archives fiscales conformément aux exigences légales.",
      "pdfMonthNames": "Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre",
      "csvHeaderDate": "Date",
      "csvHeaderType": "Type",
      "csvHeaderTitle": "Titre",
      "csvHeaderFrom": "De",
      "csvHeaderTo": "À",
      "csvHeaderOneWay": "Aller simple",
      "csvHeaderRoundTrip": "Aller-retour",
      "csvHeaderTotal": "Total",
      "csvHeaderPurpose": "Motif",
      "csvYes": "Oui",
      "csvNo": "Non",
      "csvManualSuffix": "(manuel)"
    },
    "advice": {
      "bookingText": "Activez la réservation en ligne pour que vos clients puissent prendre rendez-vous eux-mêmes",
      "bookingTitle": "Réservation en ligne",
      "bufferText": "Ajoutez du temps tampon entre les rendez-vous pour le trajet",
      "bufferTitle": "Temps tampon",
      "calendarSyncText": "Synchronisez votre calendrier pour éviter les doubles réservations",
      "calendarSyncTitle": "Synchronisation du calendrier",
      "companyText": "Complétez vos informations d'entreprise pour les factures",
      "companyTitle": "Informations entreprise",
      "notificationsText": "Configurez les notifications par e-mail pour vos clients",
      "notificationsTitle": "Notifications",
      "smtpText": "Configurez votre propre serveur SMTP pour un meilleur envoi d'e-mails",
      "smtpText2": "Entrez votre nom et adresse e-mail pour que les clients voient votre nom comme expéditeur. Les réponses vont directement dans votre boîte de réception.",
      "smtpTitle": "Serveur SMTP",
      "travelText": "Définissez votre zone de déplacement pour optimiser vos itinéraires",
      "travelTitle": "Zone de déplacement",
      "smtpBulkTitle": "Envoi de rappels en masse ?",
      "smtpBulkText": "Le serveur mail par défaut de PianoPlanner convient aux petits volumes. Si vous avez 100+ clients et utilisez les rappels automatiques, configurez votre propre serveur SMTP pour une meilleure délivrabilité et moins de rebonds."
    },
    "booking": {
      "availableServices": "Services disponibles",
      "desc": "Permettez aux clients de réserver en ligne",
      "enableLink": "Activer le lien de réservation",
      "enableTheater": "Activer le mode théâtre",
      "linkDisabled": "Lien de réservation désactivé",
      "maxAdvance": "Réservation maximum à l'avance",
      "minAdvance": "Réservation minimum à l'avance",
      "pageTitle": "Réservation en ligne",
      "preview": "Aperçu",
      "proFeature": "Fonctionnalité Pro",
      "requiredFields": "Champs obligatoires",
      "saveAvailability": "Enregistrer la disponibilité",
      "saveTheater": "Enregistrer le mode théâtre",
      "selectServices": "Sélectionner les services",
      "theaterAvailability": "Disponibilité théâtre",
      "theaterHint": "Les théâtres peuvent réserver directement via leur lien",
      "theaterProMsg": "Le mode théâtre nécessite un abonnement Pro",
      "theaterWindow": "Fenêtre de réservation théâtre",
      "theaterWindowHint": "Période pendant laquelle les théâtres peuvent réserver",
      "upgradeToPro": "Passer au Pro",
      "weeklyAvailability": "Disponibilité hebdomadaire",
      "weeklyAvailabilityHint": "Définissez vos heures de travail par jour.",
      "welcomeMessage": "Message de bienvenue (optionnel)",
      "yourUrl": "Votre URL de réservation :",
      "yourBookingUrl": "Votre URL de réservation :",
      "copyLink": "Copier",
      "previewLink": "Aperçu",
      "enableBookingLink": "Activer le lien de réservation",
      "pageTitlePlaceholder": "Prendre rendez-vous",
      "welcomePlaceholder": "Message affiché sur votre page de réservation",
      "availableServicesDesc": "Sélectionnez les services que les clients peuvent réserver via le lien public",
      "theaterAvailabilityHint": "Disponibilité séparée optionnelle pour les théâtres/salles. Activez ceci pour permettre à certains clients de réserver en dehors des heures normales.",
      "theaterBookingWindow": "Fenêtre de réservation théâtre",
      "theaterBookingWindowHint": "Délais de réservation différents pour les clients théâtre. Utile pour les réservations de dernière minute.",
      "1day": "1 jour",
      "2days": "2 jours",
      "3days": "3 jours",
      "4days": "4 jours",
      "5days": "5 jours",
      "1week": "1 semaine",
      "2weeks": "2 semaines",
      "1month": "1 mois",
      "2months": "2 mois",
      "3months": "3 mois",
      "6months": "6 mois",
      "9months": "9 mois",
      "1year": "1 an",
      "noMinimum": "Pas de minimum (immédiat)",
      "1hour": "1 heure",
      "2hours": "2 heures",
      "4hours": "4 heures",
      "8hours": "8 heures (même jour)"
    },
    "email": {
      "smtpDisclaimerTitle": "Avertissement SMTP",
      "smtpDisclaimerText": "PianoPlanner n'est pas responsable des problèmes de livraison d'e-mails avec des serveurs SMTP personnalisés",
      "sslTls": "SSL/TLS",
      "appPassword": "Mot de passe spécifique à l'application",
      "appPasswordHint": "Ce n'est pas votre mot de passe habituel. Suivez les instructions ci-dessus.",
      "availableVariables": "Variables disponibles",
      "bccToSelf": "Copie à moi-même (CCI)",
      "bccToSelfDesc": "Recevez automatiquement une copie de tous les e-mails envoyés aux clients (confirmations, rappels, annulations, factures). Utile pour vérifier ce que vos clients reçoivent.",
      "cancel": "Annuler",
      "cancellations": "E-mails d'annulation",
      "cancellationsDesc": "Informer le client en cas d'annulation",
      "clickRefreshPreview": "Cliquez \"Actualiser\" pour voir un aperçu",
      "configDesc": "Envoyez des e-mails depuis votre propre adresse ou utilisez celle par défaut de PianoPlanner.",
      "configTitle": "Configuration e-mail",
      "confirmations": "E-mails de confirmation",
      "confirmationsDesc": "Envoyer lors de la réservation d'un rendez-vous",
      "contentHtml": "Contenu (HTML)",
      "editTemplateTitle": "Modifier le modèle d'e-mail",
      "editorHint": "Utilisez l'éditeur complet pour une meilleure expérience avec aperçu en direct.",
      "emailAddress": "Adresse e-mail",
      "loading": "Chargement...",
      "newBookingAlerts": "Alertes nouvelles réservations",
      "newBookingAlertsDesc": "Recevez une notification lorsque des clients réservent",
      "notificationsDesc": "E-mails automatiques aux clients pour les rendez-vous.",
      "notificationsTitle": "Notifications",
      "openEditor": "Ouvrir l'éditeur de modèles",
      "port": "Port",
      "preview": "Aperçu",
      "provider": "Fournisseur e-mail",
      "refresh": "Actualiser",
      "reminders": "E-mails de rappel",
      "remindersDesc": "Envoyer avant le rendez-vous",
      "reminder1Label": "Rappel 1",
      "reminder2Label": "Rappel 2",
      "reminderExplanation": "Les clients reçoivent automatiquement un e-mail de rappel avant leur rendez-vous. Définissez un ou deux rappels — idéal quand vous planifiez à l'avance, pour que les clients aient le temps de reporter.",
      "reminderTip": "💡 Conseil : combinez par ex. 7 jours + 24 heures, pour que les clients aient le temps de reporter si nécessaire.",
      "reminderOff": "Désactivé",
      "hours2": "2 heures avant",
      "hours6": "6 heures avant",
      "hours12": "12 heures avant",
      "hours24": "24 heures avant",
      "hours48": "48 heures avant",
      "days5": "5 jours avant",
      "days7": "7 jours avant",
      "reminder2MustBeShorter": "Le rappel 2 doit être plus court que le rappel 1 (plus proche du rendez-vous)",
      "resetToDefault": "Réinitialiser par défaut",
      "sendReminder": "Envoyer un rappel",
      "sendTest": "Envoyer un test",
      "sendVia": "Envoyer les e-mails via :",
      "senderName": "Nom de l'expéditeur (optionnel)",
      "senderName2": "Nom de l'expéditeur",
      "replyEmail": "Adresse e-mail (pour les réponses)",
      "senderDetails": "Vos coordonnées d'expéditeur",
      "providerTransip": "TransIP",
      "advancedSmtp": "Avancé : serveur SMTP personnalisé (optionnel)",
      "advancedSmtpDesc": "Par défaut, les e-mails sont envoyés via notre serveur sécurisé avec votre nom comme expéditeur. Vous souhaitez envoyer des e-mails directement via votre propre serveur de messagerie ? Entrez vos paramètres SMTP ci-dessous.",
      "smtpHost": "Hôte SMTP",
      "subject": "Objet",
      "templateActive": "Modèle actif",
      "templatesDesc": "Personnalisez le contenu des e-mails automatiques avec votre propre texte et style.",
      "templatesTitle": "Modèles d'e-mails",
      "test": "Tester",
      "usingPianoplanner": "Via PianoPlanner",
      "viaOwn": "Mon propre e-mail",
      "viaOwnDesc": "E-mails envoyés depuis votre adresse e-mail personnelle",
      "viaPianoplanner": "PianoPlanner (par défaut)",
      "viaPianoplannerDesc": "E-mails envoyés en votre nom via noreply@pianoplanner.com",
      "ownEmailConfigured": "E-mail personnel actif",
      "ownEmailActive": "E-mail personnel",
      "emailsSentFrom": "Les e-mails seront envoyés depuis :",
      "notVerified": "Non vérifié",
      "testToActivate": "Testez la connexion pour activer vos paramètres",
      "pianoplannerEmail": "E-mail PianoPlanner",
      "emailsViaPianoplannerDesc": "Les e-mails sont envoyés en votre nom via noreply@pianoplanner.com",
      "providerGmail": "Gmail / Google Workspace",
      "providerIcloud": "iCloud / Apple Mail",
      "providerOutlook": "Outlook / Microsoft 365",
      "providerCustom": "Autre (configuration manuelle)",
      "hoursBefore": "heures avant",
      "senderNamePlaceholder": "ex. Accordeur Piano Martin",
      "senderNameHelp": "Les clients verront ceci comme expéditeur de vos e-mails",
      "replyEmailPlaceholder": "info@votreentreprise.fr",
      "replyEmailHelp": "Les réponses des clients seront envoyées à cette adresse",
      "subjectPlaceholder": "Ex. Confirmation : {{service}} le {{date}}"
    },
    "emailLog": {
      "title": "Journal des e-mails",
      "description": "Aperçu de tous les e-mails envoyés",
      "loading": "Chargement du journal...",
      "refresh": "Actualiser",
      "searchPlaceholder": "Rechercher des e-mails...",
      "colDate": "Date",
      "colRecipient": "Destinataire",
      "colSubject": "Objet",
      "colStatus": "Statut",
      "statusSent": "Envoyé",
      "statusFailed": "Échoué",
      "empty": "Aucun e-mail envoyé pour le moment",
      "loadError": "Impossible de charger le journal des e-mails",
      "totalEmails": "e-mail(s)",
      "selectAllPage": "Sélectionner la page",
      "deleteSelected": "Supprimer la sélection",
      "selectedCount": "{count} sélectionné(s)",
      "confirmDelete": "Êtes-vous sûr de vouloir supprimer {count} e-mail(s) ?",
      "deleted": "{count} e-mail(s) supprimé(s)",
      "deleteError": "Impossible de supprimer les e-mails"
    },
    "company": {
      "desc": "Informations sur votre entreprise",
      "ownerName": "Nom du propriétaire",
      "kvk": "SIRET",
      "vat": "TVA",
      "iban": "IBAN",
      "bic": "BIC",
      "basicInfo": "Informations de base",
      "logoDesc": "Téléchargez votre logo pour personnaliser les e-mails et votre page de réservation.",
      "logoTitle": "Logo de l'entreprise",
      "removeLogo": "Supprimer",
      "saveCompany": "Enregistrer l'entreprise",
      "searchAddress": "Rechercher une adresse",
      "uploadLogo": "Télécharger le logo",
      "searchAddressPlaceholder": "Commencez à taper pour rechercher..."
    },
    "vat": {
      "title": "TVA",
      "enterNumber": "Veuillez d'abord saisir un numéro de TVA",
      "validating": "Validation en cours...",
      "valid": "Numéro de TVA valide",
      "invalid": "Numéro de TVA invalide",
      "reverseCharge": "Autoliquidation (0 %) — TVA reportée sur l'acheteur",
      "serviceDown": "Le service EU VIES est temporairement indisponible. Veuillez réessayer plus tard.",
      "error": "Erreur lors de la validation du numéro de TVA",
      "verified": "Vérifié via EU VIES",
      "validateBtn": "Valider"
    },
    "sync": {
      "title": "Synchronisation",
      "notConnected": "Non connecté",
      "needsReauth": "Reconnexion requise",
      "active": "Actif",
      "notSynced": "non synchronisé",
      "connectedSyncOff": "Connecté (sync. désactivée)",
      "pendingInQueue": "synchronisation(s) en attente",
      "failed": "échoué",
      "forceSync": "Forcer la synchronisation"
    },
    "appleCalendarSavedWait": "Compte enregistré avec succès ! Vos calendriers peuvent mettre quelques secondes à apparaître.",
    "confirmSwitchToPianoplanner": "Êtes-vous sûr de vouloir revenir à l'e-mail PianoPlanner ? Vos paramètres SMTP seront supprimés.",
    "dayAvailable": "Disponible",
    "dayNotAvailable": "Non disponible",
    "timeTo": "à",
    "bccEnabled": "Copie BCC activée",
    "bccDisabled": "Copie BCC désactivée",
    "smtpServerError": "Le serveur a donné une réponse inattendue. Réessayez ou reconnectez-vous.",
    "lastSyncAt": "Dernière synchronisation :",
    "placeholders": {
      "startAddress": "Adresse de départ",
      "endAddress": "Adresse d'arrivée",
      "travelExample": "ex. Visite client, récupérer matériel...",
      "odometerExample": "ex. 45230"
    },
    "accounting": {
      "requestPackagePlaceholder": "Ex. FreshBooks, Wave, Sage...",
      "requestNotesPlaceholder": "Ex. quelles fonctionnalités vous avez besoin, lien documentation API..."
    }
  },
  "company": {
    "name": "Nom de l'entreprise",
    "ownerName": "Nom du propriétaire",
    "email": "E-mail",
    "phone": "Téléphone",
    "address": "Adresse",
    "street": "Rue",
    "postalCode": "Code postal",
    "city": "Ville",
    "country": "Pays",
    "kvk": "Registre du commerce",
    "vat": "Numéro de TVA",
    "iban": "IBAN",
    "website": "Site web",
    "postalCodePlaceholder": "75001",
    "cityPlaceholder": "Paris",
    "vatPlaceholder": "ex. FR12345678901",
    "ibanPlaceholder": "ex. FR7630006000011234567890189",
    "countryPlaceholder": "FR"
  },
  "email": {
    "title": "Notifications par e-mail",
    "configured": "E-mail configuré",
    "notConfigured": "E-mail non configuré",
    "confirmations": "E-mails de confirmation",
    "confirmationsDesc": "Envoyer une confirmation lors de la réservation",
    "reminders": "E-mails de rappel",
    "remindersDesc": "Envoyer un rappel avant le rendez-vous",
    "reminderTime": "Envoyer le rappel",
    "hoursBefore": "heures avant",
    "cancellations": "E-mails d'annulation",
    "cancellationsDesc": "Notifier le client en cas d'annulation",
    "newBookings": "Alertes de nouvelles réservations",
    "newBookingsDesc": "Recevoir une notification pour les nouvelles réservations",
    "sendTest": "Envoyer un e-mail test",
    "testSent": "E-mail test envoyé ! Vérifiez votre boîte de réception."
  },
  "booking": {
    "title": "Réservation en ligne",
    "enableBooking": "Activer le lien de réservation",
    "yourLink": "Votre lien de réservation",
    "copy": "Copier",
    "copied": "Copié !",
    "preview": "Aperçu",
    "slug": "URL personnalisée",
    "pageTitle": "Nouveau rendez-vous - PianoPlanner",
    "description": "Description",
    "minAdvance": "Délai minimum de réservation",
    "maxAdvance": "Délai maximum de réservation",
    "hours": "heures",
    "days": "jours",
    "notAvailableOn": "Non disponible le",
    "noSlotsIn14Days": "Aucun créneau trouvé dans les 14 prochains jours.",
    "tryDifferentDate": "Essayez de sélectionner une autre date de départ.",
    "saveAndContinue": "Enregistrer le client & continuer →",
    "skipPiano": "Passer (pas de piano)",
    "continue": "Continuer →",
    "findTime": "Trouver un créneau",
    "differentDate": "Autre date",
    "confirmAppointment": "Confirmer le rendez-vous",
    "scheduleAppointment": "Planifier un rendez-vous",
    "pageSubtitle": "Réservez un nouveau rendez-vous en 4 étapes simples",
    "step1Title": "1. Choisir le service",
    "step2Title": "2. Détails du client",
    "step2bTitle": "2b. Sélectionner le piano",
    "step3Title": "3. Choisir la date et l'heure",
    "step4Title": "4. Confirmer le rendez-vous",
    "searchCustomerPlaceholder": "Rechercher un client existant (nom, e-mail, ville)...",
    "orAddNew": "ou ajouter un nouveau client",
    "nameRequired": "Nom *",
    "phone": "Téléphone",
    "email": "E-mail",
    "selectPianosDesc": "Sélectionnez le(s) piano(s) à entretenir pour ce client.",
    "serviceLabel": "Service :",
    "customerLabel": "Client :",
    "pianosLabel": "Piano(s) :",
    "preferredDate": "Date souhaitée",
    "service": "Service",
    "customer": "Client",
    "piano": "Piano",
    "location": "Emplacement",
    "travelTime": "Temps de trajet",
    "dateTime": "Date et heure",
    "notesOptional": "Notes (facultatif)",
    "notesPlaceholder": "Informations supplémentaires pour ce rendez-vous...",
    "success": "Rendez-vous réservé !",
    "successText": "Le rendez-vous a été ajouté à votre calendrier.",
    "newAppointment": "Nouveau rendez-vous",
    "goToDashboard": "Aller au tableau de bord",
    "onRequest": "Sur demande",
    "noCustomersFound": "Aucun client trouvé",
    "customerSelected": "Client sélectionné",
    "differentCustomer": "Autre client",
    "saveCustomerError": "Impossible d'enregistrer le client. Veuillez réessayer.",
    "noPianosRegistered": "Aucun piano enregistré pour ce client.",
    "addPianosLater": "Vous pourrez ajouter des pianos plus tard sur la page Pianos.",
    "continueWithoutPiano": "Continuer sans piano →",
    "grand": "Piano à queue",
    "upright": "Piano droit",
    "serialNumber": "N/S",
    "skipNoPiano": "Passer (pas de piano)",
    "selectDateFirst": "Veuillez d'abord sélectionner une date",
    "checkingAvailability": "Vérification de la disponibilité...",
    "clickToSelect": "Cliquez sur un créneau pour le sélectionner",
    "firstAvailableOn": "Premier créneau disponible le",
    "travelTimeLabel": "Temps de trajet",
    "continueWithTime": "Continuer avec ce créneau →",
    "genericError": "Une erreur s'est produite. Veuillez réessayer.",
    "noAddress": "Pas d'adresse",
    "from": "de",
    "to": "à",
    "bookingInProgress": "Réservation en cours...",
    "bookingError": "Impossible de réserver le rendez-vous. Veuillez réessayer."
  },
  "calendar": {
    "today": "Aujourd'hui",
    "week": "Semaine",
    "month": "Mois",
    "day": "Jour",
    "syncNow": "Synchroniser maintenant",
    "lastSync": "Dernière synchronisation",
    "syncDirection": "Direction de synchronisation",
    "bothDirections": "Les deux sens",
    "toGoogle": "Vers Google uniquement",
    "fromGoogle": "Depuis Google uniquement",
    "toApple": "Vers Apple uniquement",
    "fromApple": "Depuis Apple uniquement",
    "months": [
      "Janvier",
      "Février",
      "Mars",
      "Avril",
      "Mai",
      "Juin",
      "Juillet",
      "Août",
      "Septembre",
      "Octobre",
      "Novembre",
      "Décembre"
    ],
    "monthsShort": [
      "Jan",
      "Fév",
      "Mar",
      "Avr",
      "Mai",
      "Juin",
      "Juil",
      "Août",
      "Sep",
      "Oct",
      "Nov",
      "Déc"
    ],
    "days": [
      "Dimanche",
      "Lundi",
      "Mardi",
      "Mercredi",
      "Jeudi",
      "Vendredi",
      "Samedi"
    ],
    "daysShort": [
      "Dim",
      "Lun",
      "Mar",
      "Mer",
      "Jeu",
      "Ven",
      "Sam"
    ],
    "allDay": "Toute la journée",
    "noTitle": "Sans titre",
    "weekAbbr": "Sem",
    "weekClickOpen": "Semaine {{num}} — cliquer pour ouvrir la vue semaine",
    "appointmentSingular": "rendez-vous",
    "appointmentPlural": "rendez-vous"
  },
  "publicBooking": {
    "pageTitle": "Réserver un rendez-vous",
    "loading": "Chargement...",
    "step1Service": "Service",
    "step2Details": "Détails",
    "step3Time": "Heure",
    "chooseService": "Choisissez un service",
    "yourDetails": "Vos coordonnées",
    "findBestTimesIntro": "Nous trouverons les meilleurs créneaux en fonction de votre localisation.",
    "name": "Nom",
    "email": "E-mail",
    "phone": "Téléphone",
    "address": "Adresse (rue + numéro)",
    "addressPlaceholder": "Commencez à taper une adresse...",
    "postalCode": "Code postal",
    "postalCodePlaceholder": "ex. 75001",
    "city": "Ville",
    "cityPlaceholder": "ex. Paris",
    "back": "← Retour",
    "next": "Suivant →",
    "findBestTimes": "Trouver les meilleurs créneaux →",
    "choosePreferredTime": "Choisissez notre recommandation",
    "timesOptimizedIntro": "Ces horaires sont optimisés pour minimiser le temps de trajet et améliorer l'efficacité.",
    "loadingOptimalTimes": "Chargement des créneaux optimaux...",
    "confirmAppointment": "Confirmer le rendez-vous",
    "booking": "Réservation en cours...",
    "appointmentScheduled": "Rendez-vous confirmé !",
    "newAppointment": "Nouveau rendez-vous",
    "service": "Service",
    "date": "Date",
    "time": "Heure",
    "bestChoice": "Meilleur choix",
    "preferOtherTime": "Préférez un autre moment ? Choisissez une date",
    "backToBestChoice": "Retour au meilleur choix",
    "backToSuggestions": "Retour aux suggestions",
    "loadingSlots": "Chargement des horaires disponibles...",
    "noTimesOnDay": "Aucun créneau disponible ce jour",
    "noServicesAvailable": "Aucun service disponible",
    "onRequest": "Sur demande",
    "min": "min",
    "noAvailableTimes": "Aucun créneau disponible. Veuillez réessayer plus tard.",
    "errorLoadingTimes": "Erreur lors du chargement des créneaux. Veuillez réessayer.",
    "findingBestTimes": "Recherche des meilleurs créneaux pour votre localisation...",
    "searchingAvailability": "Recherche de disponibilité...",
    "analyzingCalendar": "Analyse de l'agenda...",
    "optimizingRoute": "Optimisation de l'itinéraire...",
    "earliestAvailable": "Premier créneau disponible",
    "outsideServiceArea": "Hors zone de service",
    "locationTooFar": "Votre localisation est à environ <strong>{{travelTime}}</strong> (max: {{maxAllowed}} min).",
    "sendEmail": "Envoyer un e-mail",
    "bookingFailed": "Impossible de réserver le rendez-vous. Veuillez réessayer.",
    "errorNotFound": "404",
    "errorNotFoundTitle": "Page de réservation introuvable",
    "errorNotFoundText": "Ce lien de réservation n'est pas actif ou n'existe pas.",
    "poweredBy": "Propulsé par",
    "searchingTimes": "Recherche des créneaux disponibles...",
    "searchingTimesSubtitle": "Cela peut prendre un moment",
    "earlierOption": "Premier créneau disponible",
    "smartPickIntro": "Ces horaires sont calculés intelligemment — nous sommes déjà dans votre quartier à ces moments. Choisissez un Smart Pick pour le temps de trajet le plus court et l'arrivée la plus ponctuelle.",
    "optimalMatch": "Créneau optimal",
    "nearby": "À proximité",
    "moreOptions": "Plus d'options",
    "smartMatchExcellent": "Excellente correspondance",
    "smartMatchGood": "Bonne correspondance",
    "smartMatchAvailable": "Disponible",
    "reasonNoTravel": "Aucun temps de trajet supplémentaire nécessaire",
    "reasonSameArea": "Suite à un rendez-vous dans votre quartier — trajet court",
    "reasonRouteOptimized": "Itinéraire optimisé — nous sommes déjà à proximité",
    "reasonShortTravel": "Court trajet depuis le rendez-vous précédent",
    "reasonRegionDay": "Jour de région — nous sommes déjà dans votre quartier",
    "reasonWorkshop": "Rendez-vous atelier — aucun trajet",
    "reasonRemote": "À distance — immédiatement disponible",
    "reasonAvailable": "Créneau bien disponible",
    "noSuitableTime": "Aucun créneau adapté ?",
    "contactUs": "Contactez-nous directement",
    "sending": "Envoi en cours...",
    "contactRequestSent": "Message envoyé !",
    "contactRequestConfirmation": "Nous avons reçu votre demande et vous contacterons rapidement pour trouver un créneau adapté.",
    "contactRequestFailed": "Impossible d'envoyer le message. Veuillez réessayer.",
    "backToHome": "Retour à l'accueil"
  },
  "common": {
    "save": "Enregistrer",
    "cancel": "Annuler",
    "delete": "Supprimer",
    "edit": "Modifier",
    "add": "Ajouter",
    "close": "Fermer",
    "confirm": "Confirmer",
    "yes": "Oui",
    "no": "Non",
    "loading": "Chargement...",
    "error": "Erreur",
    "success": "Succès",
    "search": "Rechercher",
    "filter": "Filtrer",
    "all": "Tout",
    "none": "Aucun",
    "required": "Obligatoire",
    "optional": "Facultatif",
    "back": "Retour",
    "next": "Suivant",
    "choose": "-- Choisir --",
    "or": "ou",
    "previous": "Précédent",
    "total": "Total",
    "date": "Date",
    "notes": "Notes...",
    "internalNotes": "Notes internes...",
    "errorSaving": "Erreur lors de l'enregistrement",
    "errorDeleting": "Erreur lors de la suppression",
    "errorLoading": "Erreur lors du chargement",
    "saving": "Enregistrement...",
    "busy": "Occupé...",
    "processing": "Traitement en cours...",
    "errorOccurred": "Une erreur est survenue. Veuillez réessayer.",
    "unknownError": "Erreur inconnue",
    "customer": "Client",
    "end": "Fin",
    "selectDate": "Sélectionner une date",
    "service": "Service",
    "start": "Début",
    "time": "Heure",
    "title": "Titre",
    "understood": "Compris",
    "saveFailed": "Échec de la sauvegarde",
    "appointment": "Rendez-vous",
    "more": "plus",
    "address": "Adresse",
    "appointments_one": "{{count}} rendez-vous",
    "appointments_other": "{{count}} rendez-vous",
    "customers_one": "{{count}} client",
    "customers_other": "{{count}} clients",
    "pianos_one": "{{count}} piano",
    "pianos_other": "{{count}} pianos",
    "daysAgo_one": "il y a {{count}} jour",
    "daysAgo_other": "il y a {{count}} jours",
    "at": "à",
    "of": "de",
    "unnamed": "Sans nom",
    "skipNav": "Aller au contenu",
    "through": "au",
    "allDay": "toute la journée",
    "today": "Aujourd'hui",
    "yesterday": "Hier",
    "info": "Info"
  },
  "actions": {
    "save": "Enregistrer",
    "cancel": "Annuler",
    "delete": "Supprimer",
    "edit": "Modifier",
    "add": "Ajouter",
    "viewCustomer": "Voir le client",
    "navigate": "Naviguer",
    "back": "Retour",
    "next": "Suivant",
    "close": "Fermer",
    "confirm": "Confirmer",
    "complete": "Terminer",
    "createInvoice": "Créer une facture",
    "markAsDone": "Marquer comme terminé"
  },
  "errors": {
    "notLoggedIn": "Non connecté",
    "notFound": "Non trouvé",
    "serverError": "Erreur serveur",
    "networkError": "Erreur réseau",
    "invalidInput": "Entrée invalide",
    "connectionError": "Erreur de connexion",
    "couldNotComplete": "Impossible de terminer le rendez-vous",
    "error": "Erreur"
  },
  "subscription": {
    "proRequired": "La facturation est disponible à partir de l'abonnement Pro"
  },
  "route": {
    "efficiency": "Efficacité de l'itinéraire",
    "excellent": "Excellent",
    "good": "Bon",
    "moderate": "Modéré",
    "poor": "Mauvais",
    "travelTime": "Temps de trajet"
  },
  "time": {
    "today": "Aujourd'hui",
    "tomorrow": "Demain",
    "yesterday": "Hier",
    "thisWeek": "Cette semaine",
    "nextWeek": "Semaine prochaine",
    "never": "Jamais",
    "allDay": "Toute la journée",
    "justNow": "à l'instant"
  },
  "login": {
    "title": "Connexion",
    "welcome": "Bienvenue",
    "register": "S'inscrire",
    "email": "E-mail",
    "password": "Mot de passe",
    "confirmPassword": "Confirmer le mot de passe",
    "name": "Nom",
    "forgotPassword": "Mot de passe oublié ?",
    "forgotDesc": "Entrez votre e-mail. Vous recevrez un lien pour réinitialiser votre mot de passe.",
    "sendResetLink": "Envoyer le lien",
    "backToLogin": "← Retour à la connexion",
    "rememberMe": "Se souvenir de moi",
    "loginWithGoogle": "Se connecter avec Google",
    "signupWithGoogle": "S'inscrire avec Google",
    "createAccount": "Créer un compte",
    "alreadyHaveAccount": "Déjà un compte ?",
    "noAccount": "Nouveau ici ?",
    "loginLink": "Se connecter →",
    "registerLink": "Créer un compte →",
    "companyOptional": "Nom de l'entreprise (optionnel)",
    "language": "Langue",
    "namePlaceholder": "Jean Dupont",
    "passwordMin": "Min. 8 caractères",
    "or": "ou",
    "acceptTerms": "J’accepte les <a href=\"/terms.html\" target=\"_blank\">Conditions Générales</a>, la <a href=\"/privacy.html\" target=\"_blank\">Politique de Confidentialité</a> et l’<a href=\"/dpa.html\" target=\"_blank\">Accord de Sous-traitance</a>",
    "acceptTermsRequired": "Vous devez accepter les Conditions Générales, la Politique de Confidentialité et l’Accord de Sous-traitance.",
    "hintLogin": "Bon retour !",
    "hintRegister": "Créez un compte en 30 secondes",
    "trustFree": "1 mois d'essai gratuit",
    "trustNoCard": "Aucune carte de crédit requise",
    "trustGdpr": "Conforme RGPD & données en UE",
    "trustCancel": "Résiliable à tout moment",
    "loggingIn": "Connexion...",
    "welcomeBack": "Bon retour ! Redirection...",
    "loginFailed": "Connexion échouée",
    "somethingWentWrong": "Une erreur s'est produite. Veuillez réessayer.",
    "sending": "Envoi...",
    "resetLinkSent": "Si cette adresse e-mail est connue, vous recevrez un lien de réinitialisation.",
    "passwordTooShort": "Le mot de passe doit contenir au moins 8 caractères.",
    "creatingAccount": "Création du compte...",
    "awaitingApproval": "Compte créé ! Veuillez attendre l'approbation de l'administrateur. Vous recevrez un e-mail lorsque votre compte sera activé.",
    "awaitingApprovalBtn": "En attente d'approbation",
    "accountCreated": "Compte créé ! Vous pouvez maintenant vous connecter avec vos identifiants.",
    "accountCreatedBtn": "Compte créé !",
    "googleRecommended": "Recommandé — accès direct à la synchronisation d'agenda",
    "googleRecommendedSignup": "Le plus rapide — prêt instantanément avec la synchronisation d'agenda"
  },
  "pricing": {
    "title": "Tarifs simples et transparents.",
    "subtitle": "Choisissez le plan qui vous convient. Pas de frais cachés.",
    "monthly": "par mois",
    "yearly": "par an",
    "startTrial": "1 mois d'essai gratuit",
    "subscribe": "S'abonner",
    "currentPlan": "Plan actuel",
    "features": "Fonctionnalités",
    "unlimited": "Illimité",
    "support": "Assistance",
    "trial": "Essai",
    "trialDays": "jours d'essai",
    "exVat": "HT (hors taxes)",
    "mostPopular": "Le plus populaire",
    "perMonth": "/ mois",
    "trySolo": "Essai gratuit",
    "getStartedFree": "Commencer gratuitement",
    "foreverFree": "Gratuit pour toujours",
    "serverLocation": "Vos données sont stockées en toute sécurité sur des serveurs aux Pays-Bas (UE)",
    "startName": "Start",
    "startTagline": "Planification intelligente & itinéraires",
    "startFeature1": "Clients & rendez-vous illimités",
    "startFeature2": "Optimisation d'itinéraire & Remplir route",
    "startFeature3": "Page de réservation en ligne",
    "startFeature4": "Rappels e-mail & modèles",
    "startFeature5": "Domaine e-mail personnalisé (SMTP)",
    "startFeature6": "Smart Suggestions",
    "startFeature7": "Export calendrier (iCal)",
    "startFeature8": "Application mobile PWA",
    "startFeature9": "Import CSV & Gazelle",
    "proName": "Pro",
    "proTagline": "Synchronisation & automatisation complète",
    "proFeature1": "Tout de Start, plus :",
    "proFeature2": "Sync bidirectionnelle Google, Apple & Microsoft",
    "proFeature3": "Facturation en 1 clic avec lien de paiement",
    "proFeature3sub": "Factures PDF + prestataire de paiement au choix (via clé)",
    "proFeature4": "Suivi kilométrique (conforme fiscal)",
    "proFeature5": "Intégration comptable",
    "invoiceHighlightTitle": "Facturation avec lien de paiement en ligne",
    "invoiceHighlightDesc": "Créez des factures depuis votre calendrier, envoyez-les avec PDF et lien de paiement. Votre client paie directement en ligne. Disponible à partir de Pro.",
    "premiumName": "Premium",
    "premiumTagline": "Atelier, projets & équipe",
    "premiumFeature1": "Tout de Pro, plus :",
    "premiumFeature2": "Planificateur de projets atelier",
    "premiumFeature3": "Suivi des heures & planification de capacité",
    "premiumFeature4": "Horaires théâtre/salle",
    "premiumFeature5": "Aperçu des délais",
    "premiumFeature6": "Tableau de bord équipe & attribution intelligente",
    "premiumFeature6sub": "+ €15 par accordeur/membre d'équipe supplémentaire",
    "teamsName": "Teams",
    "teamsTagline": "Atelier, projets & équipe",
    "teamsFeature1": "Tout de Pro, plus :",
    "teamsFeature2": "Planificateur de projets atelier",
    "teamsFeature3": "Suivi des heures & planification de capacité",
    "teamsFeature4": "Horaires théâtre/salle",
    "teamsFeature5": "Aperçu des délais",
    "teamsFeature6": "Tableau de bord équipe & attribution intelligente",
    "teamsFeature7": "Portail Magic Link pour accordeurs",
    "teamsFeature7sub": "Incl. 5 accordeurs · + 15 € par accordeur suppl.",
    "businessName": "Teams Business",
    "businessTagline": "Stock, inventaire & 10 accordeurs",
    "businessFeature1": "Tout de Teams, plus :",
    "businessFeature2": "Gestion de stock & inventaire",
    "businessFeature3": "Lots showroom",
    "businessFeature4": "Jusqu'à 10 accordeurs",
    "businessFeature4sub": "+ 15 € par accordeur suppl. au-delà de 10",
    "freeHint": "Vous débutez ou moins de 25 clients ?",
    "freeHintLink": "Commencez avec notre plan d'entrée gratuit.",
    "serverTitle": "Serveurs européens, entreprise néerlandaise",
    "serverText": "Vos données restent en Europe. Conforme RGPD. Basé à Tilburg, Pays-Bas.",
    "independenceTipTitle": "Indépendant des Big Tech ?",
    "independenceTipText": "Avec l'abonnement Start, vous gérez tout dans PianoPlanner et générez un lien iCal compatible avec toute application calendrier. Pas besoin de compte Google, Apple ou Microsoft.",
    "faqTitle": "Questions fréquentes",
    "faqSubtitle": "Tout ce que vous devez savoir sur PianoPlanner.",
    "faq1Question": "Puis-je d'abord essayer ?",
    "faq1Answer": "Oui ! Tous les abonnements payants incluent un mois d'essai gratuit. Aucune carte de crédit requise. Après le mois, vous pouvez choisir de payer ou revenir au plan gratuit.",
    "faq2Question": "Que deviennent mes données si j'annule ?",
    "faq2Answer": "Vos données vous appartiennent. Vous pouvez tout exporter avant d'annuler. Après annulation, votre compte revient au plan Gratuit.",
    "faq3Question": "Puis-je changer de plan plus tard ?",
    "faq3Answer": "Absolument. Passez à un niveau supérieur ou inférieur quand vous voulez. Les changements prennent effet immédiatement et le nouveau montant s'applique dès la prochaine période de facturation.",
    "faq4Question": "Comment fonctionne la synchronisation calendrier ?",
    "faq4Answer": "PianoPlanner se synchronise en bidirectionnel avec Google Agenda, Apple Agenda et Microsoft 365. Les rendez-vous apparaissent en temps réel sur tous vos appareils.",
    "footerFeature1": "1 mois gratuit",
    "footerFeature2": "Aucune carte de crédit requise",
    "footerFeature3": "Résiliable à tout moment",
    "footerFeature4": "Conforme RGPD",
    "compareTitle": "Comparer les abonnements",
    "compareFeature": "Fonctionnalité",
    "compareCustomers": "Clients & rendez-vous",
    "compareRoute": "Optimisation d'itinéraire",
    "compareBooking": "Page de réservation en ligne",
    "compareReminders": "Rappels e-mail",
    "compareSmtp": "E-mail personnalisé (SMTP)",
    "compareSmart": "Smart Suggestions",
    "compareiCal": "Export calendrier (iCal)",
    "comparePwa": "Application mobile PWA",
    "compareImport": "Import CSV & Gazelle",
    "compareCalSync": "Sync calendrier bidirectionnelle",
    "compareMileage": "Suivi kilométrique",
    "compareInvoicing": "Facturation + lien de paiement",
    "compareAccounting": "Intégration comptable",
    "compareProjects": "Planificateur de projets atelier",
    "compareTimetrack": "Suivi des heures",
    "compareCapacity": "Planification de capacité",
    "compareTheater": "Horaires théâtre/salle",
    "compareTeamDashboard": "Tableau de bord & attribution",
    "compareTeamMembers": "Accordeurs supplémentaires",
    "compareMagicLink": "Portail Magic Link",
    "compareInventory": "Gestion de stock & inventaire",
    "compareShowroom": "Lots showroom",
    "compareMaxTuners": "Max. accordeurs",
    "teamsHint": "Plus de 5 accordeurs ?",
    "teamsHintLink": "Contactez-nous pour un devis personnalisé."
  },
  "billing": {
    "title": "Abonnement",
    "currentPlan": "Plan actuel",
    "nextBilling": "Prochaine facturation",
    "paymentMethod": "Moyen de paiement",
    "updatePayment": "Mettre à jour le paiement",
    "cancelSubscription": "Annuler l'abonnement",
    "reactivate": "Réactiver",
    "active": "Actif",
    "trial": "Essai",
    "expired": "Expiré",
    "canceled": "Annulé",
    "subtitle": "Gérez votre abonnement et vos factures",
    "startSubscription": "Démarrer l'abonnement",
    "choosePlan": "Choisissez votre abonnement",
    "perMonthVat": "/mois + TVA",
    "soloFeature1": "Clients & rendez-vous illimités",
    "soloFeature2": "Rappels e-mail & modèles",
    "soloFeature3": "Optimisation d'itinéraire",
    "soloFeature4": "Page de réservation en ligne",
    "proFeatureAll": "Tout de Solo, plus :",
    "proFeature1": "Sync calendrier bidirectionnelle",
    "proFeature2": "Suivi kilométrique (conforme fiscal)",
    "proFeature3": "Facturation avec lien de paiement",
    "selectPlanContinue": "Sélectionnez un abonnement pour continuer",
    "whatsIncluded": "Ce qui est inclus",
    "allPlansInclude": "Tous les abonnements incluent :",
    "featureUnlimited": "Clients & rendez-vous illimités",
    "featureEmail": "Rappels e-mail & modèles",
    "featureSMTP": "Domaine e-mail personnalisé (SMTP)",
    "featureRoute": "Optimisation d'itinéraire",
    "featureBooking": "Page de réservation en ligne",
    "featurePWA": "Application mobile PWA",
    "featureSmart": "Smart Suggestions",
    "featureImport": "Import CSV & Gazelle",
    "featureIcal": "Export calendrier (iCal)",
    "featureEU": "Serveurs UE (conforme RGPD)",
    "proAdds": "Pro ajoute :",
    "proFeatureSync": "Sync calendrier bidirectionnelle (Google, Apple, Microsoft)",
    "proFeatureKm": "Suivi kilométrique (conforme fiscal)",
    "proFeatureInvoice": "Facturation avec lien de paiement",
    "proFeatureAccounting": "Intégration comptable",
    "proFeatureSupport": "Support prioritaire",
    "needHelp": "Besoin d'aide ?",
    "needHelpDesc": "Avez-vous des questions sur votre abonnement ou vos factures ? Contactez-nous.",
    "contactUs": "Nous contacter",
    "teamsFeature1": "Jusqu'à 5 accordeurs",
    "teamsFeature2": "Tableau de bord d'équipe & attribution intelligente",
    "teamsFeature3": "Flux iCal par accordeur",
    "teamsFeatureAll": "Tout de Pro, plus :",
    "daysLeft": "jours restants",
    "noSubscription": "Pas d'abonnement",
    "price": "Prix",
    "perMonth": "mois",
    "vat": "TVA",
    "daysLeftTrial": "jours restants dans votre essai",
    "likePianoPlanner": "Vous aimez PianoPlanner ?",
    "upgradeAnytime": "Vous pouvez passer à un plan supérieur à tout moment – pas besoin d'attendre la fin de votre essai !",
    "statusLabel": "Statut",
    "trialExpired": "Votre essai a expiré",
    "upgradeNow": "Mettre à niveau maintenant",
    "manageSubscription": "Gérer l'abonnement",
    "checkoutError": "Impossible de démarrer le paiement.",
    "somethingWentWrong": "Une erreur s'est produite. Veuillez réessayer.",
    "portalError": "Impossible d'ouvrir la gestion de l'abonnement.",
    "loadError": "Impossible de charger les données d'abonnement.",
    "welcomePlan": "Bienvenue sur PianoPlanner",
    "paymentSuccess": "Votre paiement a réussi. Votre abonnement est maintenant actif pour",
    "confirmationEmail": "Vous recevrez un e-mail de confirmation. Les factures sont disponibles ci-dessous.",
    "paymentCancelled": "Paiement annulé",
    "paymentCancelledDesc": "Pas de problème ! Vous pouvez réessayer plus tard. Rien n'a été facturé.",
    "monthly": "Mensuel",
    "annual": "Annuel",
    "saveAnnual": "Économisez ~15%",
    "perYear": "an",
    "continueWith": "Continuer avec"
  },
  "import": {
    "title": "Importer des données",
    "selectSource": "Sélectionner la source",
    "selectSourceDesc": "Choisissez d'où vous voulez importer vos données clients.",
    "step": {
      "source": "Source",
      "upload": "Télécharger",
      "preview": "Aperçu",
      "import": "Import"
    },
    "external": {
      "desc": "Logiciel de service piano"
    },
    "csv": {
      "desc": "Fichier CSV générique"
    },
    "uploadFile": "Télécharger le fichier",
    "uploadFileDesc": "Téléchargez votre fichier d'export (format CSV).",
    "dropFile": "Déposez votre fichier ici",
    "orClick": "ou cliquez pour parcourir",
    "previewData": "Aperçu des données",
    "previewDesc": "Vérifiez les données avant l'importation.",
    "totalRecords": "Total",
    "activeClients": "Clients actifs",
    "inactiveClients": "Clients inactifs",
    "withEmail": "Avec email",
    "th": {
      "name": "Nom",
      "email": "Email",
      "phone": "Téléphone",
      "city": "Ville",
      "status": "Statut"
    },
    "options": "Options d'import",
    "opt": {
      "activeOnly": "Importer uniquement les clients actifs",
      "activeOnlyDesc": "Ignorer les clients inactifs",
      "skipDuplicates": "Ignorer les doublons",
      "skipDuplicatesDesc": "Ignorer les clients avec email déjà existant",
      "includeCompany": "Inclure le nom de l'entreprise",
      "includeCompanyDesc": "Ajouter le nom de l'entreprise au nom du client"
    },
    "importing": "Importation...",
    "complete": "Import terminé !",
    "failed": "Import échoué",
    "partialComplete": "Import partiellement terminé",
    "successMessage": "{{count}} clients importés avec succès.",
    "partialMessage": "{{imported}} clients importés avec {{errors}} erreurs.",
    "noImports": "Aucun client n'a été importé.",
    "imported": "Importés",
    "skipped": "Ignorés",
    "errors": "Erreurs",
    "viewCustomers": "Voir les clients",
    "importMore": "Importer plus",
    "undoImport": "Annuler l'import",
    "undone": "Import annulé",
    "undoneMessage": "{{count}} enregistrements supprimés.",
    "next": "Suivant",
    "back": "Retour",
    "cancel": "Annuler",
    "preview": "Aperçu",
    "startImport": "Démarrer l'import",
    "error": {
      "csvOnly": "Veuillez télécharger un fichier CSV",
      "parse": "Erreur lors de l'analyse du fichier CSV"
    },
    "deleteImportedData": "Supprimer les données importées",
    "backToImport": "← Retour à l'import",
    "analyzeFile": "Analyser le fichier",
    "importContacts": "Importer les contacts",
    "importAppointments": "Importer les rendez-vous",
    "viewAgenda": "Voir l'agenda",
    "filterLinked": "✓ Lié",
    "filterNoCustomer": "⚠ Pas de client",
    "filterNoLink": "⚠ Aucun lien",
    "deleteImported": "Supprimer les importations",
    "gazelle": {
      "desc": "Importez vos données depuis Gazelle"
    },
    "manager": {
      "title": "Gestionnaire d'importation",
      "desc": "Gérez vos importations précédentes",
      "back": "Retour",
      "empty": "Aucune importation trouvée",
      "loading": "Chargement..."
    },
    "gazelleTitle": "Assistant d'importation Gazelle - PianoPlanner",
    "gazelleWizard": "Assistant d'importation Gazelle",
    "backToSettings": "Retour aux paramètres",
    "step1Title": "Importer les clients",
    "step1Desc": "Téléchargez clients.csv",
    "step2Title": "Importer les pianos",
    "step2Desc": "Téléchargez pianos.csv",
    "step3Title": "Importer les rendez-vous",
    "step3Desc": "Téléchargez events.csv (optionnel)",
    "step4Title": "Terminé",
    "step4Desc": "Voir les résultats",
    "customersTitle": "Étape 1 : Importer les clients",
    "customersDesc": "Téléchargez votre fichier clients.csv de Gazelle. Nous validerons chaque enregistrement et vous montrerons exactement ce qui sera importé.",
    "dropClients": "Déposez clients.csv ici",
    "orClickBrowse": "ou cliquez pour parcourir",
    "pianosTitle": "Étape 2 : Importer les pianos",
    "pianosDesc": "Téléchargez votre fichier pianos.csv de Gazelle. Les pianos seront automatiquement liés aux clients via l'ID Gazelle.",
    "dropPianos": "Déposez pianos.csv ici",
    "eventsTitle": "Étape 3 : Importer les rendez-vous",
    "eventsDesc": "Téléchargez votre fichier events.csv de Gazelle. Les rendez-vous seront liés aux clients et aux pianos. C'est optionnel — vous pouvez passer cette étape.",
    "dropEvents": "Déposez events.csv ici",
    "filterAll": "Tous",
    "filterValid": "✓ Valide",
    "filterSkip": "⚠ Ignorer",
    "filterError": "✗ Erreur",
    "optSkipExisting": "Ignorer les clients existants",
    "optSkipExistingDesc": "Ignorer les clients qui existent déjà (basé sur l'e-mail)",
    "optCreateCustomers": "Créer les clients manquants",
    "optCreateCustomersDesc": "Créer automatiquement les clients pour les pianos sans correspondance",
    "skipStep": "Passer l'étape →",
    "skipAndFinish": "Terminer sans les rendez-vous →",
    "importCustomers": "Importer les clients",
    "importPianos": "Importer les pianos",
    "importEvents": "Importer les rendez-vous",
    "completed": "Importation terminée !",
    "completedDesc": "Vos données Gazelle ont été importées dans PianoPlanner.",
    "customers": "Clients",
    "pianos": "Pianos",
    "events": "Rendez-vous",
    "viewPianos": "Voir les pianos",
    "toDashboard": "Aller au tableau de bord",
    "gazelleWizardTitle": "Import Gazelle",
    "gazelleWizardDesc": "Importez vos données depuis Gazelle en 5 étapes.",
    "gazelleStep1": "Clients",
    "gazelleStep2": "Pianos",
    "gazelleStep3": "Rendez-vous",
    "gazelleStep4": "Services",
    "gazelleStep5": "Résultat",
    "gazelleFileNeeded": "Fichier requis depuis Gazelle :",
    "gazelleClientsFile": "Clients",
    "gazellePianosFile": "Pianos",
    "gazelleEventsFile": "Events",
    "gazelleMslFile": "Master Service List",
    "gazelleEsiFile": "Event Service Items",
    "gazelleClientsDesc": "Upload your Gazelle Clients export. Contains client names, addresses, email and phone.",
    "gazellePianosDesc": "Upload your Gazelle Pianos export. Pianos will be automatically linked to clients.",
    "gazelleEventsDesc": "Upload your Gazelle Events export. Appointments will be linked to clients and pianos.",
    "gazelleMslDesc": "Upload your Master Service List. Contains official services with prices and descriptions.",
    "gazelleEsiDesc": "Optional: Event Service Items for exact service linking per appointment.",
    "gazelleServicesTitle": "Step 4: Import Services",
    "gazelleServicesDesc": "Upload your Master Service List (MSL). Services are also automatically derived from appointments.",
    "gazelleServicesFound": "{{count}} services found",
    "gazelleServicesMsl": "From Master Service List (official)",
    "gazelleServicesExtracted": "Derived from appointments",
    "gazelleServicesExisting": "{{count}} services already exist",
    "gazelleOptionalStep": "This step is optional",
    "gazellePersonalEvents": "Import personal events as private appointments",
    "gazellePersonalEventsDesc": "Personal/memo events will be added as private appointments in your calendar",
    "gazelleSyncedEvents": "Include synced events",
    "gazelleSyncedEventsDesc": "Synced events from other calendars are skipped by default",
    "gazelleHistorical": "{{count}} historical (not synced to Google)",
    "gazelleFuture": "{{count}} upcoming (will be synced)",
    "gazelleProcessing": "Traitement...",
    "gazelleProcessingOf": "{{current}} sur {{total}}",
    "gazelleResultTitle": "Import terminé !",
    "gazelleResultDesc": "Vos données Gazelle ont été importées avec succès dans PianoPlanner.",
    "gazelleResultCustomers": "{{count}} clients imported",
    "gazelleResultPianos": "{{count}} pianos imported",
    "gazelleResultEvents": "{{count}} appointments imported",
    "gazelleResultServices": "{{count}} services created",
    "gazelleResultSkipped": "{{count}} skipped",
    "gazelleResultErrors": "{{count}} errors",
    "gazelleServicesTip": "💡 Conseil : allez dans Paramètres → Services pour ajuster les prix et la durée.",
    "gazelleUndoAll": "Tout annuler",
    "gazelleUndoConfirm": "Êtes-vous sûr de vouloir supprimer toutes les données importées ?",
    "gazelleDropFile": "Déposez votre fichier CSV ici",
    "gazelleOrBrowse": "ou cliquez pour parcourir",
    "gazelleFileSelected": "File selected:",
    "gazelleAnalyzing": "Analyzing file...",
    "gazelleRecordsFound": "{{count}} records found",
    "gazelleReadyToImport": "Ready to import",
    "gazelleImportBtn": "Importer",
    "gazelleSkipBtn": "Passer l'étape →",
    "gazelleNextBtn": "Étape suivante →",
    "gazelleBackBtn": "← Étape précédente",
    "gazelleFinishBtn": "Terminer",
    "gazelleImportSuccess": "✅ Successfully imported",
    "gazelleImportPartial": "⚠️ Partially imported",
    "gazelleImportFailed": "❌ Import failed",
    "gazelleNoFile": "No file selected yet",
    "gazelleExportInstructions": "Go to Gazelle → Data → Export and download the file:"
  },
  "emailTemplates": {
    "title": "Modèles d'e-mail",
    "subtitle": "Personnalisez les e-mails envoyés à vos clients",
    "helpBanner": {
      "title": "Démarrer avec l'éditeur d'e-mail",
      "subtitle": "Personnalisez vos e-mails clients en 3 étapes simples",
      "step1Title": "Choisir un modèle",
      "step1Desc": "Cliquez ci-dessus sur le type d'e-mail que vous souhaitez personnaliser (confirmation, rappel, etc.)",
      "step2Title": "Modifier visuellement ou en HTML",
      "step2Desc": "Utilisez le mode 🎨 Visuel pour formater le texte comme dans Word. Cliquez sur les variables pour insérer les données client.",
      "step3Title": "Enregistrer & tester",
      "step3Desc": "Consultez l'aperçu en direct à droite. Envoyez un e-mail test à vous-même pour voir le résultat.",
      "tip": "Astuce : Les variables comme {{nomClient}} sont automatiquement remplacées par les vraies données client lors de l'envoi."
    },
    "confirmation": {
      "subject": "Confirmation : {{service}} le {{date}}",
      "title": "Rendez-vous Confirmé",
      "confirmed": "Confirmé",
      "greeting": "Cher(e) {{customerName}},",
      "intro": "Votre rendez-vous a été confirmé. Voici tous les détails.",
      "details": "Détails du rendez-vous",
      "date": "Date",
      "time": "Heure",
      "service": "Service",
      "location": "Lieu",
      "address": "Adresse",
      "instrument": "Instrument",
      "piano": "Piano",
      "pianoType": "Type",
      "serialNumber": "Numéro de série",
      "buildYear": "Année de construction",
      "pianoLocation": "Emplacement du piano",
      "notes": "Remarques",
      "questions": "Avez-vous des questions ? N'hésitez pas à nous contacter.",
      "regards": "Cordialement,",
      "rescheduleText": "L'horaire ne vous convient pas ? Vous pouvez reprogrammer votre rendez-vous en ligne.",
      "rescheduleButton": "Reprogrammer le rendez-vous"
    },
    "reminder": {
      "subject": "Rappel : {{service}} le {{date}}",
      "title": "Rappel",
      "subtitle": "Votre rendez-vous est demain",
      "tomorrow": "demain",
      "inHours": "dans {{hours}} heures",
      "inDays": "dans {{days}} jours",
      "greeting": "Cher(e) {{customerName}},",
      "intro": "Ceci est un rappel pour votre rendez-vous :",
      "lookingForward": "Nous avons hâte de vous voir !",
      "regards": "Cordialement,"
    },
    "newBooking": {
      "subject": "Nouvelle réservation : {{customerName}} - {{service}}",
      "title": "Nouveau Rendez-vous",
      "subtitle": "Un nouveau rendez-vous a été réservé",
      "customerDetails": "Client",
      "appointmentDetails": "Détails du rendez-vous",
      "customerNote": "Note du client",
      "openPianoPlanner": "Ouvrez PianoPlanner pour voir ce rendez-vous"
    },
    "cancellation": {
      "subject": "Annulation : {{service}} le {{date}}",
      "title": "Rendez-vous Annulé",
      "greeting": "Cher(e) {{customerName}},",
      "intro": "Votre rendez-vous a été annulé :",
      "reschedule": "Souhaitez-vous prendre un nouveau rendez-vous ? Contactez-nous ou réservez en ligne.",
      "regards": "Cordialement,"
    },
    "bookingInvitation": {
      "subject": "Invitation à prendre rendez-vous",
      "title": "Prendre Rendez-vous",
      "subtitle": "Réservation en ligne facile",
      "greeting": "Cher(e) {{customerName}},",
      "intro": "Je vous invite à prendre rendez-vous. Vous pouvez facilement choisir un créneau adapté via le lien ci-dessous.",
      "bookButton": "Prendre Rendez-vous",
      "linkNote": "Ou copiez ce lien :",
      "regards": "Cordialement,"
    },
    "tuningInvitation": {
      "subject": "C'est l'heure de l'accord : votre {{piano_brand}} {{piano_model}}",
      "title": "C'est l'Heure de l'Accord",
      "subtitle": "Votre piano mérite les meilleurs soins",
      "greeting": "Cher(e) {{customerName}},",
      "intro": "Cela fait un moment que votre piano n'a pas été accordé. Pour maintenir votre instrument en condition optimale, il est temps de l'entretenir.",
      "piano": "Piano",
      "lastTuning": "Dernier accord",
      "unknown": "Inconnu",
      "timeElapsed": "Temps écoulé",
      "months": "mois",
      "recommendedInterval": "Intervalle recommandé",
      "every": "tous les",
      "bookNow": "Planifiez facilement votre prochain accord via le lien ci-dessous :",
      "bookButton": "Prendre rendez-vous maintenant",
      "regards": "Cordialement,",
      "footer": "Accordage de piano professionnel",
      "unsubscribeText": "Ne plus recevoir de rappels"
    },
    "tabs": {
      "confirmation": "Confirmation",
      "reminder": "Rappel",
      "cancellation": "Annulation",
      "newBooking": "Nouvelle réservation",
      "invitation": "Invitation"
    },
    "modeVisual": "🎨 Visuel",
    "modeHtml": "</> HTML",
    "varAll": "Toutes",
    "varCustomer": "Client",
    "varAppointment": "Rendez-vous",
    "varPiano": "Piano",
    "varInvitation": "Invitation",
    "varCompany": "Entreprise",
    "resetDefault": "Réinitialiser par défaut",
    "sendTest": "Envoyer test",
    "bccToSelf": "Copie cachée à soi-même",
    "bccToSelfDesc": "Recevez une copie de chaque e-mail envoyé",
    "teamBookingConfirmation": {
      "subject": "Confirmation : {{service}} avec {{teamMember}} le {{date}}",
      "title": "Rendez-vous confirmé",
      "greeting": "Cher/Chère {{customerName}},",
      "intro": "Votre rendez-vous a été confirmé. Un membre de notre équipe se fera un plaisir de vous rendre visite.",
      "teamMember": "Membre de l'équipe",
      "date": "Date",
      "time": "Heure",
      "service": "Service",
      "location": "Lieu",
      "notes": "Vos remarques",
      "questions": "Vous avez des questions ? N'hésitez pas à nous contacter.",
      "regards": "Cordialement,"
    },
    "teamMemberNotification": {
      "subject": "Nouveau rendez-vous attribué : {{service}} le {{date}}",
      "title": "Nouveau rendez-vous",
      "subtitle": "Attribué automatiquement via la réservation d'équipe",
      "greeting": "Bonjour {{teamMember}},",
      "intro": "Un nouveau rendez-vous vous a été attribué via le système de réservation d'équipe.",
      "date": "Date",
      "time": "Heure",
      "service": "Service",
      "customerInfo": "Informations client",
      "name": "Nom",
      "email": "E-mail",
      "phone": "Téléphone",
      "location": "Lieu",
      "customerNotes": "Notes du client",
      "smartAssignment": "Attribution intelligente :",
      "travelTime": "Temps de trajet depuis votre rendez-vous précédent",
      "minutes": "minutes",
      "closing": "Bonne chance !",
      "footer": "Ce rendez-vous a été attribué automatiquement en fonction de la disponibilité et de la localisation"
    },
    "teamTuningInvitation": {
      "subject": "Il est temps d'accorder votre piano chez {{companyName}}",
      "title": "Il est temps d'accorder",
      "subtitle": "Votre piano mérite les meilleurs soins",
      "greeting": "Cher/Chère {{customerName}},",
      "intro": "Cela fait un moment que votre piano n'a pas été accordé. Notre équipe d'accordeurs expérimentés est à votre disposition.",
      "piano": "Piano",
      "lastTuning": "Dernier accordage",
      "timeElapsed": "Temps écoulé",
      "months": "mois",
      "usp1": "Plusieurs accordeurs expérimentés disponibles",
      "usp2": "Trouvez rapidement un créneau adapté",
      "usp3": "Automatiquement l'accordeur le plus proche",
      "bookNow": "Planifiez facilement votre prochain accordage avec notre équipe :",
      "bookButton": "Prendre rendez-vous maintenant",
      "regards": "Cordialement,",
      "footer": "Notre équipe d'accordeurs de piano qualifiés"
    },
    "passwordReset": {
      "subject": "Réinitialiser le mot de passe - PianoPlanner",
      "title": "Réinitialiser le mot de passe",
      "greeting": "Bonjour {{name}},",
      "intro": "Vous avez demandé la réinitialisation de votre mot de passe. Cliquez sur le bouton ci-dessous pour définir un nouveau mot de passe.",
      "button": "Réinitialiser le mot de passe",
      "expiry": "Ce lien est valable pendant 1 heure. Si vous n'avez pas fait cette demande, vous pouvez ignorer cet e-mail.",
      "requestMessage": "Si cette adresse e-mail est enregistrée chez nous, vous recevrez un lien de réinitialisation."
    },
    "rescheduleEmail": {
      "badge": "Report confirmé",
      "title": "Rendez-vous reporté",
      "greeting": "Cher/Chère {{name}},",
      "intro": "Votre rendez-vous a été reporté avec succès.",
      "oldTime": "Heure précédente",
      "regards": "Cordialement,",
      "subject": "Rendez-vous reporté : {{service}} — {{date}}",
      "ownerSubject": "{{name}} a reporté : {{date}} {{time}}",
      "ownerTitle": "Rendez-vous reporté par le client",
      "ownerIntro": "a reporté son rendez-vous :",
      "from": "De :",
      "to": "À :",
      "service": "Service :",
      "location": "Lieu :"
    },
    "subscriptionEmail": {
      "subject": "Bienvenue dans {{plan}} ! 🎹",
      "title": "Bienvenue dans {{plan}} !",
      "subtitle": "Votre abonnement a été activé avec succès",
      "greeting": "Cher/Chère {{name}},",
      "intro": "Merci pour votre confiance en PianoPlanner ! Votre paiement a été reçu et votre abonnement <strong>{{plan}}</strong> est maintenant actif.",
      "plan": "Formule",
      "amount": "Montant",
      "status": "Statut",
      "active": "Actif ✓",
      "inclVat": "TTC {{pct}} % TVA",
      "exclVat": "HT",
      "reverseCharge": "Autoliquidation de la TVA",
      "perMonth": "/mois",
      "manage": "Vous pouvez gérer votre abonnement à tout moment via les paramètres de PianoPlanner. Des questions ? N'hésitez pas à nous contacter.",
      "dashboard": "Aller au tableau de bord",
      "footer": "PianoPlanner • Vous recevrez une facture mensuelle pour votre abonnement."
    },
    "trialNudge": {
      "day7": {
        "subject": "Comment ça se passe avec PianoPlanner, {{name}} ?",
        "greeting": "Bonjour {{name}},",
        "body": "Vous utilisez PianoPlanner depuis une semaine — ravi de vous compter parmi nous ! 🎹",
        "statsTitle": "Votre utilisation jusqu'à présent :",
        "statsCustomers": "{{count}} client(s) créé(s)",
        "statsPianos": "{{count}} piano(s) enregistré(s)",
        "statsAppointments": "{{count}} rendez-vous planifié(s)",
        "cta": "Si vous avez des questions, répondez simplement à cet e-mail. Nous sommes là pour vous aider !",
        "ctaButton": "Aller à PianoPlanner",
        "footer": "Il vous reste {{daysLeft}} jours d'essai. Après votre essai, vous aurez toujours accès au plan gratuit."
      },
      "day20": {
        "subject": "Plus que 10 jours dans votre essai PianoPlanner",
        "greeting": "Bonjour {{name}},",
        "body": "Votre période d'essai expire dans 10 jours. Voici ce que vous avez accompli :",
        "statsCustomers": "{{count}} client(s)",
        "statsAppointments": "{{count}} rendez-vous",
        "statsEmails": "{{count}} e-mails envoyés",
        "loseAccess": "Après votre essai, vous perdrez l'accès à :",
        "loseCalendarSync": "Synchronisation bidirectionnelle du calendrier",
        "loseRoute": "Optimisation d'itinéraire & Smart Suggestions",
        "loseReminders": "Rappels automatiques",
        "loseInvoicing": "Facturation & suivi kilométrique",
        "cta": "Avec le plan Solo (€24,50/mois) vous gardez tout, ou passez au Pro (€39,50/mois) pour l'expérience complète.",
        "ctaButton": "Voir les plans",
        "footer": "Vos données sont toujours stockées en sécurité, même si vous ne mettez pas (encore) à jour."
      },
      "day25": {
        "subject": "⏳ Plus que 5 jours — votre essai PianoPlanner touche à sa fin",
        "greeting": "Bonjour {{name}},",
        "body": "Dans 5 jours, votre période d'essai expire et vous perdrez l'accès aux fonctionnalités Pro.",
        "warning": "Optimisation d'itinéraire, rappels, sync calendrier et facturation ne seront plus disponibles dans le plan gratuit.",
        "cta": "Mettez à jour maintenant et gardez tout ce que vous avez construit.",
        "ctaButton": "Mettre à jour — à partir de €24,50/mois",
        "footer": "Vos données sont toujours stockées en sécurité, même si vous ne mettez pas (encore) à jour."
      },
      "day28": {
        "subject": "🔔 Plus que 2 jours — votre accès Pro PianoPlanner s'arrête bientôt",
        "greeting": "Bonjour {{name}},",
        "body": "Votre essai expire après-demain.",
        "warning": "Vous perdrez immédiatement l'accès à l'optimisation d'itinéraire, la synchronisation de calendrier, la facturation et les rappels automatiques.",
        "dataSafe": "Vos données ({{customers}} clients, {{pianos}} pianos) sont stockées en sécurité. Vous pouvez toujours mettre à jour.",
        "cta": "Mettez à jour maintenant — il ne vous reste que 2 jours pour garder vos fonctionnalités Pro.",
        "ctaButton": "Mettre à jour",
        "footer": "Vos données sont toujours stockées en sécurité, même si vous ne mettez pas à jour."
      },
      "expired": {
        "subject": "Votre essai PianoPlanner a expiré",
        "greeting": "Bonjour {{name}},",
        "body": "Votre période d'essai de 30 jours est terminée. Votre compte passe au plan gratuit.",
        "whatChanges": "Qu'est-ce qui change ?",
        "noRoute": "Pas d'optimisation d'itinéraire",
        "noSync": "Pas de synchronisation de calendrier",
        "noReminders": "Pas de rappels automatiques",
        "noInvoicing": "Pas de facturation",
        "dataSafe": "Vos données ({{customers}} clients, {{pianos}} pianos) sont en sécurité",
        "freeLimit": "Jusqu'à 25 clients et 50 rendez-vous/an dans le plan gratuit",
        "cta": "Mettez à jour à tout moment pour réactiver toutes les fonctionnalités.",
        "ctaButton": "Mettre à jour",
        "footer": "Vos données sont en sécurité. Vous pouvez mettre à jour quand vous le souhaitez."
      },
      "lastchance": {
        "subject": "Vous nous manquez ! Revenez à PianoPlanner 🎹",
        "greeting": "Bonjour {{name}},",
        "body": "Cela fait une semaine que votre essai a expiré. Nous espérons que vous avez apprécié PianoPlanner !",
        "dataWaiting": "Vous avez {{customers}} clients et {{pianos}} pianos dans votre compte. Ces données vous attendent.",
        "tip": "Avec le plan Solo (€24,50/mois) vous avez tout : clients illimités, optimisation d'itinéraire et rappels automatiques.",
        "cta": "Mettez à jour aujourd'hui et récupérez l'accès à toutes les fonctionnalités.",
        "ctaButton": "Retour à PianoPlanner",
        "footer": "C'est le dernier rappel que nous enverrons. Vous pouvez toujours mettre à jour via la facturation."
      },
      "banner": {
        "welcomeDays": "Bienvenue ! Vous avez {{days}} jours pour tout découvrir",
        "daysLeft": "{{days}} jours restants — mettez à jour pour tout garder",
        "endingSoon": "{{days}} jour(s) restant(s) — votre accès Pro s'arrête bientôt !",
        "expired": "Votre essai a expiré — mettez à jour pour récupérer toutes les fonctionnalités",
        "freePlan": "Plan gratuit — mettez à jour pour l'optimisation d'itinéraire et plus",
        "viewPlans": "Voir les plans",
        "upgradeNow": "Mettre à jour",
        "upgrade": "Mettre à jour"
      }
    },
    "invoiceEmail": {
      "payButton": "💳 Payer maintenant",
      "paySecure": "Payez en toute sécurité par carte bancaire ou autres moyens de paiement",
      "bookingButton": "Planifier votre prochain rendez-vous",
      "bookingHint": "Utilisez votre lien personnel pour planifier facilement votre prochain accord"
    },
    "variableDescriptions": {
      "customerName": "Nom du client",
      "customerEmail": "E-mail du client",
      "customerPhone": "Téléphone du client",
      "customerAddress": "Adresse du client",
      "date": "Date du rendez-vous",
      "time": "Heure du rendez-vous",
      "service": "Nom du service",
      "location": "Lieu/adresse du rendez-vous",
      "notes": "Notes/commentaires",
      "pianoBrand": "Marque du piano (ex. Steinway)",
      "pianoModel": "Modèle du piano",
      "pianoSerial": "Numéro de série du piano",
      "pianoBuildYear": "Année de fabrication du piano",
      "pianoType": "Type (à queue/droit)",
      "pianoColor": "Couleur/finition du piano",
      "pianoLocation": "Emplacement du piano (ex. salon)",
      "lastTuning": "Date du dernier accord",
      "daysSinceTuning": "Jours depuis le dernier accord",
      "monthsSinceTuning": "Mois depuis le dernier accord",
      "serviceInterval": "Intervalle d'accord recommandé en mois",
      "bookingLink": "Lien de réservation personnel du client",
      "reminderNumber": "Numéro de rappel séquentiel (1, 2, 3...)",
      "unsubscribeLink": "Lien de désinscription aux rappels",
      "companyName": "Nom de votre entreprise",
      "companyLogo": "Logo de votre entreprise (en image)",
      "companyAddress": "Adresse de votre entreprise",
      "companyPhone": "Votre numéro de téléphone",
      "companyEmail": "Votre adresse e-mail"
    }
  },
  "support": {
    "pageTitle": "Support - PianoPlanner",
    "title": "Support",
    "subtitle": "Signaler un problème ou poser une question",
    "backToDashboard": "Retour au tableau de bord",
    "subjectLabel": "Sujet",
    "subjectPlaceholder": "Brève description du problème",
    "typeLabel": "Type de signalement",
    "typeBug": "🐛 Bug / Erreur",
    "typeQuestion": "❓ Question",
    "typeFeature": "💡 Demande de fonctionnalité",
    "typeOther": "📋 Autre",
    "priorityLabel": "Priorité",
    "priorityLow": "Basse",
    "priorityMedium": "Moyenne",
    "priorityHigh": "Haute",
    "descriptionLabel": "Description",
    "descriptionPlaceholder": "Décrivez le problème aussi précisément que possible. Que faisiez-vous ? Qu'attendiez-vous ? Que s'est-il passé ?",
    "descriptionHint": "Conseil : Plus il y a de détails, plus vite nous pourrons vous aider",
    "screenshotsLabel": "Captures d'écran (optionnel)",
    "dropFilesHere": "Déposez les fichiers ici ou",
    "browse": "parcourir",
    "fileLimit": "Max. 5 fichiers, chacun max. 5 Mo (images ou PDF)",
    "submitButton": "Envoyer le signalement",
    "thankYou": "Merci pour votre signalement !",
    "successMessage": "Nous avons reçu votre message et vous contacterons dès que possible.",
    "sending": "Envoi...",
    "sendFailed": "Échec de l'envoi",
    "sendError": "Erreur lors de l'envoi : ",
    "maxFilesError": "Maximum 5 fichiers autorisés",
    "fileTooLarge": "{file} est trop volumineux (max. 5 Mo)",
    "invalidFileType": "{file} n'est pas une image ou un PDF"
  },
  "cookieBanner": {
    "message": "Nous utilisons des cookies pour améliorer votre expérience. En continuant à utiliser ce site, vous acceptez notre",
    "privacyLink": "Politique de confidentialité",
    "accept": "Accepter",
    "decline": "Refuser"
  },
  "pwaLauncher": {
    "subtitle": "Votre entreprise de piano",
    "agenda": "Agenda",
    "customers": "Clients",
    "pianos": "Pianos",
    "smartAppointment": "Rendez-vous intelligent",
    "sync": "Synchroniser",
    "shareLink": "Partager le lien",
    "loading": "Chargement...",
    "login": "Connexion",
    "loginSubtitle": "Connectez-vous pour synchroniser",
    "teams": "Équipes"
  },
  "creator": {
    "pageTitle": "À propos du créateur - PianoPlanner",
    "heroTitle": "Passion pour les Pianos, Précision dans la Planification",
    "heroSubtitle": "L'histoire derrière PianoPlanner",
    "heroIntro": "Vous me connaissez probablement comme un collègue du métier. Quelqu'un qui rend visite aux clients avec un marteau d'accord et une oreille attentive. Mais ce que tout le monde ne sait pas, c'est qu'en plus de la technique du piano, j'ai une deuxième grande passion depuis toujours : l'automatisation et les chiffres.",
    "beginTitle": "Le Début",
    "beginText": "PianoPlanner n'est pas apparu de nulle part ; c'est la somme d'années de frustration avec les logiciels existants et d'une passion de toute une vie pour la programmation.",
    "codeTitle": "Du fichier carton au code",
    "codeText1": "Cet amour pour la technologie a commencé tôt. Adolescent, je programmais déjà en BASIC tard dans la nuit sur un ZX Spectrum. Plus tard, armé de mon premier Tulip PC, j'ai écrit mon premier 'vrai' logiciel : une base de données clients numérique pour mon père.",
    "codeText2": "Dans mon enthousiasme juvénile, j'ai ensuite jeté son fichier carton physique, au grand choc de mon père ! Finalement, j'ai tout imprimé proprement pour lui sur l'imprimante matricielle, mais le ton était donné : je voulais organiser les choses plus efficacement, plus rapidement et mieux.",
    "whyTitle": "Pourquoi j'ai créé PianoPlanner",
    "whyText1": "Dans ma propre pratique, je me suis heurté à des murs pendant des années. Je travaillais avec des logiciels américains qui ne comprenaient pas tout à fait notre marché, ou je jonglais avec trois applications différentes pour le calendrier, la facturation et les itinéraires. Je me suis dit : \"Ça doit être plus intelligent.\"",
    "whyText2": "J'ai un grand intérêt pour tout ce qui touche aux chiffres d'affaires (nous savons tous combien le régime de marge peut être complexe). Je voulais un logiciel qui non seulement planifie, mais qui réfléchit aussi à ma gestion d'entreprise.",
    "whyText3": "Quand j'ai décidé de construire l'agenda ultime moi-même, je n'étais pas seul. Je me suis mis au travail avec mes compétences et les conseils de mes enfants et beaux-enfants. L'un diplômé en informatique de HAN. L'autre Game Developer & Sound Designer, diplômé de HKU. Avec mon expérience dans le métier et leur connaissance des dernières technologies (et de l'IA), nous avons développé PianoPlanner.",
    "smartTitle": "Rendez-vous intelligents",
    "smartText": "Le cœur de PianoPlanner est simple : je veux voir d'un coup d'œil si je gagne de l'argent ou si je perds du temps. Je ne veux pas non plus passer trop de temps dans la voiture et je veux utiliser mon temps efficacement. C'est pourquoi nous avons développé Smart Appointments.",
    "colorGreen": "Vert = S'intègre parfaitement dans votre itinéraire",
    "colorOrange": "Orange = Attention au temps de trajet",
    "colorRed": "Rouge = Inefficace, perte de temps",
    "nlTitle": "Fièrement Néerlandais",
    "nlText1": "Contrairement aux grands acteurs américains, je crois en la force locale. PianoPlanner est une initiative indépendante. Vos données sont stockées en toute sécurité et cryptées sur des serveurs européens, en totale conformité avec la législation sur la vie privée.",
    "nlText2": "Je suis fier de ce que nous avons construit. Un système pour les accordeurs de piano, par un accordeur de piano.",
    "signatureGreeting": "Je vous invite chaleureusement à en faire l'expérience vous-même.",
    "signatureBye": "Cordialement,",
    "signatureName": "Edward Meijer",
    "signatureTitle": "PianoPlanner & Collègue Technicien Piano",
    "ctaTitle": "Essayez PianoPlanner vous-même",
    "ctaText": "Commencez gratuitement aujourd'hui et découvrez comment fonctionne vraiment la planification intelligente.",
    "ctaButton": "Commencer gratuitement",
    "aboutPianoPlanner": "À propos de PianoPlanner",
    "aboutCreator": "À propos du créateur",
    "footerMade": "Fait avec amour aux Pays-Bas"
  },
  "footer": {
    "google": "Google Agenda",
    "microsoft": "Microsoft 365",
    "apple": "Apple Calendrier",
    "offline": "Mode Hors Ligne",
    "push": "Notifications Push",
    "languages": "4 Langues",
    "smtp": "SMTP Personnel",
    "route": "Planification d'Itinéraire",
    "navFeatures": "Fonctionnalités",
    "navPricing": "Tarifs",
    "navAbout": "Mon Histoire",
    "navLogin": "Connexion",
    "navPrivacy": "Confidentialité",
    "navTerms": "Conditions",
    "navWhy": "Pourquoi PianoPlanner",
    "navContact": "Contact",
    "navDpa": "Sous-traitance"
  },
  "gazelleMigration": {
    "title": "Migration Gazelle",
    "subtitle": "Importez toutes vos données de Gazelle vers PianoPlanner",
    "backToSettings": "← Retour aux Paramètres",
    "step": {
      "customers": "Clients",
      "pianos": "Pianos",
      "appointments": "Rendez-vous",
      "cleanup": "Nettoyage"
    },
    "status": {
      "notImported": "Non importé",
      "waiting": "En attente...",
      "finalStep": "Dernière étape",
      "imported": "{{count}} importé(s)"
    },
    "step1": {
      "title": "Étape 1 : Importer les Clients",
      "desc": "Téléchargez votre fichier d'export Gazelle \"Clients.csv\". Les ID clients seront conservés pour lier les pianos plus tard.",
      "dropTitle": "Déposez l'export Gazelle : Clients.csv ici",
      "dropHint": "ou cliquez pour parcourir"
    },
    "step2": {
      "title": "Étape 2 : Importer les Pianos",
      "desc": "Téléchargez votre fichier d'export Gazelle \"Pianos.csv\". Les pianos seront automatiquement liés aux clients.",
      "dropTitle": "Déposez l'export Gazelle : Pianos.csv ici",
      "dropHint": "ou cliquez pour parcourir",
      "linkInfoTitle": "Liaison Automatique des Clients",
      "linkInfoDesc": "Les pianos seront liés aux clients via l'ID Original stocké dans les notes client."
    },
    "step3": {
      "title": "Étape 3 : Importer les Rendez-vous",
      "desc": "Téléchargez votre fichier d'export Gazelle \"Events.csv\" pour importer l'historique des rendez-vous.",
      "dropTitle": "Déposez l'export Gazelle : Events.csv ici",
      "dropHint": "ou cliquez pour parcourir",
      "warningTitle": "Données Historiques Uniquement",
      "warningDesc": "Ceci importe les anciens rendez-vous comme référence. Les futurs rendez-vous doivent être créés dans PianoPlanner."
    },
    "step4": {
      "title": "Étape 4 : Nettoyage",
      "desc": "Supprimez les métadonnées d'import de vos enregistrements pour un nouveau départ.",
      "warningTitle": "Important : C'est permanent !",
      "warningDesc": "Après le nettoyage, vous ne pourrez plus lier de nouvelles importations Gazelle à ces clients. Les références ID Original sont nécessaires pour connecter les pianos et rendez-vous aux clients.",
      "warningNote": "Ne nettoyez que si vous êtes à 100% sûr d'avoir terminé toutes les importations !",
      "whatRemoved": "Qu'est-ce qui est supprimé ?",
      "whatRemovedDesc": "Seuls ces marqueurs d'import spécifiques sont supprimés :",
      "markerBatch": "Import Batch: imp_xxx",
      "markerClient": "Original ID: cli_xxx",
      "markerPiano": "Original Piano ID: ins_xxx",
      "markerEvent": "Original Event ID: evt_xxx",
      "notesPreserved": "Vos propres notes et commentaires sont préservés !",
      "summaryTitle": "Résumé de l'Import",
      "recordsWithMeta": "{{count}} enregistrements avec métadonnées d'import",
      "pending": "En attente",
      "done": "Terminé",
      "cleaningUp": "Nettoyage en cours...",
      "complete": "Migration Terminée !",
      "completeDesc": "Vos données ont été importées avec succès depuis Gazelle."
    },
    "stats": {
      "total": "Total",
      "active": "Actif",
      "inactive": "Inactif",
      "withEmail": "Avec Email",
      "withCustomer": "Avec Client",
      "completed": "Terminé",
      "canceled": "Annulé"
    },
    "table": {
      "name": "Nom",
      "email": "Email",
      "phone": "Téléphone",
      "city": "Ville",
      "status": "Statut",
      "brand": "Marque",
      "model": "Modèle",
      "customer": "Client",
      "type": "Type",
      "date": "Date",
      "title": "Titre",
      "duration": "Durée"
    },
    "options": {
      "title": "Options d'Import",
      "activeOnly": "Importer uniquement les clients actifs",
      "activeOnlyDesc": "Ignorer les clients marqués comme inactifs dans Gazelle",
      "skipDuplicates": "Ignorer les doublons",
      "skipDuplicatesDesc": "Ignorer les clients dont l'email est déjà dans votre base",
      "cleanNotes": "Nettoyer les notes",
      "cleanNotesDesc": "Supprimer les lignes en double et les artefacts de fusion des notes",
      "activeOnlyPianos": "Importer uniquement les pianos actifs",
      "activeOnlyPianosDesc": "Ignorer les pianos marqués comme inactifs dans Gazelle",
      "skipNoCustomer": "Ignorer si client non trouvé",
      "skipNoCustomerDesc": "Importer uniquement les pianos pouvant être liés à un client existant",
      "completedOnly": "Importer uniquement les rendez-vous terminés",
      "completedOnlyDesc": "Ignorer les rendez-vous annulés et en attente",
      "skipNoCustomerEvents": "Ignorer si client non trouvé",
      "skipNoCustomerEventsDesc": "Importer uniquement les rendez-vous pouvant être liés à un client existant"
    },
    "buttons": {
      "cancel": "Annuler",
      "back": "← Retour",
      "importCustomers": "Importer les Clients",
      "importPianos": "Importer les Pianos",
      "importAppointments": "Importer les Rendez-vous",
      "nextPianos": "Suivant : Pianos →",
      "nextAppointments": "Suivant : Rendez-vous →",
      "nextCleanup": "Suivant : Nettoyage →",
      "skipStep": "Passer cette étape",
      "skipFinish": "Passer & Terminer",
      "cleanupNotes": "Nettoyer les Notes",
      "viewCustomers": "Voir les Clients",
      "viewPianos": "Voir les Pianos",
      "goToDashboard": "Aller au Tableau de Bord"
    },
    "progress": {
      "importingCustomers": "Import des clients en cours...",
      "importingPianos": "Import des pianos en cours...",
      "importingAppointments": "Import des rendez-vous en cours..."
    },
    "results": {
      "customersSuccess": "Clients Importés avec Succès !",
      "pianosSuccess": "Pianos Importés avec Succès !",
      "appointmentsSuccess": "Rendez-vous Importés avec Succès !",
      "importedSkipped": "{{imported}} importé(s), {{skipped}} ignoré(s)"
    },
    "confirm": {
      "title": "⚠️ IMPORTANT : Cette action est permanente !",
      "message": "Après le nettoyage, vous ne pourrez PLUS lier de nouvelles importations Gazelle à ces clients.\n\nContinuez uniquement si vous êtes à 100% sûr d'avoir terminé TOUTES les importations Gazelle.\n\nContinuer le nettoyage ?"
    }
  },
  "guide": {
    "title": "Guide d'utilisation",
    "subtitle": "Tout ce que vous devez savoir pour tirer le meilleur parti de PianoPlanner",
    "sidebar": {
      "gettingStarted": "Premiers pas",
      "firstSteps": "Premiers pas",
      "businessDetails": "Informations entreprise",
      "workingHours": "Heures de travail",
      "serviceArea": "Zone de service",
      "routeEfficiency": "Efficacité des itinéraires",
      "calendarSync": "Sync calendrier",
      "googleCalendar": "Google Agenda",
      "microsoftCalendar": "Microsoft 365",
      "appleCalendar": "Apple Calendrier",
      "syncMethods": "Méthodes de sync",
      "advancedSettings": "Paramètres avancés",
      "customDomain": "Domaine email personnalisé",
      "emailTemplates": "Modèles d'email",
      "tuningInvitations": "Invitations d'accord",
      "customerFeatures": "Fonctionnalités client",
      "bookingLink": "Lien de réservation",
      "customerLink": "Liens personnels",
      "smartSuggestions": "Suggestions intelligentes",
      "theaterAvailability": "Disponibilité théâtre",
      "pianoService": "Historique de service piano",
      "otherFeatures": "Autres fonctionnalités",
      "slotDuration": "Durée des créneaux",
      "importData": "Importer des données",
      "calendarIntegration": "Intégration calendrier",
      "dataManagement": "Gestion des données",
      "emailSetup": "Paramètres e-mail",
      "onlineBooking": "Réservation en ligne",
      "pianosService": "Pianos & Service",
      "serviceHistory": "Historique de service",
      "workshopPlanning": "Atelier",
      "workshopSetup": "Planification Atelier",
      "walkInTasks": "Sans RDV & Tâches",
      "smartFill": "Remplir route",
      "switchCalendar": "Changer de calendrier",
      "routeAnalysis": "Analyse d'itinéraire",
      "privateAppointments": "Rendez-vous privés",
      "mileageTracking": "Suivi kilométrique",
      "projectPlanner": "Planificateur de projets",
      "dailyUse": "Utilisation quotidienne",
      "dashboard": "Tableau de bord & Agenda",
      "customers": "Gestion des clients",
      "pianos": "Gestion des pianos",
      "travelReport": "Rapport de déplacement",
      "invoicing": "Facturation",
      "invoicingSetup": "Configuration facturation",
      "invoicingCreate": "Créer des factures",
      "invoicingBtw": "Gestion TVA",
      "autoTuningReminders": "Rappels automatiques",
      "accountingIntegration": "Intégration comptable",
      "invoicingMobile": "Facturation mobile",
      "servicesConfig": "Services",
      "reschedule": "Reporter un rendez-vous",
      "routeOptimizer": "Optimiseur d'itinéraire",
      "qrCode": "Code QR",
      "mobileApp": "Application mobile",
      "pwaInstall": "Installer l'application",
      "pushNotifications": "Notifications push",
      "molliePayments": "Paiements en ligne",
      "accountSection": "Compte",
      "subscription": "Abonnement et facturation",
      "teams": "Équipes",
      "streamlineDay": "Optimiser la journee",
      "trafficPrediction": "Prediction de trafic",
      "invoiceBookingLink": "Lien de réservation dans les factures",
      "inventory": "Inventaire",
      "ublEinvoicing": "UBL / e-Facturation",
      "blockedDays": "Jours bloqués",
      "languageSettings": "Langue",
      "tunerPortal": "Portail accordeur",
      "leads": "Gestion des leads"
    },
    "common": {
      "tip": "Conseil",
      "important": "Important",
      "yes": "Oui"
    },
    "firstSteps": {
      "title": "Premiers pas",
      "intro": "Bienvenue sur PianoPlanner ! Ce guide vous aidera à démarrer rapidement. Commencez par ces paramètres essentiels et vous serez prêt à réserver votre premier rendez-vous en quelques minutes.",
      "quickStartTitle": "Démarrage rapide (5 minutes)",
      "quickStart1": "Informations entreprise - Votre nom et adresse pour les confirmations",
      "quickStart2": "Heures de travail - Quand les clients peuvent-ils réserver ?",
      "quickStart3": "Services - Que proposez-vous ? (Accord, réglage, etc.)",
      "quickStart4": "Votre premier client - Ajoutez-en un et essayez vous-même",
      "settingsTitle": "Trouver les paramètres",
      "settingsText": "Tout ce que vous devez configurer se trouve dans Paramètres (l'engrenage ⚙️ dans le menu). Ci-dessous, nous vous guidons étape par étape.",
      "recommendedOrder": "Ordre recommandé",
      "orderList": "1. Coordonnées entreprise → 2. Heures de travail → 3. Zone de service → 4. Calendrier → 5. E-mail → 6. Lien de réservation",
      "configureText": "Prenez le temps de tout configurer correctement. Cela vous fera gagner du temps plus tard et garantira que :",
      "benefit1": "Les temps de trajet sont calculés correctement",
      "benefit2": "Les clients ne peuvent réserver que lorsque vous êtes disponible",
      "benefit3": "Les e-mails ont un aspect professionnel avec vos propres coordonnées",
      "benefit4": "Les rendez-vous apparaissent automatiquement dans votre calendrier",
      "onboardingTip": "Utilisez l'assistant d'intégration (Paramètres → Intégration) pour être guidé étape par étape à travers les réglages les plus importants."
    },
    "businessDetails": {
      "title": "Informations entreprise",
      "intro": "Vos informations d'entreprise apparaissent dans les emails de confirmation et sur votre page de réservation. Remplissez-les correctement pour que les clients sachent exactement qui vous êtes.",
      "whatToFillTitle": "Quoi remplir ?",
      "whatToFillText": "Dans Paramètres → Entreprise, vous trouverez les champs suivants :",
      "field1": "Nom de l'entreprise - Votre nom commercial officiel",
      "field2": "Adresse - Votre adresse professionnelle (utilisée pour les calculs d'itinéraire)",
      "field3": "Numéro de téléphone - Où les clients peuvent vous joindre",
      "field4": "Adresse email - Pour les confirmations (peut être votre propre domaine plus tard)",
      "field5": "Logo - Téléchargez votre logo pour une apparence professionnelle",
      "whyImportantTitle": "Pourquoi est-ce important ?",
      "whyImportantText": "Votre adresse est utilisée comme point de départ pour les calculs d'itinéraire. Si un client habite à proximité, le système le détecte et peut faire des suggestions plus intelligentes. Votre nom d'entreprise et logo apparaissent dans chaque email que vous envoyez.",
      "tipText": "Vous pouvez toujours modifier vos informations plus tard. Commencez par les bases et affinez au fur et à mesure que vous gagnez en expérience.",
      "howToSetup": "Comment configurer vos coordonnées ?",
      "step1Title": "Allez dans Paramètres",
      "step1Text": "Cliquez sur Paramètres dans le menu, ou allez directement à l'onglet 'Entreprise'.",
      "step2Title": "Remplissez vos informations",
      "step2Text": "Nom de l'entreprise, votre nom, e-mail, téléphone et adresse complète. Utilisez les suggestions Google Maps pour une adresse exacte.",
      "step3Title": "Téléchargez votre logo (optionnel)",
      "step3Text": "Votre logo apparaît sur la page de réservation et dans les e-mails.",
      "step4Title": "Vérifiez votre adresse",
      "step4Text": "Assurez-vous que votre adresse est correcte - elle est utilisée pour les calculs de temps de trajet.",
      "step5Title": "Enregistrer",
      "step5Text": "Cliquez sur Enregistrer pour sauvegarder vos informations.",
      "warning": "Sans adresse correcte, les temps de trajet ne peuvent pas être calculés. Remplissez ceci en premier !"
    },
    "workingHours": {
      "title": "Définir les heures de travail",
      "intro": "Vos heures de travail déterminent quand les clients peuvent réserver des rendez-vous. Le système n'affiche que les créneaux horaires dans ces heures.",
      "whereToFindTitle": "Où trouver cela ?",
      "whereToFindText": "Allez dans Paramètres → Entreprise et faites défiler jusqu'à \"Disponibilité\".",
      "howToSetTitle": "Comment configurer ?",
      "howToSetItem1": "Cliquez sur un jour pour l'activer ou le désactiver",
      "howToSetItem2": "Définissez l'heure de début et de fin par jour",
      "howToSetItem3": "Utilisez des heures différentes pour différents jours (ex. mercredi plus court)",
      "exampleTitle": "Exemple",
      "exampleText": "La plupart des techniciens piano travaillent du lundi au vendredi de 9h00 à 17h00. Le samedi est optionnel. Dimanche généralement fermé.",
      "importantTitle": "Conseils importants",
      "importantItem1": "Tenez compte du temps de trajet - ne planifiez pas trop serré",
      "importantItem2": "Pause déjeuner ? Le système évite automatiquement les heures autour de 12h00-13h00 sauf si vous désactivez cela",
      "importantItem3": "Théâtres ? Définissez une \"Disponibilité théâtre\" séparée (voir section ci-dessous)",
      "daysAndTimes": "Jours et horaires",
      "daysAndTimesText": "Sélectionnez les jours où vous travaillez et définissez l'heure de début et de fin pour chaque jour.",
      "option1": "Option 1 : Horaires fixes chaque jour",
      "option2": "Option 2 : Horaires différents par jour",
      "option3": "Option 3 : Certains jours de repos",
      "settingBuffers": "Définir les tampons",
      "buffersText": "Les tampons vous aident à garder du temps entre les rendez-vous et empêchent les clients de réserver trop au dernier moment.",
      "bufferType": "Type de tampon",
      "whatDoesItDo": "Que fait-ce ?",
      "recommended": "Recommandé",
      "bufferBefore": "Tampon avant rendez-vous",
      "bufferBeforeDesc": "Temps minimum entre la réservation et le rendez-vous",
      "bufferBeforeRec": "2 jours recommandés pour la planification",
      "bufferAfter": "Tampon après rendez-vous",
      "bufferAfterDesc": "Temps supplémentaire après un rendez-vous pour les notes ou retards imprévus",
      "bufferAfterRec": "15 minutes recommandées",
      "minBookingTime": "Temps de réservation minimum",
      "minBookingTimeDesc": "Combien de temps à l'avance les clients doivent-ils réserver ?",
      "minBookingTimeRec": "2 jours vous donne le temps de planifier",
      "tipText": "Commencez avec des heures de travail larges et restreignez plus tard si certains horaires ne fonctionnent pas."
    },
    "serviceArea": {
      "title": "Définir votre zone de service",
      "intro": "Votre zone de service détermine jusqu'où vous êtes prêt à vous déplacer pour les rendez-vous. Cela aide le système à faire des suggestions intelligentes et empêche les réservations trop éloignées.",
      "howItWorksTitle": "Comment ça marche ?",
      "howItWorksText": "Définissez une distance de déplacement maximale (ex. 50 km). Le système :",
      "howItWorks1": "Filtre les demandes de réservation en dehors de votre zone",
      "howItWorks2": "Priorise les clients proches les uns des autres",
      "howItWorks3": "Calcule le temps de trajet pour l'optimisation des itinéraires",
      "settingTitle": "Configuration",
      "step1Title": "Allez dans Paramètres → Entreprise",
      "step1Text": "Faites défiler jusqu'à la section \"Zone de service\".",
      "step2Title": "Choisissez votre distance maximale",
      "step2Text": "Sélectionnez combien de kilomètres vous êtes prêt à parcourir au maximum. La valeur par défaut est 50 km.",
      "step3Title": "Optionnel : Définir des zones de code postal",
      "step3Text": "Vous pouvez également spécifier des zones de code postal spécifiques où vous travaillez.",
      "tipText": "Commencez large (ex. 75 km) et restreignez plus tard si vous recevez trop de demandes de loin.",
      "howToSet": "Comment définir votre zone de service ?",
      "step4Title": "4. Enregistrer",
      "step4Text": "Cliquez sur Enregistrer. Le système prend maintenant en compte votre zone de service pour les réservations et suggestions.",
      "extraOption": "Option supplémentaire",
      "extraOptionText": "Vous pouvez également exclure des zones de codes postaux spécifiques si vous ne souhaitez pas desservir certaines régions."
    },
    "routeEfficiency": {
      "title": "Comprendre l'efficacité des itinéraires",
      "intro": "PianoPlanner vous montre l'efficacité de votre planning avec un système de couleurs. Ainsi, vous pouvez voir d'un coup d'œil si votre journée est bien planifiée.",
      "colorsTitle": "Les couleurs",
      "colorGreen": "Vert - Excellent ! Temps de trajet court, itinéraire efficace",
      "colorOrange": "Orange - Acceptable, mais il y a de la marge d'amélioration",
      "colorRed": "Rouge - Temps de trajet long, envisagez de replanifier",
      "whereToSeeTitle": "Où le voir ?",
      "whereToSeeText": "Sur le tableau de bord, vous verrez un petit indicateur de couleur pour chaque rendez-vous. Vérifiez votre vue quotidienne ou hebdomadaire pour reconnaître les motifs.",
      "tipsTitle": "Conseils pour de meilleurs itinéraires",
      "tip1": "Planifiez les rendez-vous dans la même région le même jour",
      "tip2": "Utilisez les suggestions intelligentes - elles tiennent compte de vos rendez-vous existants",
      "tip3": "Consultez la vue carte pour voir vos rendez-vous géographiquement",
      "colorLegend": "Légende des couleurs",
      "blueTitle": "🔵 Par défaut",
      "blueText": "Pas de données de trajet disponibles - le temps de trajet n'a pas été calculé",
      "greenTitle": "🟢 Vert",
      "greenText": "Temps de trajet court - planification efficace !",
      "orangeTitle": "🟠 Orange",
      "orangeText": "Temps de trajet moyen - acceptable mais pourrait être mieux",
      "redTitle": "🔴 Rouge",
      "redText": "Long temps de trajet - envisagez de reprogrammer",
      "calculateTravel": "Comment le temps de trajet est-il calculé ?",
      "calcStep1Title": "Calcul automatique",
      "calcStep1Text": "Lors de la création d'un rendez-vous, PianoPlanner calcule automatiquement le temps de trajet depuis votre emplacement précédent.",
      "calcStep2Title": "Code couleur",
      "calcStep2Text": "La couleur indique l'efficacité du trajet par rapport à vos limites définies.",
      "customizeLimits": "Personnaliser les limites",
      "customizeLimitsText": "Vous pouvez ajuster les seuils de temps de trajet dans Paramètres → Entreprise. Définissez ce que 'court', 'moyen' et 'long' signifie pour vous."
    },
    "googleCalendar": {
      "title": "Connecter Google Agenda",
      "intro": "Synchronisez PianoPlanner avec votre Google Agenda pour une synchronisation bidirectionnelle. Les rendez-vous apparaissent dans les deux calendriers et les mises à jour sont automatiquement synchronisées.",
      "step1Title": "1. Allez dans Paramètres → Intégrations",
      "step1Text": "Ouvrez le menu des paramètres et cliquez sur \"Intégrations\" ou \"Sync Calendrier\".",
      "step2Title": "2. Cliquez sur \"Connecter Google Agenda\"",
      "step2Text": "Vous serez redirigé vers Google pour vous connecter.",
      "step3Title": "3. Connectez-vous à Google",
      "step3Text": "Utilisez le compte Google que vous souhaitez connecter. Autorisez les permissions demandées.",
      "step4Title": "4. Sélectionnez votre calendrier",
      "step4Text": "Choisissez quel Google Agenda vous souhaitez synchroniser (généralement votre calendrier principal).",
      "step5Title": "5. Terminé !",
      "step5Text": "Les nouveaux rendez-vous apparaissent maintenant automatiquement dans votre Google Agenda.",
      "whatSyncsTitle": "Qu'est-ce qui est synchronisé ?",
      "whatSyncsText": "Nouveaux rendez-vous dans PianoPlanner → Google Agenda, Modifications d'heure/date, Annulations (le rendez-vous est supprimé/marqué), Événements Google Agenda → PianoPlanner (blocage)",
      "tipText": "La synchronisation bidirectionnelle signifie que si vous bloquez quelque chose dans Google, PianoPlanner en tient également compte lors de l'affichage des créneaux disponibles.",
      "creatingConnection": "Création de la connexion",
      "syncOptions": "Options de synchronisation",
      "option": "Option",
      "description": "Description",
      "twoWaySync": "Synchronisation bidirectionnelle",
      "twoWaySyncDesc": "Les modifications dans les deux calendriers sont synchronisées",
      "toGoogleOnly": "Vers Google uniquement",
      "toGoogleOnlyDesc": "Les rendez-vous sont uniquement envoyés de PianoPlanner vers Google",
      "includeTravelTime": "Inclure le temps de trajet",
      "includeTravelTimeDesc": "Ajouter automatiquement le temps de trajet aux événements du calendrier"
    },
    "microsoftCalendar": {
      "title": "Connecter Microsoft 365",
      "intro": "Utilisez-vous Outlook ou Microsoft 365 ? Connectez votre calendrier pour une synchronisation transparente avec PianoPlanner.",
      "step1Title": "1. Allez dans Paramètres → Intégrations",
      "step1Text": "Ouvrez le menu des paramètres.",
      "step2Title": "2. Cliquez sur \"Connecter Microsoft 365\"",
      "step2Text": "Vous serez redirigé vers Microsoft pour vous connecter.",
      "step3Title": "3. Connectez-vous avec votre compte Microsoft",
      "step3Text": "Cela peut être un compte personnel ou professionnel. Autorisez les permissions.",
      "step4Title": "4. Sélectionnez votre calendrier",
      "step4Text": "Choisissez quel calendrier Outlook vous souhaitez utiliser.",
      "step5Title": "5. Synchronisation active",
      "step5Text": "Vos rendez-vous sont maintenant synchronisés.",
      "tipText": "Les comptes Microsoft 365 Business peuvent nécessiter une approbation supplémentaire de votre administrateur informatique.",
      "whatYouNeed": "Ce dont vous avez besoin",
      "need1": "Un compte Microsoft 365 ou Outlook.com",
      "need2": "Accès à votre calendrier",
      "connecting": "Connexion",
      "whatGetsSynced": "Qu'est-ce qui est synchronisé ?",
      "sync1": "Nouveaux rendez-vous dans PianoPlanner",
      "sync2": "Modifications de l'heure et de la date",
      "sync3": "Annulations",
      "worksWithBoth": "Fonctionne avec les deux",
      "worksWithBothText": "Les comptes personnels (Outlook.com) et professionnels (Microsoft 365) sont pris en charge."
    },
    "appleCalendar": {
      "title": "Apple Calendrier (iCloud)",
      "intro": "Apple Calendrier fonctionne un peu différemment de Google et Microsoft. Vous pouvez vous abonner à votre calendrier PianoPlanner dans Apple Calendrier, mais c'est une synchronisation unidirectionnelle.",
      "howItWorksTitle": "Comment ça marche ?",
      "howItWorksText": "PianoPlanner fournit un flux de calendrier (URL ICS) que vous pouvez ajouter à Apple Calendrier. Le calendrier se rafraîchit périodiquement (toutes les 15-60 minutes).",
      "step1Title": "1. Copiez votre URL de flux",
      "step1Text": "Allez dans Paramètres → Intégrations et copiez votre lien ICS personnel.",
      "step2Title": "2. Ouvrez Apple Calendrier",
      "step2Text": "Sur Mac : Calendrier → Fichier → Nouvel abonnement à un calendrier, Sur iPhone : Réglages → Calendrier → Comptes → Ajouter un compte → Autre",
      "step3Title": "3. Collez l'URL",
      "step3Text": "Collez le lien copié et confirmez.",
      "step4Title": "4. Définissez l'intervalle de rafraîchissement",
      "step4Text": "Choisissez la fréquence de rafraîchissement du calendrier (par défaut : toutes les 15 minutes).",
      "limitationTitle": "Limitation",
      "limitationText": "C'est en lecture seule. Les modifications dans Apple Calendrier ne seront PAS renvoyées à PianoPlanner. Effectuez toujours les modifications dans PianoPlanner lui-même.",
      "requiredPassword": "Requis : Mot de passe spécifique à l'application",
      "requiredPasswordText": "Apple exige un mot de passe spécifique à l'application pour l'accès par des applications tierces. C'est une couche de sécurité supplémentaire.",
      "creatingPassword": "Créer un mot de passe spécifique à l'application",
      "passStep1Title": "1. Accédez à l'identifiant Apple",
      "passStep1Text": "Ouvrez appleid.apple.com et connectez-vous avec votre identifiant Apple.",
      "passStep2Title": "2. Allez dans Sécurité",
      "passStep2Text": "Faites défiler jusqu'à la section 'Mots de passe spécifiques aux apps'.",
      "passStep3Title": "3. Générer un mot de passe",
      "passStep3Text": "Cliquez sur 'Générer un mot de passe' et donnez-lui un nom (ex. 'PianoPlanner').",
      "passStep4Title": "4. Copier le mot de passe",
      "passStep4Text": "Copiez le mot de passe généré - vous ne le verrez qu'une seule fois !",
      "connectionInPP": "Connexion dans PianoPlanner",
      "connStep1Title": "1. Copiez l'URL du flux de calendrier",
      "connStep1Text": "Allez dans Paramètres → Intégrations et copiez l'URL du flux iCal.",
      "connStep2Title": "2. Ouvrez Calendrier Apple",
      "connStep2Text": "Sur Mac : Fichier → Nouvel abonnement au calendrier. Sur iPhone/iPad : Réglages → Calendrier → Comptes → Ajouter un compte.",
      "connStep3Title": "3. Collez l'URL",
      "connStep3Text": "Collez l'URL du flux copiée dans le champ URL.",
      "connStep4Title": "4. Configurer les paramètres",
      "connStep4Text": "Choisissez un nom pour le calendrier et définissez l'intervalle de rafraîchissement.",
      "connStep5Title": "5. S'abonner",
      "connStep5Text": "Cliquez sur S'abonner ou OK. Vos rendez-vous apparaissent maintenant dans Calendrier Apple !"
    },
    "syncMethods": {
      "title": "Méthodes de synchronisation comparées",
      "intro": "Toutes les synchronisations de calendrier ne sont pas égales. Voici les différences entre les méthodes.",
      "tableCalendar": "Calendrier",
      "tableSyncType": "Type de sync",
      "tableDirection": "Direction",
      "tableRealTime": "Temps réel",
      "twoWay": "Bidirectionnel",
      "oneWay": "Unidirectionnel",
      "bothDirections": "Les deux directions",
      "toApple": "→ Uniquement vers Apple",
      "near": "Presque",
      "delayed": "Différé (15-60 min)",
      "recommendationTitle": "Recommandation",
      "recommendationText": "Si vous avez le choix, utilisez Google Agenda pour la meilleure expérience. La synchronisation bidirectionnelle est la plus complète et fiable.",
      "method": "Méthode",
      "direction": "Direction",
      "realtime": "Temps réel",
      "bestFor": "Meilleur pour",
      "googleBestFor": "Toute personne avec un compte Google - intégration la plus complète",
      "microsoftBestFor": "Utilisateurs Microsoft 365 ou Outlook",
      "appleBestFor": "Toute personne utilisant Calendrier iCloud comme calendrier principal",
      "icalFeed": "Flux iCal",
      "readOnly": "Lecture seule",
      "every15to60": "Toutes les 15-60 min",
      "icalBestFor": "Synchronisation simple en lecture seule avec n'importe quelle application de calendrier",
      "usingIcal": "Vos rendez-vous d'accordage dans votre propre agenda de confiance",
      "icalIntro": "Souhaitez-vous voir automatiquement vos rendez-vous d'accordage dans l'agenda que vous utilisez déjà sur votre téléphone ou ordinateur (comme Samsung, Google ou Outlook) ? C'est très simple — il suffit de connecter les agendas.",
      "icalStep1Title": "Étape 1 : Copiez le lien",
      "icalStep1Text": "Allez dans Paramètres → Intégrations. Vous y trouverez un bouton pour copier le lien de l'agenda. Cliquez dessus — le lien est maintenant dans votre presse-papiers.",
      "icalStep2Title": "Étape 2 : Collez le lien dans votre agenda",
      "icalStep2Text": "Ouvrez votre propre application d'agenda et cherchez l'option pour ajouter un agenda.",
      "icalHow": "Comment ça marche ?",
      "icalHowText": "Vous copiez une 'clé numérique' spéciale (un lien). Vous la collez une seule fois dans votre propre application d'agenda. Ensuite, tous vos rendez-vous se synchronisent automatiquement.",
      "icalAppTipsTitle": "Instructions par application",
      "icalTipGoogle": "Allez (de préférence sur l'ordinateur) à 'Ajouter un agenda' et choisissez 'Par URL'.",
      "icalTipOutlook": "Choisissez 'Nouvel agenda' puis sélectionnez 'Depuis le réseau' ou 'Depuis Internet'.",
      "icalGoodToKnow": "Bon à savoir",
      "icalNote1": "Consultation uniquement — vous voyez vos rendez-vous dans votre propre agenda, mais les modifications se font dans PianoPlanner.",
      "icalNote2": "Automatique — dès que vous planifiez un rendez-vous, il apparaît automatiquement dans votre autre agenda.",
      "whichMethod": "Quelle méthode dois-je choisir ?",
      "whichMethodText": "Cela dépend du calendrier que vous utilisez. Google offre la meilleure intégration, Microsoft est idéal pour les utilisateurs professionnels, et iCal fonctionne partout."
    },
    "customDomain": {
      "title": "Utiliser votre propre domaine email",
      "intro": "Vous voulez que les emails de confirmation viennent de info@votreentreprise.com au lieu de noreply@pianoplanner.com ? C'est possible ! Avec votre propre serveur SMTP.",
      "whatIsSmtpTitle": "Qu'est-ce que SMTP ?",
      "whatIsSmtpText": "SMTP (Simple Mail Transfer Protocol) est le standard pour l'envoi d'emails. Si vous avez votre propre adresse email (ex. via votre hébergeur web), vous avez probablement aussi des identifiants SMTP.",
      "step1Title": "1. Rassemblez vos informations SMTP",
      "step1Text": "Vous avez besoin de : Serveur SMTP (ex. smtp.votrefournisseur.com), Port (généralement 587 ou 465), Nom d'utilisateur (souvent votre adresse email complète), Mot de passe",
      "step2Title": "2. Allez dans Paramètres → Email",
      "step2Text": "Faites défiler jusqu'à la section \"SMTP personnalisé\".",
      "step3Title": "3. Entrez vos informations",
      "step3Text": "Entrez les détails du serveur, le port, le nom d'utilisateur et le mot de passe.",
      "step4Title": "4. Testez la connexion",
      "step4Text": "Cliquez sur \"Envoyer un test\" pour vérifier que tout fonctionne.",
      "step5Title": "5. Activez",
      "step5Text": "Basculez l'interrupteur sur \"Activé\" pour utiliser votre propre SMTP.",
      "tipText": "Pas de connaissances techniques ? Demandez à votre hébergeur web ou administrateur informatique les détails SMTP. La plupart des forfaits d'hébergement incluent l'email.",
      "popularProvidersTitle": "Fournisseurs populaires",
      "providersList": "Gmail (avec mot de passe d'application), Microsoft 365, OVH, Gandi, Infomaniak",
      "whySmtp": "Pourquoi utiliser votre propre SMTP ?",
      "reason1": "Les e-mails viennent de votre propre domaine (info@votreentreprise.fr)",
      "reason2": "Apparence plus professionnelle",
      "reason3": "Moins susceptible d'être intercepté par les filtres anti-spam",
      "reason4": "Contrôle total sur votre communication par e-mail",
      "smtpSetup": "Configuration SMTP",
      "field": "Champ",
      "example": "Exemple",
      "explanation": "Explication",
      "smtpHost": "Hôte SMTP",
      "smtpHostDesc": "L'adresse de votre serveur mail (ex. smtp.gmail.com)",
      "port": "Port",
      "portDesc": "Généralement 587 (TLS) ou 465 (SSL)",
      "username": "Nom d'utilisateur",
      "usernameDesc": "Généralement votre adresse e-mail complète",
      "password": "Mot de passe",
      "passwordDesc": "Votre mot de passe e-mail ou mot de passe spécifique à l'app",
      "fromAddress": "Adresse d'expédition",
      "fromAddressDesc": "L'adresse e-mail affichée comme expéditeur",
      "testSettings": "Tester vos paramètres",
      "testSettingsText": "Après avoir rempli, cliquez sur 'Envoyer un test' pour vérifier que tout fonctionne avant d'activer.",
      "commonSettings": "Paramètres courants",
      "provider": "Fournisseur",
      "host": "Hôte"
    },
    "emailTemplates": {
      "title": "Personnaliser les modèles d'email",
      "intro": "PianoPlanner envoie automatiquement des emails pour les confirmations, rappels et annulations. Vous pouvez les personnaliser entièrement selon votre propre style.",
      "typesTitle": "Modèles disponibles",
      "typeConfirmation": "Confirmation - Envoyé dès qu'un rendez-vous est réservé",
      "typeReminder": "Rappel - Envoyé 24 heures avant le rendez-vous",
      "typeCancellation": "Annulation - Envoyé si vous annulez un rendez-vous",
      "typeInvitation": "Invitation d'accord - Pour inviter les clients à réserver un rendez-vous",
      "editingTitle": "Modifier les modèles",
      "step1Title": "1. Allez dans Paramètres → Modèles d'email",
      "step1Text": "Vous verrez une liste de tous les modèles disponibles.",
      "step2Title": "2. Cliquez sur un modèle",
      "step2Text": "Ouvrez le modèle que vous souhaitez personnaliser.",
      "step3Title": "3. Modifiez le texte",
      "step3Text": "Ajustez la ligne d'objet et le contenu. Utilisez des variables pour les données dynamiques.",
      "step4Title": "4. Enregistrez",
      "step4Text": "Cliquez sur \"Enregistrer\" pour conserver vos modifications.",
      "variablesTitle": "Variables disponibles",
      "variablesText": "Vous pouvez utiliser ces variables dans vos modèles :",
      "varCustomerName": "{{customerName}} - Nom du client",
      "varDate": "{{date}} - Date du rendez-vous",
      "varTime": "{{time}} - Heure du rendez-vous",
      "varService": "{{service}} - Type de service",
      "varAddress": "{{address}} - Adresse du client",
      "varCompanyName": "{{companyName}} - Votre nom d'entreprise",
      "tipText": "Gardez les emails courts et clairs. Les clients apprécient une communication directe et personnelle.",
      "availableTemplates": "Modèles disponibles",
      "template1": "Confirmation de rendez-vous",
      "template2": "Rappel de rendez-vous",
      "template3": "Annulation de rendez-vous",
      "template4": "Invitation à l'accordage",
      "template5": "Notification de réservation (pour vous-même)",
      "editingTemplate": "Modifier le modèle",
      "availableVariables": "Variables disponibles",
      "variable": "Variable",
      "replacedBy": "Remplacé par",
      "varCompanyPhone": "{{companyPhone}}",
      "varCompanyEmail": "{{companyEmail}}",
      "editorModes": "L'éditeur de modèles — Deux modes",
      "simpleMode": "Mode simple (recommandé pour les débutants)",
      "simpleModeText": "Tapez du texte normal comme dans un e-mail. Chaque nouvelle ligne devient automatiquement un paragraphe. Les variables (comme {{nomClient}}) peuvent être tapées dans le texte ou insérées en cliquant dans la liste à droite. PianoPlanner en fait automatiquement un e-mail bien formaté avec votre logo et votre identité visuelle.",
      "advancedMode": "Mode avancé (pour utilisateurs expérimentés)",
      "advancedModeText": "Écrivez votre propre code HTML pour un contrôle total sur la mise en forme. Utile si vous êtes designer ou si vous souhaitez reproduire un design spécifique.",
      "step5Title": "5. Consultez l'aperçu",
      "step5Text": "À droite, vous voyez un aperçu en direct de l'e-mail. Cliquez sur \"Actualiser\" pour mettre à jour l'aperçu après des modifications.",
      "step6Title": "6. Testez et enregistrez",
      "step6Text": "Cliquez sur \"Envoyer un test\" pour envoyer un exemple à votre propre adresse e-mail. Satisfait ? Cliquez sur \"Enregistrer\". Vous pouvez toujours revenir au modèle par défaut via \"Réinitialiser\".",
      "tipTitle": "Conseil",
      "variablesExplanation": "Les variables sont des codes spéciaux qui sont automatiquement remplacés par des données réelles. Tapez-les exactement ainsi (y compris les doubles accolades) ou cliquez dessus dans l'éditeur.",
      "varPianoBrand": "Marque du piano (ex. \"Steinway\")",
      "varPianoModel": "Modèle du piano",
      "varBookingLink": "Lien de réservation personnel du client",
      "varReminderNumber": "Numéro de la rappel (1, 2, 3...) — uniquement pour les rappels automatiques",
      "varUnsubscribeLink": "Lien de désinscription — uniquement pour les rappels automatiques"
    },
    "tuningInvitations": {
      "title": "Envoyer des invitations d'accord",
      "intro": "Rappelez automatiquement à vos clients quand leur piano doit être accordé. C'est un moyen puissant de générer des rendez-vous récurrents.",
      "howItWorksTitle": "Comment ça marche ?",
      "howItWorksText": "Chaque piano a un intervalle de service (ex. 6 mois). Quand un piano approche ou dépasse ce délai, vous pouvez envoyer un rappel. Le client reçoit un email avec un lien pour réserver directement un rendez-vous.",
      "sendingTitle": "Envoyer des invitations",
      "step1Title": "1. Allez dans Pianos",
      "step1Text": "Dans le menu, vous verrez \"Pianos\" - cela affiche tous les pianos triés par statut de service.",
      "step2Title": "2. Filtrez par \"Accord à prévoir\"",
      "step2Text": "Utilisez le filtre pour voir uniquement les pianos bientôt ou en retard pour l'accord.",
      "step3Title": "3. Sélectionnez les pianos",
      "step3Text": "Cochez les pianos auxquels vous souhaitez envoyer une invitation.",
      "step4Title": "4. Cliquez sur \"Envoyer invitation\"",
      "step4Text": "Un email est envoyé à chaque client sélectionné.",
      "whatCustomerSeesTitle": "Que reçoit le client ?",
      "whatCustomerSeesText": "Le client reçoit un email amical avec : Un rappel que son piano doit être accordé, Un lien pour réserver directement un rendez-vous, Vos coordonnées pour les questions",
      "tipText": "N'envoyez pas d'invitations trop souvent. Un rappel suffit généralement. Les clients apprécient un service discret, pas du spam.",
      "whenToUse": "Quand envoyer des invitations ?",
      "whenToUseText": "Le meilleur moment est 2-4 semaines avant que le piano ne soit dû pour l'accordage. Cela donne au client le temps de répondre et vous permet de planifier.",
      "howToSend": "Comment envoyer des invitations ?",
      "intervalOptions": "Options d'intervalle d'accordage",
      "option": "Option",
      "description": "Description",
      "optionCustomer": "Le client prend contact",
      "optionCustomerDesc": "Pas de rappels automatiques",
      "option3Months": "3 mois",
      "option3MonthsDesc": "Pianos à queue de concert, utilisation intensive",
      "option6Months": "6 mois",
      "option6MonthsDesc": "Standard pour la plupart des pianos",
      "optionYearly": "12 mois",
      "optionYearlyDesc": "Utilisation récréative, hobby",
      "variables": "Variables disponibles pour les invitations",
      "varLastTuning": "Date du dernier accordage",
      "varDaysSince": "Jours depuis le dernier accordage",
      "varMonthsSince": "Mois depuis le dernier accordage",
      "varInterval": "Intervalle de service",
      "varBookingLink": "Lien de réservation",
      "safetyFeature": "Fonction de sécurité",
      "safetyFeatureText": "Le système empêche d'envoyer accidentellement plusieurs invitations au même client dans un court laps de temps.",
      "autoTip": "Préférez l'automatique ?",
      "autoTipText": "Vous ne voulez pas envoyer manuellement une invitation à chaque fois ? PianoPlanner peut aussi le faire automatiquement ! En savoir plus dans le chapitre suivant : Rappels automatiques d'accord."
    },
    "bookingLink": {
      "title": "Partager votre lien de réservation",
      "intro": "Chaque utilisateur PianoPlanner a un lien de réservation unique. Partagez-le avec des clients potentiels pour qu'ils puissent réserver eux-mêmes un rendez-vous.",
      "findingTitle": "Trouver votre lien",
      "findingText": "Allez dans Paramètres → Page de réservation. Ici, vous verrez votre URL de réservation personnelle. Vous pouvez la copier ou la partager.",
      "whereToShareTitle": "Où partager ?",
      "share1": "Votre site web - Ajoutez un bouton \"Réserver un rendez-vous\"",
      "share2": "Signature email - Ajoutez le lien à chaque email",
      "share3": "Cartes de visite - Imprimez un QR code de votre lien",
      "share4": "Google My Business - Ajoutez comme lien de réservation",
      "share5": "Réseaux sociaux - Partagez dans votre bio ou vos publications",
      "customizingTitle": "Personnalisation",
      "customizingText": "Dans les paramètres, vous pouvez personnaliser votre page de réservation :",
      "customize1": "Ajouter un logo - Votre logo d'entreprise en haut de la page",
      "customize2": "Texte de bienvenue - Un message d'accueil personnel pour les clients",
      "customize3": "Choisir les services - Quels services peuvent être réservés",
      "customize4": "Réservation maximale à l'avance - Jusqu'à quand les clients peuvent réserver",
      "tipText": "Rendez les choses aussi faciles que possible pour les clients. Moins de clics pour une réservation signifie plus de rendez-vous.",
      "whyUse": "Pourquoi un lien de réservation ?",
      "whyUseText": "Avec votre propre lien de réservation, les clients peuvent prendre rendez-vous 24h/24 et 7j/7, sans que vous ayez à répondre au téléphone. Vous recevez automatiquement une confirmation et le rendez-vous est immédiatement dans votre calendrier.",
      "stepByStep": "Étape par étape",
      "step1Title": "1. Allez dans Paramètres",
      "step1Text": "Ouvrez le menu des paramètres via l'icône d'engrenage ⚙️.",
      "step2Title": "2. Cliquez sur Page de réservation",
      "step2Text": "Trouvez la section 'Page de réservation' ou 'Réservation en ligne'.",
      "step3Title": "3. Copiez votre lien",
      "step3Text": "Vous verrez votre lien de réservation personnel. Cliquez sur 'Copier'.",
      "step4Title": "4. Personnaliser la page (optionnel)",
      "step4Text": "Ajoutez votre logo, personnalisez le texte d'accueil et choisissez quels services sont visibles.",
      "step5Title": "5. Définir la disponibilité",
      "step5Text": "Déterminez jusqu'où à l'avance les clients peuvent réserver.",
      "step6Title": "6. Activer",
      "step6Text": "Activez la page de réservation pour que les clients puissent réserver.",
      "whereToUse": "Où pouvez-vous utiliser le lien ?",
      "shareEverywhere": "Partagez partout",
      "use1": "Votre site web - bouton 'Réserver maintenant'",
      "use2": "Signature d'e-mail",
      "use3": "Cartes de visite (comme code QR)",
      "use4": "Bio réseaux sociaux",
      "use5": "Google My Business",
      "use6": "Statut WhatsApp",
      "addToWebsite": "Ajouter à votre site web",
      "addToWebsiteText": "Copiez ce code et collez-le sur votre site web où vous souhaitez que le bouton de réservation apparaisse.",
      "asSimpleLink": "Comme lien simple",
      "asButton": "Comme bouton",
      "tipQrCode": "Astuce code QR",
      "tipQrCodeText": "Générez un code QR de votre lien de réservation pour les cartes de visite ou les flyers. Les clients peuvent alors scanner et réserver directement !"
    },
    "customerLink": {
      "title": "Liens personnels pour les clients réguliers",
      "intro": "Les clients réguliers n'ont pas à remplir leurs informations à chaque fois. Chaque client dans PianoPlanner a un lien unique avec des informations pré-remplies.",
      "perfectFor": "Parfait pour :",
      "perfectForText": "Clients réguliers qui reviennent régulièrement, clients avec plusieurs pianos, théâtres et entreprises avec des réservations complexes.",
      "howItWorksTitle": "Comment ça marche ?",
      "howItWorksText": "Quand un client ouvre son lien personnel, il voit :",
      "sees1": "Son nom et adresse déjà remplis",
      "sees2": "Ses pianos à choisir",
      "sees3": "Des suggestions d'horaires intelligentes basées sur sa localisation",
      "sees4": "Uniquement les services pertinents",
      "sees5": "Peut réserver directement sans compte",
      "findingTitle": "Trouver le lien",
      "step1Title": "1. Allez dans Clients",
      "step1Text": "Ouvrez la liste des clients.",
      "step2Title": "2. Cliquez sur un client",
      "step2Text": "Ouvrez les détails du client.",
      "step3Title": "3. Voir \"Lien de réservation\"",
      "step3Text": "Copiez le lien personnel de ce client.",
      "step4Title": "4. Partagez le lien",
      "step4Text": "Envoyez le lien par email ou enregistrez-le pour une utilisation ultérieure.",
      "needNewLinkTitle": "Besoin d'un nouveau lien ?",
      "needNewLinkText": "Si un lien ne fonctionne plus ou si vous voulez le réinitialiser, vous pouvez générer un nouveau lien dans les détails du client.",
      "realExampleTitle": "Exemple concret",
      "realExampleText": "Vous envoyez à Mme Dupont un rappel chaque année. Au lieu de \"appelez-moi pour un rendez-vous\", vous envoyez son lien personnel. Elle clique, choisit un horaire, et c'est fait. Pas d'appels téléphoniques, pas de tracas.",
      "stepByStep": "Étape par étape : Trouver et partager le lien",
      "step5Title": "5. Copier ou partager",
      "step5Text": "Copiez le lien ou partagez-le directement par e-mail ou WhatsApp.",
      "needNewLink": "Besoin d'un nouveau lien ?",
      "whatCustomerSees": "Que voit le client ?",
      "whenOpensLink": "Quand le client ouvre le lien :",
      "realExample": "Exemple pratique",
      "defaultService": "Définir le service par défaut",
      "defaultServiceText": "Vous pouvez définir un service par défaut par client pour qu'il soit automatiquement sélectionné lorsqu'il ouvre son lien.",
      "defaultStep1Title": "1. Aller chez le client",
      "defaultStep1Text": "Ouvrez les détails du client.",
      "defaultStep2Title": "2. Cliquer sur Modifier",
      "defaultStep2Text": "Ouvrez le formulaire de modification.",
      "defaultStep3Title": "3. Sélectionner le service par défaut",
      "defaultStep3Text": "Choisissez le service que ce client réserve généralement.",
      "defaultStep4Title": "4. Enregistrer",
      "defaultStep4Text": "Le service sera maintenant automatiquement sélectionné sur son lien de réservation."
    },
    "smartSuggestions": {
      "title": "Suggestions de réservation intelligentes",
      "intro": "Quand les clients réservent via leur lien personnel, ils voient automatiquement des suggestions d'horaires intelligentes. Le système analyse vos rendez-vous existants et suggère les créneaux les plus efficaces.",
      "howDoesItWork": "Comment ça marche ?",
      "howDoesItWorkText": "Au lieu de choisir manuellement une date et une heure, le client voit une liste d'horaires recommandés. Ceux-ci sont calculés en fonction de :",
      "factor1": "Rendez-vous existants - Créneaux juste avant ou après d'autres rendez-vous à proximité",
      "factor2": "Localisation - Temps de trajet minimal entre les rendez-vous",
      "factor3": "Heures de travail - Uniquement dans vos heures disponibles",
      "factor4": "Heures théâtre - Heures séparées pour les théâtres si configuré",
      "benefits": "Avantages",
      "benefitsText": "• Planification d'itinéraires plus efficace - moins de kilomètres parcourus\n• Les clients choisissent plus rapidement - pas de doute sur la disponibilité\n• Meilleur planning - les rendez-vous se regroupent dans la même zone",
      "whatCustomerSees": "Que voit le client ?",
      "afterSelecting": "Apres avoir selectionne un service, jusqu'a 10 creneaux optimaux apparaissent:",
      "recommended": "Recommandé - L'horaire le plus efficace (badge vert)",
      "alternative": "Alternative - Bonnes options sur d'autres jours, triees par date",
      "pickAnother": "Le client peut également choisir \"Choisir un autre horaire\" pour sélectionner manuellement une date et une heure.",
      "distantCustomersTitle": "Clients eloignes",
      "distantCustomersText": "Pour les clients en dehors de votre zone de service, le systeme cherche automatiquement plus loin (jusqu'a 6 mois).",
      "trafficAwareTitle": "Suggestions tenant compte du trafic",
      "trafficAwareText": "Lorsque la prediction de trafic est activee, les suggestions tiennent compte des heures de pointe."
    },
    "theaterAvailability": {
      "title": "Disponibilité Théâtre",
      "intro": "Les théâtres, salles de concert et autres lieux ont souvent des disponibilités différentes des clients privés. Ils sont principalement disponibles le soir et le week-end - exactement quand vous êtes normalement libre ! Avec la Disponibilité Théâtre, vous pouvez définir des heures de travail séparées pour ces clients spéciaux.",
      "whyTitle": "Pourquoi des horaires Théâtre ?",
      "whyText": "Le problème : Les théâtres ont des répétitions et des représentations pendant la journée. Ils ne peuvent vous laisser entrer qu'avant l'ouverture (matin) ou après la fermeture (soir). La solution : Définissez des horaires différents pour les clients théâtre. Ils ne voient que les créneaux soir/week-end. Les clients privés ne voient que les créneaux de jour. Tout le monde réserve au bon moment !",
      "benefitsTitle": "Avantages du Mode Théâtre",
      "benefit1": "🎭 Disponibilité séparée - Les théâtres ne voient pas vos créneaux privés 9h-17h",
      "benefit2": "⚡ Réservations de dernière minute - Les théâtres peuvent réserver avec seulement 2 heures de préavis (vous le définissez)",
      "benefit3": "📅 Fenêtre de réservation plus courte - Les théâtres ne peuvent souvent pas planifier longtemps à l'avance",
      "benefit4": "🎹 Accord prêt pour le concert - Ils réservent quand ils en ont besoin, avant les représentations",
      "benefit5": "💼 Revenu supplémentaire - Remplissez vos soirées avec du travail de théâtre bien payé",
      "setupTitle": "Étape par étape : Configurer les horaires Théâtre",
      "step1Title": "1. Allez dans Paramètres → Entreprise",
      "step1Text": "Cliquez sur l'icône d'engrenage ⚙️ et faites défiler pour trouver \"Paramètres d'entreprise\"",
      "step2Title": "2. Trouvez \"Disponibilité Théâtre\"",
      "step2Text": "Faites défiler après vos heures de travail normales. Vous verrez une section séparée pour les théâtres.",
      "step3Title": "3. Activez",
      "step3Text": "Cliquez sur l'interrupteur pour activer les horaires théâtre. Il devient vert.",
      "step4Title": "4. Définissez les horaires par jour",
      "step4Text": "Pour chaque jour, définissez quand vous êtes disponible pour les théâtres :\nExemple :\n• Lundi-Vendredi : 18h00 - 22h00 (après votre travail habituel)\n• Samedi : 10h00 - 18h00 (journée entière disponible)\n• Dimanche : FERMÉ",
      "step5Title": "5. Enregistrez",
      "step5Text": "Cliquez sur Enregistrer en bas de la page.",
      "markingTitle": "Marquer un client comme \"Théâtre\"",
      "markingIntro": "Dites maintenant à PianoPlanner quels clients doivent utiliser les horaires théâtre :",
      "markStep1Title": "1. Allez dans Clients",
      "markStep1Text": "Ouvrez votre liste de clients et trouvez le théâtre/lieu.",
      "markStep2Title": "2. Modifiez le client",
      "markStep2Text": "Cliquez sur son nom, puis cliquez sur Modifier.",
      "markStep3Title": "3. Cochez \"Utiliser la disponibilité théâtre\"",
      "markStep3Text": "Vous verrez une case à cocher ☑️ vers le bas. Cochez-la !",
      "markStep4Title": "4. Enregistrez",
      "markStep4Text": "Cliquez sur Enregistrer le client. C'est fait !",
      "realExample": "Exemple concret",
      "realExampleText": "Vos heures de travail normales :\nLundi - Vendredi : 09h00 - 17h00\n\nVos heures théâtre :\nLundi - Vendredi : 18h00 - 22h00\nSamedi : 10h00 - 18h00\n\nRésultat :\n• Mme Dupont (cliente privée) → voit les créneaux Lun-Ven 09h00-17h00\n• Théâtre \"L'Opéra\" → voit les créneaux Lun-Ven 18h00-22h00 + Samedi\n\nPas de chevauchement, pas de confusion, séparation parfaite !",
      "bookingWindowTitle": "Fenêtre de réservation Théâtre",
      "bookingWindowIntro": "Les théâtres doivent souvent réserver à court préavis - un piano pourrait avoir besoin d'être accordé avant le concert de ce soir ! Vous pouvez définir jusqu'où les théâtres doivent/peuvent réserver :",
      "minAdvanceTitle": "Délai minimum",
      "minAdvanceText": "Combien de temps à l'avance les théâtres doivent-ils réserver au minimum ?\nOptions : Pas de minimum, 2 heures, 4 heures, 1 jour, 2 jours\nRecommandé : 2 heures - permet les appels d'urgence de dernière minute",
      "maxAdvanceTitle": "Délai maximum",
      "maxAdvanceText": "Jusqu'à quand les théâtres peuvent-ils réserver ?\nOptions : 1 semaine, 2 semaines, 1 mois, 2 mois, 3 mois, 6 mois\nRecommandé : 1 mois - les théâtres planifient rarement plus loin",
      "comparisonTitle": "Comparaison : Réservation normale vs Théâtre",
      "comparisonText": "Clients normaux :\n• Doivent réserver 2 jours à l'avance (vous avez du temps de planification)\n• Peuvent réserver jusqu'à 3 mois à l'avance\n\nClients théâtre :\n• Peuvent réserver seulement 2 heures à l'avance (accords d'urgence !)\n• Peuvent réserver jusqu'à 1 mois à l'avance\n\nLes théâtres obtiennent de la flexibilité pour les besoins urgents, tandis que les clients privés vous donnent du temps de planification."
    },
    "pianoService": {
      "title": "Historique de service piano & Intervalles d'accord",
      "intro": "PianoPlanner suit automatiquement l'historique de service de chaque piano. Cela vous aide à vous rappeler quand les pianos doivent être accordés - plus de clients oubliés ou de devinettes sur votre dernière visite !",
      "whyTrackTitle": "Pourquoi suivre les intervalles de service ?",
      "whyTrackText": "Sans suivi : Vous comptez sur les clients qui vous appellent, ou vous oubliez qui a besoin de service.\nAvec PianoPlanner : Vous voyez exactement quels pianos sont dus pour l'accord. Envoyez un rappel, réservez le rendez-vous, gardez les clients satisfaits. Plus d'affaires récurrentes, moins d'effort !",
      "howItWorksTitle": "Comment ça marche (automatiquement !)",
      "howItWorksIntro": "PianoPlanner met automatiquement à jour \"Dernier accord\" basé sur :",
      "source1": "✅ Rendez-vous terminés - Quand vous terminez un accord, l'enregistrement du piano se met à jour",
      "source2": "✅ Enregistrements de service - Notes que vous ajoutez à l'historique du piano",
      "source3": "✅ Saisie manuelle de date - Si vous entrez vous-même une date d'accord passée",
      "automatic": "Vous n'avez rien à faire ! Terminez simplement vos rendez-vous normalement, et PianoPlanner garde la trace.",
      "statusColorsTitle": "Comprendre les couleurs de statut",
      "statusColorsIntro": "Chaque piano affiche un statut pour que vous puissiez voir d'un coup d'œil qui a besoin d'attention :",
      "tableHeader1": "Ce que vous voyez",
      "tableHeader2": "Ce que ça signifie",
      "statusGreen": "Dernier : 15 jan 2026",
      "statusGreenMeaning": "✅ Récemment accordé - pas encore d'action nécessaire",
      "statusOrange": "À prévoir dans 14 jours",
      "statusOrangeMeaning": "⚠️ Service à venir - temps de contacter le client !",
      "statusRed": "30 jours en retard",
      "statusRedMeaning": "🔴 Date dépassée - définitivement temps d'appeler !",
      "statusGray": "Pas encore accordé",
      "statusGrayMeaning": "ℹ️ Nouveau piano - pas encore d'historique enregistré",
      "intervalTitle": "Définir le bon intervalle d'accord",
      "intervalIntro": "Différents pianos nécessitent des soins différents. Un piano de concert dans un théâtre a besoin d'être accordé tous les quelques mois, tandis qu'un piano de loisir à la maison pourrait n'avoir besoin que d'un service annuel. Vous définissez l'intervalle par piano !",
      "recommendedTitle": "Intervalles recommandés",
      "recommendedText": "3-4 mois : Pianos de concert, pianos de conservatoire, écoles de musique\n6 mois : Églises, musiciens professionnels, amateurs sérieux (par défaut)\n12 mois : Pianos domestiques, joueurs occasionnels\n18-24 mois : Pianos rarement utilisés, maisons de vacances",
      "changeIntervalTitle": "Étape par étape : Modifier l'intervalle d'un piano",
      "changeStep1Title": "1. Allez au piano",
      "changeStep1Text": "Ouvrez Clients → cliquez sur un client → cliquez sur son piano",
      "changeStep2Title": "2. Cliquez sur Modifier",
      "changeStep2Text": "Cliquez sur le bouton Modifier (icône crayon ✏️)",
      "changeStep3Title": "3. Trouvez \"Intervalle de service\"",
      "changeStep3Text": "Cherchez le menu déroulant qui dit \"Intervalle de service (mois)\"",
      "changeStep4Title": "4. Choisissez l'intervalle",
      "changeStep4Text": "Sélectionnez combien de mois entre les accords :\n3, 4, 6, 9, 12, 18, ou 24 mois",
      "changeStep5Title": "5. Enregistrez",
      "changeStep5Text": "Cliquez sur Enregistrer le piano. Le statut se calculera maintenant à partir de cet intervalle !",
      "proTipTitle": "Conseil de pro : Trouver les pianos qui ont besoin de service",
      "proTipText": "Allez dans Pianos dans le menu. Vous verrez tous les pianos triés par statut. Les pianos orange et rouges apparaissent en premier - ce sont vos opportunités !\nChaque semaine, vérifiez cette liste et envoyez des rappels aux clients avec des pianos en retard. Moyen facile de remplir votre calendrier ! 📅",
      "manualRecordTitle": "Enregistrer manuellement un accord passé",
      "manualRecordIntro": "Avez-vous accordé un piano avant d'utiliser PianoPlanner ? Vous pouvez entrer la date manuellement :",
      "manualStep1Title": "1. Modifiez le piano",
      "manualStep1Text": "Allez au piano et cliquez sur Modifier",
      "manualStep2Title": "2. Trouvez \"Date du dernier service\"",
      "manualStep2Text": "Cherchez le champ de sélection de date",
      "manualStep3Title": "3. Entrez la date",
      "manualStep3Text": "Cliquez sur le champ et sélectionnez la date du dernier accord",
      "manualStep4Title": "4. Enregistrez",
      "manualStep4Text": "Le statut du piano sera maintenant calculé correctement !"
    },
    "slotDuration": {
      "title": "Durée des créneaux calendrier",
      "intro": "Vous pouvez personnaliser l'affichage des créneaux horaires du calendrier. Choisissez entre des créneaux d'1 heure ou d'1,5 heure selon la durée typique de vos rendez-vous.",
      "changingTitle": "Modifier la durée des créneaux",
      "step1Title": "Allez au Tableau de bord",
      "step1Text": "Ouvrez votre vue calendrier.",
      "step2Title": "Trouvez le sélecteur de créneau",
      "step2Text": "Dans la barre d'outils à côté du sélecteur de vue (Jour/Semaine/Mois), vous verrez un menu déroulant.",
      "step3Title": "Choisissez votre durée",
      "step3Text": "Sélectionnez \"1 heure\" ou \"1½ heure\" dans le menu déroulant.",
      "whenToUseTitle": "Quand utiliser lequel ?",
      "whenToUseText": "Créneaux d'1 heure : Rendez-vous d'accord standard, services rapides\nCréneaux d'1,5 heure : Réglage, harmonisation, ou quand les accords prennent généralement plus de temps",
      "savedAutomatically": "Votre préférence est enregistrée automatiquement et sera mémorisée lors de votre prochaine visite."
    },
    "importData": {
      "title": "Importer des données",
      "intro": "Vous changez de système de gestion d'accordage ? Le Hub d'Import de PianoPlanner facilite le transfert de vos données existantes — clients, pianos, rendez-vous et historique de service.",
      "whatCanImportTitle": "Que pouvez-vous importer ?",
      "importCustomers": "Clients - Noms, adresses, numéros de téléphone, adresses email",
      "importPianos": "Pianos - Marque, modèle, numéro de série, année, type, emplacement",
      "importHistory": "Historique de service - Les dates du dernier accord sont préservées",
      "importOrderTip": "Importez toujours les clients d'abord, puis les pianos. Ainsi, les pianos sont automatiquement liés au bon client.",
      "howToImportTitle": "Comment importer",
      "step1Title": "Exportez depuis votre système actuel",
      "step1Text": "Exportez vos clients et/ou pianos en fichiers CSV depuis votre logiciel actuel.",
      "step2Title": "Allez dans Import",
      "step2Text": "Naviguez vers Paramètres → Importer des données ou allez directement à la page d'import.",
      "step3Title": "Sélectionnez ce que vous voulez importer",
      "step3Text": "Choisissez si vous voulez importer des Clients ou des Pianos.",
      "step4Title": "Téléchargez le fichier CSV",
      "step4Text": "Glissez-déposez votre fichier ou cliquez pour parcourir. Le système détectera automatiquement les colonnes.",
      "step5Title": "Prévisualisez et configurez",
      "step5Text": "Vérifiez le tableau de prévisualisation et définissez les options comme \"Ignorer les doublons\" ou \"Clients actifs uniquement\".",
      "step6Title": "Lancez l'import",
      "step6Text": "Cliquez sur \"Démarrer l'import\" et attendez que le processus soit terminé.",
      "optionsTitle": "Options d'import",
      "optionHeader": "Option",
      "whatDoesItDoHeader": "Que fait-elle ?",
      "activeOnly": "Actifs uniquement",
      "activeOnlyDesc": "Importer uniquement les clients/pianos marqués comme actifs",
      "skipDuplicates": "Ignorer les doublons",
      "skipDuplicatesDesc": "Ignorer les clients qui existent déjà (basé sur l'email)",
      "includeCompany": "Inclure le nom de l'entreprise",
      "includeCompanyDesc": "Ajouter le nom de l'entreprise au nom du client",
      "undoImportTitle": "Annuler l'import",
      "undoImportText": "Vous avez fait une erreur ? Après l'import, vous verrez un bouton \"Annuler l'import\" qui vous permet de supprimer tous les enregistrements de ce lot d'import en une fois.",
      "otherFormatsTitle": "Autres formats d'importation",
      "otherFormatsText": "En plus du CSV, PianoPlanner prend également en charge les formats d'importation suivants :",
      "gazelleTitle": "Importation Gazelle",
      "gazelleDesc": "Vous passez de Gazelle (logiciel de gestion de pianos) ? Utilisez l'assistant d'importation Gazelle dédié sous Paramètres → Importer → Gazelle.",
      "vcardTitle": "Importation vCard (.vcf)",
      "vcardDesc": "Importez des contacts directement depuis votre téléphone ou client de messagerie. Exportez vos contacts en fichier .vcf et téléchargez-le dans PianoPlanner.",
      "icsTitle": "Importation Calendrier (.ics)",
      "icsDesc": "Importez des rendez-vous depuis votre calendrier existant (Google, Apple, Outlook). Exportez en fichier .ics et téléchargez-le pour transférer vos données.",
      "importHubTitle": "Hub d'Import",
      "importHubText": "Accédez à Paramètres → Import pour ouvrir le Hub d'Import. Choisissez la méthode d'importation qui correspond à votre situation :",
      "methodHeader": "Méthode",
      "bestForHeader": "Idéal pour",
      "whatItImportsHeader": "Ce qui est importé",
      "gazelleBestFor": "Migration depuis Gazelle",
      "gazelleImports": "Clients, pianos, historique de service — tout dans un flux guidé avec mappage automatique des champs",
      "contactsTitle": "Import de contacts",
      "contactsBestFor": "Contacts téléphoniques, fichiers vCard, CSV",
      "contactsImports": "Clients — noms, adresses, téléphones, e-mails depuis des fichiers .vcf ou .csv",
      "calendarTitle": "Import de calendrier",
      "calendarBestFor": "Migration depuis un autre calendrier",
      "calendarImports": "Rendez-vous depuis des fichiers calendrier .ics — dates, heures, descriptions",
      "genericCsvTitle": "CSV Générique",
      "genericCsvBestFor": "Tout autre système",
      "genericCsvImports": "Clients et pianos depuis CSV avec détection automatique des colonnes (bientôt disponible)",
      "gazelleWizardTitle": "Assistant Gazelle",
      "gazelleWizardText": "L'assistant Gazelle est un guide étape par étape conçu pour les utilisateurs de Gazelle. Exportez vos données depuis Gazelle en fichiers CSV, puis téléchargez-les dans l'assistant. PianoPlanner mappe automatiquement les champs Gazelle — clients, pianos et historique sont importés en une seule fois.",
      "contactsImportTitle": "Import de contacts",
      "contactsImportText": "Importez des clients depuis vos contacts téléphoniques ou un fichier vCard (.vcf). Vous pouvez aussi charger un fichier CSV. Noms, adresses, numéros et e-mails sont importés automatiquement.",
      "calendarImportTitle": "Import de calendrier",
      "calendarImportText": "Chargez un fichier .ics exporté depuis Apple Calendrier, Google Agenda, Outlook ou toute autre application. Les rendez-vous sont créés avec les dates, heures et descriptions originales."
    },
    "workshop": {
      "title": "Planification Atelier",
      "intro": "PianoPlanner prend en charge des créneaux horaires dédiés pour le travail dans votre propre atelier. Définissez vos heures de disponibilité d'atelier et elles seront automatiquement bloquées dans le calendrier de réservation en ligne.",
      "setupTitle": "Configurer les heures d'atelier",
      "setupText": "Allez dans Paramètres → Atelier pour configurer votre disponibilité d'atelier. Vous pouvez définir des heures différentes pour chaque jour de la semaine, comme vos heures de travail habituelles.",
      "featuresTitle": "Fonctionnalités",
      "feature1": "Définir la disponibilité de l'atelier par jour de la semaine",
      "feature2": "Les heures d'atelier sont automatiquement bloquées pour les réservations en ligne",
      "feature3": "Smart Pick respecte les heures d'atelier — aucune suggestion chevauchante",
      "feature4": "Les rendez-vous d'atelier visibles dans votre agenda avec une icône dédiée",
      "feature5": "Statistiques d'atelier dans vos rapports de tableau de bord",
      "smartPickTitle": "Intégration Smart Pick",
      "smartPickText": "Lorsque vous utilisez Smart Pick pour suggérer des heures de rendez-vous, vos heures d'atelier sont automatiquement évitées. Ainsi, les clients ne se voient jamais proposer un créneau qui entre en conflit avec votre planning d'atelier.",
      "tip": "Utilisez la planification d'atelier pour les travaux internes récurrents comme les restaurations de piano, le travail d'harmonisation ou les réparations d'instruments. Cela garde votre planning de terrain propre et votre temps d'atelier organisé."
    },
    "walkIn": {
      "title": "Rendez-vous Sans RDV & Tâches",
      "intro": "Chaque rendez-vous n'a pas besoin d'une fiche client. PianoPlanner vous permet de créer rapidement des rendez-vous sans RDV et des tâches internes d'atelier directement depuis votre tableau de bord.",
      "walkInTitle": "Rendez-vous sans RDV",
      "walkInText": "Quand un client arrive à l'improviste, utilisez le bouton rapide sans RDV sur votre tableau de bord. Entrez un nom et un service — pas besoin de créer d'abord une fiche client complète.",
      "tasksTitle": "Tâches sans client",
      "tasksText": "Besoin de bloquer du temps pour du travail interne ? Créez une tâche sans la lier à un client. Parfait pour la maintenance d'atelier, le travail administratif ou les blocs de temps personnels.",
      "howToTitle": "Comment créer",
      "howTo1": "Depuis le tableau de bord : appuyez sur le bouton + et choisissez 'Sans RDV' ou 'Tâche'",
      "howTo2": "Sans RDV : entrez un nom, choisissez un service et sélectionnez une heure",
      "howTo3": "Tâche : ajoutez une description et une heure — pas besoin de client",
      "howTo4": "Les deux types apparaissent dans votre agenda et respectent votre disponibilité",
      "tip": "Les rendez-vous sans RDV peuvent être convertis en fiches clients complètes ultérieurement. Si un client sans RDV revient, vous pouvez créer un profil client complet et lier le rendez-vous précédent."
    },
    "needHelp": {
      "title": "Besoin d'aide ?",
      "text": "Vous n'arrivez pas à comprendre ? N'hésitez pas à nous contacter.",
      "contactButton": "Contacter le support"
    },
    "dismiss": "Masquer",
    "smartFill": {
      "title": "Remplir route",
      "intro": "Vous avez un créneau libre dans une zone spécifique ? Remplir route vous aide à trouver des clients à proximité qui ont besoin d'un accordage et vous permet de leur envoyer une invitation en un clic.",
      "howItWorksTitle": "Comment ça marche ?",
      "step1Title": "1. Ouvrir Remplir route",
      "step1Text": "Allez dans Clients et cliquez sur le bouton vert \"Remplir route\" en haut à droite.",
      "step2Title": "2. Entrez un lieu",
      "step2Text": "Tapez un nom de ville ou un code postal et choisissez un rayon de recherche (10-50 km). Cliquez sur Rechercher.",
      "step3Title": "3. Consultez les résultats",
      "step3Text": "Vous verrez une liste de clients triés par urgence. Chaque client affiche sa distance, sa dernière date d'accordage et un badge d'urgence.",
      "step4Title": "4. Sélectionnez et envoyez",
      "step4Text": "Sélectionnez les clients que vous souhaitez inviter, puis cliquez sur \"Envoyer les invitations\". Ils recevront une invitation d'accordage avec votre lien de réservation.",
      "urgencyTitle": "Badges d'urgence",
      "urgencyIntro": "Chaque client reçoit un badge coloré en fonction de son dernier accordage :",
      "urgencyOverdue": "🔴 En retard — Au-delà de l'intervalle de service",
      "urgencyDue": "🟠 À accorder — Dans le mois de l'intervalle",
      "urgencySoon": "🟡 Bientôt — Dans les trois mois de l'intervalle",
      "urgencyOk": "🟢 À jour — Pas encore dû",
      "benefitsTitle": "Pourquoi utiliser Remplir route ?",
      "benefitsText": "• Remplissez les créneaux vides de manière proactive\n• Combinez plusieurs rendez-vous dans la même zone\n• Les clients apprécient le rappel personnel\n• Moins de conduite, plus de revenus",
      "tip": "Seuls les clients avec un intervalle de service configuré et une adresse e-mail apparaissent dans les résultats. Assurez-vous que vos fiches clients sont à jour."
    },
    "dashboard": {
      "sectionTitle": "Tableau de bord & Agenda",
      "intro": "Le tableau de bord est votre espace de travail central. Vous y trouvez votre agenda, aperçu de la journée, actions rapides et widgets utiles — tout ce dont vous avez besoin pour une journée productive.",
      "layoutTitle": "Disposition du tableau de bord",
      "layoutText": "Votre tableau de bord est divisé en trois colonnes : un panneau gauche avec des aperçus rapides, l'agenda au centre et un panneau droit avec des statistiques et widgets.",
      "leftPanelTitle": "Panneau gauche",
      "leftMiniCal": "Mini-calendrier — navigation rapide entre les dates",
      "leftTrafficLights": "Feux de signalisation — état de la journée en un coup d'œil",
      "leftCurrentAppt": "Rendez-vous en cours — affiche le rendez-vous actuel",
      "leftUpcoming": "Aujourd'hui encore — liste rapide des rendez-vous restants",
      "leftPending": "À traiter — rendez-vous nécessitant un suivi",
      "calendarTitle": "Agenda",
      "calendarText": "Basculez entre la vue jour, semaine et mois. Cliquez sur un créneau pour créer un nouveau rendez-vous. Glissez-déposez pour déplacer. Double-cliquez pour modifier.",
      "calendarDrag": "Glisser-déposer — déplacez les rendez-vous vers un autre horaire ou jour",
      "calendarResize": "Redimensionner — glissez le bord inférieur pour ajuster la durée",
      "calendarRoute": "Bouton itinéraire — calculez les temps de trajet et coloriez vos rendez-vous",
      "calendarFilters": "Filtres — afficher/masquer les types de rendez-vous (extérieur, atelier, privé)",
      "rightPanelTitle": "Panneau droit",
      "rightToday": "Rendez-vous du jour avec informations client",
      "rightUpcoming": "Prochains rendez-vous pour les jours suivants",
      "rightWorkshop": "Statistiques atelier / extérieur du jour",
      "rightMileage": "Widget km — aperçu mensuel et ajout rapide de trajets (Pro)",
      "createApptTitle": "Créer un rendez-vous",
      "createStep1Title": "Cliquez sur un créneau ou appuyez sur +",
      "createStep1Text": "Cliquez sur une heure dans l'agenda ou utilisez le bouton + en bas à droite.",
      "createStep2Title": "Sélectionnez un client",
      "createStep2Text": "Recherchez un client existant ou créez-en un nouveau directement.",
      "createStep3Title": "Choisissez le type de lieu",
      "createStep3Text": "Sélectionnez \"Chez le client\" pour les rendez-vous sur site ou \"Atelier\" pour le travail en atelier.",
      "createStep4Title": "Choisissez un piano (optionnel)",
      "createStep4Text": "Smart Pick marque les pianos nécessitant un entretien avec une lueur jaune. Cliquez pour sélectionner.",
      "createStep5Title": "Réglez l'heure et la durée, puis enregistrez",
      "createStep5Text": "Ajustez l'heure et la durée si nécessaire. Cliquez sur Enregistrer — le rendez-vous apparaît dans votre agenda.",
      "smartPickTitle": "Smart Pick",
      "smartPickText": "Les pianos avec une lueur jaune sont recommandés par Smart Pick. Il tient compte de l'intervalle d'accord, du dernier service et de la saison pour suggérer quels pianos nécessitent une attention.",
      "tipText": "Utilisez la vue semaine pour la planification et la vue jour pour le détail. L'agenda mémorise votre préférence.",
      "completeTitle": "Terminer les rendez-vous",
      "completeIntro": "Après avoir visité un client, marquez le rendez-vous comme terminé. Cela met automatiquement à jour l'historique d'accordage du piano.",
      "pendingWidgetTitle": "Le widget \"À traiter\"",
      "pendingWidgetText": "Le panneau gauche affiche une liste \"À traiter\" avec les rendez-vous passés qui n'ont pas encore été marqués comme terminés. Utilisez les boutons de filtre (7j, 30j, 90j, Tout) pour remonter plus loin dans le temps.",
      "completeStep1Title": "Cliquez sur la coche verte",
      "completeStep1Text": "À côté de chaque rendez-vous en attente, cliquez sur la coche verte pour ouvrir le dialogue de finalisation.",
      "completeStep2Title": "Mettre à jour la date d'accordage",
      "completeStep2Text": "La case \"Mettre à jour l'accordage\" est cochée par défaut. Cela définit la dernière date d'accordage du piano à aujourd'hui. Décochez-la si la visite n'était pas un accordage (par ex. un devis ou une inspection).",
      "completeStep3Title": "Choisir le mode de paiement",
      "completeStep3Text": "Sélectionnez comment le client a payé : facture, carte, espèces, plus tard ou pas de paiement. Ceci est enregistré pour référence future.",
      "completeStep4Title": "Cliquez sur \"Terminer\"",
      "completeStep4Text": "Le rendez-vous est marqué comme fait, l'historique d'accordage du piano est mis à jour et il disparaît de la liste en attente.",
      "bulkCompleteTitle": "Terminer plusieurs rendez-vous à la fois",
      "bulkCompleteText": "Lorsque vous avez de nombreux rendez-vous en attente (par ex. après des vacances ou un import), utilisez le bouton \"Tout terminer\" en bas de la liste en attente. Cela marque tous les rendez-vous visibles comme terminés et met à jour toutes les dates d'accordage des pianos liés en un clic. Un dialogue de confirmation apparaît d'abord.",
      "pianoLinkWarning": "Sélectionnez toujours un piano lors de la création d'un rendez-vous. Sans piano lié, le système utilise le premier piano du client par défaut — ce qui peut ne pas être le bon pour les clients avec plusieurs instruments."
    },
    "customers": {
      "title": "Gestion des clients",
      "intro": "Gérez toutes vos données clients en un seul endroit. Ajoutez des clients, associez des pianos, suivez l'historique de service et envoyez des e-mails professionnels — le tout depuis un seul aperçu.",
      "addTitle": "Ajouter un client",
      "addStep1Title": "Allez dans Clients",
      "addStep1Text": "Cliquez sur \"Clients\" dans le menu de navigation pour ouvrir l'aperçu des clients.",
      "addStep2Title": "Cliquez sur + Nouveau client",
      "addStep2Text": "Remplissez le nom, l'adresse, l'e-mail et le téléphone. L'adresse est utilisée pour le calcul des temps de trajet.",
      "addStep3Title": "Ajoutez des notes (optionnel)",
      "addStep3Text": "Ajoutez des instructions de stationnement, codes d'accès ou demandes spéciales. Ces notes apparaissent lors de la création de rendez-vous.",
      "detailTitle": "Page de détail client",
      "detailText": "Cliquez sur un client pour voir le profil complet. Vous y trouvez :",
      "detailPianos": "Tous les pianos associés avec statut de service",
      "detailHistory": "Historique complet des rendez-vous",
      "detailBooking": "Lien de réservation personnel à partager avec le client",
      "detailInvite": "Envoyer directement des invitations d'accord",
      "detailNotes": "Coordonnées et notes",
      "searchTitle": "Rechercher et filtrer",
      "searchText": "Utilisez la barre de recherche pour trouver rapidement des clients par nom, e-mail, ville ou numéro de téléphone. La liste se met à jour pendant que vous tapez.",
      "tip": "Vous pouvez aussi ajouter de nouveaux clients directement lors de la création d'un rendez-vous. Tapez le nom dans le champ client et cliquez sur \"+ Nouveau client\".",
      "duplicatesTitle": "Détection des doublons",
      "duplicatesIntro": "PianoPlanner détecte automatiquement les doublons potentiels dans votre base de données clients en se basant sur le nom, l'e-mail, le numéro de téléphone et l'adresse. Le matching flou (algorithme de Levenshtein) détecte même les petites fautes de frappe.",
      "dupStep1Title": "Ouvrir les doublons",
      "dupStep1Text": "Allez dans Clients et cliquez sur \"Doublons\" pour voir toutes les paires de doublons détectées.",
      "dupStep2Title": "Examiner les correspondances",
      "dupStep2Text": "Chaque paire affiche les champs correspondants et un score de similarité. Les correspondances floues sont indiquées par un badge.",
      "dupStep3Title": "Fusionner les clients",
      "dupStep3Text": "Cliquez sur \"Fusionner\" pour combiner deux profils clients. Tous les pianos, rendez-vous, factures, notes et historique de service sont transférés en une seule transaction.",
      "mergeUndoTip": "Vous avez changé d'avis ? Vous pouvez annuler une fusion dans les 30 jours via Clients → Historique des fusions."
    },
    "pianos": {
      "title": "Gestion des pianos",
      "intro": "Suivez chaque piano que vous accordez ou entretenez. Enregistrez la marque, le modèle, le numéro de série, l'année de fabrication et l'état. Associez les pianos aux clients et tenez un historique de service complet.",
      "addTitle": "Ajouter un piano",
      "addStep1Title": "Allez dans Pianos",
      "addStep1Text": "Cliquez sur \"Pianos\" dans le menu, puis sur \"+ Nouveau piano\".",
      "addStep2Title": "Associez à un client",
      "addStep2Text": "Sélectionnez le client qui possède ce piano. Le piano apparaîtra sur sa page de détail.",
      "addStep3Title": "Remplissez les détails du piano",
      "addStep3Text": "Marque, modèle, numéro de série, année, type (piano à queue/droit/numérique) et emplacement dans la maison.",
      "addStep4Title": "Définissez l'intervalle d'accord",
      "addStep4Text": "Choisissez la fréquence d'accord : tous les 3, 6 ou 12 mois, ou 0 si le client prend contact lui-même.",
      "detailTitle": "Page de détail piano",
      "detailInfo": "Spécifications complètes du piano et notes d'état",
      "detailService": "Historique de service — tous les rendez-vous et accords précédents",
      "detailStatus": "Indicateur de statut : en ordre, bientôt dû, ou en retard",
      "detailPhotos": "Photos — téléchargez des images du piano pour référence",
      "serviceIntervalTitle": "Intervalles d'accord expliqués",
      "intervalHeader": "Intervalle",
      "meaningHeader": "Signification",
      "interval0": "Le client prend contact lui-même — pas de rappels automatiques",
      "interval3": "Tous les 3 mois — pour pianos à queue de concert ou utilisation intensive",
      "interval6": "Tous les 6 mois — standard pour la plupart des pianos",
      "interval12": "Annuellement — pour pianos à usage léger",
      "smartPickTitle": "Smart Pick utilise ces intervalles",
      "smartPickText": "Lors de la création d'un rendez-vous, Smart Pick marque automatiquement les pianos nécessitant un entretien, en se basant sur l'intervalle défini et le dernier service.",
      "title2": "Gestion des pianos",
      "intro2": "Gérez tous vos pianos en un seul endroit."
    },
    "autoReminders": {
      "title": "Rappels automatiques d'accord",
      "intro": "PianoPlanner peut envoyer automatiquement des rappels d'accord aux clients lorsque leur piano doit être accordé. Vous n'avez rien à faire — le système vérifie pour chaque piano quand le dernier accord a eu lieu, ajoute l'intervalle d'accord et envoie un rappel au bon moment. En cas de non-réponse, des relances automatiques suivent.",
      "whatIsIt": "Quelle est la différence avec les invitations manuelles ?",
      "whatIsItText": "Invitation manuelle : Vous cliquez vous-même sur l'icône e-mail de chaque client pour envoyer une invitation. Rappel automatique : PianoPlanner le fait pour vous. Vous configurez une fois le fonctionnement, et ensuite tous les clients sont automatiquement rappelés au bon moment. Y compris les relances s'ils ne répondent pas.",
      "howItWorks": "Comment ça fonctionne ?",
      "step1": "1. Le piano a un intervalle d'accord",
      "step1Text": "Les rappels ne sont envoyés que pour les pianos ayant un intervalle d'accord défini (3, 6 ou 12 mois). Les pianos en \"Prend contact lui-même\" (intervalle 0) sont ignorés.",
      "step2": "2. Le premier rappel est envoyé",
      "step2Text": "Supposons qu'un piano a un intervalle de 6 mois et que le dernier accord était le 1er janvier. Le prochain accord est prévu vers le 1er juillet. Avec le paramètre par défaut (30 jours à l'avance), le client reçoit le premier rappel vers le 1er juin.",
      "step3": "3. Relance en cas de non-réponse",
      "step3Text": "Si le client ne répond pas (ne prend pas rendez-vous), une deuxième relance suit automatiquement après 14 jours. Ensuite, une relance mensuelle suit jusqu'au maximum (par défaut 4 rappels par cycle).",
      "step4": "4. Le cycle s'arrête automatiquement",
      "step4Text": "Les rappels s'arrêtent automatiquement dès que le client prend rendez-vous, que le nombre maximum de rappels est atteint, ou que le client se désinscrit via le lien en bas de l'e-mail.",
      "setupTitle": "Configuration — Étape par étape",
      "setup1": "1. Allez dans Paramètres",
      "setup1Text": "Ouvrez les Paramètres et faites défiler jusqu'à la carte \"Rappels automatiques d'accord\" (avec l'icône de cloche). Cliquez dessus pour la déplier.",
      "setup2": "2. Activez la fonction",
      "setup2Text": "Activez l'interrupteur \"Activer les rappels automatiques\". Des options supplémentaires apparaissent.",
      "setup3": "3. Configurez le planning",
      "setup3Text": "Ajustez les paramètres suivants selon vos préférences :",
      "setting": "Paramètre",
      "settingDefault": "Par défaut",
      "settingExplanation": "Explication",
      "settingAdvance": "Combien de jours avant l'accord le premier e-mail est envoyé. Exemple : 30 jours = environ 1 mois à l'avance.",
      "settingFollowup": "Combien de jours entre la première et la deuxième relance. Ensuite, c'est mensuel.",
      "settingMax": "Nombre maximum d'e-mails par piano par cycle d'accord. Après ce nombre, le système s'arrête, même si le client ne répond pas.",
      "settingTime": "À quelle heure les e-mails sont envoyés. Choisissez un moment où vos clients sont probablement en ligne.",
      "setup4": "4. Envoyez un test",
      "setup4Text": "Cliquez sur \"Envoyer un test\" pour envoyer un exemple de rappel à votre propre adresse e-mail. Ainsi, vous voyez exactement à quoi ressemble l'e-mail pour vos clients.",
      "setup5": "5. Cliquez sur Enregistrer",
      "setup5Text": "N'oubliez pas de cliquer sur \"Enregistrer\" ! Désormais, vos clients seront automatiquement rappelés.",
      "templateTitle": "Personnaliser le modèle d'e-mail",
      "templateText": "Les rappels automatiques utilisent le même modèle que les invitations manuelles d'accord. Vous pouvez personnaliser ce modèle via :",
      "template1": "Via les Paramètres",
      "template1Text": "Cliquez sur \"Modifier le modèle\" dans les paramètres de rappel d'accord. Vous serez redirigé vers l'éditeur de modèles.",
      "template2": "Variables supplémentaires",
      "template2Text": "En plus des variables standard (nom du client, piano, etc.), deux variables supplémentaires sont disponibles pour les rappels automatiques :",
      "varReminderNumber": "Le numéro du rappel (1, 2, 3...). Utile à mentionner dans le texte.",
      "varUnsubscribeLink": "Un lien permettant au client de se désinscrire des rappels. Il est automatiquement placé en bas de l'e-mail.",
      "unsubscribeTitle": "Désinscription par les clients",
      "unsubscribeText": "En bas de chaque rappel automatique se trouve un lien de désinscription. Si un client clique dessus, une page propre apparaît confirmant sa désinscription. Il ne recevra plus de rappels de votre part.",
      "unsubscribeStats": "Dans les statistiques des paramètres, vous voyez combien de clients se sont désinscrits. Souhaitez-vous réinscrire un client ? Contactez le support.",
      "dashboardTitle": "Widget tableau de bord",
      "dashboardText": "Dès que vous activez les rappels automatiques, un widget apparaît sur votre tableau de bord avec trois chiffres : le nombre total de rappels envoyés, le nombre de ce mois et le nombre de clients désinscrits.",
      "prereqTitle": "Prérequis",
      "prereqCalloutTitle": "Important à savoir",
      "prereqCalloutText": "Les rappels automatiques ne sont envoyés que si toutes les conditions sont remplies : la fonction est activée, le piano a un intervalle d'accord (3, 6 ou 12 mois), le piano a une date connue du dernier accord, le client a une adresse e-mail et le client ne s'est pas désinscrit.",
      "tipTitle": "Conseil : Vérifiez vos données clients",
      "tipText": "Avant d'activer les rappels automatiques, vérifiez que vos clients ont une adresse e-mail et que les pianos ont un intervalle d'accord et une date de dernier accord renseignés."
    },
    "accountingIntegration": {
      "title": "Intégration comptable",
      "intro": "PianoPlanner peut synchroniser vos factures directement avec votre logiciel comptable, pour ne plus avoir à faire de saisie manuelle. Allez dans <strong>Paramètres → Intégrations</strong> pour connecter votre logiciel comptable.",
      "availableTitle": "Intégrations disponibles",
      "availableText": "Actuellement, deux intégrations sont pleinement opérationnelles. D'autres intégrations sont en développement pour soutenir les techniciens piano aux Pays-Bas, en Belgique et en Allemagne.",
      "jorttTitle": "Jortt (Pays-Bas)",
      "jorttIntro": "Jortt est un logiciel comptable néerlandais populaire conçu pour les indépendants et petites entreprises. PianoPlanner se connecte via OAuth2 pour une synchronisation sécurisée et automatique des factures.",
      "jorttStep1Title": "Récupérer les identifiants API",
      "jorttStep1Text": "Connectez-vous à votre compte Jortt et allez dans <strong>Paramètres → API</strong>. Créez un nouveau client API pour recevoir votre Client ID et Client Secret.",
      "jorttStep2Title": "Connecter dans PianoPlanner",
      "jorttStep2Text": "Allez dans <strong>Paramètres → Intégrations</strong>, trouvez la carte Jortt, remplissez votre Client ID et Client Secret, et cliquez sur <strong>Connecter</strong>.",
      "jorttStep3Title": "Configurer la synchronisation",
      "jorttStep3Text": "Choisissez si vous voulez synchroniser automatiquement les factures à la création, ou manuellement via le bouton de synchronisation.",
      "odooTitle": "Odoo (International)",
      "odooIntro": "Odoo est un système ERP international open-source avec un module comptable puissant. PianoPlanner se connecte via l'API JSON-RPC d'Odoo.",
      "odooWarning": "L'accès à l'API Odoo nécessite un abonnement Custom ou Enterprise. L'abonnement gratuit Odoo Online ne comprend pas l'accès API externe.",
      "odooStep1Title": "Rassembler les informations Odoo",
      "odooStep1Text": "Vous avez besoin de quatre éléments : votre URL Odoo, le nom de la base de données, votre nom d'utilisateur (e-mail) et une clé API.",
      "odooStep2Title": "Connecter dans PianoPlanner",
      "odooStep2Text": "Allez dans <strong>Paramètres → Intégrations</strong>, trouvez la carte Odoo, remplissez les quatre champs et cliquez sur <strong>Connecter</strong>.",
      "odooStep3Title": "Synchroniser les factures",
      "odooStep3Text": "Une fois connecté, utilisez le bouton <strong>Sync</strong> pour envoyer les factures vers Odoo. Les contacts manquants sont automatiquement créés.",
      "syncLogTitle": "Journal de synchronisation",
      "syncLogText": "Chaque action de synchronisation est enregistrée. Consultez l'historique dans les paramètres d'intégration pour voir quelles factures ont été envoyées avec succès.",
      "comingSoonTitle": "Bientôt disponible",
      "comingSoonText": "Nous travaillons activement sur des intégrations avec d'autres logiciels comptables utilisés par les techniciens piano en Europe :",
      "comingSoonMoneybird": "Comptabilité en ligne néerlandaise populaire",
      "comingSoonEboekhouden": "Comptabilité cloud néerlandaise",
      "comingSoonExact": "Système ERP néerlandais/international",
      "comingSoonDatev": "Leader allemand pour les conseillers fiscaux",
      "comingSoonLexoffice": "Comptabilité cloud allemande populaire",
      "comingSoonSevdesk": "Comptabilité en ligne allemande pour indépendants",
      "comingSoonYuki": "Comptabilité néerlandaise/belge avec traitement de documents",
      "comingSoonBillit": "Plateforme de facturation belge",
      "tip": "Votre logiciel comptable manque ? Faites-le nous savoir via le support et nous le prioriserons. Toutes les données sont chiffrées et stockées en sécurité — vos clés API ne sont jamais visibles après enregistrement.",
      "moneybirdTitle": "Moneybird (Pays-Bas/Belgique)",
      "moneybirdIntro": "Moneybird est un logiciel de comptabilité en ligne populaire aux Pays-Bas. PianoPlanner se connecte via l'API Moneybird pour la synchronisation automatique des factures.",
      "moneybirdStep1Title": "Obtenir un jeton API",
      "moneybirdStep1Text": "Connectez-vous à votre compte Moneybird et allez dans Paramètres → Développeurs → Jetons API personnels. Créez un nouveau jeton.",
      "moneybirdStep2Title": "Connecter dans PianoPlanner",
      "moneybirdStep2Text": "Allez dans Paramètres → Intégrations → Moneybird. Entrez votre jeton API et l'ID d'administration, puis cliquez sur Connecter.",
      "moneybirdStep3Title": "Synchroniser les factures",
      "moneybirdStep3Text": "Une fois connecté, vous pouvez envoyer des factures directement vers Moneybird. Les clients sont automatiquement créés s'ils n'existent pas encore."
    },
    "switchCalendar": {
      "title": "Changer de calendrier",
      "intro": "Vous souhaitez passer de Google Calendar à Apple Calendar (ou inversement) ? C'est possible sans perte de rendez-vous.",
      "noDataLoss": "Aucune perte de données",
      "noDataLossText": "Tous les rendez-vous sont toujours stockés en sécurité dans PianoPlanner. La synchronisation calendrier n'est qu'une copie vers votre application de calendrier.",
      "whySwitch": "Pourquoi changer ?",
      "reason1": "Confidentialité : Apple traite les données en Europe (RGPD), Google aux États-Unis",
      "reason2": "Moins dépendant des Big Tech : Plus besoin d'un compte Google pour votre agenda",
      "reason3": "Meilleure intégration : Apple Calendar fonctionne parfaitement sur iPhone, iPad et Mac",
      "reason4": "Souveraineté numérique : Vos données, votre choix de stockage",
      "howTo": "Étape par étape pour changer",
      "step1Title": "1. Vérifiez vos rendez-vous",
      "step1Text": "Allez dans votre agenda PianoPlanner et vérifiez que tous vos rendez-vous y sont. Toutes les données sont centralisées — la synchronisation n'est qu'une copie.",
      "step2Title": "2. Déconnectez votre calendrier actuel",
      "step2Text": "Allez dans Paramètres → Calendrier et cliquez sur \"Déconnecter\" pour votre fournisseur actuel.",
      "step3Title": "3. Créez un mot de passe spécifique (Apple)",
      "step3Text": "Allez sur appleid.apple.com → Connexion & sécurité → Mots de passe spécifiques. Créez un nouveau mot de passe nommé \"PianoPlanner\".",
      "step4Title": "4. Connectez Apple Calendar",
      "step4Text": "Allez dans Paramètres → Calendrier → Apple. Entrez votre Apple ID et le mot de passe spécifique. Choisissez le bon calendrier.",
      "step5Title": "5. Synchronisez",
      "step5Text": "PianoPlanner envoie automatiquement tous les rendez-vous existants vers votre nouveau calendrier Apple.",
      "tipTitle": "Conseil : Nettoyez l'ancien calendrier",
      "tipText": "Après le changement, vos rendez-vous sont encore dans votre ancien calendrier. Vous pouvez les laisser comme archive ou les supprimer manuellement plus tard.",
      "comparisonTitle": "Comparaison : Google vs Apple",
      "dataLocation": "Localisation des données",
      "dataGoogle": "États-Unis (Google Cloud)",
      "dataApple": "Europe (Apple iCloud)",
      "syncType": "Méthode de synchronisation",
      "direction": "Direction",
      "dirBoth": "Bidirectionnelle",
      "privacy": "Confidentialité (RGPD)"
    },
    "routeAnalysis": {
      "title": "Analyse d'itinéraire",
      "intro": "L'analyse d'itinéraire vous aide à voir l'efficacité de votre planification quotidienne. Consultez les distances entre rendez-vous, obtenez un score d'efficacité et recevez des suggestions d'optimisation.",
      "availableFor": "Disponible pour Solo & Pro",
      "availableForText": "L'analyse d'itinéraire est incluse dans les abonnements Solo et Pro.",
      "howToAccessTitle": "Comment y accéder",
      "step1Title": "1. Ouvrez le tableau de bord",
      "step1Text": "Allez dans votre vue agenda/calendrier dans PianoPlanner.",
      "step2Title": "2. Cliquez sur \"Analyse\"",
      "step2Text": "Trouvez le bouton 📊 Analyse dans la barre d'outils.",
      "step3Title": "3. Choisissez Jour ou Semaine",
      "step3Text": "Basculez entre la vue jour (détaillée) et la vue semaine (aperçu).",
      "dayAnalysisTitle": "Analyse journalière",
      "dayAnalysisIntro": "La vue jour affiche :",
      "dayFeature1": "📊 Score d'efficacité (note A-F) — qualité de l'optimisation de votre itinéraire",
      "dayFeature2": "🚗 Distance totale — somme de tous les trajets entre rendez-vous",
      "dayFeature3": "⏱️ Temps de trajet — durée estimée de tous les trajets",
      "dayFeature4": "📍 Liste des trajets — chaque trajet avec départ, destination, km et minutes",
      "weekAnalysisTitle": "Analyse hebdomadaire",
      "weekAnalysisIntro": "La vue semaine offre une perspective plus large :",
      "weekFeature1": "📅 Scores journaliers — voyez quels jours ont des itinéraires efficaces vs inefficaces",
      "weekFeature2": "📈 Moyenne hebdomadaire — pourcentage d'efficacité global",
      "weekFeature3": "⚡ Opportunités inter-jours — suggestions pour déplacer des rendez-vous entre les jours",
      "efficiencyScoresTitle": "Comprendre les scores d'efficacité",
      "gradeHeader": "Note",
      "scoreHeader": "Score",
      "meaningHeader": "Signification",
      "gradeA": "Excellent ! Votre itinéraire est très bien optimisé.",
      "gradeB": "Bon itinéraire avec de petites améliorations possibles.",
      "gradeC": "Acceptable, mais envisagez les suggestions.",
      "gradeD": "Itinéraire inefficace — suivez les conseils d'optimisation.",
      "gradeF": "Très inefficace — optimisation significative nécessaire.",
      "optimizationTitle": "Optimisation en 1 clic",
      "optimizationIntro": "Lorsque le système trouve des opportunités d'optimisation, vous voyez des suggestions avec un bouton \"Appliquer\".",
      "optStep1": "Vérifier les conflits avec les rendez-vous existants",
      "optStep2": "Afficher une confirmation avec le changement proposé",
      "optStep3": "Déplacer le rendez-vous si vous confirmez",
      "urgencyTitle": "Indicateurs d'urgence",
      "urgencyIntro": "Chaque suggestion a un niveau d'urgence coloré :",
      "urgencyWhen": "Quand",
      "urgencyAction": "Action",
      "urgencyCritical": "Vous serez en retard !",
      "urgencyCriticalAction": "Agir immédiatement",
      "urgencyHigh": "Risque de retard (<10 min de marge)",
      "urgencyHighAction": "Corriger aujourd'hui",
      "urgencyMedium": "Trajet long (>30km) ou zigzag",
      "urgencyMediumAction": "À considérer",
      "urgencyLow": "Possibilité d'optimisation",
      "urgencyLowAction": "Bon à avoir",
      "economicTitle": "Impact économique",
      "economicText": "Chaque suggestion montre l'économie potentielle en km, minutes et coûts de carburant.",
      "tipsTitle": "Conseils pour de meilleurs itinéraires",
      "tipsText": "Ajoutez des adresses a tous les clients\nUtilisez les suggestions intelligentes\nConsultez l'analyse hebdomadaire\nDeplacez les rendez-vous les jours avec un score D ou F\nUtilisez Streamline pour resserrer votre planning"
    },
    "invoicing": {
      "setupTitle": "Configuration de la facturation",
      "setupIntro": "Avant de créer votre première facture, configurez les paramètres de facturation. Allez dans Factures et cliquez sur l'icône ⚙️ dans la barre supérieure.",
      "numberingTitle": "Numérotation des factures",
      "prefixStep": "Préfixe",
      "prefixText": "Définissez un préfixe pour vos numéros de facture (ex. \"F2026-\" ou \"INV-\"). Vos factures seront numérotées comme préfixe + numéro séquentiel.",
      "nextNumberStep": "Numéro suivant",
      "nextNumberText": "Définissez le prochain numéro de facture. Utile si vous passez d'un autre logiciel en cours d'année.",
      "bankStep": "Coordonnées bancaires",
      "bankText": "Remplissez votre IBAN, nom de banque et code BIC. Ceux-ci apparaissent sur vos factures.",
      "footerStep": "Pied de page",
      "footerText": "Ajoutez votre numéro SIRET, TVA ou autre texte juridique qui doit figurer en bas de chaque facture.",
      "setupTip": "Vous pouvez aussi télécharger votre propre papier à en-tête (JPG/PNG) pour que vos factures correspondent à votre identité visuelle.",
      "createTitle": "Créer des factures",
      "createIntro": "Il y a deux façons de créer une facture : depuis l'agenda ou manuellement.",
      "fromAgendaTitle": "Depuis l'agenda (recommandé)",
      "fromAgendaText": "Après un rendez-vous, vous pouvez directement créer une facture depuis l'agenda. Cliquez sur le rendez-vous → choisissez \"Créer une facture\".",
      "prefill1": "Nom et coordonnées du client",
      "prefill2": "Description du service avec instrument (ex. \"Accord — Steinway & Sons D\")",
      "prefill3": "Date du rendez-vous dans la description",
      "prefill4": "Prix du service depuis votre configuration",
      "prefill5": "Remarques du client (en ligne de texte séparée)",
      "manualTitle": "Facture manuelle",
      "manualText": "Allez dans Factures → Nouvelle facture. Recherchez et sélectionnez un client, puis ajoutez les lignes de facture manuellement.",
      "sendTitle": "Envoyer des factures",
      "sendText": "Quand votre facture est prête, enregistrez-la comme \"Envoyée\". Vous pouvez ensuite l'envoyer directement par e-mail au client avec une pièce jointe PDF.",
      "createTip": "Utilisez les \"Services par défaut\" dans les paramètres de facturation pour ajouter rapidement des services courants à chaque facture.",
      "btwTitle": "Gestion de la TVA",
      "btwIntro": "PianoPlanner gère automatiquement la TVA en fonction du type de client.",
      "btwPrivateTitle": "Clients particuliers",
      "btwPrivateLabel": "Prix = TTC",
      "btwPrivateText": "Pour les particuliers, le prix du service est le montant total qu'ils paient, TVA incluse.",
      "btwBusinessTitle": "Entreprises / Institutions",
      "btwBusinessLabel": "Prix = HT",
      "btwBusinessText": "Pour les entreprises, écoles, églises et théâtres, le prix du service est hors TVA. La TVA est ajoutée.",
      "btwCustomerTypeTitle": "Définir le type de client",
      "btwCustomerTypeText": "Pour garantir le bon traitement de la TVA, définissez le type de client dans chaque profil client :",
      "typePrivate": "Particulier",
      "typePrivateDesc": "Prix TTC",
      "typeBusiness": "Entreprise",
      "typeBusinessDesc": "Prix HT",
      "typeSchool": "École",
      "typeSchoolDesc": "Prix HT",
      "typeChurch": "Église",
      "typeChurchDesc": "Prix HT",
      "typeTheater": "Théâtre",
      "typeTheaterDesc": "Prix HT",
      "btwTip": "Le type de client par défaut est \"Particulier\". Sans type défini, le prix est traité comme TTC.",
      "mobileTitle": "Facturation sur mobile",
      "mobileIntro": "Avec PianoPlanner sur votre écran d'accueil, vous pouvez créer et envoyer des factures directement depuis votre téléphone — même pendant que vous êtes encore chez le client.",
      "mobileFromCustomerTitle": "Depuis un profil client",
      "mobileFromCustomerText": "Ouvrez un client dans la PWA, faites défiler vers le bas et appuyez sur « Créer une facture ». Une feuille apparaît où vous pouvez :",
      "mobilePrefill1": "Sélectionner un service — le prix est automatiquement rempli",
      "mobilePrefill2": "Ajouter une description ou des notes",
      "mobilePrefill3": "Choisir le statut de la facture (brouillon, envoyée, payée)",
      "mobilePrefill4": "Envoyer avec un lien de paiement — le client peut payer directement en ligne",
      "mobileWorkflowTitle": "Flux de travail mobile typique",
      "mobileStep1": "Terminer l'accord",
      "mobileStep1Text": "Terminez le rendez-vous comme d'habitude.",
      "mobileStep2": "Ouvrir client → Créer facture",
      "mobileStep2Text": "Appuyez sur le client et cliquez sur « Créer une facture ». Votre service et prix sont pré-remplis.",
      "mobileStep3": "Envoyer avec lien de paiement",
      "mobileStep3Text": "Enregistrez et envoyez. Le client reçoit un e-mail avec une facture PDF et un lien de paiement en ligne.",
      "mobileTip": "L'accordeur est encore chez le client et la facture est déjà envoyée — avec un lien de paiement. Plus besoin de comptabilité en retard."
    },
    "privateAppointments": {
      "title": "Rendez-vous privés",
      "intro": "Vous voulez suivre vos trajets personnels séparément des rendez-vous professionnels ? Marquez les rendez-vous comme privés pour les séparer dans votre suivi kilométrique.",
      "howToTitle": "Créer un rendez-vous privé",
      "step1Title": "Créez ou modifiez un rendez-vous",
      "step1Text": "Ouvrez le formulaire de rendez-vous sur le tableau de bord.",
      "step2Title": "Activez \"Rendez-vous privé\"",
      "step2Text": "Basculez le toggle violet pour marquer ce rendez-vous comme trajet privé.",
      "step3Title": "Ajoutez une destination (optionnel)",
      "step3Text": "Entrez une description comme \"Médecin\", \"Courses\" ou \"Visite familiale\".",
      "visualTitle": "Distinction visuelle",
      "visualText": "Les rendez-vous privés apparaissent en violet avec une icône 🔒 dans votre agenda.",
      "syncTitle": "Synchronisation calendrier",
      "syncText": "Lors de la synchronisation vers Google, Apple ou Microsoft, les rendez-vous privés apparaissent comme \"Occupé\" sans détails. Votre vie privée est protégée !",
      "taxTip": "Les kilomètres privés sont suivis séparément et peuvent être exportés pour les besoins fiscaux."
    },
    "mileageTracking": {
      "title": "Suivi kilométrique",
      "introNew": "Tenez une administration kilométrique conforme au fisc. PianoPlanner enregistre automatiquement les km des rendez-vous, et vous pouvez ajouter des trajets manuels et tout exporter.",
      "proFeature": "Fonctionnalité Pro",
      "proFeatureText": "Le suivi kilométrique est disponible avec l'abonnement Pro (€39,50/mois) et supérieur.",
      "accessTitle": "Où le trouver",
      "accessDashboard": "Tableau de bord — Le widget km dans le panneau droit affiche votre mois en cours",
      "accessSettings": "Paramètres → Entreprise → Suivi km — Aperçu complet avec info véhicule, relevés compteur et exports",
      "accessTravelReport": "Frais de déplacement — Liste détaillée des trajets avec info itinéraire et export CSV",
      "vehicleTitle": "Configurer le véhicule",
      "vehicleText": "Allez dans Paramètres → Entreprise → Suivi km et remplissez votre plaque d'immatriculation et nom du véhicule.",
      "odometerTitle": "Relevés compteur",
      "odometerText": "Enregistrez vos relevés de compteur périodiquement (ex. début et fin d'année). Cela sert de preuve pour le fisc.",
      "autoTrackTitle": "Suivi automatique",
      "autoTrackText": "Chaque rendez-vous avec une adresse client génère automatiquement un enregistrement de trajet.",
      "smartCalcTitle": "Calcul intelligent retour",
      "smartCalcText": "Le système détermine automatiquement si un trajet est aller simple ou aller-retour :",
      "oneWay": "Autres rendez-vous ce jour → Aller simple (vous continuez vers le prochain lieu)",
      "roundTrip": "Dernier rendez-vous de la journée → Aller-retour (km réels vers la maison via Google Maps)",
      "manualTitle": "Trajets manuels",
      "manualText": "Pour les trajets non liés à un rendez-vous (ex. chercher des pièces, visite fournisseur), ajoutez des trajets manuels.",
      "manualStep1Title": "Méthode rapide : Widget tableau de bord",
      "manualStep1Text": "Entrez les km, le but et cliquez sur +. Cochez \"Privé\" pour les trajets non professionnels.",
      "manualStep2Title": "Méthode détaillée : Paramètres",
      "manualStep2Text": "Allez dans Paramètres → Suivi km → Formulaire de trajet manuel. Configurez dates exactes et localisations.",
      "exportTitle": "Export & rapports",
      "exportCSV": "Export CSV — Téléchargez tous les trajets en tableur pour votre comptable",
      "exportPDF": "Export PDF — Générez un rapport conforme au fisc",
      "exportChart": "Graphique mensuel — Aperçu visuel des km professionnels vs privés par mois",
      "taxTip": "Le fisc exige une administration complète des trajets si vous déclarez des frais de déplacement professionnels.",
      "exportTip": "Exportez vos données kilométriques en CSV à la fin de chaque année pour votre déclaration fiscale.",
      "intro": "PianoPlanner enregistre automatiquement vos kilomètres parcourus en fonction des lieux de rendez-vous. Consultez un aperçu complet réparti par déplacements professionnels et privés.",
      "accessText": "Accédez à Paramètres → Entreprise → Suivi kilométrique pour consulter votre relevé kilométrique.",
      "featuresTitle": "Fonctionnalités",
      "feature1": "Aperçu annuel avec graphique de répartition mensuelle",
      "feature2": "Totaux séparés pour les trajets professionnels (vert) et privés (violet)",
      "feature3": "Calcul intelligent des allers-retours : km réels du dernier client au domicile via Google Maps",
      "feature4": "Exportation CSV pour la comptabilité ou les impôts"
    },
    "travelReport": {
      "title": "Rapport de déplacement",
      "intro": "Le rapport de déplacement vous donne un aperçu détaillé de tous vos trajets sur n'importe quelle période. Filtrez par plage de dates, consultez les totaux et exportez une déclaration complète.",
      "howToTitle": "Comment l'utiliser",
      "step1Title": "Ouvrir les Frais de déplacement",
      "step1Text": "Cliquez sur \"Frais de déplacement\" dans le menu de navigation.",
      "step2Title": "Définir la plage de dates",
      "step2Text": "Utilisez les sélecteurs \"De\" et \"À\" pour choisir la période. Le rapport se met à jour automatiquement.",
      "step3Title": "Consulter le résumé",
      "step3Text": "En haut, vous voyez les totaux : nombre de trajets, km total, km moyen par trajet, temps de trajet et montant de la déclaration.",
      "step4Title": "Exporter en CSV",
      "step4Text": "Cliquez sur le bouton CSV pour télécharger le rapport complet en tableur.",
      "columnsTitle": "Colonnes du rapport",
      "columnHeader": "Colonne",
      "descriptionHeader": "Description",
      "colDate": "Date",
      "colDateDesc": "Date du rendez-vous",
      "colCustomer": "Client",
      "colCustomerDesc": "Nom du client avec lien vers la page de détail",
      "colLocation": "Lieu",
      "colLocationDesc": "Adresse du rendez-vous",
      "colRoute": "Itinéraire",
      "colRouteDesc": "Ouvrir dans Google Maps pour la navigation",
      "colDistance": "Distance",
      "colDistanceDesc": "Distance aller simple en km",
      "colTravelTime": "Temps de trajet",
      "colTravelTimeDesc": "Durée estimée du trajet",
      "tip": "Utilisez le champ de recherche pour filtrer les trajets par nom de client ou lieu."
    },
    "projectPlanner": {
      "title": "Planificateur de projets d'atelier",
      "intro": "Le planificateur de projets vous aide à gérer les travaux d'atelier importants — restaurations de pianos, révisions ou tout projet en plusieurs étapes.",
      "businessOnly": "Abonnement Business",
      "businessOnlyText": "Le planificateur est exclusivement disponible avec l'abonnement Business (€89,50/mois).",
      "createTitle": "Créer un projet",
      "createText": "Allez dans Projets dans le menu principal et cliquez sur \"Nouveau projet\". Donnez-lui un titre, associez optionnellement un client et un piano, définissez une priorité et une deadline.",
      "tasksTitle": "Gérer les tâches",
      "tasksText": "Chaque projet peut contenir plusieurs tâches. Ajoutez rapidement des tâches avec le champ de saisie en bas de la liste.",
      "task1": "Cliquez sur le cercle pour changer le statut : À faire → En cours → Terminé",
      "task2": "Glissez les tâches via la poignée pour modifier l'ordre",
      "task3": "Suivez les heures estimées vs réelles par tâche",
      "task4": "Définissez des échéances — les tâches en retard sont marquées en rouge",
      "capacityTitle": "Aperçu de la capacité",
      "capacityText": "La barre de capacité sur l'aperçu des projets montre combien d'heures d'atelier vous avez utilisées vs disponibles cette semaine.",
      "featuresTitle": "Fonctionnalités",
      "feature1": "Associez des projets à des clients et pianos",
      "feature2": "Niveaux de priorité : Bas, Normal, Haut, Urgent",
      "feature3": "Gestion de statut : Planification → Actif → En pause → Terminé",
      "feature4": "Barre de progression visuelle basée sur les tâches terminées",
      "feature5": "Aperçu hebdomadaire de la capacité basé sur vos heures d'atelier",
      "feature6": "Filtrez et recherchez dans tous vos projets",
      "quoteTitle": "Devis & Prix",
      "quoteIntro": "Transformez votre liste de tâches en devis professionnel. Chaque tâche peut contenir des informations de prix.",
      "excelEditTitle": "Édition style tableur",
      "excelEditText": "La liste des tâches fonctionne comme un tableur. Cliquez sur une cellule pour modifier en ligne. Les changements sont enregistrés automatiquement.",
      "taskTypesTitle": "Types de tâches",
      "taskTypeLabor": "<strong>Main d'œuvre</strong> — Heures de travail facturées à votre taux horaire",
      "taskTypeMaterial": "<strong>Matériel</strong> — Pièces, cordes, feutres, etc.",
      "taskTypeOther": "<strong>Autre</strong> — Transport, évacuation, location",
      "costOverviewTitle": "Aperçu des coûts",
      "costOverviewText": "L'aperçu des coûts en bas affiche les totaux en temps réel pour la main d'œuvre, les matériaux et les autres coûts.",
      "exportQuoteTitle": "Exporter le devis",
      "exportQuoteText": "Cliquez sur \"Copier le devis\" pour copier une version texte ou sur \"PDF\" pour un devis formaté professionnellement.",
      "quoteTip": "Définissez votre taux horaire via Paramètres → Atelier. Les nouvelles tâches de main d'œuvre utilisent automatiquement ce tarif.",
      "tip": "Utilisez les projets pour tout travail d'atelier de plusieurs jours : restaurations complètes, révisions de mécanique, réparations de table d'harmonie."
    },
    "servicesConfig": {
      "title": "Services",
      "intro": "Les services définissent ce que vous proposez aux clients — comme l'accord, la régulation ou la réparation. Chaque service a sa propre durée, prix et couleur de calendrier.",
      "howToTitle": "Configuration des services",
      "step1Title": "Allez dans Paramètres → Services",
      "step1Text": "Vous trouverez ici un aperçu de tous vos services. Cliquez sur « Ajouter un service » pour en créer un nouveau.",
      "step2Title": "Remplissez les détails",
      "step2Text": "Nom, durée (en minutes), prix, et éventuellement une description que les clients voient sur la page de réservation.",
      "step3Title": "Définissez les temps tampon",
      "step3Text": "Ajoutez du temps tampon avant et/ou après le rendez-vous. Cela vous donne du temps de trajet ou de préparation entre les rendez-vous.",
      "step4Title": "Choisissez une couleur de calendrier",
      "step4Text": "Chaque service peut avoir sa propre couleur. Cette couleur apparaît dans votre calendrier PianoPlanner et est synchronisée avec Google Calendar.",
      "step5Title": "Activer ou désactiver",
      "step5Text": "Seuls les services actifs apparaissent sur la page de réservation. Désactivez un service pour le masquer temporairement sans le supprimer.",
      "colorTitle": "Couleurs du calendrier",
      "colorText": "Les couleurs de service vous aident à distinguer visuellement les différents types de rendez-vous dans votre calendrier. Choisissez parmi les couleurs prédéfinies.",
      "tip": "Créez différents services pour différentes durées. Par exemple : « Accord piano droit » (90 min), « Accord piano à queue » (120 min), « Expertise » (60 min)."
    },
    "reschedule": {
      "title": "Reporter un rendez-vous",
      "intro": "Les clients peuvent reporter leur propre rendez-vous via un lien sécurisé dans l'e-mail de confirmation. Pas besoin d'appel téléphonique ni d'e-mail.",
      "howItWorksTitle": "Comment ça marche ?",
      "step1Title": "Le client reçoit un e-mail de confirmation",
      "step1Text": "Chaque confirmation de réservation contient un bouton « Reporter le rendez-vous » avec un lien unique et sécurisé.",
      "step2Title": "Le client clique sur le lien",
      "step2Text": "Il voit son rendez-vous actuel et une liste de créneaux alternatifs disponibles, optimisés par les Suggestions Intelligentes.",
      "step3Title": "Le client choisit un nouveau créneau",
      "step3Text": "Il sélectionne un nouveau créneau horaire et confirme. Le rendez-vous est automatiquement reprogrammé.",
      "step4Title": "Les deux parties sont notifiées",
      "step4Text": "Le client reçoit un e-mail de confirmation avec le nouveau créneau. Vous (le technicien) recevez également une notification.",
      "rulesTitle": "Règles",
      "rule1": "Le report n'est possible que jusqu'à 24 heures avant le rendez-vous",
      "rule2": "Les rendez-vous passés ne peuvent pas être reportés",
      "rule3": "Le lien est unique par rendez-vous et ne fonctionne qu'une seule fois",
      "rule4": "La synchronisation du calendrier (Google/Apple/Microsoft) est déclenchée automatiquement",
      "tip": "La page de report utilise le même moteur de Suggestions Intelligentes que la page de réservation — le rendez-vous actuel est exclu et les suggestions sont optimisées."
    },
    "routeOptimizer": {
      "title": "Optimisation d'itinéraire",
      "intro": "L'optimiseur d'itinéraire utilise Google Maps pour calculer l'ordre le plus efficace pour vos rendez-vous. Il peut automatiquement réorganiser votre planning.",
      "step1Title": "Ouvrir l'optimiseur",
      "step1Text": "Sur le tableau de bord, cliquez sur l'icône d'itinéraire d'une journée avec plusieurs rendez-vous. L'optimiseur s'ouvre avec une vue carte.",
      "step2Title": "Examiner l'ordre suggéré",
      "step2Text": "Vous voyez vos rendez-vous sur la carte avec l'itinéraire optimisé. Le gain de temps de trajet est affiché.",
      "step3Title": "Appliquer en un clic",
      "step3Text": "Cliquez sur « Appliquer l'itinéraire optimisé » pour réorganiser automatiquement vos rendez-vous. La synchronisation du calendrier est mise à jour automatiquement.",
      "tip": "L'optimiseur fonctionne mieux quand vos clients ont des adresses précises. Utilisez les suggestions Google Maps lors de l'ajout d'adresses clients."
    },
    "qrCode": {
      "title": "Code QR",
      "intro": "PianoPlanner dispose d'un générateur de code QR intégré pour votre page de réservation. Imprimez-le sur des cartes de visite, des flyers, ou placez-le dans votre atelier.",
      "step1Title": "Accéder à la page du code QR",
      "step1Text": "Allez dans Paramètres → Lien de réservation et cliquez sur le bouton code QR, ou ouvrez la page QR directement.",
      "step2Title": "Télécharger ou imprimer",
      "step2Text": "Le code QR renvoie vers votre page de réservation personnelle. Téléchargez-le comme image et utilisez-le sur vos supports marketing."
    },
    "pwaInstall": {
      "title": "Application mobile (PWA)",
      "intro": "PianoPlanner fonctionne comme une Progressive Web App (PWA) — vous pouvez l'installer sur votre téléphone ou tablette et l'utiliser comme une application native.",
      "iosTitle": "Installer sur iPhone / iPad",
      "iosStep1Title": "Ouvrez PianoPlanner dans Safari",
      "iosStep1Text": "Allez sur pianoplanner.com et connectez-vous. Assurez-vous d'utiliser Safari (pas Chrome ni Firefox).",
      "iosStep2Title": "Appuyez sur le bouton Partager",
      "iosStep2Text": "Appuyez sur l'icône de partage (carré avec flèche) en bas de l'écran.",
      "iosStep3Title": "Choisissez « Sur l'écran d'accueil »",
      "iosStep3Text": "Faites défiler vers le bas et appuyez sur « Sur l'écran d'accueil ». PianoPlanner apparaîtra comme une icône d'application sur votre écran d'accueil.",
      "androidTitle": "Installer sur Android",
      "androidStep1Title": "Ouvrez PianoPlanner dans Chrome",
      "androidStep1Text": "Allez sur pianoplanner.com et connectez-vous via Chrome.",
      "androidStep2Title": "Appuyez sur « Installer » ou le menu",
      "androidStep2Text": "Vous verrez peut-être une bannière « Installer » en bas. Sinon, appuyez sur les trois points (⋮) et choisissez « Installer l'application » ou « Ajouter à l'écran d'accueil ».",
      "featuresTitle": "Ce que vous obtenez sur mobile",
      "feature1": "Vue calendrier complète optimisée pour le tactile",
      "feature2": "Recherche rapide de clients et de pianos",
      "feature3": "Créer et modifier des rendez-vous en déplacement",
      "feature4": "Créer et envoyer des factures depuis votre téléphone",
      "feature5": "Notifications push pour les nouvelles réservations",
      "navigationTitle": "Navigation",
      "navigationText": "L'application mobile dispose d'une barre de navigation en bas avec 5 onglets : Calendrier, Clients, Pianos, Factures et Planification Smart. Vous pouvez passer rapidement d'une section à l'autre."
    },
    "pushNotifications": {
      "title": "Notifications push",
      "intro": "Recevez des notifications push instantanées quand un client prend rendez-vous en ligne. Fonctionne sur ordinateur et mobile (quand la PWA est installée).",
      "step1Title": "Activer les notifications",
      "step1Text": "Allez dans Paramètres → Notifications et activez les notifications push. Votre navigateur demandera la permission — cliquez sur « Autoriser ».",
      "step2Title": "Tester",
      "step2Text": "Cliquez sur « Envoyer une notification test » pour vérifier que ça fonctionne. Vous devriez voir une notification en quelques secondes.",
      "tip": "Pour la meilleure expérience, installez la PWA sur votre téléphone et activez les notifications. Vous serez ainsi immédiatement informé quand un client prend rendez-vous."
    },
    "molliePayments": {
      "title": "Paiements en ligne (Mollie)",
      "intro": "Acceptez les paiements par carte bancaire et d'autres moyens directement sur vos factures via Mollie. Les clients cliquent sur le lien de paiement dans l'e-mail de facture.",
      "setupTitle": "Configuration de Mollie",
      "step1Title": "Créer un compte Mollie",
      "step1Text": "Allez sur mollie.com et créez un compte gratuit. Complétez le processus de vérification (vérification d'identité et compte bancaire).",
      "step2Title": "Obtenez votre clé API",
      "step2Text": "Dans votre tableau de bord Mollie, allez dans Développeurs → Clés API. Copiez votre clé API Live.",
      "step3Title": "Connecter dans PianoPlanner",
      "step3Text": "Allez dans Paramètres → Intégrations → Mollie. Collez votre clé API et cliquez sur Connecter. PianoPlanner vérifiera la connexion.",
      "step4Title": "Envoyer des factures avec lien de paiement",
      "step4Text": "Quand vous envoyez une facture par e-mail, un lien de paiement est automatiquement ajouté. Les clients peuvent payer directement par carte bancaire ou d'autres moyens de paiement.",
      "tip": "Mollie ne facture pas de frais mensuels — vous ne payez que par transaction (ex. 0,29 € par transaction). Le statut de la facture est automatiquement mis à jour."
    },
    "subscription": {
      "title": "Abonnement et facturation",
      "intro": "PianoPlanner propose des formules d'abonnement flexibles adaptées à vos besoins. Gérez votre abonnement, mettez à niveau ou modifiez vos informations de paiement.",
      "plansTitle": "Formules disponibles",
      "planHeader": "Formule",
      "priceHeader": "Prix",
      "featuresHeader": "Fonctionnalités principales",
      "starterPrice": "Gratuit",
      "starterFeatures": "Planification de base, jusqu'à 25 clients, 50 rendez-vous/an, exportation calendrier, confirmations par e-mail",
      "soloFeatures": "Clients et rendez-vous illimités, optimisation d'itinéraire, Smart Suggestions, SMTP personnalisé, importation de données",
      "proFeatures": "Tout dans Solo + synchronisation calendrier bidirectionnelle, facturation, suivi kilométrique, intégrations comptables",
      "teamsFeatures": "Tout dans Pro + tableau de bord équipe, planification multi-accordeurs, page de réservation équipe, planificateur de projets (max 5 accordeurs, +€15/suppl.)",
      "businessFeatures": "Tout dans Équipes + gestion des stocks, lots showroom (max 10 accordeurs)",
      "manageTitle": "Gérer l'abonnement",
      "step1Title": "Accéder à la facturation",
      "step1Text": "Cliquez sur votre icône de profil → Facturation, ou allez directement à la page de facturation.",
      "step2Title": "Mettre à niveau ou rétrograder",
      "step2Text": "Cliquez sur « Changer de formule » pour passer d'une formule à l'autre. Les changements prennent effet à la prochaine date de facturation. La mise à niveau donne un accès immédiat.",
      "step3Title": "Gestion du paiement",
      "step3Text": "Cliquez sur « Gérer le paiement » pour mettre à jour votre carte bancaire, consulter vos factures ou annuler votre abonnement via le portail client Stripe."
    },
    "teams": {
      "title": "Équipes",
      "intro": "Vous travaillez avec plusieurs techniciens ? La fonctionnalité Équipes vous permet de gérer une base de données clients partagée, une planification coordonnée.",
      "availabilityNote": "La fonctionnalité Équipes est disponible avec la formule Équipes (€49,50/mois). Elle comprend : invitations de membres, base de données clients et pianos partagée, calendrier coordonné, flux iCal par accordeur et une page de réservation où les clients peuvent choisir un technicien ou laisser Smart Pick déterminer le meilleur choix.",
      "setupTitle": "Premiers pas avec les Équipes",
      "step1Title": "Créer une équipe",
      "step1Text": "Allez dans Paramètres → Équipes et cliquez sur « Créer une équipe ». Nommez votre équipe et configurez-la.",
      "step2Title": "Inviter des membres",
      "step2Text": "Invitez des techniciens par e-mail. Ils recevront une invitation pour rejoindre votre équipe.",
      "step3Title": "Partager la page de réservation d'équipe",
      "step3Text": "Votre équipe dispose d'une page de réservation partagée où les clients peuvent choisir leur technicien préféré, ou laisser le système déterminer le meilleur choix."
    },
    "streamlineDay": {
      "title": "Optimiser la journee",
      "intro": "Des trous entre vos rendez-vous? Le bouton Streamline resserre automatiquement votre planning en recalculant les horaires.",
      "availableFor": "Disponible pour Solo & Pro",
      "availableForText": "Optimiser la journee est inclus dans les abonnements Solo et Pro.",
      "howItWorksTitle": "Comment ca marche?",
      "step1Title": "1. Ouvrir l'analyse de route",
      "step1Text": "Allez au tableau de bord et cliquez sur le bouton Analyse.",
      "step2Title": "2. Cliquer sur Streamline",
      "step2Text": "Dans la vue d'analyse, cliquez sur le bouton Streamline.",
      "step3Title": "3. Apercu des changements",
      "step3Text": "Un apercu montre le planning actuel vs. propose.",
      "step4Title": "4. Appliquer ou annuler",
      "step4Text": "Cliquez sur Appliquer pour mettre a jour les horaires.",
      "whatItDoesTitle": "Que calcule Streamline?",
      "calc1": "Temps de trajet reel de votre adresse au premier rendez-vous",
      "calc2": "Temps de trajet reel entre chaque rendez-vous consecutif",
      "calc3": "Votre temps tampon configure est ajoute apres chaque trajet",
      "calc4": "Le premier rendez-vous commence a l'heure de debut + temps de trajet",
      "previewTitle": "Comprendre l'apercu",
      "previewText": "L'apercu montre chaque rendez-vous avec l'heure actuelle et proposee.",
      "benefitsTitle": "Avantages",
      "benefitsText": "Elimine les trous inutiles\nUtilise les temps de trajet reels Google Maps\nLibere du temps en fin de journee\nUn clic pour optimiser tout votre planning",
      "noteTitle": "Bon a savoir",
      "noteText": "Streamline n'ajuste que les rendez-vous non confirmes."
    },
    "trafficPrediction": {
      "title": "Prediction de trafic",
      "intro": "PianoPlanner peut tenir compte des conditions de circulation reelles.",
      "howItWorksTitle": "Comment ca marche?",
      "howItWorksText": "Avec la prediction de trafic activee, chaque calcul de temps de trajet considere l'heure de depart prevue.",
      "whereUsedTitle": "Ou est-ce utilise?",
      "usage1": "Suggestions intelligentes - Tiennent compte du trafic",
      "usage2": "Couleurs de route - Refletent des temps realistes",
      "usage3": "Analyse de route - Utilise des durees tenant compte du trafic",
      "usage4": "Streamline - Tient compte du trafic",
      "enableTitle": "Comment activer",
      "step1Title": "1. Aller aux parametres",
      "step1Text": "Naviguez vers Parametres - Temps de trajet.",
      "step2Title": "2. Activer la prediction de trafic",
      "step2Text": "Activez Prediction de trafic.",
      "exampleTitle": "Exemple",
      "exampleText": "Un trajet de Tilburg a Amsterdam prend normalement 89 minutes. Avec la prediction, 91 minutes pour un lundi matin.",
      "noteTitle": "Bon a savoir",
      "noteText": "Les predictions sont basees sur les donnees historiques de Google Maps. Le cache se renouvelle toutes les 2 heures."
    },
    "invoiceBookingLink": {
      "title": "Lien de réservation dans les factures",
      "intro": "Incluez un lien de réservation personnel dans vos e-mails de facturation pour que les clients puissent immédiatement planifier leur prochain accord. Le lien utilise le jeton de réservation unique de chaque client et suggère automatiquement la bonne période en fonction de l'intervalle d'accord du piano.",
      "whyTitle": "Pourquoi l'utiliser ?",
      "whyText": "Après l'accord d'un piano, le client reçoit votre facture. Juste en dessous du bouton de paiement, il voit un bouton \"Planifier votre prochain rendez-vous\". Si le piano a un intervalle de 6 mois et a été accordé aujourd'hui, le calendrier s'ouvre automatiquement au bon mois.",
      "howTitle": "Comment ça marche",
      "step1Title": "1. Activer le toggle",
      "step1Text": "Allez dans Factures → Paramètres (⚙️) et activez \"Inclure le lien de réservation dans les e-mails de facturation\". Cela ajoute un bouton de réservation à chaque e-mail de facture envoyé.",
      "step2Title": "2. Envoyer une facture",
      "step2Text": "Lorsque vous envoyez une facture par e-mail, un bouton sombre \"Planifier votre prochain rendez-vous\" apparaît sous le bouton de paiement. Chaque client reçoit son propre lien personnel.",
      "step3Title": "3. Le client clique sur le lien",
      "step3Text": "Le lien ouvre la page de réservation personnelle du client. Si le piano a un intervalle d'accord (par ex. 6 mois), le calendrier s'ouvre automatiquement au mois suggéré. Les Suggestions Intelligentes montrent les meilleurs créneaux disponibles. Le client peut aussi choisir une date plus tôt.",
      "smartDateTitle": "Calcul intelligent de la date",
      "smartDateText": "La date de début suggérée est calculée automatiquement : dernière date d'accord + intervalle. Si un client a plusieurs pianos, PianoPlanner choisit la prochaine date d'accord la plus proche. Exemple : un piano accordé le 9 avril avec un intervalle de 6 mois suggère le 9 octobre.",
      "tip": "Les clients avec un intervalle de 0 (\"le client prend contact\") ne verront pas de lien de réservation. Assurez-vous que vos pianos ont un intervalle d'accord et une dernière date d'accord configurés.",
      "tipExisting": "Le lien de réservation n'apparaît que lorsque le client a un jeton de réservation. Tous les clients reçoivent automatiquement un jeton à la création. Les clients existants importés devront peut-être visiter leur page de détail une fois pour générer un jeton."
    },
    "inventory": {
      "title": "Gestion de l'inventaire",
      "intro": "Gérez votre inventaire de pianos — stock showroom, instruments d'atelier et pianos vendus. Suivez chaque instrument de l'arrivée à la vente et planifiez les sessions d'accordage en lot.",
      "businessOnly": "Fonction Business",
      "businessOnlyText": "La gestion d'inventaire est disponible avec l'abonnement Business (89,50 €/mois).",
      "addTitle": "Ajouter des pianos",
      "addText": "Accédez à Inventaire dans le menu principal. Cliquez sur 'Ajouter un piano' pour saisir marque, modèle, numéro de série, type (droit, à queue, numérique) et emplacement interne. Vous pouvez aussi importer en masse via CSV.",
      "locationsTitle": "Emplacements & Statut",
      "locationsText": "Chaque piano a un emplacement (showroom, atelier ou autre) et un statut (en stock ou vendu). Filtrez et recherchez dans votre inventaire pour trouver rapidement tout instrument.",
      "batchTitle": "Planification de lots showroom",
      "batchText": "Sélectionnez plusieurs pianos et cliquez sur 'Créer un lot showroom' pour planifier une session d'accordage pour tous en même temps. Définissez l'emplacement, la durée estimée par piano, et choisissez une date — ou utilisez les Suggestions Intelligentes.",
      "featuresTitle": "Fonctionnalités",
      "feature1": "Suivi des pianos par marque, modèle, numéro de série et type",
      "feature2": "Badges d'emplacement : Showroom, Atelier, Autre",
      "feature3": "Suivi de statut : En Stock → Vendu",
      "feature4": "Sélection multiple pour accordage en lot showroom",
      "feature5": "Intégration Suggestions Intelligentes pour la planification en lot",
      "feature6": "Import CSV pour la gestion d'inventaire en masse",
      "tip": "Utilisez la planification de lots showroom pour accorder tous les pianos d'exposition en une seule session efficace — pas de temps de trajet. Parfait pour les magasins de musique avec 10+ instruments."
    },
    "blockedDays": {
      "title": "Jours bloqués & Vacances",
      "intro": "En vacances ou besoin d'un jour de repos ? Bloquez des jours dans votre calendrier pour que les clients ne puissent pas réserver. Les jours bloqués sont aussi exclus des Suggestions Intelligentes.",
      "howToTitle": "Comment bloquer des jours",
      "howToText": "Il existe deux façons de bloquer des jours :",
      "dashboardMethodTitle": "Depuis le tableau de bord",
      "dashStep1": "Cliquez sur un jour dans le calendrier",
      "dashStep1Text": "Le menu d'action apparaît avec plusieurs options.",
      "dashStep2": "Choisissez \"Non disponible\"",
      "dashStep2Text": "Sélectionnez l'option rouge \"Non disponible\" dans le menu.",
      "dashStep3": "Définir les dates et la raison",
      "dashStep3Text": "Choisissez une date de début et de fin, ajoutez éventuellement une raison (ex : \"Vacances\", \"Formation\"). Cliquez sur enregistrer.",
      "settingsMethodTitle": "Depuis les paramètres",
      "settingsMethodText": "Allez dans Paramètres → Jours bloqués pour voir toutes vos périodes bloquées. Ajoutez, modifiez ou supprimez des blocages.",
      "effectsTitle": "Que se passe-t-il quand des jours sont bloqués ?",
      "effect1": "La réservation en ligne est désactivée — les clients voient ces jours comme indisponibles",
      "effect2": "Les Suggestions Intelligentes ignorent les jours bloqués",
      "effect3": "Les jours bloqués apparaissent dans votre calendrier avec un style visuel distinct",
      "effect4": "La synchronisation calendrier respecte les jours bloqués — ils apparaissent comme \"Occupé\"",
      "tip": "Planifiez vos vacances à l'avance. Les jours bloqués sont immédiatement visibles pour les clients qui essaient de réserver."
    },
    "ubl": {
      "title": "UBL / e-Facturation",
      "intro": "PianoPlanner peut générer des factures UBL 2.1 XML lisibles par machine en plus de vos PDF. Ces e-factures respectent les normes européennes et sont automatiquement jointes aux emails.",
      "standardsTitle": "Standards supportés",
      "standardHeader": "Standard",
      "countryHeader": "Pays",
      "descHeader": "Description",
      "nlciusDesc": "Implémentation néerlandaise de la norme européenne de facturation électronique",
      "xrechnungDesc": "Norme allemande de facturation électronique, obligatoire pour les factures B2G",
      "peppolDesc": "Norme paneuropéenne pour les factures transfrontalières",
      "howItWorksTitle": "Comment ça marche",
      "howItWorksText": "Allez dans Factures → Paramètres et cherchez le bouton UBL. Quand activé, chaque email de facture inclut automatiquement un fichier UBL XML en pièce jointe.",
      "optionsTitle": "Options",
      "option1": "<strong>Auto (par défaut)</strong> — UBL activé pour les clients UE, désactivé pour les autres",
      "option2": "<strong>Toujours activé</strong> — UBL XML joint à chaque email de facture",
      "option3": "<strong>Désactivé</strong> — Pas de UBL XML, uniquement PDF",
      "tip": "Les e-factures UBL sont de plus en plus requises pour la facturation B2G en Europe. Même si ce n'est pas encore obligatoire, cela prépare votre facturation pour l'avenir."
    },
    "language": {
      "title": "Paramètres de langue",
      "intro": "PianoPlanner est disponible en 9 langues. Changez votre langue à tout moment — tous les menus, libellés, emails et modèles de facture s'adaptent.",
      "howToTitle": "Changer de langue",
      "step1Title": "Aller aux paramètres",
      "step1Text": "Naviguez vers Paramètres → Langue.",
      "step2Title": "Sélectionner votre langue",
      "step2Text": "Choisissez : English, English (US), Nederlands, Deutsch, Deutsch (Österreich), Deutsch (Schweiz), Français, Español ou Italiano.",
      "step3Title": "Mise à jour automatique",
      "step3Text": "L'interface se met à jour immédiatement. Pas besoin de recharger — tous les libellés et menus changent.",
      "whatChangesTitle": "Qu'est-ce qui change avec la langue ?",
      "change1": "Tous les menus, libellés et boutons de l'interface",
      "change2": "Les modèles d'emails envoyés à vos clients",
      "change3": "Les libellés et la mise en forme des factures",
      "change4": "Les pages de réservation montrées à vos clients",
      "change5": "Le format des dates et des nombres",
      "tip": "Votre langue affecte aussi les emails envoyés aux clients. Si vous servez une clientèle internationale, choisissez la langue de votre groupe de clients principal."
    },
    "tunerPortal": {
      "title": "Portail accordeur",
      "intro": "Le Portail accordeur donne aux membres de l'équipe une vue simple en lecture seule de leurs rendez-vous assignés sans compte PianoPlanner complet. Accès via un lien magique sécurisé.",
      "teamsOnly": "Fonction Teams",
      "teamsOnlyText": "Le Portail accordeur est disponible avec l'abonnement Teams (49,50 €/mois) et supérieur.",
      "sendLinkTitle": "Envoyer un lien magique",
      "step1Title": "Aller à Teams",
      "step1Text": "Ouvrez vos paramètres d'équipe et trouvez le membre à qui donner l'accès au portail.",
      "step2Title": "Envoyer le lien magique",
      "step2Text": "Cliquez sur \"Envoyer le lien magique\" à côté du nom du membre. Un email avec un lien de connexion sécurisé est envoyé.",
      "step3Title": "L'accordeur ouvre le lien",
      "step3Text": "L'accordeur clique sur le lien et se connecte automatiquement — pas de mot de passe nécessaire.",
      "featuresTitle": "Fonctionnalités du portail",
      "feature1": "Voir les rendez-vous d'aujourd'hui et de la semaine",
      "feature2": "Mettre à jour le statut : Confirmé, En route, Terminé",
      "feature3": "Ajouter des notes aux rendez-vous",
      "feature4": "Design adapté au mobile — fonctionne sur téléphone et tablette",
      "tip": "Les liens magiques sont limités dans le temps pour la sécurité. Si le lien expire, envoyez-en simplement un nouveau depuis les paramètres d'équipe."
    },
    "leads": {
      "title": "Gestion des leads",
      "intro": "Lorsqu'un client potentiel commence le processus de réservation mais ne le termine pas, ses coordonnées sont enregistrées en tant que lead. Ainsi, vous ne perdez jamais un client potentiel, même s'il abandonne en cours de route.",
      "howItWorks": "Comment ça marche ?",
      "howItWorksText": "• Un visiteur ouvre votre page de réservation et remplit son nom, email et numéro de téléphone\n• Ces données sont immédiatement enregistrées en tant que lead\n• Si le visiteur termine la réservation, le lead est automatiquement converti en client\n• S'il abandonne avant la confirmation, vous avez toujours ses coordonnées pour le recontacter",
      "managingLeads": "Gérer vos leads",
      "managingLeadsText": "Allez dans Leads dans le menu latéral (sous Planification). Vous y verrez tous vos leads avec des options de filtrage.",
      "step1Title": "1. Filtrer par statut",
      "step1Text": "Utilisez les onglets de filtre en haut pour voir les leads par statut : Tous, Nouveau, Contacté, Converti ou Rejeté.",
      "step2Title": "2. Rechercher des leads",
      "step2Text": "Utilisez la barre de recherche pour trouver rapidement un lead par nom, email, téléphone ou localisation.",
      "step3Title": "3. Mettre à jour le statut",
      "step3Text": "Modifiez le statut d'un lead via le menu déroulant sur chaque carte. Par exemple, marquez comme « Contacté » après avoir appelé.",
      "step4Title": "4. Supprimer des leads",
      "step4Text": "Plus pertinent ? Cliquez sur le bouton de suppression sur une carte de lead. On vous demandera de confirmer avant la suppression définitive.",
      "statusOverview": "Aperçu des statuts",
      "statusNew": "Nouveau — Vient d'être capturé, pas encore contacté",
      "statusContacted": "Contacté — Vous l'avez contacté",
      "statusConverted": "Converti — Il est devenu client (rendez-vous réservé)",
      "statusDismissed": "Rejeté — Pas intéressé ou non pertinent",
      "tipFollowUp": "Conseil : Faites un suivi rapide",
      "tipFollowUpText": "Un lead qui a abandonné le processus de réservation était clairement intéressé par vos services. Appelez-le ou envoyez-lui un email dans les 24 heures — vous serez surpris du nombre qui finissent par réserver !",
      "followUpEmailTitle": "Envoyer un e-mail de suivi",
      "followUpEmailText": "Vous voyez un nouveau lead avec une adresse e-mail ? Envoyez-lui un e-mail de suivi en un clic ! L'e-mail contient un lien vers votre page de réservation avec ses coordonnées pré-remplies — pour qu'il puisse finaliser sans rien retaper.",
      "followUpStep1Title": "1. Trouvez le lead",
      "followUpStep1Text": "Allez dans Leads et trouvez le lead que vous souhaitez contacter.",
      "followUpStep2Title": "2. Cliquez sur le bouton d'envoi",
      "followUpStep2Text": "Cliquez sur l'icône avion en papier ✈️ à côté du lead. Un e-mail de suivi est envoyé immédiatement.",
      "followUpStep3Title": "3. Le statut se met à jour automatiquement",
      "followUpStep3Text": "Le statut du lead passe à « Contacté » après l'envoi. L'e-mail contient un lien de réservation avec nom, e-mail, téléphone et adresse pré-remplis.",
      "contactRequestTitle": "Demandes de contact",
      "contactRequestText": "Quand un client ne trouve pas de créneau adapté sur votre page de réservation, il peut cliquer sur « Contactez-nous directement ». Vous recevez un e-mail avec ses coordonnées pour l'appeler et trouver un moment ensemble. Aucun client potentiel n'est perdu."
    }
  },
  "projects": {
    "title": "Projets",
    "detailTitle": "Projet - PianoPlanner",
    "subtitle": "Planificateur de projets d'atelier",
    "newProject": "Nouveau projet",
    "noProjects": "Pas encore de projets",
    "noProjectsText": "Commencez votre premier projet en cliquant sur 'Nouveau projet'.",
    "backToProjects": "Retour aux projets",
    "notFound": "Projet non trouvé",
    "statusPlanning": "Planification",
    "statusActive": "Actif",
    "statusPaused": "En pause",
    "statusCompleted": "Terminé",
    "statusCancelled": "Annulé",
    "priorityLow": "Faible",
    "priorityNormal": "Normal",
    "priorityHigh": "Élevé",
    "priorityUrgent": "Urgent",
    "tasks": "Tâches",
    "tasksCompleted": "Tâches terminées",
    "hoursWorked": "Heures travaillées",
    "hoursPlanned": "Planifié",
    "hoursEstimated": "Estimé",
    "progress": "Progression",
    "addTask": "Ajouter",
    "addTaskPlaceholder": "Ajouter une nouvelle tâche...",
    "editTask": "Modifier la tâche",
    "completedTasks": "Terminées",
    "taskAdded": "Tâche ajoutée",
    "taskUpdated": "Tâche mise à jour",
    "taskDeleted": "Tâche supprimée",
    "projectSaved": "Projet enregistré",
    "projectDeleted": "Projet supprimé",
    "duplicate": "Dupliquer",
    "duplicating": "Duplication du projet...",
    "projectDuplicated": "Projet dupliqué",
    "duplicateError": "Impossible de dupliquer le projet",
    "workHistory": "Historique de travail",
    "noWorkHistory": "Aucun rendez-vous d'atelier lié",
    "hours": "heures",
    "howToUse": "Comment ça marche ?",
    "guideTitle": "Planificateur de Projets d'Atelier - Guide",
    "guideCreate": "Créer un projet",
    "guideCreateDesc": "Cliquez sur 'Nouveau projet' pour créer un travail d'atelier. Ajoutez un titre, liez optionnellement un client/piano, et définissez un budget d'heures estimé.",
    "guideTasks": "Gérer les tâches",
    "guideTasksDesc": "Ajoutez des tâches comme liste de contrôle : commander des matériaux, récupérer des pièces, appeler le client, etc. Cochez ce qui est fait pour suivre la progression.",
    "guideLink": "Lier les rendez-vous",
    "guideLinkDesc": "Créez des rendez-vous d'atelier dans l'agenda et sélectionnez le projet sous 'Atelier'. Les heures travaillées sont automatiquement suivies et déduites du budget.",
    "guideProgress": "Suivre la progression",
    "guideProgressDesc": "Voyez d'un coup d'œil : tâches terminées, heures travaillées vs planifiées, et budget restant. La capacité hebdomadaire montre combien de place il vous reste.",
    "guideTheater": "Théâtres & clients réguliers",
    "guideTheaterDesc": "Les théâtres et clients réguliers reçoivent un lien de réservation personnel. Ils peuvent consulter leurs rendez-vous (à venir + historique) et réserver directement. Trouvez le lien dans le profil client.",
    "guideTip": "<strong>Conseil :</strong> Utilisez les filtres de statut pour rester concentré. Mettez les projets terminés sur 'Terminé' pour garder votre vue d'ensemble propre. Les projets avec échéance deviennent rouges quand ils approchent !",
    "viewGrid": "Cartes",
    "viewTimeline": "Chronologie",
    "timelineTitle": "Chronologie des Projets",
    "project": "Projet",
    "appointment": "Rendez-vous",
    "duplicateTitle": "Dupliquer le projet",
    "pdf": "PDF",
    "runningProjects": "Projets en cours",
    "viewAll": "Voir tout",
    "filterAll": "Tous",
    "filterActive": "Actifs",
    "filterPlanning": "Planification",
    "filterCompleted": "Terminés",
    "searchPlaceholder": "Rechercher des projets...",
    "projectTitle": "Titre du projet",
    "description": "Description",
    "customer": "Client",
    "noCustomer": "-- Aucun client --",
    "selectCustomer": "Sélectionner un client",
    "piano": "Piano",
    "noPiano": "-- Aucun piano --",
    "selectPiano": "Sélectionner un piano",
    "selectCustomerFirst": "Sélectionnez d'abord un client",
    "priority": "Priorité",
    "status": "Statut",
    "estimatedHours": "Heures estimées",
    "actualHours": "Heures réelles",
    "deadline": "Échéance",
    "notes": "Notes",
    "capacity": "Capacité cette semaine",
    "hoursUsed": "heures utilisées",
    "hoursAvailable": "disponibles",
    "taskTitle": "Tâche",
    "taskDescription": "Description",
    "taskTodo": "À faire",
    "taskInProgress": "En cours",
    "taskDone": "Terminé",
    "dueDate": "Date d'échéance",
    "taskTitleRequired": "Le titre de la tâche est obligatoire",
    "projectCreated": "Projet créé",
    "projectUpdated": "Projet mis à jour",
    "titleRequired": "Le titre du projet est obligatoire",
    "confirmDelete": "Supprimer le projet ?",
    "confirmDeleteText": "Cela supprimera le projet et toutes les tâches. Cette action est irréversible.",
    "confirmDeleteTask": "Supprimer la tâche ?",
    "confirmDeleteTaskText": "Cette action est irréversible.",
    "upgradeTitle": "Planificateur de projets d'atelier",
    "upgradeText": "Le planificateur de projets est disponible avec la formule Business. Mettez à niveau pour gérer vos projets et tâches.",
    "upgradeBtn": "Passer à Business",
    "viewAgenda": "Voir l'agenda",
    "overbookedWarning": "Attention : {hours} heures de surcharge cette semaine !",
    "weekCapacity": "Capacité de la semaine",
    "weekFull": "La semaine est complète",
    "hoursAvailableWeek": "heures disponibles cette semaine",
    "noProjectsFilter": "Aucun projet ne correspond à ce filtre",
    "noProjectsHint": "Créez votre premier projet d'atelier.",
    "editProject": "Modifier le projet",
    "titlePlaceholder": "Ex. Restauration Steinway B",
    "descriptionPlaceholder": "Que faut-il faire ?",
    "upgradeCta": "Passer à Business",
    "dayMon": "Lun",
    "dayTue": "Mar",
    "dayWed": "Mer",
    "dayThu": "Jeu",
    "dayFri": "Ven",
    "daySat": "Sam",
    "daySun": "Dim",
    "itemType": "Type",
    "typeLabor": "Main-d'œuvre",
    "typeMaterial": "Matériel",
    "typeOther": "Autre",
    "pricing": "Tarification",
    "quantity": "Quantité",
    "unit": "Unité",
    "unitHour": "Heure",
    "unitPiece": "Pièce",
    "unitSet": "Jeu",
    "unitMeter": "Mètre",
    "unitLiter": "Litre",
    "unitPrice": "Prix unitaire",
    "costPrice": "Prix de revient",
    "isBillable": "Facturable",
    "lineTotal": "Total",
    "quoteSummary": "Aperçu des coûts",
    "copyQuote": "Copier le devis",
    "quoteCopied": "Devis copié dans le presse-papiers",
    "totalToBill": "À facturer",
    "materialsCatalog": "Catalogue de matériaux",
    "selectFromCatalog": "Sélectionner du catalogue",
    "addMaterial": "Ajouter un matériau",
    "materialName": "Nom",
    "materialCategory": "Catégorie",
    "materialSupplier": "Fournisseur",
    "materialArticleNumber": "Numéro d'article",
    "materialDefaultPrice": "Prix de vente par défaut",
    "materialCostPrice": "Prix de revient",
    "materialSaved": "Matériau enregistré",
    "materialDeleted": "Matériau supprimé",
    "workshopHourlyRate": "Tarif horaire atelier",
    "notesPlaceholder": "Notes internes...",
    "addRowError": "Impossible d'ajouter la ligne",
    "placeholders": {
      "taskExample": "ex. Remplacer cordes, Marteaux, etc.",
      "quoteNotes": "Notes supplémentaires pour devis..."
    }
  },
  "onboarding": {
    "welcome": "Bienvenue sur PianoPlanner",
    "subtitle": "Configurons votre compte en quelques étapes",
    "stepCompany": "Entreprise",
    "stepServices": "Services",
    "stepTravel": "Trajet",
    "stepCalendar": "Agenda",
    "stepTest": "Test",
    "stepDone": "Terminé !",
    "next": "Suivant",
    "previous": "Précédent",
    "skip": "Passer et configurer plus tard",
    "calendarTitle": "Connecter Votre Agenda",
    "calendarDescription": "Liez votre agenda existant pour que PianoPlanner sache quand vous êtes déjà occupé. Cela évite que le planificateur intelligent crée des doublons.",
    "calendarWhyTitle": "Pourquoi connecter votre agenda ?",
    "calendarWhy1": "PianoPlanner voit quand vous avez déjà un rendez-vous",
    "calendarWhy2": "Le planificateur intelligent ne propose que des créneaux libres",
    "calendarWhy3": "Les clients ne peuvent pas réserver quand vous êtes occupé",
    "calendarOptionGoogle": "Google Calendar",
    "calendarOptionGoogleDesc": "Meilleur choix si vous utilisez Gmail ou un compte Google. Synchronisation bidirectionnelle complète.",
    "calendarOptionGoogleBtn": "Connecter Google Calendar",
    "calendarOptionApple": "Apple Calendar (iCloud)",
    "calendarOptionAppleDesc": "Idéal si vous utilisez un iPhone ou un Mac. Synchronisation bidirectionnelle via iCloud.",
    "calendarOptionAppleBtn": "Connecter Apple Calendar",
    "calendarOptionOutlook": "Microsoft Outlook",
    "calendarOptionOutlookDesc": "Pour les utilisateurs d'Outlook, Hotmail ou d'un compte professionnel Microsoft 365.",
    "calendarOptionOutlookBtn": "Connecter Outlook",
    "calendarOptionIcal": "Autre agenda (iCal)",
    "calendarOptionIcalDesc": "Fonctionne avec Samsung Agenda, Thunderbird et toute autre application supportant iCal. Lecture seule.",
    "calendarOptionIcalBtn": "Voir les instructions iCal",
    "calendarIcalWhat": "Qu'est-ce que iCal ?",
    "calendarIcalTitle": "Vos rendez-vous d'accordage dans votre propre agenda de confiance",
    "calendarIcalIntro": "Souhaitez-vous voir automatiquement vos rendez-vous d'accordage dans l'agenda que vous utilisez déjà sur votre téléphone ou ordinateur (comme Samsung, Google ou Outlook) ? C'est très simple — il suffit de connecter les agendas.",
    "calendarIcalHow": "Comment ça marche ?",
    "calendarIcalHowText": "Vous copierez bientôt une 'clé numérique' spéciale (un lien). Vous la collerez une seule fois dans votre propre application d'agenda. Ensuite, tous vos rendez-vous se synchronisent automatiquement.",
    "calendarIcalExplain": "iCal est un format universel qui permet aux applications d'agenda de communiquer entre elles. PianoPlanner vous donne un lien spécial (URL) que vous collez dans votre propre application d'agenda. Vos rendez-vous apparaîtront alors automatiquement.",
    "calendarIcalStep1Title": "Copiez le lien",
    "calendarIcalStep1": "Après la configuration, allez dans Paramètres → Intégrations où vous trouverez un bouton pour copier le lien de l'agenda.",
    "calendarIcalStep2Title": "Collez le lien dans votre agenda",
    "calendarIcalStep2": "Ouvrez votre application d'agenda et cherchez l'option pour ajouter un agenda.",
    "calendarIcalStep3": "Ouvrez votre application d'agenda et cherchez 'Ajouter un agenda' ou 'S'abonner'",
    "calendarIcalStep4": "Collez l'URL et enregistrez — vos rendez-vous apparaîtront dans l'heure",
    "calendarIcalTipGoogle": "Allez (de préférence sur l'ordinateur) à 'Ajouter un agenda' et choisissez 'Par URL'.",
    "calendarIcalTipOutlook": "Choisissez 'Nouvel agenda' puis sélectionnez 'Depuis le réseau' ou 'Depuis Internet'.",
    "calendarIcalGoodToKnow": "Bon à savoir",
    "calendarIcalNote1": "Consultation uniquement — vous voyez vos rendez-vous dans votre propre agenda, mais les modifications se font dans PianoPlanner.",
    "calendarIcalNote2": "Automatique — dès que vous planifiez un rendez-vous, il apparaît automatiquement dans votre autre agenda.",
    "calendarSkip": "Passer, je ferai ça plus tard",
    "calendarConnected": "Agenda connecté !",
    "calendarSkipNote": "Les liens de calendrier s'ouvrent dans un nouvel onglet — vous pouvez les terminer plus tard. Cliquez sur « Suivant » ci-dessous pour continuer.",
    "finishBtn": "Démarrer PianoPlanner",
    "phone": "Numéro de téléphone",
    "companyTitle": "Coordonnées de l'entreprise",
    "companyDescription": "Saisissez les informations de votre entreprise. Elles seront utilisées pour les factures et la communication avec les clients.",
    "companyName": "Nom de l'entreprise *",
    "companyNamePlaceholder": "ex. Service Piano Paris",
    "findAddress": "Rechercher une adresse",
    "findAddressPlaceholder": "ex. 1 Rue de la Paix, Paris",
    "addressAutoFill": "L'adresse est automatiquement complétée via Google",
    "street": "Rue et numéro",
    "postalCode": "Code postal",
    "city": "Ville",
    "country": "Pays",
    "postalCodePlaceholder": "75001",
    "cityPlaceholder": "Paris",
    "skipConfirm": "Êtes-vous sûr de vouloir ignorer la configuration ? Vous pourrez toujours modifier ces paramètres plus tard dans les Paramètres.",
    "servicesTitle": "Configurer les services",
    "servicesDescription": "Configurez les services que vous proposez. Vous pourrez en ajouter d'autres plus tard.",
    "addService": "Ajouter un service",
    "noServices": "Pas encore de services. Ajoutez-en un !",
    "modalAddService": "Ajouter un service",
    "modalEditService": "Modifier le service",
    "serviceName": "Nom *",
    "serviceNamePlaceholder": "ex. Accord",
    "serviceDuration": "Durée (minutes) *",
    "serviceDescription": "Description",
    "serviceOptional": "Optionnel",
    "servicePrice": "Prix",
    "cancel": "Annuler",
    "save": "Enregistrer",
    "travelTitle": "Temps de trajet et préférences",
    "travelDescription": "Définissez vos préférences de temps de trajet pour le planificateur intelligent.",
    "maxTravelTime": "Temps de trajet max. entre les rendez-vous (minutes)",
    "maxTravelTimeHint": "Le rendez-vous intelligent priorise les rendez-vous dans cette plage.",
    "maxBookingTravelTime": "Temps de trajet max. pour les réservations (minutes)",
    "maxBookingTravelTimeHint": "Les clients en dehors de cette plage verront un message de contact.",
    "minutes10": "10 minutes",
    "minutes15": "15 minutes",
    "minutes20": "20 minutes",
    "minutes25": "25 minutes",
    "minutes30": "30 minutes",
    "minutes35": "35 minutes",
    "minutes40": "40 minutes",
    "minutes45": "45 minutes",
    "hour1": "1 heure",
    "hours1_5": "1h30",
    "hours2": "2 heures",
    "testTitle": "Essayez",
    "testDescription": "Créez un client test pour explorer l'application.",
    "testCardTitle": "Créer un client test",
    "testCardDescription": "Nous allons créer un exemple de client \"Client Test\" avec un piano \"Yamaha U1\". Ainsi vous pourrez voir comment tout fonctionne !",
    "testButton": "Créer un client test",
    "testResult": "✅ Client test et piano créés !",
    "doneTitle": "Vous êtes prêt !",
    "doneDescription": "Voici quelques conseils pour commencer :",
    "tipGreenTitle": "Dates vertes",
    "tipGreenText": "Un piano doit être accordé bientôt et s'intègre bien dans votre planning.",
    "tipRedTitle": "Dates rouges",
    "tipRedText": "Un piano n'a pas été accordé depuis trop longtemps — urgent à planifier !",
    "tipSmartTitle": "Rendez-vous intelligent",
    "tipSmartText": "Obtenez des suggestions automatiques de rendez-vous basées sur la localisation et l'urgence.",
    "errorSaving": "Une erreur est survenue lors de l'enregistrement. Veuillez réessayer.",
    "errorCompanyName": "Veuillez saisir un nom d'entreprise.",
    "errorServiceSave": "Impossible d'enregistrer le service.",
    "errorServiceDelete": "Impossible de supprimer le service.",
    "errorGeneric": "Une erreur est survenue.",
    "confirmDeleteService": "Êtes-vous sûr de vouloir supprimer ce service ?",
    "pleaseWait": "Veuillez patienter...",
    "creating": "Création en cours...",
    "created": "Créé !",
    "tryAgain": "Réessayer",
    "pageTitle": "Bienvenue sur PianoPlanner — Assistant de configuration",
    "goToDashboardCta": "Aller au tableau de bord",
    "goToDashboardHint": "Lisez d'abord les conseils ci-dessous si vous le souhaitez.",
    "streetPlaceholder": "1 Rue de la Paix",
    "phonePlaceholder": "+33 1 23 45 67 89"
  },
  "pwa": {
    "tabs": {
      "agenda": "Calendrier",
      "customers": "Clients",
      "pianos": "Pianos",
      "invoices": "Factures",
      "smart": "Smart"
    },
    "youAreOffline": "Vous êtes hors ligne",
    "backOnline": "De retour en ligne",
    "updateAvailable": "Nouvelle version disponible",
    "dataStoredLocally": "Les données sont stockées localement",
    "dataSynced": "Données synchronisées",
    "syncFailed": "Échec de la synchronisation",
    "sync": "Sync",
    "itemsSynced": "éléments synchronisés",
    "itemsFailedSync": "éléments non synchronisés",
    "wakeLockActive": "L'écran reste allumé",
    "wakeLockReleased": "Verrouillage d'écran libéré",
    "update": "Mettre à jour",
    "later": "Plus tard",
    "agenda": {
      "today": "Aujourd'hui",
      "day": "Jour",
      "week": "Semaine",
      "month": "Mois",
      "view": "Voir",
      "done": "Terminé",
      "pending": "en attente",
      "routeAnalysis": "Analyse d'itinéraire",
      "dayMon": "Lun",
      "dayTue": "Mar",
      "dayWed": "Mer",
      "dayThu": "Jeu",
      "dayFri": "Ven",
      "daySat": "Sam",
      "daySun": "Dim"
    },
    "customerDetail": {
      "customers": "Clients",
      "customer": "Client",
      "edit": "Modifier",
      "call": "Appeler",
      "route": "Itinéraire",
      "email": "Email",
      "whatsapp": "WhatsApp",
      "copy": "Copier",
      "addPiano": "Ajouter piano",
      "newPiano": "Nouveau piano",
      "invoice": "Facture",
      "invoiceTitle": "Facture rapide",
      "openTasks": "Rendez-vous en cours",
      "addService": "Ajouter un service",
      "addLine": "+ Ajouter une ligne",
      "selectService": "Choisissez un service...",
      "customDescription": "Description",
      "quantity": "Quantité",
      "price": "Prix",
      "vatRate": "TVA",
      "subtotal": "Sous-total",
      "vat": "TVA",
      "total": "Total",
      "sendInvoice": "Envoyer",
      "sending": "Envoi en cours...",
      "invoiceSent": "Facture envoyée !",
      "invoiceError": "Erreur lors de l'envoi de la facture",
      "noEmail": "Ce client n'a pas d'adresse e-mail. Veuillez en ajouter une d'abord.",
      "noLines": "Ajoutez au moins une ligne à la facture.",
      "removeLine": "Supprimer",
      "invoiceProOnly": "La facturation est disponible à partir de la formule Pro."
    },
    "loading": "Chargement...",
    "swipeToClose": "Glissez vers le bas pour fermer",
    "pullToRefresh": "Tirez pour actualiser",
    "releaseToRefresh": "Relâchez pour actualiser",
    "refreshing": "Actualisation...",
    "syncCompleted": "Synchronisation terminée !",
    "syncedCalendars": "calendrier(s) synchronisé(s)",
    "noCalendarsLinked": "Aucun calendrier lié",
    "goToSettings": "Allez dans les Paramètres pour lier des calendriers",
    "syncError": "Erreur de synchronisation",
    "couldNotSync": "Synchronisation impossible. Vérifiez votre connexion internet",
    "launcher": {
      "agenda": "Agenda",
      "agendaDesc": "Gérer les rendez-vous",
      "customers": "Clients",
      "customersDesc": "Aperçu des clients",
      "pianos": "Pianos",
      "pianosDesc": "Instruments et données",
      "smart": "Planification intelligente",
      "smartDesc": "Suggestions IA",
      "sync": "Synchronisation",
      "share": "Partager le lien de réservation",
      "sectionTitle": "Commencer",
      "invoices": "Factures",
      "invoicesDesc": "Créer et envoyer des factures"
    },
    "logoutConfirm": "Êtes-vous sûr de vouloir vous déconnecter ?",
    "customers": {
      "searchPlaceholder": "Rechercher des clients..."
    },
    "logout": "Déconnexion",
    "login": {
      "title": "Connexion",
      "subtitle": "Connectez-vous pour synchroniser vos données",
      "password": "Mot de passe",
      "loginBtn": "Se connecter",
      "or": "ou",
      "continueGoogle": "Continuer avec Google",
      "noAccount": "Pas encore de compte ?",
      "register": "S'inscrire"
    },
    "pianoForm": {
      "condition": "État"
    }
  },
  "privacy": {
    "title": "Politique de Confidentialité",
    "subtitle": "Comment nous collectons, utilisons et protégeons vos données",
    "h1": "1. Quelles données collectons-nous ?",
    "p1": "Nous traitons les données en deux catégories :",
    "h2": "2. Finalité du traitement des données",
    "p2": "Nous traitons ces données exclusivement pour :",
    "h3": "3. Partage des données et Synchronisation",
    "p3a": "<strong>3.1. Services de calendrier externes :</strong> Si vous activez la synchronisation bidirectionnelle, les données de rendez-vous sont échangées avec des parties externes comme Google, Apple ou Microsoft.",
    "p3b": "<strong>3.2. Sous-traitants :</strong> Nous utilisons des sous-traitants de confiance pour l'hébergement, l'envoi d'e-mails et les paiements.",
    "p3c": "<strong>3.3. Aucune vente :</strong> Nous ne vendrons ni ne louerons jamais vos données à des tiers à des fins de marketing.",
    "h4": "4. Sécurité et Stockage",
    "p4a": "<strong>4.1. Sécurité :</strong> Nous prenons les mesures techniques et organisationnelles appropriées pour protéger les données.",
    "p4b": "<strong>4.2. Stockage local (PWA) :</strong> Lors de l'utilisation de la Progressive Web App, certaines données peuvent être stockées localement sur votre appareil.",
    "h5": "5. Durée de conservation",
    "p5": "Nous conservons vos données tant que votre compte est actif. Après la fin de votre abonnement, nous conservons vos données pendant 30 jours maximum.",
    "h6": "6. Vos droits",
    "p6": "Conformément au RGPD, vous disposez des droits suivants concernant vos données personnelles :",
    "p6outro": "Vous pouvez exercer ces droits via les paramètres de votre compte ou en nous contactant à info@pianoplanner.com.",
    "h7": "7. Coordonnées",
    "lastUpdated": "Dernière mise à jour : 23 février 2026",
    "tldr": "Nous ne vendons jamais vos données. Vos informations sont stockées en sécurité sur des serveurs européens. Vous êtes et restez propriétaire de vos données clients.",
    "toc1": "Données",
    "toc2": "Finalité",
    "toc3": "Partage",
    "toc4": "Sécurité",
    "toc5": "Conservation",
    "toc6": "Vos droits",
    "toc7": "Contact",
    "intro": "Introduction",
    "catA": "Catégorie A",
    "catA1": "Prénom et nom",
    "catA2": "Données d'adresse",
    "catA3": "Numéro de téléphone",
    "catB": "Catégorie B",
    "catB1": "Adresse e-mail",
    "catB2": "Adresse IP",
    "catB3": "Informations du navigateur",
    "p2a": "Livraison de produits/services",
    "p2b": "Service client",
    "p2c": "Amélioration de notre site web",
    "p2d": "Obligations légales",
    "p6a": "Droit d'accès",
    "p6b": "Droit de rectification",
    "p6c": "Droit à l'effacement"
  },
  "terms": {
    "title": "Conditions Générales",
    "subtitle": "Conditions d'utilisation de PianoPlanner",
    "h1": "1. Identité de l'entrepreneur",
    "p1": "PianoPlanner est un service d'Edward Meijer, opérant sous le nom d'Edan Creative. Établi à Tilburg, Pays-Bas. KvK : 18073263.",
    "p1b": "En créant un compte ou en utilisant PianoPlanner, vous acceptez ces conditions générales.",
    "h2": "2. Description du Service",
    "p2": "PianoPlanner est un service en ligne de planification et de gestion de clients (SaaS) pour les techniciens de piano, disponible via un navigateur web et en tant que Progressive Web App (PWA).",
    "h3": "3. Propriété Intellectuelle",
    "p3a": "<strong>3.1. Propriété :</strong> Le service PianoPlanner, y compris le code source, le design, les algorithmes et tout le contenu, est la propriété intellectuelle exclusive d'Edward Meijer.",
    "p3b": "<strong>3.2. Droit des marques :</strong> Le nom « PianoPlanner » et les logos associés sont des marques protégées (enregistrées auprès du BOIP).",
    "p3c": "<strong>3.3. Droit d'utilisation :</strong> Les utilisateurs obtiennent un droit non exclusif et non transférable d'utiliser le logiciel pendant la durée de l'abonnement.",
    "h4": "4. Utilisation du Service et de la PWA",
    "p4a": "<strong>4.1. Compte :</strong> L'utilisateur est responsable de la confidentialité de ses identifiants et de toutes les activités sous son compte.",
    "p4b": "<strong>4.2. Synchronisation :</strong> PianoPlanner utilise la technologie de synchronisation bidirectionnelle entre les appareils et les services de calendrier externes.",
    "p4c": "<strong>4.3. Utilisation acceptable :</strong> Il est interdit d'utiliser le service à des fins illégales.",
    "h5": "5. Abonnements et Paiement",
    "p5a": "<strong>5.1. Tarifs :</strong> Les prix actuels des différents forfaits (Solo, Pro, Business) sont indiqués sur le site web.",
    "p5b": "<strong>5.2. Paiement :</strong> Les paiements sont traités via Mollie. Les abonnements sont automatiquement renouvelés.",
    "p5c": "<strong>5.3. Résiliation :</strong> Après résiliation, l'utilisateur conserve l'accès aux données jusqu'à la fin de la période payée.",
    "h6": "6. Données et Confidentialité",
    "p6a": "<strong>6.1. Propriété des données :</strong> L'utilisateur reste propriétaire de toutes les données clients et instruments saisies.",
    "p6b": "<strong>6.2. Traitement :</strong> Nous traitons les données personnelles conformément à notre Politique de Confidentialité et au RGPD.",
    "p6c": "<strong>6.3. Export :</strong> Après la fin du service, l'utilisateur dispose de 30 jours pour exporter ses données.",
    "h7": "7. Limitation de Responsabilité",
    "p7a": "<strong>7.1. Disponibilité :</strong> Nous nous efforçons d'assurer une haute disponibilité mais ne garantissons pas un temps de fonctionnement de 100%.",
    "p7b": "<strong>7.2. Services externes :</strong> Nous ne sommes pas responsables des perturbations des services externes (Google, Apple, Microsoft).",
    "p7c": "<strong>7.3. Perte de données :</strong> Bien que nous effectuions des sauvegardes quotidiennes, nous n'acceptons aucune responsabilité pour la perte de données.",
    "p7d": "<strong>7.4. Responsabilité maximale :</strong> Notre responsabilité totale est limitée au montant payé au cours des 12 derniers mois.",
    "h8": "8. Maintenance et Sauvegarde",
    "p8a": "<strong>8.1. Maintenance :</strong> Nous pouvons interrompre temporairement le service pour la maintenance nécessaire.",
    "p8b": "<strong>8.2. Sauvegarde :</strong> Nous conseillons aux utilisateurs de créer régulièrement leurs propres exports de données critiques.",
    "h9": "9. Modifications et Droit Applicable",
    "p9a": "<strong>9.1. Modifications :</strong> Nous pouvons modifier ces conditions. Les modifications majeures seront communiquées au moins 30 jours à l'avance.",
    "p9b": "<strong>9.2. Droit :</strong> Ces conditions sont exclusivement régies par le droit néerlandais.",
    "p9c": "<strong>9.3. Litiges :</strong> Tout litige sera soumis au tribunal compétent de Breda.",
    "lastUpdated": "Dernière mise à jour : 23 février 2026",
    "tldr": "Vous restez propriétaire de vos données. Vous pouvez résilier à tout moment — vous conservez l'accès jusqu'à la fin de la période de facturation. Après résiliation, vous disposez de 30 jours pour exporter vos données. Le droit néerlandais s'applique.",
    "toc1": "Identité",
    "toc2": "Service",
    "toc3": "Propriété",
    "toc4": "Utilisation & PWA",
    "toc5": "Paiement",
    "toc6": "Confidentialité",
    "toc7": "Responsabilité",
    "toc8": "Maintenance",
    "toc9": "Modifications"
  },
  "importCalendar": {
    "googleTitle": "Importer Google Agenda",
    "googleDesc": "Importez des rendez-vous directement depuis votre Google Agenda — jusqu'à 3 ans en arrière.",
    "googleNotConnected": "Votre Google Agenda n'est pas encore connecté. Allez dans Paramètres → Sync Calendrier pour connecter votre compte Google.",
    "googlePeriod": "Période :",
    "googleFoundInGoogle": "Trouvés dans Google Agenda :",
    "googleAlreadyImported": "Déjà importés :",
    "googleNewEvents": "Nouveaux à importer :",
    "googlePreviewBtn": "🔍 Voir ce qui est disponible",
    "googleImportBtn": "📥 Importer les rendez-vous",
    "googleImporting": "Importation...",
    "googleViewAgenda": "Voir le calendrier",
    "uploadTitle": "Téléchargez votre fichier calendrier",
    "microsoftTitle": "Importer Microsoft / Outlook",
    "microsoftDesc": "Importez des rendez-vous directement depuis votre calendrier Microsoft 365 / Outlook — jusqu'à 3 ans en arrière.",
    "microsoftNotConnected": "Votre calendrier Microsoft n'est pas encore connecté. Allez dans Paramètres → Sync Calendrier pour connecter votre compte Microsoft.",
    "microsoftPeriod": "Période :",
    "microsoftFoundInMs": "Trouvés dans Microsoft :",
    "microsoftAlreadyImported": "Déjà importés :",
    "microsoftNewEvents": "Nouveaux à importer :",
    "microsoftPreviewBtn": "🔍 Voir ce qui est disponible",
    "microsoftImportBtn": "📥 Importer les rendez-vous",
    "microsoftImporting": "Importation...",
    "microsoftViewAgenda": "Voir le calendrier",
    "appleTitle": "Apple Calendrier",
    "appleExplanation": "Apple ne propose pas d'API ouverte pour l'accès au calendrier, contrairement à Google et Microsoft. Un import direct n'est donc pas possible.",
    "appleHowTo": "Vous pouvez importer votre calendrier Apple via un fichier .ics :",
    "appleStep1": "Ouvrez Calendrier sur votre Mac",
    "appleStep2": "Sélectionnez votre calendrier dans la barre latérale",
    "appleStep3": "Allez dans Fichier → Exporter → Exporter...",
    "appleStep4": "Enregistrez en tant que fichier .ics et téléchargez-le ci-dessous ↓",
    "googleSessionExpired": "Votre session Google a expiré. Allez dans Paramètres pour vous reconnecter.",
    "microsoftSessionExpired": "Votre session Microsoft a expiré. Allez dans Paramètres pour vous reconnecter.",
    "previewFailed": "Aperçu échoué",
    "importFailed": "Import échoué",
    "error": "Erreur",
    "importError": "Erreur lors de l'importation",
    "processing": "Traitement...",
    "errors": "erreurs",
    "googleConfirmImport": "Importer {count} rendez-vous depuis Google Agenda ? Cette action est irréversible.",
    "microsoftConfirmImport": "Importer {count} rendez-vous depuis Microsoft ? Cette action est irréversible.",
    "googleFetching": "Récupération des rendez-vous depuis Google...",
    "microsoftFetching": "Récupération des rendez-vous depuis Microsoft...",
    "importedCount": "{count} rendez-vous importés !",
    "skippedCount": "{count} ignorés (déjà présents)",
    "noEventsToImport": "Aucun rendez-vous à importer",
    "importOf": "Import de",
    "batchLoadError": "Erreur lors du chargement des lots d'import.",
    "confirmDeleteBatch": "Êtes-vous sûr de vouloir supprimer cet import ?\\n\\nCela supprime définitivement {count} éléments.",
    "deleteError": "Erreur lors de la suppression : ",
    "unknownError": "Erreur inconnue",
    "invalidFileType": "Veuillez télécharger un fichier .ics ou .ical",
    "fileReadError": "Erreur de lecture du fichier : ",
    "andMore": "... et {count} de plus",
    "batchCustomers": "clients",
    "batchPianos": "pianos",
    "batchAppointments": "rendez-vous",
    "deletedResult": "Supprimé:\\n\\u2022 {customers} clients\\n\\u2022 {pianos} pianos\\n\\u2022 {appointments} rendez-vous"
  },
  "dpa": {
    "title": "Accord de Sous-traitance",
    "subtitle": "Accord de sous-traitance des données conforme au RGPD",
    "intro": "Cet accord de sous-traitance fait partie intégrante des Conditions Générales de PianoPlanner et régit le traitement des données personnelles par Edward Meijer (Edan Creative), ci-après dénommé le ‘Sous-traitant’, pour le compte de l'utilisateur du logiciel, ci-après dénommé le ‘Responsable du traitement’.",
    "h1": "1. Objet du traitement",
    "p1a": "1.1. Le Sous-traitant s'engage, dans les conditions de cet accord, à traiter des données personnelles pour le compte du Responsable du traitement.",
    "p1b": "1.2. Le traitement concerne exclusivement les données des clients du Responsable du traitement (telles que nom, adresse, données d'instruments et historique des rendez-vous) saisies dans le logiciel PianoPlanner à des fins de planification et d'administration.",
    "h2": "2. Obligations du Sous-traitant",
    "p2a": "2.1. Le Sous-traitant traite les données personnelles uniquement sur la base d'instructions écrites du Responsable du traitement, y compris les instructions découlant de l'utilisation normale du logiciel.",
    "p2b": "2.2. Le Sous-traitant n'utilisera pas les données à ses propres fins et ne les communiquera pas à des tiers, sauf obligation légale.",
    "p2c": "2.3. Le Sous-traitant garantit que les personnes autorisées à traiter les données personnelles se sont engagées à la confidentialité.",
    "h3": "3. Sécurité et Synchronisation",
    "p3a": "3.1. Le Sous-traitant prend les mesures techniques et organisationnelles appropriées pour protéger les données personnelles contre la perte ou toute forme de traitement illicite.",
    "p3b": "3.2. Ces mesures comprennent notamment le chiffrement SSL, le stockage cloud sécurisé et la surveillance de l'intégrité du système.",
    "p3c": "3.3. Le Responsable du traitement reconnaît que lors de l'activation de la synchronisation bidirectionnelle (comme avec Google ou iCloud), les données sont transférées hors du contrôle direct du Sous-traitant. Le Sous-traitant n'est pas responsable du traitement par ces parties externes.",
    "h4": "4. Sous-traitants ultérieurs",
    "p4a": "4.1. Le Responsable du traitement autorise le Sous-traitant à faire appel à des sous-traitants ultérieurs (tels que des hébergeurs et des prestataires de paiement).",
    "p4b": "4.2. Le Sous-traitant s'assure que ces sous-traitants ultérieurs sont soumis à des obligations au moins équivalentes.",
    "h5": "5. Droits des personnes concernées",
    "p5a": "5.1. Si un client final du Responsable du traitement soumet une demande d'accès, de rectification ou de suppression de ses données personnelles, le Sous-traitant transmettra cette demande au Responsable du traitement.",
    "p5b": "5.2. Le Sous-traitant assistera, dans la mesure du raisonnable, le Responsable du traitement dans l'exécution de ses obligations relatives aux droits des personnes concernées.",
    "h6": "6. Durée et Résiliation",
    "p6a": "6.1. Cet accord reste en vigueur tant que l'abonnement PianoPlanner est actif.",
    "p6b": "6.2. À la fin du service, le Sous-traitant supprimera les données personnelles dans les 30 jours, sauf obligation légale de conservation.",
    "lastUpdated": "Dernière mise à jour : 23 février 2026",
    "tldr": "Nous traitons vos données clients uniquement sur votre instruction. Vos données sont chiffrées et stockées en Europe et jamais partagées avec des tiers.",
    "toc1": "Objet",
    "toc2": "Obligations",
    "toc3": "Sécurité",
    "toc4": "Sous-traitants",
    "toc5": "Droits",
    "toc6": "Durée"
  },
  "travelV2": {
    "pageTitle": "Trajets et frais de déplacement - PianoPlanner",
    "heading": "Trajets et frais de déplacement",
    "tabOverview": "Aperçu",
    "tabTrips": "Liste des trajets",
    "tabVehicle": "Véhicule",
    "year": "Année :",
    "totalKm": "Km total",
    "businessKm": "Km professionnels",
    "privateKm": "Km privés",
    "declaration": "Déclaration",
    "manualTrips": "Manuel",
    "odometerDiff": "Différence compteur",
    "monthlyChart": "Aperçu mensuel",
    "business": "Professionnel",
    "private": "Privé",
    "filterAll": "All",
    "filterBusiness": "Professionnel",
    "filterPrivate": "Privé",
    "filterManual": "Manuel",
    "searchTrips": "Rechercher un trajet...",
    "addTrip": "Ajouter un trajet",
    "colDate": "Date",
    "colPurpose": "Objectif",
    "colRoute": "Itinéraire",
    "colType": "Type",
    "colSource": "Source",
    "colDistance": "Distance",
    "noTrips": "Aucun trajet trouvé",
    "noTripsHint": "Sélectionnez une autre année ou modifiez le filtre",
    "loading": "Chargement...",
    "purposePlaceholder": "Objectif du trajet",
    "fromPlaceholder": "Départ",
    "toPlaceholder": "To",
    "roundTrip": "Aller-retour",
    "vehicleInfo": "Informations sur le véhicule",
    "licensePlate": "Plaque d'immatriculation",
    "vehicleName": "Nom du véhicule",
    "save": "Enregistrer",
    "odometerTitle": "Relevés du compteur",
    "odometerDate": "Date",
    "odometerReading": "Relevé (km)",
    "period": "Période :",
    "periodWeek": "Semaine",
    "periodMonth": "Mois",
    "periodQuarter": "Trimestre",
    "periodYear": "Année",
    "periodCustom": "Personnalisé",
    "periodTo": "au",
    "tripsCount": "{count} trajets",
    "exportCsv": "CSV",
    "exportPdf": "PDF",
    "exportCsvTitle": "Exporter en CSV",
    "exportPdfTitle": "Exporter en PDF",
    "loadError": "Erreur lors du chargement des données",
    "tripSaveError": "Erreur lors de l'enregistrement du trajet",
    "tripUpdateError": "Erreur lors de la mise à jour du trajet",
    "confirmDeleteTrip": "Êtes-vous sûr de vouloir supprimer ce trajet ?",
    "deleteError": "Erreur lors de la suppression",
    "kmOverrideError": "Erreur lors de l'ajustement des km",
    "vehicleSaved": "Véhicule enregistré",
    "vehicleSaveError": "Erreur lors de l'enregistrement du véhicule",
    "noOdometerReadings": "Pas encore de relevés kilométriques",
    "odometerSaveError": "Erreur lors de l'enregistrement du relevé",
    "noDataExport": "Pas de données à exporter",
    "csvHeader": "Date,Objet,De,Vers,Type,Source,Distance (km),Retour",
    "pdfError": "Erreur lors de l'export PDF",
    "kmRate": "Indemnité kilométrique",
    "kmRatePlaceholder": "0,55"
  },
  "smartFill": {
    "badgeNew": "Nouveau",
    "buttonLabel": "Remplir route",
    "title": "Remplir route",
    "description": "Entrez une ville ou un code postal pour trouver des clients à proximité qui ont besoin d'un accordage.",
    "locationLabel": "Ville ou code postal",
    "radiusLabel": "Rayon (km)",
    "searchBtn": "Rechercher",
    "searching": "Recherche de clients à proximité...",
    "errorEmpty": "Entrez une ville ou un code postal",
    "noResults": "Aucun client trouvé dans cette zone avec un accordage en attente.",
    "customersFound": "clients trouvés près de",
    "selectAll": "Tout sélectionner",
    "changeLocation": "Autre lieu",
    "selected": "sélectionnés",
    "sendInvitations": "Envoyer les invitations",
    "sending": "Envoi en cours...",
    "successTitle": "Invitations envoyées !",
    "successMessage": "{count} invitations envoyées avec succès.",
    "close": "Fermer",
    "urgencyOverdue": "En retard",
    "urgencyDue": "À accorder",
    "urgencySoon": "Bientôt",
    "urgencyOk": "À jour",
    "urgencyUnknown": "Inconnu",
    "noCoordinates": "Pas de coordonnées",
    "neverTuned": "Jamais accordé",
    "monthsOverdue": "mois de retard",
    "monthsLeft": "mois restants",
    "invitationsSent": "invitations envoyées !",
    "neverVisited": "Jamais visité",
    "monthsAgo": "il y a des mois",
    "lastVisited": "Dernière visite"
  },
  "reschedule": {
    "pageTitle": "Reprogrammer le rendez-vous",
    "loading": "Chargement du rendez-vous...",
    "title": "Reprogrammer le rendez-vous",
    "currentAppointment": "Rendez-vous actuel",
    "currentLabel": "Rendez-vous actuel",
    "suggestionsTitle": "Créneaux disponibles",
    "loadingSuggestions": "Recherche des créneaux optimaux...",
    "noSuggestionsTitle": "Aucun créneau disponible",
    "noSuggestionsText": "Malheureusement, aucun créneau disponible n'a été trouvé pour la période à venir. Veuillez nous contacter pour convenir d'un autre moment.",
    "recommended": "Recommandé",
    "bestChoice": "Meilleur choix",
    "routeOptimized": "Optimisé par itinéraire",
    "nearby": "À proximité",
    "confirmButton": "Reprogrammer le rendez-vous",
    "keepCurrent": "Garder le rendez-vous actuel",
    "confirmDialogTitle": "Reprogrammer le rendez-vous ?",
    "confirmDialogText": "Votre rendez-vous sera déplacé à :",
    "confirmCancel": "Annuler",
    "confirmSubmit": "Confirmer",
    "processing": "Reprogrammation...",
    "keptTitle": "Rendez-vous conservé",
    "keptText": "Votre rendez-vous actuel reste inchangé.",
    "successTitle": "Rendez-vous reprogrammé !",
    "successText": "Votre rendez-vous a été reprogrammé avec succès. Vous recevrez une confirmation par e-mail.",
    "errorTitle": "Oups !",
    "errorGeneric": "Quelque chose s'est mal passé.",
    "expiredTitle": "Lien expiré",
    "expiredText": "Ce lien de reprogrammation n'est plus valide. Le rendez-vous est peut-être déjà passé ou a été annulé.",
    "invalidLink": "Lien invalide",
    "chooseNewDate": "Choisir une nouvelle date",
    "chooseNewTime": "Choisir un nouvel horaire",
    "newAppointment": "Nouveau créneau",
    "noSlots": "Aucun créneau disponible ce jour. Veuillez choisir une autre date.",
    "loadingTimes": "Chargement des horaires...",
    "until": "jusqu'à"
  },
  "analysis": {
    "routeAnalysis": "Analyse d'itinéraire",
    "analyze": "Analyser",
    "day": "Jour",
    "loading": "Chargement de l'analyse...",
    "week": "Semaine",
    "trips": "Trajets",
    "appointments": "rendez-vous",
    "suggestions": "Suggestions",
    "optimizations": "Optimisations",
    "noAppointments": "Aucun rendez-vous",
    "noAppointmentsDesc": "Il n'y a pas de rendez-vous à analyser.",
    "score": "Score",
    "grade": "Note",
    "totalKm": "Total km",
    "totalTime": "Temps de trajet total",
    "potentialSavings": "Économies potentielles",
    "save": "économie",
    "savings": "économies",
    "total": "total",
    "savingsThisWeek": "économies cette semaine",
    "savingsPossible": "économies possibles",
    "perDay": "Par jour",
    "shortTrip": "Court",
    "mediumTrip": "Moyen",
    "longTrip": "Long",
    "veryLongTrip": "Très long",
    "gradeA": "Excellent",
    "gradeB": "Bien",
    "gradeC": "Acceptable",
    "gradeD": "À améliorer",
    "gradeF": "Inefficace",
    "moveAppointment": "Déplacer le rendez-vous",
    "applyOptimization": "Appliquer",
    "timingRisk": "Timing trop serré",
    "timingTight": "Timing serré",
    "longTripWarning": "Long trajet",
    "zigzagWarning": "Itinéraire en zigzag",
    "clusterSuggestion": "Regrouper les rendez-vous",
    "upgradeRequired": "Fonctionnalité Solo",
    "upgradeDesc": "L'analyse d'itinéraire est disponible à partir de l'abonnement Solo.",
    "upgradeButton": "Passer à Solo",
    "errorLoading": "Erreur lors du chargement de l'analyse",
    "thisWeek": "Cette semaine",
    "critical": "CRITIQUE",
    "high": "ÉLEVÉ",
    "medium": "MOYEN",
    "tip": "CONSEIL",
    "minutesSaved": "min économisées",
    "quickMove": "Déplacer vers",
    "later": "plus tard",
    "viewAllTimes": "Voir tous les créneaux",
    "viewReorder": "Voir réorganisation",
    "findBetterDay": "Trouver un meilleur jour",
    "routeOptimizationPossible": "Optimisation de route possible !",
    "viewAnalysis": "Voir l'analyse"
  },
  "completion": {
    "title": "Terminer le rendez-vous",
    "updatePiano": "Mettre à jour l'accord",
    "updatePianoDesc": "Date du dernier accord → aujourd'hui",
    "paymentLabel": "Paiement",
    "payInvoice": "Créer une facture",
    "payPin": "Payé par carte",
    "payCash": "Payé en espèces",
    "payLater": "Facturer plus tard",
    "payNone": "Pas de paiement (garantie/service)",
    "notesLabel": "Notes",
    "notesPlaceholder": "Note facultative...",
    "submit": "✅ Terminer",
    "preferredHint": "⭐ Préférence de ce client",
    "customerPreference": "⭐ Préférence de ce client"
  },
  "invoices": {
    "title": "Factures",
    "pageTitle": "Factures",
    "loading": "Chargement...",
    "searchPlaceholder": "Rechercher des factures...",
    "totalInvoices": "Total factures",
    "outstanding": "En cours",
    "overdue": "En retard",
    "paid": "Payé",
    "drafts": "Brouillons",
    "noInvoices": "Pas encore de factures",
    "createFirst": "Créez votre première facture",
    "colNumber": "Numéro",
    "colDate": "Date",
    "colCustomer": "Client",
    "colAmount": "Montant",
    "colDueDate": "Échéance",
    "colStatus": "Statut",
    "cancel": "Annuler",
    "save": "Enregistrer",
    "markPaid": "Marquer comme payé",
    "sendEmail": "Envoyer par e-mail",
    "sendEmailTitle": "Envoyer la facture",
    "emailSubject": "Objet",
    "emailMessage": "Message",
    "viewPdf": "Voir le PDF",
    "preview": "Aperçu",
    "attachmentHint": "La facture sera jointe en PDF",
    "includePaymentLink": "Inclure un lien de paiement",
    "paymentLinkHint": "Le client peut payer en ligne",
    "numbering": "Numérotation",
    "prefix": "Préfixe",
    "nextNumber": "Prochain numéro",
    "nextInvoicePreview": "Aperçu prochaine facture",
    "defaultVat": "TVA par défaut",
    "vatRegion": "Région TVA",
    "footerText": "Texte de pied de page",
    "paymentTermsDays": "Délai de paiement (jours)",
    "onlinePayment": "Paiement en ligne",
    "mollieApiKey": "Clé API Mollie",
    "mollieHint": "Activez les paiements en ligne avec Mollie",
    "serviceTemplates": "Modèles de services",
    "layout": "Mise en page",
    "eInvoicing": "Facturation électronique",
    "ublAttach": "Joindre UBL",
    "ublHint": "Joindre un fichier UBL XML à la facture",
    "letterhead": "En-tête",
    "letterheadHint": "Utiliser un en-tête personnalisé",
    "hideCompanyInfo": "Masquer les infos entreprise",
    "companyLogo": "Logo de l'entreprise",
    "noLogo": "Pas de logo",
    "logoPosition": "Position du logo",
    "logoScale": "Taille du logo",
    "layoutEditor": "Éditeur de mise en page",
    "marginSize": "Taille des marges",
    "contactBlock": "Bloc de contact",
    "contactBlockHint": "Informations de contact sur la facture",
    "customerPosition": "Position du client",
    "customerOffsetX": "Décalage X",
    "customerOffsetY": "Décalage Y",
    "posLeft": "Gauche",
    "posCenter": "Centre",
    "posRight": "Droite",
    "resetToDefault": "Réinitialiser",
    "emailBcc": "Copie cachée (BCC)",
    "emailSubjectTemplate": "Modèle d'objet",
    "emailBodyTemplate": "Modèle de message",
    "emailTemplate": "Modèle d'e-mail",
    "emailTemplateHint": "Variables : {{invoiceNumber}}, {{customerName}}, {{amount}}",
    "createFromTasks": "Créer à partir des tâches",
    "openTasks": "Tâches ouvertes",
    "dismissTask": "Ignorer la tâche",
    "fontSizes": "Tailles de police",
    "fsBedrijfsnaam": "Nom de l'entreprise",
    "fsBedrijfsinfo": "Infos entreprise",
    "fsFactuurtitel": "Titre de la facture",
    "fsKlantnaam": "Nom du client",
    "fsTabelkop": "En-tête du tableau",
    "fsTabelinhoud": "Contenu du tableau",
    "fsTotalen": "Totaux",
    "fsVoettekst": "Pied de page",
    "senderAlign": "Alignement expéditeur",
    "howToUse": "Comment ça marche ?",
    "guideTitle": "Factures - Guide",
    "guideCreate": "Créer une facture",
    "guideCreateDesc": "Créez des factures directement depuis l'agenda ou manuellement.",
    "guideLayout": "Mise en page",
    "guideLayoutDesc": "Personnalisez le logo, les marges et le texte de pied de page.",
    "guideSend": "Envoyer",
    "guideSendDesc": "Envoyez les factures par e-mail directement depuis PianoPlanner.",
    "guidePayment": "Paiement",
    "guidePaymentDesc": "Suivez les paiements et marquez les factures comme payées.",
    "guideStatus": "Statut",
    "guideStatusDesc": "Les factures passent de brouillon à envoyé, puis à payé.",
    "guideVat": "TVA",
    "guideVatDesc": "Configurez les taux de TVA par type de client.",
    "guideTip": "<strong>Astuce :</strong> Utilisez les modèles de services pour créer des factures rapidement.",
    "invoiceDetail": "Détail de la facture",
    "invoiceNumber": "Numéro de facture",
    "issueDate": "Date d'émission",
    "dueDate": "Date d'échéance",
    "customer": "Client",
    "selectCustomer": "Sélectionner un client",
    "searchPiano": "Rechercher un piano",
    "description": "Description",
    "quantity": "Quantité",
    "unitPrice": "Prix unitaire",
    "vatRate": "Taux de TVA",
    "vatAmount": "Montant TVA",
    "lineTotal": "Total ligne",
    "subtotal": "Sous-total",
    "total": "Total",
    "addLine": "Ajouter une ligne",
    "addTextLine": "Ajouter une ligne de texte",
    "fromTemplate": "Depuis un modèle",
    "notes": "Notes",
    "internalNotes": "Notes internes",
    "internalNotesPlaceholder": "Notes internes (non visibles sur la facture)...",
    "paymentTerms": "Conditions de paiement",
    "paymentTerms7": "7 jours",
    "paymentTerms14": "14 jours",
    "paymentTerms30": "30 jours",
    "paymentTermsCash": "Comptant",
    "numberOnSend": "Numéro à l'envoi",
    "emailTo": "À",
    "sampleLine1": "1 x Accord piano à queue",
    "sampleLine2": "1 x Frais de déplacement",
    "sampleCompany": "Mon Entreprise",
    "vatExempt": "Exonéré",
    "defaultSubject": "Facture {{invoiceNumber}}",
    "defaultBody": "Cher/Chère {{firstName}},\n\nVeuillez trouver ci-joint la facture {{invoiceNumber}} pour les services rendus.\nLe montant total est de {{amount}}.\n\nMerci de régler cette facture avant le {{dueDate}}.\n\nLa facture se trouve en pièce jointe.\n\nCordialement",
    "defaultCreditSubject": "Avoir {{invoiceNumber}}",
    "defaultCreditBody": "Cher/Chère {{firstName}},\n\nVeuillez trouver ci-joint l'avoir {{invoiceNumber}}.\nLe montant total est de {{amount}}.\n\nL'avoir se trouve en pièce jointe.\n\nCordialement",
    "settings": "Paramètres",
    "newInvoice": "Nouvelle facture",
    "itemsSelected": "{count} élément(s) sélectionné(s)",
    "multiCustomerSelected": "{count} éléments de {customers} clients sélectionnés",
    "confirmDismiss": "Marquer {count} élément(s) comme traité(s) ? Ils seront retirés de la liste.",
    "dismissedSuccess": "Élément(s) marqué(s) comme traité(s)",
    "dismissError": "Erreur lors du traitement",
    "confirmMarkPaid": "Marquer {count} élément(s) comme payé(s) ?",
    "paymentMarkedPaid": "Paiement(s) marqué(s) comme payé(s)",
    "markPaidError": "Erreur lors du marquage comme payé",
    "multiCustomerInvoice": "Vous avez sélectionné des éléments de plusieurs clients. Une facture par client sera créée. Continuer ?",
    "settingsTitle": "Paramètres de facturation",
    "bankDetails": "Coordonnées bancaires",
    "bankName": "Nom de la banque",
    "contactPosition": "Position des infos client",
    "contactLeft": "Gauche (par défaut)",
    "contactRight": "Droite",
    "statusDraft": "Brouillon",
    "statusSent": "Envoyée",
    "statusPaid": "Payée",
    "statusOverdue": "En retard",
    "statusCancelled": "Annulée",
    "statusCredited": "Créditée",
    "statusConfirmed": "Confirmée",
    "editInvoice": "Modifier",
    "duplicate": "Dupliquer",
    "markSent": "Marquer comme envoyée",
    "markConfirmed": "Confirmer sans e-mail",
    "confirmNoEmail": "Confirmer sans e-mail",
    "invoiceConfirmed": "Facture confirmée (sans e-mail)",
    "delete": "Supprimer",
    "creditNote": "Note de crédit",
    "creditForRef": "Concernant",
    "creditedBy": "Créditée par",
    "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce brouillon de facture ?",
    "confirmCredit": "Êtes-vous sûr de vouloir créer une note de crédit ?",
    "savedMsg": "Paramètres enregistrés",
    "deletedMsg": "Facture supprimée",
    "statusUpdated": "Statut mis à jour",
    "duplicatedMsg": "Facture dupliquée",
    "creditCreated": "Note de crédit créée",
    "errorStatus": "Erreur lors du changement de statut",
    "errorDuplicate": "Erreur lors de la duplication",
    "errorCredit": "Erreur lors de la création de la note de crédit",
    "invoiceSaved": "Facture enregistrée",
    "changesSaved": "Modifications enregistrées",
    "selectCustomerError": "Sélectionnez un client",
    "issueDateError": "Saisissez une date de facture",
    "addLineError": "Ajoutez au moins une ligne",
    "alreadyCredited": "Cette facture a déjà été créditée",
    "letterheadUploaded": "En-tête téléchargé",
    "letterheadNoPdf": "Le PDF n'est pas pris en charge comme en-tête. Utilisez JPG ou PNG.",
    "letterheadOnlyImages": "Seuls les fichiers JPG ou PNG sont autorisés.",
    "deleteLetterheadConfirm": "Supprimer l'en-tête ?",
    "letterheadDeleted": "En-tête supprimé",
    "selectFileFirst": "Veuillez d'abord sélectionner un fichier",
    "serviceAdded": "Service ajouté",
    "serviceDeleted": "Service supprimé",
    "savePaymentTermsToCustomer": "Enregistrer les conditions de paiement « {terms} » pour {name} ?",
    "paymentTermsSaved": "Conditions de paiement enregistrées pour le client",
    "days": "jours",
    "fromPiano": "Ajouter un piano...",
    "saveDraft": "📝 Enregistrer brouillon",
    "saveAndSend": "✉️ Enregistrer et envoyer",
    "backToList": "Retour à la liste",
    "emailSent": "Facture envoyée par e-mail",
    "noCustomerEmail": "Le client n'a pas d'adresse e-mail",
    "sendError": "Erreur lors de l'envoi de la facture",
    "errorLoading": "Erreur lors du chargement de la facture",
    "stripeApiKey": "Clé API Stripe",
    "stripeHint": "Alternative : saisissez votre clé secrète Stripe pour les liens de paiement via Stripe Checkout.",
    "ublEuNote": "La facturation électronique est standard ou obligatoire dans votre pays.",
    "ublNonEuNote": "La facturation électronique n'est pas requise pour votre pays. Vous pouvez l'activer en option.",
    "downloadUbl": "UBL XML",
    "logoUploaded": "Logo téléchargé",
    "logoDeleted": "Logo supprimé",
    "confirmDeleteLogo": "Êtes-vous sûr de vouloir supprimer le logo ?",
    "noLetterhead": "Pas encore d'en-tête",
    "desktopHint": "Ajustez les détails de mise en page comme la position du logo, les tailles de police et les marges sur ordinateur avec l'aperçu en direct.",
    "companyBlockPosition": "Position des infos entreprise",
    "metaPosition": "Position des détails de facture",
    "errorDeleting": "Erreur lors de la suppression",
    "draft": "Brouillon",
    "errorLoadingInvoices": "Erreur lors du chargement des factures",
    "billingRedirectNote": "La facture va à la comptabilité au lieu du client",
    "molliePaymentLinkError": "Le lien de paiement Mollie n'a pas pu être créé",
    "unknownError": "Erreur inconnue",
    "errorGeneric": "Erreur",
    "mollieKeyNotSet": "Pas de clé Mollie configurée",
    "stripeKeyNotSet": "Pas de clé Stripe configurée",
    "mollieConnectFailed": "Connexion à Mollie impossible",
    "stripeConnectFailed": "Connexion à Stripe impossible",
    "errorSaving": "Erreur lors de l'enregistrement",
    "mollieKeyVerified": "Clé API Mollie vérifiée et enregistrée",
    "stripeKeyVerified": "Clé API Stripe vérifiée et enregistrée",
    "uploadFailed": "Téléchargement échoué",
    "errorDeletingLogo": "Erreur lors de la suppression du logo",
    "noServicesYet": "Pas encore de services configurés",
    "errorAddingService": "Erreur lors de l'ajout du service",
    "pushToAccounting": "Envoyer à",
    "confirmPushAccounting": "Envoyer cette facture à {provider} ?",
    "pushingToAccounting": "Envoi à {provider}...",
    "pushedToAccounting": "Facture envoyée à {provider}",
    "pushFailed": "Échec de l'envoi",
    "bookingLinkSection": "Lien de réservation",
    "includeBookingLink": "Inclure un lien de réservation dans les e-mails de facturation",
    "bookingLinkHint": "Ajoute un bouton de réservation personnel aux e-mails de facturation pour que les clients puissent planifier leur prochain rendez-vous. Le calendrier s'ouvre au mois suggéré en fonction de l'intervalle d'accord.",
    "includeBookingLinkEmail": "Inclure le lien de réservation",
    "bookingLinkEmailHint": "Ajoute un bouton \"Planifier votre prochain rendez-vous\" à l'e-mail",
    "confirmResend": "Cette facture vient d'être envoyée. Envoyer quand même ?",
    "emailRetryQueued": "L'envoi a échoué, mais nous réessayerons automatiquement dans quelques minutes. Aucune action nécessaire.",
    "placeholders": {
      "invoiceNotes": "Notes à imprimer sur la facture..."
    },
    "layoutHint": "Ajustez les positions et marges — l'aperçu en direct se met à jour automatiquement.",
    "vatRegionHint": "Détermine la devise, la langue de la facture, les taux de TVA et le profil de facturation électronique (UBL).",
    "paymentTermsHint": "Valeur par défaut pour les nouvelles factures — modifiable par facture.",
    "onlinePaymentHint": "Mollie prend en charge iDEAL, Bancontact et les cartes dans toute l'UE et au Royaume-Uni. Stripe traite les cartes de crédit dans le monde entier. Un seul suffit — utilisez les deux pour offrir le plus de choix.",
    "hideCompanyInfoHint": "À activer uniquement si votre papier à en-tête contient déjà le nom et l'adresse de votre entreprise.",
    "footerPlaceholder": "Ex. SIRET, n° TVA, conditions",
    "varCustomerNameTip": "Nom complet du client",
    "varFirstNameTip": "Prénom du client",
    "varInvoiceNumberTip": "Numéro de facture",
    "varAmountTip": "Montant total TTC",
    "varDueDateTip": "Date d'échéance (formatée)",
    "varCompanyNameTip": "Nom de votre entreprise"
  },
  "accounting": {
    "title": "Comptabilité",
    "subtitle": "Connectez votre logiciel de comptabilité",
    "connect": "Connecter",
    "disconnect": "Déconnecter",
    "connected": "Connecté",
    "notConnected": "Non connecté",
    "comingSoon": "Bientôt disponible",
    "autoSync": "Synchronisation automatique (quotidienne)",
    "syncNow": "Synchroniser maintenant",
    "syncInvoices": "Synchroniser les factures",
    "syncContacts": "Synchroniser les contacts",
    "syncSettings": "Paramètres de synchronisation",
    "testConnection": "Tester la connexion",
    "syncLog": "Journal de synchronisation",
    "syncLogDesc": "Historique des synchronisations récentes",
    "noSyncHistory": "Pas d'historique de synchronisation",
    "neverSynced": "Jamais synchronisé",
    "logDate": "Date",
    "logInvoice": "Facture",
    "logProvider": "Fournisseur",
    "logStatus": "Statut",
    "jortt": {
      "desc": "Connectez-vous à Jortt pour synchroniser automatiquement les factures",
      "clientId": "Client ID",
      "clientSecret": "Client Secret",
      "credentialHint": "Trouvez ces informations dans votre compte Jortt",
      "apiInfo": "Informations API",
      "step1Title": "Étape 1",
      "step1Text": "Connectez-vous à votre compte Jortt",
      "step2Title": "Étape 2",
      "step2Text": "Accédez aux paramètres API",
      "step3Title": "Étape 3",
      "step3Text": "Copiez le Client ID et le Client Secret",
      "viewInvoices": "Voir les factures dans Jortt",
      "syncPayments": "Récupérer les paiements",
      "noInvoices": "Aucune facture trouvée dans Jortt",
      "goToSetup": "Configurer la connexion",
      "manage": "Gérer"
    },
    "exact": {
      "desc": "Connectez-vous à Exact Online"
    },
    "moneybird": {
      "desc": "Logiciel de comptabilité néerlandais populaire pour les indépendants et PME",
      "apiInfo": "Connectez votre compte Moneybird via un Personal Access Token. Vous avez besoin d'un token et de votre ID d'administration.",
      "step1Title": "Créez un Personal Access Token",
      "step1Text": "Créez un nouveau token nommé \"PianoPlanner\"",
      "step2Title": "Trouvez votre ID d'administration",
      "step2Text": "Allez dans votre administration Moneybird. L'ID se trouve dans l'URL : moneybird.com/{id-administration}/...",
      "step3Title": "Remplissez les informations ci-dessous",
      "step3Text": "Collez votre token et votre ID d'administration ci-dessous",
      "token": "Personal Access Token",
      "adminId": "ID d'administration",
      "credentialHint": "Votre token est stocké de manière chiffrée.",
      "fillBothFields": "Veuillez remplir à la fois le token et l'ID d'administration",
      "syncContacts": "Synchroniser les clients",
      "syncInvoices": "Synchroniser les factures",
      "goToSetup": "Configurer la connexion",
      "syncPayments": "Synchroniser les paiements",
      "connectedTitle": "Moneybird est connecté",
      "manage": "Gérer"
    },
    "eboekhouden": {
      "desc": "Connectez-vous à e-Boekhouden",
      "apiInfo": "Connectez votre compte e-Boekhouden via un jeton API. Allez dans e-Boekhouden → Gestion → Connexions → API pour créer votre jeton.",
      "step1Title": "Connectez-vous à e-Boekhouden",
      "step1Text": "allez dans Gestion → Connexions → API",
      "step2Title": "Créez un jeton API",
      "step2Text": "Cliquez sur \"Nouveau jeton\" et copiez le jeton généré",
      "step3Title": "Collez le jeton ci-dessous",
      "step3Text": "Votre jeton est stocké de manière chiffrée",
      "apiToken": "Jeton API",
      "credentialHint": "Votre jeton est stocké de manière chiffrée.",
      "goToSetup": "Configurer la connexion",
      "manage": "Gérer",
      "syncPayments": "Synchroniser les paiements",
      "connected": "Connexion réussie à e-Boekhouden !",
      "tokenRequired": "Veuillez entrer votre jeton API"
    },
    "yuki": {
      "desc": "Connectez-vous à Yuki"
    },
    "billit": {
      "desc": "Connectez-vous à Billit"
    },
    "quickbooks": {
      "desc": "Logiciel comptable mondialement populaire d'Intuit — leader du marché aux États-Unis et au Royaume-Uni",
      "apiInfo": "Connectez votre compte QuickBooks Online via l'API. Vous avez besoin d'un Access Token et de votre Company ID (Realm ID) du portail développeur Intuit.",
      "step1Title": "Accédez au portail développeur Intuit",
      "step1Text": "Connectez-vous avec votre compte Intuit",
      "step2Title": "Créez une app et générez des tokens",
      "step2Text": "Créez une app OAuth 2.0 et utilisez l'API Explorer pour générer un Access Token",
      "step3Title": "Trouvez votre Company ID (Realm ID)",
      "step3Text": "Votre Company ID se trouve dans l'URL de votre compte QuickBooks : app.qbo.intuit.com/app/homepage?companyId={ID}",
      "realmId": "Company ID (Realm ID)",
      "token": "Access Token",
      "credentialHint": "Votre token est stocké de manière chiffrée.",
      "fillBothFields": "Veuillez remplir à la fois le Company ID et l'Access Token"
    },
    "quickbooksConnected": "QuickBooks connecté avec succès !",
    "zoho": {
      "desc": "Comptabilité cloud complète de Zoho — populaire en Inde, aux États-Unis, au Royaume-Uni et dans le monde entier",
      "apiInfo": "Connectez votre compte Zoho Books via OAuth. Vous avez besoin d'un OAuth Token et de votre Organization ID de la console API Zoho.",
      "step1Title": "Accédez à la console API Zoho",
      "step1Text": "Créez un Self Client pour les tokens OAuth",
      "step2Title": "Générez un OAuth Token",
      "step2Text": "Utilisez le scope ZohoBooks.fullaccess.all et générez un token via le Self Client",
      "step3Title": "Trouvez votre Organization ID",
      "step3Text": "Allez dans Zoho Books → Paramètres → Organisation → l'ID est en haut",
      "regionLabel": "Région Zoho",
      "orgId": "Organization ID",
      "token": "OAuth Token",
      "credentialHint": "Votre token est stocké de manière chiffrée.",
      "fillBothFields": "Veuillez remplir à la fois l'Organization ID et l'OAuth Token"
    },
    "zohoConnected": "Zoho Books connecté avec succès !",
    "fiken": {
      "desc": "Logiciel de comptabilité ultra simple pour les entreprises norvégiennes — factures, comptabilité et TVA",
      "apiInfo": "Connectez votre compte Fiken avec un Personal API Token et votre Company Slug. L'API coûte 99 NOK/mois dans Fiken.",
      "step1Title": "Connectez-vous à Fiken",
      "step1Text": "Allez dans Modifier le compte → API → Clés API personnelles",
      "step2Title": "Créez un Personal API Token",
      "step2Text": "Cliquez sur 'Créer une nouvelle clé' et copiez le token",
      "step3Title": "Trouvez votre Company Slug",
      "step3Text": "Votre Company Slug se trouve dans l'URL : fiken.no/foretak/votre-slug-entreprise",
      "companySlug": "Company Slug",
      "token": "Personal API Token",
      "credentialHint": "Votre token est stocké de manière chiffrée.",
      "fillBothFields": "Veuillez remplir à la fois le Company Slug et l'API Token"
    },
    "fikenConnected": "Fiken connecté avec succès !",
    "visma": {
      "desc": "Plateforme comptable scandinave — Visma eAccounting, e-conomic, Netvisor et plus"
    },
    "vipps": {
      "desc": "Paiements mobiles en Scandinavie — facturez et recevez des paiements via Vipps directement sur le téléphone"
    },
    "region": {
      "europa": "Europe",
      "international": "International",
      "payments": "Paiements"
    },
    "datev": {
      "desc": "Connectez-vous à DATEV"
    },
    "lexoffice": {
      "desc": "Connectez-vous à Lexoffice"
    },
    "sevdesk": {
      "desc": "Connectez-vous à sevDesk"
    },
    "odoo": {
      "desc": "Connectez-vous à Odoo",
      "url": "URL Odoo",
      "dbName": "Nom de la base de données",
      "username": "Nom d'utilisateur",
      "apiKey": "Clé API",
      "planNote": "Remarque",
      "planNoteText": "L'intégration Odoo nécessite un plan Business",
      "apiInfo": "Informations API",
      "credentialHint": "Trouvez ces informations dans votre compte Odoo",
      "step1Title": "Étape 1",
      "step1Text": "Connectez-vous à votre instance Odoo",
      "step2Title": "Étape 2",
      "step2Text": "Accédez aux paramètres API",
      "step3Title": "Étape 3",
      "step3Text": "Copiez les identifiants",
      "fillAllFields": "Veuillez remplir tous les champs : URL, base de données, nom d'utilisateur et clé API",
      "goToSetup": "Configurer la connexion",
      "manage": "Gérer"
    },
    "comingSoonText": "Bientôt disponible",
    "country": {
      "nl": "Pays-Bas",
      "be": "Belgique",
      "de": "Allemagne",
      "intl": "International"
    },
    "requestSection": "Votre logiciel n'est pas dans la liste ?",
    "requestTitle": "Demander un autre logiciel comptable",
    "requestDesc": "Vous utilisez un autre logiciel comptable ? Faites-le nous savoir ! Nous étudierons la possibilité d'ajouter une intégration.",
    "requestCountry": "Pays",
    "requestPackageName": "Nom du logiciel comptable *",
    "requestPackageUrl": "Site web (optionnel)",
    "requestNotes": "Remarques (optionnel)",
    "requestSubmit": "Envoyer la demande",
    "requestSending": "Envoi en cours...",
    "requestSent": "Merci ! Votre demande a été envoyée. Nous examinerons les possibilités et vous contacterons.",
    "requestSentShort": "Demande envoyée !",
    "requestFillName": "Veuillez entrer le nom du logiciel comptable",
    "requestFailed": "Échec de la demande",
    "connecting": "Connexion en cours...",
    "disconnected": "Déconnecté",
    "connectionOk": "Connexion OK",
    "connectionFailed": "Échec de la connexion",
    "syncing": "Synchronisation lancée...",
    "syncingPayments": "Récupération du statut des paiements...",
    "noNewPayments": "Aucun nouveau paiement trouvé",
    "syncFailed": "Échec de la synchronisation",
    "fillBothFields": "Veuillez remplir les deux champs : Client ID et Client Secret",
    "connectFailed": "Échec de la connexion",
    "networkError": "Erreur réseau — veuillez réessayer",
    "confirmDisconnect": "Êtes-vous sûr de vouloir vous déconnecter ? Les synchronisations existantes seront conservées.",
    "disconnectFailed": "Échec de la déconnexion",
    "jorttConnected": "Jortt connecté avec succès !",
    "lastSyncAt": "Dernière synchronisation :",
    "administration": "Administration :",
    "odooConnected": "Odoo connecté avec succès !",
    "moneybirdConnected": "Moneybird connecté avec succès !",
    "loadFailed": "Échec du chargement",
    "fetchFailed": "Récupération échouée",
    "statusConfirmed": "Confirmé",
    "syncAsDraft": "Synchroniser comme brouillon",
    "syncAsDraftHint": "Les factures sont synchronisées comme brouillon afin que vous puissiez les vérifier et les envoyer depuis votre logiciel comptable."
  },
  "invoiceApi": {
    "invoiceNotFound": "Facture non trouvée",
    "invoiceLoadError": "Impossible de charger la facture",
    "invoicesLoadError": "Impossible de charger les factures",
    "invoiceCreateError": "Impossible de créer la facture",
    "invoiceUpdateError": "Impossible de mettre à jour la facture",
    "invoiceDeleteError": "Impossible de supprimer la facture",
    "invoiceDuplicateError": "Impossible de dupliquer la facture",
    "invoiceSent": "Facture envoyée par e-mail",
    "invoiceSendError": "Erreur lors de l'envoi de la facture",
    "invoice": "Facture",
    "creditNote": "Avoir",
    "creditNoteFor": "Avoir pour",
    "creditNoteCreateError": "Impossible de créer l'avoir",
    "alreadyCredited": "Cette facture a déjà été créditée",
    "deleteOnlyDraft": "Seuls les brouillons et les factures annulées peuvent être supprimés. Créez d'abord un avoir.",
    "invalidStatus": "Statut invalide",
    "statusChangeError": "Impossible de modifier le statut",
    "notesUpdated": "Notes et numéro de facture mis à jour",
    "settingsLoadError": "Impossible de charger les paramètres",
    "settingsSaveError": "Impossible d'enregistrer les paramètres",
    "mollieNoKey": "Aucune clé API Mollie configurée. Entrez une clé commençant par live_",
    "mollieKeyFormat": "La clé doit commencer par live_ (production) ou test_ (test)",
    "mollieKeyInvalid": "Clé API Mollie invalide. La clé doit commencer par live_ (production) ou test_ (test).",
    "mollieKeyVerifyFailed": "La clé API Mollie est invalide",
    "stripeNoKey": "Aucune clé API Stripe configurée. Entrez une clé commençant par sk_live_ ou sk_test_",
    "stripeKeyFormat": "La clé doit commencer par sk_live_ (production) ou sk_test_ (test)",
    "stripeKeyInvalid": "Clé API Stripe invalide. La clé doit commencer par sk_live_ ou sk_test_.",
    "stripeKeyVerifyFailed": "La clé API Stripe est invalide",
    "keyInvalid": "Clé invalide",
    "internalTestError": "Erreur interne lors du test",
    "noFileUploaded": "Aucun fichier téléchargé",
    "letterheadUploadError": "Impossible de télécharger le papier à en-tête",
    "letterheadDeleteError": "Impossible de supprimer le papier à en-tête",
    "servicesLoadError": "Impossible de charger les services",
    "serviceNotFound": "Service non trouvé",
    "serviceCreateError": "Impossible de créer le service",
    "serviceUpdateError": "Impossible de mettre à jour le service",
    "serviceDeleteError": "Impossible de supprimer le service",
    "nameRequired": "Le nom est obligatoire",
    "openTasksError": "Impossible de charger les tâches en cours",
    "pdfGenerateError": "Impossible de générer le PDF",
    "ublGenerateError": "Impossible de générer le fichier UBL XML",
    "numberAssignError": "Impossible d'attribuer un numéro de facture",
    "customerNotFound": "Client non trouvé",
    "customerNoEmail": "Le client n'a pas d'adresse e-mail",
    "adminNoEmail": "L'administration n'a pas d'adresse e-mail",
    "emailSendFailed": "L'e-mail n'a pas pu être envoyé",
    "invoiceRecentlySent": "Cette facture a déjà été envoyée il y a moins d'une minute. Voulez-vous vraiment l'envoyer à nouveau ?"
  },
  "why": {
    "navPricing": "Tarifs",
    "navStart": "Commencer",
    "heroTitle": "Pourquoi les accordeurs choisissent PianoPlanner",
    "heroSubtitle": "Conçu par un accordeur de pianos fatigué de la planification inefficace. Voici ce qui distingue PianoPlanner de Gazelle et SimplyBook.",
    "uniqueTitle": "🏆 Fonctionnalités que personne d'autre n'a",
    "badgeUnique": "Exclusif",
    "badgeSmart": "Intelligent",
    "badgeVisual": "Visuel",
    "theaterTitle": "Mode Théâtre",
    "theaterDesc": "Les salles de concert et théâtres sont disponibles quand vous êtes normalement en repos — soirs et week-ends. PianoPlanner vous permet de définir des disponibilités séparées.",
    "tripleCalTitle": "Triple synchronisation calendrier",
    "tripleCalDesc": "La seule application de planification pour pianos avec synchronisation bidirectionnelle Google Calendar, Microsoft 365 ET Apple Calendar — tout en même temps.",
    "personalLinkTitle": "Liens de réservation personnalisés",
    "personalLinkDesc": "Chaque client a son propre lien de réservation unique avec détails pré-remplis : nom, adresse, pianos, date du dernier accord et intervalle de service.",
    "smartOriginTitle": "Itinéraire intelligent par origine",
    "smartOriginDesc": "Le calcul d'itinéraire part de votre rendez-vous PRÉCÉDENT, pas de votre bureau. Combiné avec les données de tous vos calendriers.",
    "routeColorsTitle": "Couleurs d'efficacité d'itinéraire",
    "routeColorsDesc": "Voyez d'un coup d'œil si votre journée est planifiée efficacement. Chaque rendez-vous est coloré en fonction du temps de trajet.",
    "pianoLocTitle": "Piano ≠ Adresse du client",
    "pianoLocDesc": "PianoPlanner comprend qu'un piano peut être ailleurs que chez le client. Le calcul d'itinéraire utilise l'adresse du piano.",
    "compareTitle": "📊 Comparaison côte à côte",
    "compareSubtitle": "Découvrez comment PianoPlanner se compare aux autres logiciels de planification pour accordeurs.",
    "tableFeature": "Fonctionnalité",
    "featureTarget": "Public cible",
    "featureTargetPP": "Accordeurs de pianos",
    "featureTargetGZ": "Accordeurs de pianos",
    "featureTargetSP": "Installateurs CVC",
    "featureTheater": "Horaires théâtre/salle",
    "featureGoogle": "Google Calendar",
    "featureMicrosoft": "Microsoft 365",
    "featureApple": "Apple Calendar",
    "featurePersonalLinks": "Liens personnalisés client",
    "featureRouteColors": "Couleurs d'efficacité d'itinéraire",
    "featureSmartOrigin": "Origine intelligente (depuis rdv précédent)",
    "featurePianoLoc": "Adresse piano séparée",
    "featureTuningReminders": "Rappels d'accord automatiques",
    "featureOffline": "Application PWA hors ligne",
    "featureLanguages": "Langues",
    "featureServers": "Localisation des données",
    "featurePrice": "Prix de départ",
    "featureFree": "Version gratuite",
    "ownOnly": "Propre calendrier uniquement",
    "nativeApp": "Application native",
    "serversEU": "Europe (RGPD)",
    "serversUS": "États-Unis",
    "serversNL": "Pays-Bas",
    "free25": "25 clients",
    "trial30": "Essai 30 jours",
    "trial14": "Essai 14 jours",
    "routeDemoTitle": "🚦 Efficacité d'itinéraire en un coup d'œil",
    "routeGreen": "<15 min de trajet - Efficace",
    "routeOrange": "15-30 min de trajet - Acceptable",
    "routeRed": ">30 min de trajet - Envisagez de reprogrammer",
    "ctaTitle": "Prêt à essayer PianoPlanner ?",
    "ctaDesc": "Commencez gratuitement avec jusqu'à 25 clients. Pas de carte bancaire requise. Importez vos données Gazelle ou Excel en quelques minutes.",
    "ctaButton": "Commencer gratuitement →",
    "footerMadeBy": "Fait avec ♥ à Tilburg, Pays-Bas"
  },
  "teamBooking": {
    "pageTitle": "Prendre rendez-vous - Équipe",
    "stepService": "Service",
    "stepDateTime": "Date et heure",
    "stepDetails": "Vos coordonnées",
    "stepConfirm": "Confirmer",
    "selectService": "Sélectionner un service",
    "selectServiceSubtitle": "Choisissez le service dont vous avez besoin",
    "selectDateTime": "Sélectionner date et heure",
    "smartAssignmentInfo": "Nous vous suggérerons le meilleur technicien disponible en fonction de votre localisation et de la date",
    "preferredDate": "Date souhaitée",
    "yourAddress": "Votre adresse",
    "addressPlaceholder": "Rue, Ville",
    "addressHelp": "Permet d'attribuer le technicien le plus proche disponible",
    "findAvailableTimes": "Trouver les créneaux disponibles",
    "availableOptions": "Options disponibles",
    "bestMatch": "Meilleur choix",
    "yourDetails": "Vos coordonnées",
    "yourDetailsSubtitle": "Nous avons besoin de quelques informations pour confirmer votre réservation",
    "fullName": "Nom complet",
    "email": "Adresse e-mail",
    "phone": "Numéro de téléphone",
    "notes": "Remarques supplémentaires",
    "notesPlaceholder": "Demandes spéciales ou informations...",
    "reviewBooking": "Vérifier votre réservation",
    "reviewBookingSubtitle": "Veuillez vérifier tous les détails avant de confirmer",
    "confirmBooking": "Confirmer la réservation",
    "bookingConfirmed": "Réservation confirmée !",
    "confirmationEmail": "Un e-mail de confirmation a été envoyé à votre adresse e-mail.",
    "teamMember": "Membre de l'équipe",
    "dateTime": "Date et heure",
    "duration": "Durée",
    "location": "Lieu",
    "name": "Nom",
    "noSlotsAvailable": "Aucun créneau disponible à cette date",
    "tryAlternativeDates": "Essayez ces autres dates",
    "travelTime": "Temps de trajet",
    "appointmentsToday": "rendez-vous aujourd'hui",
    "minutes": "minutes",
    "service": "Service",
    "confirmationEmailLabel": "E-mail de confirmation",
    "searchCustomer": "Rechercher un client",
    "selectPiano": "Sélectionner un piano",
    "outsideServiceArea": "En dehors de notre zone de service",
    "outOfZoneMessage": "Malheureusement, cette adresse se trouve en dehors de la zone que nous desservons actuellement.",
    "contactUsDirectly": "Contactez-nous directement :",
    "selectTimeFirst": "Veuillez d'abord sélectionner un créneau",
    "fillRequiredFields": "Veuillez remplir nom, e-mail et adresse",
    "searchingTimes": "Recherche des horaires disponibles...",
    "noSlotsInComingWeeks": "Aucun créneau disponible trouvé dans les semaines à venir.",
    "preferOtherTime": "Préférez un autre moment ? Choisissez vous-même",
    "earliestOption": "Le plus tôt",
    "backToBestChoice": "Retour au meilleur choix",
    "findBestTimesIntro": "Trouver les meilleurs horaires",
    "addressStar": "Adresse *",
    "findBestTimes": "Trouver les meilleurs horaires",
    "choosePreferredTime": "Choisissez notre recommandation",
    "timesOptimizedIntro": "Horaires optimisés pour un itinéraire efficace",
    "loadingOptimalTimes": "Chargement des horaires optimaux...",
    "confirmAppointment": "Confirmer le rendez-vous",
    "smartPickIntro": "Nous sommes déjà dans votre quartier à ces horaires — efficace pour vous et pour nous.",
    "optimalMatch": "Créneau optimal",
    "nearby": "À proximité",
    "moreOptions": "Plus d'options",
    "reasonRouteOptimized": "Itinéraire optimisé — nous sommes déjà à proximité",
    "reasonBestMatch": "Meilleure correspondance pour votre emplacement"
  },
  "teams": {
    "pageTitle": "Gestion d'équipe - PianoPlanner",
    "title": "Gestion d'équipe",
    "subtitle": "Gérez vos équipes et activez la réservation d'équipe intelligente",
    "createTeam": "Créer une équipe",
    "newTeam": "Nouvelle équipe",
    "editTeam": "Modifier l'équipe",
    "teamName": "Nom de l'équipe",
    "bookingTitle": "Titre de la page de réservation",
    "bookingTitleHint": "Affiché aux clients sur la page de réservation",
    "bookingDescription": "Description de la page de réservation",
    "bookingDescriptionHint": "Une brève description pour les clients",
    "bookingSettings": "Paramètres de réservation",
    "enableBooking": "Activer la réservation d'équipe",
    "enableBookingHint": "Permettre aux clients de réserver avec votre équipe",
    "teamMembers": "Membres de l'équipe",
    "addMember": "Ajouter un membre",
    "newMember": "Nouveau membre",
    "editMember": "Modifier le membre",
    "memberName": "Nom",
    "memberEmail": "E-mail",
    "memberAddress": "Adresse du domicile",
    "memberAddressHint": "Utilisée pour le routage intelligent",
    "maxDistance": "Distance maximale (km)",
    "workHours": "Heures de travail",
    "workHoursHint": "Format : HH:MM-HH:MM",
    "priority": "Priorité (0-100)",
    "priorityHint": "Les membres avec une priorité plus élevée sont préférés pour les attributions",
    "status": "Statut",
    "statusActive": "Actif",
    "statusInactive": "Inactif",
    "noTeamsYet": "Pas encore d'équipe",
    "createFirstTeam": "Créez votre première équipe pour activer la réservation d'équipe intelligente",
    "active": "Actif",
    "inactive": "Inactif",
    "members": "membres",
    "manage": "Gérer",
    "myTeam": "Mon équipe",
    "myTeamSubtitle": "Gérez vos accordeurs, horaires de travail et lien de réservation",
    "loading": "Chargement...",
    "bookingLink": "Lien de réservation",
    "pianoTuners": "Accordeurs de piano",
    "save": "Enregistrer",
    "bookingDisabledMsg": "Activez les réservations pour que les clients puissent réserver en ligne avec votre équipe.",
    "teamNamePlaceholder": "ex. Le nom de votre entreprise",
    "bookingTitlePlaceholder": "ex. Réserver un accord",
    "bookingDescPlaceholder": "ex. Notre équipe d'accordeurs expérimentés est à votre service...",
    "icalTitle": "Abonnement calendrier pour les membres de l'équipe",
    "icalDesc": "Chaque membre de l'équipe dispose d'un lien iCal personnel pour consulter les rendez-vous (lecture seule) dans son propre calendrier.",
    "icalApple": "Apple : Fichier → Nouvel abonnement de calendrier → coller l'URL",
    "icalGoogle": "Google : Paramètres → Autres agendas → À partir de l'URL",
    "icalOutlook": "Outlook : Ajouter un calendrier → S'abonner depuis le web",
    "bookingEnabled": "Réservations activées",
    "bookingDisabled": "Réservations désactivées",
    "bookingToggleFailed": "Impossible de modifier les réservations",
    "enterTeamName": "Nom de l'équipe :",
    "settingsSaved": "Paramètres enregistrés",
    "settingsSaveFailed": "Impossible d'enregistrer les paramètres",
    "linkCopied": "Lien copié !",
    "connectLinkCopied": "Lien de connexion pour {name} copié ! Envoyez ce lien à {name}.",
    "connectLinkFailed": "Impossible de créer le lien de connexion",
    "disconnectConfirm": "Déconnecter Google Calendar pour {name} ?",
    "disconnected": "Google Calendar déconnecté pour {name}",
    "disconnectFailed": "Impossible de déconnecter Google Calendar",
    "enterDates": "Saisissez une date de début et de fin",
    "absenceAdded": "Absence ajoutée",
    "absenceAddFailed": "Impossible d'ajouter l'absence",
    "absenceDeleteConfirm": "Supprimer l'absence ?",
    "absenceDeleted": "Absence supprimée",
    "absenceDeleteFailed": "Impossible de supprimer l'absence",
    "nameEmailRequired": "Le nom et l'e-mail sont requis",
    "memberUpdated": "Membre mis à jour",
    "memberAdded": "Membre ajouté",
    "memberSaveFailed": "Impossible d'enregistrer le membre",
    "memberDeleteConfirm": "Êtes-vous sûr de vouloir supprimer ce membre de l'équipe ?",
    "memberRemoved": "Membre supprimé",
    "memberRemoveFailed": "Impossible de supprimer le membre",
    "companyLogo": "Logo d'entreprise",
    "logoUploadHint": "Télécharger un logo d'équipe personnalisé (remplace le logo de l'entreprise)",
    "logoUploaded": "Logo téléchargé",
    "logoRemoved": "Logo supprimé",
    "usingCompanyLogo": "Votre logo d'entreprise des Paramètres est utilisé sur la page de réservation.",
    "changeInSettings": "Modifier dans Paramètres",
    "serviceArea": "Zone de service",
    "noZone": "Pas de zone",
    "enterAddressFirst": "Entrez d'abord une adresse ci-dessus",
    "clearZone": "Effacer la zone (disponible partout)",
    "geocodeFailed": "Impossible de trouver cette adresse sur la carte",
    "serviceZone": "zone",
    "contactPhone": "Téléphone de contact",
    "contactPhonePlaceholder": "p.ex. +33 6 12345678",
    "contactPhoneHint": "Affiché aux clients en dehors de votre zone de service",
    "contactEmail": "E-mail de contact",
    "contactEmailPlaceholder": "p.ex. info@entreprise.fr",
    "dragToMove": "Glissez pour déplacer le centre de la zone",
    "zoneHint": "Les clients en dehors de ce rayon ne peuvent pas réserver cet accordeur",
    "teamLoadFailed": "Impossible de charger l'équipe",
    "bookingActiveLabel": "Actif",
    "copyButton": "Copier",
    "bookingDisabledLabel": "Désactivé",
    "noMembersYet": "Pas encore de membres",
    "vacationButton": "🏖️ Vacances",
    "sendAccessButton": "📱 Envoyer l'accès",
    "lastActiveLabel": "Dernière activité :",
    "neverLoggedIn": "Jamais connecté",
    "sendingStatus": "Envoi...",
    "sentStatus": "Envoyé",
    "errorSending": "Erreur d'envoi.",
    "justNow": "à l'instant",
    "minutesAgo": "il y a {{mins}} min",
    "hoursAgo": "il y a {{hours}} h",
    "yesterday": "hier",
    "daysAgo": "il y a {{days}} jours",
    "absencesTitle": "Absences",
    "noAbsences": "Aucune absence prévue",
    "scheduledAbsences": "Prévues",
    "pastAbsences": "Passées",
    "dateRangeSeparator": "au",
    "deleteAbsenceButton": "Supprimer",
    "memberLoadFailed": "Impossible de charger les membres",
    "logoUploadFailed": "Impossible de télécharger le logo",
    "logoRemoveFailed": "Impossible de supprimer le logo",
    "magicLinkSent": "Lien magique envoyé avec succès !",
    "selectTeam": "Équipe :",
    "membersCount": "membres",
    "teamCreated": "Équipe créée",
    "errorCreatingTeam": "Erreur lors de la création de l'équipe",
    "cannotDeleteLastTeam": "Impossible de supprimer la dernière équipe",
    "confirmDeleteTeam": "Êtes-vous sûr de vouloir supprimer cette équipe ? Tous les membres seront retirés et les rendez-vous désaffectés.",
    "teamDeleted": "Équipe supprimée",
    "errorDeletingTeam": "Erreur lors de la suppression de l'équipe",
    "everyone": "Tous",
    "unassigned": "Non attribué",
    "bulkAssignFuture": "Attribuer aussi tous les rendez-vous futurs de ce client",
    "bulkAssignSuccess": "{count} rendez-vous attribués",
    "assignTo": "Attribuer à",
    "copyIcalLink": "Copier le lien iCal",
    "notifyOnAssign": "E-mail lors de l'attribution",
    "icalSubscribeTitle": "Abonnez-vous à votre agenda personnel",
    "icalSubscribeDesc": "Ajoutez ce lien à Apple Calendar, Google Calendar ou Outlook pour voir vos rendez-vous:",
    "icalSubscribeButton": "S'abonner au calendrier",
    "icalCopyHint": "Ou copiez le lien et collez-le dans votre application agenda.",
    "copied": "Copié !",
    "copyManually": "Copiez ce lien :",
    "calendarColor": "Couleur du calendrier",
    "tabMembers": "Membres",
    "tabBooking": "Réservation",
    "tabSettings": "Paramètres",
    "bookingPageSettings": "Page de réservation",
    "teamSettings": "Paramètres d'équipe",
    "welcomeTitle": "Bienvenue dans Teams !",
    "welcomeDesc": "Nous allons créer votre équipe et vous ajouter comme premier membre. Vos paramètres et rendez-vous existants seront repris automatiquement.",
    "teamNameLabel": "Nom de l'équipe",
    "reviewProfile": "Vérifiez votre profil",
    "reviewDesc": "Ces données seront utilisées pour votre profil de membre. Vous pouvez les modifier plus tard.",
    "nameLabel": "Nom",
    "emailLabel": "E-mail",
    "addressLabel": "Adresse",
    "workHoursLabel": "Horaires de travail",
    "continueButton": "Continuer",
    "backButton": "Retour",
    "createTeamButton": "Créer l'équipe",
    "setupComplete": "L'équipe est prête !",
    "setupCompleteDesc": "Vous avez été ajouté comme premier membre. Vos prochains rendez-vous ont été liés. Ajoutez votre premier collègue pour commencer.",
    "appointmentsLinked": "{count} rendez-vous à venir liés à votre profil",
    "addFirstColleague": "Ajouter votre premier collègue"
  },
  "routeOptimizer": {
    "title": "Optimiseur d'itinéraire",
    "subtitle": "Optimisez votre planning et économisez des kilomètres",
    "efficiencyScore": "Efficacité d'itinéraire",
    "calculating": "Calcul en cours...",
    "appointments": "Rendez-vous",
    "totalKm": "Total km",
    "avgPerTrip": "Moy. par trajet",
    "outliers": "Valeurs aberrantes",
    "suggestions": "Suggestions d'optimisation",
    "noSuggestions": "Aucune suggestion",
    "planningOptimal": "Votre planning est déjà optimal !",
    "weekOverview": "Aperçu de la semaine",
    "suggestedTime": "Heure suggérée",
    "accept": "Accepter",
    "dismiss": "Ignorer",
    "rescheduled": "Rendez-vous reprogrammé !",
    "rescheduleError": "Erreur lors de la reprogrammation",
    "noTimeAvailable": "Aucun créneau disponible",
    "errorLoading": "Erreur lors du chargement",
    "noData": "Aucune donnée disponible",
    "noApiKey": "Clé API Google Maps non configurée",
    "potentialSavings": "Économisez jusqu'à {km} km",
    "gradeA": "Excellente planification d'itinéraire !",
    "gradeB": "Bonne planification d'itinéraire",
    "gradeC": "Planification acceptable",
    "gradeD": "Pourrait être amélioré",
    "gradeF": "Forte amélioration possible",
    "outlier": "Valeur aberrante",
    "centroid": "Centre {day}",
    "week": "Semaine",
    "month": "Mois"
  },
  "travelReport": {
    "title": "Rapport de frais de déplacement - PianoPlanner",
    "heading": "Frais de déplacement",
    "subtitle": "Aperçu de toutes les distances de déplacement pour la facturation",
    "startDate": "Du",
    "endDate": "Au",
    "customerFilter": "Client (optionnel)",
    "searchPlaceholder": "Rechercher un client...",
    "generate": "Générer le rapport",
    "export": "CSV",
    "totalAppointments": "Trajets",
    "totalKm": "Kilomètres",
    "avgKm": "Km moyen",
    "totalTime": "Temps de trajet",
    "costLabel": "Frais",
    "loading": "Chargement...",
    "emptyState": "Sélectionnez une période",
    "emptyHint": "Le rapport sera généré automatiquement",
    "date": "Date",
    "time": "Heure",
    "customer": "Client",
    "location": "Lieu",
    "route": "Itinéraire",
    "service": "Service",
    "distance": "Distance",
    "travelTime": "Temps de trajet",
    "notes": "Notes",
    "noDataFound": "Aucune donnée de trajet trouvée",
    "errorLoading": "Impossible de charger le rapport",
    "errorExport": "Générez d'abord un rapport",
    "selectDates": "Sélectionnez une date de début et de fin"
  },
  "days": {
    "monday": "Lundi",
    "tuesday": "Mardi",
    "wednesday": "Mercredi",
    "thursday": "Jeudi",
    "friday": "Vendredi",
    "saturday": "Samedi",
    "sunday": "Dimanche"
  },
  "sidebar": {
    "planning": "Planification",
    "agenda": "Agenda",
    "myAgenda": "Mon Agenda",
    "customers": "Clients",
    "pianos": "Pianos",
    "reminders": "Rappels",
    "work": "Travail",
    "projects": "Projets",
    "travel": "Trajets",
    "invoices": "Factures",
    "inventory": "Inventaire",
    "management": "Gestion",
    "settings": "Paramètres",
    "emailTemplates": "Modèles d'e-mail",
    "accounting": "Comptabilité",
    "import": "Importer",
    "billing": "Abonnement",
    "teams": "Équipes",
    "help": "Aide",
    "guide": "Guide",
    "support": "Assistance",
    "logout": "Déconnexion",
    "forceRefresh": "Cliquez pour actualiser",
    "logoutConfirm": "Voulez-vous vraiment vous déconnecter ?",
    "menuToggle": "Menu",
    "emailQuota": "Crédit e-mail",
    "googleExpired": "Votre connexion Google Calendar a expiré.",
    "reconnect": "Reconnecter",
    "aiSearch": "Recherche IA",
    "leads": "Leads"
  },
  "contact": {
    "about": "À propos",
    "businessDetails": "Informations commerciales",
    "companyName": "Entreprise",
    "companyTitle": "À propos de nous",
    "email": "E-mail",
    "emailField": "E-mail",
    "error": "Une erreur est survenue. Veuillez réessayer plus tard.",
    "formDesc": "Remplissez le formulaire ci-dessous et nous vous répondrons dans les 24 heures.",
    "formTitle": "Envoyez-nous un message",
    "heroDesc": "Des questions sur PianoPlanner ? Nous serions ravis de vous entendre. Envoyez-nous un message et nous vous répondrons dès que possible.",
    "heroTitle": "Contactez-nous",
    "kvk": "Chambre de Commerce (KvK)",
    "location": "Emplacement",
    "login": "Connexion",
    "message": "Message",
    "name": "Nom",
    "selectSubject": "Sélectionnez un sujet...",
    "send": "Envoyer le message",
    "sending": "Envoi en cours...",
    "subject": "Sujet",
    "subjectBilling": "Facturation & Abonnement",
    "subjectFeature": "Demande de fonctionnalité",
    "subjectFeedback": "Retour d'expérience",
    "subjectGeneral": "Question générale",
    "subjectOther": "Autre",
    "subjectSupport": "Support technique",
    "success": "Votre message a été envoyé avec succès !",
    "vat": "Numéro de TVA"
  },
  "teamDashboard": {
    "pageTitle": "Tableau de Bord d'Équipe - PianoPlanner",
    "teamLoading": "Chargement de l'équipe...",
    "today": "Aujourd'hui",
    "smartAppointment": "Rendez-vous intelligent",
    "dayView": "Jour",
    "weekView": "Semaine",
    "teamView": "Équipe",
    "loading": "Chargement...",
    "bookingLink": "Lien de réservation",
    "bookingLinkTitle": "Copier le lien de réservation public",
    "invitations": "Invitations",
    "invitationsTitle": "Envoyer des invitations d'accord via Teams",
    "teamMembers": "Membres de l'équipe",
    "workload": "Charge de travail cette semaine",
    "unassigned": "Non assigné",
    "everyone": "Tout le monde",
    "none": "Aucun",
    "previous": "Précédent",
    "next": "Suivant",
    "icalFeeds": "Flux iCal",
    "icalHowItWorks": "Comment ça marche ?",
    "icalCopyLink": "Copiez le lien iCal et ajoutez-le comme abonnement dans :",
    "icalApple": "Apple Calendar : Fichier → Nouvel abonnement de calendrier",
    "icalGoogle": "Google Calendar : Paramètres → Autres agendas → À partir de l'URL",
    "icalOutlook": "Outlook : Ajouter un calendrier → S'abonner depuis le web",
    "selectPiano": "Sélectionner ou ajouter un piano",
    "selectPianoDesc": "Choisir un piano existant ou en enregistrer un nouveau",
    "customerPianos": "Pianos du client",
    "selectCustomerFirst": "Sélectionnez d'abord un client",
    "or": "ou",
    "addNewPiano": "Ajouter un nouveau piano",
    "brand": "Marque",
    "brandPlaceholder": "ex. Steinway, Yamaha",
    "model": "Modèle",
    "modelPlaceholder": "ex. Model D, U1",
    "type": "Type",
    "upright": "Piano droit",
    "grand": "Piano à queue",
    "buildYear": "Année de construction",
    "buildYearPlaceholder": "ex. 1985",
    "savePiano": "Enregistrer le piano",
    "aiSuggestions": "Suggestions IA",
    "aiSuggestionsDesc": "Recommandations intelligentes basées sur la localisation et le calendrier",
    "customer": "Client",
    "piano": "Piano",
    "selectService": "Choisir un service",
    "selectServicePlaceholder": "-- Sélectionner un service --",
    "smartestMoments": "Meilleurs créneaux",
    "smartMomentsDesc": "Calculés automatiquement en fonction de votre calendrier et du temps de trajet",
    "smartMomentsLoading": "Recherche des meilleures options...",
    "smartMomentsEmpty": "Sélectionnez un service pour voir les meilleurs créneaux",
    "loadMoreOptions": "Charger plus d'options",
    "chosenMoment": "Créneau choisi",
    "assignMember": "Assigner un membre de l'équipe",
    "assignMemberDesc": "Qui s'occupera de ce rendez-vous ?",
    "moment": "Créneau",
    "chooseMember": "Choisir un membre de l'équipe",
    "chooseMemberDesc": "Trié par score intelligent (disponibilité, localisation, charge de travail)",
    "chooseMemberLoading": "Calcul du meilleur membre de l'équipe...",
    "sendConfirmation": "Envoyer un e-mail de confirmation",
    "createAndAssign": "Créer et assigner le rendez-vous",
    "prevStep": "Précédent",
    "nextStep": "Suivant",
    "assign": "Assigner",
    "removeAssignment": "Retirer l'assignation",
    "cancel": "Annuler",
    "sendInvitations": "Envoyer des invitations d'accord",
    "searchCustomer": "Rechercher un client par nom ou e-mail...",
    "selected": "sélectionné(s)",
    "selectAll": "Tout sélectionner",
    "deselectAll": "Tout désélectionner",
    "customersLoading": "Chargement des clients...",
    "customersSelected": "client(s) sélectionné(s)",
    "sendInvitationsBtn": "Envoyer les invitations",
    "errorLoadingTeams": "Erreur lors du chargement des équipes",
    "bookingLinkCopied": "Lien de réservation copié !",
    "errorLoadingCalendar": "Erreur lors du chargement du calendrier d'équipe",
    "selectMember": "Sélectionner un membre de l'équipe",
    "assignmentSaved": "Assignation enregistrée",
    "errorAssigning": "Erreur lors de l'assignation",
    "assignmentRemoved": "Assignation retirée",
    "errorRemovingAssignment": "Erreur lors du retrait de l'assignation",
    "selectTeamFirst": "Sélectionnez d'abord une équipe",
    "selectPianoFirst": "Sélectionnez d'abord un piano",
    "selectTimeslotFirst": "Sélectionnez d'abord un créneau",
    "enterName": "Saisissez un nom",
    "errorSavingCustomer": "Erreur lors de l'enregistrement du client",
    "enterBrand": "Saisissez la marque",
    "errorSavingPiano": "Erreur lors de l'enregistrement du piano",
    "selectAllFieldsAndMember": "Remplissez tous les champs et sélectionnez un membre de l'équipe",
    "confirmCreateAnyway": "Voulez-vous quand même créer ce rendez-vous ?",
    "appointmentCreated": "Rendez-vous créé et assigné à {name}",
    "errorCreatingAppointment": "Erreur lors de la création du rendez-vous",
    "invitationsSent": "{count} invitation(s) d'équipe envoyée(s)",
    "noTeams": "Aucune équipe — créez-en une d'abord",
    "noTeamsTitle": "Aucune équipe",
    "noTeamsDesc": "Allez dans la gestion d'équipe pour créer une équipe.",
    "copied": "Copié !",
    "copy": "Copier",
    "clickToCopy": "Cliquer pour copier",
    "noTeamMembers": "Aucun membre d'équipe",
    "members": "membres",
    "copyThisLink": "Copier ce lien :",
    "stepCustomer": "Client",
    "stepPiano": "Piano",
    "stepAppointment": "Rendez-vous",
    "stepMember": "Membre",
    "selectCustomer": "Sélectionner ou ajouter un client",
    "selectCustomerDesc": "Rechercher un client existant ou en créer un nouveau",
    "searchExistingCustomer": "Rechercher un client existant",
    "searchCustomerInputPlaceholder": "Tapez le nom, l'e-mail ou le numéro de téléphone...",
    "searchCustomerPlaceholder": "Rechercher un client par nom ou e-mail...",
    "createNewCustomer": "Créer un nouveau client",
    "nameLabel": "Nom",
    "emailLabel": "E-mail",
    "phoneLabel": "Téléphone",
    "addressLabel": "Adresse",
    "postalCodeLabel": "Code postal",
    "cityLabel": "Ville",
    "fullNamePlaceholder": "Nom complet",
    "emailPlaceholder": "email@exemple.fr",
    "phonePlaceholder": "+33 1 23 45 67 89",
    "addressPlaceholder": "Rue et numéro",
    "postalCodePlaceholder": "75001",
    "cityPlaceholder": "Paris",
    "saveCustomer": "Enregistrer le client",
    "noAddressKnown": "Aucune adresse connue",
    "noCustomersFound": "Aucun client trouvé",
    "loadingPianos": "Chargement des pianos...",
    "noPianosYet": "Ce client n'a pas encore de pianos. Ajoutez-en un !",
    "monthsAgoTuned": "mois depuis le dernier accord",
    "noTuningKnown": "Aucun historique d'accord connu",
    "noTuningKnownPiano": "Aucun historique d'accord connu pour ce piano.",
    "pianoOverdue": "Ce piano n'a pas été accordé depuis",
    "months": "mois",
    "errorLoadingPianos": "Erreur lors du chargement des pianos",
    "noAvailableMoments": "Aucun créneau disponible trouvé.",
    "errorSearchingMoments": "Erreur lors de la recherche de créneaux disponibles.",
    "saved": "enregistré",
    "bestChoice": "Meilleur choix",
    "preferOther": "Préférer un autre créneau ?",
    "alternativesAvailable": "alternatives disponibles",
    "preferOtherChoose": "Préférer un autre créneau ? Choisissez vous-même",
    "backToBest": "Retour au meilleur choix",
    "recommended": "Recommandé",
    "available": "Disponible",
    "noActiveMembersAvailable": "Aucun membre d'équipe actif disponible",
    "noActiveMembers": "Aucun membre d'équipe actif",
    "activateMembersVia": "Activer les membres de l'équipe via",
    "teamManagement": "Gestion d'équipe",
    "noTeamsCreate": "pour créer une équipe.",
    "errorLoadingMembers": "Erreur lors du chargement des membres de l'équipe",
    "busy": "En cours...",
    "appointment": "Rendez-vous",
    "createAnyway": "Voulez-vous quand même créer ce rendez-vous ?",
    "sendConfirmationTo": "Envoyer un e-mail de confirmation à",
    "confirmationSentTo": "E-mail de confirmation envoyé à",
    "appointmentCreatedAssigned": "Rendez-vous créé et assigné à",
    "loadingCustomers": "Chargement des clients...",
    "errorLoadingCustomers": "Erreur lors du chargement des clients",
    "noCustomersWithEmail": "Aucun client avec e-mail trouvé",
    "unnamed": "Sans nom",
    "sending": "Envoi en cours...",
    "sendingFailed": "Échec de l'envoi",
    "teamInvitationsSent": "invitation(s) d'équipe envoyée(s)",
    "viaTeamBookingLink": "Via le lien de réservation d'équipe",
    "skipped": "ignoré",
    "sent": "envoyé",
    "done": "Terminé",
    "error": "Erreur",
    "timelineView": "Chronologie",
    "newAppointment": "Nouveau rendez-vous",
    "createAppointment": "Créer rendez-vous",
    "smartSuggestion": "Suggestion",
    "createFailed": "Échec de la création",
    "errorCreating": "Erreur lors de la création",
    "noMember": "Aucun",
    "appointmentMoved": "Rendez-vous déplacé",
    "fromHome": "depuis la maison",
    "travelTimeLbl": "temps de trajet",
    "toHome": "vers la maison",
    "smartPlanTitle": "Planification intelligente",
    "smartSelectService": "Sélectionnez un client et un service pour voir les suggestions",
    "smartSearching": "Recherche des meilleurs moments...",
    "noSmartSuggestions": "Aucune suggestion intelligente disponible",
    "smartError": "Impossible de charger les suggestions",
    "backToSmart": "Retour aux suggestions intelligentes ▴",
    "planManually": "Préférez planifier manuellement ? ▾",
    "smartSelectServiceWorkshop": "Sélectionnez un service pour voir les suggestions",
    "errorLoadingAppointment": "Impossible de charger le rendez-vous",
    "editAppointmentTitle": "Modifier le rendez-vous",
    "saveButton": "Enregistrer",
    "noServiceOption": "— Aucun service —",
    "saveFailed": "Échec de l'enregistrement",
    "appointmentSaved": "Rendez-vous enregistré",
    "errorSaving": "Erreur lors de l'enregistrement",
    "selectProjectFirst": "Sélectionnez un projet pour le travail en atelier",
    "selectSuggestionOrManual": "Choisissez une suggestion ou planifiez manuellement",
    "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce rendez-vous ?",
    "deleteFailed": "Échec de la suppression",
    "appointmentDeleted": "Rendez-vous supprimé",
    "errorDeleting": "Erreur lors de la suppression",
    "routeOptimized": "Route optimisée",
    "noProject": "— Aucun projet (heures libres) —",
    "daysOverdue": "jours de retard !",
    "deadlineToday": "aujourd'hui !",
    "daysRemaining": "encore {{n}} jours",
    "wizardCustomer": "Client",
    "wizardServiceTime": "Service & Horaire",
    "wizardDetails": "Détails",
    "searchHint": "Rechercher par nom, ou",
    "addNewCustomer": "créer un nouveau client",
    "newCustomer": "Nouveau client",
    "nameRequired": "Nom *",
    "phone": "Téléphone",
    "streetHouseNr": "Rue + numéro",
    "postalCode": "Code postal",
    "city": "Ville",
    "addCustomer": "Ajouter le client",
    "titleHint": "Laisser vide pour un titre automatique basé sur client + service",
    "customerCreated": "Client ajouté",
    "errorCreatingCustomer": "Erreur lors de la création du client",
    "atWorkshop": "Atelier",
    "allDay": "Toute la journée",
    "privateAppointment": "Rendez-vous privé",
    "privatePurposePlaceholder": "ex. Courses, médecin, famille..."
  },
  "notifications": {
    "updated": "mis à jour",
    "pinPaid": "Payé par carte",
    "cashPaid": "Payé en espèces",
    "invoiceLater": "Facturer plus tard",
    "appointmentCompleted": "Rendez-vous terminé"
  },
  "legal": {
    "tldrLabel": "En bref",
    "tocTitle": "Table des matières"
  },
  "about": {
    "heroTitle": "Logiciel pour accordeurs de piano,<br>conçu par un accordeur de piano.",
    "heroSubtitle": "Fort de 46 ans d’expérience terrain, je sais ce dont vous avez besoin. J’ai créé l’application que j’ai toujours voulue.",
    "storyOriginTitle": "Du fichier papier au code",
    "storyOriginP1": "Mon amour pour la technologie a commencé tôt. Adolescent, je programmais en BASIC tard le soir sur un ZX Spectrum. Plus tard, armé de mon premier Tulip PC, j’ai écrit mon premier « vrai » logiciel : une base de données clients numérique pour mon père.",
    "storyOriginP2": "Dans mon enthousiasme juvénile, j’ai ensuite jeté son fichier papier physique — au grand effroi de mon père ! Finalement, j’ai tout imprimé proprement pour lui sur l’imprimante matricielle, mais le ton était donné : je voulais organiser les choses plus vite, plus efficacement et mieux.",
    "storyFrustrationTitle": "Ce que j'ai essayé",
    "storyFrustrationP1": "Chaque matin le même rituel : vérifier Google Calendar, chercher les adresses clients, ouvrir Google Maps, calculer si un rendez-vous peut s’insérer entre deux autres... Et le soir : envoyer manuellement des emails de confirmation, mettre à jour ma feuille Excel avec les numéros de série, noter quand chaque piano doit être accordé.",
    "storyFrustrationP2": "Après des années à penser « il doit y avoir mieux », j’ai décidé de le construire moi-même.",
    "triedExcel": "Pas de rappels",
    "triedGCal": "Pas d’infos clients",
    "triedGazelle": "Cher, serveurs aux USA",
    "triedCalendly": "Pas pour notre métier",
    "triedServiceP": "Pour techniciens CVC",
    "triedPaperName": "Agenda papier",
    "triedPaper": "Pas de sauvegarde, sync",
    "storyTeamTitle": "La collaboration",
    "storyTeamP1": "Dans ma propre pratique, je me suis heurté à des murs pendant des années. Je travaillais avec un logiciel américain qui ne comprenait pas complètement notre marché, ou je jonglais avec trois applications différentes pour l’agenda, la facturation et les itinéraires. Je me suis dit : « Ça doit être plus intelligent. »",
    "storyTeamP2": "J’ai un grand intérêt pour tout ce qui touche aux chiffres d’entreprise — nous savons tous combien le régime de la marge peut être complexe. Je voulais un logiciel qui non seulement planifie, mais qui accompagne aussi ma gestion d’entreprise.",
    "storyTeamP3": "Quand j’ai décidé de construire le planificateur ultime moi-même, je n’étais pas seul. Je me suis mis au travail avec mes compétences et les conseils de mes enfants et beaux-enfants. L’un est diplômé en informatique de l’université HAN. L’autre en Game Development & Sound Design de la HKU. Avec mon expérience terrain et leur connaissance des dernières technologies et de l’IA, nous avons développé PianoPlanner ensemble.",
    "storySmartTitle": "Rendez-vous intelligents",
    "storySmartP1": "Le cœur de PianoPlanner est simple : je veux voir en un coup d’œil si je gagne de l’argent ou si je perds du temps. Je ne veux pas non plus passer trop de temps en voiture. C’est pourquoi nous avons développé Smart Appointments — chaque rendez-vous reçoit automatiquement une couleur basée sur le temps de trajet :",
    "colorGreen": "S’intègre parfaitement dans votre itinéraire",
    "colorOrange": "Attention à votre temps de trajet",
    "colorRed": "Inefficace, vous coûte du temps",
    "storyNLTitle": "Fièrement néerlandais",
    "storyNLP1": "Contrairement aux grands acteurs américains, je crois en la force locale. PianoPlanner est une initiative indépendante. Vos données sont stockées en toute sécurité et chiffrées sur des serveurs européens, entièrement conforme au RGPD.",
    "storyNLP2": "Je suis fier de ce que nous avons construit. Un système pour les accordeurs de piano, par un accordeur de piano.",
    "compareTitle": "PianoPlanner vs Gazelle",
    "compareSubtitle": "Deux plateformes pour techniciens piano — laquelle convient à votre façon de travailler ?",
    "ppOrigin": "🇳🇱 Pays-Bas · Créé par un accordeur de piano",
    "pp1": "Clustering automatique des routes avec Smart Suggestions",
    "pp2": "Sync Google + Microsoft + Apple Calendar (bidirectionnelle)",
    "pp3": "Liens de réservation en ligne pour les clients",
    "pp4": "Serveurs européens — conforme RGPD",
    "pp5": "4 langues : NL, EN, DE, FR",
    "gzOrigin": "🇺🇸 USA · Fondé en 2015",
    "gz1": "Applications natives iOS & Android",
    "gz2": "Facturation avec intégration QuickBooks",
    "gz3": "Rapports d'état (rapports PDF de piano)",
    "gz4": "Grande base de clients existante aux USA",
    "gz5": "Plusieurs langues disponibles",
    "thFeature": "Fonctionnalité",
    "catPlanning": "📅 Planification & Itinéraire",
    "fRouteOpt": "Optimisation des routes",
    "fRouteOptPP": "✅ Smart Suggestions — l'IA choisit automatiquement le meilleur créneau basé sur le temps de trajet + rendez-vous existants",
    "fRouteOptGZ": "Planification manuelle avec vue carte + algorithme de routage",
    "fRouteFill": "Remplissage de route",
    "fRouteFillPP": "✅ Trouvez des clients proches de rendez-vous existants qui ont besoin d'un accordage. Envoyez des invitations.",
    "fCustAnalysis": "Analyse du fichier clients",
    "fCustAnalysisPP": "✅ Scannez votre fichier clients, calculez les distances, recevez une recommandation optimale — un clic",
    "fTheater": "Mode théâtre",
    "fTheaterPP": "✅ Horaires séparés pour théâtres & salles de concert",
    "catCalendar": "📆 Calendrier & Synchronisation",
    "fGooglePP": "✅ Sync bidirectionnelle (temps réel)",
    "fGoogleGZ": "Sync unidirectionnelle",
    "catBooking": "🌐 Réservation en ligne",
    "fBookingLink": "Lien de réservation public",
    "fBookingLinkPP": "✅ pianoplanner.com/book/votre-nom",
    "fSmartSugg": "Smart Suggestions",
    "fSmartSuggPP": "✅ 3 stratégies : route, comble-trous, proximité",
    "fConfirm": "Confirmation",
    "fConfirmPP": "✅ Confirmé instantanément — le client sait tout de suite",
    "fConfirmGZ": "Approbation requise",
    "catPianos": "🎹 Pianos & Clients",
    "fPhotos": "Photos par piano",
    "fPhotosPP": "✅ Jusqu'à 5 photos par piano — optimisées avec miniatures",
    "fPhotosGZ": "✅ Photos avec piano + rapports d'état",
    "fWorkshop": "Planificateur d'atelier",
    "fWorkshopPP": "✅ Projets, tâches, estimation d'heures, suivi",
    "catBilling": "💰 Facturation",
    "fInvoicing": "Facturation",
    "fInvoicingPP": "✅ Incluse",
    "fInvoicingGZ": "Module payant",
    "fAccounting": "Intégration comptabilité",
    "fAccountingPP": "✅ Moneybird, Jortt, e-Boekhouden, Exact Online",
    "fAccountingGZ": "QuickBooks / Xero (orienté US)",
    "fMileage": "Suivi kilométrique",
    "fMileagePP": "✅ Automatiquement par rendez-vous selon l'itinéraire",
    "catTechnical": "⚙️ Technique",
    "fPrivacy": "Confidentialité & données",
    "fPrivacyPP": "✅ Serveurs EU/NL · Conforme RGPD",
    "fPrivacyGZ": "Serveurs US",
    "fSmtp": "Domaine email personnalisé",
    "fSmtpPP": "✅ SMTP personnalisé + modèles modifiables",
    "fLanguages": "Langues",
    "fLanguagesPP": "✅ NL, EN, DE, FR, IT, ES",
    "fLanguagesGZ": "EN + plusieurs langues",
    "catPricing": "💳 Tarifs",
    "fFree": "Version gratuite",
    "fFreePP": "✅ Permanent — jusqu'à 25 clients",
    "fFreeGZ": "Essai de 30 jours",
    "fStartPrice": "Prix de départ",
    "fStartPricePP": "À partir de 24,50€/mois (illimité)",
    "fStartPriceGZ": "67€/mois (250 pianos) · 89€ (350) · 115€ (500)",
    "fLimits": "Limites",
    "fLimitsPP": "✅ Clients & pianos illimités",
    "fLimitsGZ": "Payer par tranche de 50 pianos + coûts suppl.",
    "catTeams": "👥 Teams",
    "fTeams": "Version Teams",
    "fTeamsPP": "✅ Plusieurs accordeurs par entreprise · agenda partagé · Smart Pick · iCal par accordeur · 49,50€/mois",
    "honestTitle": "🤝 Honnêtement : où Gazelle est plus fort",
    "honest1": "<strong>Rapports d'état</strong> — Envoyez aux clients des rapports PDF détaillés sur l'état de leur piano. PianoPlanner n'a pas (encore) cette fonctionnalité.",
    "honest2": "<strong>Applications natives</strong> — Les apps iOS/Android de Gazelle peuvent sembler plus fluides qu'une PWA, surtout sur les appareils anciens.",
    "honest3": "<strong>Position sur le marché US</strong> — Gazelle est actif depuis plus longtemps et possède un large réseau en Amérique du Nord.",
    "diffTitle": "La différence fondamentale",
    "diffSubtitle": "Pourquoi les accordeurs passent à PianoPlanner",
    "diffSmartTitle": "Planification automatiquement intelligente",
    "diffSmartDesc": "Smart Suggestions analyse votre agenda, calcule les temps de trajet et propose automatiquement les créneaux les plus efficaces. Le système regroupe tout seul.",
    "diffSyncTitle": "Triple synchronisation de calendrier",
    "diffSyncDesc": "Seule plateforme piano à synchroniser en bidirectionnel avec Google Calendar, Microsoft 365 et Apple Calendar.",
    "diffBookingTitle": "Les clients réservent eux-mêmes",
    "diffBookingDesc": "Chaque client reçoit un lien de réservation personnel. Ils voient leurs pianos, rendez-vous précédents et choisissent directement un nouveau créneau.",
    "diffPrivacyTitle": "Confidentialité européenne",
    "diffPrivacyDesc": "Toutes les données sont stockées sur des serveurs néerlandais. Entièrement conforme RGPD. Aucune donnée vers les USA. Idéal pour les techniciens européens.",
    "priceTitle": "Comparaison des prix",
    "priceSubtitle": "Que payez-vous par mois ?",
    "priceAmountPP": "0€ – 49€",
    "pricePerMonth": "par mois",
    "pricePP1": "Starter : gratuit (jusqu'à 25 clients)",
    "pricePP2": "Start : 24,50€/mois — illimité",
    "pricePP3": "Pro : 39,50€/mois — avec sync calendrier + facturation",
    "pricePP4": "Aucune limite sur les pianos ou clients",
    "pricePP5": "1 mois d'essai gratuit",
    "priceAmountGZ": "67€ – 115€+",
    "priceSubGZ": "par mois (250–500 pianos, forfait de base)",
    "priceGZ1": "30 jours d'essai gratuit",
    "priceGZ2": "250 pianos = 67€/mois · 350 = 89€ · 500 = 115€",
    "priceGZ3": "Prix par 50 pianos actifs — augmente vite",
    "priceGZ4": "Rappels, facturation, SMS coûtent en supplément",
    "priceGZ5": "Intégration QuickBooks (module payant)",
    "migTitle": "Changer ? Ça prend 5 minutes.",
    "migSubtitle": "Exportez vos clients, pianos et rendez-vous de Gazelle en CSV. Téléchargez dans PianoPlanner — c'est fait.",
    "migStep1": "1. Exporter de Gazelle",
    "migStep2": "2. Télécharger dans PianoPlanner",
    "migStep3": "3. C'est fait !",
    "signatureGreeting": "Je vous invite chaleureusement à l'essayer vous-même.",
    "signatureTitle": "Technicien piano & Créateur de PianoPlanner",
    "ctaTitle": "Prêt à travailler plus intelligemment ?",
    "ctaDesc": "Commencez gratuitement avec jusqu'à 25 clients. Pas de carte de crédit nécessaire.",
    "ctaBtn": "Commencer gratuitement →"
  },
  "seo": {
    "homeTitle": "PianoPlanner — Planification Intelligente pour Techniciens Piano",
    "homeDescription": "Le logiciel le plus intelligent pour les techniciens piano. Planification assistée par IA, optimisation des itinéraires, facturation et une page de réservation que vos clients adoreront.",
    "pricingTitle": "Tarifs — PianoPlanner",
    "pricingDescription": "Des tarifs simples pour les techniciens piano. Commencez gratuitement avec jusqu'à 25 clients. Pas de carte de crédit nécessaire.",
    "aboutTitle": "À propos de PianoPlanner — Créé par un Technicien Piano",
    "aboutDescription": "L'histoire derrière PianoPlanner. Créé par le technicien piano Edward Meijer pour aider ses collègues à travailler plus intelligemment.",
    "contactTitle": "Contact — PianoPlanner",
    "contactDescription": "Contactez l'équipe PianoPlanner. Questions, commentaires ou demandes de partenariat — nous serions ravis de vous entendre.",
    "guideTitle": "Premiers pas — PianoPlanner",
    "guideDescription": "Découvrez comment démarrer avec PianoPlanner. Configurez votre compte, importez vos clients et planifiez votre premier rendez-vous.",
    "bookTitle": "Réserver une démo — PianoPlanner",
    "bookDescription": "Réservez une démo gratuite de PianoPlanner. Découvrez comment la planification intelligente peut transformer votre activité d'accordage.",
    "teamsInfoTitle": "PianoPlanner Teams — Toute l'opération sous contrôle",
    "teamsInfoDescription": "Planification d'itinéraires par IA, application mobile pour techniciens et sécurité étanche. PianoPlanner Teams automatise la logistique de votre entreprise de service piano.",
    "compareTitle": "PianoPlanner vs Gazelle — Comparaison honnête pour accordeurs de piano (2026)",
    "compareDescription": "Vous envisagez Gazelle ou cherchez une alternative ? Comparez PianoPlanner et Gazelle : planification, synchronisation agenda, facturation, confidentialité et tarifs. Guide de migration inclus."
  },
  "languagePicker": {
    "chooseLanguage": "Choisir la langue",
    "searchLanguage": "Rechercher une langue..."
  },
  "portal": {
    "pageTitle": "Mon Itinéraire — PianoPlanner",
    "title": "Mon Itinéraire",
    "logout": "Se déconnecter",
    "loading": "Chargement du planning...",
    "noAppointments": "Aucun rendez-vous",
    "noAppointmentsDesc": "Vous n'avez pas de rendez-vous d'accord aujourd'hui.",
    "completeTitle": "Terminer le rendez-vous",
    "updateTuning": "Mettre à jour l'accord",
    "updateTuningDesc": "Dernière date d'accord → aujourd'hui",
    "payment": "Paiement",
    "customerPreference": "Préférence de ce client",
    "paidByCard": "Payé par carte",
    "paidByCash": "Payé en espèces",
    "createInvoice": "Créer une facture",
    "invoiceLater": "Facturer plus tard",
    "noPayment": "Aucun paiement",
    "notes": "Notes",
    "optionalNote": "Note optionnelle...",
    "cancel": "Annuler",
    "complete": "Terminer",
    "navigate": "Naviguer",
    "note": "Note",
    "history": "Historique",
    "done": "Terminé",
    "save": "Enregistrer",
    "loadingText": "Chargement...",
    "noCustomerNotes": "Pas encore de notes pour ce client.",
    "loadError": "Impossible de charger l'historique.",
    "unknownCustomer": "Client inconnu",
    "notePlaceholder": "Note sur cet accord...",
    "appointmentCompleted": "Rendez-vous terminé",
    "pianoUpdated": "piano mis à jour",
    "cardPaid": "Payé par carte",
    "cashPaid": "Payé en espèces",
    "invoiceRequested": "Facture demandée",
    "connectionError": "Erreur de connexion",
    "couldNotComplete": "Impossible de terminer",
    "saved": "Enregistré",
    "dayMon": "Lun",
    "dayTue": "Mar",
    "dayWed": "Mer",
    "dayThu": "Jeu",
    "dayFri": "Ven",
    "daySat": "Sam",
    "daySun": "Dim",
    "statusPending": "Planifié",
    "statusConfirmed": "Confirmé",
    "statusEnRoute": "En route",
    "statusCompleted": "Terminé",
    "expiredTitle": "Session expirée",
    "expiredHeading": "Le lien a expiré",
    "expiredMessage": "Ce lien d'accès sécurisé n'est plus valide ou votre session a expiré. Demandez à votre planificateur de vous envoyer un nouveau lien.",
    "workshopTasks": "Atelier",
    "estimated": "estimé",
    "actual": "travaillé",
    "taskCompleted": "Tâche terminée",
    "reportAbsence": "Signaler une absence",
    "startDate": "Date de début",
    "endDate": "Date de fin",
    "reason": "Raison (facultatif)",
    "reasonPlaceholder": "Ex. vacances, maladie...",
    "send": "Envoyer",
    "datesRequired": "Veuillez remplir les dates",
    "endAfterStart": "La date de fin doit être après la date de début",
    "absenceRegistered": "Absence signalée",
    "allDay": "Toute la journée",
    "unavailable": "Indisponible"
  },
  "teamsInfo": {
    "heroTitle": "PianoPlanner Teams : Toute l'opération sous contrôle",
    "heroSubtitle": "Gérer une équipe d'accordeurs de piano est un casse-tête logistique complexe. Comment éviter que deux accordeurs se croisent sur l'autoroute ? Comment donner aux employés accès à leur itinéraire sans exposer les données financières ? PianoPlanner Teams est conçu pour automatiser entièrement ces défis.",
    "smartTitle": "Planification d'itinéraires par IA",
    "smartIntro": "Arrêtez de comparer manuellement cinq agendas différents. Les algorithmes intégrés font le calcul en millisecondes.",
    "smartLocationLabel": "Localisation d'abord",
    "smartLocationDesc": "Vous avez un client en ligne ? Entrez le code postal et le système scanne instantanément tous les agendas de l'équipe.",
    "smartMatchLabel": "Le match parfait",
    "smartMatchDesc": "Vous obtenez un classement des meilleurs techniciens pour la mission. L'algorithme calcule le temps de trajet depuis leur rendez-vous précédent et tient compte d'une répartition équitable du travail.",
    "smartSpeedLabel": "Gain de temps",
    "smartSpeedDesc": "Ce qui prend dix minutes de réflexion à un planificateur humain, PianoPlanner le fait en un clic.",
    "appTitle": "L'application mobile pour accordeurs",
    "appIntro": "Chaque accordeur de piano dispose de son propre portail sécurisé en déplacement — optimisé pour le mobile.",
    "appMagicLabel": "Magic Links",
    "appMagicDesc": "Fini les mots de passe oubliés. Vous envoyez un lien de connexion sécurisé par e-mail. Un clic et ils sont connectés sur leur propre téléphone.",
    "appFocusLabel": "Focus sur la journée",
    "appFocusDesc": "L'accordeur voit une chronologie claire : où aller, quel type de piano, et les notes spécifiques au client — avec un bouton de navigation directe.",
    "appRealtimeLabel": "Validation en temps réel",
    "appRealtimeDesc": "Dès que l'accordeur termine une mission, cela se met à jour instantanément sur votre tableau de bord central.",
    "securityTitle": "Sécurité et confidentialité étanches",
    "securityIntro": "En tant que propriétaire, vous souhaitez soutenir votre équipe tout en protégeant vos données financières et stratégiques. PianoPlanner applique le principe du besoin d'en connaître.",
    "securitySepLabel": "Séparation stricte des données",
    "securitySepDesc": "Un accordeur ne voit que ses propres rendez-vous. Les agendas des collègues, le chiffre d'affaires, les factures et la base clients générale sont totalement invisibles.",
    "securityRevokeLabel": "Le bouton d'arrêt d'urgence",
    "securityRevokeDesc": "Un employé quitte l'entreprise ? En un clic, son accès est révoqué immédiatement — même s'il est actuellement connecté. Vos données restent les vôtres.",
    "bookingTitle": "Widget de réservation intelligent pour les clients",
    "bookingIntro": "Faites travailler votre système de réservation en ligne pour vous, pas contre vous.",
    "bookingRouteLabel": "Réservation optimisée par itinéraire",
    "bookingRouteDesc": "Les clients saisissent leur adresse en ligne. Le système affiche automatiquement uniquement les créneaux qui minimisent le temps de trajet pour votre équipe. Le client choisit l'heure, le système choisit l'accordeur.",
    "bookingFixedLabel": "Le lien accordeur-attitré",
    "bookingFixedDesc": "Un client a une relation privilégiée avec un accordeur spécifique ? Envoyez-lui un lien personnel. Le système donne la priorité à cet accordeur, sauf s'il est complet pendant des semaines — dans ce cas, des collègues sont proposés en alternative.",
    "summary": "Avec PianoPlanner Teams, vous minimisez les temps de trajet, éliminez les erreurs de planification et offrez une expérience ultra-professionnelle à vos clients comme à vos employés. Le système prend en charge la logistique complexe pour que vous puissiez vous concentrer sur la croissance de votre entreprise.",
    "ctaTry": "Essayer gratuitement",
    "ctaPricing": "Voir les tarifs"
  },
  "api": {
    "auth": {
      "notLoggedIn": "Non connecté",
      "emailPasswordRequired": "L'e-mail et le mot de passe sont obligatoires",
      "invalidEmailFormat": "Format d'e-mail invalide",
      "registrationFailed": "Échec de l'inscription",
      "sessionError": "Erreur de session",
      "loginFailed": "Échec de la connexion",
      "emailRequired": "L'e-mail est obligatoire",
      "errorOccurred": "Une erreur s'est produite",
      "tokenMissing": "Token manquant",
      "tokenVerificationFailed": "Impossible de vérifier le token",
      "tokenPasswordRequired": "Le token et le mot de passe sont obligatoires",
      "passwordMinLength": "Le mot de passe doit comporter au moins 8 caractères",
      "passwordResetFailed": "Impossible de réinitialiser le mot de passe",
      "usernamePasswordRequired": "Le nom d'utilisateur et le mot de passe sont obligatoires",
      "invalidCredentials": "Nom d'utilisateur ou mot de passe invalide",
      "noChanges": "Aucune modification fournie",
      "newPasswordRequired": "Le nouveau mot de passe est obligatoire",
      "passwordsDoNotMatch": "Les mots de passe ne correspondent pas",
      "currentNewPasswordRequired": "Le mot de passe actuel et le nouveau sont obligatoires",
      "newPasswordsDoNotMatch": "Les nouveaux mots de passe ne correspondent pas",
      "userNotFound": "Utilisateur non trouvé",
      "passwordRequired": "Le mot de passe est obligatoire",
      "verifyEmailTitle": "Vérifier l'email — PianoPlanner",
      "verifyEmailSent": "Vérifiez votre email pour activer votre compte.",
      "verifyEmailSubject": "Vérifiez votre adresse email",
      "emailVerified": "Email vérifié !",
      "emailVerifiedDesc": "Votre adresse email a été vérifiée. Vous pouvez maintenant vous connecter.",
      "alreadyVerified": "Déjà vérifié",
      "alreadyVerifiedDesc": "Votre adresse email est déjà vérifiée. Vous pouvez vous connecter.",
      "verificationExpired": "Lien expiré",
      "verificationExpiredDesc": "Ce lien de vérification a expiré. Entrez votre email pour en recevoir un nouveau.",
      "invalidToken": "Lien invalide",
      "invalidTokenDesc": "Ce lien de vérification est invalide ou a déjà été utilisé. Vous pouvez en demander un nouveau.",
      "resendVerification": "Renvoyer l'email de vérification",
      "verificationResent": "Email envoyé !",
      "verificationResentDesc": "Si cet email est enregistré, un nouveau lien de vérification a été envoyé. Vérifiez votre boîte de réception.",
      "goToLogin": "Aller à la connexion",
      "emailNotVerified": "Votre adresse email n'a pas encore été vérifiée.",
      "verificationSentBtn": "Vérification envoyée !"
    },
    "subscription": {
      "checkFailed": "Impossible de vérifier l'abonnement",
      "featureCheckFailed": "Impossible de vérifier la fonctionnalité",
      "limitCheckFailed": "Impossible de vérifier la limite",
      "cancelled": "Abonnement annulé",
      "planChanged": "Plan modifié"
    },
    "email": {
      "quotaCheckFailed": "Échec de la vérification du quota",
      "noAddress": "Aucune adresse e-mail fournie",
      "settingsUpdated": "Paramètres e-mail mis à jour",
      "notConfigured": "E-mail non configuré",
      "confirmationSent": "E-mail de confirmation envoyé",
      "reminderSent": "E-mail de rappel envoyé",
      "customerIdRequired": "customerId est obligatoire",
      "invitationSent": "Invitation envoyée",
      "customerPianoIdRequired": "customerId et pianoId sont obligatoires",
      "logLoadFailed": "Impossible de charger le journal des e-mails",
      "noneSelected": "Aucun e-mail sélectionné",
      "invalidIds": "IDs invalides",
      "deleteFailed": "Impossible de supprimer les e-mails"
    },
    "appointments": {
      "notFound": "Rendez-vous non trouvé",
      "loadFailed": "Impossible de charger les rendez-vous",
      "noneFound": "Aucun rendez-vous trouvé",
      "duplicateDetectionFailed": "Impossible de détecter les doublons",
      "noDuplicatesFound": "Aucun doublon trouvé",
      "cleanupFailed": "Échec du nettoyage",
      "noBrokenFound": "Aucun rendez-vous défectueux trouvé",
      "pendingLoadFailed": "Impossible de charger les rendez-vous en attente",
      "paymentLoadFailed": "Impossible de charger les paiements en attente",
      "missingAddressesLoadFailed": "Impossible de charger les adresses manquantes",
      "titleRequired": "Le titre est obligatoire",
      "startEndTimeRequired": "L'heure de début et de fin sont obligatoires",
      "createFailed": "Impossible de créer le rendez-vous",
      "updateFailed": "Impossible de mettre à jour le rendez-vous",
      "deleteFailed": "Impossible de supprimer le rendez-vous",
      "completeFailed": "Impossible de terminer le rendez-vous",
      "cancelFailed": "Impossible d'annuler le rendez-vous",
      "statsLoadFailed": "Impossible de charger les statistiques",
      "dateRequired": "La date est obligatoire",
      "routeOptimizationFailed": "Impossible d'optimiser l'itinéraire",
      "noScheduleProvided": "Aucun planning fourni",
      "routeApplyFailed": "Impossible d'appliquer l'itinéraire optimisé",
      "duplicateRemovalFailed": "Impossible de supprimer les doublons",
      "workshopStatsLoadFailed": "Impossible de charger les statistiques de l'atelier",
      "paymentMarkedAsPaid": "Paiement marqué comme payé",
      "paymentMarkFailed": "Impossible de marquer le paiement",
      "markedAsCompleted": "Rendez-vous marqué comme terminé",
      "taskCompleteFailed": "Impossible de terminer la tâche",
      "timeSlotOverlap": "Ce créneau chevauche un rendez-vous existant : \"{conflictWith}\". Veuillez choisir un autre moment.",
      "bulkNoIds": "Aucun ID de rendez-vous fourni",
      "bulkTooMany": "Maximum 200 rendez-vous à la fois",
      "bulkCompleteFailed": "Échec de la complétion en masse"
    },
    "customers": {
      "noEmail": "Le client n'a pas d'adresse e-mail",
      "notFound": "Client non trouvé",
      "loadFailed": "Impossible de charger les clients",
      "namesLoadFailed": "Impossible de charger les noms des clients",
      "searchFailed": "Échec de la recherche",
      "duplicatesLoadFailed": "Impossible de charger les doublons",
      "targetSourceIdRequired": "L'ID cible et source sont obligatoires",
      "mergeFailed": "Échec de la fusion",
      "targetSourceIdsRequired": "L'ID cible et les IDs source sont obligatoires",
      "notesCleanFailed": "Impossible de nettoyer les notes",
      "mapDataLoadFailed": "Impossible de charger les données de la carte",
      "geocodingFailed": "Échec du géocodage",
      "nameRequired": "Le nom est obligatoire",
      "createFailed": "Impossible de créer le client",
      "updateFailed": "Impossible de mettre à jour le client",
      "deleted": "Client supprimé",
      "deleteFailed": "Impossible de supprimer le client",
      "tokenRegenFailed": "Impossible de régénérer le token",
      "locationRequired": "Saisissez un lieu, un code postal ou une adresse",
      "locationNotFound": "Lieu non trouvé. Essayez un autre nom de lieu ou code postal.",
      "noneWithInterval": "Aucun client avec intervalle d'accordage trouvé",
      "selectAtLeastOne": "Sélectionnez au moins un client",
      "maxInvitationsExceeded": "Maximum 20 invitations à la fois",
      "invitationsSendFailed": "Échec de l'envoi des invitations",
      "noAddress": "Le client n'a pas d'adresse",
      "geocodeFailed": "Impossible de géocoder l'adresse",
      "notesLoadFailed": "Impossible de charger les notes",
      "noteRequired": "La note est obligatoire",
      "noteSaveFailed": "Impossible d'enregistrer la note",
      "noteDeleteFailed": "Impossible de supprimer la note"
    },
    "pianos": {
      "notFound": "Piano non trouvé",
      "loadFailed": "Impossible de charger les pianos",
      "invitationStatusLoadFailed": "Impossible de charger le statut de l'invitation",
      "servicesLoadFailed": "Impossible de charger les services",
      "brandRequired": "La marque est obligatoire",
      "createFailed": "Impossible de créer le piano",
      "idsArrayRequired": "Le tableau pianoIds est obligatoire",
      "updatesObjectRequired": "L'objet updates est obligatoire",
      "noValidFieldsToUpdate": "Aucun champ valide à mettre à jour",
      "updateFailed": "Impossible de mettre à jour le piano",
      "deleteFailed": "Impossible de supprimer le piano",
      "serviceAddFailed": "Impossible d'ajouter le service",
      "serviceRecordNotFound": "Enregistrement de service non trouvé",
      "serviceDeleteFailed": "Impossible de supprimer le service",
      "photoDeleted": "Photo supprimée"
    },
    "calendar": {
      "tokenCheckFailed": "Impossible de vérifier les tokens",
      "loadFailed": "Impossible de charger les calendriers",
      "eventsLoadFailed": "Impossible de charger les événements",
      "requiredFieldsMissing": "Le titre, le début et la fin sont obligatoires",
      "eventCreateFailed": "Impossible de créer l'événement",
      "eventDeleteFailed": "Impossible de supprimer l'événement",
      "syncSettingsLoadFailed": "Impossible de charger les paramètres de synchronisation",
      "syncSettingsSaveFailed": "Impossible d'enregistrer les paramètres de synchronisation",
      "disconnectFailed": "Impossible de se déconnecter",
      "syncStatusLoadFailed": "Impossible de charger le statut de synchronisation",
      "syncNotEnabled": "La synchronisation n'est pas activée",
      "syncFailed": "Échec de la synchronisation",
      "syncDisabledByAdmin": "La synchronisation du calendrier est temporairement désactivée par l'administrateur",
      "importFailed": "Échec de l'importation",
      "sessionExpired": "Session Google expirée",
      "previewFailed": "Échec de l'aperçu",
      "forceSyncFailed": "Échec de la synchronisation forcée",
      "statusLoadFailed": "Impossible de charger le statut",
      "notConnected": "Calendrier non connecté",
      "urlRequired": "L'URL du calendrier est obligatoire",
      "invalidUrl": "URL de calendrier invalide",
      "eventUrlRequired": "L'URL de l'événement est obligatoire",
      "noneSelected": "Aucun calendrier sélectionné",
      "invalidUrlInSettings": "URL de calendrier invalide dans les paramètres",
      "syncQueueLoadFailed": "Impossible de charger la file de synchronisation",
      "syncVerifyFailed": "Impossible de vérifier la synchronisation",
      "orphanedEventsFindFailed": "Impossible de trouver les événements orphelins",
      "missingSyncsFindFailed": "Impossible de trouver les synchronisations manquantes"
    },
    "settings": {
      "loadFailed": "Impossible de charger les paramètres",
      "saveFailed": "Impossible d'enregistrer les paramètres",
      "noVatNumber": "Aucun numéro de TVA fourni",
      "vatValidationFailed": "Impossible de valider le numéro de TVA",
      "vatInfoLoadFailed": "Impossible de charger les informations TVA",
      "servicesLoadFailed": "Impossible de charger les services",
      "serviceNotFound": "Service non trouvé",
      "serviceLoadFailed": "Impossible de charger le service",
      "nameRequired": "Le nom est obligatoire",
      "serviceCreateFailed": "Impossible de créer le service",
      "serviceUpdateFailed": "Impossible de mettre à jour le service",
      "serviceDeleteFailed": "Impossible de supprimer le service",
      "serviceActivateFailed": "Impossible d'activer le service",
      "bookingSettingsLoadFailed": "Impossible de charger les paramètres de réservation",
      "bookingSettingsSaveFailed": "Impossible d'enregistrer les paramètres de réservation",
      "travelSettingsLoadFailed": "Impossible de charger les paramètres de déplacement",
      "travelSettingsSaveFailed": "Impossible d'enregistrer les paramètres de déplacement",
      "analysisFailed": "Impossible d'analyser la base clients",
      "languageNotSupported": "Langue non prise en charge",
      "languageSaveFailed": "Impossible d'enregistrer le paramètre de langue",
      "confirmationTextIncorrect": "Le texte de confirmation est incorrect",
      "resetFailed": "Impossible de réinitialiser les données",
      "accountDeleted": "Compte supprimé avec succès",
      "accountDeleteFailed": "Impossible de supprimer le compte",
      "exportFailed": "Impossible d'exporter les données",
      "previewLoadFailed": "Impossible de charger l'aperçu",
      "testSendFailed": "Impossible d'envoyer le test",
      "testReminderFailed": "Impossible d'envoyer le rappel de test",
      "historyLoadFailed": "Impossible de charger l'historique",
      "upcomingRemindersLoadFailed": "Impossible de charger les rappels à venir"
    },
    "notification": {
      "invalidSubscription": "Abonnement invalide",
      "subscriptionSaveFailed": "Échec de l'enregistrement de l'abonnement",
      "unsubscribeFailed": "Échec de la désinscription",
      "settingsUpdateFailed": "Échec de la mise à jour des paramètres",
      "settingsGetFailed": "Échec de la récupération des paramètres",
      "testSent": "Notification de test envoyée",
      "sendFailed": "Impossible d'envoyer la notification",
      "testSendFailed": "Échec de l'envoi de la notification de test",
      "testReminderSent": "Rappel de test envoyé à votre propre adresse e-mail"
    },
    "mileage": {
      "vehicleLoadFailed": "Impossible de charger le véhicule",
      "vehicleSaveFailed": "Impossible d'enregistrer le véhicule",
      "loadFailed": "Impossible de charger le kilométrage",
      "dateAndMileageRequired": "La date et le kilométrage sont obligatoires",
      "invalidMileage": "Kilométrage invalide",
      "saveFailed": "Impossible d'enregistrer",
      "notFound": "Non trouvé",
      "deleteFailed": "Impossible de supprimer",
      "tripsLoadFailed": "Impossible de charger les trajets",
      "dateAndDistanceRequired": "La date et la distance sont obligatoires",
      "updateFailed": "Impossible de mettre à jour",
      "noChanges": "Aucune modification fournie",
      "adjustFailed": "Impossible d'ajuster le kilométrage",
      "auditLogLoadFailed": "Impossible de charger le journal d'audit",
      "reportGenerationFailed": "Impossible de générer le rapport kilométrique",
      "summaryLoadFailed": "Impossible de charger le résumé du kilométrage",
      "travelTimeCalculationFailed": "Impossible de calculer les temps de trajet"
    },
    "booking": {
      "linkInvalid": "Lien de réservation invalide",
      "dataLoadFailed": "Impossible de charger les données de réservation",
      "serviceDateTimeRequired": "Le service, la date et l'heure sont obligatoires",
      "invalidService": "Service invalide",
      "invalidPianoSelection": "Sélection de piano invalide",
      "syncProblem": "Impossible de créer le rendez-vous en raison d'un problème de synchronisation. Veuillez réessayer.",
      "createFailed": "Impossible de créer le rendez-vous",
      "serviceRequired": "Le service est obligatoire",
      "suggestionGenerationFailed": "Erreur lors de la génération des suggestions",
      "serviceIdRequired": "L'ID du service est obligatoire",
      "availableDaysLoadFailed": "Impossible de charger les jours disponibles",
      "dateServiceIdRequired": "La date et l'ID du service sont obligatoires",
      "availableTimesLoadFailed": "Impossible de charger les horaires disponibles",
      "firstAvailableTimeLoadFailed": "Impossible de charger la première heure disponible",
      "placeIdRequired": "L'ID du lieu est obligatoire",
      "addressDataLoadFailed": "Impossible de charger les données d'adresse",
      "unauthorized": "Non autorisé",
      "leadsFetchFailed": "Impossible de récupérer les prospects",
      "invalidStatus": "Statut invalide",
      "leadUpdateFailed": "Impossible de mettre à jour le prospect",
      "pageNotFound": "Page de réservation non trouvée",
      "pageNotAvailable": "Page de réservation non disponible",
      "errorOccurred": "Une erreur s'est produite",
      "dateServiceRequired": "La date et le service sont obligatoires",
      "notFound": "Non trouvé",
      "notAvailable": "Non disponible",
      "serviceNotFound": "Service non trouvé",
      "dateTooEarly": "La date est trop tôt",
      "dateTooFar": "La date est trop éloignée dans le futur",
      "closedOnThisDay": "Fermé ce jour-là",
      "timeSlotsLoadError": "Erreur lors du chargement des créneaux horaires",
      "allFieldsRequired": "Tous les champs sont obligatoires",
      "nameRequired": "Le nom est obligatoire",
      "emailRequired": "L'e-mail est obligatoire",
      "phoneRequired": "Le téléphone est obligatoire",
      "noLink": "Le client n'a pas de lien de réservation. Générez d'abord un lien.",
      "slotLockedByOther": "Ce créneau est actuellement réservé par quelqu'un d'autre. Veuillez réessayer.",
      "slotTakenByAppointment": "Ce créneau est déjà occupé par un autre rendez-vous. Veuillez choisir un autre moment.",
      "slotTakenByCalendar": "Ce créneau est occupé dans votre calendrier externe. Veuillez choisir un autre moment.",
      "slotNoLongerAvailable": "Ce créneau n'est plus disponible. Veuillez choisir un autre moment.",
      "noAvailableTimesInPeriod": "Aucun créneau disponible trouvé dans la période à venir",
      "noAvailableTimesFound": "Aucun créneau disponible trouvé",
      "noAvailableTimes": "Aucun créneau disponible",
      "notAWorkday": "Pas un jour ouvrable",
      "invalidRescheduleLink": "Lien de replanification invalide ou expiré",
      "appointmentAlreadyPassed": "Ce rendez-vous est déjà passé et ne peut plus être replanifié",
      "rescheduleMinimum24h": "Le report n'est possible que jusqu'à 24 heures avant le rendez-vous",
      "somethingWentWrong": "Quelque chose s'est mal passé",
      "followsPreviousNearby": "Suit le rendez-vous précédent à proximité",
      "firstSlotOfDay": "Premier créneau de la journée",
      "appointmentAlreadyExists": "Ce rendez-vous existe déjà",
      "bookingError": "Une erreur est survenue lors de la réservation",
      "contactForFarLocations": "Pour les emplacements plus éloignés, veuillez nous contacter directement pour planifier un rendez-vous.",
      "missingFields": "Service, date et heure sont requis",
      "success": "Rendez-vous réservé avec succès !",
      "multiPianoSuccess": "Rendez-vous réservés avec succès !",
      "optimalTimesFound": "Horaires optimaux trouvés",
      "sameLocationAsPrevious": "Même lieu que le rendez-vous précédent",
      "shortestTravelTime": "Temps de trajet le plus court",
      "timesAvailable": "Horaires disponibles",
      "arrivalTimesNote": "Les horaires affichés sont les heures d'arrivée chez vous",
      "createdViaOnlineBooking": "Créé via la réservation en ligne",
      "firstAvailable": "Premier créneau disponible",
      "rescheduleSuccess": "Rendez-vous reprogrammé avec succès",
      "rescheduleError": "Une erreur est survenue lors de la reprogrammation",
      "dateTimeRequired": "La date et l'heure sont requises",
      "appointmentNotFound": "Rendez-vous non trouvé"
    },
    "accounting": {
      "noInvoicesToSync": "Aucune facture à synchroniser",
      "jorttApiError": "Erreur de l'API Jortt",
      "noCustomersToSync": "Aucun client à synchroniser",
      "noOutstandingInvoices": "Aucune facture synchronisée en attente trouvée",
      "requestReceived": "Demande reçue",
      "dbNameNotUrl": "Le nom de la base de données ne doit pas être une URL. Entrez le nom de la base de données Odoo (ex. \"mon-entreprise-main-12345\"), pas l'URL du site.",
      "eboekhoudenAuthFailed": "Échec de l'authentification e-Boekhouden. Vérifiez votre jeton API.",
      "eboekhoudenConnected": "Connexion réussie à e-Boekhouden"
    },
    "team": {
      "loadFailed": "Impossible de charger les équipes",
      "nameRequired": "Le nom de l'équipe est obligatoire",
      "createFailed": "Impossible de créer l'équipe",
      "accessDenied": "Accès refusé",
      "updateFailed": "Impossible de mettre à jour l'équipe",
      "noFileUploaded": "Aucun fichier téléchargé",
      "logoUploadFailed": "Impossible de télécharger le logo",
      "logoDeleteFailed": "Impossible de supprimer le logo",
      "bookingEnableFailed": "Impossible d'activer la réservation d'équipe",
      "bookingDisableFailed": "Impossible de désactiver la réservation d'équipe",
      "membersLoadFailed": "Impossible de charger les membres de l'équipe",
      "nameEmailRequired": "Le nom et l'e-mail sont obligatoires",
      "memberLimitExceeded": "Limite de membres d'équipe atteinte",
      "memberAddFailed": "Impossible d'ajouter le membre de l'équipe",
      "memberNotFound": "Membre non trouvé",
      "memberUpdateFailed": "Impossible de mettre à jour le membre de l'équipe",
      "memberRemoveFailed": "Impossible de supprimer le membre de l'équipe",
      "paramsRequired": "Les paramètres de début et de fin sont obligatoires",
      "calendarLoadFailed": "Impossible de charger le calendrier de l'équipe",
      "appointmentAssignFailed": "Impossible d'assigner le rendez-vous",
      "unassignedLoadFailed": "Impossible de charger les rendez-vous non assignés",
      "suggestionsFailed": "Impossible d'obtenir les suggestions",
      "selectAtLeastOneCustomer": "Sélectionnez au moins un client",
      "maxInvitationsExceeded": "Maximum 50 invitations à la fois",
      "bookingNotEnabled": "La réservation d'équipe n'est pas activée",
      "noCustomersFound": "Aucun client trouvé",
      "invitationsSendFailed": "Impossible d'envoyer les invitations",
      "absencesLoadFailed": "Impossible de charger les absences",
      "datesRequired": "Les dates de début et de fin sont obligatoires",
      "endAfterStart": "La date de fin doit être postérieure à la date de début",
      "absenceAddFailed": "Impossible d'ajouter l'absence",
      "absenceDeleteFailed": "Impossible de supprimer l'absence",
      "memberNoEmail": "Ce membre de l'équipe n'a pas d'adresse e-mail",
      "magicLinkSent": "Lien magique envoyé avec succès",
      "linkGenerationFailed": "Erreur lors de la génération du lien",
      "requiredParamsMissing": "Paramètres obligatoires manquants",
      "smartMatchesFailed": "Impossible de générer les correspondances intelligentes",
      "notFound": "Équipe non trouvée",
      "notFoundOrDisabled": "Équipe non trouvée ou réservation désactivée",
      "ownerNotFound": "Propriétaire de l'équipe non trouvé",
      "serviceNotFound": "Service non trouvé",
      "noSlotsInComingWeeks": "Aucun créneau disponible trouvé dans les semaines à venir",
      "noAvailableSlotsOnDate": "Aucun créneau disponible à cette date",
      "noAvailableMembers": "Aucun membre de l'équipe disponible pour cette réservation",
      "slotNoLongerAvailable": "Ce créneau vient d'être réservé. Veuillez sélectionner un autre créneau.",
      "appointmentAlreadyExists": "Ce rendez-vous existe déjà",
      "appointmentBooked": "Rendez-vous réservé avec succès",
      "memberNotFoundOrInactive": "Membre non trouvé ou inactif",
      "failedToLoadInfo": "Impossible de charger les informations de l'équipe. Veuillez réessayer plus tard.",
      "failedToCreateBooking": "Impossible de créer la réservation. Veuillez réessayer plus tard.",
      "failedToGetSlots": "Impossible d'obtenir les créneaux disponibles. Veuillez réessayer plus tard.",
      "failedToFindSlots": "Impossible de trouver des créneaux disponibles.",
      "tooManyRequests": "Trop de requêtes. Veuillez patienter un moment.",
      "startDateRequired": "startDate est obligatoire",
      "bookingLinkDisabled": "Ce lien de réservation n'existe pas ou a été désactivé.",
      "notAcceptingBookings": "Cette équipe n'accepte actuellement pas de réservations.",
      "missingRequiredFields": "Champs obligatoires manquants",
      "bookingFieldsRequired": "Membre, créneau, service, nom et e-mail sont obligatoires.",
      "failedToGetPianos": "Impossible de récupérer les pianos",
      "dateServiceRequired": "La date et le service sont obligatoires",
      "monthServiceRequired": "Le mois et l'ID du service sont obligatoires",
      "serverError": "Erreur serveur"
    },
    "smtp": {
      "settingsSaved": "Paramètres SMTP enregistrés",
      "notConfigured": "Aucun paramètre SMTP trouvé",
      "diagnosisFailed": "Échec du diagnostic",
      "settingsDeleted": "Paramètres SMTP supprimés",
      "connectionFailed": "Connexion impossible",
      "invalidCredentials": "Identifiants invalides. Conseils :\n• Utilisez votre adresse e-mail complète comme nom d'utilisateur\n• Utilisez un mot de passe d'application (PAS votre mot de passe habituel)\n• Copiez le mot de passe SANS espaces (16 caractères)\n• Assurez-vous que l'authentification à 2 facteurs est ACTIVÉE",
      "connectionRefused": "Connexion refusée. Le port SMTP est probablement bloqué sur le serveur. Contactez le support.",
      "sslError": "Problème de certificat SSL/TLS. Essayez un autre port.",
      "connectionTimeout": "Délai de connexion dépassé — le port SMTP est probablement bloqué sur le serveur. Astuce Gmail : nous avons automatiquement essayé le port 465 (SSL). Contactez le support si cela ne fonctionne pas.",
      "serverNotFound": "Serveur SMTP introuvable. Vérifiez le nom d'hôte.",
      "authFailed": "Authentification échouée. Vérifiez :\n• Mot de passe d'application sans espaces\n• 2FA doit être activée\n• Adresse e-mail correcte comme nom d'utilisateur"
    },
    "inventory": {
      "pianoMarkedAsSold": "Piano marqué comme vendu",
      "subtaskUpdated": "Sous-tâche mise à jour",
      "fetchShowroomPianosFailed": "Impossible de récupérer les pianos du showroom",
      "brandRequired": "La marque est obligatoire",
      "addPianoFailed": "Impossible d'ajouter le piano",
      "customerIdRequired": "L'ID client est obligatoire",
      "showroomPianoNotFound": "Piano du showroom introuvable",
      "customerNotFound": "Client introuvable",
      "markAsSoldFailed": "Impossible de marquer le piano comme vendu",
      "locationRequired": "L'emplacement est obligatoire",
      "startEndTimeRequired": "Les heures de début et de fin sont obligatoires",
      "selectAtLeastOnePiano": "Sélectionnez au moins un piano",
      "batchCreated": "Rendez-vous par lot créé",
      "createBatchFailed": "Impossible de créer le rendez-vous par lot",
      "batchNotFound": "Rendez-vous par lot introuvable",
      "fetchBatchFailed": "Impossible de récupérer le rendez-vous par lot",
      "invalidStatus": "Statut invalide",
      "noUpdatesProvided": "Aucune mise à jour fournie",
      "subtaskNotFound": "Sous-tâche introuvable",
      "updateSubtaskFailed": "Impossible de mettre à jour la sous-tâche",
      "noCsvFileReceived": "Aucun fichier CSV reçu",
      "csvFileEmpty": "Le fichier CSV est vide",
      "requiredColumnMissing": "La colonne requise \"Marque\" (ou \"Brand\") est manquante dans les en-têtes CSV",
      "importFailed": "Échec de l'import"
    },
    "upload": {
      "logoDeleted": "Logo supprimé"
    },
    "support": {
      "requestSubmitted": "Demande de support soumise"
    },
    "onboarding": {
      "welcome": "Bienvenue sur PianoPlanner !",
      "statusFailed": "Impossible de récupérer le statut d'intégration",
      "companyLoadFailed": "Impossible de récupérer les données de l'entreprise",
      "servicesLoadFailed": "Impossible de récupérer les services",
      "nameAndDurationRequired": "Le nom et la durée sont obligatoires",
      "serviceCreateFailed": "Impossible de créer le service",
      "serviceNotFound": "Service introuvable",
      "serviceUpdateFailed": "Impossible de mettre à jour le service",
      "serviceDeleteFailed": "Impossible de supprimer le service",
      "settingsLoadFailed": "Impossible de récupérer les paramètres",
      "settingsSaveFailed": "Impossible d'enregistrer les paramètres"
    },
    "admin": {
      "noRights": "Pas de droits administrateur",
      "notConfigured": "La connexion administrateur n'est pas configurée",
      "cannotDeleteSelf": "Les administrateurs ne peuvent pas supprimer leur propre compte",
      "settingsLoadFailed": "Impossible de charger les paramètres",
      "invalidSetting": "Paramètre invalide",
      "settingSaveFailed": "Impossible d'enregistrer le paramètre",
      "statsLoadFailed": "Impossible de charger les statistiques",
      "noBrokenAppointments": "Aucun rendez-vous défectueux trouvé",
      "cleanupFailed": "Échec du nettoyage",
      "dashboardStatsLoadFailed": "Impossible de charger les statistiques du tableau de bord",
      "signupTrendLoadFailed": "Impossible de charger la tendance des inscriptions",
      "auditLogsLoadFailed": "Impossible de charger les journaux d'audit",
      "securityAlertsLoadFailed": "Impossible de charger les alertes de sécurité",
      "errorLogsLoadFailed": "Impossible de charger les journaux d'erreurs",
      "errorStatsLoadFailed": "Impossible de charger les statistiques d'erreurs",
      "errorResolveFailed": "Impossible de résoudre l'erreur",
      "announcementCreateFailed": "Impossible de créer l'annonce",
      "announcementUpdateFailed": "Impossible de mettre à jour l'annonce",
      "announcementNotFound": "Annonce non trouvée",
      "announcementToggleFailed": "Impossible de basculer l'annonce",
      "announcementDeleteFailed": "Impossible de supprimer l'annonce",
      "defaultTemplatesLoadFailed": "Impossible de charger les modèles par défaut",
      "invalidSection": "Section invalide",
      "defaultsSaveFailed": "Impossible d'enregistrer les valeurs par défaut",
      "defaultsUpdateFailed": "Impossible de mettre à jour les modèles par défaut",
      "defaultsResetFailed": "Impossible de réinitialiser les modèles par défaut",
      "backupStatusFailed": "Impossible d'obtenir le statut de sauvegarde",
      "backupKeyRequired": "La clé de sauvegarde est obligatoire",
      "invalidBackupKey": "Clé de sauvegarde invalide",
      "backupDownloadFailed": "Impossible de télécharger la sauvegarde",
      "logoLoadFailed": "Impossible de charger le logo",
      "noFileUploaded": "Aucun fichier téléchargé",
      "uploadFailed": "Échec du téléchargement",
      "logoDeleted": "Logo de la plateforme supprimé",
      "logoDeleteFailed": "Impossible de supprimer le logo",
      "logoNotFound": "Logo non trouvé",
      "invoiceQueueLoadFailed": "Impossible de charger la file d'attente des factures",
      "invalidQueueStatus": "Statut invalide",
      "queueItemNotFound": "Élément de file d'attente non trouvé",
      "queueItemUpdateFailed": "Impossible de mettre à jour l'élément de la file d'attente",
      "emailLogsLoadFailed": "Impossible de charger les journaux des e-mails",
      "emailLogNotFound": "Journal d'e-mail non trouvé",
      "onlyFailedCanBeResent": "Seuls les e-mails échoués peuvent être renvoyés",
      "alreadyInRetryQueue": "L'e-mail est déjà dans la file de réessai",
      "emailRequeued": "E-mail remis en file d'attente",
      "emailRequeueFailed": "Impossible de remettre l'e-mail en file d'attente",
      "emailLogDeleted": "Journal d'e-mail supprimé",
      "cacheCleared": "Cache vidé",
      "queueProcessed": "File d'attente traitée",
      "itemRemovedFromQueue": "Élément supprimé de la file d'attente",
      "testReportSent": "Rapport de test envoyé",
      "usersLoadFailed": "Impossible de charger les utilisateurs",
      "pendingUsersLoadFailed": "Impossible de charger les utilisateurs en attente",
      "userApproved": "Utilisateur approuvé",
      "userApproveFailed": "Impossible d'approuver l'utilisateur",
      "userNotFound": "Utilisateur non trouvé",
      "welcomeEmailSent": "E-mail de bienvenue envoyé",
      "welcomeEmailSendFailed": "Impossible d'envoyer l'e-mail de bienvenue",
      "userRejected": "Utilisateur rejeté",
      "userRejectFailed": "Impossible de rejeter l'utilisateur",
      "invalidTier": "Niveau invalide",
      "tierChangeFailed": "Impossible de changer le niveau",
      "userDeleted": "Utilisateur supprimé",
      "userDeleteFailed": "Impossible de supprimer l'utilisateur",
      "planRequired": "Le plan est obligatoire",
      "planSet": "Plan défini",
      "planSetFailed": "Impossible de définir le plan",
      "emailPasswordRequired": "L'e-mail et le mot de passe sont obligatoires",
      "userEmailExists": "Un utilisateur avec cette adresse e-mail existe déjà",
      "userCreated": "Utilisateur créé",
      "userCreateFailed": "Impossible de créer l'utilisateur",
      "anotherUserEmailExists": "Un autre utilisateur avec cette adresse e-mail existe déjà",
      "userUpdated": "Utilisateur mis à jour",
      "userUpdateFailed": "Impossible de mettre à jour l'utilisateur",
      "userLoadFailed": "Impossible de charger l'utilisateur",
      "userDetailsLoadFailed": "Impossible de charger les détails de l'utilisateur",
      "bookingSlugRequired": "Le slug de réservation est obligatoire",
      "slugMinLength": "Le slug doit comporter au moins 3 caractères",
      "slugInUse": "Ce slug est déjà utilisé",
      "bookingSlugUpdateFailed": "Impossible de mettre à jour le slug de réservation",
      "impersonateFailed": "Impossible de se connecter en tant qu'utilisateur",
      "notImpersonating": "Non connecté en tant qu'autre utilisateur",
      "impersonationStopFailed": "Impossible d'arrêter l'imitation",
      "noUsersSpecified": "Aucun utilisateur spécifié",
      "bulkDeleteFailed": "Échec de la suppression en masse",
      "bulkPlanSetFailed": "Échec de la définition du plan en masse",
      "notificationsSendFailed": "Impossible d'envoyer les notifications"
    },
    "common": {
      "serverError": "Erreur serveur",
      "placeIdRequired": "L'ID du lieu est obligatoire",
      "failed": "Échoué"
    },
    "teamBooking": {
      "teamNotFound": "Équipe non trouvée",
      "teamNotFoundOrDisabled": "Équipe non trouvée ou réservation désactivée",
      "bookingLinkNotFound": "Ce lien de réservation n'existe pas ou a été désactivé.",
      "placeIdRequired": "L'identifiant du lieu est requis",
      "failed": "Échoué",
      "serviceIdRequired": "L'identifiant du service est requis",
      "monthServiceIdRequired": "Le mois et l'identifiant du service sont requis",
      "missingFields": "Champs obligatoires manquants",
      "dateServiceRequired": "La date et le service sont requis.",
      "bookingFieldsRequired": "Membre, créneau, service, nom et e-mail sont requis.",
      "tooManyRequests": "Trop de requêtes. Veuillez patienter un instant.",
      "startDateRequired": "La date de début est requise",
      "outOfZone": "Malheureusement, cette adresse se trouve en dehors de notre zone de service."
    },
    "portal": {
      "rateLimitExceeded": "Trop de tentatives. Veuillez réessayer dans une minute.",
      "fetchScheduleFailed": "Impossible de récupérer le planning.",
      "fetchWeekScheduleFailed": "Impossible de récupérer le planning hebdomadaire.",
      "invalidStatus": "Statut invalide.",
      "appointmentNotFound": "Rendez-vous introuvable.",
      "updateStatusFailed": "Impossible de mettre à jour le statut.",
      "noteRequired": "La note est obligatoire.",
      "saveNoteFailed": "Impossible d'enregistrer la note.",
      "fetchHistoryFailed": "Impossible de charger l'historique.",
      "profileNotFound": "Profil introuvable.",
      "fetchProfileFailed": "Impossible de récupérer le profil.",
      "completeAppointmentFailed": "Impossible de terminer le rendez-vous.",
      "batchAppointmentNotFound": "Rendez-vous par lot introuvable.",
      "pianoNotFoundInBatch": "Piano introuvable dans ce lot.",
      "fetchTasksFailed": "Impossible de récupérer les tâches.",
      "taskNotFound": "Tâche introuvable.",
      "invalidHours": "Nombre d'heures invalide.",
      "updateHoursFailed": "Impossible de mettre à jour les heures."
    },
    "uploads": {
      "noFileUploaded": "Aucun fichier téléchargé",
      "logoUploaded": "Logo téléchargé avec succès",
      "uploadFailed": "Échec du téléchargement",
      "logoDeleted": "Logo supprimé",
      "deleteFailed": "Échec de la suppression",
      "invalidFilename": "Nom de fichier invalide",
      "logoNotFound": "Logo introuvable"
    },
    "services": {
      "loadFailed": "Impossible de récupérer les services",
      "notFound": "Service introuvable",
      "loadOneFailed": "Impossible de récupérer le service",
      "nameAndDurationRequired": "Le nom et la durée sont obligatoires",
      "createFailed": "Impossible de créer le service",
      "updateFailed": "Impossible de mettre à jour le service",
      "deleteFailed": "Impossible de supprimer le service"
    }
  },
  "api.teamBooking.teamNotFound": "Équipe introuvable",
  "api.teamBooking.searchFailed": "Recherche échouée",
  "api.teamBooking.placeIdRequired": "placeId requis",
  "api.teamBooking.placeDetailsFailed": "Impossible de récupérer les détails du lieu",
  "api.teamBooking.customerNotFound": "Client introuvable",
  "api.teamBooking.pianosFailed": "Impossible de récupérer les pianos",
  "api.teamBooking.linkNotExist": "Ce lien de réservation n'existe pas ou a été désactivé.",
  "api.teamBooking.bookingDisabled": "Réservation désactivée",
  "api.teamBooking.notAcceptingBookings": "Cette équipe n'accepte pas de réservations actuellement.",
  "api.teamBooking.ownerNotFound": "Propriétaire introuvable",
  "api.teamBooking.ownerAccountNotFound": "Compte du propriétaire de l'équipe introuvable.",
  "api.teamBooking.loadInfoFailed": "Impossible de charger les informations de l'équipe. Veuillez réessayer plus tard.",
  "api.teamBooking.serviceIdRequired": "serviceId est requis",
  "api.teamBooking.teamNotFoundOrDisabled": "Équipe introuvable ou réservation désactivée",
  "api.teamBooking.serviceNotFound": "Service introuvable",
  "api.teamBooking.noSlotsInComingWeeks": "Aucun créneau disponible trouvé dans les semaines à venir.",
  "api.teamBooking.bestMatchFailed": "Erreur du serveur",
  "api.teamBooking.dateRequired": "Paramètre de date requis",
  "api.teamBooking.missingFields": "Champs obligatoires manquants",
  "api.teamBooking.dateServiceRequired": "La date et le service sont requis.",
  "api.teamBooking.noSlotsOnDate": "Aucun créneau disponible à cette date",
  "api.teamBooking.noAvailableMembers": "Aucun membre disponible",
  "api.teamBooking.noMembersAvailableMessage": "Aucun membre de l'équipe n'est disponible à cette date. Veuillez essayer une autre date.",
  "api.teamBooking.slotsFailed": "Impossible de récupérer les créneaux disponibles. Veuillez réessayer.",
  "api.teamBooking.slotNoLongerAvailable": "Créneau horaire plus disponible",
  "api.teamBooking.slotJustBooked": "Ce créneau vient d'être réservé par un autre client. Veuillez sélectionner un autre horaire.",
  "api.teamBooking.appointmentExists": "Ce rendez-vous existe déjà.",
  "api.teamBooking.bookedSuccessfully": "Rendez-vous réservé avec succès",
  "api.teamBooking.bookingFailed": "Impossible de créer la réservation. Veuillez réessayer.",
  "api.teamBooking.onlineBookingSource": "Réservation en ligne",
  "api.teamBooking.bookedViaTeam": "Réservé via la page d'équipe",
  "api.teamBooking.tooManyRequests": "Trop de requêtes. Veuillez patienter un moment.",
  "api.teamBooking.startDateRequired": "startDate est requis",
  "api.teamBooking.findSlotsFailed": "Impossible de trouver des créneaux disponibles.",
  "api.teamBooking.serverError": "Erreur du serveur",
  "api.teamBooking.memberNotFoundOrInactive": "Membre introuvable ou inactif",
  "api.auth.emailPasswordRequired": "E-mail et mot de passe sont requis",
  "api.auth.invalidEmailFormat": "Format d'e-mail invalide",
  "api.auth.accountCreatedCanLogin": "Votre compte a été créé ! Vous pouvez maintenant vous connecter.",
  "api.auth.accountCreatedAwaitApproval": "Votre compte a été créé ! Vous recevrez un message dès qu'un administrateur aura approuvé votre compte.",
  "api.auth.registrationFailed": "Échec de l'inscription",
  "api.auth.sessionError": "Erreur de session",
  "api.auth.loginSuccess": "Connexion réussie",
  "api.auth.loginFailed": "Échec de la connexion",
  "api.auth.emailRequired": "L'e-mail est requis",
  "api.auth.resetLinkSentIfKnown": "Si cette adresse e-mail est connue chez nous, vous recevrez un lien de réinitialisation.",
  "api.auth.errorOccurred": "Une erreur est survenue",
  "api.auth.tokenMissing": "Jeton manquant",
  "api.auth.tokenVerifyFailed": "Impossible de vérifier le jeton",
  "api.auth.tokenPasswordRequired": "Jeton et mot de passe sont requis",
  "api.auth.passwordMinLength": "Le mot de passe doit comporter au moins 8 caractères",
  "api.auth.passwordResetSuccess": "Mot de passe modifié avec succès. Vous pouvez maintenant vous connecter.",
  "api.auth.passwordResetFailed": "Impossible de réinitialiser le mot de passe",
  "api.auth.adminNotConfigured": "La connexion administrateur n'est pas configurée. Définissez ADMIN_USERNAME et ADMIN_PASSWORD comme variables d'environnement.",
  "api.auth.usernamePasswordRequired": "Nom d'utilisateur et mot de passe sont requis",
  "api.auth.loggedInAsAdmin": "Connecté en tant qu'administrateur",
  "api.auth.invalidCredentials": "Nom d'utilisateur ou mot de passe invalide",
  "api.auth.notLoggedIn": "Non connecté",
  "api.auth.noChangesSpecified": "Aucune modification spécifiée",
  "api.auth.profileUpdated": "Profil mis à jour",
  "api.auth.userNotFound": "Utilisateur introuvable",
  "api.auth.newPasswordRequired": "Le nouveau mot de passe est requis",
  "api.auth.passwordsDoNotMatch": "Les mots de passe ne correspondent pas",
  "api.auth.passwordSetCanLogin": "Mot de passe défini ! Vous pouvez maintenant aussi vous connecter avec e-mail et mot de passe.",
  "api.auth.currentAndNewPasswordRequired": "Le mot de passe actuel et le nouveau sont requis",
  "api.auth.newPasswordsDoNotMatch": "Les nouveaux mots de passe ne correspondent pas",
  "api.auth.passwordChanged": "Mot de passe modifié avec succès",
  "api.subscription.notLoggedIn": "Non connecté",
  "api.subscription.noActiveSubscription": "Aucun abonnement actif",
  "api.subscription.checkFailed": "Impossible de vérifier l'abonnement",
  "api.subscription.paidRequired": "Abonnement payant requis",
  "api.subscription.proRequired": "Abonnement Pro requis pour cette fonctionnalité",
  "api.subscription.businessRequired": "Abonnement Business requis pour le planificateur de projet d'atelier",
  "api.subscription.featureCheckFailed": "Impossible de vérifier la fonctionnalité",
  "api.subscription.customerLimitReached": "Limite de clients atteinte",
  "api.subscription.customerLimitMessage": "Vous avez {current} sur {limit} clients. Passez à Solo ou Pro pour des clients illimités.",
  "api.subscription.limitCheckFailed": "Impossible de vérifier la limite",
  "api.subscription.appointmentLimitReached": "Limite de rendez-vous atteinte",
  "api.subscription.appointmentLimitMessage": "Vous avez {current} sur {limit} rendez-vous cette année. Passez à Solo ou Pro pour des rendez-vous illimités.",
  "api.subscription.featureProOnly": "{feature} n'est disponible qu'avec un abonnement Pro",
  "api.mollie.paymentsNotConfigured": "Les paiements ne sont pas encore configurés",
  "api.mollie.statusFetchFailed": "Impossible de récupérer le statut",
  "api.mollie.invalidPlan": "Plan invalide. Choisissez solo, pro ou business.",
  "api.mollie.paymentStartFailed": "Impossible de démarrer le paiement",
  "api.mollie.noActiveSubscription": "Aucun abonnement actif trouvé",
  "api.mollie.subscriptionCancelled": "Abonnement annulé",
  "api.mollie.cancelFailed": "Impossible d'annuler l'abonnement",
  "api.mollie.invalidPlanSimple": "Plan invalide",
  "api.mollie.planChanged": "Plan modifié en {plan}",
  "api.mollie.changeFailed": "Impossible de modifier le plan",
  "api.mollie.firstPaymentDesc": "premier paiement",
  "api.stripe.invalidPlan": "Plan invalide. Choisissez solo, pro, teams ou business.",
  "api.stripe.createSessionFailed": "Impossible de créer la session de paiement",
  "api.stripe.noActiveSubscription": "Aucun abonnement Stripe actif trouvé",
  "api.stripe.subscriptionCancelled": "Abonnement annulé. Accès jusqu'à la fin de la période de facturation.",
  "api.stripe.cancelFailed": "Impossible d'annuler l'abonnement",
  "api.stripe.portalFailed": "Impossible d'ouvrir le portail de facturation",
  "api.stripe.statusFetchFailed": "Impossible de récupérer le statut de l'abonnement",
  "api.stripe.notConfigured": "Stripe n'est pas configuré",
  "api.customers.loadFailed": "Impossible de charger les clients",
  "api.customers.nameRequired": "Le nom est requis",
  "api.customers.createFailed": "Impossible de créer le client",
  "api.customers.notFound": "Client introuvable",
  "api.customers.updateFailed": "Impossible de mettre à jour le client",
  "api.customers.deleteFailed": "Impossible de supprimer le client",
  "api.customers.deleted": "Client supprimé",
  "api.customers.searchFailed": "Recherche échouée",
  "api.customers.importFailed": "Importation échouée",
  "api.customers.noFileUploaded": "Aucun fichier téléchargé",
  "api.customers.mergeFailed": "Impossible de fusionner les clients",
  "api.customers.merged": "Clients fusionnés avec succès",
  "api.pianos.loadFailed": "Impossible de charger les pianos",
  "api.pianos.brandRequired": "La marque est requise",
  "api.pianos.createFailed": "Impossible de créer le piano",
  "api.pianos.notFound": "Piano introuvable",
  "api.pianos.updateFailed": "Impossible de mettre à jour le piano",
  "api.pianos.deleteFailed": "Impossible de supprimer le piano",
  "api.pianos.deleted": "Piano supprimé",
  "api.common.notLoggedIn": "Non connecté",
  "api.common.userNotFound": "Utilisateur introuvable",
  "api.common.serverError": "Erreur du serveur",
  "api.common.invalidRequest": "Requête invalide",
  "api.common.accessDenied": "Accès refusé",
  "api.common.notFound": "Introuvable",
  "api.common.saveFailed": "Impossible d'enregistrer les modifications",
  "api.common.saved": "Modifications enregistrées",
  "api.settings.loadFailed": "Impossible de charger les paramètres",
  "api.settings.saveFailed": "Impossible d'enregistrer les paramètres",
  "api.settings.vatNoNumber": "Aucun numéro de TVA fourni",
  "api.settings.vatValidationFailed": "Impossible de valider le numéro de TVA",
  "api.settings.vatInfoFailed": "Impossible de charger les informations TVA",
  "api.settings.servicesLoadFailed": "Impossible de charger les services",
  "api.settings.serviceNotFound": "Service introuvable",
  "api.settings.serviceLoadFailed": "Impossible de charger le service",
  "api.settings.serviceNameRequired": "Le nom est obligatoire",
  "api.settings.serviceCreateFailed": "Impossible de créer le service",
  "api.settings.serviceUpdateFailed": "Impossible de mettre à jour le service",
  "api.settings.serviceDeleteFailed": "Impossible de supprimer le service",
  "api.settings.serviceActivateFailed": "Impossible d'activer le service",
  "api.settings.bookingLoadFailed": "Impossible de charger les paramètres de réservation",
  "api.settings.bookingSaveFailed": "Impossible d'enregistrer les paramètres de réservation",
  "api.settings.travelLoadFailed": "Impossible de charger les paramètres de déplacement",
  "api.settings.travelSaveFailed": "Impossible d'enregistrer les paramètres de déplacement",
  "api.settings.travelAnalyzeFailed": "Impossible d'analyser la base clients",
  "api.settings.languageNotSupported": "Langue non prise en charge",
  "api.settings.languageSaveFailed": "Impossible d'enregistrer le paramètre de langue",
  "api.settings.resetConfirmWrong": "Le texte de confirmation est incorrect",
  "api.settings.resetSuccess": "Toutes les données ont été supprimées. Vos paramètres et votre compte ont été conservés.",
  "api.settings.resetFailed": "Impossible de réinitialiser les données",
  "api.settings.deletePasswordRequired": "Le mot de passe est obligatoire",
  "api.settings.deleteAdminDenied": "Les administrateurs ne peuvent pas supprimer leur propre compte",
  "api.settings.deleteSuccess": "Compte supprimé avec succès",
  "api.settings.deleteFailed": "Impossible de supprimer le compte",
  "api.settings.syncStatusFailed": "Impossible de charger le statut de synchronisation",
  "api.settings.syncQueueFailed": "Impossible de charger la file de synchronisation",
  "api.settings.syncVerifyFailed": "Impossible de vérifier la synchronisation",
  "api.settings.syncOrphansFailed": "Impossible de trouver les événements orphelins",
  "api.settings.syncMissingFailed": "Impossible de trouver les synchronisations manquantes",
  "api.settings.exportFailed": "Impossible d'exporter les données",
  "api.settings.previewFailed": "Impossible de charger l'aperçu",
  "api.settings.testReminderSuccess": "Rappel de test envoyé à votre adresse e-mail",
  "api.settings.testReminderSendFailed": "Impossible d'envoyer le test",
  "api.settings.testReminderError": "Impossible d'envoyer le rappel de test",
  "api.settings.historyFailed": "Impossible de charger l'historique",
  "api.settings.upcomingFailed": "Impossible de charger les rappels à venir",
  "api.calendar.noGoogleConnection": "Aucune connexion Google",
  "api.calendar.tokenCheckFailed": "Impossible de vérifier les jetons",
  "api.calendar.loginWithGoogle": "Connectez-vous avec Google",
  "api.calendar.calendarsLoadFailed": "Impossible de charger les calendriers",
  "api.calendar.eventsLoadFailed": "Impossible de charger les événements",
  "api.calendar.eventFieldsRequired": "Le titre, le début et la fin sont obligatoires",
  "api.calendar.eventCreateFailed": "Impossible de créer l'événement",
  "api.calendar.eventDeleteFailed": "Impossible de supprimer l'événement",
  "api.calendar.syncSettingsLoadFailed": "Impossible de charger les paramètres de synchronisation",
  "api.calendar.singleProviderLimit": "Vous avez déjà une synchronisation active avec {provider}. Déconnectez d'abord {provider} avant d'activer Google Calendar.",
  "api.calendar.syncSettingsSaveFailed": "Impossible d'enregistrer les paramètres de synchronisation",
  "api.calendar.disconnectFailed": "Impossible de se déconnecter",
  "api.calendar.disconnected": "Connexion Google Calendar déconnectée",
  "api.calendar.sessionExpired": "Session Google expirée",
  "api.calendar.reconnectGoogle": "Reconnectez-vous avec Google pour rétablir la connexion",
  "api.calendar.syncStatusLoadFailed": "Impossible de charger le statut de synchronisation",
  "api.calendar.syncDisabledByAdmin": "La synchronisation du calendrier est temporairement désactivée par l'administrateur",
  "api.calendar.contactSupport": "Contactez le support si cela est inattendu",
  "api.calendar.syncRateLimit": "Vous pouvez synchroniser au maximum une fois toutes les 15 minutes",
  "api.calendar.syncRateLimitHint": "Réessayez dans {minutes} {minuteWord}",
  "api.calendar.minuteSingular": "minute",
  "api.calendar.minutePlural": "minutes",
  "api.calendar.syncInProgress": "La synchronisation est déjà en cours",
  "api.calendar.syncInProgressHint": "Attendez la fin de la synchronisation en cours",
  "api.calendar.noValidGoogleConnection": "Aucune connexion Google valide",
  "api.calendar.syncNotEnabled": "La synchronisation n'est pas activée",
  "api.calendar.maxEventsReached": "Nombre maximum de rendez-vous atteint ({max})",
  "api.calendar.maxEventsHint": "Supprimez d'anciens rendez-vous pour pouvoir synchroniser à nouveau",
  "api.calendar.googleApiLimit": "Limite de l'API Google atteinte",
  "api.calendar.waitAndRetry": "Patientez quelques minutes et réessayez",
  "api.calendar.noGoogleAccess": "Aucun accès à Google Calendar",
  "api.calendar.reauthorizeGoogle": "Autorisez à nouveau PianoPlanner à accéder à votre calendrier",
  "api.calendar.syncFailed": "Échec de la synchronisation",
  "api.calendar.importFailed": "Échec de l'importation",
  "api.calendar.previewFailed": "Échec de l'aperçu",
  "api.calendar.forceSyncFailed": "Échec de la synchronisation forcée",
  "api.calendar.allSynced": "Tous les calendriers sont synchronisés",
  "api.calendar.refreshTokenMissing": "Google Calendar : jeton d'actualisation manquant - reconnectez-vous via les Paramètres",
  "api.calendar.googleExpired": "Connexion Google Calendar expirée",
  "api.calendar.appleNotConnected": "Apple Calendar non connecté",
  "api.calendar.syncsPending": "{count} synchronisation(s) en attente",
  "api.calendar.microsoftNotConnected": "Microsoft Calendar non connecté",
  "api.calendar.syncsPermanentlyFailed": "{count} synchronisation(s) échouée(s) définitivement",
  "api.customers.fetchError": "Impossible de charger les clients",
  "api.customers.fetchNamesError": "Impossible de charger les noms des clients",
  "api.customers.fetchDuplicatesError": "Impossible de charger les doublons",
  "api.customers.mergeIdsRequired": "L'ID cible et l'ID source sont requis",
  "api.customers.mergeSuccess": "Clients fusionnés avec succès",
  "api.customers.mergeAdvancedIdsRequired": "L'ID cible et les IDs source sont requis",
  "api.customers.cleanNotesFailed": "Impossible de nettoyer les notes",
  "api.customers.mapDataError": "Impossible de charger les données de la carte",
  "api.customers.allAlreadyGeocoded": "Tous les clients ont déjà des coordonnées",
  "api.customers.geocodeBatchPartial": "{processed} clients traités, {remaining} restants. Relancez.",
  "api.customers.geocodeBatchDone": "{processed} clients traités.",
  "api.customers.geocodingFailed": "Géocodage échoué",
  "api.customers.fetchOneError": "Impossible de charger le client",
  "api.customers.createError": "Impossible de créer le client",
  "api.customers.updateError": "Impossible de mettre à jour le client",
  "api.customers.deleteError": "Impossible de supprimer le client",
  "api.customers.tokenRegenerated": "Nouveau lien de réservation généré",
  "api.customers.tokenRegenerateError": "Impossible de régénérer le token",
  "api.customers.smartFillLocationRequired": "Entrez une ville, un code postal ou une adresse",
  "api.customers.smartFillLocationNotFound": "Lieu non trouvé. Essayez un autre nom de ville ou code postal.",
  "api.customers.smartFillNoResults": "Aucun client avec intervalle d'accord trouvé",
  "api.customers.smartFillSearchFailed": "Recherche échouée",
  "api.customers.smartFillSelectAtLeastOne": "Sélectionnez au moins un client",
  "api.customers.smartFillMaxInvitations": "Maximum 20 invitations à la fois",
  "api.customers.smartFillCustomerNotFound": "Client/piano non trouvé ou pas d'email",
  "api.customers.smartFillNoInterval": "Intervalle d'accord est 0",
  "api.customers.smartFillInviteFailed": "Échec de l'envoi des invitations",
  "api.customers.noAddress": "Le client n'a pas d'adresse",
  "api.customers.geocodeAddressFailed": "Impossible de géocoder l'adresse",
  "api.customers.notesFetchError": "Impossible de charger les notes",
  "api.customers.noteRequired": "La note est requise",
  "api.customers.noteSaveError": "Impossible d'enregistrer la note",
  "api.customers.noteDeleteError": "Impossible de supprimer la note",
  "api.pianos.fetchError": "Impossible de charger les pianos",
  "api.pianos.invitationStatusError": "Impossible de charger le statut d'invitation",
  "api.pianos.servicesFetchError": "Impossible de charger les services",
  "api.pianos.fetchSingleError": "Impossible de charger le piano",
  "api.pianos.created": "Piano ajouté",
  "api.pianos.createError": "Impossible de créer le piano",
  "api.pianos.pianoIdsRequired": "Le tableau pianoIds est requis",
  "api.pianos.updatesRequired": "L'objet updates est requis",
  "api.pianos.noValidFields": "Aucun champ valide à mettre à jour",
  "api.pianos.bulkUpdated": "{count} pianos mis à jour",
  "api.pianos.bulkUpdateError": "Impossible de mettre à jour les pianos",
  "api.pianos.updated": "Piano mis à jour",
  "api.pianos.updateError": "Impossible de mettre à jour le piano",
  "api.pianos.deleteError": "Impossible de supprimer le piano",
  "api.pianos.serviceAdded": "Enregistrement de service ajouté",
  "api.pianos.serviceAddError": "Impossible d'ajouter le service",
  "api.pianos.serviceNotFound": "Enregistrement de service non trouvé",
  "api.pianos.serviceDeleted": "Enregistrement de service supprimé",
  "api.pianos.serviceDeleteError": "Impossible de supprimer le service",
  "api.appointments.fetchFailed": "Impossible de charger les rendez-vous",
  "api.appointments.noneFound": "Aucun rendez-vous trouvé",
  "api.appointments.travelTimeCalcFailed": "Impossible de calculer les temps de trajet",
  "api.appointments.duplicateDetectFailed": "Impossible de détecter les doublons",
  "api.appointments.noDuplicatesFound": "Aucun doublon trouvé",
  "api.appointments.pendingFetchFailed": "Impossible de charger les rendez-vous en attente",
  "api.appointments.pendingPaymentsFetchFailed": "Impossible de charger les paiements en attente",
  "api.appointments.missingAddressesFetchFailed": "Impossible de charger les adresses manquantes",
  "api.appointments.notFound": "Rendez-vous non trouvé",
  "api.appointments.fetchOneFailed": "Impossible de charger le rendez-vous",
  "api.appointments.titleRequired": "Le titre est requis",
  "api.appointments.startEndRequired": "L'heure de début et de fin sont requises",
  "api.appointments.createSyncFailed": "Impossible de créer le rendez-vous",
  "api.appointments.createFailed": "Impossible de créer le rendez-vous",
  "api.appointments.updateFailed": "Impossible de mettre à jour le rendez-vous",
  "api.appointments.deleteFailed": "Impossible de supprimer le rendez-vous",
  "api.appointments.completeFailed": "Impossible de terminer le rendez-vous",
  "api.appointments.cancelFailed": "Impossible d'annuler le rendez-vous",
  "api.appointments.statsFetchFailed": "Impossible de charger les statistiques",
  "api.appointments.dateRequired": "La date est requise",
  "api.appointments.minTwoForRoute": "Au moins 2 rendez-vous avec adresse nécessaires pour l'optimisation de route",
  "api.appointments.routeOptimizeFailed": "Impossible d'optimiser l'itinéraire",
  "api.appointments.noScheduleProvided": "Aucun planning fourni",
  "api.appointments.routeApplyFailed": "Impossible d'appliquer l'itinéraire optimisé",
  "api.appointments.duplicateDeleteFailed": "Impossible de supprimer les doublons",
  "api.appointments.cleanupFailed": "Nettoyage échoué",
  "api.appointments.noBrokenFound": "Aucun rendez-vous défectueux trouvé",
  "api.appointments.missingRequiredFields": "Champs obligatoires manquants",
  "api.appointments.invalidDateFormat": "Format de date invalide",
  "api.appointments.invalidTimeFormat": "Format d'heure invalide",
  "api.appointments.timeSlotUnavailable": "Créneau horaire non disponible",
  "api.appointments.conflictExists": "Un rendez-vous est déjà prévu : {conflictWith}",
  "api.appointments.rescheduleFailed": "Échec du report du rendez-vous",
  "api.appointments.rescheduled": "Rendez-vous reprogrammé avec succès",
  "api.appointments.workshopStatsFailed": "Impossible de charger les statistiques de l'atelier",
  "api.appointments.mileageSummaryFailed": "Impossible de charger le résumé kilométrique",
  "api.appointments.paymentMarkedPaid": "Paiement marqué comme payé",
  "api.appointments.paymentMarkFailed": "Impossible de marquer le paiement",
  "api.appointments.markedCompleted": "Rendez-vous marqué comme terminé",
  "api.appointments.taskCompleteFailed": "Impossible de terminer la tâche",
  "api.appointments.defaultTitle": "Rendez-vous",
  "api.appointments.hintDateTimeFormat": "Fournissez newDate (AAAA-MM-JJ) et newTime (HH:MM)",
  "api.appointments.hintDateFormat": "Utilisez le format AAAA-MM-JJ",
  "api.appointments.hintTimeFormat": "Utilisez le format HH:MM",
  "api.appointments.rescheduleEmailTitle": "Changement d'horaire du rendez-vous",
  "api.appointments.customerFallback": "client",
  "api.appointments.rescheduleEmailBody": "Votre rendez-vous a été déplacé à un nouvel horaire :",
  "api.appointments.rescheduleFrom": "De",
  "api.appointments.rescheduleTo": "Vers",
  "api.appointments.labelAppointment": "Rendez-vous",
  "api.appointments.labelLocation": "Lieu",
  "api.appointments.rescheduleContactNote": "Si ce nouvel horaire ne vous convient pas, n'hésitez pas à nous contacter.",
  "api.appointments.kindRegards": "Cordialement,",
  "api.appointments.rescheduleEmailSubject": "Changement d'horaire : {title} - {date}",
  "api.appointments.duplicatesDeleted": "{count} doublons supprimés",
  "api.appointments.noCompanyAddress": "Aucune adresse d'entreprise définie. Veuillez d'abord définir une adresse dans les paramètres.",
  "api.appointments.routeApplyMessage": "{count} rendez-vous mis à jour avec des horaires optimisés",
  "api.email.quotaCheckFailed": "Vérification du quota échouée",
  "api.email.emailNotConfigured": "E-mail non configuré",
  "api.email.smtpEnvRequired": "Les variables d'environnement SMTP_USER et SMTP_PASS sont requises",
  "api.email.noEmailProvided": "Aucune adresse e-mail fournie",
  "api.email.testEmailSent": "E-mail de test envoyé à {email}",
  "api.email.testEmailFailed": "Impossible d'envoyer l'e-mail de test",
  "api.email.settingsUpdated": "Paramètres e-mail mis à jour",
  "api.email.confirmationSent": "E-mail de confirmation envoyé",
  "api.email.appointmentNotFound": "Rendez-vous non trouvé",
  "api.email.customerNoEmail": "Le client n'a pas d'adresse e-mail",
  "api.email.reminderSent": "E-mail de rappel envoyé",
  "api.email.customerIdRequired": "customerId est requis",
  "api.email.customerNotFound": "Client non trouvé",
  "api.email.noBookingLink": "Le client n'a pas de lien de réservation. Générez d'abord un lien.",
  "api.email.invitationSent": "Invitation envoyée",
  "api.email.invitationFailed": "Impossible d'envoyer l'invitation",
  "api.email.customerAndPianoRequired": "customerId et pianoId sont requis",
  "api.email.pianoNotFound": "Piano non trouvé",
  "api.email.pianoSelfContact": "Ce piano est réglé sur \"Le client prend lui-même contact\". Modifiez d'abord l'intervalle d'accord pour pouvoir envoyer des invitations.",
  "api.email.logLoadFailed": "Impossible de charger le journal des e-mails",
  "api.email.noEmailsSelected": "Aucun e-mail sélectionné",
  "api.email.invalidIds": "IDs invalides",
  "api.email.deleteEmailsFailed": "Impossible de supprimer les e-mails",
  "api.smtp.settingsSaved": "Paramètres SMTP enregistrés",
  "api.smtp.settingsNotFound": "Paramètres e-mail non trouvés",
  "api.smtp.saveSettingsFirst": "Enregistrez d'abord vos paramètres e-mail",
  "api.smtp.noSmtpSettings": "Aucun paramètre SMTP trouvé",
  "api.smtp.smtpSettingsTip": "Enregistrez d'abord les paramètres SMTP via Paramètres > E-mail",
  "api.smtp.diagnoseFailed": "Diagnostic échoué",
  "api.smtp.settingsDeleted": "Paramètres SMTP supprimés",
  "api.notifications.invalidSubscription": "Abonnement invalide",
  "api.notifications.saveSubscriptionFailed": "Impossible d'enregistrer l'abonnement",
  "api.notifications.unsubscribeFailed": "Désinscription échouée",
  "api.notifications.updateSettingsFailed": "Impossible de mettre à jour les paramètres",
  "api.notifications.getSettingsFailed": "Impossible de charger les paramètres",
  "api.notifications.testSent": "Notification de test envoyée",
  "api.notifications.testFailed": "Impossible d'envoyer la notification",
  "api.notifications.testSendFailed": "Impossible d'envoyer la notification de test",
  "api.mileage.vehicleFetchFailed": "Impossible de charger le véhicule",
  "api.mileage.vehicleSaveFailed": "Impossible d'enregistrer le véhicule",
  "api.mileage.readingsFetchFailed": "Impossible de charger les relevés kilométriques",
  "api.mileage.dateAndReadingRequired": "La date et le relevé kilométrique sont requis",
  "api.mileage.invalidReading": "Relevé kilométrique invalide",
  "api.mileage.readingSaveFailed": "Impossible d'enregistrer le relevé kilométrique",
  "api.mileage.readingNotFound": "Relevé kilométrique non trouvé",
  "api.mileage.readingDeleteFailed": "Impossible de supprimer le relevé kilométrique",
  "api.mileage.tripsFetchFailed": "Impossible de charger les trajets",
  "api.mileage.dateAndDistanceRequired": "La date et la distance sont requises",
  "api.mileage.tripSaveFailed": "Impossible d'enregistrer le trajet",
  "api.mileage.tripNotFound": "Trajet non trouvé",
  "api.mileage.tripUpdateFailed": "Impossible de mettre à jour le trajet",
  "api.mileage.tripDeleteFailed": "Impossible de supprimer le trajet",
  "api.mileage.appointmentNotFound": "Rendez-vous non trouvé",
  "api.mileage.noChangesProvided": "Aucune modification fournie",
  "api.mileage.adjustFailed": "Impossible de modifier le kilométrage",
  "api.mileage.auditLogFailed": "Impossible de charger le journal d'audit",
  "api.mileage.reportFailed": "Impossible de générer le rapport kilométrique",
  "api.mileage.summaryFailed": "Impossible de charger le résumé kilométrique",
  "api.projects.fetchFailed": "Impossible de charger les projets",
  "api.projects.statsFetchFailed": "Impossible de charger les statistiques",
  "api.projects.capacityFetchFailed": "Impossible de charger la capacité",
  "api.projects.notFound": "Projet non trouvé",
  "api.projects.fetchOneFailed": "Impossible de charger le projet",
  "api.projects.titleRequired": "Le titre est requis",
  "api.projects.createFailed": "Impossible de créer le projet",
  "api.projects.updateFailed": "Impossible de mettre à jour le projet",
  "api.projects.deleteFailed": "Impossible de supprimer le projet",
  "api.projects.duplicateFailed": "Impossible de dupliquer le projet",
  "api.projects.appointmentsFetchFailed": "Impossible de charger les rendez-vous",
  "api.projects.tasksFetchFailed": "Impossible de charger les tâches",
  "api.projects.taskTitleRequired": "Le titre de la tâche est requis",
  "api.projects.taskCreateFailed": "Impossible de créer la tâche",
  "api.projects.taskNotFound": "Tâche non trouvée",
  "api.projects.taskUpdateFailed": "Impossible de mettre à jour la tâche",
  "api.projects.taskDeleteFailed": "Impossible de supprimer la tâche",
  "api.projects.taskIdsMustBeArray": "taskIds doit être un tableau",
  "api.projects.taskReorderFailed": "Impossible de réorganiser les tâches",
  "api.projects.quoteFetchFailed": "Impossible de charger le devis",
  "api.projects.materialsFetchFailed": "Impossible de charger les matériaux",
  "api.projects.categoriesFetchFailed": "Impossible de charger les catégories",
  "api.projects.materialNotFound": "Matériau non trouvé",
  "api.projects.materialFetchFailed": "Impossible de charger le matériau",
  "api.projects.materialNameRequired": "Le nom est requis",
  "api.projects.materialCreateFailed": "Impossible de créer le matériau",
  "api.projects.materialUpdateFailed": "Impossible de mettre à jour le matériau",
  "api.projects.materialDeleteFailed": "Impossible de supprimer le matériau",
  "api.accounting.settingsLoadFailed": "Impossible de charger les paramètres",
  "api.accounting.settingsSaveFailed": "Impossible d'enregistrer les paramètres",
  "api.accounting.clientIdSecretRequired": "Client ID et Client Secret sont requis",
  "api.accounting.connectedSuccess": "{provider} connecté avec succès !",
  "api.accounting.disconnectFailed": "Impossible de déconnecter {provider}",
  "api.accounting.noInvoicesToSync": "Aucune facture à synchroniser",
  "api.accounting.customersFetchFailed": "Impossible de charger les clients",
  "api.accounting.invoicesFetchFailed": "Impossible de charger les factures",
  "api.accounting.orgFetchFailed": "Impossible de charger l'organisation",
  "api.accounting.allFieldsRequired": "Tous les champs sont requis : URL, base de données, nom d'utilisateur et clé API",
  "api.accounting.tokenAndIdRequired": "Personal Access Token et ID d'administration sont requis",
  "api.accounting.authFailed": "Authentification {provider} échouée. Vérifiez votre token et vos paramètres.",
  "api.accounting.connectFailed": "Impossible de se connecter à {provider}",
  "api.accounting.loadingCustomers": "Chargement des clients depuis PianoPlanner...",
  "api.accounting.noCustomersFound": "Aucun client trouvé",
  "api.accounting.rateLimitSkipped": "Ignoré en raison de la limite de débit",
  "api.accounting.updateFailed": "Mise à jour échouée",
  "api.accounting.noCustomersToSync": "Aucun client à synchroniser",
  "api.accounting.noOpenInvoices": "Aucune facture ouverte synchronisée trouvée",
  "api.accounting.accessTokenAndIdRequired": "Access Token et Company ID (Realm ID) sont requis",
  "api.accounting.oauthTokenAndIdRequired": "OAuth Token et Organization ID sont requis",
  "api.accounting.apiTokenAndSlugRequired": "API Token et Company Slug sont requis",
  "api.accounting.syncLogFailed": "Impossible de charger le journal de synchronisation",
  "api.accounting.providerNameRequired": "Le nom du logiciel comptable est requis",
  "api.accounting.requestReceived": "Demande reçue",
  "api.accounting.requestSendFailed": "La demande n'a pas pu être envoyée",
  "api.team.loadFailed": "Impossible de charger les équipes",
  "api.team.nameRequired": "Le nom de l'équipe est requis",
  "api.team.createFailed": "Impossible de créer l'équipe",
  "api.team.accessDenied": "Accès refusé",
  "api.team.updateFailed": "Impossible de mettre à jour l'équipe",
  "api.team.noFileUploaded": "Aucun fichier téléchargé",
  "api.team.logoUploadFailed": "Impossible de télécharger le logo",
  "api.team.logoDeleteFailed": "Impossible de supprimer le logo",
  "api.team.bookingEnableFailed": "Impossible d'activer la réservation d'équipe",
  "api.team.bookingDisableFailed": "Impossible de désactiver la réservation d'équipe",
  "api.team.memberLoadFailed": "Impossible de charger les membres de l'équipe",
  "api.team.nameEmailRequired": "Le nom et l'e-mail sont requis",
  "api.team.memberNotFound": "Membre non trouvé",
  "api.team.memberUpdateFailed": "Impossible de mettre à jour le membre",
  "api.team.memberRemoved": "Membre de l'équipe supprimé",
  "api.team.memberRemoveFailed": "Impossible de supprimer le membre",
  "api.team.startEndRequired": "Les paramètres start et end sont requis",
  "api.team.calendarLoadFailed": "Impossible de charger le calendrier d'équipe",
  "api.team.appointmentNotFound": "Rendez-vous non trouvé",
  "api.team.teamMemberNotFound": "Membre de l'équipe non trouvé",
  "api.team.assignFailed": "Attribution échouée",
  "api.team.unassignedLoadFailed": "Impossible de charger les rendez-vous non attribués",
  "api.team.suggestionsFailed": "Impossible de charger les suggestions",
  "api.team.selectAtLeastOneCustomer": "Sélectionnez au moins un client",
  "api.team.maxInvitations": "Maximum 50 invitations à la fois",
  "api.team.bookingNotEnabled": "La réservation d'équipe n'est pas activée",
  "api.team.noCustomersFound": "Aucun client trouvé",
  "api.team.invitationsFailed": "Impossible d'envoyer les invitations",
  "api.team.absencesLoadFailed": "Impossible de charger les absences",
  "api.team.absenceMemberNotFound": "Membre non trouvé",
  "api.team.startEndDateRequired": "La date de début et la date de fin sont requises",
  "api.team.endAfterStart": "La date de fin doit être postérieure à la date de début",
  "api.team.absenceAddFailed": "Impossible d'ajouter l'absence",
  "api.team.absenceDeleteFailed": "Impossible de supprimer l'absence",
  "api.team.memberNotFoundForLink": "Membre de l'équipe non trouvé.",
  "api.team.memberNoEmail": "Ce membre n'a pas d'adresse e-mail.",
  "api.team.magicLinkSent": "Magic link envoyé avec succès.",
  "api.team.magicLinkFailed": "Une erreur est survenue lors de la génération du lien.",
  "api.team.teamIdStartDateRequired": "teamId et startDate sont requis",
  "api.team.smartMatchFailed": "Impossible de générer des correspondances intelligentes",
  "api.team.invalidFileType": "Seuls JPG, PNG, SVG ou WebP sont autorisés",
  "api.team.memberLimitReached": "Vous pouvez ajouter au maximum {max} membres d'équipe avec votre abonnement actuel",
  "api.team.memberAddFailed": "Impossible d'ajouter le membre de l'équipe",
  "api.team.invitationsSent": "{count} invitation(s) envoyée(s)",
  "api.accounting.jorttInvalidCredentials": "Identifiants Jortt invalides — vérifiez l'ID client et le secret client",
  "api.accounting.jorttTokenError": "Erreur de jeton Jortt : HTTP {status}",
  "api.accounting.jorttNotConnected": "Jortt non connecté — configurez d'abord l'ID client et le secret client",
  "api.accounting.jorttApiError": "Erreur API Jortt : HTTP {status}",
  "api.accounting.odooAuthFailed": "Authentification échouée — vérifiez votre URL, base de données, nom d'utilisateur et clé API",
  "api.accounting.odooNotConnected": "Odoo non connecté",
  "api.accounting.moneybirdNotConnected": "Moneybird non connecté",
  "api.accounting.moneybirdAuthFailed": "Authentification Moneybird échouée. Vérifiez votre jeton et l'ID d'administration.",
  "api.accounting.invalidToken": "Jeton invalide",
  "api.accounting.quickbooksNotConnected": "QuickBooks non connecté",
  "api.accounting.quickbooksAuthFailed": "Authentification QuickBooks échouée. Vérifiez votre jeton d'accès et l'ID de l'entreprise.",
  "api.accounting.invalidOrExpiredToken": "Jeton invalide ou expiré",
  "api.accounting.zohoNotConnected": "Zoho Books non connecté",
  "api.accounting.zohoAuthFailed": "Authentification Zoho échouée. Vérifiez votre jeton OAuth et la région.",
  "api.accounting.fikenNotConnected": "Fiken non connecté",
  "api.accounting.fikenAuthFailed": "Authentification Fiken échouée. Vérifiez votre jeton API et le slug de l'entreprise.",
  "api.accounting.invalidApiToken": "Jeton API invalide",
  "api.accounting.fikenCompanyNotFound": "Slug de l'entreprise introuvable",
  "api.accounting.syncFailed": "Synchronisation échouée",
  "api.accounting.invoicesSynced": "{count} facture(s) synchronisée(s) vers {provider}",
  "api.accounting.customersSynced": "{synced} client(s) synchronisé(s) vers {provider}",
  "api.accounting.customerSyncFailed": "Synchronisation des clients échouée",
  "api.accounting.invoicesMarkedPaid": "{count} facture(s) marquée(s) comme payée(s) depuis {provider}",
  "api.accounting.noNewPaymentsFound": "{count} factures vérifiées, aucun nouveau paiement trouvé",
  "api.accounting.paymentSyncFailed": "Synchronisation des paiements échouée",
  "api.accounting.sseCustomersFound": "{count} clients trouvés. Récupération des contacts {provider} existants...",
  "api.accounting.sseContactsFetched": "{count} contacts {provider} récupérés (page {page})...",
  "api.accounting.sseContactsFetchFailed": "Impossible de récupérer les contacts existants : {error}",
  "api.accounting.sseSyncStarting": "{existing} contacts existants. Démarrage de la synchronisation de {total} clients...",
  "api.accounting.logInvoiceSynced": "Facture synchronisée vers {provider}",
  "api.accounting.logInvoicesSynced": "{count} factures synchronisées",
  "api.accounting.logSyncPartial": "{synced} synchronisé(s), {failed} échoué(s)",
  "api.accounting.logCustomerSynced": "Client synchronisé vers {provider}",
  "api.accounting.logCustomersSynced": "{synced} clients synchronisés",
  "api.accounting.logInvoicesMarkedPaid": "{count} facture(s) marquée(s) comme payée(s)",
  "api.accounting.logNoNewPayments": "Aucun nouveau paiement trouvé",
  "api.accounting.contactUpdateFailed": "Mise à jour échouée : {error}",
  "dashboard.syncConnectCalendarFirst": "Connectez d'abord un calendrier dans les paramètres",
  "dashboard.syncPartiallyFailed": "Synchronisation partiellement échouée",
  "dashboard.syncCompleted": "Synchronisation terminée",
  "dashboard.syncUpToDate": "Calendriers à jour ✓",
  "dashboard.syncNetworkError": "Sync échouée : erreur réseau",
  "dashboard.travelTimesCalculated": "Temps de trajet calculés pour {count} rendez-vous",
  "dashboard.travelTimeCalcFailed": "Échec du calcul du temps de trajet",
  "dashboard.selectDate": "Sélectionnez une date",
  "dashboard.endDateBeforeStart": "La date de fin ne peut pas être avant la date de début",
  "dashboard.blockedDaysFailed": "{count} jour(s) n'ont pas pu être bloqués",
  "dashboard.cannotIdentifyAppointment": "Impossible d'identifier le rendez-vous",
  "dashboard.rescheduledTo": "{name} reporté à {time}",
  "dashboard.rescheduleFailed": "Report échoué",
  "dashboard.somethingWentWrong": "Quelque chose s'est mal passé",
  "dashboard.searchingAlternatives": "Recherche d'heures alternatives...",
  "dashboard.noAlternativesFound": "Aucune heure alternative trouvée pour aujourd'hui",
  "dashboard.couldNotLoadAlternatives": "Impossible de charger les heures alternatives",
  "dashboard.noAppointmentsToMove": "Aucun rendez-vous à déplacer",
  "dashboard.appointmentsMarkedForMove": "{count} rendez-vous marqués pour report. Utilisez le calendrier pour définir les heures exactes.",
  "dashboard.confirmReschedule": "Voulez-vous reporter \"{name}\" ?\n\nDe : {from}\nÀ : {to}\n\nCela vous donne plus de temps pour vous y rendre.",
  "dashboard.confirmMoveOptimization": "Voulez-vous reporter {count} rendez-vous de {from} à {to} ?",
  "dashboard.notLoggedIn": "Non connecté",
  "smartReason": {
    "sameLocation": "Même lieu - pas de trajet",
    "afterNearby": "Juste après un rendez-vous proche",
    "afterPrevious": "Après le rendez-vous précédent",
    "remoteAvailable": "Disponible pour rendez-vous à distance",
    "adjacentWorkshop": "Adjacent à l'atelier",
    "beforeNearby": "Juste avant un rendez-vous proche",
    "beforeNext": "Avant le prochain rendez-vous",
    "beforeWorkshop": "Avant rendez-vous en atelier",
    "availableSlot": "Créneau disponible",
    "workshopAvailable": "Disponible en atelier",
    "fartherAway": "(plus éloigné)",
    "regionDay": "(jour de région)",
    "noMembers": "Aucun membre disponible",
    "noSlots": "Aucun créneau disponible"
  },
  "customerDetail": {
    "customerDataUnavailable": "Données client indisponibles",
    "customerCreated": "Client créé",
    "couldNotSaveCustomer": "Impossible de sauvegarder le client",
    "confirmDeleteCustomer": "Êtes-vous sûr de vouloir supprimer ce client ? Cette action est irréversible.",
    "customerDeleted": "Client supprimé",
    "couldNotDeleteCustomer": "Impossible de supprimer le client",
    "pianoNotFound": "Piano introuvable",
    "confirmDeletePiano": "Êtes-vous sûr de vouloir supprimer ",
    "pianoDeleted": "Piano supprimé",
    "couldNotDeletePiano": "Impossible de supprimer le piano",
    "linkCopied": "Lien copié !",
    "emailStatusFailed": "Échoué",
    "emailStatusSent": "Envoyé",
    "emailTypeConfirmation": "Confirmation",
    "emailTypeReminder": "Rappel",
    "emailTypeCancellation": "Annulation",
    "emailTypeBooking": "Réservation",
    "emailTypeInvitation": "Invitation d'accord",
    "emailTypeWelcome": "E-mail de bienvenue",
    "emailTypeReschedule": "Report",
    "noSubject": "(pas de sujet)",
    "emailLoadError": "Erreur lors du chargement du journal e-mail",
    "projectStatusPlanning": "Planification",
    "projectStatusActive": "Actif",
    "projectStatusPaused": "En pause",
    "projectStatusCompleted": "Terminé",
    "projectStatusCancelled": "Annulé"
  },
  "importContactsPage": {
    "importOf": "Import de",
    "batchLoadError": "Erreur lors du chargement des lots d'import.",
    "confirmDeleteBatch": "Êtes-vous sûr de vouloir supprimer cet import ?\\n\\nCela supprime définitivement {count} éléments.",
    "deleteError": "Erreur lors de la suppression : ",
    "unknownError": "Erreur inconnue",
    "invalidFileType": "Veuillez télécharger un fichier .vcf ou .csv",
    "fileReadError": "Erreur de lecture du fichier : ",
    "andMore": "... et {count} de plus",
    "noContactsToImport": "Aucun contact à importer"
  },
  "inventory": {
    "loading": "Chargement...",
    "errorLoadingInventory": "Erreur lors du chargement de l'inventaire",
    "noInventoryYet": "Pas encore de pianos en inventaire",
    "noInventoryDesc": "Importez un fichier CSV ou ajoutez des pianos",
    "selectCsvFirst": "Veuillez d'abord sélectionner un fichier CSV",
    "importFailed": "Création du lot échouée",
    "addFailed": "Ajout échoué",
    "smartFillLocation": "Entrez un lieu pour voir les suggestions",
    "smartError": "Impossible de charger les suggestions",
    "noSmartSuggestions": "Aucune suggestion disponible",
    "backToSmart": "Retour aux suggestions ▴",
    "enterLocation": "Entrez un lieu",
    "selectSlotFirst": "Choisissez une suggestion ou planifiez manuellement",
    "chooseDate": "Choisissez une date",
    "chooseStartTime": "Choisissez une heure de début",
    "tunerLabel": "Accordeur"
  },
  "reminders": {
    "confirmNoPianos": "Il n'y a actuellement <strong>aucun piano",
    "confirmActivateIntro": "À l'activation, des rappels seront planifiés pour",
    "confirmOf": "de",
    "confirmSkipped": "seront ignorés (ont déjà un rendez-vous).",
    "confirmEmailTiming": "Les e-mails ne seront pas envoyés immédiatement mais à l'heure configurée",
    "andMoreOthers": "et encore",
    "previewLoadFailed": "Impossible de charger l'aperçu. Veuillez réessayer.",
    "toastSaveError": "Erreur lors de l'enregistrement",
    "toggleDescActive": "Actif — les rappels sont envoyés automatiquement",
    "toggleDesc": "Les clients sont automatiquement rappelés lorsque leur piano doit être accordé",
    "upcomingEmpty": "Aucun piano à accorder",
    "sentNone": "Aucun pour le moment",
    "loadError": "Impossible de charger les données",
    "historyEmpty": "Aucun rappel envoyé",
    "historyLoadError": "Impossible de charger l'historique",
    "toastSettingsSaved": "Paramètres enregistrés",
    "toastSaveFailed": "Enregistrement échoué",
    "toastTestSent": "Rappel test envoyé à votre e-mail",
    "toastTestFailed": "Impossible d'envoyer le test",
    "toastSendError": "Erreur d'envoi",
    "confirmOptedOut": "client(s) se sont désinscrits.",
    "confirmReviewHint": "Cliquez sur \"Vérifier d'abord\" pour voir la liste complète.",
    "confirmCustomers": "clients",
    "bounceTitle": "Protection email active",
    "bounce1": "Les adresses email invalides sont automatiquement ignorées après des rebonds répétés",
    "bounce2": "Si trop d'emails échouent, l'envoi s'arrête automatiquement pour protéger votre réputation d'expéditeur",
    "bounce3": "Conseil : vérifiez régulièrement les adresses email de vos clients et supprimez les invalides",
    "bounce4": "Envoi à 100+ clients ? Utilisez votre propre serveur SMTP pour une meilleure délivrabilité",
    "bounce4Link": "Paramètres"
  },
  "dashboard.today": "Aujourd'hui",
  "dashboard.yesterday": "Hier",
  "dashboard.payStatusInvoiced": "Facture envoyée",
  "time.allDay": "Toute la journée",
  "importHub": {
    "pageTitle": "Importer des données - PianoPlanner",
    "title": "Importer des données",
    "description": "Transférez vos données existantes vers PianoPlanner. Choisissez la méthode adaptée à votre système actuel.",
    "popular": "Populaire",
    "comingSoon": "Prochainement",
    "gazelleTitle": "Assistant d'import Gazelle",
    "gazelleDesc": "Migrez tout votre historique Gazelle — clients, pianos, rendez-vous et services — en quelques minutes.",
    "contactsTitle": "Importer des contacts",
    "contactsDesc": "Importez votre liste de clients depuis votre téléphone, e-mail ou un fichier vCard/CSV.",
    "calendarTitle": "Importer un calendrier",
    "calendarDesc": "Synchronisez votre agenda depuis Google Calendar, Microsoft 365, ou importez des fichiers .ics.",
    "genericTitle": "Import CSV générique",
    "genericDesc": "Associez les colonnes de n'importe quel tableur ou export logiciel aux champs PianoPlanner. Jobber, Housecall Pro, Excel et plus.",
    "formatCustomers": "Clients",
    "formatPianos": "Pianos",
    "formatAppointments": "Rendez-vous",
    "formatServices": "Services",
    "openImporter": "Ouvrir l'importateur",
    "downloadTemplate": "📥 Télécharger le modèle",
    "templatesTitle": "Modèles CSV",
    "templatesDesc": "Téléchargez un modèle, remplissez-le dans votre tableur, puis téléversez-le via l’importateur correspondant.",
    "templatesOther": "Vous venez d’un autre système ? Exportez en CSV et renommez les colonnes pour correspondre à nos modèles.",
    "templateCustomers": "Clients",
    "templatePianos": "Pianos",
    "templateAppointments": "Rendez-vous",
    "timezoneHint": "Les heures de rendez-vous sans fuseau horaire (par ex. <code>2026-05-15 10:00</code>) sont interprétées dans le fuseau horaire de votre compte. Utilisez le format ISO avec offset (<code>2026-05-15T10:00:00+02:00</code>) pour outrepasser."
  },
  "leads": {
    "pageTitle": "Leads - PianoPlanner",
    "title": "Demandes de réservation",
    "all": "Tous",
    "new": "Nouveau",
    "contacted": "Contacté",
    "converted": "Converti",
    "dismissed": "Rejeté",
    "searchPlaceholder": "Rechercher nom, e-mail, téléphone...",
    "noLeads": "Aucune demande trouvée",
    "noLeadsDesc": "Les demandes apparaissent ici lorsque les clients commencent une réservation sans la terminer.",
    "total": "Total",
    "changeStatus": "Changer le statut",
    "statusUpdated": "Statut mis à jour",
    "updateError": "Impossible de mettre à jour la demande",
    "delete": "Supprimer",
    "deleteConfirmTitle": "Supprimer la demande ?",
    "deleteConfirmMsg": "Cela supprimera définitivement la demande pour",
    "deleted": "Demande supprimée",
    "deleteError": "Impossible de supprimer la demande",
    "loadError": "Impossible de charger les demandes",
    "justNow": "à l'instant",
    "sendFollowUp": "Envoyer un e-mail de suivi",
    "followUpSent": "E-mail de suivi envoyé",
    "followUpError": "Impossible d'envoyer l'e-mail de suivi"
  },
  "smartWizard.before": "Avant",
  "smartWizard.aiAssigned": "Attribué par IA"
}
