{
"locale": "fr-FR",
"bookedDays": {
"enter": "Modifier les jours déjà posés",
"booked": "Déjà posé",
"help": "Choisissez CP, RTT, Autre ou Effacer, puis cliquez ou faites glisser entre deux dates, même sur plusieurs mois. Relâchez pour enregistrer ; Échap annule. Chaque jour du type choisi est retiré ; les autres prennent ce type. Week-ends et jours fériés sont ignorés. Les hachures indiquent les jours déjà posés, pris en compte au prochain calcul.",
"fixed": "Saisie utilisateur fixe, sans débit du solde restant ni décision d’optimisation.",
"removed": "Déclaration supprimée",
"erase": "Effacer",
"rangeSaved": "Jours déjà posés enregistrés : {count} ({type}).",
"rangeRemoved": "Déclarations supprimées : {count}."
},
"app": {
"title": "vac-optimizer",
"description": "Faites plus de place aux vacances.",
"skipToPlan": "Aller à votre planning"
},
"userInput": {
"title": "Configurez vos congés",
"description": "Choisissez la période à planifier, puis ajoutez chaque solde de congés et sa période de validité.",
"addVacationDay": "Ajouter un solde de congés",
"calculate": "Calculer le planning",
"durationEstimate": "Attente indicative : {range} {unit}",
"durationUnits": {
"seconds": "s",
"minutes": "min"
},
"remainingDaysWarning": "{count} jour{plural} de congé restant{plural} :",
"deleteEntry": "Supprimer l’entrée",
"chooseDate": "Expire le",
"availableDate": "Disponible à partir du",
"days": "Jours",
"type": "Type de congé",
"daySuffix": "jour",
"daysSuffix": "jours",
"expires": "exp.",
"remainingValidity": "Utilisable du {available} au {expiry}.",
"remainingHorizon": "Planning calculé du {start} au {end}.",
"remainingEarnedFrom": "Congés gagnés grâce à la règle « {rule} ».",
"remainingSuggestions": {
"available-after-horizon": "Vous pouvez prolonger la période planifiée au-delà de sa date de disponibilité, puis recalculer.",
"no-working-date": "Vérifiez la période planifiée et les dates de validité de ce solde.",
"all-dates-occupied": "Vous pouvez élargir la période si la validité le permet, ou ajuster vos jours déjà posés et vos règles, puis recalculer.",
"preserved": "Aucune action nécessaire. Pour demander son utilisation, ajoutez une règle sur une période où il est utilisable, puis recalculez.",
"calculation-incomplete": "Relancez le calcul si vous souhaitez qu’il termine la planification."
}
},
"dayTypes": {
"weekend": "Weekend",
"closedDay": "Jour Férié",
"rtt": "RTT",
"cp": "Congé Payé",
"other": "Autre",
"today": "Aujourd'hui",
"any": "N'importe"
},
"settings": {
"title": "Paramètres",
"description": "Les modifications sont enregistrées automatiquement.",
"showWeekNumbers": "Afficher les numéros de semaine",
"close": "Fermer",
"selectLanguage": "Langue",
"selectTheme": "Thème",
"themeOptions": {
"system": "Système",
"light": "Clair",
"dark": "Sombre"
},
"systemAppearance": "Apparence actuelle du système",
"planningHorizon": "Période à planifier",
"planningStart": "Date de début (incluse)",
"lastPlanningDate": "Dernière date de planification (incluse)",
"planningDatesHelp": "Choisissez vos dates, même passées. Le calendrier est mis à jour lorsque vous cliquez sur Calculer le planning.",
"invalidDate": "Saisissez deux dates calendaires valides.",
"horizonOrder": "La dernière date de planification doit être égale ou postérieure à la date de début.",
"invalidHorizon": "Corrigez les dates de planification avant de calculer."
},
"rules": {
"title": "Règles de planification",
"subtitle": "Gérer les règles d'optimisation",
"active": "actives",
"moveRuleUp": "Monter la règle",
"moveRuleDown": "Descendre la règle",
"dragRule": "Glisser pour réordonner",
"ruleMoved": "{name} : position {position} sur {count}.",
"priorityInfo": "Les règles du haut sont prioritaires. Réorganisez-les avec la poignée ou les flèches.",
"ifThenTemplate": "Si un jour férié tombe un {day}, placer {placeDays} jour(s) {placeType} {placement} et obtenir {rewardDays} jour(s) {rewardType} en bonus.",
"timeWindowTemplate": "Placer {placeDays} jour(s) {placeType} entre le {startDate} et le {endDate}.",
"editRule": "Modifier la règle",
"deleteRule": "Supprimer la règle",
"addRule": "Ajouter une règle",
"place": "Placer",
"ruleName": "Nom de la règle",
"holidayFalls": "Jour férié tombe un",
"days": "Jours",
"type": "Type",
"position": "Position",
"getBonus": "Obtenir en bonus",
"force": "Force de la règle",
"obligation": "Obligation",
"preference": "Préférence",
"startDate": "Date de début",
"endDate": "Date de fin",
"cancel": "Annuler",
"save": "Enregistrer",
"add": "Ajouter",
"addRuleButton": "Ajouter",
"newIfThenRule": "Nouvelle Règle \"Si ... Alors\"",
"newTimeWindowRule": "Nouvelle Période Imposée",
"defaultNewRuleName": "Nouvelle Règle",
"defaultNewPeriodName": "Nouvelle Période",
"daysOfWeek": {
"1": "Lundi",
"2": "Mardi",
"3": "Mercredi",
"4": "Jeudi",
"5": "Vendredi",
"6": "Samedi",
"0": "Dimanche"
},
"placement": {
"before": "Avant",
"after": "Après",
"around": "Autour",
"auto": "Auto (Meilleur choix)"
},
"optimization": {
"newRule": "Nouvelle règle d’Optimisation",
"defaultName": "Prévention des pertes",
"elementsLabel": "Éléments du planning",
"conditionsLabel": "Conditions (toutes doivent être vérifiées)",
"measureLabel": "Mesure",
"aggregationLabel": "Agrégation",
"directionLabel": "Direction",
"thresholdLabel": "Seuil de préférence en jours ouvrés",
"thresholdSummary": "seuil de préférence : {count} jours ouvrés",
"summary": "{direction} {aggregation} : {measure} — {elements}{conditions}.",
"invalidConfiguration": "Choisissez des éléments, conditions, une mesure et une agrégation compatibles, avec un seuil entier positif si nécessaire.",
"nameRequired": "Saisissez un nom de règle.",
"elements": {
"leave-balances": "Soldes de congés",
"public-holiday-weeks": "Semaines avec jour férié",
"time-off-periods": "Périodes non travaillées",
"work-sequences": "Séquences de travail",
"leave-placements": "Congés placés"
},
"conditions": {
"at-risk": "À risque d’expiration",
"complete": "Complètes",
"internal": "Internes",
"non-empty": "Non vides",
"supporting": "D’appui"
},
"measures": {
"unplaced-quantity": "Quantité non placée",
"public-holiday-week-value": "Valeur des semaines fériées",
"non-working-day-gain": "Gain de jours non travaillés",
"work-sequence-length": "Longueur des séquences de travail",
"work-sequence-deficit": "Déficit des séquences de travail",
"placement-count": "Nombre de placements"
},
"aggregations": {
"sum": "Somme",
"count": "Nombre",
"maximum": "Maximum"
},
"directions": {
"minimize": "Minimiser",
"maximize": "Maximiser"
}
}
},
"planning": {
"statistics": {
"open": "Statistiques",
"title": "Statistiques du planning",
"leaveDays": "Nouveaux jours de congé posés",
"averageWorkSequence": "Séquence de travail moyenne",
"averageTimeOffPeriod": "Période de repos moyenne",
"longestTimeOffPeriod": "Plus longue période de repos",
"weekendConnectedHolidays": "Jours fériés reliés à un week-end",
"workingDays": "jours ouvrés",
"calendarDays": "jours calendaires",
"partialPlan": "Planning partiel",
"help": "Statistiques du planning calculé. Les jours déjà posés contribuent aux périodes de repos et de travail sans consommer à nouveau les soldes.",
"earnedLeave": "Congés acquis avant consommation",
"leaveDaysUnit": "jours",
"earnedLeaveByRule": "Congés acquis par règle"
},
"calculationDate": "Date du calcul",
"futureEntitlement": "Droit futur généré",
"includedEntitlement": "Droit déjà inclus dans les soldes reportés",
"title": "Votre année optimisée",
"daysPlaced": "Jours de congé placés",
"daysGained": "Jours non travaillés gagnés",
"longestWorkSequence": "Plus longue période travaillée",
"legend": "Légende du calendrier",
"invalidInput": "Les données de planification sont invalides.",
"conflict": "Les obligations ne peuvent pas être satisfaites ensemble.",
"incomplete": "Le calcul s’est arrêté avant la fin des critères de qualité.",
"cancel": "Annuler",
"cancelling": "Annulation en cours…",
"cancelled": "Calcul annulé",
"cancelledPartial": "Calcul annulé — plan partiel",
"error": "Le planificateur a rencontré une erreur inattendue.",
"complete": "Plan calculé.",
"whyPlacement": "Comprendre vos jours de congé",
"placementNavigation": "Navigation entre les explications des placements",
"placement": "Jour de congé",
"placements": "placements",
"of": "sur",
"first": "Premier placement",
"previous": "Placement précédent",
"next": "Placement suivant",
"last": "Dernier placement",
"remaining": "Jours non utilisés dans le planning final",
"balanceRemaining": "restants",
"counterfactual": "Dates alternatives",
"counterfactualLoading": "Analyse de chaque date de l’horizon…",
"counterfactualReady": "Les dates alternatives sont prêtes.",
"counterfactualError": "Les dates alternatives n’ont pas pu être calculées.",
"retryCounterfactual": "Relancer l’analyse des dates",
"eligible": "Éligible",
"ineligible": "Inéligible",
"reason": "Raison",
"explanationError": "L’explication n’a pas pu être produite.",
"conflictDetails": "Pourquoi aucun plan ne satisfait les obligations",
"conflictingRules": "Règles en conflit",
"bottleneck": "Goulot d’étranglement",
"incompleteDetails": "Étapes terminées avant l’arrêt du calcul",
"incumbentExplanation": "Cette explication concerne le meilleur plan valide trouvé ; les étapes de qualité suivantes ne sont pas terminées.",
"completedStages": "Étapes terminées",
"uncompletedStages": "Étapes interrompues ou non démarrées",
"none": "Aucun",
"currentPlacement": "Placement expliqué actuellement",
"explainedPeriod": "Période de repos expliquée",
"outsideHorizon": "Date de contexte hors de l’horizon de planification",
"calendarHelp": "Sélectionnez un jour de congé pour voir son apport au planning.",
"explanationHelp": "Découvrez votre pause et ce que chaque jour change.",
"technicalDetails": "Détails du calcul",
"compareDates": "Comparer d’autres dates",
"stopComparing": "Fermer la comparaison",
"explanation": {
"breakTitle": "Votre pause",
"leaveDays": "jours de congé posés",
"freeDays": "jours de week-end et fériés",
"daysOff": "jours de repos consécutifs",
"wholeBreak": "Ces totaux concernent toute la pause, y compris le jour sélectionné.",
"leaveUsed": "Cette date utilise 1 jour du solde « {balance} ».",
"expires": "Solde à utiliser au plus tard le",
"linkedRules": "Règles liées :",
"atRiskContribution": "Protège des congés à risque d’expiration.",
"impact": "Ce que ce jour change",
"impactHelp": "Comparez tout le planning avec et sans ce jour de congé. Les autres dates restent identiques ; seuls les totaux qui changent sont affichés.",
"criterion": "Sur tout le planning",
"withoutDay": "Sans ce jour",
"withDay": "Avec ce jour",
"noChange": "Ces totaux sont identiques. Les règles et les derniers critères de départage (expiration du solde, puis date) peuvent encore influencer le choix.",
"priorityHelp": "Les obligations sont résolues conjointement. Les préférences actives sont comparées dans l’ordre de vos règles. Seules ces règles déclenchent des placements ; l’expiration puis les dates départagent les résultats égaux.",
"tryDate": "Essayer une autre date",
"plannedDate": "Date actuellement prévue :",
"currentPlan": "Planning actuel",
"alternative": "Avec cette date",
"sameDate": "C’est la date prévue. Choisissez une autre date ci-dessus pour voir la différence.",
"moveHelp": "Essayez de déplacer ce jour. Les autres dates de congé restent identiques.",
"comparisonUnavailable": "La comparaison pour la date initiale est indisponible ; la différence ne peut donc pas être affichée.",
"objectives": {
"obligation-validity": {
"label": "Obligations non satisfaites",
"help": "Nombre de règles obligatoires non respectées. Un plan valide en compte zéro."
},
"unplaced-at-risk": {
"label": "Congés risquant d’expirer sans être utilisés",
"help": "Jours non posés expirant pendant la période planifiée. Moins, c’est mieux."
},
"preference": {
"label": "Préférence : {rule}",
"help": "Jours ou occurrences complètes, selon la règle. Plus, c’est mieux."
},
"holiday-week-value": {
"label": "Priorité des semaines avec jours fériés (points)",
"help": "Score pondéré : un férié le mercredi vaut 3, mardi/jeudi 2, lundi/vendredi 1. Plus, c’est mieux."
},
"non-working-day-gain": {
"label": "Jours de week-end et fériés dans vos pauses",
"help": "Jours de repos sans utiliser de congé. Plus, c’est mieux."
},
"longest-work-sequence": {
"label": "Maximum de jours travaillés entre congés",
"help": "Week-ends et jours fériés exclus. Moins, c’est mieux."
},
"short-sequence-deficit": {
"label": "Pénalité pour les courtes reprises du travail",
"help": "Chaque reprise de 1 à 4 jours travaillés entre congés ajoute les jours manquants pour atteindre 5. Moins, c’est mieux."
},
"supporting-placements": {
"label": "Jours utilisés sur des soldes expirant plus tard",
"help": "Congés qui pourraient être conservés au-delà de la période planifiée. Moins, c’est mieux."
},
"balance-expiry": {
"label": "Soldes expirant le plus tôt d’abord",
"help": "Départage lorsque les totaux précédents sont égaux."
},
"placement-date": {
"label": "Dates les plus proches d’abord",
"help": "Dernier départage lorsque tous les autres critères sont égaux."
},
"optimization": {
"label": "{rule}: {summary}",
"help": "Cette préférence d’optimisation évalue sa configuration enregistrée. Les préférences actives suivent l’ordre affiché ; les premières passent avant les suivantes."
}
},
"stages": {
"validation": "Vérifier les soldes et les règles",
"obligations": "Respecter les règles obligatoires",
"at-risk": "Utiliser les congés avant leur expiration",
"expiry": "Privilégier les soldes expirant bientôt",
"dates": "Privilégier les dates les plus proches"
},
"unavailable": {
"non-working": "C’est déjà un jour de repos (week-end ou jour férié). Aucun congé à poser.",
"occupied": "Un autre congé est déjà prévu ici. Choisissez un jour travaillé libre.",
"unavailable": "Ce solde de congés ne peut pas être utilisé à cette date.",
"expired": "Cette date dépasse la date d’expiration du solde.",
"type-incompatible": "Ce type de congé ne peut pas être utilisé à cette date.",
"rule-invalid": "Utiliser cette date ne respecterait pas une règle du planning.",
"invalid-optimization-configuration": "Choisissez des éléments, conditions, une mesure et une agrégation compatibles, avec un seuil entier positif si nécessaire.",
"unsupported-optimization-configuration": "Cette règle combine des éléments du planning et des mesures incompatibles."
},
"preferenceHelp": {
"time_window": "Jours de congé dans cette période souhaitée. Plus, c’est mieux.",
"if_then": "Occurrences complètes de cette règle. Plus, c’est mieux."
}
},
"details": {
"intro": "La colonne de gauche montre le planning sans ce jour de congé. Celle de droite montre le planning actuel.",
"balance": "Solde de congés",
"available": "Disponible à partir du",
"expires": "Expire le",
"criteria": "Les priorités du calcul",
"criteriaHelp": "Lisez de haut en bas : la première différence est prioritaire. Sélectionnez un critère pour comprendre son calcul.",
"firstDifference": "Première différence",
"higher": "Plus, c’est mieux",
"lower": "Moins, c’est mieux",
"tieBreaks": "Si les totaux ci-dessus sont égaux",
"audit": "Données brutes · débogage",
"auditHelp": "Valeurs, identifiants et contributions d’origine de ce calcul.",
"supporting": "Ce jour utilise des congés qui pourraient être conservés au-delà de la période planifiée pour améliorer vos pauses.",
"remainingReasons": {
"unavoidable-expiry": "Expiré le {expiry}, avant le début du planning le {start}. Il ne peut pas être posé dans cette période.",
"available-after-horizon": "Disponible seulement à partir du {available}, après la dernière date du planning, le {end}.",
"no-working-date": "Aucun jour ouvré ne se trouve à la fois dans la période planifiée et entre ses dates de disponibilité et d’expiration.",
"all-dates-occupied": "Tous les jours ouvrés où ce solde est utilisable sont déjà occupés par des congés calculés ou des jours déjà posés.",
"preserved": "Conservé pour plus tard : il expire après la période planifiée et le calcul n’a pas retenu de pose supplémentaire selon vos priorités.",
"active-priorities": "Le calcul a conservé ce solde inutilisé selon vos règles actives. Modifiez les règles ou leur ordre pour demander un autre planning.",
"calculation-incomplete": "Le calcul a été interrompu avant de terminer la planification. Sa non-utilisation n’est pas une décision définitive.",
"not-established": "La raison précise de sa non-utilisation n’a pas été établie par ce calcul."
}
},
"comparison": {
"title": "Comparer les dates",
"preview": "Simulation uniquement. Votre planning reste inchangé.",
"nearby": "Dates proches disponibles",
"noAlternatives": "Aucune autre date ne permet de poser ce jour. Vous pouvez vérifier une date pour comprendre pourquoi.",
"chooseDate": "Choisissez une date ci-dessus pour voir ce qui changerait.",
"dateRange": "Période planifiée :",
"invalidDate": "Choisissez une date valide dans la période indiquée ci-dessus.",
"changes": "Ce qui changerait",
"available": "Date disponible",
"unavailable": "Cette date ne peut pas être utilisée",
"backToPlan": "Revenir à mon planning"
}
},
"benchmark": {
"title": "Benchmark du planificateur de congés",
"instructions": "Lancez les cinq scénarios fixes et copiez le rapport obtenu.",
"run": "Lancer le benchmark",
"running": "En cours…",
"copy": "Copier le rapport"
},
"loading": "Calcul en cours...",
"weekdaysShort": ["L", "M", "M", "J", "V", "S", "D"]
}