{
"locale": "en-GB",
"bookedDays": {
"enter": "Edit already booked days",
"booked": "Already booked",
"help": "Choose CP, RTT, Other or Erase, then click or drag between dates, including across months. Release to save; Escape cancels. Each day already matching the chosen type is cleared; other days receive that type. Weekends and public holidays are skipped. Hatching marks already booked days, applied on the next calculation.",
"fixed": "Fixed user input, with no remaining balance debit or optimization decision.",
"removed": "Declaration removed",
"erase": "Erase",
"rangeSaved": "Saved already booked days: {count} ({type}).",
"rangeRemoved": "Removed declarations: {count}."
},
"app": {
"title": "vac-optimizer",
"description": "Make more room for time off.",
"skipToPlan": "Skip to your plan"
},
"userInput": {
"title": "Configure your leave",
"description": "Choose a planning period, then add each leave balance and its validity period.",
"addVacationDay": "Add leave balance",
"calculate": "Calculate plan",
"durationEstimate": "Approximate wait: {range} {unit}",
"durationUnits": {
"seconds": "s",
"minutes": "min"
},
"remainingDaysWarning": "{count} leave day{plural} remaining:",
"deleteEntry": "Delete entry",
"chooseDate": "Expires on",
"availableDate": "Available from",
"days": "Days",
"type": "Leave type",
"daySuffix": "day",
"daysSuffix": "days",
"expires": "exp.",
"remainingValidity": "Usable from {available} through {expiry}.",
"remainingHorizon": "Calculated plan from {start} through {end}.",
"remainingEarnedFrom": "Leave earned through the rule “{rule}”.",
"remainingSuggestions": {
"available-after-horizon": "You can extend the planning period beyond its availability date, then recalculate.",
"no-working-date": "Check the planning period and this balance’s validity dates.",
"all-dates-occupied": "You can extend the period if validity allows, or adjust your already booked days and rules, then recalculate.",
"preserved": "No action needed. To request its use, add a rule within its validity period, then recalculate.",
"calculation-incomplete": "Run the calculation again if you want it to finish planning."
}
},
"dayTypes": {
"weekend": "Weekend",
"closedDay": "Public Holiday",
"rtt": "RTT",
"cp": "Paid Leave",
"other": "Other",
"today": "Today",
"any": "Any"
},
"settings": {
"title": "Settings",
"description": "Changes are saved automatically.",
"showWeekNumbers": "Show week numbers",
"close": "Close",
"selectLanguage": "Language",
"selectTheme": "Theme",
"themeOptions": {
"system": "System",
"light": "Light",
"dark": "Dark"
},
"systemAppearance": "Current system appearance",
"planningHorizon": "Planning period",
"planningStart": "Start date (inclusive)",
"lastPlanningDate": "Last planning date (inclusive)",
"planningDatesHelp": "Choose any dates, including past dates. Your calendar updates when you select Calculate plan.",
"invalidDate": "Enter two valid calendar dates.",
"horizonOrder": "The last planning date must be on or after the start date.",
"invalidHorizon": "Correct the planning dates before calculating."
},
"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)"
},
"optimization": {
"newRule": "New Optimization Rule",
"defaultName": "Loss prevention",
"elementsLabel": "Planning elements",
"conditionsLabel": "Conditions (all must match)",
"measureLabel": "Measure",
"aggregationLabel": "Aggregation",
"directionLabel": "Direction",
"thresholdLabel": "Preference threshold in working days",
"thresholdSummary": "preference threshold: {count} working days",
"summary": "{direction} {aggregation}: {measure} — {elements}{conditions}.",
"invalidConfiguration": "Choose compatible planning elements, conditions, measure and aggregation, with a positive whole-day threshold when needed.",
"nameRequired": "Enter a rule name.",
"elements": {
"leave-balances": "Leave balances",
"public-holiday-weeks": "Public-holiday weeks",
"time-off-periods": "Time-off periods",
"work-sequences": "Work sequences",
"leave-placements": "Leave placements"
},
"conditions": {
"at-risk": "At risk of expiry",
"complete": "Complete",
"internal": "Internal",
"non-empty": "Non-empty",
"supporting": "Supporting"
},
"measures": {
"unplaced-quantity": "Unplaced quantity",
"public-holiday-week-value": "Public-holiday week value",
"non-working-day-gain": "Non-working-day gain",
"work-sequence-length": "Work-sequence length",
"work-sequence-deficit": "Work-sequence deficit",
"placement-count": "Placement count"
},
"aggregations": {
"sum": "Sum",
"count": "Count",
"maximum": "Maximum"
},
"directions": {
"minimize": "Minimize",
"maximize": "Maximize"
}
}
},
"planning": {
"statistics": {
"open": "Statistics",
"title": "Plan statistics",
"leaveDays": "New leave days",
"averageWorkSequence": "Average work sequence",
"averageTimeOffPeriod": "Average time-off period",
"longestTimeOffPeriod": "Longest time-off period",
"weekendConnectedHolidays": "Public holidays connected to a weekend",
"workingDays": "working days",
"calendarDays": "calendar days",
"partialPlan": "Partial plan",
"help": "Statistics for the calculated plan. Already booked days shape breaks and working stretches without consuming remaining balances.",
"earnedLeave": "Earned leave before use",
"leaveDaysUnit": "days",
"earnedLeaveByRule": "Earned leave by rule"
},
"calculationDate": "Calculation date",
"futureEntitlement": "Future entitlement generated",
"includedEntitlement": "Entitlement already included in reported balances",
"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.",
"cancel": "Cancel",
"cancelling": "Cancelling…",
"progress": {
"stages": {
"preparation": "Preparing the calendar",
"validation": "Checking your inputs",
"obligations": "Satisfying obligations",
"expiry": "Using balances that expire first",
"dates": "Settling the final dates"
},
"rule": "Applying “{rule}”",
"remaining": "About {value} {unit} left",
"overrun": "Taking longer than expected"
},
"cancelled": "Calculation cancelled",
"cancelledPartial": "Calculation cancelled — partial plan",
"error": "The planner encountered an unexpected error.",
"complete": "Plan calculated.",
"whyPlacement": "Understand your leave days",
"placementNavigation": "Placement explanation navigation",
"placement": "Leave day",
"placements": "placements",
"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",
"eligible": "Eligible",
"ineligible": "Ineligible",
"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",
"calendarHelp": "Select a leave day to see its contribution to your plan.",
"explanationHelp": "See the break you get and what each day changes.",
"technicalDetails": "Calculation details",
"compareDates": "Compare other dates",
"stopComparing": "Close date comparison",
"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": "Obligations are satisfied together. Active preferences are compared in your rule order. Only those rules drive new placements; earlier expiry and then dates break equal results.",
"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.",
"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."
},
"optimization": {
"label": "{rule}: {summary}",
"help": "This optimization preference evaluates its saved configuration. Active preferences follow the displayed order; earlier preferences win before later ones."
}
},
"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.",
"invalid-optimization-configuration": "Choose compatible planning elements, conditions, measure and aggregation, with a positive whole-day threshold when needed.",
"unsupported-optimization-configuration": "This rule uses an unsupported combination of planning elements and measures."
},
"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": {
"unavoidable-expiry": "Expired on {expiry}, before the plan starts on {start}. It cannot be placed in this period.",
"available-after-horizon": "Available only from {available}, after the last planning date, {end}.",
"no-working-date": "No working day falls within both the planning period and its availability and expiry dates.",
"all-dates-occupied": "All working days on which this balance can be used are already occupied by planned leave or already booked days.",
"preserved": "Kept for later: it expires after the planning period and the calculation retained no additional placement under your priorities.",
"active-priorities": "The calculation kept this balance unused under your active planning rules. Change the rules or their order to request a different plan.",
"calculation-incomplete": "The calculation was interrupted before planning finished. Leaving it unused is not a final decision.",
"not-established": "This calculation did not establish a precise reason for leaving it unused."
}
},
"comparison": {
"title": "Compare dates",
"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"
}
},
"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"]
}