fix(ui,i18n): E30 review round 1 — audit rows in the reader's language, one HU name per thing
- audit log: a job run named from its result data (nested phases too), a skipped run says so, a secret's reset reads as a reset, choices named as Configuration names them, interval / batch / counts localized; the inbox shares the same jobRunText - HU: remux is "Közvetlen közvetítés" (it shared "Közvetlen lejátszás" with direct play); backfill is behúzás, enrich is dúsítás, collection is kollekció, the allow-list is fehérlista; the last "jobnak" / "transzkódolás"; a test holds the options of one choice to distinct names - contract: every skipped / reason word a job returns is named in both languages - person page: the bio wait is timed from the open and a failing ask stops the polling; ClampedText (ui) shared with the collection page, whose short summary lost its dead More - a playlist names season 0 the Specials; the channel re-slot compares in the reader's alphabet; an invite's date is in the admin's language; the language-ordered lists are asked again once a language switch is saved (saveLanguage) - poster grids' column minimum in rem; lint refuses minmax(Npx,…)
This commit is contained in:
@@ -100,6 +100,29 @@ const routeFiles = (dir = "routes"): string[] =>
|
||||
: [],
|
||||
);
|
||||
const routeSources = (): string[] => routeFiles().map(backend);
|
||||
// The words a job's result gives for not doing its work → `scheduler.skip.<vocabKey(word)>` (the Scheduler
|
||||
// page, the run notice and the audit row name them; lib/jobResult). Read as the `"skipped": "…"` /
|
||||
// `"reason": "…"` literals of the non-HTTP backend: under routes/ (and main.py) a `reason` is a refusal
|
||||
// code, which `errors.*` names. A word from an exception's text is not a literal and is not covered.
|
||||
const appFiles = (dir: string): string[] =>
|
||||
readdirSync(new URL(`../../../backend/app/${dir}`, import.meta.url), {
|
||||
withFileTypes: true,
|
||||
}).flatMap((e) =>
|
||||
e.isDirectory()
|
||||
? e.name === "routes" || e.name === "__pycache__"
|
||||
? []
|
||||
: appFiles(`${dir}${e.name}/`)
|
||||
: e.name.endsWith(".py") && `${dir}${e.name}` !== "main.py"
|
||||
? [`${dir}${e.name}`]
|
||||
: [],
|
||||
);
|
||||
const skipWords = [
|
||||
...new Set(
|
||||
appFiles("").flatMap((f) =>
|
||||
[...backend(f).matchAll(/"(?:skipped|reason)": "([^"]+)"/g)].map((m) => m[1]!),
|
||||
),
|
||||
),
|
||||
];
|
||||
// A target the scan cannot read — `what=SOME_CONSTANT` — is a 404 no locale is checked for (one hid
|
||||
// `debug_session`). Only the helpers' own pass-through in `_common.py` may name it by variable.
|
||||
const opaqueWhats = routeFiles()
|
||||
@@ -217,6 +240,14 @@ describe("backend ids have their names in both languages", () => {
|
||||
expect.arrayContaining(["English", "Gaming", "Health & Fitness", "Hobbies", "Sports"]),
|
||||
);
|
||||
expect(builtinProfiles).toEqual(expect.arrayContaining(["720p (MP4)", "Video only (MP4)"]));
|
||||
expect(skipWords).toEqual(
|
||||
expect.arrayContaining([
|
||||
"disabled",
|
||||
"sync paused",
|
||||
"tmdb_api_key not set",
|
||||
"no service user",
|
||||
]),
|
||||
);
|
||||
expect(refusedReasons).toEqual(
|
||||
expect.arrayContaining(["weak_password", "setting_too_low", "plex_write_failed"]),
|
||||
);
|
||||
@@ -256,6 +287,10 @@ describe("backend ids have their names in both languages", () => {
|
||||
expect([...idsUnder(keys, prefix)].filter((j) => !jobs.includes(j))).toEqual([]);
|
||||
});
|
||||
|
||||
it(`${lang}: every word a job's result gives for skipping its work`, () => {
|
||||
expect(missing(skipWords.map((w) => `scheduler.skip.${vocabKey(w)}`))).toEqual([]);
|
||||
});
|
||||
|
||||
it(`${lang}: every audit and quota action`, () => {
|
||||
expect(auditActions.filter((a) => !idsUnder(keys, "auditActions").has(a))).toEqual([]);
|
||||
expect(quotaActions.filter((a) => !idsUnder(keys, "quotaActions").has(a))).toEqual([]);
|
||||
|
||||
@@ -43,3 +43,32 @@ describe("the copy rule", () => {
|
||||
expect(offenders((v) => /(\d|\}\})\s?(m|h|d|s)(?![\p{L}\d/])/u.test(v))).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("one name per thing", () => {
|
||||
// The options of one choice are told apart by their names alone: two playback classes once shared
|
||||
// "Közvetlen lejátszás" in the HU filter (E30 review). A set = a `…Opt` object, or one choice key's
|
||||
// options under config.choices.
|
||||
const sets = (): [string, Record<string, unknown>][] => {
|
||||
const out: [string, Record<string, unknown>][] = [];
|
||||
const walk = (o: unknown, path: string, parent: string) => {
|
||||
if (!o || typeof o !== "object") return;
|
||||
if (/Opt$/.test(path.split(".").pop() ?? "") || parent.endsWith("/config:.choices"))
|
||||
out.push([path, o as Record<string, unknown>]);
|
||||
for (const [k, v] of Object.entries(o)) walk(v, `${path}.${k}`, path);
|
||||
};
|
||||
for (const [file, json] of Object.entries(files))
|
||||
walk(json, file.replace("./locales/", "").replace(".json", ":"), "");
|
||||
return out;
|
||||
};
|
||||
|
||||
it("names the options of one choice differently", () => {
|
||||
const found = sets();
|
||||
expect(found.some(([p]) => p.endsWith("playableOpt"))).toBe(true);
|
||||
expect(found.some(([p]) => p.endsWith("choices.log_level"))).toBe(true);
|
||||
const clashes = found.flatMap(([path, opts]) => {
|
||||
const names = Object.values(opts).filter((v): v is string => typeof v === "string");
|
||||
return names.length === new Set(names).size ? [] : [path];
|
||||
});
|
||||
expect(clashes).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"off": "Off",
|
||||
"default": "default",
|
||||
"secretUpdated": "secret updated (the value is never logged)",
|
||||
"secretReset": "secret reset to its default (the value is never logged)",
|
||||
"cols": {
|
||||
"when": "When",
|
||||
"actor": "Who",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
},
|
||||
"jobDone": {
|
||||
"titleOk": "{{job}} finished",
|
||||
"titleSkipped": "{{job}} skipped",
|
||||
"titleError": "Couldn't run {{job}}"
|
||||
},
|
||||
"emailUndelivered": {
|
||||
|
||||
@@ -320,7 +320,6 @@
|
||||
"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",
|
||||
|
||||
@@ -182,6 +182,9 @@
|
||||
"tmdbapikeynotset": "TMDB API key not set",
|
||||
"nodemoaccount": "no demo account",
|
||||
"noserviceuser": "no service user",
|
||||
"syncpaused": "sync paused"
|
||||
"syncpaused": "sync paused",
|
||||
"lowquota": "low quota",
|
||||
"noreadscope": "no YouTube read access",
|
||||
"busy": "another sync is running"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"pivotJob": "feladat {{id}}",
|
||||
"clearPivot": "Szűrő törlése",
|
||||
"showRequest": "Csak ennek a kérésnek a sorai",
|
||||
"showJob": "Csak ennek a jobnak a sorai",
|
||||
"showJob": "Csak ennek a feladatnak a sorai",
|
||||
"empty": "Nincs a szűrésnek megfelelő sor.",
|
||||
"stale": "Nem sikerült frissíteni — amit látsz, elavult lehet",
|
||||
"olderFailed": "Nem sikerült betölteni a régebbi sorokat",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"off": "Ki",
|
||||
"default": "alapérték",
|
||||
"secretUpdated": "titok frissítve (az értéke sosem kerül a naplóba)",
|
||||
"secretReset": "titok visszaállítva az alapértékre (az értéke sosem kerül a naplóba)",
|
||||
"cols": {
|
||||
"when": "Mikor",
|
||||
"actor": "Ki",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"audit_clear": "Napló ürítve",
|
||||
"download_credential_set": "Letöltési cookie-k beállítva",
|
||||
"download_credential_delete": "Letöltési cookie-k törölve",
|
||||
"invite_delete": "Whitelista-bejegyzés törölve",
|
||||
"invite_delete": "Fehérlista-bejegyzés törölve",
|
||||
"invite_send": "Meghívó elküldve",
|
||||
"issue_create": "Hibajegy elküldve"
|
||||
}
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
"keywords": "Kulcsszavak",
|
||||
"showInFeed": "Mutasd a Feedemben",
|
||||
"fullHistory": "Teljes előzmény",
|
||||
"fullHistoryLoading": "Előzmény letöltése…",
|
||||
"fullHistoryProgress": "Előzmény letöltése… {{stored}} / {{total}}",
|
||||
"fullHistoryLoadingHint": "A teljes előzmény letöltése folyamatban — a videók feltűnnek, ahogy előkerülnek; egy nagyon nagy csatorna maradékát a háttérben fejezi be.",
|
||||
"fullHistoryQueued": "A csatorna teljes előzményének letöltése elindult — az új videók feltűnnek, ahogy előkerülnek.",
|
||||
"fullHistoryFailed": "Nem sikerült elindítani a teljes előzmény letöltését"
|
||||
"fullHistoryLoading": "Előzmény behúzása…",
|
||||
"fullHistoryProgress": "Előzmény behúzása… {{stored}} / {{total}}",
|
||||
"fullHistoryLoadingHint": "A teljes előzmény behúzása folyamatban — a videók feltűnnek, ahogy előkerülnek; egy nagyon nagy csatorna maradékát a háttérben fejezi be.",
|
||||
"fullHistoryQueued": "A csatorna teljes előzményének behúzása elindult — az új videók feltűnnek, ahogy előkerülnek.",
|
||||
"fullHistoryFailed": "Nem sikerült elindítani a teljes előzmény behúzását"
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"actionsLabel": "Katalógus-műveletek",
|
||||
"syncSubscriptions": "Feliratkozások szinkronizálása a YouTube-ról",
|
||||
"syncSubscriptionsHint": "Újraimportálja a feliratkozási listádat a YouTube-ról — hozzáadja az újonnan követett csatornákat, és eltávolítja azokat, amelyekről leiratkoztál. Maguk a videók a háttérben automatikusan tovább szinkronizálódnak; ez nem tölti le őket újra.",
|
||||
"backfillEverything": "Minden letöltése",
|
||||
"backfillEverythingHint": "Teljes archívum letöltését kéri minden csatornához, amelyre feliratkoztál. A régebbi videók és a keresés a megosztott napi kvóta függvényében válik teljessé — ez eltarthat egy ideig.",
|
||||
"backfillEverything": "Minden videó behúzása",
|
||||
"backfillEverythingHint": "A teljes archívum behúzását kéri minden csatornához, amelyre feliratkoztál. A régebbi videók és a keresés a megosztott napi kvóta függvényében válik teljessé — ez eltarthat egy ideig.",
|
||||
"tabs": {
|
||||
"subscribed": "Feliratkozások",
|
||||
"discovery": "Felfedezés a lejátszási listákból",
|
||||
@@ -94,7 +94,7 @@
|
||||
"fullHistory": "Teljes előzmény",
|
||||
"fullHistoryHint": "Csatornák, amelyek teljes archívuma le van töltve, azok közül, amelyekhez teljes előzményt kértél.",
|
||||
"left": "hátra",
|
||||
"leftHint": "Hozzávetőleges becslés {{count}} függőben lévő csatorna teljes előzményének letöltésére, a megosztott napi kvóta alapján.",
|
||||
"leftHint": "Hozzávetőleges becslés {{count}} függőben lévő csatorna teljes előzményének behúzására, a megosztott napi kvóta alapján.",
|
||||
"myVideos": "Videóim",
|
||||
"myVideosHint": "A csatornáidon elérhető videók teljes száma.",
|
||||
"quotaLeft": "Maradék kvóta",
|
||||
@@ -105,15 +105,15 @@
|
||||
"editTags": "Címkék szerkesztése…",
|
||||
"filterFeedByTag": "Feed szűrése: „{{name}}”",
|
||||
"priorityHint": "A te rangsorod ehhez a csatornához. Rendezd a Feedet „Csatorna prioritás” szerint, hogy a magasabb prioritású csatornák felülre kerüljenek.",
|
||||
"fullHint": "Teljes előzmény letöltve.",
|
||||
"fullHint": "Teljes előzmény behúzva.",
|
||||
"fullySynced": "teljesen szinkronban",
|
||||
"fullySyncedHint": "A legutóbbi feltöltések és a teljes archívum is megvan.",
|
||||
"backfillThis": "Csatorna teljes letöltése",
|
||||
"backfillThisHint": "A csatorna teljes archívumának letöltése (régebbi videók + teljes keresés).",
|
||||
"resetBackfill": "Csatorna alaphelyzetbe állítása és újraletöltése",
|
||||
"cancelBackfill": "A teljes letöltés kérésének visszavonása",
|
||||
"resetHint": "Admin: a csatorna teljes újraletöltése a nulláról (legutóbbi + teljes archívum), a jelenlegi szinkron-állapottól függetlenül.",
|
||||
"queuedRequestedHint": "Teljes előzmény kérve — a csatorna teljes archívuma letöltődik, ahogy a megosztott kvóta engedi.",
|
||||
"backfillThis": "A csatorna teljes behúzása",
|
||||
"backfillThisHint": "A csatorna teljes archívumának behúzása (régebbi videók + teljes keresés).",
|
||||
"resetBackfill": "Csatorna alaphelyzetbe állítása és újbóli behúzása",
|
||||
"cancelBackfill": "A teljes behúzás kérésének visszavonása",
|
||||
"resetHint": "Admin: a csatorna teljes újbóli behúzása a nulláról (legutóbbi + teljes archívum), a jelenlegi szinkron-állapottól függetlenül.",
|
||||
"queuedRequestedHint": "Teljes előzmény kérve — a csatorna teljes archívuma bekerül, ahogy a megosztott kvóta engedi.",
|
||||
"queuedByOtherHint": "Egy másik feliratkozó már kérte ennek a csatornának a teljes előzményét, így a teljes archívuma már úton van mindenkihez — itt nincs teendőd.",
|
||||
"hideHint": "A csatorna videóinak elrejtése a Feededből. Feliratkozva marad; ez nem iratkoztat le a YouTube-on.",
|
||||
"hideFromFeed": "Elrejtés a Feedből",
|
||||
@@ -134,12 +134,12 @@
|
||||
"needYouTube": "Ehhez csatlakoztasd a YouTube-fiókod",
|
||||
"connect": "Csatlakoztatás",
|
||||
"filteredByTag": "Feed szűrve címkére: {{name}}",
|
||||
"resetDone": "{{name}} alaphelyzetbe állítva — újraletöltés folyamatban",
|
||||
"resetDone": "{{name}} alaphelyzetbe állítva — újbóli behúzás folyamatban",
|
||||
"resetFailed": "Nem sikerült alaphelyzetbe állítani a csatornát",
|
||||
"hidden": "„{{name}}” elrejtve a Feedből"
|
||||
},
|
||||
"confirmUnsubscribe": "Leiratkozol a(z) „{{name}}” csatornáról a YouTube-on? Ez megváltoztatja a valódi YouTube-fiókodat. Ha csak a Feededből szeretnéd eltávolítani, inkább rejtsd el.",
|
||||
"confirmReset": "Újraletöltöd a(z) „{{name}}” csatornát a nulláról? Ez újrafuttatja a videók behúzását (legutóbbi + teljes előzmény), és némi API-kvótát fogyaszt.",
|
||||
"confirmReset": "Újra behúzod a(z) „{{name}}” csatorna videóit a nulláról? Ez újrafuttatja a videók behúzását (legutóbbi + teljes előzmény), és némi API-kvótát fogyaszt.",
|
||||
"searchPlaceholder": "Csatornák keresése…",
|
||||
"blocked": {
|
||||
"title": "Tiltott csatornák",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
},
|
||||
"backfill_quota_reserve": {
|
||||
"label": "Letöltési kvótatartalék",
|
||||
"hint": "Tartalékban tartott egységek, hogy az ütemezett letöltés ne éheztesse ki az interaktív szinkront / gazdagítást."
|
||||
"hint": "Tartalékban tartott egységek, hogy az ütemezett behúzás ne éheztesse ki az interaktív szinkront / dúsítást."
|
||||
},
|
||||
"search_daily_limit_per_user": {
|
||||
"label": "Élő keresés — napi limit / felhasználó",
|
||||
@@ -57,11 +57,11 @@
|
||||
"hint": "Honnan jönnek az élő YouTube-keresés találatai. A „Weboldal” a YouTube saját keresővégpontját olvassa, és nem fogyaszt API-kvótát (ajánlott). A „Hivatalos API” a search.list-et használja (100 egység/oldal) — válts rá, ha a weboldalas forrás elromlik vagy letiltják."
|
||||
},
|
||||
"backfill_recent_max_videos": {
|
||||
"label": "Friss letöltés — max videó",
|
||||
"hint": "Csatornánként az első körben letöltött legújabb videók száma."
|
||||
"label": "Friss behúzás — max videó",
|
||||
"hint": "Csatornánként az első körben behúzott legújabb videók száma."
|
||||
},
|
||||
"backfill_recent_max_days": {
|
||||
"label": "Friss letöltés — max kor (nap)",
|
||||
"label": "Friss behúzás — max kor (nap)",
|
||||
"hint": "Az első kör csatornánként meddig nyúl vissza."
|
||||
},
|
||||
"rss_fallback_hours": {
|
||||
@@ -77,7 +77,7 @@
|
||||
"hint": "Futásonként ennyi videót osztályozunk."
|
||||
},
|
||||
"enrich_batch_size": {
|
||||
"label": "Gazdagítási kötegméret",
|
||||
"label": "Dúsítási kötegméret",
|
||||
"hint": "videos.list azonosítók hívásonként (a YouTube 50-ben maximálja)."
|
||||
},
|
||||
"autotag_title_sample": {
|
||||
@@ -90,7 +90,7 @@
|
||||
},
|
||||
"youtube_api_key": {
|
||||
"label": "YouTube API-kulcs",
|
||||
"hint": "Opcionális. Publikus olvasásokhoz (csatornák/videók), hogy a megosztott letöltés ne függjön egy felhasználó OAuth-jától. Titkosítva tárolva; csak írható."
|
||||
"hint": "Opcionális. Publikus olvasásokhoz (csatornák/videók), hogy a megosztott behúzás ne függjön egy felhasználó OAuth-jától. Titkosítva tárolva; csak írható."
|
||||
},
|
||||
"youtube_api_proxy": {
|
||||
"label": "YouTube API kimenő proxy",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"link": "Ez a megosztási link már nem létezik",
|
||||
"notification": "Ez az értesítés már nem létezik",
|
||||
"account": "Ez a fiók már nem létezik",
|
||||
"collection": "Ez a gyűjtemény már nem létezik",
|
||||
"collection": "Ez a kollekció már nem létezik",
|
||||
"config_key": "Nincs ilyen beállítás",
|
||||
"file": "A fájl már nem érhető el",
|
||||
"filmstrip": "Ehhez nincs képsor",
|
||||
@@ -128,9 +128,9 @@
|
||||
"already_subscribed": "Erre a csatornára már feliratkoztál",
|
||||
"channel_blocked": "Ezt a csatornát letiltottad",
|
||||
"collection_fields_required": "A címet és egy elemet is meg kell adni",
|
||||
"collection_pending_sync": "A gyűjtemény a Plexben megváltozott, de a helyi másolat frissítése nem sikerült — a következő szinkron pótolja",
|
||||
"collection_read_only": "Ez a gyűjtemény csak olvasható",
|
||||
"collection_smart": "Az okos és az automatikus listás gyűjtemények nem tehetők szerkeszthetővé",
|
||||
"collection_pending_sync": "A kollekció a Plexben megváltozott, de a helyi másolat frissítése nem sikerült — a következő szinkron pótolja",
|
||||
"collection_read_only": "Ez a kollekció csak olvasható",
|
||||
"collection_smart": "Az okos és az automatikus listás kollekciók nem tehetők szerkeszthetővé",
|
||||
"demo_activate": "A demó fiók nem aktiválható",
|
||||
"demo_delete": "A demó fiók nem törölhető",
|
||||
"demo_role": "A demó fiók szerepköre nem módosítható",
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
"countTooltip": "A feliratkozásaid a teljes megosztott katalógushoz képest.",
|
||||
"paused": "szüneteltetve",
|
||||
"syncing": "{{count}} szinkronizálás alatt",
|
||||
"backfillingHistory": "előzmény letöltése",
|
||||
"backfillingHistory": "előzmény behúzása",
|
||||
"working": "szinkronizálás…",
|
||||
"recentQueued": "{{count}} sorban",
|
||||
"allSynced": "minden szinkronban",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
},
|
||||
"jobDone": {
|
||||
"titleOk": "{{job}} kész",
|
||||
"titleSkipped": "{{job}} kihagyva",
|
||||
"titleError": "Nem sikerült lefuttatni: {{job}}"
|
||||
},
|
||||
"emailUndelivered": {
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"nameTaken": "Már létezik ilyen nevű kollekció",
|
||||
"newHint": "Válaszd ki az első címet — egy kollekcióhoz legalább egy elem kell.",
|
||||
"createWith": "Létrehozás",
|
||||
"deleteFailed": "Nem sikerült törölni a gyűjteményt"
|
||||
"deleteFailed": "Nem sikerült törölni a kollekciót"
|
||||
},
|
||||
"searchPlaceholder": "Keresés a Plexben…",
|
||||
"searchField": {
|
||||
@@ -60,7 +60,7 @@
|
||||
"movie": "Filmek",
|
||||
"show": "Sorozatok",
|
||||
"playlists": "Listák",
|
||||
"collections": "Gyűjtemények"
|
||||
"collections": "Kollekciók"
|
||||
},
|
||||
"show": "Megjelenítés",
|
||||
"showOpt": {
|
||||
@@ -103,7 +103,7 @@
|
||||
"playable": "Lejátszás",
|
||||
"playableOpt": {
|
||||
"direct": "Közvetlen lejátszás",
|
||||
"remux": "Közvetlen lejátszás",
|
||||
"remux": "Közvetlen közvetítés",
|
||||
"transcode_hw": "Átkódolás · HW",
|
||||
"transcode_sw": "Átkódolás · SW"
|
||||
}
|
||||
@@ -184,7 +184,7 @@
|
||||
"subtitles": "Felirat",
|
||||
"subOff": "Ki",
|
||||
"errNotFound": "Ez a fájl nem játszható le — a média nem érhető el a szerveren (hiányzik a Plex media-mount, vagy hibás az útvonal-leképezés). Kérd meg az adminisztrátort, hogy ellenőrizze a Plex beállításait.",
|
||||
"errTranscode": "Ennek a fájlnak a formátuma transzkódolást igényel, ami még nem támogatott.",
|
||||
"errTranscode": "Ennek a fájlnak a formátuma átkódolást igényel, ami még nem támogatott.",
|
||||
"errGeneric": "Nem sikerült elindítani a lejátszást. Próbáld újra.",
|
||||
"help": "Billentyűparancsok",
|
||||
"infoBtn": "Média infó",
|
||||
@@ -288,7 +288,7 @@
|
||||
},
|
||||
"playable": {
|
||||
"direct": "Közvetlenül játszható a böngészőben",
|
||||
"remux": "Közvetlen lejátszás — könnyű remux (nincs videó-újrakódolás)",
|
||||
"remux": "Közvetlen közvetítés — könnyű remux (nincs videó-újrakódolás)",
|
||||
"transcode_hw": "Hardveres kódolóval átkódolva",
|
||||
"transcode_sw": "Szoftveresen átkódolva (legnehezebb)"
|
||||
},
|
||||
@@ -320,7 +320,6 @@
|
||||
"removeShow": "Egész sorozat eltávolítása",
|
||||
"removeSeason": "Egész évad eltávolítása",
|
||||
"episodes": "{{count}} epizód",
|
||||
"season": "{{n}}. évad",
|
||||
"seasonUnknown": "Epizódok",
|
||||
"addShow": "Egész sorozat listához adása",
|
||||
"addSeason": "Évad listához adása",
|
||||
|
||||
@@ -151,10 +151,10 @@
|
||||
"shows": "sorozat",
|
||||
"seasons": "évad",
|
||||
"episodes": "epizód",
|
||||
"collections": "gyűjtemény",
|
||||
"collections": "kollekció",
|
||||
"overlaid": "magyar átfedés",
|
||||
"pruned": "eltávolítva",
|
||||
"people_enriched": "kiegészített személy",
|
||||
"people_enriched": "dúsított személy",
|
||||
"media_probed": "vizsgált média",
|
||||
"people_pruned": "eltávolított személy",
|
||||
"error": "hiba",
|
||||
@@ -166,7 +166,7 @@
|
||||
"applied": "alkalmazva",
|
||||
"cleared": "törölve",
|
||||
"scanned": "átvizsgálva",
|
||||
"enriched": "kiegészítve",
|
||||
"enriched": "dúsítva",
|
||||
"countries_coded": "országkód pótolva",
|
||||
"sessions_closed": "lezárt munkamenet",
|
||||
"sessions_reaped": "eltakarított munkamenet",
|
||||
@@ -182,6 +182,9 @@
|
||||
"tmdbapikeynotset": "nincs TMDB API-kulcs",
|
||||
"nodemoaccount": "nincs demófiók",
|
||||
"noserviceuser": "nincs szolgáltatásfiók",
|
||||
"syncpaused": "a szinkron szünetel"
|
||||
"syncpaused": "a szinkron szünetel",
|
||||
"lowquota": "kevés a kvóta",
|
||||
"noreadscope": "nincs YouTube-olvasási jogosultság",
|
||||
"busy": "egy másik szinkron fut"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,10 +185,10 @@
|
||||
"delete": "Törlés",
|
||||
"deleteLabel": "{{email}} törlése a fehérlistáról",
|
||||
"deleteHint": "A cím elfelejtése. Egy későbbi kérelme új kérelemként jelenik meg.",
|
||||
"deleteTitle": "Törlöd a whitelista-bejegyzést?",
|
||||
"deleteTitle": "Törlöd a fehérlista-bejegyzést?",
|
||||
"deleteConfirm": "Elfelejted {{email}} címet? A Siftlode eldobja a bejegyzést, így az adott címről újra kérelmezni kell.",
|
||||
"deleteHasAccount": "Erre a címre már regisztrált valaki — a Felhasználók és szerepek fülön kezelhető, ahol a fiók törlése ezt a bejegyzést is eltávolítja.",
|
||||
"deleted": "Whitelista-bejegyzés törölve",
|
||||
"deleted": "Fehérlista-bejegyzés törölve",
|
||||
"deleteFailed": "Nem sikerült törölni a bejegyzést",
|
||||
"emailOff": "Az e-mail-küldés nincs beállítva, így senki nem kap megerősítő linket, és e-mailben egy kérelem sem jut el hozzád. Ezt a listát és az Értesítéseket figyeld helyette, a javítás pedig a Konfiguráció → E-mail / SMTP fülön van.",
|
||||
"deletedStillAllowed": "A bejegyzés törölve, de ezt a címet a szerver konfigurációja továbbra is engedélyezi, tehát megmarad a hozzáférése. Vedd ki az ALLOWED_EMAILS / ADMIN_EMAILS listából, ha ezen változtatnál.",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"rangeLabel": "Időtartomány",
|
||||
"introBefore": "A YouTube Data API-egységek aszerint, hogy ki váltotta ki a felhasználást. A ",
|
||||
"introSystem": "Rendszer",
|
||||
"introAfter": " a megosztott háttérmunka (ütemezett letöltés, gazdagítás, újraszinkronizálás), amely nem köthető egy személyhez.",
|
||||
"introAfter": " a megosztott háttérmunka (ütemezett behúzás, dúsítás, újraszinkronizálás), amely nem köthető egy személyhez.",
|
||||
"loading": "Betöltés…",
|
||||
"noData": "Nincs adat.",
|
||||
"dailyTotal": "Napi összesen ({{d}} · {{units}} egység)",
|
||||
@@ -22,13 +22,13 @@
|
||||
"recentSynced": "Friss szinkronizálva",
|
||||
"recentSyncedHint": "Azok a csatornák, amelyek legutóbbi feltöltései (~az elmúlt év) már a helyi adatbázisban vannak, így megjelennek a Feededben.",
|
||||
"fullHistory": "Teljes előzmény",
|
||||
"fullHistoryHint": "Azok a csatornák, amelyek teljes archívuma letöltődött, azokból, amelyekhez teljes előzményt kértél (csatornánként választható a Csatornák oldalon).",
|
||||
"fullHistoryHint": "Azok a csatornák, amelyek teljes archívuma be van húzva, azokból, amelyekhez teljes előzményt kértél (csatornánként választható a Csatornák oldalon).",
|
||||
"fullHistoryEta": "Teljes előzmény becsült ideje",
|
||||
"fullHistoryEtaHint": "Hozzávetőleges becslés {{count}} függőben lévő csatorna teljes előzményének letöltéséhez, a megosztott napi kvóta alapján.",
|
||||
"fullHistoryEtaHint": "Hozzávetőleges becslés {{count}} függőben lévő csatorna teljes előzményének behúzásához, a megosztott napi kvóta alapján.",
|
||||
"myVideos": "Saját videók",
|
||||
"myVideosHint": "A számodra elérhető videók összesen a feliratkozott csatornáidon.",
|
||||
"quotaLeft": "Ma maradt kvóta",
|
||||
"quotaLeftHint": "A ma fennmaradó megosztott YouTube API-keret (éjfélkor nullázódik, USA csendes-óceáni idő szerint). A letöltés ennek alárendelődik.",
|
||||
"quotaLeftHint": "A ma fennmaradó megosztott YouTube API-keret (éjfélkor nullázódik, USA csendes-óceáni idő szerint). A behúzás ennek alárendelődik.",
|
||||
"loading": "Betöltés…",
|
||||
"apiUsage": "Saját API-használat",
|
||||
"today": "Ma",
|
||||
@@ -41,8 +41,8 @@
|
||||
"actions": "Műveletek",
|
||||
"syncSubscriptions": "Feliratkozások szinkronizálása a YouTube-ról",
|
||||
"syncSubscriptionsHint": "Újraimportálja a YouTube-feliratkozásaidat és behúzza az újonnan követett csatornákat.",
|
||||
"backfillEverything": "Minden letöltése",
|
||||
"backfillEverythingHint": "Teljes archívum letöltésének kérése minden csatornához, amelyre fel vagy iratkozva. A régebbi videók és a teljes keresés annyira töltődnek fel, amennyit a megosztott napi kvóta enged.",
|
||||
"backfillEverything": "Minden videó behúzása",
|
||||
"backfillEverythingHint": "A teljes archívum behúzásának kérése minden csatornához, amelyre fel vagy iratkozva. A régebbi videók és a teljes keresés annyira töltődnek fel, amennyit a megosztott napi kvóta enged.",
|
||||
"synced": "{{count}} feliratkozás szinkronizálva",
|
||||
"syncFailed": "Nem sikerült szinkronizálni a feliratkozásokat",
|
||||
"fullHistoryRequested": "Teljes előzmény kérve {{count}} csatornához",
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
"lastLogin": "Utolsó belépés",
|
||||
"lastLoginNone": "még nincs rögzítve",
|
||||
"lastLoginDemo": "a demó fióknál nem rögzítjük",
|
||||
"inviteMissing": "ez a cím nincs az engedélyezési listán",
|
||||
"inviteMissing": "ez a cím nincs a fehérlistán",
|
||||
"linkNote": "24 óráig érvényes, egyszer használható. Aki megnyitja, beállíthat egy jelszót, és ezzel kilép mindenki, aki eddig használta a fiókot. A címet nem erősíti meg.",
|
||||
"mailOff": "nincs beállítva levelezés",
|
||||
"open": "Fiókpanel megnyitása",
|
||||
|
||||
Reference in New Issue
Block a user