The dashboard now renders a progress bar for any running job — determinate when counts are reported, an indeterminate "working" sliver otherwise — so a scheduled run is as visible as a manual one (progress was never manual-only; the wiring is shared, but only some jobs reported and the display gated on counts). Poll faster (1.5s) while any job runs, easing back to 4s when idle, derived from the freshest data by react-query's functional refetchInterval. The earlier React-state approach to this stalled the live updates (the row froze on the first sampled value); useLiveQuery now accepts a function of the data. Trilingual phase labels for the newly-reporting jobs.
93 lines
5.5 KiB
JSON
93 lines
5.5 KiB
JSON
{
|
|
"title": "Hintergrund-Planer",
|
|
"loading": "Planer wird geladen…",
|
|
"running": "Läuft",
|
|
"paused": "Pausiert",
|
|
"notHere": "Läuft in dieser Instanz nicht",
|
|
"notHereNote": "Der Planer läuft auf dem Server. Diese Instanz zeigt die gemeinsame Warteschlange und das Kontingent, aber die Live-Job-Aktivität erscheint nur dort, wo der Planer läuft.",
|
|
"updating": "wird aktualisiert…",
|
|
"pause": "Pausieren",
|
|
"resume": "Fortsetzen",
|
|
"pauseHint": "Die gesamte Hintergrund-Synchronisierung der App pausieren oder fortsetzen (für alle Nutzer).",
|
|
"toggleFailed": "Der Planer-Status konnte nicht geändert werden",
|
|
"jobsTitle": "Jobs",
|
|
"queueTitle": "Wartende Arbeit",
|
|
"quotaTitle": "Gemeinsames API-Kontingent",
|
|
"everyMin": "alle {{count}} Min",
|
|
"runningNow": "Läuft gerade…",
|
|
"lastRun": "Letzter Lauf {{time}}",
|
|
"neverRun": "In dieser Sitzung noch nicht gelaufen",
|
|
"active": "aktiv",
|
|
"nextRun": "nächster",
|
|
"quotaUsed": "{{used}} / {{budget}} Einheiten heute verbraucht",
|
|
"quotaRemaining": "{{formatted}} übrig",
|
|
"quotaNote": "Gemeinsames YouTube-Data-API-Budget; Reset um Mitternacht US-Pazifik. Backfill tritt zurück, um Spielraum für interaktive Nutzung zu lassen.",
|
|
"minutes": "Min",
|
|
"editInterval": "Klicken, um das Intervall zu ändern",
|
|
"intervalFailed": "Intervall konnte nicht geändert werden",
|
|
"runNow": "Jetzt ausführen",
|
|
"runAll": "Alle jetzt starten",
|
|
"runAllHint": "Alle Jobs jetzt ausführen, zusätzlich zu ihren Zeitplänen.",
|
|
"runAllPausedHint": "Setze den Planer fort, um Jobs auszuführen (pausiert werden sie übersprungen).",
|
|
"triggered": "{{job}} gestartet",
|
|
"triggeredAll_one": "{{count}} Job gestartet",
|
|
"triggeredAll_other": "{{count}} Jobs gestartet",
|
|
"phase": {
|
|
"recheck": "Markierte Videos erneut prüfen",
|
|
"revalidate": "Videos erneut validieren",
|
|
"enrich": "Videos anreichern",
|
|
"backfill_recent": "Neue Uploads nachladen",
|
|
"backfill_deep": "Ganze Historie nachladen",
|
|
"probe": "Shorts klassifizieren",
|
|
"rss_poll": "Auf neue Uploads prüfen",
|
|
"subscriptions": "Abos synchronisieren",
|
|
"autotag": "Kanäle automatisch taggen",
|
|
"playlist_sync": "Playlists synchronisieren",
|
|
"working": "Arbeitet…"
|
|
},
|
|
"maintenance": {
|
|
"title": "Wartung",
|
|
"batchLabel": "Pro Lauf erneut geprüfte Videos",
|
|
"batchHint": "Wie viele am längsten nicht geprüfte Videos der Wartungs-Job pro Lauf erneut validiert. Höher = schnellerer Gesamtzyklus, aber mehr API-Kontingent (1 Einheit je 50 Videos).",
|
|
"batchNote": "Standard: {{default}}. ~233k Videos ÷ dieser Wert = Tage für einen vollen Prüfzyklus."
|
|
},
|
|
"dot": {
|
|
"running": "läuft gerade",
|
|
"ok": "letzter Lauf OK",
|
|
"idle": "untätig (in dieser Sitzung noch nicht gelaufen)",
|
|
"error": "letzter Lauf fehlgeschlagen",
|
|
"skipped": "übersprungen (Sync pausiert)"
|
|
},
|
|
"jobDesc": {
|
|
"rss_poll": "Prüft den RSS-Feed jedes Kanals auf neue Uploads (kostenlos, kein Kontingent). Fällt er aus, erscheinen neue Videos erst später, wenn ein Backfill sie erfasst — der Feed hinkt YouTube hinterher.",
|
|
"enrich": "Holt Videodetails (Dauer, Aufrufe, Live-/Shorts-Flags) und prüft Live-Videos erneut, bis sie enden. Fällt er aus, bleiben Videos ohne Dauer/Statistik und beendete Streams hängen als „live“ fest.",
|
|
"backfill": "Holt neue Uploads und dann den gesamten Verlauf vorgemerkter Kanäle, innerhalb des gemeinsamen Kontingents. Fällt er aus, werden ältere Videos und der volle Verlauf nicht ergänzt.",
|
|
"autotag": "Erkennt Sprache/Themen jedes Kanals und vergibt automatische Tags. Fällt er aus, bekommen neue Kanäle keine Auto-Tags, sodass Sprach-/Themenfilter sie verfehlen.",
|
|
"shorts": "Prüft youtube.com/shorts, um Shorts zu markieren. Fällt er aus, werden Shorts im Feed nicht von normalen Videos getrennt.",
|
|
"subscriptions": "Importiert die YouTube-Abos jedes Nutzers neu. Fällt er aus, werden auf YouTube hinzugefügte oder entfernte Abos hier nicht übernommen.",
|
|
"playlist_sync": "Spiegelt die YouTube-Wiedergabelisten jedes Nutzers in die App. Fällt er aus, erscheinen Änderungen an deinen YouTube-Listen lokal nicht.",
|
|
"maintenance": "Findet Videos, die nicht mehr abspielbar sind (gelöscht, auf privat gesetzt, abgebrochene Premieren), blendet sie aus dem Feed aus und entfernt sie nach einer Schonfrist; prüft die am längsten nicht geprüften Videos erneut. Fällt er aus, bleiben tote Videos im Katalog."
|
|
},
|
|
"jobs": {
|
|
"rss_poll": "RSS-Abfrage (neue Uploads)",
|
|
"enrich": "Anreicherung + Live-Aktualisierung",
|
|
"backfill": "Backfill (aktuell + ganze Historie)",
|
|
"autotag": "Automatisches Tagging",
|
|
"shorts": "Shorts-Klassifizierung",
|
|
"subscriptions": "Abo-Resync",
|
|
"playlist_sync": "YouTube-Wiedergabelisten-Sync",
|
|
"maintenance": "Wartung + Validierung"
|
|
},
|
|
"queue": {
|
|
"recentPending": "Zu synchronisierende Kanäle",
|
|
"recentPendingHint": "Kanäle, deren neueste Uploads noch nicht abgerufen wurden.",
|
|
"deepPending": "Ganze Historie ausstehend",
|
|
"deepPendingHint": "Für vollständigen Verlauf vorgemerkte Kanäle, die noch nicht fertig sind.",
|
|
"enrichPending": "Zu anreichernde Videos",
|
|
"enrichPendingHint": "Videos, die noch auf Details warten (Dauer, Statistiken, Live-/Short-Klassifizierung).",
|
|
"shortsPending": "Zu klassifizierende Shorts",
|
|
"shortsPendingHint": "Bereits angereicherte Videos, die noch auf die Shorts-Prüfung warten.",
|
|
"liveRefresh": "Live zu aktualisieren",
|
|
"liveRefreshHint": "Live-/bevorstehende Videos (und gerade beendete Streams ohne Dauer), bis sie sich stabilisieren."
|
|
}
|
|
}
|