Admins can curate Plex collections from a movie's info page ("Collections"
button → PlexCollectionEditor dialog): create a collection (seeded with the
movie), add/remove the movie to/from editable collections, delete a collection,
and "take over" an existing plain Plex collection (mark it editable). All writes
go to Plex (POST/PUT/DELETE via new PlexClient methods) and are reflected on
every client; a targeted single-collection re-sync (sync.resync_collection /
delete_collection_local) updates the local mirror without the full ~4-min sync.
Gating (per the design decisions): editing is ADMIN-ONLY (collections are shared
library-wide); only plain manual collections are editable — smart + external
auto-lists (IMDb/TMDb/…) are always read-only (can_edit = editable && !smart &&
source=="collection"). New admin endpoints under /api/plex/collections
(create/items add+remove/rename/delete/editable). Verified end-to-end incl. the
live Plex write API (create/add/rename/remove/delete all 200, self-cleaned) and
the editor UI (create + delete with confirm) on localdev.
156 lines
4.9 KiB
JSON
156 lines
4.9 KiB
JSON
{
|
||
"navLabel": "Plex",
|
||
"backToFeed": "YouTube-Feed",
|
||
"backToLibrary": "Zurück zur Bibliothek",
|
||
"searchPlaceholder": "Plex durchsuchen…",
|
||
"sort": {
|
||
"added": "Kürzlich hinzugefügt",
|
||
"title": "Titel",
|
||
"year": "Jahr",
|
||
"rating": "IMDb-Wertung",
|
||
"duration": "Länge",
|
||
"release": "Erscheinungsdatum"
|
||
},
|
||
"filter": {
|
||
"library": "Bibliothek",
|
||
"show": "Anzeige",
|
||
"showOpt": {
|
||
"all": "Alle",
|
||
"unwatched": "Ungesehen",
|
||
"in_progress": "Läuft",
|
||
"watched": "Gesehen"
|
||
},
|
||
"sort": "Sortierung",
|
||
"clearAll": "Filter zurücksetzen",
|
||
"active": "Aktiv",
|
||
"any": "Alle",
|
||
"rating": "IMDb-Wertung",
|
||
"genre": "Genre",
|
||
"year": "Jahr",
|
||
"duration": "Länge",
|
||
"durationOpt": {
|
||
"short": "Unter 90 Min.",
|
||
"mid": "90–120 Min.",
|
||
"long": "Über 2 Std."
|
||
},
|
||
"added": "Zu Plex hinzugefügt",
|
||
"addedOpt": {
|
||
"24h": "24 Std.",
|
||
"1w": "1 Woche",
|
||
"1m": "1 Monat",
|
||
"6m": "6 Monate",
|
||
"1y": "1 Jahr"
|
||
},
|
||
"contentRating": "Altersfreigabe",
|
||
"match": {
|
||
"any": "Beliebig",
|
||
"all": "Alle"
|
||
},
|
||
"dir": {
|
||
"desc": "↓ Absteigend",
|
||
"asc": "↑ Aufsteigend"
|
||
},
|
||
"collection": "Sammlung",
|
||
"collectionSearch": "Sammlungen suchen…",
|
||
"collectionEmpty": "Keine Sammlungen"
|
||
},
|
||
"count": "{{count}} Titel",
|
||
"searchCount": "{{count}} Treffer",
|
||
"noMatches": "Keine Treffer.",
|
||
"loading": "Wird geladen…",
|
||
"empty": "Noch nichts hier. Starte eine Plex-Synchronisierung auf der Admin-Konfigurationsseite.",
|
||
"loadMore": "Mehr laden",
|
||
"watched": "Angesehen",
|
||
"play": "Abspielen",
|
||
"resume": "Fortsetzen",
|
||
"openShow": "Serie öffnen",
|
||
"markWatched": "Als gesehen markieren",
|
||
"markUnwatched": "Als ungesehen markieren",
|
||
"seasons": "{{count}} Staffeln",
|
||
"playerSoon": "Player kommt bald — „{{title}}“",
|
||
"people": {
|
||
"match": "Personen",
|
||
"actor": "Schauspieler",
|
||
"director": "Regie",
|
||
"count": "{{count}} Titel",
|
||
"added": "hinzugefügt"
|
||
},
|
||
"collEditor": {
|
||
"manage": "Sammlungen",
|
||
"title": "Sammlungen — {{title}}",
|
||
"newPlaceholder": "Name der neuen Sammlung…",
|
||
"create": "Erstellen",
|
||
"search": "Sammlungen filtern…",
|
||
"none": "Noch keine bearbeitbaren Sammlungen. Erstelle oben eine.",
|
||
"count": "{{count}} Titel",
|
||
"delete": "Löschen",
|
||
"deleteConfirm": "Sammlung „{{title}}“ aus Plex löschen? Betrifft alle Benutzer.",
|
||
"note": "Änderungen werden in Plex geschrieben und für alle Clients/Benutzer sichtbar.",
|
||
"others": "{{count}} vorhandene Sammlungen verwalten…",
|
||
"makeEditable": "Verwalten"
|
||
},
|
||
"player": {
|
||
"loading": "Wird geladen…",
|
||
"back": "Zurück",
|
||
"skipIntro": "Intro überspringen",
|
||
"skipCredits": "Abspann überspringen",
|
||
"playPause": "Wiedergabe / Pause (Leertaste)",
|
||
"restart": "Von vorn beginnen",
|
||
"prev": "Vorherige Folge",
|
||
"next": "Nächste Folge",
|
||
"mute": "Stumm (m)",
|
||
"fullscreen": "Vollbild (f)",
|
||
"download": "Originaldatei herunterladen",
|
||
"tracks": "Audio & Untertitel",
|
||
"audio": "Audio",
|
||
"subtitles": "Untertitel",
|
||
"subOff": "Aus",
|
||
"errNotFound": "Diese Datei kann nicht abgespielt werden — die Medien sind auf dem Server nicht erreichbar (die Plex-Medieneinbindung fehlt oder die Pfadzuordnung ist falsch). Bitte den Administrator, die Plex-Konfiguration zu prüfen.",
|
||
"errTranscode": "Das Format dieser Datei erfordert eine Transkodierung, die noch nicht unterstützt wird.",
|
||
"errGeneric": "Die Wiedergabe konnte nicht gestartet werden. Bitte erneut versuchen.",
|
||
"stop": "Stopp",
|
||
"help": "Tastenkürzel",
|
||
"infoBtn": "Medieninfo",
|
||
"keys": {
|
||
"playPause": "Wiedergabe / Pause",
|
||
"seek": "10 Sekunden spulen",
|
||
"episode": "Vorherige / nächste Folge",
|
||
"volume": "Lautstärke lauter / leiser",
|
||
"mute": "Stumm",
|
||
"fullscreen": "Vollbild",
|
||
"info": "Medieninfo",
|
||
"back": "Stopp & zurück zum Feed",
|
||
"help": "Diese Hilfe anzeigen"
|
||
}
|
||
},
|
||
"info": {
|
||
"title": "Medieninfo",
|
||
"customize": "Ansicht anpassen",
|
||
"prefArtBg": "Dezenter Hintergrund",
|
||
"prefCast": "Besetzung",
|
||
"stripSource": {
|
||
"collection": "Sammlungen",
|
||
"imdb": "IMDb",
|
||
"tmdb": "TMDb",
|
||
"tvdb": "TVDb",
|
||
"trakt": "Trakt",
|
||
"smart": "Smart-Listen"
|
||
},
|
||
"openImdb": "Bei IMDb öffnen",
|
||
"director": "Regie",
|
||
"cast": "Besetzung & Crew",
|
||
"markWatched": "Als gesehen markieren",
|
||
"markUnwatched": "Gesehen zurücknehmen",
|
||
"clearResume": "Fortsetzungsposition löschen",
|
||
"filterYear": "Titel aus {{year}}",
|
||
"filterRating": "Titel mit {{n}}+",
|
||
"filterActor": "Titel mit {{name}}",
|
||
"browseCollection": "Sammlung durchsuchen →"
|
||
},
|
||
"playable": {
|
||
"direct": "Spielt direkt im Browser",
|
||
"remux": "Braucht ein leichtes Remux (keine Video-Neucodierung)",
|
||
"transcode": "Braucht Transcoding (aufwendiger)"
|
||
}
|
||
}
|