{ "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"] }