Personal ordered lists of Plex items, kept in Siftlode's own DB (works for users without a Plex account, like watch-state) — the "your own lists" counterpart to shared collections. Plex-direction sync is a later phase (plex_rating_key reserved). Backend: migration 0048 (plex_playlists + plex_playlist_items with position), PlexPlaylist/PlexPlaylistItem models, and per-user CRUD endpoints under /api/plex/playlists (list [+?contains for the add dialog], create [seeded], detail [ordered cards], rename, delete, add/remove item, reorder). _leaf_card handles the movie/episode mix. Frontend: "Add to playlist" dialog from the movie info page (all users), a Playlists section in PlexSidebar (list + create), PlexPlaylistView (reorder up/down, remove, rename, delete, Play all), and PlexPlayer gained an optional `queue` so play-through follows the list order (prev/next + auto-advance). i18n en/hu/de. Verified end-to-end on localdev (backend CRUD + the create→add→view→play-through UI flow).
178 lines
5.2 KiB
JSON
178 lines
5.2 KiB
JSON
{
|
||
"navLabel": "Plex",
|
||
"backToFeed": "YouTube feed",
|
||
"backToLibrary": "Back to library",
|
||
"searchPlaceholder": "Search Plex…",
|
||
"sort": {
|
||
"added": "Recently added",
|
||
"title": "Title",
|
||
"year": "Year",
|
||
"rating": "IMDb rating",
|
||
"duration": "Length",
|
||
"release": "Release date"
|
||
},
|
||
"filter": {
|
||
"library": "Library",
|
||
"show": "Show",
|
||
"showOpt": {
|
||
"all": "All",
|
||
"unwatched": "Unwatched",
|
||
"in_progress": "In progress",
|
||
"watched": "Watched"
|
||
},
|
||
"sort": "Sort",
|
||
"clearAll": "Clear filters",
|
||
"active": "Active",
|
||
"any": "Any",
|
||
"rating": "IMDb rating",
|
||
"genre": "Genre",
|
||
"year": "Year",
|
||
"duration": "Length",
|
||
"durationOpt": {
|
||
"short": "Under 90m",
|
||
"mid": "90–120m",
|
||
"long": "Over 2h"
|
||
},
|
||
"added": "Added to Plex",
|
||
"addedOpt": {
|
||
"24h": "24h",
|
||
"1w": "1 week",
|
||
"1m": "1 month",
|
||
"6m": "6 months",
|
||
"1y": "1 year"
|
||
},
|
||
"contentRating": "Age rating",
|
||
"match": {
|
||
"any": "Any",
|
||
"all": "All"
|
||
},
|
||
"dir": {
|
||
"desc": "↓ Descending",
|
||
"asc": "↑ Ascending"
|
||
},
|
||
"collection": "Collection",
|
||
"collectionSearch": "Search collections…",
|
||
"collectionEmpty": "No collections"
|
||
},
|
||
"count": "{{count}} titles",
|
||
"searchCount": "{{count}} matches",
|
||
"noMatches": "No matches.",
|
||
"loading": "Loading…",
|
||
"empty": "Nothing here yet. Run a Plex sync from the admin Config page.",
|
||
"loadMore": "Load more",
|
||
"watched": "Watched",
|
||
"play": "Play",
|
||
"resume": "Resume",
|
||
"openShow": "Open show",
|
||
"markWatched": "Mark watched",
|
||
"markUnwatched": "Mark unwatched",
|
||
"seasons": "{{count}} seasons",
|
||
"playerSoon": "Player coming soon — “{{title}}”",
|
||
"people": {
|
||
"match": "People",
|
||
"actor": "Actor",
|
||
"director": "Director",
|
||
"count": "{{count}} titles",
|
||
"added": "added"
|
||
},
|
||
"collEditor": {
|
||
"manage": "Collections",
|
||
"title": "Collections — {{title}}",
|
||
"newPlaceholder": "New collection name…",
|
||
"create": "Create",
|
||
"search": "Filter collections…",
|
||
"none": "No editable collections yet. Create one above.",
|
||
"count": "{{count}} items",
|
||
"delete": "Delete",
|
||
"deleteConfirm": "Delete the collection \"{{title}}\" from Plex? This affects all users.",
|
||
"note": "Changes are written to Plex and shared across all clients and users.",
|
||
"others": "Manage {{count}} existing collections…",
|
||
"makeEditable": "Manage"
|
||
},
|
||
"player": {
|
||
"loading": "Loading…",
|
||
"back": "Back",
|
||
"skipIntro": "Skip intro",
|
||
"skipCredits": "Skip credits",
|
||
"playPause": "Play / pause (space)",
|
||
"restart": "Restart from beginning",
|
||
"prev": "Previous episode",
|
||
"next": "Next episode",
|
||
"mute": "Mute (m)",
|
||
"fullscreen": "Fullscreen (f)",
|
||
"download": "Download original file",
|
||
"tracks": "Audio & subtitles",
|
||
"audio": "Audio",
|
||
"subtitles": "Subtitles",
|
||
"subOff": "Off",
|
||
"errNotFound": "This file can't be played — the media isn't reachable on the server (the Plex media mount is missing or the path map is wrong). Ask the admin to check the Plex configuration.",
|
||
"errTranscode": "This file's format needs transcoding, which isn't supported yet.",
|
||
"errGeneric": "Playback couldn't start. Please try again.",
|
||
"stop": "Stop",
|
||
"help": "Keyboard shortcuts",
|
||
"infoBtn": "Media info",
|
||
"keys": {
|
||
"playPause": "Play / pause",
|
||
"seek": "Seek 10 seconds",
|
||
"episode": "Previous / next episode",
|
||
"volume": "Volume up / down",
|
||
"mute": "Mute",
|
||
"fullscreen": "Fullscreen",
|
||
"info": "Media info",
|
||
"back": "Stop & back to feed",
|
||
"help": "Show this help"
|
||
}
|
||
},
|
||
"info": {
|
||
"title": "Media info",
|
||
"customize": "Customize view",
|
||
"prefArtBg": "Faint backdrop",
|
||
"prefCast": "Cast & crew",
|
||
"stripSource": {
|
||
"collection": "Collections",
|
||
"imdb": "IMDb",
|
||
"tmdb": "TMDb",
|
||
"tvdb": "TVDb",
|
||
"trakt": "Trakt",
|
||
"smart": "Smart lists"
|
||
},
|
||
"openImdb": "Open on IMDb",
|
||
"director": "Director",
|
||
"cast": "Cast & crew",
|
||
"markWatched": "Mark watched",
|
||
"markUnwatched": "Mark unwatched",
|
||
"clearResume": "Clear resume position",
|
||
"filterYear": "Show titles from {{year}}",
|
||
"filterRating": "Show titles rated {{n}}+",
|
||
"filterActor": "Show titles with {{name}}",
|
||
"browseCollection": "Browse collection →"
|
||
},
|
||
"playable": {
|
||
"direct": "Plays directly in the browser",
|
||
"remux": "Needs a light remux (no video re-encode)",
|
||
"transcode": "Needs transcoding (heavier)"
|
||
},
|
||
"playlistAdd": {
|
||
"manage": "Add to playlist",
|
||
"title": "Add to playlist — {{title}}",
|
||
"newPlaceholder": "New playlist name…",
|
||
"create": "Create",
|
||
"none": "No playlists yet. Create one above.",
|
||
"count": "{{count}} items"
|
||
},
|
||
"playlist": {
|
||
"section": "Playlists",
|
||
"newPlaceholder": "New playlist…",
|
||
"create": "Create playlist",
|
||
"none": "No playlists yet.",
|
||
"deleteConfirm": "Delete the playlist \"{{title}}\"?",
|
||
"rename": "Rename",
|
||
"playAll": "Play all",
|
||
"delete": "Delete playlist",
|
||
"empty": "This playlist is empty. Add titles from their info page.",
|
||
"up": "Move up",
|
||
"down": "Move down",
|
||
"remove": "Remove"
|
||
}
|
||
}
|