CI / policy (push) Successful in 7s
CI / validate (push) Successful in 1m15s
CI / test (push) Successful in 3m18s
CI / benchmark (push) Failing after 5m53s
CI / build (push) Successful in 1m23s
CI / security (push) Successful in 7m6s
CI / policy (pull_request) Successful in 7s
CI / validate (pull_request) Successful in 1m9s
CI / build (pull_request) Successful in 43s
CI / test (pull_request) Successful in 3m19s
CI / images (push) Successful in 3m7s
CI / required (push) Successful in 2s
CI / benchmark (pull_request) Failing after 5m28s
CI / security (pull_request) Successful in 6m37s
CI / images (pull_request) Successful in 3m18s
CI / required (pull_request) Successful in 1s
384 lines
17 KiB
JSON
384 lines
17 KiB
JSON
{
|
||
"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 <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",
|
||
"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…",
|
||
"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"]
|
||
}
|