Files
vac-optimizer/src/i18n/de.json
T
nessarandClaude Opus 5.5 58be749949 feat(planning): follow the indicative wait in calculation progress
The overlay percentage now rises linearly to 95% at the expected wait
captured at Calculate, holds there, and shows 100% only when the planner
completes. Beneath the status, one line names the current planning stage
(with the rule name for rule stages) and another shows the approximate
remaining time, or "Taking longer than expected" once the wait is
exceeded, announced once through the live status. Cancel freezes the
percentage and hides both lines.

PlanningCalculationService reports the stage and submitted request
instead of fixed per-stage percentages; PlanningDurationService owns the
wait progress on a 250 ms tick.

Closes #300

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:45:28 +02:00

396 lines
18 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"locale": "de-DE",
"bookedDays": {
"enter": "Bereits gebuchte Tage bearbeiten",
"booked": "Bereits gebucht",
"help": "Wählen Sie CP, RTT, Andere oder Löschen und klicken oder ziehen Sie zwischen zwei Daten, auch über mehrere Monate. Loslassen speichert; Escape bricht ab. Tage mit dem gewählten Typ werden entfernt; andere Tage erhalten diesen Typ. Wochenenden und Feiertage werden übersprungen. Schraffierte Tage sind bereits gebucht und werden beim nächsten Berechnen berücksichtigt.",
"fixed": "Feste Benutzereingabe, ohne Abzug vom verbleibenden Guthaben oder Optimierungsentscheidung.",
"removed": "Eintrag entfernt",
"erase": "Löschen",
"rangeSaved": "Gespeicherte bereits gebuchte Tage: {count} ({type}).",
"rangeRemoved": "Entfernte Einträge: {count}."
},
"app": {
"title": "vac-optimizer",
"description": "Mehr Raum für freie Zeit.",
"skipToPlan": "Zum Urlaubsplan"
},
"userInput": {
"title": "Urlaub konfigurieren",
"description": "Wählen Sie den Planungszeitraum und fügen Sie jedes Urlaubskonto und seinen Gültigkeitszeitraum hinzu.",
"addVacationDay": "Urlaubskonto hinzufügen",
"calculate": "Plan berechnen",
"durationEstimate": "Ungefähre Wartezeit: {range} {unit}",
"durationUnits": {
"seconds": "s",
"minutes": "min"
},
"remainingDaysWarning": "{count} verbleibende Urlaubstage:",
"deleteEntry": "Eintrag löschen",
"chooseDate": "Gültig bis",
"availableDate": "Verfügbar ab",
"days": "Tage",
"type": "Urlaubsart",
"daySuffix": "Tag",
"daysSuffix": "Tage",
"expires": "abl.",
"remainingValidity": "Nutzbar vom {available} bis zum {expiry}.",
"remainingHorizon": "Berechneter Plan vom {start} bis zum {end}.",
"remainingEarnedFrom": "Durch die Regel „{rule}“ erworbener Urlaub.",
"remainingSuggestions": {
"available-after-horizon": "Sie können den Planungszeitraum über das Verfügbarkeitsdatum hinaus verlängern und neu berechnen.",
"no-working-date": "Prüfen Sie den Planungszeitraum und die Gültigkeitsdaten dieses Urlaubskontos.",
"all-dates-occupied": "Sie können den Zeitraum bei entsprechender Gültigkeit verlängern oder Ihre bereits gebuchten Tage und Regeln anpassen und neu berechnen.",
"preserved": "Keine Aktion nötig. Um die Nutzung anzufordern, fügen Sie eine Regel innerhalb der Gültigkeit hinzu und berechnen Sie neu.",
"calculation-incomplete": "Starten Sie die Berechnung erneut, wenn Sie die Planung abschließen möchten."
}
},
"dayTypes": {
"weekend": "Wochenende",
"closedDay": "Feiertag",
"rtt": "RTT",
"cp": "CP",
"other": "Andere",
"today": "Heute",
"any": "Beliebig"
},
"settings": {
"title": "Einstellungen",
"description": "Änderungen werden automatisch gespeichert.",
"showWeekNumbers": "Wochennummern anzeigen",
"close": "Schließen",
"selectLanguage": "Sprache auswählen",
"selectTheme": "Design",
"themeOptions": {
"system": "System",
"light": "Hell",
"dark": "Dunkel"
},
"systemAppearance": "Aktuelles Systemdesign",
"planningHorizon": "Planungszeitraum",
"planningStart": "Startdatum (einschließlich)",
"lastPlanningDate": "Letzter Planungstag (einschließlich)",
"planningDatesHelp": "Wählen Sie beliebige Daten, auch vergangene. Der Kalender wird aktualisiert, wenn Sie Plan berechnen auswählen.",
"invalidDate": "Geben Sie zwei gültige Kalenderdaten ein.",
"horizonOrder": "Der letzte Planungstag muss am oder nach dem Startdatum liegen.",
"invalidHorizon": "Korrigieren Sie die Planungsdaten vor der Berechnung."
},
"rules": {
"title": "Planungsregeln",
"subtitle": "Urlaubsregeln konfigurieren",
"active": "aktiv",
"moveRuleUp": "Regel nach oben verschieben",
"moveRuleDown": "Regel nach unten verschieben",
"dragRule": "Zum Verschieben ziehen",
"ruleMoved": "{name}: Position {position} von {count}.",
"priorityInfo": "Die obersten Regeln haben Vorrang. Mit dem Griff oder den Pfeiltasten umsortieren.",
"ifThenTemplate": "Wenn {type} dann {placement}",
"timeWindowTemplate": "Zeitfenster {startDate} bis {endDate}",
"editRule": "Regel bearbeiten",
"deleteRule": "Regel löschen",
"addRule": "Regel hinzufügen",
"place": "platzieren",
"ruleName": "Regelname",
"holidayFalls": "Feiertag fällt auf",
"days": "Tage",
"type": "Typ",
"position": "Position",
"getBonus": "Bonus erhalten",
"force": "Regelverbindlichkeit",
"obligation": "Verpflichtung",
"preference": "Präferenz",
"startDate": "Startdatum",
"endDate": "Enddatum",
"cancel": "Abbrechen",
"save": "Speichern",
"add": "Hinzufügen",
"addRuleButton": "Regel hinzufügen",
"newIfThenRule": "Neue Wenn-Dann-Regel",
"newTimeWindowRule": "Neue Zeitfenster-Regel",
"defaultNewRuleName": "Neue Regel",
"defaultNewPeriodName": "Neuer Zeitraum",
"daysOfWeek": {
"1": "Montag",
"2": "Dienstag",
"3": "Mittwoch",
"4": "Donnerstag",
"5": "Freitag",
"6": "Samstag",
"0": "Sonntag"
},
"placement": {
"before": "davor",
"after": "danach",
"around": "darum herum",
"auto": "automatisch"
},
"optimization": {
"newRule": "Neue Optimierungsregel",
"defaultName": "Verluste vermeiden",
"elementsLabel": "Planungselemente",
"conditionsLabel": "Bedingungen (alle müssen erfüllt sein)",
"measureLabel": "Messgröße",
"aggregationLabel": "Aggregation",
"directionLabel": "Richtung",
"thresholdLabel": "Präferenzschwelle in Arbeitstagen",
"thresholdSummary": "Präferenzschwelle: {count} Arbeitstage",
"summary": "{direction} {aggregation}: {measure} — {elements}{conditions}.",
"invalidConfiguration": "Wählen Sie passende Elemente, Bedingungen, Messgrößen und Aggregationen sowie bei Bedarf eine positive ganzzahlige Tagesschwelle.",
"nameRequired": "Geben Sie einen Regelnamen ein.",
"elements": {
"leave-balances": "Urlaubsguthaben",
"public-holiday-weeks": "Feiertagswochen",
"time-off-periods": "Arbeitsfreie Zeiträume",
"work-sequences": "Arbeitsfolgen",
"leave-placements": "Geplante Urlaubstage"
},
"conditions": {
"at-risk": "Vom Verfall bedroht",
"complete": "Vollständig",
"internal": "Intern",
"non-empty": "Nicht leer",
"supporting": "Unterstützend"
},
"measures": {
"unplaced-quantity": "Nicht eingeplante Menge",
"public-holiday-week-value": "Wert der Feiertagswochen",
"non-working-day-gain": "Gewinn arbeitsfreier Tage",
"work-sequence-length": "Länge der Arbeitsfolgen",
"work-sequence-deficit": "Defizit der Arbeitsfolgen",
"placement-count": "Anzahl der Platzierungen"
},
"aggregations": {
"sum": "Summe",
"count": "Anzahl",
"maximum": "Maximum"
},
"directions": {
"minimize": "Minimieren",
"maximize": "Maximieren"
}
}
},
"planning": {
"statistics": {
"open": "Statistik",
"title": "Planstatistik",
"leaveDays": "Neu geplante Urlaubstage",
"averageWorkSequence": "Durchschnittliche Arbeitsphase",
"averageTimeOffPeriod": "Durchschnittliche Ruhephase",
"longestTimeOffPeriod": "Längste Ruhephase",
"weekendConnectedHolidays": "Feiertage mit Wochenendanschluss",
"workingDays": "Arbeitstage",
"calendarDays": "Kalendertage",
"partialPlan": "Teilplan",
"help": "Statistik des berechneten Plans. Bereits gebuchte Tage prägen Ruhe- und Arbeitsphasen, ohne das verbleibende Guthaben erneut zu verbrauchen.",
"earnedLeave": "Erworbener Urlaub vor Verbrauch",
"leaveDaysUnit": "Tage",
"earnedLeaveByRule": "Erworbener Urlaub nach Regel"
},
"calculationDate": "Berechnungsdatum",
"futureEntitlement": "Erzeugter künftiger Anspruch",
"includedEntitlement": "Anspruch bereits in den gemeldeten Guthaben enthalten",
"title": "Ihr optimiertes Jahr",
"daysPlaced": "Eingeplante Urlaubstage",
"daysGained": "Gewonnene arbeitsfreie Tage",
"longestWorkSequence": "Längste Arbeitsphase",
"legend": "Kalenderlegende",
"invalidInput": "Die Planungsdaten sind ungültig.",
"conflict": "Die Verpflichtungen können nicht gemeinsam erfüllt werden.",
"incomplete": "Die Berechnung wurde vor Abschluss aller Qualitätsstufen beendet.",
"cancel": "Abbrechen",
"cancelling": "Berechnung wird abgebrochen…",
"progress": {
"stages": {
"preparation": "Kalender wird vorbereitet",
"validation": "Eingaben werden geprüft",
"obligations": "Verpflichtungen werden erfüllt",
"expiry": "Zuerst verfallende Guthaben werden verwendet",
"dates": "Endgültige Daten werden festgelegt"
},
"rule": "„{rule}“ wird angewendet",
"remaining": "Noch etwa {value} {unit}",
"overrun": "Dauert länger als erwartet"
},
"cancelled": "Berechnung abgebrochen",
"cancelledPartial": "Berechnung abgebrochen — Teilplan",
"error": "Bei der Planung ist ein unerwarteter Fehler aufgetreten.",
"complete": "Plan berechnet.",
"whyPlacement": "Ihre Urlaubstage verstehen",
"placementNavigation": "Navigation der Platzierungserklärungen",
"placement": "Urlaubstag",
"placements": "Platzierungen",
"of": "von",
"first": "Erste Platzierung",
"previous": "Vorherige Platzierung",
"next": "Nächste Platzierung",
"last": "Letzte Platzierung",
"remaining": "Ungenutzte Tage im endgültigen Plan",
"balanceRemaining": "verbleibend",
"counterfactual": "Alternative Termine",
"counterfactualLoading": "Alle Daten im Horizont werden analysiert…",
"counterfactualReady": "Alternative Termine sind bereit.",
"counterfactualError": "Alternative Termine konnten nicht berechnet werden.",
"retryCounterfactual": "Datumsanalyse erneut versuchen",
"eligible": "Geeignet",
"ineligible": "Nicht geeignet",
"reason": "Grund",
"explanationError": "Die Erklärung konnte nicht erstellt werden.",
"conflictDetails": "Warum kein Plan die Verpflichtungen erfüllt",
"conflictingRules": "Konfligierende Regeln",
"bottleneck": "Engpass",
"incompleteDetails": "Vor dem Abbruch abgeschlossene Schritte",
"incumbentExplanation": "Dies erklärt den besten gültigen Zwischenstand; spätere Qualitätsstufen wurden nicht abgeschlossen.",
"completedStages": "Abgeschlossene Schritte",
"uncompletedStages": "Unterbrochene oder nicht gestartete Schritte",
"none": "Keine",
"currentPlacement": "Aktuell erklärte Platzierung",
"explainedPeriod": "Erklärter Freizeitzeitraum",
"outsideHorizon": "Kontextdatum außerhalb des Planungshorizonts",
"calendarHelp": "Wählen Sie einen Urlaubstag, um seinen Beitrag zum Plan zu sehen.",
"explanationHelp": "Sehen Sie Ihre Auszeit und den Beitrag jedes Tages.",
"technicalDetails": "Berechnungsdetails",
"compareDates": "Andere Termine vergleichen",
"stopComparing": "Datumsvergleich schließen",
"explanation": {
"breakTitle": "Ihre Auszeit",
"leaveDays": "eingesetzte Urlaubstage",
"freeDays": "Wochenend- und Feiertage",
"daysOff": "freie Tage am Stück",
"wholeBreak": "Diese Zahlen gelten für die gesamte Auszeit einschließlich des ausgewählten Tages.",
"leaveUsed": "Dieses Datum nutzt 1 Tag aus „{balance}“.",
"expires": "Dieses Guthaben ist nutzbar bis",
"linkedRules": "Zugehörige Regeln:",
"atRiskContribution": "Schützt Urlaub, der zu verfallen droht.",
"impact": "Was dieser Tag verändert",
"impactHelp": "Vergleichen Sie den gesamten Plan mit und ohne diesen Urlaubstag. Alle anderen Urlaubstermine bleiben gleich; nur geänderte Werte werden angezeigt.",
"criterion": "Im gesamten Plan",
"withoutDay": "Ohne diesen Tag",
"withDay": "Mit diesem Tag",
"noChange": "Diese Werte sind gleich. Regeln und die letzten Entscheidungskriterien (Verfall des Guthabens, dann Datum) können die Auswahl weiterhin beeinflussen.",
"priorityHelp": "Verpflichtungen werden gemeinsam erfüllt. Aktive Präferenzen werden in Ihrer Regelreihenfolge verglichen. Nur diese Regeln führen zu neuen Urlaubstagen; früherer Verfall und dann frühere Daten entscheiden bei Gleichstand.",
"tryDate": "Anderes Datum testen",
"plannedDate": "Derzeit geplant für:",
"currentPlan": "Aktueller Plan",
"alternative": "Mit diesem Datum",
"sameDate": "Dies ist das geplante Datum. Wählen Sie oben ein anderes Datum, um den Unterschied zu sehen.",
"moveHelp": "Verschieben Sie probeweise diesen Tag. Alle anderen Urlaubstermine bleiben gleich.",
"comparisonUnavailable": "Der Vergleich für das ursprüngliche Datum ist nicht verfügbar. Daher lässt sich die Änderung nicht anzeigen.",
"objectives": {
"obligation-validity": {
"label": "Unerfüllte Verpflichtungen",
"help": "Anzahl nicht erfüllter Pflichtregeln. Ein gültiger Plan hat den Wert null."
},
"unplaced-at-risk": {
"label": "Noch nicht genutzte Tage mit Verfallsrisiko",
"help": "Ungenutzte Tage, die im Planungszeitraum verfallen. Weniger ist besser."
},
"preference": {
"label": "Präferenz: {rule}",
"help": "Tage oder vollständig erfüllte Regeln, je nach Regel. Mehr ist besser."
},
"holiday-week-value": {
"label": "Priorität für Feiertagswochen (Punkte)",
"help": "Gewichteter Wert: Feiertage am Mittwoch zählen 3, Dienstag/Donnerstag 2, Montag/Freitag 1. Höher ist besser."
},
"non-working-day-gain": {
"label": "Wochenend- und Feiertage in Ihren Auszeiten",
"help": "Freie Tage ohne Urlaubsverbrauch. Mehr ist besser."
},
"longest-work-sequence": {
"label": "Meiste Arbeitstage zwischen Urlaubstagen",
"help": "Wochenenden und Feiertage zählen nicht mit. Weniger ist besser."
},
"short-sequence-deficit": {
"label": "Abzug für kurze Arbeitsphasen",
"help": "Jede Lücke von 1–4 Arbeitstagen zwischen Urlaubstagen addiert die bis 5 fehlenden Tage. Niedriger ist besser."
},
"supporting-placements": {
"label": "Tage aus später verfallenden Guthaben",
"help": "Urlaub, der über diesen Planungszeitraum hinaus aufgespart werden könnte. Weniger ist besser."
},
"balance-expiry": {
"label": "Früher verfallenden Urlaub zuerst nutzen",
"help": "Entscheidet bei gleichen Werten der vorherigen Kriterien."
},
"placement-date": {
"label": "Frühere Daten bevorzugen",
"help": "Letztes Kriterium, wenn alle anderen Kriterien gleich sind."
},
"optimization": {
"label": "{rule}: {summary}",
"help": "Diese Optimierungspräferenz bewertet ihre gespeicherte Konfiguration. Aktive Präferenzen werden in der angezeigten Reihenfolge verglichen; frühere haben Vorrang."
}
},
"stages": {
"validation": "Guthaben und Regeln prüfen",
"obligations": "Pflichtregeln erfüllen",
"at-risk": "Urlaub vor dem Verfall nutzen",
"expiry": "Früher verfallenden Urlaub bevorzugen",
"dates": "Frühere Daten bevorzugen"
},
"unavailable": {
"non-working": "Dieser Tag ist bereits frei (Wochenende oder Feiertag). Urlaub ist nicht nötig.",
"occupied": "Hier ist bereits ein anderer Urlaubstag geplant. Wählen Sie einen freien Arbeitstag.",
"unavailable": "Dieses Urlaubsguthaben kann an diesem Datum nicht verwendet werden.",
"expired": "Dieses Datum liegt nach dem Verfall des Urlaubsguthabens.",
"type-incompatible": "Diese Urlaubsart kann an diesem Datum nicht verwendet werden.",
"rule-invalid": "Dieses Datum würde eine Planungsregel verletzen.",
"invalid-optimization-configuration": "Wählen Sie passende Elemente, Bedingungen, Messgrößen und Aggregationen sowie bei Bedarf eine positive ganzzahlige Tagesschwelle.",
"unsupported-optimization-configuration": "Diese Regel kombiniert unvereinbare Planungselemente und Messgrößen."
},
"preferenceHelp": {
"time_window": "Urlaubstage im bevorzugten Zeitraum. Mehr ist besser.",
"if_then": "Vollständig erfüllte Vorkommen dieser Regel. Mehr ist besser."
}
},
"details": {
"intro": "Die linke Spalte zeigt den Plan ohne diesen Urlaubstag. Die rechte zeigt den aktuellen Plan.",
"balance": "Urlaubsguthaben",
"available": "Verfügbar ab",
"expires": "Verfällt am",
"criteria": "Die Prioritäten des Planers",
"criteriaHelp": "Von oben nach unten lesen: Der erste Unterschied hat Vorrang. Wählen Sie ein Kriterium, um seine Berechnung zu sehen.",
"firstDifference": "Erster Unterschied",
"higher": "Höher ist besser",
"lower": "Niedriger ist besser",
"tieBreaks": "Wenn die obigen Werte gleich sind",
"audit": "Rohdaten · zur Fehlersuche",
"auditHelp": "Ursprüngliche Werte, Kennungen und Beiträge aus dieser Berechnung.",
"supporting": "Dieser Tag nutzt Urlaub, der über den Planungszeitraum hinaus aufgespart werden könnte, um Ihre Auszeiten zu verbessern.",
"remainingReasons": {
"unavoidable-expiry": "Am {expiry} abgelaufen, vor dem Planungsbeginn am {start}. In diesem Zeitraum nicht nutzbar.",
"available-after-horizon": "Erst ab dem {available} verfügbar, nach dem letzten Planungstag am {end}.",
"no-working-date": "Kein Arbeitstag liegt sowohl im Planungszeitraum als auch zwischen Verfügbarkeits- und Ablaufdatum.",
"all-dates-occupied": "Alle Arbeitstage, an denen dieses Urlaubskonto nutzbar ist, sind bereits durch geplanten Urlaub oder gebuchte Tage belegt.",
"preserved": "Für später aufbewahrt: Das Urlaubskonto läuft nach dem Planungszeitraum ab und die Berechnung hat gemäß Ihren Prioritäten keine zusätzliche Platzierung ausgewählt.",
"active-priorities": "Die Berechnung hat dieses Urlaubskonto gemäß Ihren aktiven Regeln ungenutzt gelassen. Ändern Sie die Regeln oder ihre Reihenfolge, um einen anderen Plan anzufordern.",
"calculation-incomplete": "Die Berechnung wurde vor Abschluss der Planung unterbrochen. Die Nichtnutzung ist keine endgültige Entscheidung.",
"not-established": "Diese Berechnung hat keinen genauen Grund für die Nichtnutzung ermittelt."
}
},
"comparison": {
"title": "Daten vergleichen",
"preview": "Nur eine Vorschau. Ihr Plan bleibt unverändert.",
"nearby": "Verfügbare Termine in der Nähe",
"noAlternatives": "Dieser Urlaubstag kann auf kein anderes Datum gelegt werden. Sie können trotzdem ein Datum prüfen, um den Grund zu sehen.",
"chooseDate": "Wählen Sie oben ein Datum, um die Änderungen zu sehen.",
"dateRange": "Planungszeitraum:",
"invalidDate": "Wählen Sie ein gültiges Datum im oben angegebenen Planungszeitraum.",
"changes": "Was sich ändern würde",
"available": "Verfügbares Datum",
"unavailable": "Dieses Datum ist nicht möglich",
"backToPlan": "Zurück zu meinem Plan"
}
},
"benchmark": {
"title": "Benchmark der Urlaubsplanung",
"instructions": "Führen Sie die fünf festen Szenarien aus und kopieren Sie den Bericht.",
"run": "Benchmark starten",
"running": "Läuft…",
"copy": "Bericht kopieren"
},
"loading": "Wird geladen...",
"weekdaysShort": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]
}