mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 23:05:46 +00:00
281e86fd3b
* fix(queue): persist timeline play history across queue replace (#1096) Add a session-scoped play-history buffer (with play_session cold bootstrap) and timeline UI that shows history + current + upcoming without mutating the canonical queue or Subsonic sync. * fix(queue): pin timeline current to top and replay history in-place Timeline scroll matches queue mode (current at top). History clicks insert after the playing track instead of replacing the queue, and replayed tracks stay visible in the history strip. * docs: add CHANGELOG and credits for timeline play history (PR #1204) * fix(queue): resolve cross-server cover art for timeline history Include album/cover ids in play_session bootstrap rows, prefetch history refs through the queue resolver per server, and resolve before replay so Now Playing artwork works for inactive-server tracks. * fix(now-playing): stop playbackReport on cross-server track switch Send stopped to the previous server's playbackReport session when the playback server changes (queue click, history replay, etc.) so Who is listening clears on the server that was showing the prior track. * fix(queue): close timeline history review gaps for PR #1204 Defer play_session bootstrap until the library index is ready with retry while timeline mode is active; resolve history and queue rows by serverId + trackId for mixed-server queues; add tests for bootstrap defer and ref lookup. * chore(queue): remove dead timeline scroll guard in QueueList Timeline scroll is handled in the virtual-rows effect; the legacy branch is queue/playlist only. * fix(queue): address PR review nits for timeline play history Use authoritative row.ref.serverId for history clicks before resolver fill; simplify empty bootstrap seed; tighten completion types; unify recent_plays SQL. * fix(queue): immutable session history append for useSyncExternalStore Replace in-place push with a fresh array so getSnapshot returns a new reference and React re-renders on live appends without a playerStore update.
771 lines
52 KiB
TypeScript
771 lines
52 KiB
TypeScript
export const settings = {
|
||
title: 'Einstellungen',
|
||
language: 'Sprache',
|
||
languageEn: 'English',
|
||
languageDe: 'Deutsch',
|
||
languageEs: 'Español',
|
||
languageFr: 'Français',
|
||
languageNl: 'Nederlands',
|
||
languageNb: 'Norsk',
|
||
languageRu: 'Русский',
|
||
languageZh: '中文',
|
||
languageRo: 'Română',
|
||
languageJa: '日本語',
|
||
languageHu: 'Magyar',
|
||
languagePl: 'Polski',
|
||
font: 'Schriftart',
|
||
fontHintOpenDyslexic: 'Legasthenie-freundlich · keine Chinesisch-Unterstützung',
|
||
theme: 'Design',
|
||
appearance: 'Darstellung',
|
||
servers: 'Server',
|
||
serverName: 'Server-Name',
|
||
serverUrl: 'Server-URL',
|
||
serverUrlPlaceholder: '192.168.1.100:4533 oder https://music.example.com',
|
||
serverAlternateUrl: 'Zweite Adresse (optional)',
|
||
serverAlternateUrlPlaceholderPublic: 'https://music.example.com',
|
||
serverAlternateUrlPlaceholderLocal: '192.168.1.100:4533',
|
||
serverAlternateUrlHintAddPublic: 'Du kannst eine öffentliche Adresse hinzufügen, um außerhalb deines Heimnetzwerks zuzugreifen.',
|
||
serverAlternateUrlHintAddLocal: 'Du kannst eine lokale Adresse hinzufügen, um zu Hause schneller zu verbinden.',
|
||
serverBothLanError: 'Beide Adressen sind lokal — eine entfernen oder eine öffentliche hinzufügen.',
|
||
dualAddressVerifying: 'Prüfe, ob beide Adressen denselben Server meinen…',
|
||
dualAddressMismatch: 'Die beiden Adressen zeigen auf unterschiedliche Server. Schreibweise prüfen und erneut versuchen.',
|
||
dualAddressInsufficient: 'Konnte nicht bestätigen, dass beide Adressen derselbe Server sind. Entferne eine Adresse, um fortzufahren.',
|
||
dualAddressUnreachable: 'Konnte {{host}} nicht erreichen. Adresse und Netzwerk prüfen, dann erneut versuchen.',
|
||
urlRemigrationTitle: 'Bibliotheksdaten verschieben?',
|
||
urlRemigrationMessage: 'Beim Ändern der Adresse werden alle Bibliotheks-, Analyse- und Cover-Cache-Daten von {{oldKey}} nach {{newKey}} verschoben. Das kann nicht rückgängig gemacht werden.',
|
||
urlRemigrationConfirm: 'Daten verschieben',
|
||
urlRemigrationProgress: 'Bibliotheksdaten werden verschoben…',
|
||
urlRemigrationFailureInspect: 'Konnte nicht prüfen, was verschoben würde. Erneut versuchen oder das Debug-Log öffnen.',
|
||
urlRemigrationFailureRun: 'Verschieben der Bibliotheksdaten ist fehlgeschlagen. Deine gespeicherten Daten sind unverändert — erneut versuchen.',
|
||
urlRemigrationFailureCoverRename: 'Bibliotheksdaten wurden verschoben, aber Cover-Dateien konnten nicht umbenannt werden. Cover werden beim nächsten Zugriff neu aufgebaut.',
|
||
shareUsesLocalUrl: 'Lokale Adresse in Freigabe-Links verwenden',
|
||
shareUsesLocalUrlDesc: 'Wirkt sich auf Orbit-Einladungen und Bibliotheks-Freigaben aus. Standard: öffentliche Adresse.',
|
||
serverUsername: 'Benutzername',
|
||
serverPassword: 'Passwort',
|
||
customHeadersTitle: 'Benutzerdefinierte HTTP-Header',
|
||
customHeadersHelp: 'Für Reverse-Proxy-Gates (Pangolin, Cloudflare Access). Werden nur an deinen Server gesendet — nicht an Drittanbieter.',
|
||
customHeadersNamePlaceholder: 'Header-Name',
|
||
customHeadersValuePlaceholder: 'Header-Wert',
|
||
customHeadersAddRow: 'Header hinzufügen',
|
||
customHeadersRemoveRow: 'Header entfernen',
|
||
customHeadersApplyTo: 'Header anwenden auf',
|
||
customHeadersApplyTo_public: 'Öffentliche Adresse',
|
||
customHeadersApplyTo_local: 'Lokale Adresse',
|
||
customHeadersApplyTo_both: 'Beide Adressen',
|
||
customHeadersNotInShare: 'Benutzerdefinierte Header sind nicht in Freigabe-Einladungen enthalten — auf jedem Gerät erneut konfigurieren.',
|
||
'customHeadersValidation.tooMany': 'Zu viele benutzerdefinierte Header (max. 16).',
|
||
'customHeadersValidation.nameRequired': 'Header-Name ist erforderlich.',
|
||
'customHeadersValidation.nameTooLong': 'Header-Name ist zu lang.',
|
||
'customHeadersValidation.valueTooLong': 'Header-Wert ist zu lang.',
|
||
'customHeadersValidation.crlf': 'Header-Namen und -Werte dürfen keine Zeilenumbrüche enthalten.',
|
||
'customHeadersValidation.blocked': 'Dieser Header-Name ist nicht erlaubt.',
|
||
'customHeadersValidation.duplicate': 'Doppelter Header-Name.',
|
||
addServer: 'Server hinzufügen',
|
||
addServerTitle: 'Neuen Server hinzufügen',
|
||
editServer: 'Bearbeiten',
|
||
editServerTitle: 'Server bearbeiten',
|
||
useServer: 'Verwenden',
|
||
deleteServer: 'Löschen',
|
||
noServers: 'Keine Server gespeichert.',
|
||
serverActive: 'Aktiv',
|
||
serverVersionUnknown: 'Serverversion unbekannt',
|
||
confirmDeleteServer: 'Server „{{name}}" löschen?',
|
||
confirmDeleteServerLibrary: 'Auch den lokalen Bibliotheksindex dieses Servers löschen? Auf Abbrechen klicken, um die zwischengespeicherte Kopie für die Offline-Nutzung zu behalten.',
|
||
serverConnecting: 'Verbinde…',
|
||
serverConnected: 'Verbunden!',
|
||
serverFailed: 'Verbindung fehlgeschlagen.',
|
||
testBtn: 'Verbindung testen',
|
||
testingBtn: 'Teste…',
|
||
serverCompatible: 'Für Navidrome entwickelt. Andere Subsonic-kompatible Server (Gonic, Airsonic, …) funktionieren ggf. eingeschränkt, weil Psysonic viele Navidrome-spezifische API-Endpunkte nutzt.',
|
||
userMgmtTitle: 'Benutzerverwaltung',
|
||
userMgmtDesc: 'Benutzer auf diesem Server verwalten. Erfordert Admin-Rechte.',
|
||
userMgmtNoAdmin: 'Du brauchst Admin-Rechte, um Benutzer auf diesem Server zu verwalten.',
|
||
userMgmtLoadError: 'Benutzer konnten nicht geladen werden.',
|
||
userMgmtLoadFriendly: 'Server hat nicht geantwortet — meistens ein Einzelfall.',
|
||
userMgmtRetry: 'Erneut versuchen',
|
||
userMgmtEmpty: 'Keine Benutzer gefunden.',
|
||
userMgmtYouBadge: 'Du',
|
||
userMgmtAdminBadge: 'Admin',
|
||
userMgmtAddUser: 'Benutzer hinzufügen',
|
||
userMgmtAddUserTitle: 'Neuen Benutzer anlegen',
|
||
userMgmtEditUserTitle: 'Benutzer bearbeiten',
|
||
userMgmtUsername: 'Benutzername',
|
||
userMgmtName: 'Anzeigename',
|
||
userMgmtEmail: 'E-Mail',
|
||
userMgmtPassword: 'Passwort',
|
||
userMgmtPasswordEditHint: 'Neues Passwort eingeben, um es zu ändern.',
|
||
userMgmtRoleAdmin: 'Admin',
|
||
userMgmtLibraries: 'Bibliotheken',
|
||
userMgmtLibrariesAdminHint: 'Admin-Benutzer haben automatisch Zugriff auf alle Bibliotheken.',
|
||
userMgmtLibrariesEmpty: 'Keine Bibliotheken auf diesem Server vorhanden.',
|
||
userMgmtLibrariesValidation: 'Mindestens eine Bibliothek auswählen.',
|
||
userMgmtLibrariesUpdateError: 'Benutzer gespeichert, aber Bibliothekszuweisung fehlgeschlagen',
|
||
userMgmtNoLibraries: 'Keine Bibliotheken zugewiesen',
|
||
userMgmtNeverSeen: 'Nie',
|
||
userMgmtSave: 'Speichern',
|
||
userMgmtCancel: 'Abbrechen',
|
||
userMgmtDelete: 'Löschen',
|
||
userMgmtEdit: 'Bearbeiten',
|
||
userMgmtConfirmDelete: 'Benutzer „{{username}}" löschen? Das kann nicht rückgängig gemacht werden.',
|
||
userMgmtCreateError: 'Benutzer konnte nicht angelegt werden.',
|
||
userMgmtUpdateError: 'Benutzer konnte nicht aktualisiert werden.',
|
||
userMgmtDeleteError: 'Benutzer konnte nicht gelöscht werden.',
|
||
userMgmtCreated: 'Benutzer angelegt.',
|
||
userMgmtUpdated: 'Benutzer aktualisiert.',
|
||
userMgmtDeleted: 'Benutzer gelöscht.',
|
||
userMgmtValidationMissing: 'Benutzername, Anzeigename und Passwort sind erforderlich.',
|
||
userMgmtValidationMissingIdentity: 'Benutzername und Anzeigename sind erforderlich.',
|
||
userMgmtMagicStringGenerate: 'Magic-String erzeugen',
|
||
userMgmtSaveAndMagicString: 'Speichern und Magic-String kopieren',
|
||
userMgmtMagicStringPasswordNavHint:
|
||
'Navidrome speichert dieses Passwort für den Benutzer. Weicht es vom aktuellen ab, wird das Anmeldepasswort auf dem Server aktualisiert.',
|
||
userMgmtMagicStringPlaintextWarning:
|
||
'Teilen Sie den Magic-String vorsichtig: Er enthält das Passwort im Klartext (Kodierung ist keine Verschlüsselung). Wer die vollständige Zeichenkette hat, kann sich als dieser Benutzer anmelden.',
|
||
userMgmtMagicStringCopied: 'Magic-String in die Zwischenablage kopiert.',
|
||
userMgmtMagicStringCopyFailed: 'Kopieren in die Zwischenablage fehlgeschlagen.',
|
||
userMgmtMagicStringLoginFailed: 'Passwortprüfung fehlgeschlagen — Anmeldedaten konnten nicht verifiziert werden.',
|
||
userMgmtMagicStringModalTitle: 'Magic-String erzeugen',
|
||
userMgmtMagicStringModalDesc: 'Subsonic-Passwort für „{{username}}" eingeben — es wird in den kopierten Magic-String übernommen.',
|
||
userMgmtMagicStringModalConfirm: 'String kopieren',
|
||
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||
audiomuseBadge: 'AudioMuse-AI',
|
||
audiomuseStatusActive: 'Aktiv',
|
||
audiomuseStatusChecking: 'Wird geprüft…',
|
||
audiomuseStatusNotDetected: 'Nicht erkannt',
|
||
audiomuseStatusProbeFailed: 'Prüfung fehlgeschlagen',
|
||
audiomuseDesc:
|
||
'Aktivieren, wenn dieser Server das <pluginLink>AudioMuse-AI-Navidrome-Plugin</pluginLink> nutzt. Schaltet Instant Mix pro Titel frei und nutzt ähnliche Künstler vom Server statt Last.fm auf Künstlerseiten.',
|
||
audiomuseIssueHint:
|
||
'Instant Mix ist kürzlich fehlgeschlagen — Navidrome-Plugin und AudioMuse-API prüfen. Ohne Server-Treffer werden ähnliche Künstler über Last.fm geladen.',
|
||
connected: 'Verbunden',
|
||
failed: 'Fehlgeschlagen',
|
||
eqTitle: 'Equalizer',
|
||
eqEnabled: 'Equalizer aktivieren',
|
||
eqPreset: 'Preset',
|
||
eqPresetCustom: 'Benutzerdefiniert',
|
||
eqPresetBuiltin: 'Eingebaute Presets',
|
||
eqPresetCustomGroup: 'Meine Presets',
|
||
eqPresetAutoEqGroup: 'AutoEQ',
|
||
eqSavePreset: 'Als Preset speichern',
|
||
eqPresetName: 'Preset-Name…',
|
||
eqDeletePreset: 'Preset löschen',
|
||
eqResetBands: 'Auf Flat zurücksetzen',
|
||
eqPreGain: 'Vorverstärkung',
|
||
eqResetPreGain: 'Vorverstärkung zurücksetzen',
|
||
eqAutoEqTitle: 'AutoEQ Kopfhörer-Suche',
|
||
eqAutoEqPlaceholder: 'Kopfhörer / IEM Modell suchen…',
|
||
eqAutoEqSearching: 'Suche…',
|
||
eqAutoEqNoResults: 'Keine Ergebnisse gefunden',
|
||
eqAutoEqError: 'Suche fehlgeschlagen',
|
||
eqAutoEqRateLimit: 'GitHub Rate-Limit erreicht — in einer Minute erneut versuchen',
|
||
eqAutoEqFetchError: 'EQ-Profil konnte nicht geladen werden',
|
||
behavior: 'App-Verhalten',
|
||
groupTray: 'Tray',
|
||
groupLinuxRendering: 'Linux-Rendering',
|
||
groupClock: 'Uhr',
|
||
groupDisplay: 'Anzeige',
|
||
groupWindow: 'Fenster',
|
||
cacheTitle: 'Max. Speichergröße',
|
||
cacheDesc: 'Browser-Cache für Cover und Künstlerbilder (IndexedDB). Wenn voll, werden die ältesten Einträge automatisch entfernt.',
|
||
cacheUsedImages: 'Bilder:',
|
||
cacheUsedOffline: 'Offline-Tracks:',
|
||
cacheUsedHot: 'Belegter Speicher:',
|
||
hotCacheTrackCount: 'Titel im Cache:',
|
||
cacheMaxLabel: 'Max. Größe',
|
||
imageCacheScopeLabel: 'Bereich',
|
||
imageCacheSubTitle: 'Vorschauen im Browser',
|
||
coverDiskCacheSubTitle: 'Cover-Cache auf der Festplatte',
|
||
coverCacheStrategyTitle: 'Cover-Cache',
|
||
coverCacheStrategyDesc: 'Du kannst für jeden Server eine Strategie wählen: Lazy — Cover bei Bedarf laden; Aggressive — bei Bedarf laden plus zusätzliches Vorladen im Hintergrund.',
|
||
coverCacheStrategyLabel: 'Strategie',
|
||
coverCacheStrategyServerLabel: 'Server',
|
||
coverCacheStrategyProgressLabel: 'Cache',
|
||
coverCacheStrategyActionsLabel: 'Aktionen',
|
||
coverCacheStrategyLazy: 'Lazy',
|
||
coverCacheStrategyLazyDesc: 'Lädt Cover nur, wenn sie benötigt werden.',
|
||
coverCacheStrategyAggressive: 'Aggressive',
|
||
coverCacheStrategyAggressiveDesc: 'Lazy-Verhalten plus zusätzliches Vorladen im Hintergrund.',
|
||
coverCacheStrategyDiskUsage: 'Auf der Festplatte: {{size}}',
|
||
coverCacheStrategyProgressValue: '{{percent}}% ({{done}}/{{total}}) · {{size}}',
|
||
coverCacheStrategyClearAction: 'Cover-Cache leeren',
|
||
coverCacheStrategyClearTitle: 'Cover-Cache leeren?',
|
||
coverCacheStrategyClearDesc: 'Entfernt alle gecachten Cover-Bilder für {{server}}. Sie werden bei Bedarf neu heruntergeladen.',
|
||
coverCacheStrategyClearConfirm: 'Leeren',
|
||
coverCacheStrategyClearCancel: 'Abbrechen',
|
||
coverCacheStrategyClearSuccess: 'Cover-Cache für diesen Server geleert.',
|
||
coverCacheStrategyClearError: 'Cover-Cache konnte nicht geleert werden.',
|
||
coverCacheStrategyServerRemoved: 'entfernter Server',
|
||
cacheClearBtn: 'Cache leeren',
|
||
cacheClearWarning: 'Löscht alle gecachten Cover- und Künstlerbilder im Browser-Speicher. Sie werden bei Bedarf neu geladen.',
|
||
cacheClearConfirm: 'Bild-Cache leeren',
|
||
cacheClearCancel: 'Abbrechen',
|
||
mediaDirTitle: 'Medienordner',
|
||
mediaDirDesc: 'Stammordner für lokale Wiedergabe. Offline-Bibliothek: library/; Warteschlangen-Puffer: cache/.',
|
||
mediaDirDefault: 'Standard (App-Daten)',
|
||
mediaDirChange: 'Ordner ändern',
|
||
mediaDirClear: 'Auf Standard zurücksetzen',
|
||
mediaDirHint: 'Neue Downloads nutzen diesen Ort. Bestehende Dateien bleiben am ursprünglichen Pfad, bis du sie entfernst.',
|
||
offlineStorageTitle: 'Offline-Speicher',
|
||
offlineDirTitle: 'Offline-Bibliothek (In-App)',
|
||
offlineDirDesc: 'Speicherort für Titel, die du innerhalb von Psysonic offline verfügbar machst.',
|
||
offlineDirDefault: 'Standard (App-Daten)',
|
||
offlineDirChange: 'Verzeichnis ändern',
|
||
offlineDirClear: 'Auf Standard zurücksetzen',
|
||
offlineDirHint: 'Neue Downloads werden an diesem Ort gespeichert. Bestehende Downloads verbleiben am ursprünglichen Pfad.',
|
||
hotCacheTitle: 'Hot-Playback-Cache',
|
||
hotCacheDisclaimer: 'Lädt kommende Warteschlangen-Titel vor und behält zuletzt gespielte. Bei aktivierter Option: Speicherplatz und Netzwerk.',
|
||
hotCacheDirDefault: 'Standard (App-Daten)',
|
||
hotCacheDirChange: 'Ordner ändern',
|
||
hotCacheDirClear: 'Auf Standard zurücksetzen',
|
||
hotCacheDirHint: 'Beim Ordnerwechsel wird der App-Index zurückgesetzt; alte Dateien bleiben am alten Ort, bis Sie sie löschen.',
|
||
hotCacheEnabled: 'Hot-Playback-Cache aktivieren',
|
||
hotCacheMaxMb: 'Maximale Cache-Größe',
|
||
hotCacheDebounce: 'Debounce bei Warteschlangen-Änderungen',
|
||
hotCacheDebounceImmediate: 'Sofort',
|
||
hotCacheDebounceSeconds: '{{n}} s',
|
||
hotCacheClearBtn: 'Hot-Cache leeren',
|
||
audioOutputDevice: 'Audio-Ausgabegerät',
|
||
audioOutputDeviceDesc: 'Wähle das Audiogerät, über das Psysonic spielt. Änderungen werden sofort übernommen und starten den aktuellen Track neu.',
|
||
audioOutputDeviceDefault: 'Systemstandard',
|
||
audioOutputDeviceRefresh: 'Geräteliste aktualisieren',
|
||
audioOutputDeviceOsDefaultNow: 'aktuelle Systemausgabe',
|
||
audioOutputDeviceListError: 'Audiogeräteliste konnte nicht geladen werden.',
|
||
audioOutputDeviceNotInCurrentList: 'nicht in der aktuellen Liste',
|
||
audioOutputDeviceRememberEq: 'EQ pro Gerät merken',
|
||
audioOutputDeviceRememberEqDesc: 'Speichert die Equalizer-Einstellungen für jedes Audioausgabegerät und stellt sie beim Wechsel automatisch wieder her. Das Profil wechselt nur, wenn du hier ein Gerät auswählst; die Systemstandard-Ausgabe nutzt ein gemeinsames Profil.',
|
||
hiResTitle: 'Native Hi-Res-Wiedergabe',
|
||
hiResEnabled: 'Native Hi-Res-Wiedergabe aktivieren',
|
||
hiResDesc: "Spielt jeden Titel mit seiner ursprünglichen Abtastrate ab, statt alles auf 44,1 kHz herunterzurechnen, und stellt das Ausgabegerät passend zur Datei um (88,2 kHz und höher). Nur aktivieren, wenn Hardware und Netzwerk hohe Abtastraten zuverlässig verarbeiten.",
|
||
hiResCrossfadeResampleTitle: 'Crossfade / AutoDJ / Gapless Mischrate',
|
||
hiResCrossfadeResampleDesc: 'Wenn benachbarte Titel unterschiedliche Abtastraten haben, werden beide Seiten für Crossfade-, AutoDJ- und Gapless-Übergänge auf diese Rate resampled.',
|
||
hiResCrossfadeResample44: '44,1 kHz',
|
||
hiResCrossfadeResample88: '88,2 kHz',
|
||
hiResCrossfadeResample96: '96 kHz',
|
||
hiResCrossfadeResampleWarning: 'Resampling verbraucht zusätzliche CPU und Speicher — auf langsameren Geräten vorsichtig wählen.',
|
||
showArtistImages: 'Künstlerbilder anzeigen',
|
||
showArtistImagesDesc: 'Lädt und zeigt Künstlerbilder in der Künstlerübersicht. Standardmäßig deaktiviert, um Server-I/O und Netzwerklast bei großen Bibliotheken zu reduzieren.',
|
||
showOrbitTrigger: '„Orbit" im Header zeigen',
|
||
showOrbitTriggerDesc: 'Der Kopfzeilen-Button zum Starten oder Beitreten einer gemeinsamen Hör-Session. Ausblenden, wenn du Orbit nicht nutzt — hier lässt er sich jederzeit wieder einschalten.',
|
||
showTrayIcon: 'Tray-Icon anzeigen',
|
||
showTrayIconDesc: 'Psysonic-Icon im System-Tray / in der Menüleiste anzeigen.',
|
||
minimizeToTray: 'Im Tray minimieren',
|
||
minimizeToTrayDesc: 'Beim Schließen des Fensters läuft Psysonic weiter im System-Tray statt zu beenden.',
|
||
clockFormat: 'Uhrzeitformat',
|
||
clockFormatDesc: 'Format für die Queue-ETA und die Vorschau des Sleep-Timers.',
|
||
clockFormatAuto: 'Automatisch (Systemsprache)',
|
||
clockFormatTwentyFour: '24-Stunden',
|
||
clockFormatTwelve: '12-Stunden (AM/PM)',
|
||
preloadMiniPlayer: 'Mini-Player vorladen',
|
||
preloadMiniPlayerDesc: 'Baut das Mini-Player-Fenster beim App-Start im Hintergrund auf, damit es beim ersten Öffnen sofort Inhalt zeigt. Kostet etwas mehr RAM.',
|
||
discordRichPresence: 'Discord Rich Presence',
|
||
discordRichPresenceDesc: 'Zeigt den aktuell gespielten Titel im Discord-Profil an. Discord muss dafür geöffnet sein.',
|
||
discordRichPresenceNotice: 'Achtung: Dies ist die in Psysonic integrierte Discord Rich Presence. Wenn du stattdessen das offizielle Navidrome-Discord-Rich-Presence-Plugin nutzen möchtest, lass diese Funktion deaktiviert und aktiviere stattdessen weiter unten auf dieser Seite „Im Livefenster anzeigen".',
|
||
useCustomTitlebar: 'Eigene Titelleiste',
|
||
useCustomTitlebarDesc: 'Ersetzt die System-Titelleiste durch eine eingebaute, die zum App-Theme passt. Deaktivieren, um die native GNOME/GTK-Titelleiste zu verwenden.',
|
||
windowButtonStyle: 'Fenster-Buttons',
|
||
windowButtonStyleDesc: 'Wähle das Aussehen der Minimieren-, Maximieren- und Schließen-Buttons.',
|
||
windowButtonsDots: 'Punkte',
|
||
windowButtonsDotsGlyph: 'Punkte + Symbole',
|
||
windowButtonsFlat: 'Flach',
|
||
windowButtonsPill: 'Pille',
|
||
windowButtonsOutline: 'Umriss',
|
||
windowButtonsGlyph: 'Minimal',
|
||
showMinimizeButton: 'Minimieren-Button anzeigen',
|
||
showMinimizeButtonDesc: 'Ausschalten, um nur Maximieren und Schließen anzuzeigen.',
|
||
linuxWebkitSmoothScroll: 'Sanftes Mausrad (Linux)',
|
||
linuxWebkitSmoothScrollDesc: 'An: mit Nachlauf. Aus: zeilenweise wie in GTK-Apps.',
|
||
linuxWebkitInputForceRepaint: 'Eingabefelder beim Fokus neu zeichnen (Linux)',
|
||
linuxWebkitInputForceRepaintDesc: 'Behelf für WebKitGTK 2.50.x, wo Textfelder beim Klick einfrieren. Such-Icons flackern beim Fokus kurz.',
|
||
linuxWaylandTextRender: 'Wayland-Textdarstellung (Linux)',
|
||
linuxWaylandTextRenderDesc:
|
||
'Kantenglättung in der Oberfläche wirkt sofort. Die WebKit-Beschleunigungsrichtlinie (scharf/GPU) wird gespeichert und beim nächsten App-Start angewendet — ein Live-Umschalten kann WebKitGTK einfrieren.',
|
||
linuxWaylandTextRenderBalanced: 'Ausgewogen',
|
||
linuxWaylandTextRenderSharp: 'Scharf (CPU-freundlich)',
|
||
linuxWaylandTextRenderGpu: 'GPU zuerst',
|
||
linuxWaylandTextRenderMinimal: 'Minimal (Standard-CSS-Glättung)',
|
||
discordCoverTitle: 'Cover-Quelle',
|
||
discordCoverDesc: 'Woher das Cover auf deinem Discord-Profil stammt.',
|
||
discordCoverNone: 'Keine (nur App-Symbol)',
|
||
discordCoverServer: 'Server (über Album-Info)',
|
||
discordCoverApple: 'Apple Music',
|
||
discordOptions: 'Erweiterte Discord-Optionen',
|
||
discordTemplates: 'Benutzerdefinierte Textvorlagen',
|
||
discordTemplatesDesc: 'Passen Sie an, welche Informationen in Ihrem Discord-Profil angezeigt werden. Variablen: {title}, {artist}, {album}',
|
||
discordTemplateDetails: 'Primäre Zeile (details)',
|
||
discordTemplateState: 'Sekundäre Zeile (state)',
|
||
discordTemplateLargeText: 'Album-Tooltip (largeText)',
|
||
discordTemplateName: 'Userliste-Zeile (name)',
|
||
nowPlayingEnabled: 'Im Livefenster anzeigen',
|
||
nowPlayingEnabledDesc: 'Überträgt den aktuell gespielten Titel an die Livehörer-Ansicht des Servers. Deaktivieren, um keine Wiedergabedaten zu senden.',
|
||
nowPlayingPluginNote: 'Notwendig bei Verwendung des offiziellen Navidrome-Discord-Rich-Presence-Plugins.',
|
||
externalArtwork: 'Externe Artwork Scraper',
|
||
externalArtworkDesc: 'Lädt hochauflösende Künstler-Hintergründe und -Banner von fanart.tv für den Mainstage-Hero, Künstlerseiten und den Vollbild-Player. Standardmäßig aus.',
|
||
externalArtworkNote: 'Wenn aktiv, wird der Künstlername (und der des aktuellen Albums) an musicbrainz.org gesendet, um den Künstler zu identifizieren, danach werden Bilder von fanart.tv geladen — bedarfsgesteuert und nur lesend; deine Bibliotheks-Tags werden nie verändert. Die Bilder stammen von fanart.tv und seinen Mitwirkenden.',
|
||
externalArtworkByokTitle: 'Persönlicher API-Schlüssel (BYOK)',
|
||
externalArtworkByokDesc: 'Optional. Trag hier deinen eigenen fanart.tv-API-Schlüssel ein — er wird zusätzlich zum App-Schlüssel gesendet.',
|
||
externalArtworkByokSaved: 'Gespeichert — wird bei aktivem Scraper mit dem App-Schlüssel gesendet.',
|
||
enableBandsintown: 'Bandsintown-Tourdaten',
|
||
enableBandsintownDesc: 'Zeigt anstehende Konzerte des aktuellen Künstlers im Info-Tab. Daten werden über die öffentliche Bandsintown-API abgerufen.',
|
||
lyricsServerFirst: 'Server-Lyrics bevorzugen',
|
||
lyricsServerFirstDesc: 'Server-seitige Lyrics (eingebettete Tags, Sidecar-Dateien) vor LRCLIB abfragen. Deaktivieren, um LRCLIB zuerst zu verwenden.',
|
||
enableNeteaselyrics: 'Netease Cloud Music Lyrics',
|
||
enableNeteaselyricsDesc: 'Netease Cloud Music als letzte Lyrics-Quelle verwenden, wenn Server und LRCLIB nichts liefern. Besonders gut für asiatische und internationale Musik.',
|
||
lyricsSourcesTitle: 'Lyrics-Quellen',
|
||
lyricsSourcesDesc: 'Wähle, welche Quellen für Lyrics abgefragt werden und in welcher Reihenfolge. Ziehen zum Sortieren. Deaktivierte Quellen werden übersprungen.',
|
||
lyricsSourceServer: 'Server',
|
||
lyricsSourceLrclib: 'LRCLIB',
|
||
lyricsSourceNetease: 'Netease Cloud Music',
|
||
lyricsYouLyPlus: 'YouLyPlus (Karaoke)',
|
||
lyricsYouLyPlusDesc: 'Wort-für-Wort-Sync über ein Community-Backend (Apple Music, Spotify, Musixmatch, QQ). Wird zuerst versucht; die aktivierten Quellen unten dienen als Fallback.',
|
||
lyricsSourcesFallbackHint: 'Dienen als Fallback, wenn YouLyPlus nichts findet. Zum Sortieren ziehen.',
|
||
lyricsSourcesPrimaryHint: 'Werden der Reihe nach genutzt. Zum Sortieren ziehen. Alle aus = Lyrics deaktiviert.',
|
||
lyricsStaticOnly: 'Nur statische Lyrics anzeigen',
|
||
lyricsStaticOnlyDesc: 'Synchronisierte Lyrics werden ohne Auto-Scroll und ohne Wort-Hervorhebung als statischer Text dargestellt.',
|
||
downloadsTitle: 'ZIP-Export & Archivierung',
|
||
downloadsFolderDesc: 'Zielverzeichnis für Alben, die du als ZIP-Datei auf deinen Computer herunterlädst.',
|
||
downloadsDefault: 'Standard-Downloads-Ordner',
|
||
pickFolder: 'Auswählen',
|
||
pickFolderTitle: 'Download-Ordner auswählen',
|
||
clearFolder: 'Download-Ordner löschen',
|
||
logout: 'Abmelden',
|
||
aboutTitle: 'Über Psysonic',
|
||
aboutDesc: 'Ein moderner Desktop-Musikplayer für Navidrome. Nutzt die Subsonic-API plus Navidrome-spezifische Erweiterungen. Basiert auf Tauri v2 mit einer nativen Rust-Audio-Engine — schlank und schnell, aber vollgepackt mit Features: Wellenform-Seekbar, synchronisierte Lyrics, Last.fm-Integration, 10-Band-EQ, Crossfade, nahtlose Wiedergabe, Replay Gain, Genre-Browser und eine große Theme-Bibliothek.',
|
||
aboutLicense: 'Lizenz',
|
||
aboutLicenseText: 'GNU GPL v3 — kostenlos nutzbar, veränderbar und unter gleicher Lizenz weiterzugeben.',
|
||
aboutRepo: 'Quellcode auf GitHub',
|
||
aboutVersion: 'Version',
|
||
aboutBuiltWith: 'Gebaut mit Tauri · React · TypeScript · Rust/rodio',
|
||
aboutMaintainersLabel: 'Projektleitung',
|
||
aboutReleaseNotesLabel: 'Release Notes',
|
||
aboutReleaseNotesLink: 'Neuigkeiten dieser Version öffnen',
|
||
aboutContributorsLabel: 'Mitwirkende',
|
||
showChangelogOnUpdate: "'Was ist neu' bei Update anzeigen",
|
||
showChangelogOnUpdateDesc: 'Blendet nach einem Update einen dezenten Changelog-Banner über Now Playing ein. Klick öffnet die Release Notes, X blendet ihn aus.',
|
||
libraryGridMaxColumnsTitle: 'Kartenraster in der Bibliothek',
|
||
libraryGridMaxColumnsPerfHint: 'Mehr Spalten bedeuten mehr Kacheln pro Zeile und oft mehr Layout- und Zeichenaufwand — bei sehr großen Bibliotheken oder langsamerer Hardware spürbarer.',
|
||
libraryGridMaxColumnsRangeLabel: 'Maximale Spalten ({{min}}–{{max}})',
|
||
libraryGridMaxColumnsDesc: 'Gilt für Album-, Künstler-, Wiedergabelisten-, Radio-, Offline- und andere Kartenansichten. Weniger Spalten = größere Kacheln und meist weniger CPU-Last.',
|
||
libraryIndexTitle: 'Lokaler Bibliotheksindex (Vorschau)',
|
||
libraryIndexDesc: 'Behält eine lokale Kopie der Track-Datenbank jedes Servers vor, damit Stöbern und Suche schnell bleiben und offline funktionieren. Die Erstsynchronisation läuft für alle konfigurierten Server; offline Server werden automatisch erneut versucht.',
|
||
libraryIndexDeltaHint: 'Die Hintergrund-Delta-Synchronisation prüft gebundene Server alle 30 Sekunden und startet bei Bedarf — typischerweise alle 5–45 Minuten, abhängig von Bibliotheksgröße und Last.',
|
||
libraryIndexEnable: 'Lokalen Bibliotheksindex aktivieren',
|
||
libraryIndexEnableAllDesc: 'Alle konfigurierten Server im Hintergrund indizieren und synchronisieren.',
|
||
libraryIndexNoServer: 'Zuerst einen Server hinzufügen.',
|
||
libraryIndexServerListTitle: 'Indizierte Server',
|
||
libraryIndexAllExcluded: 'Alle Server sind von der Synchronisation ausgeschlossen. Index wieder aktivieren oder Server hinzufügen.',
|
||
libraryIndexServerOffline: 'Server offline — Synchronisation verschoben',
|
||
libraryIndexServerSyncing: 'Synchronisiert…',
|
||
libraryIndexFullResync: 'Vollständige Neusynchronisation',
|
||
libraryIndexDeltaSync: 'Delta-Synchronisation',
|
||
libraryIndexExcludeServer: 'Von Synchronisation ausschließen',
|
||
libraryIndexExcludingServer: 'Wird ausgeschlossen…',
|
||
libraryIndexExcludedTitle: 'Von Synchronisation ausgeschlossen',
|
||
libraryIndexIncludeServer: 'Wieder einschließen',
|
||
libraryIndexIncludingServer: 'Wird eingeschlossen…',
|
||
libraryIndexStatus: 'Status',
|
||
libraryIndexStatusIdle: 'Bereit',
|
||
libraryIndexStatusProbing: 'Server wird geprüft…',
|
||
libraryIndexStatusInitial: 'Erst-Synchronisation…',
|
||
libraryIndexStatusReady: 'Fertig ({{count}} Titel)',
|
||
libraryIndexStatusError: 'Fehler — siehe Logs',
|
||
libraryIndexProgressIngest: '{{count}} Titel indiziert…',
|
||
libraryIndexProgressVerify: '{{checked}} geprüft ({{deleted}} entfernt)',
|
||
libraryIndexSyncNow: 'Jetzt synchronisieren',
|
||
libraryIndexVerify: 'Bibliotheksintegrität prüfen',
|
||
libraryIndexCancel: 'Abbrechen',
|
||
libraryIndexAutoReconcile: 'Automatischer Abgleich bei Titelrückgang',
|
||
libraryIndexAutoReconcileDesc: 'Automatisch nach entfernten Titeln suchen, wenn der Server weniger als erwartet meldet.',
|
||
libraryIndexSyncError: 'Bibliotheks-Synchronisation fehlgeschlagen: {{error}}',
|
||
libraryIndexBindError: 'Index konnte nicht aktiviert werden: {{error}}',
|
||
randomMixTitle: 'Zufallsmix-Blacklist',
|
||
luckyMixMenuTitle: 'Glücks-Mix im Menü anzeigen',
|
||
luckyMixMenuDesc: 'Aktiviert Glücks-Mix im "Mix erstellen"-Hub und als separaten Menüeintrag bei getrennter Navigation. Sichtbar nur bei aktiviertem AudioMuse auf dem aktiven Server.',
|
||
randomMixBlacklistTitle: 'Eigene Filter-Keywords',
|
||
randomMixBlacklistDesc: 'Songs werden ausgeschlossen, wenn ein Keyword auf Genre, Titel, Album oder Künstler zutrifft (aktiv wenn die Checkbox oben an ist).',
|
||
randomMixBlacklistPlaceholder: 'Keyword hinzufügen…',
|
||
randomMixBlacklistAdd: 'Hinzufügen',
|
||
randomMixBlacklistEmpty: 'Noch keine eigenen Keywords hinzugefügt.',
|
||
randomMixHardcodedTitle: 'Eingebaute Keywords (aktiv wenn Checkbox an)',
|
||
tabAudio: 'Audio',
|
||
tabStorage: 'Offline & Cache',
|
||
tabAppearance: 'Darstellung',
|
||
tabThemes: 'Themes',
|
||
themesYourThemesTitle: 'Deine Themes',
|
||
themesCvdTooltip: 'Farbfehlsichtigkeits-sicher – Deuteranopie, Protanopie, Tritanopie',
|
||
themeAnimationWarning: 'Dieses Theme nutzt Animationen, die auf deinem Setup (Nvidia/Linux oder Compositing aus) die CPU-Last erhöhen können.',
|
||
themeStoreTitle: 'Theme-Store',
|
||
themeStoreSubmitText: 'Eigenes Theme gebaut? Teil es mit der Community — mehr Infos im Themes-Repository.',
|
||
themeStoreSubmitLink: 'Themes-Repository öffnen',
|
||
themeStoreNetworkNotice: 'Der Theme-Store lädt Katalog und Vorschauen von GitHub. Es werden keine persönlichen Daten gesendet.',
|
||
themeStoreStatsNotice: 'Die „Zuletzt geändert“-Daten werden einmal täglich aktualisiert (gegen 04:17 UTC).',
|
||
themeStoreSearchPlaceholder: 'Themes suchen…',
|
||
themeStoreFilterMode: 'Nach Modus filtern',
|
||
themeStoreModeAll: 'Alle',
|
||
themeStoreModeDark: 'Dunkel',
|
||
themeStoreModeLight: 'Hell',
|
||
themeStoreRefresh: 'Aktualisieren',
|
||
themeStoreLoading: 'Themes werden geladen…',
|
||
themeStoreError: 'Theme-Store konnte nicht geladen werden. Prüfe deine Verbindung.',
|
||
themeStoreRetry: 'Erneut versuchen',
|
||
themeStoreOfflineTitle: 'Der Theme-Store ist offline',
|
||
themeStoreEmpty: 'Keine Themes passen zu deinen Filtern.',
|
||
themeStoreActive: 'Aktiv',
|
||
themeStoreEnlarge: 'Vorschau vergrößern',
|
||
themeStoreSortNewest: 'Neueste',
|
||
themeStoreSortName: 'Alphabetisch',
|
||
themeStoreAnimAll: 'Alle',
|
||
themeStoreAnimAnimated: 'Animiert',
|
||
themeStoreAnimStatic: 'Statisch',
|
||
themeStoreByAuthor: 'von {{author}}',
|
||
themeStoreLastChanged: 'Zuletzt geändert',
|
||
themeMigrationNoticeTitle: 'Theme in den Store gezogen',
|
||
themeMigrationNoticeBody: '{{themes}} ist nicht mehr in der App enthalten. Du kannst es im Theme-Store neu installieren (Einstellungen → Themes) oder ein anderes Theme wählen.',
|
||
themeMigrationNoticeOpen: 'Theme-Store öffnen',
|
||
themeStoreOffline: 'Zeige den zuletzt gecachten Katalog — du scheinst offline zu sein.',
|
||
themeStoreInstall: 'Installieren',
|
||
themeStoreInstalling: 'Installiere…',
|
||
themeStoreApply: 'Anwenden',
|
||
themeStoreUpdate: 'Aktualisieren',
|
||
themeStoreUpdating: 'Aktualisiere…',
|
||
themeStoreUninstall: 'Deinstallieren',
|
||
themeStoreInstallFailed: 'Installation fehlgeschlagen',
|
||
themeStorePagePrev: 'Vorherige Seite',
|
||
themeStorePageNext: 'Nächste Seite',
|
||
themeStorePageStatus: 'Seite {{page}} von {{total}}',
|
||
themeImportTitle: 'Theme importieren',
|
||
themeImportButton: 'Theme importieren…',
|
||
themeImporting: 'Importiere…',
|
||
themeImportHint: 'Lädt ein als .zip verpacktes Theme (manifest.json + theme.css).',
|
||
themeImportSuccess: '„{{name}}“ importiert.',
|
||
themeImportErrorTitle: 'Dieses Theme konnte nicht importiert werden',
|
||
themeImportErrorBody: 'Es entspricht nicht dem Psysonic-Theme-Format. Vielleicht wurde es für eine andere Version erstellt oder die Datei ist unvollständig — prüfe, ob du die richtige .zip gewählt hast, oder frag den Autor des Themes.',
|
||
themeImportErrorDetails: 'Technische Details',
|
||
themeImportConfirmTitle: 'Theme installieren?',
|
||
themeImportConfirmBody: '„{{name}}“ von {{author}} installieren?',
|
||
themeImportConfirmRisk: 'Importierte Themes werden nicht geprüft — installiere nur Themes, denen du vertraust.',
|
||
tabLibrary: 'Bibliothek',
|
||
tabServers: 'Server',
|
||
tabLyrics: 'Songtexte',
|
||
tabPersonalisation: 'Personalisierung',
|
||
tabIntegrations: 'Integrationen',
|
||
inputKeybindingsTitle: 'Tastenkombinationen',
|
||
aboutContributorsCount_one: '{{count}} Beitrag',
|
||
aboutContributorsCount_other: '{{count}} Beiträge',
|
||
searchPlaceholder: 'Einstellungen durchsuchen…',
|
||
searchNoResults: 'Keine Treffer für deine Suche.',
|
||
integrationsPrivacyTitle: 'Hinweis zum Datenschutz',
|
||
integrationsPrivacyBody: 'Alle Integrationen auf diesem Tab sind <strong>Opt-in</strong> und senden, sobald aktiviert, Daten an externe Dienste oder an deinen Navidrome-Server. Last.fm erhält deinen Wiedergabeverlauf, Discord zeigt den aktuell laufenden Track in deinem Profil an, Bandsintown wird pro Künstler für Tour-Daten abgefragt, und der „Jetzt läuft"-Hinweis veröffentlicht deinen aktuellen Titel für andere Benutzer deines Navidrome-Servers. Wer das nicht möchte, lässt den jeweiligen Abschnitt einfach deaktiviert.',
|
||
homeCustomizerTitle: 'Mainstage',
|
||
queueSettingsTitle: 'Warteschlangen-Einstellungen',
|
||
queueModeTitle: 'Warteschlangen-Ansicht',
|
||
queueModeQueueSub: 'Zeigt nur kommende Titel. Der laufende Titel bleibt im Kopf und verschwindet aus der Liste, sobald er gespielt wurde.',
|
||
queueModePlaylistSub: 'Behält die ganze Warteschlange in der Liste, der laufende Titel oben hervorgehoben; gespielte Titel bleiben stehen.',
|
||
queueModeTimelineSub: 'Aktuellen Titel oben in der Liste halten — gespielter Verlauf darüber scrollbar, kommende Titel (in Shuffle-Reihenfolge) darunter.',
|
||
queueToolbarTitle: 'Warteschlangen-Toolbar',
|
||
queueToolbarReset: 'Zurücksetzen',
|
||
queueToolbarSeparator: 'Trennlinie',
|
||
sidebarTitle: 'Seitenleiste',
|
||
sidebarReset: 'Zurücksetzen',
|
||
artistLayoutTitle: 'Künstlerseiten-Abschnitte',
|
||
artistLayoutDesc: 'Per Drag & Drop neu anordnen, einzelne Abschnitte der Künstlerseite ein- oder ausblenden. Abschnitte ohne Daten werden automatisch übersprungen.',
|
||
artistLayoutReset: 'Zurücksetzen',
|
||
artistLayoutBio: 'Künstler-Biografie',
|
||
artistLayoutTopTracks: 'Top-Tracks',
|
||
artistLayoutSimilar: 'Ähnliche Künstler*innen',
|
||
artistLayoutAlbums: 'Alben',
|
||
artistLayoutFeatured: 'Auch enthalten auf',
|
||
playlistLayoutTitle: 'Playlist-Seitenlayout',
|
||
playlistLayoutDesc: 'Einzelne Elemente auf der Playlist-Seite ein- oder ausblenden.',
|
||
playlistLayoutReset: 'Zurücksetzen',
|
||
playerBarTitle: 'Player-Leiste',
|
||
playerBarReset: 'Zurücksetzen',
|
||
playerBarStarRating: 'Sterne-Bewertung',
|
||
playerBarFavorite: 'Favorit (Herz)',
|
||
playerBarLastfmLove: 'Love-Button',
|
||
playerBarPlaybackRate: 'Wiedergabegeschwindigkeit',
|
||
playerBarEqualizer: 'Equalizer',
|
||
playerBarMiniPlayer: 'Mini-Player',
|
||
playbackRateTitle: 'Wiedergabegeschwindigkeit',
|
||
playbackRateEnabled: 'Wiedergabegeschwindigkeit aktivieren',
|
||
playbackRateEnabledDesc: 'Globale Geschwindigkeit für alle Titel. Gilt nicht für Radio und Vorschau.',
|
||
playbackRateStrategy: 'Strategie',
|
||
playbackRateStrategySpeed: 'Geschwindigkeit',
|
||
playbackRateStrategyVarispeed: 'Tonhöhe folgt dem Tempo',
|
||
playbackRateStrategyVarispeedSemitones: 'Halbtöne',
|
||
playbackRateStrategyPreserve: 'Tonhöhe',
|
||
playbackRateStrategySpeedTip: 'Ändert das Tempo; die Tonhöhe wird automatisch korrigiert.',
|
||
playbackRateStrategyVarispeedTip: 'Geschwindigkeit und Tonhöhe ändern sich gemeinsam, wie bei Tonband. Tonhöhe aus Geschwindigkeit: 12 × log2(Geschwindigkeit).',
|
||
playbackRateStrategyVarispeedSemitonesTip: 'Wie „Tonhöhe folgt dem Tempo“, aber direkt in Halbtönen eingestellt. Geschwindigkeit = 2^(Ht/12).',
|
||
playbackRateStrategyPreserveTip: 'Einstellbares Tempo plus manuelle Tonhöhenverschiebung (±12 Ht).',
|
||
playbackRateSpeed: 'Geschwindigkeit',
|
||
playbackRatePitch: 'Tonhöhe',
|
||
playbackRateDerivedPitch: 'Tonhöhenverschiebung durch Geschwindigkeit: {{value}}',
|
||
playbackRateDerivedSpeed: 'Geschwindigkeit aus Halbtönen: {{value}}',
|
||
playbackRateFineStep: 'Feinabstimmung',
|
||
playbackRateFineStepDesc: 'Kleinere Schieberegler-Schritte: 0,01× für Geschwindigkeit und 0,01 Ht für Tonhöhe.',
|
||
playbackRateAutoPitch: 'Die Tonhöhe wird automatisch korrigiert.',
|
||
playbackRateHint: '„Geschwindigkeit“ behält die Tonhöhe bei. „Tonhöhe folgt dem Tempo“ verschiebt die Tonhöhe mit der Geschwindigkeit. „Tonhöhe folgt dem Tempo (Halbtöne)“ stellt diese Tonhöhenänderung direkt in Halbtönen ein. „Tonhöhe“ fügt eine manuelle Verschiebung hinzu. Höhere CPU-Last als bei „Tonhöhe folgt dem Tempo“. Nicht für Radio, Vorschau oder Orbit.',
|
||
playbackRateNeutral: 'Bei 1,0× und ohne Tonverschiebung ist die Wiedergabe normal.',
|
||
playbackRateOrbitPaused: 'Während Orbit-Sessions nicht aktiv — Wiedergabe bleibt bei 1,0× für die Synchronisation.',
|
||
playbackRateOrbitPausedShort: 'Orbit: 1,0× für Sync.',
|
||
advancedMode: 'Erweitert',
|
||
advancedModeTooltip: 'Erweiterte Optionen in allen Settings-Tabs anzeigen. Community-Beiträge, die nicht zwingend der Design-Philosophie der Maintainer von Psysonic entsprechen.',
|
||
advancedBadge: 'Erweitert',
|
||
sidebarDrag: 'Ziehen zum Umsortieren',
|
||
sidebarFixed: 'Immer sichtbar',
|
||
nowPlayingTopTitle: 'Now Playing oben',
|
||
nowPlayingTopDesc: '"Now Playing" oben in der Seitenleiste anheften statt unten.',
|
||
randomNavSplitTitle: 'Mix-Navigation aufteilen',
|
||
randomNavSplitDesc: '"Zufallsmix", "Zufallsalben" und "Glücks-Mix" als separate Sidebar-Einträge statt als "Mix erstellen"-Hub anzeigen.',
|
||
tabInput: 'Eingabe',
|
||
tabUsers: 'Benutzer',
|
||
shortcutsReset: 'Auf Standard zurücksetzen',
|
||
shortcutListening: 'Taste drücken…',
|
||
shortcutUnbound: '—',
|
||
shortcutClear: 'Löschen',
|
||
globalShortcutsTitle: 'Globale Shortcuts',
|
||
globalShortcutsNote: 'Funktionieren systemweit, auch wenn Psysonic im Hintergrund läuft. Mindestens Ctrl, Alt oder Super als Modifier erforderlich.',
|
||
shortcutPlayPause: 'Wiedergabe / Pause',
|
||
shortcutNext: 'Nächster Titel',
|
||
shortcutPrev: 'Vorheriger Titel',
|
||
shortcutVolumeUp: 'Lautstärke erhöhen',
|
||
shortcutVolumeDown: 'Lautstärke verringern',
|
||
shortcutSeekForward: '10s vorspulen',
|
||
shortcutSeekBackward: '10s zurückspulen',
|
||
shortcutToggleQueue: 'Warteschlange ein-/ausblenden',
|
||
shortcutOpenFolderBrowser: '{{folderBrowser}} öffnen',
|
||
shortcutFullscreenPlayer: 'Vollbild-Player',
|
||
shortcutNativeFullscreen: 'Nativer Vollbildmodus',
|
||
shortcutOpenMiniPlayer: 'Mini-Player öffnen',
|
||
shortcutStartSearch: 'Suche starten',
|
||
shortcutStartAdvancedSearch: 'Erweiterte Suche starten',
|
||
shortcutToggleSidebar: 'Seitenleiste umschalten',
|
||
shortcutMuteSound: 'Stumm schalten',
|
||
shortcutToggleEqualizer: 'Equalizer öffnen / umschalten',
|
||
shortcutToggleRepeat: 'Wiederholen umschalten',
|
||
shortcutOpenNowPlaying: '„Now Playing" öffnen',
|
||
shortcutShowLyrics: 'Songtexte anzeigen',
|
||
shortcutFavoriteCurrentTrack: 'Aktuellen Titel zu Favoriten hinzufügen',
|
||
shortcutOpenHelp: 'Hilfe',
|
||
tabSystem: 'System',
|
||
loggingTitle: 'Protokollierung',
|
||
loggingModeDesc: 'Steuert die Ausführlichkeit der Backend-Protokolle im Terminal.',
|
||
loggingModeOff: 'Aus',
|
||
loggingModeNormal: 'Normal',
|
||
loggingModeDebug: 'Debug',
|
||
loggingExport: 'Protokolle exportieren',
|
||
loggingExportSuccess: 'Protokolle exportiert ({{count}} Zeilen).',
|
||
loggingExportError: 'Protokolle konnten nicht exportiert werden.',
|
||
ratingsSectionTitle: 'Bewertungen',
|
||
ratingsSkipStarTitle: 'Skip → 1 Stern',
|
||
ratingsSkipStarDesc:
|
||
'Wird ein Titel mehrmals hintereinander übersprungen, bekommt er automatisch 1★. Nur für noch nicht bewertete Titel.',
|
||
ratingsSkipStarThresholdLabel: 'Skips',
|
||
ratingsMixFilterTitle: 'Nach Bewertung filtern',
|
||
ratingsMixFilterDesc:
|
||
'Gering bewertete Titel in {{mix}} und {{albums}} ausblenden. Nochmals auf den gewählten Stern klicken, um den Filter zu deaktivieren.',
|
||
ratingsMixMinSong: 'Titel',
|
||
ratingsMixMinAlbum: 'Alben',
|
||
ratingsMixMinArtist: 'Interpreten',
|
||
ratingsMixMinThresholdAria: 'Mindest-Sterne: {{label}}',
|
||
backupTitle: 'Backup & Wiederherstellung',
|
||
backupExport: 'Einstellungen exportieren',
|
||
backupExportDesc: 'Speichert alle Einstellungen, Serverprofile, Last.fm-Konfiguration, Theme, EQ und Tastenkürzel in eine .psybkp-Datei. Passwörter werden im Klartext gespeichert — Datei sicher aufbewahren.',
|
||
backupImport: 'Einstellungen importieren',
|
||
backupImportDesc: 'Stellt Einstellungen aus einer .psybkp-Datei wieder her. Die App wird nach dem Import neu geladen.',
|
||
backupImportConfirm: 'Alle aktuellen Einstellungen werden überschrieben. Fortfahren?',
|
||
backupSuccess: 'Backup gespeichert',
|
||
backupImportSuccess: 'Einstellungen wiederhergestellt — wird neu geladen…',
|
||
backupImportError: 'Ungültige oder beschädigte Backup-Datei.',
|
||
playbackTitle: 'Wiedergabe',
|
||
replayGain: 'Replay Gain',
|
||
replayGainDesc: 'Lautstärke mit ReplayGain-Metadaten normalisieren',
|
||
replayGainMode: 'Modus',
|
||
replayGainAuto: 'Auto',
|
||
replayGainAutoDesc: 'Wählt Album-Gain, wenn benachbarte Tracks in der Warteschlange vom selben Album sind, sonst Track-Gain.',
|
||
replayGainTrack: 'Track',
|
||
replayGainAlbum: 'Album',
|
||
replayGainPreGain: 'Pre-Gain (getaggte Dateien)',
|
||
replayGainPreGainDesc: 'Pauschaler Boost, der auf jede ReplayGain-Berechnung aufaddiert wird. Hilft, wenn deine Bibliothek insgesamt zu leise wirkt.',
|
||
replayGainFallback: 'Fallback (ohne Tags / Radio)',
|
||
replayGainFallbackDesc: 'Wird auf Titel (und Radio-Streams) ohne ReplayGain-Tags angewendet, damit Untagged-Inhalt nicht lauter aus dem Mix springt.',
|
||
normalization: 'Normalisierung',
|
||
normalizationDesc: 'Empfundene Lautstärke über Titel, Alben und Radio angleichen.',
|
||
normalizationOff: 'Aus',
|
||
normalizationReplayGain: 'ReplayGain',
|
||
normalizationLufs: 'LUFS',
|
||
loudnessTargetLufs: 'Ziel-LUFS',
|
||
loudnessTargetLufsDesc: 'Referenz-Lautstärke, an die alle Titel angepasst werden. Niedrigere Werte = lautere Ausgabe. Streaming-Dienste liegen meist bei etwa -14 LUFS.',
|
||
loudnessPreAnalysisAttenuation: 'Dämpfung vor Messung',
|
||
loudnessPreAnalysisAttenuationDesc:
|
||
'Zusätzliche Dämpfung, bis die Loudness des Titels gespeichert ist. Beim Streamen folgen nur grobe Schätzungen, keine volle Messung. 0 dB = aus; negativer = leiser. Rechts steht der wirksame dB-Wert für die gewählte Ziel-LUFS.',
|
||
loudnessPreAnalysisAttenuationRef: 'Wirksam {{eff}} dB bei Ziel {{tgt}} LUFS.',
|
||
loudnessPreAnalysisAttenuationReset: 'Standard',
|
||
loudnessFirstPlayNote:
|
||
'Beim ersten Abspielen eines neuen Titels kann die Lautstärke kurz schwanken, während gemessen wird. Beim nächsten Mal greift die gespeicherte Messung und alles bleibt stabil. Kommende Queue-Titel werden meist schon während des vorherigen Songs analysiert — in der Praxis tritt das daher selten auf.',
|
||
crossfade: 'Crossfade',
|
||
crossfadeSecs: '{{n}} s',
|
||
autoDj: 'AutoDJ',
|
||
autoDjDesc: 'Keine feste Dauer — AutoDJ richtet sich nach dem tatsächlichen Klang und überlappt echte Aus- und Einblendungen statt einer festen Sekundenzahl. Für zuverlässige Ergebnisse den Hot-Playback-Cache aktivieren.',
|
||
autodjSmoothSkip: 'Weicher Skip',
|
||
autodjSmoothSkipDesc: 'Beim Wechsel zum nächsten oder vorherigen Titel während der Wiedergabe blendet der aktuelle Song kurz aus, statt abrupt abgeschnitten zu werden.',
|
||
autodjOverlapCapTitle: 'Überlappungslimit',
|
||
autodjOverlapCapDesc: 'Begrenzt, wie lange AutoDJ Titel überlappen darf. Auto folgt der Inhaltsanalyse (bis 12 s). Limit setzt Ihr eigenes Maximum.',
|
||
autodjOverlapCapAuto: 'Auto',
|
||
autodjOverlapCapLimit: 'Limit',
|
||
autodjOverlapCapSecs: '{{n}} s',
|
||
gapless: 'Nahtlose Wiedergabe',
|
||
transitionsTitle: 'Übergänge zwischen Tracks',
|
||
transitionsDesc: 'Wie aufeinanderfolgende Tracks ineinander übergehen. Es kann immer nur ein Modus aktiv sein.',
|
||
transitionOff: 'Aus',
|
||
transitionsHostControlled: 'Während der Orbit-Session vom Host gesteuert',
|
||
queueBehaviourTitle: 'Warteschlangen-Verhalten',
|
||
preservePlayNextOrder: '„Als Nächstes"-Reihenfolge bewahren',
|
||
preservePlayNextOrderDesc: 'Neu hinzugefügte „Als Nächstes"-Titel reihen sich hinten an statt sich vorn einzuschieben.',
|
||
trackPreviewsTitle: 'Track-Vorschau',
|
||
trackPreviewsToggle: 'Track-Vorschau aktivieren',
|
||
trackPreviewsDesc: 'Inline Play- und Vorschau-Buttons in den Tracklisten anzeigen für eine kurze Hörprobe mitten im Song.',
|
||
trackPreviewStart: 'Startposition',
|
||
trackPreviewStartDesc: 'Wie weit der Track schon gespielt sein soll wenn die Vorschau startet (% der Länge).',
|
||
trackPreviewDuration: 'Dauer',
|
||
trackPreviewDurationDesc: 'Wie lange jede Vorschau spielt bevor sie automatisch stoppt.',
|
||
trackPreviewDurationSecs: '{{n}} s',
|
||
trackPreviewLocationsTitle: 'Wo Vorschauen erscheinen',
|
||
trackPreviewLocationsDesc: 'Wähle aus, in welchen Listen die Vorschau-Buttons angezeigt werden.',
|
||
trackPreviewLocation_suggestions: 'In Playlist-Vorschlägen',
|
||
trackPreviewLocation_albums: 'In Album-Tracklisten',
|
||
trackPreviewLocation_playlists: 'In Playlists',
|
||
trackPreviewLocation_favorites: 'In Favoriten',
|
||
trackPreviewLocation_artist: 'In Künstler-Top-Tracks',
|
||
trackPreviewLocation_randomMix: 'In Random Mix',
|
||
nextTrackBufferingTitle: 'Pufferung',
|
||
infiniteQueue: 'Endlose Warteschlange',
|
||
infiniteQueueDesc: 'Automatisch Zufallstitel anhängen wenn die Warteschlange leer wird',
|
||
experimental: 'Experimentell',
|
||
sidebarLyricsStyle: 'Text-Scroll-Stil',
|
||
sidebarLyricsStyleClassic: 'Klassisch',
|
||
sidebarLyricsStyleClassicDesc: 'Aktive Zeile wird zentriert.',
|
||
sidebarLyricsStyleApple: 'Apple Music-like',
|
||
sidebarLyricsStyleAppleDesc: 'Aktive Zeile oben mit sanfter Animation.',
|
||
seekbarStyle: 'Seekbar-Stil',
|
||
seekbarStyleDesc: 'Aussehen der Wiedergabe-Seekbar auswählen',
|
||
buttonSizeTitle: 'Kompakte Buttons',
|
||
buttonSizeLabel: 'Buttongröße',
|
||
buttonSizeDesc: 'Verkleinert die Aktions- und Toolbar-Buttons auf Symbole — in Detailseiten und Übersichten.',
|
||
buttonSize_large: 'Groß',
|
||
buttonSize_small: 'Klein',
|
||
seekbarTruewave: 'Echte Wellenform',
|
||
seekbarPseudowave: 'Pseudo-Wellenform',
|
||
seekbarLinedot: 'Linie & Punkt',
|
||
seekbarBar: 'Balken',
|
||
seekbarThick: 'Dicker Balken',
|
||
seekbarSegmented: 'Segmentiert',
|
||
seekbarNeon: 'Neonröhre',
|
||
seekbarPulsewave: 'Pulswelle',
|
||
seekbarParticletrail: 'Partikel-Spur',
|
||
seekbarLiquidfill: 'Flüssigkeit',
|
||
seekbarRetrotape: 'Retro-Band',
|
||
themeSchedulerTitle: 'Theme-Zeitplan',
|
||
themeSchedulerEnable: 'Theme-Zeitplan aktivieren',
|
||
themeSchedulerEnableSub: 'Wechselt automatisch zwischen zwei Themes – nach Uhrzeit oder System-Theme',
|
||
themeSchedulerDayTheme: 'Tages-Theme',
|
||
themeSchedulerDayStart: 'Tag beginnt um',
|
||
themeSchedulerNightTheme: 'Nacht-Theme',
|
||
themeSchedulerNightStart: 'Nacht beginnt um',
|
||
themeSchedulerActiveHint: 'Theme-Zeitplan ist aktiv - Themes werden automatisch gewechselt.',
|
||
themeSchedulerModeLabel: 'Wechseln nach',
|
||
themeSchedulerModeTime: 'Uhrzeit',
|
||
themeSchedulerModeSystem: 'System-Theme',
|
||
themeSchedulerLightTheme: 'Helles Theme',
|
||
themeSchedulerDarkTheme: 'Dunkles Theme',
|
||
themeSchedulerSystemRestartHint: 'Ein Wechsel des System-Designs (hell/dunkel) wird erst nach einem Neustart der App übernommen.',
|
||
visualOptionsTitle: 'Visuelle Optionen',
|
||
coverArtBackground: 'Cover-Hintergrund',
|
||
coverArtBackgroundSub: 'Zeigt verschwommenes Cover als Hintergrund in Album/Playlist-Kopfzeilen',
|
||
backdropSourcesTitle: 'Hintergründe',
|
||
backdropSourcesSub: 'Lege fest, welches Bild jede Fläche als Hintergrund nutzt und in welcher Reihenfolge sie probiert werden. Ziehe zum Umsortieren oder schalte eine Quelle aus, um sie zu überspringen.',
|
||
backdropSurfaceMainstage: 'Mainstage-Hero',
|
||
backdropSurfaceArtistDetail: 'Künstlerseiten-Kopf',
|
||
backdropSurfaceFullscreen: 'Vollbild-Player',
|
||
backdropSourceBanner: 'Banner',
|
||
backdropSourceFanart: 'Fanart-Künstlerbild',
|
||
backdropSourceNavidrome: 'Navidrome-Bild',
|
||
backdropMoveUp: 'Nach oben',
|
||
backdropMoveDown: 'Nach unten',
|
||
playlistCoverPhoto: 'Playlist-Coverfoto',
|
||
playlistCoverPhotoSub: 'Zeigt Coverfoto-Raster in der Playlist-Detailansicht',
|
||
showBitrate: 'Bitrate anzeigen',
|
||
showBitrateSub: 'Audio-Bitrate in Track-Listen anzeigen',
|
||
floatingPlayerBar: 'Schwebende Player-Leiste',
|
||
floatingPlayerBarSub: 'Player-Leiste über dem Inhalt schweben lassen',
|
||
uiScaleTitle: 'Interface-Skalierung',
|
||
uiScaleLabel: 'Zoom',
|
||
waveformCacheClearBtn: 'Waveform-Cache leeren',
|
||
waveformCacheCleared: 'Waveform-Cache geleert ({{count}} Zeilen).',
|
||
waveformCacheClearFailed: 'Waveform-Cache konnte nicht geleert werden.',
|
||
analyticsStrategyTitle: 'Analysestrategien',
|
||
analyticsStrategyDesc: 'Wähle den Analysemodus für die Bibliothek.',
|
||
analyticsStrategyLabel: 'Strategie',
|
||
analyticsStrategyLazy: 'Lazy',
|
||
analyticsStrategyLazyDesc: 'Analysiert nur, wenn Tracks abgespielt werden oder in den Hot-/Offline-Cache kommen — minimale CPU- und Netzlast.',
|
||
analyticsStrategyAdvanced: 'Aggressiv',
|
||
analyticsStrategyAdvancedDesc: 'Aggressiver Hintergrundscan. Nach Abschluss erhältst du BPM für alle Tracks sowie sofort verfügbare Loudness- und Waveform-Daten.',
|
||
analyticsStrategyPriorityTitle: 'Analyse-Priorität (immer aktiv)',
|
||
analyticsStrategyPriorityHigh: '1 — Aktuell laufender Track: zuerst herunterladen und analysieren (Playback-Bytes, Loudness-Backfill oder HTTP falls nötig).',
|
||
analyticsStrategyPriorityMiddle: '2 — Als Nächstes: die nächsten ~5 Queue-Tracks und Hot-Cache-Nachbarn — Analyse bevorzugt aus Cache/Downloads; HTTP-Backfill nur bei Miss.',
|
||
analyticsStrategyPriorityLow: '3 — Bibliotheks-Batch (nur Aggressiv): automatische Hintergrund-Queue am Ende; wird per Watermark (~3× Worker) nachgefüllt, ohne auf eine leere Queue zu warten.',
|
||
analyticsStrategyServerLabel: 'Server',
|
||
analyticsStrategyProgressLabel: 'Analysefortschritt:',
|
||
analyticsStrategyProgressValue: '{{percent}}% ({{done}}/{{total}})',
|
||
analyticsStrategyActionsLabel: 'Aktionen',
|
||
analyticsStrategyParallelismLabel: 'Parallele Worker',
|
||
analyticsStrategyParallelismValue: '{{n}} Threads',
|
||
analyticsStrategyParallelismDesc: 'Wie viele Tracks gleichzeitig heruntergeladen und analysiert werden (HTTP + CPU). Höhere Werte beschleunigen das Aufholen der Bibliothek, nutzen aber mehr Netz und CPU.',
|
||
analyticsStrategyAdvancedWarning: 'Aggressiv nutzt mehr CPU und Netzwerkbandbreite, während der Bibliotheks-Batch im Hintergrund läuft.',
|
||
analyticsStrategyServerRemoved: 'Entfernter Server',
|
||
analyticsStrategyClearAction: 'Analyse löschen',
|
||
analyticsStrategyClearTitle: 'Analyse löschen?',
|
||
analyticsStrategyClearDesc: 'Das Löschen der Analyse für {{server}} entfernt zwischengespeicherte Waveforms und Loudness-Daten. Beim späteren erneuten Hinzufügen kann eine lange Neuindizierung nötig sein.',
|
||
analyticsStrategyClearCancel: 'Abbrechen',
|
||
analyticsStrategyClearConfirm: 'Analyse löschen',
|
||
analyticsStrategyClearSuccess: 'Analyse für den entfernten Server wurde gelöscht.',
|
||
analyticsStrategyClearError: 'Analyse für den entfernten Server konnte nicht gelöscht werden.',
|
||
analyticsStrategyProgressEmptyAfterFailed: '100% (0/0, durch fehlgeschlagene Tracks blockiert)',
|
||
analyticsFailedTracksOpenTitle: 'Fehlgeschlagene Tracks: {{count}}',
|
||
analyticsFailedTracksTitle: 'Fehlgeschlagene Analyse-Tracks — {{server}}',
|
||
analyticsFailedTracksDesc: 'Diese Tracks sind bei Decode/Enrichment wiederholt fehlgeschlagen und vom automatischen Hintergrund-Analyseprozess ausgeschlossen.',
|
||
analyticsFailedTracksLoading: 'Liste fehlgeschlagener Tracks wird geladen…',
|
||
analyticsFailedTracksEmpty: 'Für diesen Server gibt es keine fehlgeschlagenen Tracks.',
|
||
analyticsFailedTracksClose: 'Schließen',
|
||
analyticsFailedTracksExport: 'Liste exportieren',
|
||
analyticsFailedTracksExportSuccess: 'Liste fehlgeschlagener Tracks exportiert ({{count}}).',
|
||
analyticsFailedTracksExportError: 'Liste fehlgeschlagener Tracks konnte nicht exportiert werden.',
|
||
analyticsFailedTracksRescan: 'Fehlgeschlagene Tracks neu scannen',
|
||
analyticsFailedTracksRescanSuccess: 'Neu-Scan für {{count}} fehlgeschlagene Tracks eingeplant.',
|
||
analyticsFailedTracksRescanError: 'Neu-Scan fehlgeschlagener Tracks konnte nicht gestartet werden.',
|
||
analyticsFailedTracksLoadError: 'Fehlgeschlagene Tracks konnten nicht geladen werden.',
|
||
backupImportAny: 'Backup importieren',
|
||
backupImportAnyConfirm: 'Ausgewählte Backup-Datei importieren und Inhalt anwenden (Einstellungen, Bibliotheksdatenbanken oder vollständig). Fortfahren?',
|
||
backupModeFull: 'Vollständig',
|
||
backupModeLibrary: 'Bibliotheksdatenbanken',
|
||
backupModeConfig: 'Konfiguration',
|
||
backupFullDesc: 'Archiviert Einstellungen und Bibliotheksdatenbanken in einer Backup-Datei.',
|
||
backupFullExport: 'Vollständiges Backup exportieren',
|
||
backupFullImport: 'Vollständiges Backup importieren',
|
||
backupFullImportConfirm: 'Dadurch werden Einstellungen überschrieben, aktuelle Bibliotheksdatenbanken ersetzt und nach .bak verschoben. Fortfahren?',
|
||
backupFullExportSuccess: 'Vollständiges Backup exportiert.',
|
||
backupFullImportSuccess: 'Vollständiges Backup importiert — lade neu…',
|
||
backupFullImportError: 'Vollständiges Backup konnte nicht importiert werden.',
|
||
backupLibraryExport: 'Datenbanken exportieren',
|
||
backupLibraryExportDesc: 'Erstellt ein komprimiertes Archiv mit sauberen SQLite-Snapshots der Bibliotheksdatenbanken.',
|
||
backupLibraryImport: 'Datenbanken importieren',
|
||
backupLibraryImportDesc: 'Stellt Bibliotheksdatenbanken aus einer Archivdatei wieder her. Aktuelle Datenbanken werden vor dem Wechsel nach .bak verschoben.',
|
||
backupLibraryImportConfirm: 'Dadurch werden aktuelle Bibliotheksdatenbanken ersetzt und nach .bak verschoben. Fortfahren?',
|
||
backupLibraryExportSuccess: 'Datenbank-Backup exportiert.',
|
||
backupLibraryImportSuccess: 'Datenbank-Backup importiert.',
|
||
backupLibraryImportError: 'Datenbank-Backup konnte nicht importiert werden.',
|
||
backupOverlayExportTitle: 'Backup wird erstellt…',
|
||
backupOverlayImportTitle: 'Backup wird wiederhergestellt…',
|
||
backupOverlayHint: 'Das Fenster kann geöffnet bleiben, während wir Dateien verarbeiten. Eingaben sind vorübergehend gesperrt.',
|
||
};
|