UI improvments

This commit is contained in:
nessar committed 2026-10-02 15:05:30 +02:00
1 parent c9dbe82b79
commit 0ce33cc9d6
106 files changed
+72934 -1675

No files matched your search

+134 -26
View File
@@ -2,7 +2,8 @@
"locale": "de-DE",
"app": {
"title": "vac-optimizer",
"description": "Optimieren Sie Ihre Urlaubstage basierend auf Feiertagen und Wochenenden!"
"description": "Mehr Raum für freie Zeit.",
"skipToPlan": "Zum Urlaubsplan"
},
"userInput": {
"title": "Urlaub konfigurieren",
@@ -52,7 +53,9 @@
"active": "aktiv",
"moveRuleUp": "Regel nach oben verschieben",
"moveRuleDown": "Regel nach unten verschieben",
"priorityInfo": "Regeln werden von oben nach unten angewendet",
"dragRule": "Zum Verschieben ziehen",
"ruleMoved": "{name}: Position {position} von {count}.",
"priorityInfo": "Die obersten Regeln haben Vorrang. Mit dem Griff oder den Pfeiltasten umsortieren.",
"ifThenTemplate": "Wenn {type} dann {placement}",
"timeWindowTemplate": "Zeitfenster {startDate} bis {endDate}",
"editRule": "Regel bearbeiten",
@@ -105,9 +108,9 @@
"incomplete": "Die Berechnung wurde vor Abschluss aller Qualitätsstufen beendet.",
"error": "Bei der Planung ist ein unerwarteter Fehler aufgetreten.",
"complete": "Plan berechnet.",
"whyPlacement": "Warum diese Platzierung",
"whyPlacement": "Ihre Urlaubstage verstehen",
"placementNavigation": "Navigation der Platzierungserklärungen",
"placement": "Platzierung",
"placement": "Urlaubstag",
"placements": "Platzierungen",
"decision": "Entscheidung",
"of": "von",
@@ -115,28 +118,8 @@
"previous": "Vorherige Platzierung",
"next": "Nächste Platzierung",
"last": "Letzte Platzierung",
"balance": "Anspruch",
"rules": "Regeln",
"noRules": "Keine Regel",
"supporting": "Unterstützende Platzierung",
"yes": "Ja",
"no": "Nein",
"remaining": "Verbleibender Anspruch nach der Platzierung",
"timeOffPeriod": "Freizeitzeitraum",
"firstDecisive": "Erstes entscheidendes Ziel",
"contributions": "Beiträge",
"objectiveVector": "Vollständiger Zielvektor",
"finalMetrics": "Kennzahlen des endgültigen Plans",
"unplacedAtRisk": "Nicht platzierter gefährdeter Urlaub",
"holidayWeekValue": "Wert der Feiertagswochen",
"shortSequenceDeficit": "Defizit kurzer Arbeitsfolgen",
"supportingPlacements": "Unterstützende Platzierungen",
"preferenceSatisfaction": "Erfüllung der Präferenzen",
"removedRestoredComparison": "Platzierung entfernt und wiederhergestellt",
"fullComparison": "Vollständige Zielvektoren vorher und nachher",
"comparisonHelp": "Vergleich des endgültigen Plans ohne diese Platzierung und nach ihrer Wiederherstellung.",
"remaining": "Ungenutzte Tage im endgültigen Plan",
"counterfactual": "Alternative Termine",
"hypothetical": "Nur hypothetisch: Der optimierte Plan bleibt unverändert. Wählen Sie ein Datum im Horizont aus.",
"counterfactualLoading": "Alle Daten im Horizont werden analysiert…",
"counterfactualReady": "Alternative Termine sind bereit.",
"counterfactualError": "Alternative Termine konnten nicht berechnet werden.",
@@ -178,7 +161,6 @@
"nextCandidates": "Nächste Kandidatenseite",
"page": "Seite",
"compareAlternatives": "Diesen Kandidaten im gesamten Horizont vergleichen",
"tieBreak": "Entscheidungskriterium",
"deltas": "Zustandsänderungen",
"activations": "erworbene Aktivierungen",
"noDecisions": "Diese Phase enthält keine atomare Entscheidung.",
@@ -201,6 +183,132 @@
"removed": "Durch diese Entscheidung entfernt",
"shared": "Durch diese Entscheidung geteilt",
"unchanged": "Durch diese Entscheidung unverändert"
},
"calendarHelp": "Wählen Sie einen Urlaubstag, um seinen Beitrag zum Plan zu sehen.",
"explanationHelp": "Sehen Sie Ihre Auszeit und den Beitrag jedes Tages.",
"traceHelp": "Erkunden Sie die Berechnung, Entscheidung für Entscheidung.",
"technicalDetails": "Berechnungsdetails",
"compareDates": "Andere Termine vergleichen",
"stopComparing": "Datumsvergleich schließen",
"replayNotice": "Sie sehen einen Berechnungsschritt.",
"explanation": {
"breakTitle": "Ihre Auszeit",
"leaveDays": "eingesetzte Urlaubstage",
"freeDays": "Wochenend- und Feiertage",
"daysOff": "freie Tage am Stück",
"wholeBreak": "Diese Zahlen gelten für die gesamte Auszeit einschließlich des ausgewählten Tages.",
"leaveUsed": "Dieses Datum nutzt 1 Tag aus „{balance}“.",
"expires": "Dieses Guthaben ist nutzbar bis",
"linkedRules": "Zugehörige Regeln:",
"impact": "Was dieser Tag verändert",
"impactHelp": "Vergleichen Sie den gesamten Plan mit und ohne diesen Urlaubstag. Alle anderen Urlaubstermine bleiben gleich; nur geänderte Werte werden angezeigt.",
"criterion": "Im gesamten Plan",
"withoutDay": "Ohne diesen Tag",
"withDay": "Mit diesem Tag",
"noChange": "Diese Werte sind gleich. Regeln und die letzten Entscheidungskriterien (Verfall des Guthabens, dann Datum) können die Auswahl weiterhin beeinflussen.",
"priorityHelp": "Die Kriterien stehen in Prioritätsreihenfolge. Der erste Unterschied hat Vorrang vor den folgenden.",
"tryDate": "Anderes Datum testen",
"plannedDate": "Derzeit geplant für:",
"currentPlan": "Aktueller Plan",
"alternative": "Mit diesem Datum",
"sameDate": "Dies ist das geplante Datum. Wählen Sie oben ein anderes Datum, um den Unterschied zu sehen.",
"moveHelp": "Verschieben Sie probeweise diesen Tag. Alle anderen Urlaubstermine bleiben gleich.",
"traceHelp": "Vergleichen Sie diesen Kandidaten mit dem Zustand vor seiner ursprünglichen Entscheidung.",
"beforeDecision": "Vor dieser Entscheidung",
"withCandidate": "Mit diesem Kandidaten",
"comparisonUnavailable": "Der Vergleich für das ursprüngliche Datum ist nicht verfügbar. Daher lässt sich die Änderung nicht anzeigen.",
"objectives": {
"unplaced-at-risk": {
"label": "Noch nicht genutzte Tage mit Verfallsrisiko",
"help": "Ungenutzte Tage, die im Planungszeitraum verfallen. Weniger ist besser."
},
"preference": {
"label": "Präferenz: {rule}",
"help": "Tage oder vollständig erfüllte Regeln, je nach Regel. Mehr ist besser."
},
"holiday-week-value": {
"label": "Priorität für Feiertagswochen (Punkte)",
"help": "Gewichteter Wert: Feiertage am Mittwoch zählen 3, Dienstag/Donnerstag 2, Montag/Freitag 1. Höher ist besser."
},
"non-working-day-gain": {
"label": "Wochenend- und Feiertage in Ihren Auszeiten",
"help": "Freie Tage ohne Urlaubsverbrauch. Mehr ist besser."
},
"longest-work-sequence": {
"label": "Meiste Arbeitstage zwischen Urlaubstagen",
"help": "Wochenenden und Feiertage zählen nicht mit. Weniger ist besser."
},
"short-sequence-deficit": {
"label": "Abzug für kurze Arbeitsphasen",
"help": "Jede Lücke von 1–4 Arbeitstagen zwischen Urlaubstagen addiert die bis 5 fehlenden Tage. Niedriger ist besser."
},
"supporting-placements": {
"label": "Tage aus später verfallenden Guthaben",
"help": "Urlaub, der über diesen Planungszeitraum hinaus aufgespart werden könnte. Weniger ist besser."
},
"balance-expiry": {
"label": "Früher verfallenden Urlaub zuerst nutzen",
"help": "Entscheidet bei gleichen Werten der vorherigen Kriterien."
},
"placement-date": {
"label": "Frühere Daten bevorzugen",
"help": "Letztes Kriterium, wenn alle anderen Kriterien gleich sind."
}
},
"stages": {
"validation": "Guthaben und Regeln prüfen",
"obligations": "Pflichtregeln erfüllen",
"at-risk": "Urlaub vor dem Verfall nutzen",
"expiry": "Früher verfallenden Urlaub bevorzugen",
"dates": "Frühere Daten bevorzugen"
},
"unavailable": {
"non-working": "Dieser Tag ist bereits frei (Wochenende oder Feiertag). Urlaub ist nicht nötig.",
"occupied": "Hier ist bereits ein anderer Urlaubstag geplant. Wählen Sie einen freien Arbeitstag.",
"unavailable": "Dieses Urlaubsguthaben kann an diesem Datum nicht verwendet werden.",
"expired": "Dieses Datum liegt nach dem Verfall des Urlaubsguthabens.",
"type-incompatible": "Diese Urlaubsart kann an diesem Datum nicht verwendet werden.",
"rule-invalid": "Dieses Datum würde eine Planungsregel verletzen."
},
"preferenceHelp": {
"time_window": "Urlaubstage im bevorzugten Zeitraum. Mehr ist besser.",
"if_then": "Vollständig erfüllte Vorkommen dieser Regel. Mehr ist besser."
}
},
"details": {
"intro": "Die linke Spalte zeigt den Plan ohne diesen Urlaubstag. Die rechte zeigt den aktuellen Plan.",
"balance": "Urlaubsguthaben",
"available": "Verfügbar ab",
"expires": "Verfällt am",
"criteria": "Die Prioritäten des Planers",
"criteriaHelp": "Von oben nach unten lesen: Der erste Unterschied hat Vorrang. Wählen Sie ein Kriterium, um seine Berechnung zu sehen.",
"firstDifference": "Erster Unterschied",
"higher": "Höher ist besser",
"lower": "Niedriger ist besser",
"tieBreaks": "Wenn die obigen Werte gleich sind",
"audit": "Rohdaten · zur Fehlersuche",
"auditHelp": "Ursprüngliche Werte, Kennungen und Beiträge aus dieser Berechnung.",
"supporting": "Dieser Tag nutzt Urlaub, der über den Planungszeitraum hinaus aufgespart werden könnte, um Ihre Auszeiten zu verbessern.",
"remainingReasons": {
"at-risk": "Diese ungenutzten Tage verfallen im Planungszeitraum.",
"deferred": "Diese ungenutzten Tage können über den Planungszeitraum hinaus aufgespart werden.",
"unavoidable-expiry": "Diese Tage sind vor Beginn des Planungszeitraums verfallen."
}
},
"comparison": {
"title": "Daten vergleichen",
"candidate": "Datum des Kandidaten",
"preview": "Nur eine Vorschau. Ihr Plan bleibt unverändert.",
"nearby": "Verfügbare Termine in der Nähe",
"noAlternatives": "Dieser Urlaubstag kann auf kein anderes Datum gelegt werden. Sie können trotzdem ein Datum prüfen, um den Grund zu sehen.",
"chooseDate": "Wählen Sie oben ein Datum, um die Änderungen zu sehen.",
"dateRange": "Planungszeitraum:",
"invalidDate": "Wählen Sie ein gültiges Datum im oben angegebenen Planungszeitraum.",
"changes": "Was sich ändern würde",
"available": "Verfügbares Datum",
"unavailable": "Dieses Datum ist nicht möglich",
"backToPlan": "Zurück zu meinem Plan",
"backToTrace": "Zurück zur Berechnung"
}
},
"benchmark": {
+134 -26
View File
@@ -2,7 +2,8 @@
"locale": "en-GB",
"app": {
"title": "vac-optimizer",
"description": "Optimize your vacation days based on holidays and weekends!"
"description": "Make more room for time off.",
"skipToPlan": "Skip to your plan"
},
"userInput": {
"title": "Configure your leave",
@@ -52,7 +53,9 @@
"active": "active",
"moveRuleUp": "Move rule up",
"moveRuleDown": "Move rule down",
"priorityInfo": "The order of rules defines their execution priority (from top to bottom). Drag and drop to reorder.",
"dragRule": "Drag to reorder",
"ruleMoved": "{name}: position {position} of {count}.",
"priorityInfo": "Rules at the top have higher priority. Reorder with the handle or arrow buttons.",
"ifThenTemplate": "If a holiday falls on a <strong>{day}</strong>, place <strong>{placeDays}</strong> day(s) <strong>{placeType}</strong> <strong>{placement}</strong> and get <strong>{rewardDays}</strong> day(s) <strong>{rewardType}</strong> as a bonus.",
"timeWindowTemplate": "Place <strong>{placeDays}</strong> day(s) <strong>{placeType}</strong> between <strong>{startDate}</strong> and <strong>{endDate}</strong>.",
"editRule": "Edit rule",
@@ -105,9 +108,9 @@
"incomplete": "Calculation stopped before all quality stages completed.",
"error": "The planner encountered an unexpected error.",
"complete": "Plan calculated.",
"whyPlacement": "Why this placement",
"whyPlacement": "Understand your leave days",
"placementNavigation": "Placement explanation navigation",
"placement": "Placement",
"placement": "Leave day",
"placements": "placements",
"decision": "Decision",
"of": "of",
@@ -115,28 +118,8 @@
"previous": "Previous placement",
"next": "Next placement",
"last": "Last placement",
"balance": "Entitlement",
"rules": "Rules",
"noRules": "No rule",
"supporting": "Supporting placement",
"yes": "Yes",
"no": "No",
"remaining": "Remaining entitlement after placement",
"timeOffPeriod": "Time-off period",
"firstDecisive": "First decisive objective",
"contributions": "Contributions",
"objectiveVector": "Full objective vector",
"finalMetrics": "Final plan metrics",
"unplacedAtRisk": "Unplaced at-risk leave",
"holidayWeekValue": "Public-holiday week value",
"shortSequenceDeficit": "Short work-sequence deficit",
"supportingPlacements": "Supporting placements",
"preferenceSatisfaction": "Preference satisfaction",
"removedRestoredComparison": "Placement removed and restored",
"fullComparison": "Full before-and-after objective vectors",
"comparisonHelp": "This compares the final plan without this placement with the final plan after restoring it.",
"remaining": "Unused days in the final plan",
"counterfactual": "Date alternatives",
"hypothetical": "Hypothetical only: the optimized plan is unchanged. Select any date in the horizon to inspect it.",
"counterfactualLoading": "Analyzing every date in the horizon…",
"counterfactualReady": "Date alternatives are ready.",
"counterfactualError": "Date alternatives could not be calculated.",
@@ -178,7 +161,6 @@
"nextCandidates": "Next candidate page",
"page": "Page",
"compareAlternatives": "Compare this candidate across the horizon",
"tieBreak": "Tie-break",
"deltas": "State changes",
"activations": "earned activations",
"noDecisions": "This phase recorded no atomic decision.",
@@ -201,6 +183,132 @@
"removed": "Removed by this decision",
"shared": "Shared by this decision",
"unchanged": "Unchanged by this decision"
},
"calendarHelp": "Select a leave day to see its contribution to your plan.",
"explanationHelp": "See the break you get and what each day changes.",
"traceHelp": "Explore the calculation, decision by decision.",
"technicalDetails": "Calculation details",
"compareDates": "Compare other dates",
"stopComparing": "Close date comparison",
"replayNotice": "You are viewing a calculation step.",
"explanation": {
"breakTitle": "Your break",
"leaveDays": "leave days used",
"freeDays": "weekend & holiday days",
"daysOff": "days off in a row",
"wholeBreak": "These totals cover the whole break, including the selected day.",
"leaveUsed": "This date uses 1 day from {balance}.",
"expires": "Use this balance by",
"linkedRules": "Linked rules:",
"impact": "What this day changes",
"impactHelp": "Compare the whole plan with and without this day of leave. All other leave dates stay the same; only changed totals are shown.",
"criterion": "Across your plan",
"withoutDay": "Without this day",
"withDay": "With this day",
"noChange": "These totals are unchanged. Rules and the final tie-breakers (balance expiry, then date) can still affect the choice.",
"priorityHelp": "Criteria are listed in priority order. The first difference takes precedence over later ones.",
"tryDate": "Try another date",
"plannedDate": "Currently planned for:",
"currentPlan": "Current plan",
"alternative": "With this date",
"sameDate": "This is the planned date. Choose another date above to see the difference.",
"moveHelp": "Try moving this one day. All other leave dates stay the same.",
"traceHelp": "Test this candidate against the state before its original decision.",
"beforeDecision": "Before this decision",
"withCandidate": "With this candidate",
"comparisonUnavailable": "The comparison for the original date is unavailable, so the change cannot be shown.",
"objectives": {
"unplaced-at-risk": {
"label": "Leave left at risk of expiry",
"help": "Unused days expiring within the planning period. Fewer is better."
},
"preference": {
"label": "Preference: {rule}",
"help": "Days or complete rule matches, depending on the rule. More is better."
},
"holiday-week-value": {
"label": "Holiday-week priority (points)",
"help": "Weighted score: Wednesday holidays count 3, Tuesday/Thursday 2, Monday/Friday 1. Higher is better."
},
"non-working-day-gain": {
"label": "Weekend & holiday days in your breaks",
"help": "Days off that use no leave. More is better."
},
"longest-work-sequence": {
"label": "Most working days between leave days",
"help": "Weekends and public holidays are not counted. Fewer is better."
},
"short-sequence-deficit": {
"label": "Penalty for short work gaps",
"help": "Each gap of 1–4 working days between leave days adds the days missing to reach 5. Lower is better."
},
"supporting-placements": {
"label": "Days used from later-expiring balances",
"help": "Leave that could be saved beyond this planning period. Fewer is better."
},
"balance-expiry": {
"label": "Earlier-expiring leave first",
"help": "Tie-breaker when the totals above are equal."
},
"placement-date": {
"label": "Earlier dates first",
"help": "Final tie-breaker when all other criteria are equal."
}
},
"stages": {
"validation": "Check balances and rules",
"obligations": "Meet required rules",
"at-risk": "Use leave before it expires",
"expiry": "Prefer earlier-expiring leave",
"dates": "Prefer earlier dates"
},
"unavailable": {
"non-working": "This is already a day off (weekend or public holiday). No leave is needed.",
"occupied": "Another leave day is already planned here. Choose a free working day.",
"unavailable": "This leave balance cannot be used on this date.",
"expired": "This date is after the leave balance expires.",
"type-incompatible": "This leave type cannot be used on this date.",
"rule-invalid": "Using this date would break a planning rule."
},
"preferenceHelp": {
"time_window": "Leave days in this preferred period. More is better.",
"if_then": "Complete matches for this rule. More is better."
}
},
"details": {
"intro": "The left column shows the plan without this leave day. The right shows the current plan.",
"balance": "Leave balance",
"available": "Available from",
"expires": "Expires on",
"criteria": "The planner’s priorities",
"criteriaHelp": "Read from top to bottom: the first difference takes priority. Select a criterion to see how it is calculated.",
"firstDifference": "First difference",
"higher": "Higher is better",
"lower": "Lower is better",
"tieBreaks": "If the totals above are equal",
"audit": "Raw data · for debugging",
"auditHelp": "Original values, identifiers and contributions from this calculation.",
"supporting": "This day uses leave that could be saved beyond the planning period to improve your breaks.",
"remainingReasons": {
"at-risk": "These unused days expire during the planning period.",
"deferred": "These unused days can be saved beyond the planning period.",
"unavoidable-expiry": "These days expired before the planning period began."
}
},
"comparison": {
"title": "Compare dates",
"candidate": "Candidate date",
"preview": "Preview only. Your plan stays unchanged.",
"nearby": "Nearby available dates",
"noAlternatives": "No other date can use this leave day. You can still check a date to see why.",
"chooseDate": "Choose a date above to see what would change.",
"dateRange": "Planning period:",
"invalidDate": "Choose a valid date within the planning period shown above.",
"changes": "What would change",
"available": "Available date",
"unavailable": "This date can’t be used",
"backToPlan": "Back to my plan",
"backToTrace": "Back to the calculation"
}
},
"benchmark": {
+134 -26
View File
@@ -2,7 +2,8 @@
"locale": "es-ES",
"app": {
"title": "vac-optimizer",
"description": "¡Optimice sus días de vacaciones según los días festivos y los fines de semana!"
"description": "Más espacio para descansar.",
"skipToPlan": "Ir a tu plan"
},
"userInput": {
"title": "Configura tus vacaciones",
@@ -52,7 +53,9 @@
"active": "activas",
"moveRuleUp": "Subir regla",
"moveRuleDown": "Bajar regla",
"priorityInfo": "El orden de las reglas define su prioridad de ejecución (de arriba a abajo). Arrastre y suelte para reorganizar.",
"dragRule": "Arrastrar para reordenar",
"ruleMoved": "{name}: posición {position} de {count}.",
"priorityInfo": "Las reglas de arriba tienen prioridad. Reordénalas con el tirador o las flechas.",
"ifThenTemplate": "Si un día festivo cae en <strong>{day}</strong>, colocar <strong>{placeDays}</strong> día(s) <strong>{placeType}</strong> <strong>{placement}</strong> y obtener <strong>{rewardDays}</strong> día(s) <strong>{rewardType}</strong> de bonificación.",
"timeWindowTemplate": "Colocar <strong>{placeDays}</strong> día(s) <strong>{placeType}</strong> entre el <strong>{startDate}</strong> y el <strong>{endDate}</strong>.",
"editRule": "Editar regla",
@@ -105,9 +108,9 @@
"incomplete": "El cálculo se detuvo antes de completar todas las etapas de calidad.",
"error": "El planificador encontró un error inesperado.",
"complete": "Plan calculado.",
"whyPlacement": "Por qué esta asignación",
"whyPlacement": "Entender tus días de permiso",
"placementNavigation": "Navegación por las explicaciones de las asignaciones",
"placement": "Asignación",
"placement": "Día de permiso",
"placements": "asignaciones",
"decision": "Decisión",
"of": "de",
@@ -115,28 +118,8 @@
"previous": "Asignación anterior",
"next": "Asignación siguiente",
"last": "Última asignación",
"balance": "Derecho",
"rules": "Reglas",
"noRules": "Sin regla",
"supporting": "Asignación de apoyo",
"yes": "Sí",
"no": "No",
"remaining": "Derecho restante tras la asignación",
"timeOffPeriod": "Período de descanso",
"firstDecisive": "Primer objetivo decisivo",
"contributions": "Contribuciones",
"objectiveVector": "Vector completo de objetivos",
"finalMetrics": "Métricas del plan final",
"unplacedAtRisk": "Vacaciones en riesgo sin asignar",
"holidayWeekValue": "Valor de semanas con festivos",
"shortSequenceDeficit": "Déficit de secuencias cortas de trabajo",
"supportingPlacements": "Asignaciones de apoyo",
"preferenceSatisfaction": "Satisfacción de preferencias",
"removedRestoredComparison": "Asignación eliminada y restaurada",
"fullComparison": "Vectores de objetivos completos antes y después",
"comparisonHelp": "Compara el plan final sin esta asignación y después de restaurarla.",
"remaining": "Días sin usar en el plan final",
"counterfactual": "Fechas alternativas",
"hypothetical": "Solo hipotético: el plan optimizado no cambia. Selecciona una fecha del horizonte para inspeccionarla.",
"counterfactualLoading": "Analizando cada fecha del horizonte…",
"counterfactualReady": "Las fechas alternativas están listas.",
"counterfactualError": "No se pudieron calcular las fechas alternativas.",
@@ -178,7 +161,6 @@
"nextCandidates": "Página de candidatos siguiente",
"page": "Página",
"compareAlternatives": "Comparar este candidato en todo el horizonte",
"tieBreak": "Desempate",
"deltas": "Cambios de estado",
"activations": "activaciones obtenidas",
"noDecisions": "Esta fase no registró ninguna decisión atómica.",
@@ -201,6 +183,132 @@
"removed": "Eliminado por esta decisión",
"shared": "Compartido por esta decisión",
"unchanged": "Sin cambios por esta decisión"
},
"calendarHelp": "Selecciona un día de permiso para ver su aportación al plan.",
"explanationHelp": "Consulta tu descanso y qué cambia con cada día.",
"traceHelp": "Explora el cálculo, decisión a decisión.",
"technicalDetails": "Detalles del cálculo",
"compareDates": "Comparar otras fechas",
"stopComparing": "Cerrar comparación",
"replayNotice": "Estás viendo un paso del cálculo.",
"explanation": {
"breakTitle": "Tu descanso",
"leaveDays": "días de permiso usados",
"freeDays": "días de fin de semana y festivos",
"daysOff": "días libres seguidos",
"wholeBreak": "Estos totales corresponden a todo el descanso, incluido el día seleccionado.",
"leaveUsed": "Esta fecha usa 1 día del saldo «{balance}».",
"expires": "Usa este saldo hasta el",
"linkedRules": "Reglas vinculadas:",
"impact": "Qué cambia con este día",
"impactHelp": "Compara todo el plan con y sin este día de permiso. Las demás fechas no cambian; solo se muestran los totales que varían.",
"criterion": "En todo tu plan",
"withoutDay": "Sin este día",
"withDay": "Con este día",
"noChange": "Estos totales son iguales. Las reglas y los últimos criterios de desempate (vencimiento del saldo y después fecha) aún pueden influir en la elección.",
"priorityHelp": "Los criterios se muestran por prioridad. La primera diferencia prevalece sobre las siguientes.",
"tryDate": "Probar otra fecha",
"plannedDate": "Fecha prevista actualmente:",
"currentPlan": "Plan actual",
"alternative": "Con esta fecha",
"sameDate": "Esta es la fecha prevista. Elige otra fecha arriba para ver la diferencia.",
"moveHelp": "Prueba a mover este día. Las demás fechas de permiso no cambian.",
"traceHelp": "Compara este candidato con el estado anterior a su decisión original.",
"beforeDecision": "Antes de esta decisión",
"withCandidate": "Con este candidato",
"comparisonUnavailable": "La comparación de la fecha original no está disponible, por lo que no se puede mostrar el cambio.",
"objectives": {
"unplaced-at-risk": {
"label": "Días sin usar que podrían vencer",
"help": "Días sin planificar que vencen durante el período. Menos es mejor."
},
"preference": {
"label": "Preferencia: {rule}",
"help": "Días o coincidencias completas, según la regla. Más es mejor."
},
"holiday-week-value": {
"label": "Prioridad de semanas con festivos (puntos)",
"help": "Puntuación ponderada: festivos en miércoles valen 3, martes/jueves 2 y lunes/viernes 1. Más es mejor."
},
"non-working-day-gain": {
"label": "Fines de semana y festivos en tus descansos",
"help": "Días libres sin gastar permisos. Más es mejor."
},
"longest-work-sequence": {
"label": "Máximo de días laborables entre permisos",
"help": "No se cuentan fines de semana ni festivos. Menos es mejor."
},
"short-sequence-deficit": {
"label": "Penalización por tramos cortos de trabajo",
"help": "Cada tramo de 1–4 días laborables entre permisos suma los días que faltan para llegar a 5. Menos es mejor."
},
"supporting-placements": {
"label": "Días usados de saldos que vencen más tarde",
"help": "Permisos que podrían guardarse más allá de este período. Menos es mejor."
},
"balance-expiry": {
"label": "Primero los permisos que vencen antes",
"help": "Desempate cuando los totales anteriores son iguales."
},
"placement-date": {
"label": "Primero las fechas más tempranas",
"help": "Último desempate cuando los demás criterios son iguales."
}
},
"stages": {
"validation": "Comprobar saldos y reglas",
"obligations": "Cumplir las reglas obligatorias",
"at-risk": "Usar los permisos antes de que venzan",
"expiry": "Preferir los permisos que vencen antes",
"dates": "Preferir las fechas más tempranas"
},
"unavailable": {
"non-working": "Ya es un día libre (fin de semana o festivo). No hace falta pedir permiso.",
"occupied": "Ya hay otro permiso previsto aquí. Elige un día laborable disponible.",
"unavailable": "Este saldo de permisos no se puede usar en esta fecha.",
"expired": "Esta fecha es posterior al vencimiento del saldo.",
"type-incompatible": "Este tipo de permiso no se puede usar en esta fecha.",
"rule-invalid": "Usar esta fecha incumpliría una regla del plan."
},
"preferenceHelp": {
"time_window": "Días de permiso dentro del período preferido. Más es mejor.",
"if_then": "Coincidencias completas de esta regla. Más es mejor."
}
},
"details": {
"intro": "La columna izquierda muestra el plan sin este día de permiso. La derecha muestra el plan actual.",
"balance": "Saldo de permisos",
"available": "Disponible desde",
"expires": "Vence el",
"criteria": "Las prioridades del cálculo",
"criteriaHelp": "Lee de arriba abajo: la primera diferencia tiene prioridad. Selecciona un criterio para ver cómo se calcula.",
"firstDifference": "Primera diferencia",
"higher": "Más es mejor",
"lower": "Menos es mejor",
"tieBreaks": "Si los totales anteriores son iguales",
"audit": "Datos sin procesar · depuración",
"auditHelp": "Valores, identificadores y contribuciones originales de este cálculo.",
"supporting": "Este día usa permisos que podrían guardarse más allá del período planificado para mejorar tus descansos.",
"remainingReasons": {
"at-risk": "Estos días sin usar vencen durante el período planificado.",
"deferred": "Estos días sin usar pueden guardarse más allá del período planificado.",
"unavoidable-expiry": "Estos días vencieron antes del inicio del período planificado."
}
},
"comparison": {
"title": "Comparar fechas",
"candidate": "Fecha del candidato",
"preview": "Solo una vista previa. Tu plan no cambia.",
"nearby": "Fechas cercanas disponibles",
"noAlternatives": "No hay otra fecha disponible para este día de permiso. Puedes comprobar una fecha para ver el motivo.",
"chooseDate": "Elige una fecha arriba para ver qué cambiaría.",
"dateRange": "Período planificado:",
"invalidDate": "Elige una fecha válida dentro del período indicado arriba.",
"changes": "Qué cambiaría",
"available": "Fecha disponible",
"unavailable": "Esta fecha no se puede usar",
"backToPlan": "Volver a mi plan",
"backToTrace": "Volver al cálculo"
}
},
"benchmark": {
+134 -26
View File
@@ -2,7 +2,8 @@
"locale": "fr-FR",
"app": {
"title": "vac-optimizer",
"description": "Optimisez vos jours de vacances en fonction des jours fériés et des week-ends !"
"description": "Faites plus de place aux vacances.",
"skipToPlan": "Aller à votre planning"
},
"userInput": {
"title": "Configurez vos congés",
@@ -52,7 +53,9 @@
"active": "actives",
"moveRuleUp": "Monter la règle",
"moveRuleDown": "Descendre la règle",
"priorityInfo": "L'ordre des règles définit leur priorité d'exécution (de haut en bas). Glissez-déposez pour réorganiser.",
"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 <strong>{day}</strong>, placer <strong>{placeDays}</strong> jour(s) <strong>{placeType}</strong> <strong>{placement}</strong> et obtenir <strong>{rewardDays}</strong> jour(s) <strong>{rewardType}</strong> en bonus.",
"timeWindowTemplate": "Placer <strong>{placeDays}</strong> jour(s) <strong>{placeType}</strong> entre le <strong>{startDate}</strong> et le <strong>{endDate}</strong>.",
"editRule": "Modifier la règle",
@@ -105,9 +108,9 @@
"incomplete": "Le calcul s’est arrêté avant la fin des critères de qualité.",
"error": "Le planificateur a rencontré une erreur inattendue.",
"complete": "Plan calculé.",
"whyPlacement": "Pourquoi ce placement",
"whyPlacement": "Comprendre vos jours de congé",
"placementNavigation": "Navigation entre les explications des placements",
"placement": "Placement",
"placement": "Jour de congé",
"placements": "placements",
"decision": "Décision",
"of": "sur",
@@ -115,28 +118,8 @@
"previous": "Placement précédent",
"next": "Placement suivant",
"last": "Dernier placement",
"balance": "Droit",
"rules": "Règles",
"noRules": "Aucune règle",
"supporting": "Placement de soutien",
"yes": "Oui",
"no": "Non",
"remaining": "Droit restant après placement",
"timeOffPeriod": "Période de repos",
"firstDecisive": "Premier objectif décisif",
"contributions": "Contributions",
"objectiveVector": "Vecteur d’objectifs complet",
"finalMetrics": "Métriques du plan final",
"unplacedAtRisk": "Congés à risque non placés",
"holidayWeekValue": "Valeur des semaines fériées",
"shortSequenceDeficit": "Déficit des courtes séquences travaillées",
"supportingPlacements": "Placements de soutien",
"preferenceSatisfaction": "Satisfaction des préférences",
"removedRestoredComparison": "Placement retiré puis rétabli",
"fullComparison": "Vecteurs d’objectifs complets avant et après",
"comparisonHelp": "Comparaison du plan final sans ce placement puis après son rétablissement.",
"remaining": "Jours non utilisés dans le planning final",
"counterfactual": "Dates alternatives",
"hypothetical": "Hypothèse uniquement : le plan optimisé ne change pas. Sélectionnez une date de l’horizon pour l’inspecter.",
"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.",
@@ -178,7 +161,6 @@
"nextCandidates": "Page de candidats suivante",
"page": "Page",
"compareAlternatives": "Comparer ce candidat sur tout l’horizon",
"tieBreak": "Critère de départage",
"deltas": "Changements d’état",
"activations": "activations acquises",
"noDecisions": "Cette phase n’a enregistré aucune décision atomique.",
@@ -201,6 +183,132 @@
"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 :",
"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": {
"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.",
"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": {