mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-21 14:05:41 +00:00
70c2fdfbf9
* feat(linux): session GDK defaults, nvidia-quirk, optional x11-legacy wrap Ship PSYSONIC_ALLOW_NATIVE_GDK from Nix/AUR instead of pinning WEBKIT_DISABLE_* and GDK x11. Add flake psysonic-x11-legacy for the old wrap; alias gdk-session to psysonic. Startup uses webkit2gtk-nvidia-quirk and Wayland-aware compositing; refresh Help (a45) and nixos-install docs. * fix(linux): session GDK and nvidia-quirk only; drop wrapper env heuristics Remove PSYSONIC_ALLOW_NATIVE_GDK and devShell GDK/WEBKIT exports; stop synthesizing GDK/WebKit vars in main.rs. Update Nix/AUR wrappers, install docs, CHANGELOG, and help FAQ with practical user-facing workarounds. * fix(linux): X11-pinned GDK uses DMABUF quirk path, not Wayland explicit-sync When GDK_BACKEND is forced to x11 on a wayland user session, webkit2gtk-nvidia-quirk would still apply __NV_DISABLE_EXPLICIT_SYNC and gray out the webview. Map that case to WEBKIT_DISABLE_DMABUF_RENDERER like native X11. * fix(ui): stabilize WebKitGTK/Wayland hover paint for nav and media cards Sidebar nav links avoid transition:all and promote icons with translateZ(0). Artist rows and album/artist/song cards use compositing hints; card shadows and borders no longer interpolate so cover zoom can stay smooth without jitter. * fix(ui): isolate artist/album card text and cover paint on WebKitGTK Promote cover blocks with contain/paint and text stacks with translateZ(0); use artist-card-info on the artists grid for the same layout as other cards. * feat(artists): in-page overlay scroll and locked main viewport Move list/grid into an inner OverlayScrollArea, stop sticky toolbar from owning the route scroll, align the rail with the main panel edge, and skip the main-route overlay thumb when the viewport cannot scroll vertically. * feat(browse): extend in-page overlay scroll to more library routes Reuse the locked main viewport pattern from Artists for Albums, Composers, Lossless albums, and New releases; wire VirtualCardGrid and scroll chrome to the matching in-page viewport ids. * fix(linux): improve Wayland GPU compositing text clarity in WebKitGTK Use on-demand hardware acceleration on main and mini webviews when the session is Wayland and compositing stays on; gate subpixel body AA on the same conditions via new Tauri probes. Document PSYSONIC_SKIP_WAYLAND_FONT_TUNING for opt-out and changelog. * fix(rust): satisfy clippy needless_return in Linux webkit helpers * fix(linux): tune Wayland text rendering with HW policy env and CSS Allow PSYSONIC_WEBKIT_WAYLAND_HW_POLICY to select WebKit hardware acceleration policy (never/always vs default on-demand). Extend Wayland font CSS to #root with geometricPrecision and text-size-adjust on html. * feat(linux): Wayland text presets in settings, safe WebKit apply, CPU default Persist profile to app config; apply WebKit policy at startup/mini only to avoid WebKitGTK hangs on live toggles. UI + CSS preview stays live; default preset is sharp (CPU-friendly). * fix(linux): map Wayland sharp preset to OnDemand WebKit policy HardwareAccelerationPolicy::Never at startup broke main-viewport wheel scrolling on WebKitGTK+Wayland; sharp vs balanced remains a CSS AA path. Use PSYSONIC_WEBKIT_WAYLAND_HW_POLICY for a true Never policy. * fix(rust): gate Linux-only Wayland WebKit helpers for Windows builds Re-export startup helpers only under cfg(linux) and drop non-Linux stubs so Windows compiles without unused-import and dead-code warnings. * chore(release): CHANGELOG + credits for Linux session/WebKit work (PR #731) Consolidate scattered incremental changelog notes into two [1.47.0] entries with PR link; remove duplicate Linux blocks from [1.46.0] Fixed. Append settings credit line for cucadmuh.
486 lines
29 KiB
TypeScript
486 lines
29 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ă',
|
||
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',
|
||
serverUsername: 'Benutzername',
|
||
serverPassword: 'Passwort',
|
||
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',
|
||
confirmDeleteServer: 'Server „{{name}}" löschen?',
|
||
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)',
|
||
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',
|
||
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',
|
||
lfmTitle: 'Last.fm',
|
||
lfmConnect: 'Mit Last.fm verbinden',
|
||
lfmConnecting: 'Warte auf Bestätigung…',
|
||
lfmConfirm: 'Ich habe die App autorisiert',
|
||
lfmConnected: 'Verbunden als',
|
||
lfmDisconnect: 'Trennen',
|
||
lfmConnectDesc: 'Verbinde deinen Last.fm Account, um Scrobbling und Now-Playing-Updates direkt aus Psysonic heraus zu aktivieren — keine Navidrome-Konfiguration erforderlich.',
|
||
lfmOpenBrowser: 'Es öffnet sich ein Browserfenster. Autorisiere Psysonic auf Last.fm und klicke dann unten auf den Button.',
|
||
lfmScrobbles: '{{n}} Scrobbles',
|
||
lfmMemberSince: 'Dabei seit {{year}}',
|
||
scrobbleEnabled: 'Scrobbling aktiviert',
|
||
scrobbleDesc: 'Songs nach 50% Laufzeit an Last.fm senden',
|
||
behavior: 'App-Verhalten',
|
||
cacheTitle: 'Max. Speichergröße',
|
||
cacheDesc: 'Cover und Künstlerbilder. Wenn voll, werden die ältesten Einträge automatisch entfernt. Offline-Alben werden nicht automatisch gelöscht, aber beim manuellen Cache leeren entfernt.',
|
||
cacheUsedImages: 'Bilder:',
|
||
cacheUsedOffline: 'Offline-Tracks:',
|
||
cacheUsedHot: 'Belegter Speicher:',
|
||
hotCacheTrackCount: 'Titel im Cache:',
|
||
cacheMaxLabel: 'Max. Größe',
|
||
cacheClearBtn: 'Cache leeren',
|
||
cacheClearWarning: 'Alle Offline-Alben werden damit aus der Bibliothek entfernt.',
|
||
cacheClearConfirm: 'Alles löschen',
|
||
cacheClearCancel: 'Abbrechen',
|
||
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',
|
||
audioOutputDeviceMacNotice: 'Auf macOS folgt die Wiedergabe aus technischen Gründen zurzeit immer dem System-Ausgabegerät. Du kannst das Ziel über Systemeinstellungen → Ton oder das Lautsprecher-Symbol in der Menüleiste wechseln. Hintergrund: CoreAudio löst beim Öffnen eines nicht-Default-Streams eine Mikrofonberechtigungsabfrage aus — wir vermeiden sie, indem wir stets den System-Default verwenden.',
|
||
hiResTitle: 'Native Hi-Res-Wiedergabe',
|
||
hiResEnabled: 'Native Hi-Res-Wiedergabe aktivieren',
|
||
hiResDesc: "Standardmäßig wird auf 44,1 kHz begrenzt (maximale Stabilität). Nur aktivieren, wenn Hardware und Netzwerk zuverlässig hohe Abtastraten (88,2 kHz+) unterstützen.",
|
||
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.',
|
||
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.',
|
||
linuxWebkitSmoothScroll: 'Sanftes Mausrad (Linux)',
|
||
linuxWebkitSmoothScrollDesc: 'An: mit Nachlauf. Aus: zeilenweise wie in GTK-Apps.',
|
||
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)',
|
||
discordCoverSource: 'Cover-Quelle',
|
||
discordCoverSourceDesc: 'Woher das Album-Cover für dein Discord-Profil geladen wird.',
|
||
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)',
|
||
nowPlayingEnabled: 'Im Livefenster anzeigen',
|
||
nowPlayingEnabledDesc: 'Überträgt den aktuell gespielten Titel an die Livehörer-Ansicht des Servers. Deaktivieren, um keine Wiedergabedaten zu senden.',
|
||
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',
|
||
lyricsModeStandard: 'Standard',
|
||
lyricsModeStandardDesc: 'Drei Quellen mit frei wählbarer Reihenfolge: Server-Tags, LRCLIB, Netease.',
|
||
lyricsModeLyricsplus: 'YouLyPlus (Karaoke)',
|
||
lyricsModeLyricsplusDesc: 'Wort-für-Wort-Sync aus Apple Music, Spotify, Musixmatch & QQ (Community-Backend). Fällt still zurück auf die Standard-Quellen, wenn nichts gefunden wird.',
|
||
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.',
|
||
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',
|
||
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: 'Startseite',
|
||
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: 'Last.fm Love',
|
||
playerBarEqualizer: 'Equalizer',
|
||
playerBarMiniPlayer: 'Mini-Player',
|
||
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',
|
||
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',
|
||
crossfadeDesc: 'Überblendung zwischen Tracks',
|
||
crossfadeSecs: '{{n}} s',
|
||
notWithGapless: 'Nicht verfügbar wenn Nahtlose Wiedergabe aktiv ist',
|
||
notWithCrossfade: 'Nicht verfügbar wenn Crossfade aktiv ist',
|
||
gapless: 'Nahtlose Wiedergabe',
|
||
gaplessDesc: 'Nächsten Track vorpuffern um Lücken zwischen Songs zu vermeiden',
|
||
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',
|
||
preloadMode: 'Nächsten Track vorpuffern',
|
||
preloadModeDesc: 'Wann mit dem Puffern des nächsten Tracks begonnen werden soll',
|
||
nextTrackBufferingTitle: 'Pufferung',
|
||
preloadHotCacheMutualExclusive: 'Preload und Hot Cache erfüllen denselben Zweck – nur eine Methode kann gleichzeitig aktiv sein. Das Aktivieren einer deaktiviert die andere automatisch.',
|
||
preloadOff: 'Aus',
|
||
preloadBalanced: 'Ausgewogen (30 s vor Ende)',
|
||
preloadEarly: 'Früh (nach 5 s Wiedergabe)',
|
||
preloadCustom: 'Benutzerdefiniert',
|
||
preloadCustomSeconds: 'Sekunden vor Ende: {{n}}',
|
||
infiniteQueue: 'Endlose Warteschlange',
|
||
infiniteQueueDesc: 'Automatisch Zufallstitel anhängen wenn die Warteschlange leer wird',
|
||
experimental: 'Experimentell',
|
||
fsPlayerSection: 'Vollbild-Player',
|
||
fsShowArtistPortrait: 'Künstlerfoto anzeigen',
|
||
fsShowArtistPortraitDesc: 'Künstlerfoto (oder Albumcover) auf der rechten Seite des Vollbild-Players anzeigen.',
|
||
fsPortraitDim: 'Abdunkelung des Fotos',
|
||
fsLyricsStyle: 'Liedtext-Stil',
|
||
fsLyricsStyleRail: 'Schiene',
|
||
fsLyricsStyleRailDesc: 'Klassische 5-Zeilen-Schiene.',
|
||
fsLyricsStyleApple: 'Scrollen',
|
||
fsLyricsStyleAppleDesc: 'Vollbild-Scrollliste.',
|
||
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',
|
||
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 basierend auf der Uhrzeit',
|
||
themeSchedulerDayTheme: 'Tages-Theme',
|
||
themeSchedulerDayStart: 'Tag beginnt um',
|
||
themeSchedulerNightTheme: 'Nacht-Theme',
|
||
themeSchedulerNightStart: 'Nacht beginnt um',
|
||
themeSchedulerActiveHint: 'Theme-Zeitplan ist aktiv - Themes werden automatisch gewechselt.',
|
||
visualOptionsTitle: 'Visuelle Optionen',
|
||
coverArtBackground: 'Cover-Hintergrund',
|
||
coverArtBackgroundSub: 'Zeigt verschwommenes Cover als Hintergrund in Album/Playlist-Kopfzeilen',
|
||
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',
|
||
scan: {
|
||
quick: 'Quick-Scan',
|
||
full: 'Full-Scan',
|
||
quickTip: 'Quick-Scan — nur neue/geänderte Dateien indexieren',
|
||
fullTip: 'Full-Scan — alles neu indexieren',
|
||
confirmFull: 'Nochmal klicken zum Bestätigen',
|
||
confirmFullShort: 'Full-Scan bestätigen',
|
||
scanning: 'Scannt…',
|
||
done: 'Scan fertig',
|
||
error: 'Scan fehlgeschlagen',
|
||
toast: '{{name}}: Scan fertig — {{count}} Tracks indexiert',
|
||
},
|
||
};
|