Owner answers to the E11 S5 raises (2026-09-13): 1 → A, 2 → "Feed" in every language, 3 → translate the
proxy label and fix every config key missing in BOTH languages ("maintenance", "tmdb" — old bugs).
Focus across a view change (1-A). Opening a Plex title from Home's rail, a channel from the Channels
table or a title from a Plex grid switches the page or the sub-view, which unmounts the list; Back used
to hand focus to <body>, so the next `j` started over at the top. The YouTube player (an overlay)
already restored onto the card.
- `lib/listNav`: `navPosition()` (list's place in reading order, the page's list count, item index)
and `restoreNavPosition()`: focuses the item once the page has as many lists on screen as when it was
left, polls on a timer (a hidden tab runs no animation frames), gives up after 2 s or at once when
something already holds focus, focuses without scrolling (the scroll restore owns the position).
- `lib/history`: `rememberNavPosition()` stamps `sfNav` onto the entry being left and returns the state
without it (a new entry must not inherit it); one popstate listener restores and spends the stamp,
so a later landing on the same entry (an overlay closing over it) cannot pull focus to an old item.
- Called before every view push: `setPage`, `openChannel`, `enterYtSearch`, `useHistorySubview.open`,
the Channels tab push. `navPosition.wiring.contract.test` fails on any `history.pushState(` without
it (the overlay stack's own push is the one exemption).
"Feed" (2). The module is "Feed" in both languages: every "hírfolyam" in the Hungarian UI (≈45 strings,
suffixed: Feedből, Feeded, Feedben…) and the prose "feed" in English that means the module ("your
Feed", "Hide from Feed"); "RSS feed" keeps its meaning. The welcome email says it too.
Backend ids without a name (3). The Configuration page showed `maintenance`, `tmdb`,
`maintenance_revalidate_batch`, `download_upload_max_bytes`, `audit_retention_days`, `plex_overlay_map`,
`tmdb_api_key` and `tmdb_language` as raw identifiers — the lookup falls back to the id, and the i18n
parity test stayed green because both languages missed the same keys. Added labels + hints (EN/HU),
the two groups (and their tab order), the missing `scheduler.jobDesc.demo_reset`, removed the stale
`plex_sync_interval_min` field, and "YouTube API kimenő proxy". `i18n/backendIds.contract.test` reads
`sysconfig.SPECS`, `scheduler.JOB_INTERVALS` and the audit/quota action enums from the backend sources
and fails on an id without its name in either language, or a name left for an id the backend dropped.
86 lines
3.5 KiB
JSON
86 lines
3.5 KiB
JSON
{
|
||
"chips": {
|
||
"label": "Szűrve",
|
||
"remove": "Szűrő eltávolítása: {{name}}",
|
||
"contentNone": "Nincs tartalomtípus",
|
||
"untagged": "Címkézetlen",
|
||
"count_one": "{{count}} szűrő",
|
||
"count_other": "{{count}} szűrő",
|
||
"moreCount_one": "még {{count}} szűrő",
|
||
"moreCount_other": "még {{count}} szűrő",
|
||
"maxAge_one": "Utolsó {{count}} nap",
|
||
"maxAge_other": "Utolsó {{count}} nap"
|
||
},
|
||
"loading": "Feed betöltése…",
|
||
"loadError": "Nem sikerült betölteni a Feedet.",
|
||
"emptyTitle": "A Feeded üres",
|
||
"emptyBody": "Kösd össze a YouTube-fiókodat, hogy importáld a feliratkozásaidat, és felépítsd a Feededet.",
|
||
"setUp": "Feed beállítása",
|
||
"browseShared": "Vagy csak böngészd a közös könyvtárat",
|
||
"demoEmptyTitle": "Itt a demóban nincs semmi",
|
||
"demoEmptyBody": "A demo fióknak nincsenek saját feliratkozásai — de a teljes közös könyvtár a tiéd: böngészd, szűrd és rendezd kedvedre.",
|
||
"browseLibrary": "Könyvtár böngészése",
|
||
"noMatches": "Egy videó sem felel meg ezeknek a szűrőknek.",
|
||
"channelScopeHint": "Ez a csatorna nincs a Feededben – lehet, hogy el van rejtve. A videói a közös könyvtárban vannak.",
|
||
"viewInLibrary": "Megnézés a Könyvtárban",
|
||
"videoCount_one": "{{formattedCount}} videó",
|
||
"videoCount_other": "{{formattedCount}} videó",
|
||
"sortLabel": "Rendezés",
|
||
"viewLabel": "Nézet",
|
||
"showLabel": "Megtekintési állapot",
|
||
"contentLabel": "Tartalomtípusok",
|
||
"view": {
|
||
"cards": "Nagy kártya",
|
||
"cardsSmall": "Kis kártya",
|
||
"rows": "Sor",
|
||
"rowsCompact": "Tömör sor",
|
||
"tiles": "Csempe"
|
||
},
|
||
"dirAsc": "Növekvő",
|
||
"dirDesc": "Csökkenő",
|
||
"sortKey": {
|
||
"date": "Dátum",
|
||
"popular": "Népszerű",
|
||
"duration": "Hossz",
|
||
"title": "Név",
|
||
"subscribers": "Csatorna feliratkozók",
|
||
"priority": "Csatorna prioritás",
|
||
"shuffle": "Meglepetés",
|
||
"relevance": "Relevancia"
|
||
},
|
||
"loadingMore": "Továbbiak betöltése…",
|
||
"hiddenNamed": "Elrejtve: „{{title}}”",
|
||
"hidden": "Videó elrejtve",
|
||
"undo": "Visszavonás",
|
||
"markedWatchedNamed": "Megnézettnek jelölve: „{{title}}”",
|
||
"markedWatched": "Megnézettnek jelölve",
|
||
"thisVideo": "ez a videó",
|
||
"unwatch": "Megnézés visszavonása",
|
||
"source": {
|
||
"label": "Forrás",
|
||
"tip": "Szűrés aszerint, hogyan kerültek be a videók: csak a feliratkozásaid/katalógus, az élő YouTube-keresésből talált videóiddal együtt, vagy csak azok a keresési találatok.",
|
||
"organic": "Keresés nélkül",
|
||
"all": "Kereséssel együtt",
|
||
"only": "Csak keresésből",
|
||
"plex": "Plex"
|
||
},
|
||
"yt": {
|
||
"searchFor": "Keresés a YouTube-on: „{{query}}”",
|
||
"resultsFor": "YouTube találatok erre: „{{query}}”",
|
||
"quotaNote": "Élő találatok — a közös API-kvótát fogyasztja",
|
||
"freeNote": "Élő találatok — nem fogyaszt keresési kvótát",
|
||
"back": "Vissza a Feedhez",
|
||
"searching": "Keresés a YouTube-on…",
|
||
"noResults": "Nincs YouTube-találat.",
|
||
"error": "A YouTube-keresés nem sikerült.",
|
||
"loadMore": "Továbbiak betöltése (kvótát fogyaszt)",
|
||
"loadMoreFree": "Továbbiak betöltése",
|
||
"show": "Mutat",
|
||
"ephemeralNote": "Ezek a találatok ideiglenesek — maguktól eltűnnek, hacsak meg nem nézel vagy el nem mentesz egyet.",
|
||
"clearNow": "Törlés most",
|
||
"cleared_one": "{{count}} találat törölve",
|
||
"cleared_other": "{{count}} találat törölve",
|
||
"showHint": "Hány találatot szerezzen egyszerre — a Több betöltése ennyivel tölt tovább."
|
||
}
|
||
}
|