{ "locale": "fr-FR", "app": { "title": "vac-optimizer", "description": "Faites plus de place aux vacances.", "skipToPlan": "Aller à votre planning" }, "userInput": { "title": "Configurez vos congés", "description": "Ajoutez chaque solde de congés et sa période de validité.", "addVacationDay": "Ajouter un solde de congés", "calculate": "Calculer le planning", "remainingDaysWarning": "{count} jour{plural} de vacances non placé{plural}:", "remainingDaysManualPlace": "Veuillez les placer manuellement.", "deleteEntry": "Supprimer l’entrée", "chooseDate": "Expire le", "availableDate": "Disponible à partir du", "days": "Jours", "type": "Type de congé", "daySuffix": "jour", "daysSuffix": "jours", "expires": "exp.", "remainingClassification": { "unavoidableExpiry": "Expiration inévitable", "atRisk": "À risque", "deferred": "Différé" }, "remainingReason": { "unavoidableExpiry": "expiré avant l’horizon", "atRisk": "expire pendant l’horizon", "deferred": "disponible après l’horizon" } }, "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": "Horizon de planification", "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 dans les paramètres 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)" } }, "planning": { "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", "decision": "Décision", "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", "historicalEligibilityLoading": "Vérification des dates utilisables pour ce congé…", "historicalEligibilityReady": "L’éligibilité historique des dates est prête.", "historicalEligibilityError": "L’éligibilité historique des dates n’a pas pu être vérifiée.", "retryHistoricalEligibility": "Revérifier l’éligibilité historique", "eligible": "Éligible", "ineligible": "Inéligible", "historical": "Statut de la recherche originale", "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", "traceTitle": "Avancé : trace des décisions originales", "traceLoading": "Le plan est prêt ; sa trace de décision est encore en cours de chargement…", "traceReady": "Le plan est prêt et sa trace de décision est chargée.", "traceUnavailable": "Aucune trace de décision n’est disponible pour ce résultat.", "phases": "Phases de la trace", "firstPhase": "Première phase", "previousPhase": "Phase précédente", "nextPhase": "Phase suivante", "lastPhase": "Dernière phase", "decisions": "Décisions atomiques", "firstDecision": "Première décision", "previousDecision": "Décision précédente", "nextDecision": "Décision suivante", "lastDecision": "Dernière décision", "replay": "État de la décision", "before": "Avant", "after": "Après", "finalPlan": "Plan final", "dates": "Dates", "candidates": "Candidats", "previousCandidates": "Page de candidats précédente", "nextCandidates": "Page de candidats suivante", "page": "Page", "compareAlternatives": "Comparer ce candidat sur tout l’horizon", "deltas": "Changements d’état", "activations": "activations acquises", "noDecisions": "Cette phase n’a enregistré aucune décision atomique.", "traceStatuses": { "chosen": "Choisi", "evaluated-rejected": "Évalué et rejeté", "pruned": "Élagué", "not-examined": "Non examiné", "ineligible": "Inéligible" }, "tracePhaseStatuses": { "completed": "Terminée", "interrupted": "Interrompue", "not-run": "Non exécutée" }, "traceChanges": { "added": "Ajouté par cette décision", "moved-from": "Déplacé depuis cette date", "moved-to": "Déplacé vers cette date", "removed": "Retiré par cette décision", "shared": "Partagé par cette décision", "unchanged": "Inchangé par cette décision" }, "calendarHelp": "Sélectionnez un jour de congé pour voir son apport au planning.", "explanationHelp": "Découvrez votre pause et ce que chaque jour change.", "traceHelp": "Explorez le calcul, décision par décision.", "technicalDetails": "Détails du calcul", "compareDates": "Comparer d’autres dates", "stopComparing": "Fermer la comparaison", "replayNotice": "Vous consultez une étape du calcul.", "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 critères sont classés par priorité. La première différence prime sur les suivantes.", "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.", "traceHelp": "Testez ce candidat par rapport à l’état précédant sa décision d’origine.", "beforeDecision": "Avant cette décision", "withCandidate": "Avec ce candidat", "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." } }, "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." }, "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.", "traceImpactTitle": "Effet de cette branche sur le plan complet", "traceImpactHelp": "Ces valeurs comparent l’état complet avant et après cette branche. Elles montrent son effet, pas pourquoi le calcul l’a choisie.", "traceStageTitle": "Comparaison réelle à cette étape", "traceStageHelp": "Ces valeurs brutes ont été comparées lors de cette décision ; la première différence explique le statut de la possibilité. Le tableau du plan complet ci-dessous montre l’effet de ce choix.", "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": { "at-risk": "Ces jours non utilisés expirent pendant la période planifiée.", "deferred": "Ces jours non utilisés peuvent être conservés au-delà de la période planifiée.", "unavoidable-expiry": "Ces jours ont expiré avant le début de la période planifiée." } }, "comparison": { "title": "Comparer les dates", "candidate": "Date du candidat", "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", "backToTrace": "Revenir au calcul" } }, "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"] }