341 lines
14 KiB
JSON
341 lines
14 KiB
JSON
{
|
||
"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 <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)"
|
||
}
|
||
},
|
||
"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"]
|
||
}
|