Files
Twitch-VOD-Manager/src/renderer-locale-de.ts
T

630 lines
33 KiB
TypeScript

const UI_TEXT_DE = {
appName: 'Twitch VOD Manager',
static: {
navVods: 'Twitch VODs',
navClips: 'Twitch Clips',
navCutter: 'Video schneiden',
navMerge: 'Videos zusammenfügen',
navSettings: 'Einstellungen',
queueTitle: 'Warteschlange',
retryFailed: 'Wiederholen',
retryFailedHint: 'Nur fehlgeschlagene Downloads erneut starten',
healthUnknown: 'System: Unbekannt',
healthGood: 'System: Stabil',
healthWarn: 'System: Warnung',
healthBad: 'System: Problem',
systemStatus: 'Systemstatus',
openSettings: 'Einstellungen öffnen',
refreshVods: 'VODs aktualisieren',
downloadClip: 'Clip herunterladen',
mainNavigationAria: 'Hauptnavigation',
workspaceContextAria: 'Arbeitsbereichskontext',
vodWorkspaceAria: 'VOD-Arbeitsbereich',
clipSectionsAria: 'Clip-Bereiche',
cutterSectionsAria: 'Videoschnitt-Bereiche',
mergeSectionsAria: 'Zusammenfügen-Bereiche',
statisticsSectionsAria: 'Statistik-Bereiche',
archiveSectionsAria: 'Archiv-Bereiche',
settingsSectionsAria: 'Einstellungsbereiche',
cutVideoAction: 'Video schneiden',
mergeVideosAction: 'Videos zusammenfügen',
errorPrefix: 'Fehler',
settingsSearchPlaceholder: 'Einstellungen durchsuchen…',
clearQueue: 'Leeren',
refresh: 'Aktualisieren',
streamerPlaceholder: 'Streamer hinzufügen…',
clipsHeading: 'Twitch Clip-Download',
clipsInfoTitle: 'Info',
clipsInfoText: 'Unterstutzte Formate:\n- https://clips.twitch.tv/ClipName\n- https://www.twitch.tv/streamer/clip/ClipName\n\nClips werden im Download-Ordner unter "Clips/StreamerName/" gespeichert.',
cutterSelectTitle: 'Video auswählen',
cutterPreviewPlaceholder: 'Video auswählen, um eine Vorschau zu sehen',
cutterBrowse: 'Durchsuchen',
commandPaletteTitle: 'Befehlspalette',
commandPaletteAria: 'Befehlspalette',
commandPaletteResultsAria: 'Befehlsergebnisse',
commandPaletteOpenHint: 'Öffnen',
commandPaletteStreamerHint: 'Streamer',
commandPaletteCommands: {
vods: { label: 'VODs', keywords: 'vod videos streams' },
clips: { label: 'Clips', keywords: 'clips clip-download' },
cutter: { label: 'Videoschnitt', keywords: 'videoschnitt schneiden cutter' },
merge: { label: 'Videos zusammenfügen', keywords: 'zusammenfügen videos merge' },
stats: { label: 'Statistiken', keywords: 'statistiken stats dashboard' },
archive: { label: 'Archiv', keywords: 'archiv archive' },
settings: { label: 'Einstellungen', keywords: 'einstellungen settings config' }
},
commandPaletteSearchPlaceholder: 'Befehl suchen...',
commandPaletteHint: 'Auf/Ab zum Navigieren, Enter zum Ausführen, Esc zum Schließen',
mergeTitle: 'Videos zusammenfügen',
mergeDesc: 'Wähle mehrere Videos aus, um sie zu einem Video zusammenzufügen. Die Reihenfolge kann geändert werden.',
mergeAdd: 'Videos hinzufügen',
designTitle: 'Design',
themeLabel: 'Theme',
themeLight: 'Hell',
themeDark: 'Dunkel',
themeSystem: 'System',
languageLabel: 'Sprache',
languageDe: 'Deutsch',
languageEn: 'English',
apiTitle: 'Twitch API',
clientIdLabel: 'Client ID',
clientSecretLabel: 'Client Secret',
saveSettings: 'Speichern & Verbinden',
downloadSettingsTitle: 'Download-Einstellungen',
downloadBasicsTitle: 'Download und Qualität',
queueAutomationTitle: 'Queue und Automatisierung',
recordingMetadataTitle: 'Aufnahmen und Metadaten',
storageLabel: 'Speicherort',
selectFolder: 'Ordner',
openFolder: 'Offnen',
modeLabel: 'Download-Modus',
modeFull: 'Ganzes VOD',
modeParts: 'In Teile splitten',
partMinutesLabel: 'Teil-Lange (Minuten)',
parallelDownloadsLabel: 'Parallele Downloads',
parallelDownloads1: '1 (Standard)',
parallelDownloads2: '2 (Parallel)',
performanceModeLabel: 'Performance-Profil',
performanceModeStability: 'Max Stabilitat',
performanceModeBalanced: 'Ausgewogen',
performanceModeSpeed: 'Max Geschwindigkeit',
smartSchedulerLabel: 'Smart Queue Scheduler aktivieren',
smartSchedulerHint: 'Bevorzugt kürzere VODs und ältere Queue-Einträge zuerst, damit der Durchsatz gleichmäßig bleibt. Deaktivieren = strikte Einfügereihenfolge.',
sidebarSplitViewLabel: 'Streamer und Queue gleichzeitig anzeigen',
sidebarSplitViewHint: 'Teilt die linke Seitenleiste gleichmäßig auf. Deaktiviert erscheinen wieder die Umschaltflächen.',
streamerInvalid: 'Twitch-Username ungültig (4-25 Zeichen, Buchstaben/Zahlen/Unterstrich).',
apiHelpIntro: 'Du brauchst eine Client-ID und ein Client-Secret von Twitch.',
apiHelpLinkText: 'dev.twitch.tv/console/apps',
openDebugLogFile: 'Log-Datei öffnen',
storageCardTitle: 'Speicher',
storageCardIntro: 'Disk-Verbrauch pro Streamer im aktuellen Download-Ordner. Live-Aufnahmen werden separat ausgewiesen.',
storageRefresh: 'Aktualisieren',
storageEmpty: 'Download-Ordner ist leer oder nicht lesbar.',
storageScanning: 'Scanne...',
storageSummary: 'Gesamt: {files} Dateien, {size} — Freier Speicher: {free}',
storageColumnFolder: 'Ordner',
storageColumnFiles: 'Dateien',
storageColumnTotal: 'Gesamt',
storageColumnLive: 'Live',
storageColumnChat: 'Chat',
storageColumnActionsAria: 'Aktionen',
storageOpen: 'Öffnen',
storageOtherFolders: 'Andere Ordner im Download-Pfad',
cleanupTitle: 'Auto-Cleanup',
cleanupIntro: 'Aufnahmen älter als X Tage in einen Archiv-Ordner verschieben oder löschen. Sidecar-Chat-Dateien (.chat.json/.chat.jsonl) werden mit der Aufnahme bewegt.',
cleanupEnabledLabel: 'Auto-Cleanup aktivieren',
cleanupDaysLabel: 'Tage-Schwelle',
cleanupTargetLabel: 'Bereich',
cleanupTargetLive: 'Nur Live-Aufnahmen',
cleanupTargetAll: 'Alle Aufnahmen',
cleanupActionLabel: 'Aktion',
cleanupActionArchive: 'In Archiv verschieben',
cleanupActionDelete: 'Löschen',
cleanupDryRun: 'Vorschau',
cleanupRunNow: 'Jetzt ausführen',
cleanupReportPreview: 'Würde {count} Dateien betreffen (~{size}). Es wurden keine Dateien verschoben oder gelöscht.',
cleanupReportDone: '{count} Dateien verarbeitet, ~{size} frei.{failed}',
cleanupReportFailedSuffix: ' {failed} fehlgeschlagen.',
cleanupReportEmpty: 'Keine Aufnahmen älter als {days} Tage gefunden.',
discordCardTitle: 'Discord-Webhook',
discordCardIntro: 'Sende Benachrichtigungen an einen Discord-Channel via Webhook - nützlich für Multi-Device-Setups oder eine dedizierte Archiv-Maschine.',
discordWebhookUrlLabel: 'Webhook-URL',
discordNotifyLiveStartLabel: 'Bei Live-Aufnahme-Start benachrichtigen',
discordNotifyLiveEndLabel: 'Bei Live-Aufnahme-Ende benachrichtigen',
discordNotifyVodAutoQueuedLabel: 'Bei automatisch eingereihten VODs benachrichtigen',
autoResumeLiveRecordingLabel: 'Live-Aufnahme automatisch fortsetzen wenn Streamlink abbricht (max. 5 Versuche)',
autoMergeResumedPartsLabel: 'Fortgesetzte Aufnahme-Parts automatisch zu einer Datei zusammenfügen (ffmpeg concat, kein Re-Encode)',
deletePartsAfterMergeLabel: 'Einzelne Parts nach erfolgreichem Merge löschen',
autoVodCardTitle: 'Auto-VOD-Download',
autoVodCardIntro: 'Streamer mit aktiviertem VOD-Toggle werden in dem hier festgelegten Intervall auf neue Twitch-VODs geprüft. Neue VODs innerhalb des Altersfensters werden automatisch zur Download-Queue hinzugefügt.',
autoVodPollMinutesLabel: 'Poll-Intervall (Minuten)',
autoVodMaxAgeHoursLabel: 'Max. Alter (Stunden)',
autoVodScanNow: 'Jetzt scannen',
autoRecordScanNow: 'Live-Status prüfen',
statsTitle: 'Archiv-Statistik',
statsIntro: 'Aggregiert über den Download-Ordner. Live-Aufnahmen liegen unter <code>{streamer}/live/</code>, VOD-Downloads direkt unter <code>{streamer}/</code>. Lade-Zeit skaliert mit der Anzahl Dateien.',
statsRefresh: 'Aktualisieren',
statsScanning: 'Scanne...',
statsScannedAt: 'Letzter Scan',
statsSummaryTitle: 'Übersicht',
statsTopStreamersTitle: 'Top Streamer (nach Größe)',
statsActivityTitle: 'Aktivität (letzte 30 Tage)',
statsSizeBucketsTitle: 'Aufnahme-Größen-Verteilung',
statsTotalRecordings: 'Aufnahmen gesamt',
statsLiveRecordings: 'Live-Aufnahmen',
statsVodRecordings: 'VOD-Downloads',
statsStreamers: 'Streamer',
statsAvgSize: 'Durchschn. Größe',
statsChatFiles: 'Chat-Dateien',
statsFiles: 'Dateien',
statsActivityEmpty: 'Keine Aufnahmen in den letzten 30 Tagen.',
statsActivitySummary: '{count} Aufnahmen - {size} in den letzten 30 Tagen',
statsEmpty: 'Keine Daten.',
statsNoRoot: 'Download-Ordner nicht gefunden. Setze zuerst einen Download-Pfad in den Einstellungen.',
navStats: 'Statistik',
navArchive: 'Archiv',
archiveTitle: 'Archiv durchsuchen',
archiveIntro: 'Suche nach Dateinamen, Streamern oder Datumsangaben. Treffer zeigen Aufnahmen (Live + VOD); zugehörige Chat- und Event-Dateien werden als zusätzliche Schaltflächen angeboten.',
archiveAllTypes: 'Alle Typen',
archiveTypeLive: 'Live-Aufnahmen',
archiveTypeVod: 'VOD-Downloads',
archiveAllStreamers: 'Alle Streamer',
archiveSortDateDesc: 'Neueste zuerst',
archiveSortDateAsc: 'Älteste zuerst',
archiveSortSizeDesc: 'Größte zuerst',
archiveSortSizeAsc: 'Kleinste zuerst',
archiveSortNameAsc: 'Name (A-Z)',
archiveSearchBtn: 'Suchen',
archiveSearching: 'Scanne...',
archiveSummary: '{matchCount} Treffer (gescannt: {scanned} Dateien)',
archiveSummaryTruncated: '{matchCount} Treffer (gescannt: {scanned} Dateien, gezeigt: {shown} - verfeinere die Suche für mehr)',
archiveNoMatches: 'Keine Treffer.',
archiveNoRoot: 'Download-Ordner nicht gefunden. Setze zuerst einen Download-Pfad in den Einstellungen.',
archiveSearchPlaceholder: 'Suche…',
archiveSearchAria: 'Archiv durchsuchen',
archiveResults: 'Ergebnisse',
archiveOpen: 'Öffnen',
archiveShowInFolder: 'Ordner',
archiveViewChat: 'Chat',
archiveViewEvents: 'Events',
discordNotifyVodCompleteLabel: 'Bei abgeschlossenem VOD-Download benachrichtigen',
backupCardTitle: 'Sicherung & Wartung',
backupCardIntro: 'Konfiguration sichern, auf einem anderen Gerät wiederherstellen oder die Liste der bereits heruntergeladenen VODs zurücksetzen.',
exportConfig: 'Konfiguration exportieren',
importConfig: 'Konfiguration importieren',
resetDownloadedIds: 'Downloaded-VODs zurücksetzen',
configExported: 'Konfiguration exportiert.',
configExportFailed: 'Export der Konfiguration fehlgeschlagen.',
configImported: 'Konfiguration importiert. Einige Aenderungen erfordern evtl. einen Neustart.',
configImportFailed: 'Import der Konfiguration fehlgeschlagen.',
resetDownloadedConfirm: 'Liste der heruntergeladenen VODs zurücksetzen? Karten verlieren das grüne Häkchen, es werden aber keine Dateien gelöscht.',
resetDownloadedDone: '{count} Einträge aus der Downloaded-Liste entfernt.',
duplicatePreventionLabel: 'Duplikate in Queue verhindern',
persistQueueLabel: 'Queue zwischen App-Starts speichern',
autoResumeQueueLabel: 'Queue beim Start automatisch fortsetzen',
autoResumeQueueHint: 'Wenn aktiv und die gespeicherte Queue noch ausstehende Einträge hat, starten Downloads ~5 Sekunden nach dem Fensteröffnen. Deaktivieren = Start-Klick nötig.',
notifyEachCompletionLabel: 'Benachrichtigung bei jedem fertigen Download',
notifyEachCompletionHint: 'Standardmäßig aus — bei langen Queues würde das System-Notifications-Panel sonst zugespammt. Die Queue-End-Zusammenfassung erscheint trotzdem.',
streamlinkDisableAdsLabel: 'Twitch-Ads beim Download überspringen',
streamlinkDisableAdsHint: 'Gibt --twitch-disable-ads an streamlink weiter, damit Mid-Roll-Ads nicht ins VOD eingebettet werden. Empfohlen aktiv lassen.',
downloadChatReplayLabel: 'Chat-Replay parallel zum VOD speichern (.chat.json)',
downloadChatReplayHint: 'Nach erfolgreichem VOD-Download wird der öffentliche Chat-Replay via Twitch GQL geholt und als JSON neben dem Video gespeichert. Twitch behält Chat-Replays nur solange wie das VOD selbst.',
captureLiveChatLabel: 'Live-Chat während der Aufnahme mitschneiden (.chat.jsonl)',
captureLiveChatHint: 'Oeffnet während einer Live-Aufnahme eine anonyme IRC-Verbindung zum Twitch-Chat und schreibt jede Nachricht in eine .chat.jsonl-Datei neben dem Video (JSON Lines, eine Nachricht pro Zeile, damit ein Mid-Stream-Abbruch früheren Inhalt nicht korrumpiert).',
logStreamEventsLabel: 'Stream-Events bei Live-Aufnahmen mitloggen (.events.jsonl)',
logStreamEventsHint: 'Pollt den Streamer einmal pro Minute und schreibt Title-/Game-Wechsel in eine .events.jsonl-Datei neben dem Video. Hilfreich beim Suchen in langen archivierten Streams ("wann hat er auf CS:GO gewechselt?"). Sehr günstig — ein zusätzlicher Helix/GQL-Call pro Minute pro aktiver Aufnahme.',
streamlinkQualityLabel: 'Stream-Qualität',
streamlinkQualityHint: 'Streamlink versucht erst diese Qualität; falls das VOD sie nicht anbietet, fällt es auf "best" zurück.',
streamlinkQualityBest: 'Best (Standard)',
streamlinkQualitySource: 'Source (Original)',
streamlinkQualityAudio: 'Nur Audio',
downloadPolicyTitle: 'Drosselung und Zeitfenster',
downloadThrottleLabel: 'Maximale Downloadrate (MiB/s)',
downloadThrottleHint: 'Leer lassen für keine Drosselung. Dezimalwerte wie 1,5 sind möglich.',
downloadWindowsLabel: 'Lokale Download-Zeitfenster',
downloadWindowsHint: 'Ein Zeitfenster pro Zeile oder durch Semikolon getrennt. Über Mitternacht ist erlaubt.',
downloadPolicyOverride: 'Jetzt starten',
downloadPolicyWaiting: 'Die Queue wartet bis {time}.',
downloadPolicyReady: 'Ausstehende Downloads dürfen jetzt starten.',
downloadThrottleInvalid: 'Gib eine positive Downloadrate in MiB/s ein.',
downloadWindowsInvalid: 'Nutze lokale Zeitfenster im Format HH:MM-HH:MM.',
downloadPathNotWritable: 'Download-Ordner ist nicht beschreibbar. Wähle einen anderen Ordner oder prüfe die Schreibrechte.',
streamerSectionTitle: 'Streamer',
streamerListFilterPlaceholder: 'Filtern...',
streamerListFilterAria: 'Streamer-Liste filtern',
streamerAddAriaLabel: 'Streamer hinzufügen',
streamerBulkRemoveTitle: 'Alle entfernen (oder gefilterte)',
streamerBulkRemoveAll: 'Alle {count} Streamer aus der Liste entfernen?',
streamerBulkRemoveFiltered: 'Die {count} passenden Streamer aus der Liste entfernen?',
metadataCacheMinutesLabel: 'Metadata-Cache (Minuten)',
filenameTemplatesTitle: 'Dateinamen-Templates',
vodTemplateLabel: 'VOD-Template',
partsTemplateLabel: 'VOD-Teile-Template',
defaultClipTemplateLabel: 'Clip-Template',
filenameTemplateHint: 'Platzhalter: {title} {id} {channel} {date} {part} {part_padded} {trim_start} {trim_end} {trim_length} {date_custom="yyyy-MM-dd"}',
vodTemplatePlaceholder: '{title}.mp4',
partsTemplatePlaceholder: '{date}_Part{part_padded}.mp4',
defaultClipTemplatePlaceholder: '{date}_{part}.mp4',
templateLintOk: 'Template-Check: OK',
templateLintWarn: 'Unbekannte Platzhalter',
templateGuideButton: 'Template Guide',
templateGuideTitle: 'Dateinamen-Template Guide',
templateGuideIntro: 'Nutze Platzhalter für Dateinamen und teste dein Muster mit einer Live-Vorschau.',
templateGuideTemplateLabel: 'Template',
templateGuideOutputLabel: 'Live-Vorschau',
templateGuideVarsTitle: 'Verfügbare Platzhalter',
templateGuideVarCol: 'Platzhalter',
templateGuideDescCol: 'Beschreibung',
templateGuideExampleCol: 'Beispiel',
templateGuideUseVod: 'VOD-Template nutzen',
templateGuideUseParts: 'Teile-Template nutzen',
templateGuideUseClip: 'Clip-Template nutzen',
templateGuideClose: 'Schließen',
templateGuideContextVod: 'Kontext: Beispiel für kompletten VOD-Download',
templateGuideContextParts: 'Kontext: Beispiel für VOD-Teil',
templateGuideContextClip: 'Kontext: Beispiel für Clip-Zuschnitt',
templateGuideContextClipLive: 'Kontext: Aktuelle Auswahl im Clip-Dialog',
runtimeMetricsTitle: 'Runtime Metrics',
runtimeMetricsRefresh: 'Aktualisieren',
runtimeMetricsExport: 'Export JSON',
runtimeMetricsAutoRefresh: 'Auto-Refresh',
runtimeMetricsLoading: 'Metriken werden geladen...',
runtimeMetricsError: 'Runtime-Metriken konnten nicht geladen werden.',
runtimeMetricsExportDone: 'Runtime-Metriken wurden exportiert.',
runtimeMetricsExportCancelled: 'Export der Runtime-Metriken abgebrochen.',
runtimeMetricsExportFailed: 'Export der Runtime-Metriken fehlgeschlagen.',
runtimeMetricQueue: 'Queue',
runtimeMetricMode: 'Modus',
runtimeMetricRetries: 'Retries',
runtimeMetricIntegrity: 'Integritatsfehler',
runtimeMetricCache: 'Cache',
runtimeMetricBandwidth: 'Bandbreite',
runtimeMetricDownloads: 'Downloads',
runtimeMetricActive: 'Aktiver Job',
runtimeMetricLastError: 'Letzte Fehlerklasse',
runtimeMetricUpdated: 'Aktualisiert',
updateTitle: 'Updates',
checkUpdates: 'Nach Updates suchen',
preflightTitle: 'System-Check',
preflightRun: 'Check ausfuhren',
preflightFix: 'Auto-Fix Tools',
preflightEmpty: 'Noch kein Check ausgefuhrt.',
preflightChecking: 'Prüfe...',
preflightFixing: 'Fixe...',
preflightReady: 'Alles bereit.',
preflightInternet: 'Internet',
preflightStreamlink: 'Streamlink',
preflightFfmpeg: 'FFmpeg',
preflightFfprobe: 'FFprobe',
preflightPath: 'Download-Pfad',
managedToolsTitle: 'Verwaltete Tools',
managedToolsRefresh: 'Tool-Status aktualisieren',
managedToolsRepair: 'Tools reparieren',
managedToolsReset: 'Tools zurücksetzen',
managedToolsEmpty: 'Noch kein Tool-Status geladen.',
managedToolsRepairing: 'Repariere...',
managedToolsResetConfirm: 'Verwaltete Tool-Installationen zurücksetzen?',
managedToolsMissing: 'Fehlt',
managedToolsInstalling: 'Wird installiert',
managedToolsVerified: 'Verifiziert',
managedToolsUnverified: 'Nicht verifiziert',
managedToolsCorrupt: 'Beschädigt',
debugLogTitle: 'Live Debug-Log',
refreshLog: 'Aktualisieren',
autoRefresh: 'Auto-Refresh',
notConnected: 'Nicht verbunden'
},
status: {
noLogin: 'Public-Modus · öffentliche VODs verfügbar',
publicHint: 'Ohne Twitch-API-Verbindung funktionieren öffentliche VODs und Downloads. Mit API-Verbindung stehen vollständigere Metadaten, mehr Verlauf und zuverlässigere Abfragen bereit.',
connecting: 'Verbinde...',
connected: 'Twitch-API verbunden',
connectedHint: 'Die Twitch-API ist verbunden. Vollständige Metadaten und der erweiterte VOD-Verlauf sind verfügbar.',
connectFailedPublic: 'API nicht erreichbar · Public-Modus aktiv'
},
tabs: {
vods: 'VODs',
clips: 'Clips',
cutter: 'Video schneiden',
merge: 'Videos zusammenfügen',
stats: 'Statistik',
archive: 'Archiv',
settings: 'Einstellungen'
},
queue: {
empty: 'Keine Downloads in der Warteschlange',
detailStreamer: 'Streamer:',
detailDuration: 'Dauer:',
detailDate: 'Datum:',
start: 'Start',
stop: 'Pausieren',
resume: 'Fortsetzen',
statusDone: 'Abgeschlossen',
statusFailed: 'Fehlgeschlagen',
statusRunning: 'Läuft',
statusPaused: 'Pausiert',
statusWaiting: 'Wartet',
progressError: 'Fehler',
progressReady: 'Bereit',
progressLoading: 'Lade...',
readyToDownload: 'Bereit zum Download',
started: 'Download wird gestartet …',
done: 'Fertig',
failed: 'Download fehlgeschlagen',
speed: 'Geschwindigkeit',
eta: 'Restzeit',
part: 'Teil',
emptyAlert: 'Die Warteschlange ist leer. Füge zuerst ein VOD oder einen Clip hinzu.',
duplicateSkipped: 'Dieser Eintrag ist bereits aktiv in der Warteschlange.',
openFile: 'Datei öffnen',
showInFolder: 'Im Ordner zeigen',
openFileFailed: 'Datei konnte nicht geöffnet werden (evtl. verschoben oder gelöscht).',
outputFilesLabel: '{count} Ausgabedateien',
retryItem: 'Diesen Eintrag erneut versuchen',
viewChat: 'Chat ansehen',
viewChatLoading: 'Lade Chat...',
viewChatFailed: 'Chat-Datei konnte nicht gelesen werden',
chatViewerFilterPlaceholder: 'Chat filtern...',
chatViewerFilterAria: 'Chatnachrichten filtern',
viewChatCount: '{count} Nachrichten',
viewChatTruncatedSuffix: ' (gekürzt)',
viewEvents: 'Events ansehen',
viewEventsCount: '{count} Events',
viewEventsEmpty: 'Keine Events aufgezeichnet.',
eventStartedAs: 'Gestartet als',
eventEndedAfter: 'Beendet nach',
eventTitleFromTo: 'Titel: {from} -> {to}',
eventGameFromTo: 'Game: {from} -> {to}',
statusBarSummary: '{downloading} aktiv, {pending} wartet',
ctxMoveTop: 'Nach oben verschieben',
ctxMoveBottom: 'Nach unten verschieben',
ctxSelectForMerge: 'Für Zusammenfügen auswählen',
ctxRemoveFromMerge: 'Aus Zusammenfügen-Auswahl entfernen',
mergeSelectionPosition: 'Zusammenfügen: Position {position}',
ctxCopyUrl: 'URL kopieren',
ctxOpenOnTwitch: 'Auf Twitch öffnen',
ctxRemove: 'Aus Queue entfernen',
ctxCopiedUrl: 'URL in Zwischenablage kopiert.',
liveRecordingTitle: 'Live-Aufnahme - läuft bis der Stream endet',
recordingHealth: {
ok: 'Gesund - Bytes fließen',
stale: 'Stillstand - keine Bytes mehr (Netz-Hickser oder Stream endet)',
unknown: 'Warte auf ersten Segment'
},
eventRecordingResume: 'Aufnahme fortgesetzt - Part {part} startet'
},
profile: {
liveBadge: 'LIVE',
partner: 'Partner',
affiliate: 'Affiliate',
followers: 'Follower',
vods: 'VODs',
vodsTooltip: 'Über die Twitch-API sichtbare VODs dieses Kanals',
lastStream: 'Letzter Stream',
openTwitch: 'Auf Twitch öffnen',
openTwitchTooltip: 'Diesen Kanal auf twitch.tv öffnen',
liveCardTooltip: 'Klick um sofort eine Live-Aufnahme zu starten',
liveThumbAlt: 'Live-Vorschau',
recordNow: 'Jetzt aufnehmen',
refresh: 'Aktualisieren',
agoMinutes: 'vor {n} Min',
agoHours: 'vor {n} h',
agoDay: 'vor 1 Tag',
agoDays: 'vor {n} Tagen',
agoMonth: 'vor 1 Monat',
agoMonths: 'vor {n} Monaten',
agoYear: 'vor 1 Jahr',
agoYears: 'vor {n} Jahren'
},
streamers: {
recordLiveTitle: 'Diesen Streamer live aufnehmen (läuft bis der Stream endet)',
liveRecordingStarted: 'Live-Aufnahme für {streamer} gestartet.',
liveRecordingOffline: '{streamer} ist gerade offline.',
liveRecordingAlreadyActive: 'Aufnahme von {streamer} läuft bereits.',
liveRecordingFailed: 'Live-Aufnahme konnte nicht gestartet werden',
autoRecordTitle: 'Auto-Aufnahme: wenn dieser Streamer live geht, nimmt die App automatisch auf',
autoRecordEnabled: 'Auto-Aufnahme aktiviert für {streamer}. Live-Status wird geprüft...',
autoRecordDisabled: 'Auto-Aufnahme für {streamer} deaktiviert.',
autoVodTitle: 'Neue VODs (kürzlich veröffentlicht) automatisch herunterladen',
autoVodEnabled: 'Auto-VOD aktiviert für {streamer}. Neue VODs werden automatisch geladen.',
autoVodDisabled: 'Auto-VOD für {streamer} deaktiviert.',
autoVodScanQueued: '{count} neue VOD(s) automatisch eingereiht.',
autoVodScanEmpty: 'Keine neuen VODs gefunden.',
autoRecordScanTriggered: 'Manueller Scan: {count} Live-Aufnahme(n) gestartet.',
autoRecordScanEmpty: 'Manueller Scan: kein Streamer ist gerade live.',
liveNowTooltip: 'Aktuell live auf Twitch',
modalCloseAria: 'Dialog schließen',
sidebarEmpty: 'Noch keine Streamer. Füge oben rechts einen hinzu.',
removeAria: 'Entfernen',
cutProgressAria: 'Schnitt-Fortschritt',
mergeProgressAria: 'Merge-Fortschritt',
updateProgressAria: 'Update-Download-Fortschritt'
},
vods: {
selectAriaLabel: 'VOD für Bulk-Aktion auswählen',
noneTitle: 'Keine VODs',
noneText: 'Wähle einen Streamer aus der Liste.',
loading: 'Lade VODs...',
notFound: 'Streamer nicht gefunden',
noResultsTitle: 'Keine VODs gefunden',
noResultsText: 'Dieser Streamer hat keine VODs.',
untitled: 'Unbenanntes VOD',
views: 'Aufrufe',
addQueue: '+ Warteschlange',
trimButton: 'VOD zuschneiden',
filterPlaceholder: 'Nach Titel filtern... (Strg+F)',
filterAria: 'VOD-Titel filtern',
filterClearTitle: 'Filter löschen (Esc)',
filterNoMatchTitle: 'Keine Treffer',
filterNoMatchText: 'Keine VODs entsprechen dem aktuellen Filter.',
filterMatchCount: '{shown} von {total} VODs',
sortLabel: 'Sortierung:',
sortDateDesc: 'Neueste zuerst',
sortDateAsc: 'Älteste zuerst',
sortViewsDesc: 'Meiste Aufrufe',
sortDurationDesc: 'Längste zuerst',
sortDurationAsc: 'Kürzeste zuerst',
bulkSelectedCount: '{count} ausgewählt',
bulkAddToQueue: '+ Warteschlange',
bulkAdding: 'Füge hinzu...',
bulkClear: 'Löschen',
bulkAddedToQueue: '{count} VODs zur Warteschlange hinzugefügt.',
bulkAddSkipped: 'Keine VODs hinzugefügt (bereits in Queue oder ungültig).',
bulkMarkDownloaded: 'Als heruntergeladen markieren',
bulkUnmark: 'Markierung entfernen',
bulkMarkedDownloaded: '{count} VODs als heruntergeladen markiert.',
bulkUnmarkedDownloaded: 'Markierung von {count} VODs entfernt.',
alreadyDownloaded: 'Bereits heruntergeladen',
hideDownloaded: 'Bereits geladene ausblenden',
hideDownloadedTitle: 'VODs ausblenden, die als bereits heruntergeladen markiert sind',
openOnTwitch: 'Auf Twitch öffnen',
ctxOpenOnTwitch: 'Auf Twitch öffnen',
ctxCopyUrl: 'VOD-URL kopieren',
ctxCopiedUrl: 'URL in Zwischenablage kopiert.',
ctxMarkDownloaded: 'Als heruntergeladen markieren',
ctxUnmarkDownloaded: 'Markierung entfernen'
},
clips: {
dialogTitle: 'VOD zuschneiden',
dialogStart: 'Start:',
dialogStartTime: 'Startzeit (HH:MM:SS):',
dialogEnd: 'Ende:',
dialogEndTime: 'Endzeit (HH:MM:SS):',
dialogDuration: 'Dauer: ',
dialogPartLabel: 'Start Part-Nummer (optional, für Fortsetzung):',
dialogPartHint: 'Leer lassen = Teil 1',
dialogFormatLabel: 'Dateinamen-Format:',
dialogConfirm: 'Zur Queue hinzufügen',
invalidDuration: 'Ungultig!',
invalidTime: 'Ungültige Zeitangaben',
endBeforeStart: 'Endzeit muss größer als Startzeit sein!',
outOfRange: 'Zeit außerhalb des VOD-Bereichs!',
enterUrl: 'Bitte URL eingeben',
loadingButton: 'Lade...',
loadingStatus: 'Download läuft...',
downloadButton: 'Clip herunterladen',
success: 'Download erfolgreich!',
errorPrefix: 'Fehler: ',
unknownError: 'Unbekannter Fehler',
formatSimple: '(Standard)',
formatTimestamp: '(mit Zeitstempel)',
formatParts: '(Parts-Format)',
formatTemplate: '(benutzerdefiniert)',
templateEmpty: 'Das Template darf im benutzerdefinierten Modus nicht leer sein.',
templatePlaceholder: '{date}_{part}.mp4',
templateHelp: 'Platzhalter: {title} {id} {channel} {date} {part} {part_padded} {trim_start} {trim_end} {trim_length} {date_custom="yyyy-MM-dd"}',
urlPlaceholder: 'https://clips.twitch.tv/... oder https://www.twitch.tv/.../clip/...',
startPartPlaceholder: 'z.B. 42'
},
cutter: {
videoInfoFailed: 'Konnte Video-Informationen nicht lesen. FFprobe installiert?',
previewLoading: 'Lade Vorschau...',
previewUnavailable: 'Vorschau nicht verfügbar',
previewAlt: 'Vorschau',
cutting: 'Exportiert…',
cut: 'Video exportieren',
cutSuccess: 'Video erfolgreich exportiert!',
cutFailed: 'Fehler beim Exportieren des Videos.',
infoDuration: 'Dauer',
infoResolution: 'Auflösung',
infoFps: 'FPS',
infoSelection: 'Ausgabe',
startLabel: 'Start',
endLabel: 'Ende',
filePathPlaceholder: 'Keine Datei ausgewählt…',
editorTitle: 'Trimmen & schneiden',
previewMode: 'Schnittvorschau',
previewModeHint: 'Entfernte Bereiche überspringen',
globalTrim: 'Gesamtauswahl',
cutsLabel: 'Entfernte Bereiche',
noCuts: 'Noch keine Schnitte',
newCut: 'Neuer Schnitt',
cutLabel: 'Schnitt',
removeCut: 'Schnitt entfernen',
videoTrack: 'VIDEO',
audioTrack: 'AUDIO',
noAudio: 'Keine Audiospur',
loadingMedia: 'Video wird vorbereitet…',
speedLabel: 'Geschwindigkeit',
play: 'Abspielen',
pause: 'Pausieren',
stop: 'Stopp',
rewind10: '10 Sekunden zurück',
forward10: '10 Sekunden vor',
mute: 'Stummschalten',
unmute: 'Ton einschalten',
volume: 'Lautstärke',
playerSettings: 'Player-Einstellungen',
fullscreen: 'Vollbild',
undo: 'Rückgängig',
redo: 'Wiederholen',
zoomOut: 'Timeline verkleinern',
zoomIn: 'Timeline vergrößern',
zoom: 'Timeline-Zoom',
trimStart: 'Startgrenze verschieben',
trimEnd: 'Endgrenze verschieben',
export: 'Video exportieren',
cancel: 'Abbrechen',
exportSuccess: 'Video wurde erfolgreich exportiert.',
exportFailed: 'Der Videoexport ist fehlgeschlagen.',
invalidRange: 'Der Zeitbereich ist ungültig oder überschneidet einen anderen Schnitt.',
unsupportedFile: 'Bitte eine unterstützte Videodatei auswählen.',
discardTitle: 'Aktuellen Schnitt verwerfen?',
discardMessage: 'Beim Öffnen eines anderen Videos gehen die aktuellen Schnittänderungen verloren.',
discardCancel: 'Aktuelles Video behalten',
discardConfirm: 'Verwerfen und öffnen'
},
merge: {
empty: 'Keine Videos ausgewahlt',
merging: 'Zusammenfügen...',
merge: 'Zusammenfügen',
success: 'Videos erfolgreich zusammengefugt!',
failed: 'Fehler beim Zusammenfügen der Videos.',
moveUpAria: 'Nach oben verschieben',
moveDownAria: 'Nach unten verschieben',
removeAria: 'Aus Liste entfernen'
},
mergeGroup: {
btn: 'Zusammenfügen & Splitten',
phaseDownloading: 'VOD wird heruntergeladen',
phaseMerging: 'Zusammenfügen...',
phaseSplitting: 'Part wird erstellt',
phaseCleanup: 'Aufraumen...',
needMinTwo: 'Mindestens 2 VODs auswählen',
titleTwo: 'Merge: {title1} + {title2}',
titleMany: 'Merge: {title1} + {count} weitere',
metaLabel: '{count} VODs',
},
updates: {
bannerDefault: 'Neue Version verfügbar!',
latest: 'Du hast die neueste Version!',
checking: 'Suche nach Updates...',
checkInProgress: 'Update-Prufung lauft bereits.',
readyToInstall: 'Update ist bereit zur Installation.',
checkFailed: 'Update-Prufung fehlgeschlagen.',
downloading: 'Wird heruntergeladen...',
downloadInProgress: 'Update-Download lauft bereits.',
downloadFailed: 'Update-Download fehlgeschlagen.',
available: 'verfügbar!',
downloadNow: 'Jetzt herunterladen',
downloadLabel: 'Download',
ready: 'bereit zur Installation!',
installNow: 'Jetzt installieren & neu starten',
modalAvailableTitle: 'Update verfügbar',
modalAvailableMessage: 'Version {version} ist verfügbar. Jetzt herunterladen?',
modalReadyTitle: 'Update bereit',
modalReadyMessage: 'Version {version} wurde heruntergeladen. Jetzt installieren und neu starten?',
modalDismiss: 'Nein',
later: 'Später',
dismissAria: 'Schließen',
modalDownloadConfirm: 'Ja, herunterladen',
modalInstallConfirm: 'Ja, installieren',
modalSkipVersion: 'Diese Version überspringen',
changelogLabel: 'Changelog',
showChangelog: 'Changelog anzeigen',
hideChangelog: 'Changelog ausblenden',
noChangelog: 'Kein Changelog verfügbar.',
releasedLabel: 'Release'
}
} as const;