v0.254.0 — the saved notes follow the language, and the switch becomes a globe (R-557 slice 2 release C; SLICE 2 CLOSED)
gates / gates (push) Successful in 23s
gates / gates (push) Successful in 23s
The notes a background run SAVES — last night's backup line, the last error, the proof result, the restore outcome — are written in the BOX's language at the moment they are written. A household that switches sees the previous run's note in the old language until the next run rewrites it: the operator's §16 option 1, stated rather than hidden. EndRestoreOp no longer receives a Hungarian literal from anywhere. The language switch is a globe. Two text links wrapped in the sidebar footer and asked the reader to recognise "Magyar"/"English" as links; a globe is the one symbol every web user already reads as "language", so nobody has to read Hungarian to escape Hungarian. It is <details>/<summary> — a menu with no script, drawn inline because the icon sprite lives only in layout.html and the visitor pages have their own shell. Those visitor pages get the same globe, and a visitor's choice stays theirs: a display-only felhom_lang cookie that langFor reads ONLY when there is no session. A signed-in household can never inherit a language a previous visitor picked in the same browser. POST /lang is CSRF-exempt for a narrow reason written at the exemption — its only achievable effect is the language of the page the victim's own browser shows them — and safeBackPath refuses //evil.example as well as https://, because "starts with /" alone is not the test. §16 taken: a successful claim carries the cookie into the household's setting. TWO PARITY EXCEPTIONS, MEASURED: 106 fixtures compared with a real diff — exactly two change shapes (the dashboard footer, the globe in the shells) and 5 byte-identical, which are the three pages that must not change. I INTRODUCED A DEADLOCK AND THE SUITE CAUGHT IT BY HANGING. UpdateOffboxStatus holds the settings write lock while running its callback; boxLang() wants the read lock; sync.RWMutex is not reentrant. On a real box an off-site run would have hung forever HOLDING the settings lock. Fixed by resolving the language before the callback, and guarded by a test that names the file and line in a second instead of hanging for 25 minutes. MinAgent: 0.131.0 (unchanged). No hub release needed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -818,5 +818,119 @@
|
||||
"err.integrations.occ_disable_failed": [
|
||||
"occ app:disable sikertelen: %v (kimenet: %s)"
|
||||
],
|
||||
"err.notify.hub_error": "hub hiba (%d): %s"
|
||||
"err.notify.hub_error": "hub hiba (%d): %s",
|
||||
"note.offsite.fail_quota": "A távoli mentés nem fért el a tárhelykereten belül",
|
||||
"note.offsite.fail_orphaned": "A távoli tárhely egy korábbi, már nem elérhető kulccsal készült",
|
||||
"note.offsite.fail_no_repo": "A távoli tárhelyen nincs mentési adattár",
|
||||
"note.offsite.fail_no_units": "Nem volt mit menteni: egyetlen kijelölt alkalmazásnak sem található mentése",
|
||||
"note.offsite.fail_transport": "A távoli tárhely nem érhető el (hálózat vagy bejelentkezés)",
|
||||
"note.offsite.fail_unknown": "A távoli mentés ismeretlen okból nem sikerült",
|
||||
"note.offsite.fail_head": "A távoli mentés nem sikerült",
|
||||
"note.offsite.whole_unit_gap": "(a teljes alkalmazás — nincs helyi mentési egysége)",
|
||||
"note.offsite.no_local_unit": "Ezek az alkalmazások NEM kerültek be a távoli mentésbe, mert még nincs helyi mentési egységük: %s. A következő mentés általában már elkészíti — ha a második futás után is itt szerepelnek, szólj az üzemeltetőnek.",
|
||||
"note.offsite.not_installed": "Ezek az alkalmazások ki vannak jelölve távoli mentésre, de nincsenek telepítve, ezért nem menthetők: %s. Ha már nincs rájuk szükséged, vedd ki a kijelölésüket a Távoli mentés oldalon.",
|
||||
"note.offsite.quota_partial": "Figyelmeztetés: a tárhelykeret miatt %d alkalmazásnál csak konfiguráció- és adatbázis-mentés készült: %s.",
|
||||
"note.offsite.quota_usage": "A távoli mentés a keret %d%%-át használja (%d/%d GB).",
|
||||
"note.tier2.reason_manual": "kézi választás",
|
||||
"note.tier2.reason_other_drive": "másik adatmeghajtó",
|
||||
"note.tier2.label_internal_ssd": "belső SSD (rendszer)",
|
||||
"note.tier2.reason_no_second": "nincs 2. adatmeghajtó — csak az adatbázis/konfiguráció fér a belső SSD-re; a nagy fájlokhoz 2. meghajtó kell",
|
||||
"note.tier2.same_disk": "a kiválasztott cél ugyanazon a fizikai lemezen van",
|
||||
"note.tier2.ssd_partial": "A belső SSD-n csak a konfiguráció, adatbázis és a kötelező adatok férnek el — a választható tartalom nem került másolásra.",
|
||||
"note.tier2.no_space_ssd": "nincs elég hely a belső SSD-n — a nagy fájlok off-drive mentéséhez 2. meghajtó (vagy távoli tárhely) szükséges",
|
||||
"note.tier2.no_other_drive": "nincs másik fizikai meghajtó — a 2. mentéshez 2. meghajtó szükséges",
|
||||
"note.tier2.unit_preserved": "A fő meghajtón lévő adatcsomag hiányos volt, ezért a másodlagos másolatban meglévő, teljes csomagot megőriztük. A másolat adatcsomagja ezért régebbi, mint ez a mentés.",
|
||||
"note.restore.interrupted": "A visszaállítás megszakadt (a doboz újraindult) — indítsd el újra.",
|
||||
"note.undo.present": [
|
||||
"a korábbi állapot mentése megvan: "
|
||||
],
|
||||
"note.undo.partial": [
|
||||
"a korábbi állapot mentése RÉSZBEN van meg — megvan: ",
|
||||
"; HIÁNYZIK: "
|
||||
],
|
||||
"note.undo.absent": [
|
||||
"a korábbi állapot mentését NEM találjuk a helyén (",
|
||||
")"
|
||||
],
|
||||
"note.undo.none": "a korábbi állapotról nem készült menthető másolat",
|
||||
"note.reconstitute.copy_latest": "legutóbbi",
|
||||
"note.reconstitute.held": [
|
||||
"a(z) %s adatainak visszaállítása %s-kor megszakadt, és a korábbi állapotot sem sikerült visszatölteni. ",
|
||||
"Az alkalmazás biztonsági okból leállítva marad, hogy az adatai ne sérüljenek tovább. Vedd fel velünk a kapcsolatot"
|
||||
],
|
||||
"note.restore.failed": [
|
||||
"A visszaállítás sikertelen: "
|
||||
],
|
||||
"note.restore.full_failed": [
|
||||
"A teljes visszaállítás sikertelen: "
|
||||
],
|
||||
"note.restore.recover_failed": [
|
||||
"A helyreállítás sikertelen: "
|
||||
],
|
||||
"note.restore.shares_failed": [
|
||||
"A megosztások visszaállítása sikertelen: "
|
||||
],
|
||||
"note.restore.shares_recover_failed": [
|
||||
"A megosztások helyreállítása sikertelen: "
|
||||
],
|
||||
"note.restore.unit_failed": [
|
||||
"Visszaállítás sikertelen: "
|
||||
],
|
||||
"note.restore.file_failed": [
|
||||
"Fájl-visszaállítás sikertelen: "
|
||||
],
|
||||
"note.restore.full_unit_failed": [
|
||||
"Teljes visszaállítás sikertelen: "
|
||||
],
|
||||
"note.restore.recovered_files": [
|
||||
"A(z) ",
|
||||
" hiányzó fájljai helyreállítva az élő adatok közé."
|
||||
],
|
||||
"note.restore.shares_prepared": "A megosztások visszaállítása elkészült — most helyreállíthatod az élő adatok közé.",
|
||||
"note.restore.at_scratch": " ellenőrző mappába",
|
||||
"note.restore.at_scratch_named": [
|
||||
" ellenőrző mappába: "
|
||||
],
|
||||
"note.restore.scratch_full": [
|
||||
"A(z) ",
|
||||
" teljes mentése visszaállítva",
|
||||
" — a saját fájljaiddal együtt. A meglévő adatok változatlanok."
|
||||
],
|
||||
"note.restore.scratch_state": [
|
||||
"A(z) ",
|
||||
" beállításai és adatbázisa visszaállítva",
|
||||
". A saját fájljaid (dokumentumok, képek, feltöltések) NEM kerültek vissza — ez az ellenőrző visszaállítás csak az alkalmazás beállításait és adatbázisát hozza vissza. ",
|
||||
"Ha a fájljaidra van szükséged, indítsd el a „Teljes visszaállítás előkészítése” lépést ezen az oldalon. A meglévő adatok változatlanok."
|
||||
],
|
||||
"note.restore.files_count": "%d fájl",
|
||||
"note.restore.and_volumes": " és %d adatkötet",
|
||||
"note.restore.and_database": " és az adatbázis",
|
||||
"note.restore.volumes_count": "%d adatkötet",
|
||||
"note.restore.the_database": "az adatbázis",
|
||||
"note.restore.dumps_at": [
|
||||
" (mentés: ",
|
||||
")"
|
||||
],
|
||||
"note.restore.reconstituted": "A(z) %s: %s visszaállítva%s — az alkalmazás újraindult.",
|
||||
"note.restore.no_db_in_backup": " FIGYELEM: ennek az alkalmazásnak VAN adatbázisa, de a mentés nem tartalmazott adatbázis-mentést, ezért az adatbázis NEM állt vissza. A visszaállítás előtti állapot mentése megvan: %s",
|
||||
"note.restore.no_db_at_all": " Ennek az alkalmazásnak nincs adatbázisa.",
|
||||
"note.restore.all_files_present": "Minden vizsgált fájl megvan a helyén.",
|
||||
"note.restore.files_from_second": "%s: %d fájl visszaállítva a másodlagos másolatból.",
|
||||
"note.restore.scratch_incomplete": "A visszaállítási másolat nem teljes — a legutóbbi letöltés nem fejeződött be. Indítsd újra a teljes visszaállítás előkészítését.",
|
||||
"note.unit_restore_data": "A(z) %s: %s visszaállítva — az alkalmazás újraindult.",
|
||||
"note.unit_restore_settings_only": "A(z) %s: a beállítások visszaálltak — az alkalmazás újraindult. FIGYELEM: ez a mentés csak a beállításokat tartalmazta, adatot nem. Az alkalmazás adatai NEM álltak vissza ebből a mentésből.",
|
||||
"note.unit_restore_counts_unknown": "A(z) %s visszaállítása lefutott — az alkalmazás újraindult. Ehhez a mentéshez nem tartozik mentési egység, ezért nem tudjuk megmondani, mi állt vissza belőle. Ellenőrizd az alkalmazásban, hogy megvannak-e az adataid.",
|
||||
"note.unit_restore_none_returned": "A(z) %s: FIGYELEM — a mentés %d adatkötetet és %d adatbázis-mentést sorol fel, de egyik sem állt vissza. Az adataid változatlanok maradtak. Kérj segítséget, mielőtt újra próbálod.",
|
||||
"note.tier2_no_coverage": "Ennek az alkalmazásnak az adatai nem ebből a másolatból állíthatók vissza — az alkalmazás nem állt le. Használd a Visszaállítás indítása gombot a Biztonsági mentés → Visszaállítás oldalon.",
|
||||
"note.tier2_unit_available": "Ennek az alkalmazásnak az adatai nem fájlokban, hanem az alkalmazás saját adatbázisában és köteteiben vannak — az alkalmazás nem állt le. Ezeket a mellette lévő „Teljes visszaállítás a másolatból” gombbal tudod visszahozni ugyanerről a másolatról. Figyelem: az a művelet FELÜLÍRJA a jelenlegi adatokat, míg ez a gomb csak a hiányzó fájlokat pótolja.",
|
||||
"note.tier2_unit_not_covered": "Az alkalmazás adatbázisa és belső kötetei nem tartoznak ebbe a visszaállításba.",
|
||||
"note.tier2_unit_restore_source": "A visszaállítás forrása a második meghajtón lévő másolat volt (%s).",
|
||||
"note.tier2_unit_restore_source_unproven": "A visszaállítás forrása a második meghajtón lévő másolat volt (%s — ez az utolsó mentési kísérlet ideje; azt nem tudjuk igazolni, hogy az sikeres volt).",
|
||||
"note.tier2_unit_action_label": "Teljes visszaállítás a másolatból",
|
||||
"note.tier2_unit_confirm_base": "Ez a művelet FELÜLÍRJA az alkalmazás jelenlegi adatait – az adatbázisát és a belső köteteit is – a második meghajtón lévő másolattal. Ami a másolat óta keletkezett, elveszik.",
|
||||
"note.tier2_unit_confirm_date_fmt": " A másolat kelte: %s.",
|
||||
"note.tier2_unit_confirm_date_unproven_fmt": " A másolat kelte: %s – ez az utolsó mentési kísérlet ideje, azt nem tudjuk igazolni, hogy sikeres volt.",
|
||||
"note.tier2_unit_confirm_contrast": " A mellette lévő „Fájlok visszaállítása” ezzel szemben csak a hiányzó fájlokat pótolja, és semmit nem ír felül. Az alkalmazás a művelet idejére leáll.",
|
||||
"note.tier2_unit_stale_clause": " FIGYELEM: ennek a másolatnak az adatcsomagja régebbi, mint a legutóbbi mentés — a fő meghajtón lévő csomag hiányos volt, ezért a meglévő, teljes másolatot megőriztük. A visszaállítás a fent megadott csomagot használja.",
|
||||
"note.tier2_unit_stale_notice_fmt": "A másolat adatcsomagja régebbi, mint a legutóbbi mentés (%s): a fő meghajtón lévő csomag hiányos volt, ezért a meglévő, teljes másolatot megőriztük."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user