{
"locale": "en-GB",
"app": {
"title": "vac-optimizer",
"description": "Make more room for time off.",
"skipToPlan": "Skip to your plan"
},
"userInput": {
"title": "Configure your leave",
"description": "Add each leave balance and its validity period.",
"addVacationDay": "Add leave balance",
"calculate": "Calculate plan",
"remainingDaysWarning": "{count} vacation day{plural} not placed:",
"remainingDaysManualPlace": "Please place them manually.",
"deleteEntry": "Delete entry",
"chooseDate": "Expires on",
"availableDate": "Available from",
"days": "Days",
"type": "Leave type",
"daySuffix": "day",
"daysSuffix": "days",
"expires": "exp.",
"remainingClassification": {
"unavoidableExpiry": "Unavoidable expiry",
"atRisk": "At risk",
"deferred": "Deferred"
},
"remainingReason": {
"unavoidableExpiry": "expired before the horizon",
"atRisk": "expires within the horizon",
"deferred": "available after the horizon"
}
},
"dayTypes": {
"weekend": "Weekend",
"closedDay": "Public Holiday",
"rtt": "RTT",
"cp": "Paid Leave",
"other": "Other",
"today": "Today",
"any": "Any"
},
"settings": {
"title": "Calendar Settings",
"description": "Configure your calendar settings here.",
"showWeekNumbers": "Show week numbers",
"close": "Close",
"selectLanguage": "Language"
},
"rules": {
"title": "Planning rules",
"subtitle": "Manage optimization rules",
"active": "active",
"moveRuleUp": "Move rule up",
"moveRuleDown": "Move rule down",
"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 {day}, place {placeDays} day(s) {placeType} {placement} and get {rewardDays} day(s) {rewardType} as a bonus.",
"timeWindowTemplate": "Place {placeDays} day(s) {placeType} between {startDate} and {endDate}.",
"editRule": "Edit rule",
"deleteRule": "Delete rule",
"addRule": "Add a rule",
"place": "Place",
"ruleName": "Rule name",
"holidayFalls": "Holiday falls on a",
"days": "Days",
"type": "Type",
"position": "Position",
"getBonus": "Get as bonus",
"force": "Rule force",
"obligation": "Obligation",
"preference": "Preference",
"startDate": "Start date",
"endDate": "End date",
"cancel": "Cancel",
"save": "Save",
"add": "Add",
"addRuleButton": "Add Rule",
"newIfThenRule": "New \"If ... Then\" Rule",
"newTimeWindowRule": "New Imposed Period",
"defaultNewRuleName": "New Rule",
"defaultNewPeriodName": "New Period",
"daysOfWeek": {
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday",
"0": "Sunday"
},
"placement": {
"before": "Before",
"after": "After",
"around": "Around",
"auto": "Auto (Best choice)"
}
},
"planning": {
"title": "Your optimized year",
"daysPlaced": "Leave days placed",
"daysGained": "Non-working days gained",
"longestWorkSequence": "Longest work sequence",
"legend": "Calendar legend",
"invalidInput": "The planning input is invalid.",
"conflict": "The obligations cannot be satisfied together.",
"incomplete": "Calculation stopped before all quality stages completed.",
"error": "The planner encountered an unexpected error.",
"complete": "Plan calculated.",
"whyPlacement": "Understand your leave days",
"placementNavigation": "Placement explanation navigation",
"placement": "Leave day",
"placements": "placements",
"decision": "Decision",
"of": "of",
"first": "First placement",
"previous": "Previous placement",
"next": "Next placement",
"last": "Last placement",
"remaining": "Unused days in the final plan",
"balanceRemaining": "remaining",
"counterfactual": "Date alternatives",
"counterfactualLoading": "Analyzing every date in the horizon…",
"counterfactualReady": "Date alternatives are ready.",
"counterfactualError": "Date alternatives could not be calculated.",
"retryCounterfactual": "Retry date analysis",
"historicalEligibilityLoading": "Checking which dates this leave could use…",
"historicalEligibilityReady": "Original date eligibility is ready.",
"historicalEligibilityError": "Original date eligibility could not be checked.",
"retryHistoricalEligibility": "Retry date eligibility check",
"eligible": "Eligible",
"ineligible": "Ineligible",
"historical": "Original search status",
"reason": "Reason",
"explanationError": "The explanation could not be produced.",
"conflictDetails": "Why no plan can satisfy the obligations",
"conflictingRules": "Conflicting rules",
"bottleneck": "Bottleneck",
"incompleteDetails": "What completed before calculation stopped",
"incumbentExplanation": "This explains the best valid incumbent; later quality stages did not complete.",
"completedStages": "Completed stages",
"uncompletedStages": "Interrupted or unstarted stages",
"none": "None",
"currentPlacement": "Current explained placement",
"explainedPeriod": "Explained time-off period",
"outsideHorizon": "Context date outside the planning horizon",
"traceTitle": "Advanced: original decision trace",
"traceLoading": "The plan is ready; its decision trace is still loading…",
"traceReady": "The plan is ready and its decision trace has loaded.",
"traceUnavailable": "No decision trace is available for this result.",
"phases": "Trace phases",
"firstPhase": "First phase",
"previousPhase": "Previous phase",
"nextPhase": "Next phase",
"lastPhase": "Last phase",
"decisions": "Atomic decisions",
"firstDecision": "First decision",
"previousDecision": "Previous decision",
"nextDecision": "Next decision",
"lastDecision": "Last decision",
"replay": "Decision state",
"before": "Before",
"after": "After",
"finalPlan": "Final plan",
"dates": "Dates",
"candidates": "Candidates",
"previousCandidates": "Previous candidate page",
"nextCandidates": "Next candidate page",
"page": "Page",
"compareAlternatives": "Compare this candidate across the horizon",
"deltas": "State changes",
"activations": "earned activations",
"noDecisions": "This phase recorded no atomic decision.",
"traceStatuses": {
"chosen": "Chosen",
"evaluated-rejected": "Evaluated and rejected",
"pruned": "Pruned",
"not-examined": "Not examined",
"ineligible": "Ineligible"
},
"tracePhaseStatuses": {
"completed": "Completed",
"interrupted": "Interrupted",
"not-run": "Not run"
},
"traceChanges": {
"added": "Added by this decision",
"moved-from": "Moved from this date",
"moved-to": "Moved to this date",
"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:",
"atRiskContribution": "Protects leave at risk of expiry.",
"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": {
"obligation-validity": {
"label": "Unmet obligations",
"help": "Number of required obligations left unsatisfied. A valid plan has zero."
},
"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.",
"traceImpactTitle": "Full-plan effect of this branch",
"traceImpactHelp": "These values compare the complete state before and after this branch. They show its impact; they do not explain why the planner chose it.",
"traceStageTitle": "Actual stage comparison",
"traceStageHelp": "These raw values were compared at this decision; the first difference explains the candidate’s status. The full-plan table below shows the effect after this choice.",
"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": {
"title": "Leave planner benchmark",
"instructions": "Run the five fixed scenarios and copy the resulting report.",
"run": "Run benchmark",
"running": "Running…",
"copy": "Copy report"
},
"loading": "Calculating...",
"weekdaysShort": ["M", "T", "W", "T", "F", "S", "S"]
}