Files
siftlode/frontend/src/i18n/locales/en/plex.json
T
peter 7d40a8780d E5 S8: crossfading art backdrop (detail + person pages)
The faint HTPC art backdrop now slowly cross-dissolves through a pool of images
instead of showing one static art — the last E5 sprint.

- useCrossfadeBackdrop (replaces useArtBackdrop): a double buffer — the SETTLED
  image lives on #root's background (the proven full-viewport layer); the next
  image cross-fades in on a z-index:-1 overlay layer, then is committed and the
  overlay reset. ⭐ #root is given `isolation: isolate` so it's a stacking context
  — without it the z:-1 overlay paints BEHIND #root's own background and is
  invisible (found + fixed live: a red test layer + a real TMDB backdrop both
  only showed once #root was isolated).
- Art pool: the item's own art + its TMDB backdrops (E5 S2, rendered straight
  from the TMDB CDN — the CSP allows it) + its collection siblings' art; the show
  page adds related art; the PERSON page cross-dissolves through the person's
  films' art (the roadmap's signature touch).
- HARD-OFF under prefers-reduced-motion (static, no overlay) + a new usePref
  "Crossfade backdrop" toggle in the detail customize menu (fade 1.6s / 7s cycle).

Wired into PlexInfo, PlexShowView, PlexSeasonView, PlexPersonView. Tests:
plexBackdrop.dom.test.tsx (5: paint+isolate+overlay, reduced-motion off, single
image, animate=false, disable/unmount cleanup). Browser-E2E'd (isolation +
overlay render + a real backdrop crossfade + the toggle). Gate: vitest 347,
backend lane 403 (unchanged — FE only).

▶ E5 · Plex Experience epic COMPLETE (S1–S8).
2026-08-21 01:00:11 +02:00

294 lines
8.8 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"navLabel": "Plex",
"backToFeed": "YouTube feed",
"backToLibrary": "Back to library",
"searchPlaceholder": "Search Plex…",
"searchField": {
"aria": "Search scope",
"all": "Everywhere",
"title": "Titles",
"people": "Cast & crew",
"summary": "Descriptions",
"episode": "Episodes"
},
"suggest": {
"aria": "Search suggestions"
},
"sort": {
"added": "Recently added",
"title": "Title",
"year": "Year",
"rating": "IMDb rating",
"duration": "Length",
"release": "Release date"
},
"filter": {
"scope": "Library",
"scopeOpt": {
"both": "All",
"movie": "Movies",
"show": "Shows"
},
"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",
"durationUnit": "min",
"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",
"matchLabel": "Match",
"studio": "Studio",
"add": "Add",
"moreRefine": "{{count}} more — refine with search"
},
"count": "{{count}} titles",
"searchCount": "{{count}} matches",
"noMatches": "No matches.",
"noMatchesFiltered_one": "No matches — a filter is also narrowing the results.",
"noMatchesFiltered_other": "No matches — {{count}} filters are also narrowing the results.",
"loading": "Loading…",
"empty": "Nothing here yet. Run a Plex sync from the admin Config page.",
"watched": "Watched",
"inProgress": "In progress",
"play": "Play",
"resume": "Resume",
"openShow": "Open show",
"markWatched": "Mark watched",
"markUnwatched": "Mark unwatched",
"watchedFailed": "Couldn't update the watched state — please try again.",
"seasons": "{{count}} seasons",
"unified": {
"titles": "Titles",
"episodes": "Episodes"
},
"series": {
"seasons": "Seasons",
"backToShow": "Back to show",
"episodeCount": "{{count}} episodes",
"playFromStart": "Play from start",
"related": "Related shows",
"markShowWatched": "Mark show watched",
"markShowUnwatched": "Mark show unwatched",
"markSeasonWatched": "Mark season watched",
"markSeasonUnwatched": "Mark season unwatched",
"addShowCollection": "Add to collection"
},
"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",
"audio": "Cycle audio track",
"subtitle": "Cycle subtitle",
"fineSeek": "Fine seek"
},
"settings": "Settings",
"sync": "Offsets",
"subOffset": "Subtitle delay",
"audioOffset": "Audio delay",
"playback": "Playback",
"seekStep": "Seek step",
"fineSeek": "Fine seek (Ctrl)",
"autoHide": "Auto-hide controls",
"subStyle": "Subtitles",
"subSize": "Text size",
"subPos": "Position",
"subColor": "Text color",
"subBg": "Background",
"subBgNone": "None",
"clock": "Clock",
"clockShow": "Show clock",
"clock24h": "24-hour",
"clockSize": "Size",
"clockColor": "Color",
"clockDate": "Show date",
"subShadow": "Shadow",
"subShadowColor": "Shadow color",
"autoSkipIntro": "Auto-skip intro",
"autoSkipCredits": "Auto-skip credits",
"autoSkipDelay": "Auto-skip delay"
},
"info": {
"title": "Media info",
"customize": "Customize view",
"prefArtBg": "Faint backdrop",
"prefCast": "Cast & crew",
"prefRelated": "Related shows",
"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}}",
"viewPerson": "View {{name}}'s filmography",
"browseCollection": "Browse collection →",
"audience": "Audience",
"keywords": "Keywords",
"crew": "Crew",
"filterKeyword": "Filter by \"{{name}}\"",
"facts": {
"title": "Details",
"release": "Released",
"runtime": "Runtime",
"cert": "Rating",
"budget": "Budget",
"revenue": "Revenue",
"studios": "Studios",
"countries": "Countries"
},
"prefCrossfade": "Crossfade backdrop"
},
"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",
"groupProgress": "{{in}} / {{size}}"
},
"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.",
"layoutLabel": "Layout",
"layoutAccordion": "Accordion view",
"layoutTree": "Tree view",
"removeShow": "Remove whole show",
"removeSeason": "Remove whole season",
"episodes": "{{count}} episodes",
"season": "Season {{n}}",
"seasonUnknown": "Episodes",
"addShow": "Add whole show to a playlist",
"addSeason": "Add season to a playlist",
"addEpisode": "Add episode to a playlist"
},
"people": {
"count_one": "{{count}} title",
"count_other": "{{count}} titles",
"remove": "Remove from filter"
},
"person": {
"credits": "{{movies}} movies · {{shows}} shows",
"filterBy": "Filter library by {{name}}",
"movies": "Movies ({{count}})",
"shows": "Shows ({{count}})",
"empty": "No titles found for this person.",
"born": "Born",
"died": "Died",
"aka": "Also known as",
"knownFor": "Known for"
},
"view": {
"label": "View",
"browse": "Browse"
},
"discover": {
"tab": "Discover",
"continueWatching": "Continue watching",
"recentlyAdded": "Recently added",
"surprise": "Surprise me",
"reshuffle": "Reshuffle",
"byGenre": "Browse by genre",
"becauseWatched": "Because you watched {{title}}",
"empty": "Nothing to discover yet — run a Plex sync from the admin Config page."
}
}