diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fd89fe..1c746e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,30 @@ +## v0.249.0 — English for the backup pages, Hungarian byte-identical (2026-09-17, R-556 release B) + +**MinAgent: 0.131.0** (unchanged). **No hub release needed.** Nothing changes for a Hungarian household. + +- **Converted:** `backups_apps`, `backups_remote`, `backups_restore`, `backups_restore_wizard`, + `backups_escrow`, `tier2_config`, `recovery`, and the restore-progress JS in `backups_shared` + (`restore_banner_js`, which v0.247.0 had left Hungarian). +- **Parity:** 41 fixture states captured from the UNCONVERTED templates (commit `f8ebc47`), plus + `backups_apps_stale_copy` captured from `f8ebc47` for a condition inside a confirm text. +- **`recovery` follows the language** through the new `executeTemplateLang` — the language-aware render + for pages outside the dashboard chrome, WITHOUT `executeTemplate`'s CSRF injection and escrow bar. + Tests: `TestI18nDirectRenderPagesFollowLanguage` (hu = fixture bytes, en = English) and + `TestRecoveryHandlerFollowsLanguage` through `renderRecovery` (red-proofed by restoring `s.tmpl`). +- **Deliberately not converted:** „Fut…" and the JS `indexOf('Fut')` on `backups_remote` — the page + decides its progress poll by reading that word (R-563). Code values (`snapshot_id=helyi`) stay. +- **Retrieval-promise gate, English:** 13 English claims registered with reasons; six mirror Hungarian + registrations. **Seven exposed a Hungarian blind spot**: split verbs („állíthatók vissza", „hozod + vissza") escape the Hungarian stems, so those sentences were never scanned in Hungarian (row filed). +- Extractor review found ASCII-only Hungarian it missed: Konfig, Megtartva, helyi, pl. (×3), Befejezve, + automatikus, (jelenleg:), kedd/szerda/szombat, „1. szint"/„2. szint", and a confirm text split by + `{{if .Tier2StaleCopy}}`; converted by hand, words added to its list. +- Title keys for the backup sub-pages and the escrow page. `HU_FORMAL_CEILING` 10 → 12 (R-516). + +**Red-proofs** (`felhom.eu/documentation/audits/i18n-slice1-2026-09-17/B/redproofs.txt`): parity (one byte of +`backups_escrow.kod_letrehozasa` → both escrow cases name the line); recovery routing (render back on +`s.tmpl` → English lost, test fails). + ## v0.248.0 — English for apps and settings: ten more pages, Hungarian byte-identical (2026-09-17, R-556 release A) **MinAgent: 0.131.0** (unchanged). **No hub release needed.** Nothing changes for a Hungarian household: diff --git a/CONTEXT.md b/CONTEXT.md index 446a889..39fefa5 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -9,6 +9,12 @@ Last updated: 2026-09-17 (v0.247.0 — i18n spike: the dashboard can speak English, Hungarian byte-identical) +> **2026-09-17 evening — v0.248.0 + v0.249.0 (R-556 releases A, B).** Apps/settings and backup pages +> converted; `TestI18nParityCoversEveryMarker` (every marker rendered by a case); fixtures only written +> when missing (`-update-i18n-golden`, `-i18n-golden-only`); `executeTemplateLang` for pages outside the +> dashboard chrome (recovery now). Words a page COMPARES stay unconverted (R-563). Split Hungarian verbs +> escape the retrieval gate's Hungarian stems (R-564). + > **2026-09-17 — v0.247.0 (localisation starter; design `felhom.eu/documentation/architecture/10-localisation.md`).** > Message bundles `internal/i18n/locales/{hu,en}.json`; templates carry `{{T "key"}}`, EXPANDED > before parsing — one template set per language (`loadTemplates` / `parseTemplateSet`); `s.tmpl` is diff --git a/controller/internal/i18n/i18n_test.go b/controller/internal/i18n/i18n_test.go index 6e3a5d6..88e0929 100644 --- a/controller/internal/i18n/i18n_test.go +++ b/controller/internal/i18n/i18n_test.go @@ -111,6 +111,7 @@ func TestEmbeddedBundles(t *testing.T) { } var fieldRefRe = regexp.MustCompile(`\.[A-Z][A-Za-z0-9_]*(\.[A-Z][A-Za-z0-9_]*)*`) + // verbRe counts printf verbs OUTSIDE template actions ({{printf "%.0f" .X}} is a parameter, not a verb // of the message), and without the space flag — „50% szabad" is prose, not „% s". var verbRe = regexp.MustCompile(`%[-+#0-9.]*[sdvq]`) diff --git a/controller/internal/i18n/locales/en.json b/controller/internal/i18n/locales/en.json index 62f9e89..f1ba46f 100644 --- a/controller/internal/i18n/locales/en.json +++ b/controller/internal/i18n/locales/en.json @@ -701,5 +701,398 @@ "func.infra.traefik.description": "Traffic router (reverse proxy) — sends each request to the right app.", "func.infra.filebrowser.description": "File manager — browse the storage files from your browser.", "func.infra.samba.display": "Network sharing", - "func.infra.samba.description": "File sharing on the local network — the folders appear in Windows Explorer and the Mac Finder." + "func.infra.samba.description": "File sharing on the local network — the folders appear in Windows Explorer and the Mac Finder.", + "backups_apps.biztonsagi_mentes_alkalmazasok": "Backup — Apps", + "backups_apps.alkalmazas_mentesek_adatbazis_konfigurac": "App backups (database + configuration)", + "backups_apps.az_egyes_alkalmazasok_reszletes_granulal": "A detailed backup of each app — database dumps, settings and app files. Independent of the full backup above, it can be restored per app.", + "backups_apps.utemezes": "Schedule", + "backups_apps.adatbazis_mentes": "Database backup", + "backups_apps.kovetkezo": "Next: {{nextRunLabel .Backup.NextDBDump}}", + "backups_apps.utolso_adatbazis_mentes": "Last database backup:", + "backups_apps.meg_nem_futott": "Not run yet", + "backups_apps.mentes_folyamatban": "Backup in progress...", + "backups_apps.mentes_most": "Back up now", + "backups_apps.adatbazisok": "Databases", + "backups_apps.alkalmazas": "App", + "backups_apps.tipus": "Type", + "backups_apps.meret": "Size", + "backups_apps.utolso": "Last", + "backups_apps.ervenyesites": "Validation", + "backups_apps.allapot": "Status", + "backups_apps.tabla": "{{.Validation.TableCount}} tables", + "backups_apps.hiba": "Error", + "backups_apps.az_ervenyesites_nem_futott_le": "Validation did not run", + "backups_apps.meg_nem_keszult_adatbazis_mentes": "No database backup yet — the first scheduled backup runs tonight.", + "backups_apps.a_telepitett_alkalmazasok_beagyazott_ada": "The installed apps use an embedded database (for example SQLite) — their database is part of the file and volume backup, so no separate database dump is needed.", + "backups_apps.alkalmazasok_mentesi_allapota": "Backup status of the apps", + "backups_apps.felhasznaloi_adatokrol_nincs_biztonsagi": "Your data has no backup.
\n The photos, documents and other files stored on the server exist in one copy only.\n Connect an external drive to make a backup copy by the 3-2-1 rule.\n Set up a drive →", + "backups_apps.eltavolitva_visszaallithato": "Removed — restorable", + "backups_apps.meghajto_levalasztva": "Drive disconnected", + "backups_apps.adatok": "+ Data", + "backups_apps.mentes": "Backup", + "backups_apps.az_alkalmazast_eltavolitottad_a_mentese": "You removed the app; its backup was kept. Last backup: {{fmtTimeStr .RemovedUnitTime}}.", + "backups_apps.ujratelepiti_a_z_alkalmazast_a": "Reinstall {{.DisplayName}} from the kept backup ({{fmtTimeStr .RemovedUnitTime}})? The data comes back from the backup.", + "backups_apps.visszaallitas_a_mentesbol": "Restore from the backup", + "backups_apps.1_mentes": "Backup 1", + "backups_apps.utolso_2": "Last: {{timeAgoStr .Tier1LastRun}}", + "backups_apps.errol_a_mentesrol_nincs_eredmenyunk": "We have no result for this backup.", + "backups_apps.db_dump_hiba": "Database dump error", + "backups_apps.2_mentes": "Backup 2", + "backups_apps.2_mentes_kikapcsolva": "Backup 2 turned off", + "backups_apps.beallitas": "Settings", + "backups_apps.cel_meghajto_levalasztva": "Target drive disconnected", + "backups_apps.utolso_3": "Last: {{timeAgoStr .Tier2LastRun}}", + "backups_apps.utolso_sikeres": "Last successful: {{timeAgoStr .Tier2LastSuccess}}", + "backups_apps.meg_nincs_sikeres_masolat": "No successful copy yet", + "backups_apps.cel_meghajto_inaktiv": "Target drive inactive", + "backups_apps.a_mentes_bongeszheto_fajlrendszerben": "The backup is a browsable file system", + "backups_apps.visszaallitja_a_hianyzo_fajlokat_a": "Restore the missing files from the secondary copy? Existing files are NOT changed and NOT deleted. The app stops during the operation. Last copy: {{fmtTimeStr .Tier2LastRun}}", + "backups_apps.fajlok_visszaallitasa": "Restore files", + "backups_apps.meg_nincs_sikeres_masolat_amibol": "There is no successful copy yet to restore from.", + "backups_apps.teljes_visszaallitas_a_masolatbol": "Full restore from the copy", + "backups_apps.1_mentes_auto": "Backup 1 auto", + "backups_apps.nincs_2_off_drive_masolat": "No 2nd (off-drive) copy", + "backups_apps.a_2_mentes_automatikus_kulon": "Backup 2 is automatic — no separate setting needed", + "backups_apps.3_mentes": "Backup 3", + "backups_apps.sikeres": "Succeeded", + "backups_apps.fut": "Running...", + "backups_apps.utolso_4": "Last: {{timeAgoStr $.Offbox.LastRun}}", + "backups_apps.helyreallitasi_egyseg_titkositva": "Recovery unit, encrypted", + "backups_apps.kulcsletetre_var": "Waiting for the recovery code", + "backups_apps.a_tavoli_mentes_a_titkositasi": "Remote backup is paused until the encryption key is placed in escrow", + "backups_apps.kikapcsolva": "Turned off", + "backups_apps.ez_az_alkalmazas_nincs_kijelolve": "This app is not selected for remote backup", + "backups_apps.bekapcsolas": "Turn on", + "backups_apps.nincs_beallitva": "Not set up", + "backups_apps.tavoli_offsite": "remote (offsite)", + "backups_apps.nincs_tavoli_mentesi_cel_beallitva": "No remote backup target set up", + "backups_apps.mentes_inditasa": "Starting backup...", + "backups_remote.biztonsagi_mentes_tavoli_mentes": "Backup — Remote backup", + "backups_remote.a_korabbi_hazon_kivuli_menteseid": "Your earlier off-site backups can be retrieved.\n This machine was reinstalled, and the Felhom central system keeps a sealed package for it. With your\n recovery code you can unlock your earlier backups and see what is in them.", + "backups_remote.adatok_visszaszerzese": "Retrieve data", + "backups_remote.felhom_offsite_tarhely_kiepitve_a": "Felhom offsite storage is set up — the configuration is automatic and in progress. If it is not ready within a day, tell the operator.", + "backups_remote.felhom_offsite_tarhely_igenyelheto_szolg": "Felhom offsite storage — a service you can order. An encrypted, off-site copy of your backups. Ask the operator.", + "backups_remote.aktiv_nincs_kijelolt_alkalmazas": "Active — no app selected", + "backups_remote.tavoli_mentes_3_mentes_titkositott": "Remote backup (backup 3) — encrypted, offsite", + "backups_remote.az_alkalmazas_mentesek_titkositott_masol": "An encrypted copy of the app backups on a remote store — your own NAS or Felhom offsite storage — over restic + SFTP. The store sees only encrypted data. This is the „1 off-site\" leg of the 3-2-1 rule — independent of the local second copy and the full system backup.", + "backups_remote.rendben": "✓ OK", + "backups_remote.hianyos": "! Incomplete", + "backups_remote.hiba": "✗ Error", + "backups_remote.utolso_tavoli_mentes": "Last remote backup", + "backups_remote.tarolo_meret": "Store size ·", + "backups_remote.pillanatkep": "{{.Offbox.SnapshotCount}} snapshots", + "backups_remote.a_pillanatkepek_szama_meg_ismeretlen": "number of snapshots not known yet", + "backups_remote.kikapcsolva": "Turned off", + "backups_remote.a_tavoli_mentes_ki_van": "Remote backup is turned off", + "backups_remote.tarhelykeret": "Storage quota:", + "backups_remote.meg_nem_tudjuk_mennyi_van": "we do not know yet how much is in the store — at most {{.Offbox.QuotaGB}} GB", + "backups_remote.a_korabbi_menteseid_felre_vannak": "Your earlier backups are set aside — we did not delete them.", + "backups_remote.amikor_uj_mentesi_kulcsot_kapott": "When your machine got a new backup key, we moved the older history\n on the remote storage, and it stayed there. It cannot be opened from here for now, and\n that does not depend on your code. If you need it, contact Felhom support.", + "backups_remote.utolso_hiba": "Last error: {{.Offbox.LastError}}", + "backups_remote.a_tavoli_tarolo_masik_kulccsal": "The remote store holds backups made with a different key", + "backups_remote.a_tavoli_tarhelyen_levo_mentesek": "The backups on the remote storage were made with an earlier key that is no longer available (usually after a reinstall). Because of that, no new backup can be written to the store right now. The existing backups are not damaged. This machine cannot tell whether they can be opened later — that depends on whether their key still exists. If you need them, write to us.", + "backups_remote.uj_tavoli_mentes_inditasa": "Start a new remote backup…", + "backups_remote.a_regi_elozmeny_felreteve_marad": "The old history stays set aside on the storage — we do not delete it. We create a new, empty store, and the next backup goes there.", + "backups_remote.a_felretett_mentesek_megnyithatosagat_it": "We cannot promise here that the set-aside backups can be opened. That depends on whether their key still exists, and this machine cannot tell. If you want us to look into it, write to us — the set-aside copy stays where it is in the meantime.", + "backups_remote.megerosites_uj_tavoli_mentes_inditasa": "Confirm — start a new remote backup", + "backups_remote.helyreallitasi_kod_letrehozva": "Recovery code created", + "backups_remote.a_helyreallitasi_csomag_elkuldve_a": "The recovery package was sent to the central system and is waiting for confirmation — usually a few seconds, at most 15 minutes.", + "backups_remote.a_megerosites_nem_erkezett_meg": "The confirmation did not arrive in the expected time. Check the internet connection, then make a new recovery code.", + "backups_remote.uj_helyreallitasi_kod_keszitese": "Make a new recovery code", + "backups_remote.a_funkciohoz_az_ugynok_frissitese": "This needs an agent update — the update arrives automatically.", + "backups_remote.helyreallitasi_kod_szukseges": "Recovery code needed", + "backups_remote.a_tavoli_mentesek_csak_akkor": "Remote backups can be restored after a complete failure only if you create the recovery code.", + "backups_remote.ehhez_a_gephez_egy_korabbi": "This machine has an earlier recovery code, and your earlier backups still exist.\n Creating a new code would make your old backups unreachable, so it cannot start now.\n First enter your existing code — or tell us there if you do not want the earlier data back.", + "backups_remote.helyreallitasi_kod_letrehozasa": "Create recovery code", + "backups_remote.a_letetben_levo_helyreallitasi_csomag": "The recovery package in escrow does not cover the current remote backup password. Create a new recovery code.", + "backups_remote.a_helyreallitasi_kod_letetbe_helyezve": "The recovery code is in escrow.", + "backups_remote.a_korabbi_mentesek_torlese_folyamatban": "Deleting the earlier backups is in progress", + "backups_remote.a_keresed_szerint_a_korabbi": "As you asked, we will permanently delete your earlier remote backups on {{.AbandonDate}}\n ({{.AbandonDaysLeft}} {{if eq .AbandonDaysLeft 1}}day{{else}}days{{end}} left).", + "backups_remote.addig_meggondolhatod_magad_ha_megvan": "Until then you can change your mind: if you have your recovery code,\n your backups can be retrieved, and the deletion is cancelled.", + "backups_remote.hogy_ezek_meg_visszaszerezhetok_e": "We cannot tell from here whether your recovery code can still get them back — if you want them, write to us before the deletion.", + "backups_remote.megis_visszaszerzem_a_koddal": "Retrieve them with the code after all", + "backups_remote.a_korabbi_tavoli_menteseid_torlese": "Your earlier remote backups have been deleted. Removing their sealed recovery package is still in progress.", + "backups_remote.tavoli_mentes_most": "Remote backup now", + "backups_remote.mely_alkalmazasok_mentodnek_a_tavoli": "Which apps are backed up to the remote store?", + "backups_remote.nincs_tavoli_mentesre_jelolt_alkalmazas": "No app is selected for remote backup — select at least one.", + "backups_remote.tavoli_mentes_kikapcsolasa": "Turn off remote backup", + "backups_remote.tavoli_mentes_bekapcsolasa": "Turn on remote backup", + "backups_remote.a_teljes_mentes_tullepne_a": "The full backup would go over the storage quota — only the configuration and the database are backed up.", + "backups_remote.nincs_telepitett_alkalmazas": "No app installed.", + "backups_remote.meg_nincs_beallitva_tavoli_mentesi": "No remote backup target set up yet.", + "backups_remote.tavoli_mentesi_cel_beallitasa": "Set up a remote backup target", + "backups_remote.cel_cime_ip_vagy_hosztnev": "Target address (IP or hostname — NAS or SFTP server)", + "backups_remote.felhasznalo": "User", + "backups_remote.tarolo_utvonala_a_celgepen": "Store path on the target", + "backups_remote.napi_automatikus_tavoli_mentes_engedelye": "Daily automatic remote backup allowed", + "backups_remote.ssh_privat_kulcs": "SSH private key", + "backups_remote.uresen_hagyva_valtozatlan": "(left empty: unchanged)", + "backups_remote.a_kulcsot_0600_as_fajlba": "We write the key to a 0600 file; we never log it and never keep it in the settings.", + "backups_remote.a_celgep_ismert_host_sora": "The target’s known host line (known_hosts)", + "backups_remote.a_host_kulcs_rogzitese_no": "Pins the host key (no blind TOFU). To look it up:", + "backups_remote.mentes": "Save", + "backups_remote.adatbazisok_mentese_a_pillanatkephez": "Backing up databases for the snapshot…", + "backups_remote.karbantartas_regi_mentesek_rendezese_a": "Maintenance: tidying old backups on the remote store…", + "backups_remote.megosztott_mappak_mentese": "Backing up shared folders…", + "backups_remote.mentes_2": "Backup:", + "backups_remote.mentes_folyamatban": "Backup in progress", + "backups_remote.fajl": "files", + "backups_remote.feldolgozas_alatt": "· now processing:", + "backups_remote.a_mentendo_adatok_felmerese": "— surveying the data to back up…", + "backups_restore.biztonsagi_mentes_visszaallitas": "Backup — Restore", + "backups_restore.megszakadt_visszaallitas": "Interrupted restore", + "backups_restore.a_doboz_ujraindult_mikozben_a": "The box restarted while the restore was running, so we do not know whether it finished. Start it again below, from the same backup.", + "backups_restore.visszaallitas": "Restore", + "backups_restore.alkalmazas": "App:", + "backups_restore.valasszon": "— Choose —", + "backups_restore.eltavolitott_alkalmazasok_mentes_megtart": "Removed apps (backup kept)", + "backups_restore.eltavolitva": "{{.DisplayName}} — removed", + "backups_restore.pillanatkep": "Snapshot:", + "backups_restore.valasszon_alkalmazast": "— Choose an app —", + "backups_restore.meg_nincs_mentes_felhasznaloi_adattal": "No backup with your data yet.", + "backups_restore.a_visszaallitas_felulirja_az_alkalmazas": "The restore overwrites the app’s current data with the state of the chosen backup.\n The app stops and restarts automatically during the process.", + "backups_restore.megertettem_visszaallitas_inditasa": "I understand, start the restore.", + "backups_restore.visszaallitas_inditasa": "Start restore", + "backups_restore.importalas_mentett_csomagbol_fab": "Import from a saved package (.fab)", + "backups_restore.visszaallitas_a_tavoli_tarolobol": "Restore from the remote store", + "backups_restore.valaszd_ki_az_alkalmazast_es": "Choose the app, and on the next page decide what you want: a check into a separate folder, bringing back only the missing files, or a full restore. None of them starts without asking.", + "backups_restore.elobb_csatold_vissza_az_adatmeghajtot": "First attach the data drive again. Your backups exist, and so do the drives\n — but after a reinstall the machine does not know them yet, so right now there is nowhere\n to restore to.", + "backups_restore.ez_ket_kattintas_tarhely_meghajtok": "It takes two clicks: Storage →\n Drives, „Attach an existing drive\". Then come back here.", + "backups_restore.csatolhato_meghajtot_viszont_most_nem": "But we see no drive that can be attached on this machine right now, so you cannot start this from\n here. If the drive is plugged in but not connected, the operator can\n connect it — tell them. On the Storage →\n Drives page you see what the machine knows now.", + "backups_restore.nem_tudjuk_elolvasni_a_tavoli": "We cannot read the remote store, so we do not know what is in it. That does not mean it is empty — try again later, or tell the operator.", + "backups_restore.a_tavoli_tarolo_kapcsolodasi_adatai": "The remote store’s connection details have not reached this machine yet, so we cannot show what is in it yet. This sorts itself out.", + "backups_restore.nincs_telepitve_elobb_telepitsd_ujra": "Not installed — first install it again, then you can bring its data back.", + "backups_restore.nem_tudjuk_van_e_mentese": "We do not know whether it has a backup — the store could not be read.", + "backups_restore.visszaallitas_2": "Restore…", + "backups_restore.nincs_mentese_a_tavoli_taroloban": "It has no backup in the remote store — nothing to restore.", + "backups_restore.a_tavoli_tarolo_ures_nincs": "The remote store is empty — nothing to restore.", + "backups_restore.megosztasok_visszaallitasa": "Restore shares", + "backups_restore.helyreallitas_az_elo_adatok_koze": "Put back into the live data (missing files only)", + "backups_restore.a_meglevo_fajlokat_nem_irja": "Existing files are not overwritten. Share settings that already exist stay unchanged.", + "backups_restore.meglevo_ellenorzo_masolatok": "Existing check copies", + "backups_restore.ezek_a_visszaallitott_masolatok_helyet": "These restored copies take space on the drive. They do not touch your real data, and you can delete them any time.", + "backups_restore.masolat_torlese": "Delete copy", + "backups_restore.nincs_ellenorzo_masolat_a_meghajton": "No check copy on the drive.", + "backups_restore.hordozhato_mentescsomag_fab": "Portable backup package (.fab)", + "backups_restore.hordozhato_pillanatfelvetel_barhol_tarol": "A portable snapshot — keep it anywhere, and load it back from a drive any time. Continuous protection comes from backup levels 1–3.", + "backups_restore.jelszavas_titkositas_opcionalis": "Password encryption (optional)", + "backups_restore.opcionalis_jelszo": "Optional password", + "backups_restore.uresen_hagyva_a_csomag_titkositas": "Left empty, the package is made without encryption.", + "backups_restore.letoltes_fab": "Download (.fab)", + "backups_restore.osszes_letoltese_egyenkent": "Download all (one by one)", + "backups_restore.a_csomagok_egyenkent_keszulnek_es": "The packages are made and downloaded one by one — a snapshot of the current state.", + "backups_restore.nincs_telepitett_alkalmazas": "No app installed.", + "backups_restore.hiba": "Error:", + "backups_restore.a_becsles_sikertelen": "the estimate failed", + "backups_restore.a_csomag_becsult_merete": "Estimated package size:", + "backups_restore.elinditod_a_letoltest_pillanatfelvetel_a": ". Start the download? (A snapshot of the current state.)", + "backups_restore.hiba_a_becsles_nem_erheto": "Error: the estimate is not available.", + "backups_restore.biztosan_torlod_ezt_az_ellenorzo": "Delete this check copy?", + "backups_restore.a_tenyleges_adataid_valtozatlanok_maradn": "— your real data stays unchanged.", + "backups_restore.utolso_megerosites_a_masolat_veglegesen": "LAST CONFIRMATION: the copy is deleted for good.", + "backups_restore.hiba_2": "Error (", + "backups_restore.az_export_nem_indult_el": "the export did not start", + "backups_restore.csomag_keszitese": "Making package:", + "backups_restore.hiba_az_export_nem_indult": "Error: the export did not start.", + "backups_restore.hiba_a_csomag_utvonala_hianyzik": "Error: the package path is missing.", + "backups_restore.letoltes": "Download:", + "backups_restore.minden_csomag_elkeszult": "All packages are done.", + "backups_restore.vasarnap": "Sunday", + "backups_restore.hetfo": "Monday", + "backups_restore.csutortok": "Thursday", + "backups_restore.pentek": "Friday", + "backups_restore.teljes_visszaallitas_adatbazis_konfigura": "Full restore: database + configuration + your data from the chosen snapshot.", + "backups_restore.adatbazis_es_konfiguracio_visszaallitasa": "Restore database and configuration — the app has no separate data of yours.", + "backups_restore.csak_konfiguracio_visszaallitasa_compose": "Restore configuration only (compose files, settings).", + "backups_restore.betoltes": "— Loading... —", + "backups_restore.1_szint_helyi_mentes_ajanlott": "Level 1 — Local backup (recommended)", + "backups_restore.2_szint_masodlagos_masolat": "Level 2 — Secondary copy", + "backups_restore.nincs_elerheto_mentes": "— No backup available —", + "backups_restore.visszaallitas_folyamatban": "Restore in progress...", + "backups_restore_wizard.vissza": "← Back", + "backups_restore_wizard.visszaallitas": "Restore — {{.AppDisplayName}}", + "backups_restore_wizard.elokeszites": "Preparation", + "backups_restore_wizard.megerosites": "Confirmation", + "backups_restore_wizard.vegrehajtas": "Execution", + "backups_restore_wizard.eredmeny": "Result", + "backups_restore_wizard.eszlelve": "Detected", + "backups_restore_wizard.ha_szeretned_alabb_ujra_indithatsz": ": {{fmtTime .FinishedAt}}. If you want, you can start a restore again below.", + "backups_restore_wizard.jelenleg_egy_mentesi_vagy_visszaallitasi": "A backup or restore operation is running right now", + "backups_restore_wizard.amig_ez_tart_uj_visszaallitas": ". While it runs, a new restore cannot start.", + "backups_restore_wizard.az_allapot_fent_automatikusan_frissul": "The status above updates by itself, and the result of the operation appears there as soon as it is done.", + "backups_restore_wizard.allapot_frissitese": "Refresh status", + "backups_restore_wizard.megerosites_teljes_visszaallitas_elokesz": "Confirm — prepare the full restore", + "backups_restore_wizard.a_teljes_visszaallitashoz_a_mentes": "A full restore needs the whole backup content downloaded from the remote store", + "backups_restore_wizard.a_becsult_meret": "— the estimated size: {{.}}", + "backups_restore_wizard.a_letoltes_a_meghajton_egy": ". The download goes into a separate preparation folder on the drive; your live data does not change in this step.", + "backups_restore_wizard.a_letoltes_a_merettol_es": "The download can take a while, depending on the size and the connection speed. When it is done, you choose on this page whether to bring back only the missing files, or to do a full restore.", + "backups_restore_wizard.elokeszites_inditasa": "Start preparation", + "backups_restore_wizard.megsem": "Cancel", + "backups_restore_wizard.1_ellenorzes_kulon_mappaba_beallitasok": "1. Check into a separate folder (settings and database)", + "backups_restore_wizard.az_alkalmazas_beallitasait_es_adatbazisa": "Brings the app’s settings and database back into a separate check folder. It does not bring back your own files (documents, pictures, uploads) — for those you need the full restore in step 3. Your live data does not change.", + "backups_restore_wizard.ellenorzes_inditasa": "Start check", + "backups_restore_wizard.2_hianyzo_fajlok_visszahozasa": "2. Bring back missing files", + "backups_restore_wizard.csak_a_hianyzo_fajlokat_masolja": "Copies back only the missing files among the existing ones. It does not overwrite existing files and does not restore the database — deleted content does not come back this way.", + "backups_restore_wizard.hianyzo_fajlok_visszahozasa": "Bring back missing files", + "backups_restore_wizard.ehhez_elobb_elo_kell_kesziteni": "For this, first prepare the full backup — see step 3.", + "backups_restore_wizard.3_teljes_visszaallitas_fajlok_adatbazis": "3. Full restore (files + database)", + "backups_restore_wizard.a_fajlokat_a_mentes_szerinti": "Sets the files back to the backup’s version and loads the database back too. It deletes nothing: files created since the backup stay. A backup of the current database is made first.", + "backups_restore_wizard.az_elokeszitett_mentes": "The prepared backup:", + "backups_restore_wizard.adatbazis_mentes_ideje": "database backup time: {{fmtTime .Pair.DumpsAt}}.", + "backups_restore_wizard.az_adatbazis_mentes_ideje_nem": "the database backup time cannot be determined.", + "backups_restore_wizard.az_adatbazis_mentes_regebbi": "The database backup is older", + "backups_restore_wizard.a_fajlok_es_az_adatbazis": "— the files and the database come from different times.", + "backups_restore_wizard.a_mentett_adatbazis_uresnek_tunik": "The saved database looks empty (no user account in it) — the backup may be older than your data.", + "backups_restore_wizard.teljes_visszaallitas_inditasa": "Start full restore", + "backups_restore_wizard.a_teljes_visszaallitashoz_eloszor_le": "A full restore first needs the whole backup content downloaded. The preparation shows the size before anything starts — your live data does not change during the preparation.", + "backups_restore_wizard.teljes_visszaallitas_elokeszitese": "Prepare full restore", + "backups_restore_wizard.teljes_visszaallitas": "Full restore:", + "backups_restore_wizard.a_mentes_ideje": "— backup time:", + "backups_restore_wizard.figyelem_a_fajlok_es_az": "WARNING: the files and the database come from different times.", + "backups_restore_wizard.figyelem_a_mentett_adatbazis_uresnek": "WARNING: the saved database looks empty.", + "backups_restore_wizard.a_fajlok_a_mentes_szerinti": "The files go back to the backup’s version; nothing is deleted.", + "backups_restore_wizard.utolso_megerosites_az_alkalmazas_leall": "LAST CONFIRMATION: the app stops, the database is loaded back, then the app restarts. A backup of the current database is made.", + "backups_escrow.vissza": "← Back", + "backups_escrow.helyreallitasi_kod": "Recovery code", + "backups_escrow.ehhez_nem_kell_semmit_tenned": "You do not need to do anything for this. If you still see this in half an hour, tell the operator.", + "backups_escrow.a_funkciohoz_az_ugynok_frissitese": "This needs an agent update — the update arrives automatically. Try again later.", + "backups_escrow.1_elofeltetelek_ellenorzese": "1. Checking the requirements", + "backups_escrow.ellenorzes_folyamatban": "Checking…", + "backups_escrow.2_fontos_tudnivalok": "2. Important to know", + "backups_escrow.a_helyreallitasi_kod_a_mentesei": "The recovery code is the last key to your backups. It appears exactly once — the system\n stores it nowhere, and Felhom does not know it either. If the server is destroyed, the remote backups can be restored ONLY\n with this code. Write it on paper or keep it in a password manager — but do NOT keep it on this\n server.", + "backups_escrow.az_uj_kod_letrehozasaval_a": "When you create a new code, the earlier code stops working for future backups; for the existing\n backup history it stays valid.", + "backups_escrow.3_megerosites": "3. Confirmation", + "backups_escrow.a_folytatashoz_adja_meg_a": "Enter your sign-in password to continue", + "backups_escrow.kod_letrehozasa": "Create code", + "backups_escrow.megsem": "Cancel", + "backups_escrow.4_letrehozas": "4. Creation", + "backups_escrow.a_kod_letrehozasa_folyamatban_altalaban": "Creating the code… (usually a few seconds)", + "backups_escrow.5_a_helyreallitasi_kod": "5. The recovery code", + "backups_escrow.a_kod_pontosan_egyszer_jelenitheto": "The code can be shown exactly once. Have paper and a pen ready before you press the button.", + "backups_escrow.kod_megjelenitese": "Show code", + "backups_escrow.ez_mostantol_az_elo_helyreallitasi": "This is now the live recovery code — the earlier code is no longer valid. Save it now: the code cannot be shown again.", + "backups_escrow.elrejtes": "Hide", + "backups_escrow.6_ellenorzes": "6. Check", + "backups_escrow.megerosites_irja_be_a_kod": "Confirm: type the words of the code", + "backups_escrow.a_megadott_szavak_nem_egyeznek": "The words do not match — check the code you wrote down.", + "backups_escrow.szavak_ellenorzese": "Check words", + "backups_escrow.7_befejezes": "7. Finish", + "backups_escrow.mi_tortenik_ezutan_a_helyreallitasi": "What happens next? The recovery code is ready, and the system sends it to the central system for confirmation — usually a few seconds, at most 15 minutes. Until then the Remote backup page shows „waiting for confirmation\"; after the confirmation the first remote backup can start.", + "backups_escrow.felirtam_a_kodot_es_biztonsagos": "I wrote down the code and keep it in a safe place — not on this server.", + "backups_escrow.befejezes": "Finish", + "backups_escrow.a_kod_letrejott_de_nem": "The code was created but not shown — for security it cannot be requested again.\n Start the process again: the new code replaces the old one.", + "backups_escrow.ujrainditas": "Start again", + "backups_escrow.mentesi_tarolo_pbs_beallitva": "Backup store (PBS) set up", + "backups_escrow.helyreallitasi_dr_szint_aktiv": "Recovery (DR) level active", + "backups_escrow.titkosito_eszkoz_telepitve": "Encryption tool installed", + "backups_escrow.kozponti_feltoltes_beallitva": "Central upload set up", + "backups_escrow.tavoli_mentes_jelszava_elokeszitve": "Remote backup password prepared", + "backups_escrow.rendszerjogosultsag_engedelyezve": "System permission granted", + "backups_escrow.nincs_beallitva_mentesi_tarolo": "no backup store set up", + "backups_escrow.a_titkosito_eszkoz_age_nem": "the encryption tool (age) was not found", + "backups_escrow.a_dr_szint_nincs_alkalmazva": "the DR level is not applied on this machine", + "backups_escrow.a_kozponti_feltoltes_nincs_beallitva": "the central upload is not set up", + "backups_escrow.a_rendszerjogosultsag_hianyzik_az_ugynok": "the system permission is missing — the agent needs an update", + "backups_escrow.nincs_elokeszitett_jelszo_a_varazslo": "no prepared password — the wizard prepares it automatically when it starts, if remote backup is set up", + "backups_escrow.elokeszitve": "prepared", + "backups_escrow.hiba": "Error", + "backups_escrow.a_funkciohoz_az_ugynok_frissitese_2": "This needs an agent update — the update arrives automatically.", + "backups_escrow.a_folyamat_a_piros_feltetelek": "The process cannot start until the red requirements are met.", + "backups_escrow.az_elofeltetelek_ellenorzese_nem_sikerul": "Checking the requirements failed:", + "backups_escrow.a_folyamat_inditasa_nem_sikerult": "Starting the process failed.", + "backups_escrow.hiba_2": "Error:", + "backups_escrow.a_letrehozas_nem_sikerult": "Creating the code failed.", + "backups_escrow.reszletek": "Details:", + "backups_escrow.a_kod_lekerese_nem_sikerult": "Getting the code failed.", + "backups_escrow.megerosites_irja_be_a_kod_2": "Confirm: type word no.", + "backups_escrow.es": " and no.", + "backups_escrow.szavat": " of the code.", + "backups_escrow.megjelenites": "Show", + "tier2_config.2_mentes_beallitasa": "Backup 2 settings — {{.DisplayName}}", + "tier2_config.vissza_a_mentesekhez": "← Back to backups", + "tier2_config.a_2_mentes_egy_masik": "Backup 2 copies the app’s recovery package and data to another physical drive.\n This is the only off-drive protection for your browsable\n files (the full system backup/PBS does not reach them).", + "tier2_config.ennek_az_alkalmazasnak_az_adatai": "This app’s data is on the internal system disk, which is\n already part of the full system backup (PBS). The 2nd (off-drive) copy\n is extra, and is made mainly for apps stored on the external data drive — nothing to do for this\n app.", + "tier2_config.jelenlegi_allapot": "Current state", + "tier2_config.2_mentes": "Backup 2", + "tier2_config.kikapcsolva": "Turned off", + "tier2_config.bekapcsolva": "Turned on", + "tier2_config.cel": "Target", + "tier2_config.nincs_elerheto_off_drive_cel": "No off-drive target available", + "tier2_config.megjegyzes": "Note", + "tier2_config.cel_meghajto": "Target drive", + "tier2_config.csak_db_konfiguracio": "— database/configuration only", + "tier2_config.kivalasztas_modja": "Chosen", + "tier2_config.kezi_valasztas": "by hand", + "tier2_config.jelenleg_csak_a_belso_ssd": "Only the internal SSD is available as a 2nd target right now, so only the database and the configuration\n are copied. The internal system disk is small, so an off-drive backup of large files needs a\n 2nd data drive (so the system disk does not fill up).", + "tier2_config.2_mentes_bekapcsolva": "Backup 2 turned on", + "tier2_config.nincs_masik_adatmeghajto_automatikus_cel": "No other data drive — the automatic target is the internal SSD (database/configuration only). Add a 2nd\n data drive to back up all data off-drive too.", + "tier2_config.mentes": "Save", + "recovery.adatok_visszaszerzese_felhom": "Retrieve data — Felhom", + "recovery.a_menteseid": "Your backups", + "recovery.elerhetok": "are available", + "recovery.a_tarolo_megnyilt_de_nincs": "The store opened, but there is not a single backup in it. This means the\n key was right, but this machine has no earlier backup. If backups were surely made\n before, contact Felhom support before you do anything.", + "recovery.a_tarolo_megnyilt_es_van": "The store opened and has content, but we could not match it to apps. You can look at it in detail on the Backup\n page.", + "recovery.ezek_a_te_menteseid_a": "These are your backups, from the times shown below. Check that you really\n find what you expect here — we restored nothing and nothing changed.", + "recovery.alkalmazas": "App", + "recovery.legutobbi_mentes": "Latest backup", + "recovery.meret": "Size", + "recovery.a_visszaallitas_alkalmazasonkent_torteni": "Restoring happens app by app, on the Backup → Restore\n page. There you choose what each app brings back.", + "recovery.tovabb_a_visszaallitashoz": "Continue to restore", + "recovery.vissza_a_kezdolapra": "Back to the home page", + "recovery.adatok": "Retrieve", + "recovery.visszaszerzese": "your data", + "recovery.ezt_a_gepet_ujratelepitettek_a": "This machine was reinstalled. Your earlier off-site backups exist — the\n Felhom central system keeps a sealed package for them", + "recovery.amelyet_zartunk_le": ", which we\n sealed on {{.}}", + "recovery.a_csomagot_csak_a_te": ". The package can be opened only with your recovery\n code.", + "recovery.a_helyreallitasi_kodot_senki_nem": "Nobody can replace the recovery code — not Felhom, not\n support, not the operator. This is on purpose: so nobody but you can open your\n backups. If the code is lost, the earlier backups can no longer be opened.", + "recovery.ha_megadod_a_kodot_feloldjuk": "If you enter the code, we unlock your backups and show you what is in them\n — which app, from when, how large. In this step we restore nothing and\n nothing changes. You choose the restore afterwards, app by app.", + "recovery.helyreallitasi_kod_tiz_szo": "Recovery code (ten words)", + "recovery.tiz_szo_szokozokkel_elvalasztva": "ten words, separated by spaces", + "recovery.mentesek_feloldasa": "Unlock backups", + "recovery.most_nem": "Not now", + "recovery.feloldas_folyamatban": "Unlocking…", + "recovery.a_gep_eppen_ujraindul_ezert": "The machine is restarting right now, so we could not finish the operation.", + "recovery.semmi_nem_valtozott_varj_nehany": "Nothing changed. Wait a few seconds and try again — you will still need your code,", + "recovery.ugyhogy_tartsd_keznel": "so keep it at hand.", + "recovery.a_most_nem_csak_azt": "“Not now” only means we stop bringing it up on the home page. Your backups\n stay, and this page can be reached again any time from the Backup → Remote backup\n page.", + "recovery.biztosan_nem_kered_vissza_a": "Are you sure you do not want the earlier backups back?", + "recovery.ha_megerosited": "If you confirm:", + "recovery.a_korabbi_menteseket_most_felretesszuk": "we set the earlier backups aside now, and delete them for good in {{.AbandonGraceDays}} days — together with the sealed recovery package;", + "recovery.a_nap_alatt_meggondolhatod_magad": "during the {{.AbandonGraceDays}} days you can change your mind: if your recovery code turns up, your backups can be retrieved, and the deletion is cancelled;", + "recovery.a_pontos_datumot_a_tavoli": "you will see the exact date on the Remote backup page the whole time, and we will remind you;", + "recovery.a_gep_uj_ures_mentesi": "the machine starts a new, empty backup store, and backs up there from now on;", + "recovery.a_torles_utan_ez_a": "after the deletion this question does not come back — because nothing is left to retrieve.", + "recovery.ha_csak_most_nincs_keznel": "If you just do not have your code at hand right now, choose “Not now” instead — that starts nothing.", + "recovery.igen_felretehetitek_a_korabbi_menteseket": "Yes, you may set the earlier backups aside", + "recovery.megsem": "Cancel", + "recovery.ha_a_helyreallitasi_kodod_veglegesen": "If your recovery code is lost for good, and you accept that the earlier backups\n can then no longer be opened:", + "recovery.nem_kerem_vissza_a_korabbi": "I do not want the earlier data back.", + "recovery.ez_a_lehetoseg_akkor_valik": "this option becomes available once the machine has reconnected to the off-site\n storage. Until then your backups stay untouched.", + "backups_shared.fajl_visszaallitas": "File restore", + "backups_shared.folyamatban": "in progress", + "backups_shared.kesz": "done.", + "backups_shared.sikertelen": "failed.", + "backups_shared.tavoli_visszaallitas": "Remote restore", + "backups_shared.visszaallitas": "Restore", + "backups_apps.visszaallitja_legutobbi_sikeres_masolat": "Restore the missing files from the secondary copy? Existing files are NOT changed and NOT deleted. The app stops during the operation. Last successful copy: {{fmtTimeStr .Tier2LastSuccess}}.", + "backups_apps.figyelem_legutobbi_kiserlet_nem_sikerult": " Warning: the last backup attempt failed, so the restored files may be older than this.", + "backups_apps.konfig": "Config", + "backups_apps.megtartva": "Kept", + "backups_apps.helyi": "local", + "backups_remote.pl_felhom": "for example felhom", + "backups_remote.pl_repo_path": "for example /volume1/felhom-backup/repo", + "backups_restore_wizard.befejezve": "Finished", + "tier2_config.automatikus_kisbetu": "automatic", + "tier2_config.automatikus": "Automatic", + "tier2_config.jelenleg": "(now: {{.EffectiveLabel}})", + "backups_restore.kedd": "Tuesday", + "backups_restore.szerda": "Wednesday", + "backups_restore.szombat": "Saturday", + "backups_restore.2_szint": "Level 2", + "backups_restore.1_szint": "Level 1", + "page.title.backups_remote": "Backup — Remote backup", + "page.title.backups_apps": "Backup — Apps", + "page.title.backups_restore": "Backup — Restore", + "page.title.escrow": "Recovery code", + "backups_remote.pl_ip": "for example 192.168.0.10" } diff --git a/controller/internal/i18n/locales/hu.json b/controller/internal/i18n/locales/hu.json index b1f0da2..7c8f2a5 100644 --- a/controller/internal/i18n/locales/hu.json +++ b/controller/internal/i18n/locales/hu.json @@ -698,5 +698,398 @@ "func.infra.traefik.description": "Forgalomirányító (reverse proxy) — a kéréseket a megfelelő alkalmazáshoz irányítja.", "func.infra.filebrowser.description": "Fájlkezelő — a tárhely fájljainak böngészése a böngészőből.", "func.infra.samba.display": "Hálózati megosztás", - "func.infra.samba.description": "Fájlmegosztás a helyi hálózaton — a mappák a Windows Intézőben és a Mac Finderben jelennek meg." + "func.infra.samba.description": "Fájlmegosztás a helyi hálózaton — a mappák a Windows Intézőben és a Mac Finderben jelennek meg.", + "backups_apps.biztonsagi_mentes_alkalmazasok": "Biztonsági mentés — Alkalmazások", + "backups_apps.alkalmazas_mentesek_adatbazis_konfigurac": "Alkalmazás-mentések (adatbázis + konfiguráció)", + "backups_apps.az_egyes_alkalmazasok_reszletes_granulal": "Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.", + "backups_apps.utemezes": "Ütemezés", + "backups_apps.adatbazis_mentes": "Adatbázis mentés", + "backups_apps.kovetkezo": "Következő: {{nextRunLabel .Backup.NextDBDump}}", + "backups_apps.utolso_adatbazis_mentes": "Utolsó adatbázis mentés:", + "backups_apps.meg_nem_futott": "Még nem futott", + "backups_apps.mentes_folyamatban": "Mentés folyamatban...", + "backups_apps.mentes_most": "Mentés most", + "backups_apps.adatbazisok": "Adatbázisok", + "backups_apps.alkalmazas": "Alkalmazás", + "backups_apps.tipus": "Típus", + "backups_apps.meret": "Méret", + "backups_apps.utolso": "Utolsó", + "backups_apps.ervenyesites": "Érvényesítés", + "backups_apps.allapot": "Állapot", + "backups_apps.tabla": "{{.Validation.TableCount}} tábla", + "backups_apps.hiba": "Hiba", + "backups_apps.az_ervenyesites_nem_futott_le": "Az érvényesítés nem futott le", + "backups_apps.meg_nem_keszult_adatbazis_mentes": "Még nem készült adatbázis-mentés — az első ütemezett mentés éjjel fut le.", + "backups_apps.a_telepitett_alkalmazasok_beagyazott_ada": "A telepített alkalmazások beágyazott adatbázist használnak (pl. SQLite) — adatbázisuk a fájl- és kötetmentés része, külön adatbázis-kiírás nem szükséges.", + "backups_apps.alkalmazasok_mentesi_allapota": "Alkalmazások mentési állapota", + "backups_apps.felhasznaloi_adatokrol_nincs_biztonsagi": "Felhasználói adatokról nincs biztonsági mentés.
\n A szerveren tárolt fotók, dokumentumok és egyéb fájlok jelenleg csak egy példányban léteznek.\n Külső meghajtó csatlakoztatásával biztonsági másolat készíthető a 3-2-1 szabály szerint.\n Meghajtó beállítása →", + "backups_apps.eltavolitva_visszaallithato": "Eltávolítva — visszaállítható", + "backups_apps.meghajto_levalasztva": "Meghajtó leválasztva", + "backups_apps.adatok": "+ Adatok", + "backups_apps.mentes": "Mentés", + "backups_apps.az_alkalmazast_eltavolitottad_a_mentese": "Az alkalmazást eltávolítottad, a mentése megmaradt. Legutóbbi mentés: {{fmtTimeStr .RemovedUnitTime}}.", + "backups_apps.ujratelepiti_a_z_alkalmazast_a": "Újratelepíti a(z) {{.DisplayName}} alkalmazást a megtartott mentésből ({{fmtTimeStr .RemovedUnitTime}})? Az adatok a mentésből állnak vissza.", + "backups_apps.visszaallitas_a_mentesbol": "Visszaállítás a mentésből", + "backups_apps.1_mentes": "1. mentés", + "backups_apps.utolso_2": "Utolsó: {{timeAgoStr .Tier1LastRun}}", + "backups_apps.errol_a_mentesrol_nincs_eredmenyunk": "Erről a mentésről nincs eredményünk.", + "backups_apps.db_dump_hiba": "DB dump hiba", + "backups_apps.2_mentes": "2. mentés", + "backups_apps.2_mentes_kikapcsolva": "2. mentés kikapcsolva", + "backups_apps.beallitas": "Beállítás", + "backups_apps.cel_meghajto_levalasztva": "Cél meghajtó leválasztva", + "backups_apps.utolso_3": "Utolsó: {{timeAgoStr .Tier2LastRun}}", + "backups_apps.utolso_sikeres": "Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}}", + "backups_apps.meg_nincs_sikeres_masolat": "Még nincs sikeres másolat", + "backups_apps.cel_meghajto_inaktiv": "Cél meghajtó inaktív", + "backups_apps.a_mentes_bongeszheto_fajlrendszerben": "A mentés böngészhető fájlrendszerben", + "backups_apps.visszaallitja_a_hianyzo_fajlokat_a": "Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: {{fmtTimeStr .Tier2LastRun}}", + "backups_apps.fajlok_visszaallitasa": "Fájlok visszaállítása", + "backups_apps.meg_nincs_sikeres_masolat_amibol": "Még nincs sikeres másolat, amiből vissza lehetne állítani.", + "backups_apps.teljes_visszaallitas_a_masolatbol": "Teljes visszaállítás a másolatból", + "backups_apps.1_mentes_auto": "1. mentés auto", + "backups_apps.nincs_2_off_drive_masolat": "Nincs 2. (off-drive) másolat", + "backups_apps.a_2_mentes_automatikus_kulon": "A 2. mentés automatikus — külön beállítás nem kell", + "backups_apps.3_mentes": "3. mentés", + "backups_apps.sikeres": "Sikeres", + "backups_apps.fut": "Fut...", + "backups_apps.utolso_4": "Utolsó: {{timeAgoStr $.Offbox.LastRun}}", + "backups_apps.helyreallitasi_egyseg_titkositva": "Helyreállítási egység, titkosítva", + "backups_apps.kulcsletetre_var": "Kulcsletétre vár", + "backups_apps.a_tavoli_mentes_a_titkositasi": "A távoli mentés a titkosítási kulcs letétbe helyezéséig szünetel", + "backups_apps.kikapcsolva": "Kikapcsolva", + "backups_apps.ez_az_alkalmazas_nincs_kijelolve": "Ez az alkalmazás nincs kijelölve távoli mentésre", + "backups_apps.bekapcsolas": "Bekapcsolás", + "backups_apps.nincs_beallitva": "Nincs beállítva", + "backups_apps.tavoli_offsite": "távoli (offsite)", + "backups_apps.nincs_tavoli_mentesi_cel_beallitva": "Nincs távoli mentési cél beállítva", + "backups_apps.mentes_inditasa": "Mentés indítása...", + "backups_remote.biztonsagi_mentes_tavoli_mentes": "Biztonsági mentés — Távoli mentés", + "backups_remote.a_korabbi_hazon_kivuli_menteseid": "A korábbi, házon kívüli mentéseid visszaszerezhetők.\n Ezt a gépet újratelepítették, és a Felhom központi rendszere őriz hozzá egy lezárt csomagot. A\n helyreállítási kódoddal feloldhatod a korábbi mentéseidet, és megnézheted, mi van bennük.", + "backups_remote.adatok_visszaszerzese": "Adatok visszaszerzése", + "backups_remote.felhom_offsite_tarhely_kiepitve_a": "Felhom offsite tárhely kiépítve — a beállítás automatikus, folyamatban. Ha egy napon belül nem áll be, jelezd az üzemeltetőnek.", + "backups_remote.felhom_offsite_tarhely_igenyelheto_szolg": "Felhom offsite tárhely — igényelhető szolgáltatás. Titkosított, házon kívüli másolat a mentéseidről. Érdeklődj az üzemeltetőnél.", + "backups_remote.aktiv_nincs_kijelolt_alkalmazas": "Aktív — nincs kijelölt alkalmazás", + "backups_remote.tavoli_mentes_3_mentes_titkositott": "Távoli mentés (3. mentés) — titkosított, offsite", + "backups_remote.az_alkalmazas_mentesek_titkositott_masol": "Az alkalmazás-mentések titkosított másolata egy távoli tárolóra — saját NAS vagy Felhom offsite tárhely — restic + SFTP kapcsolaton. A tároló csak titkosított adatot lát. Ez a 3-2-1 szabály „1 off-site\" lába — független a helyi másodpéldánytól és a teljes rendszermentéstől.", + "backups_remote.rendben": "✓ Rendben", + "backups_remote.hianyos": "! Hiányos", + "backups_remote.hiba": "✗ Hiba", + "backups_remote.utolso_tavoli_mentes": "Utolsó távoli mentés", + "backups_remote.tarolo_meret": "Tároló méret ·", + "backups_remote.pillanatkep": "{{.Offbox.SnapshotCount}} pillanatkép", + "backups_remote.a_pillanatkepek_szama_meg_ismeretlen": "a pillanatképek száma még ismeretlen", + "backups_remote.kikapcsolva": "Kikapcsolva", + "backups_remote.a_tavoli_mentes_ki_van": "A távoli mentés ki van kapcsolva", + "backups_remote.tarhelykeret": "Tárhelykeret:", + "backups_remote.meg_nem_tudjuk_mennyi_van": "még nem tudjuk, mennyi van a tárolóban — legfeljebb {{.Offbox.QuotaGB}} GB", + "backups_remote.a_korabbi_menteseid_felre_vannak": "A korábbi mentéseid félre vannak téve — nem töröltük őket.", + "backups_remote.amikor_uj_mentesi_kulcsot_kapott": "Amikor új mentési kulcsot kapott a géped, a régebbi előzményt átmozgattuk\n a távoli tárhelyen, és ott is maradt. Megnyitni innen egyelőre nem lehet, és\n ez nem a kódodon múlik. Ha szükséged van rá, keresd a Felhom ügyfélszolgálatát.", + "backups_remote.utolso_hiba": "Utolsó hiba: {{.Offbox.LastError}}", + "backups_remote.a_tavoli_tarolo_masik_kulccsal": "A távoli tároló másik kulccsal készült mentéseket tartalmaz", + "backups_remote.a_tavoli_tarhelyen_levo_mentesek": "A távoli tárhelyen lévő mentések egy korábbi, már nem elérhető kulccsal készültek (jellemzően újratelepítés után). Emiatt új mentés jelenleg nem írható a tárolóba. A meglévő mentések nem sérültek. Azt viszont ez a gép nem tudja megállapítani, hogy később megnyithatók-e — ez attól függ, megvan-e még a hozzájuk tartozó kulcs. Ha szükséged van rájuk, írj nekünk.", + "backups_remote.uj_tavoli_mentes_inditasa": "Új távoli mentés indítása…", + "backups_remote.a_regi_elozmeny_felreteve_marad": "A régi előzmény félretéve marad a tárhelyen — nem töröljük. Új, üres tárolót hozunk létre, és a következő mentés oda készül.", + "backups_remote.a_felretett_mentesek_megnyithatosagat_it": "A félretett mentések megnyithatóságát itt nem tudjuk megígérni. Ez attól függ, megvan-e még a hozzájuk tartozó kulcs, és ezt ez a gép nem tudja megállapítani. Ha szeretnéd, hogy utánanézzünk, írj nekünk — a félretett másolat addig is a helyén marad.", + "backups_remote.megerosites_uj_tavoli_mentes_inditasa": "Megerősítés — új távoli mentés indítása", + "backups_remote.helyreallitasi_kod_letrehozva": "Helyreállítási kód létrehozva", + "backups_remote.a_helyreallitasi_csomag_elkuldve_a": "A helyreállítási csomag elküldve a központba, megerősítésre vár — ez általában néhány másodperc, legfeljebb 15 perc.", + "backups_remote.a_megerosites_nem_erkezett_meg": "A megerősítés nem érkezett meg a várt időn belül. Ellenőrizze az internetkapcsolatot, majd készítsen új helyreállítási kódot.", + "backups_remote.uj_helyreallitasi_kod_keszitese": "Új helyreállítási kód készítése", + "backups_remote.a_funkciohoz_az_ugynok_frissitese": "A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik.", + "backups_remote.helyreallitasi_kod_szukseges": "Helyreállítási kód szükséges", + "backups_remote.a_tavoli_mentesek_csak_akkor": "A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozza a helyreállítási kódot.", + "backups_remote.ehhez_a_gephez_egy_korabbi": "Ehhez a géphez egy korábbi helyreállítási kód tartozik, és a korábbi mentéseid még megvannak.\n Új kód létrehozása a régi mentéseidet elérhetetlenné tenné, ezért most nem indítható.\n Előbb add meg a meglévő kódodat — vagy ott jelezheted, ha nem kéred vissza a korábbi adatokat.", + "backups_remote.helyreallitasi_kod_letrehozasa": "Helyreállítási kód létrehozása", + "backups_remote.a_letetben_levo_helyreallitasi_csomag": "A letétben lévő helyreállítási csomag nem fedi a jelenlegi távoli mentési jelszót. Hozzon létre új helyreállítási kódot.", + "backups_remote.a_helyreallitasi_kod_letetbe_helyezve": "A helyreállítási kód letétbe helyezve.", + "backups_remote.a_korabbi_mentesek_torlese_folyamatban": "A korábbi mentések törlése folyamatban", + "backups_remote.a_keresed_szerint_a_korabbi": "A kérésed szerint a korábbi távoli mentéseidet {{.AbandonDate}} napján véglegesen töröljük\n (még {{.AbandonDaysLeft}} nap).", + "backups_remote.addig_meggondolhatod_magad_ha_megvan": "Addig meggondolhatod magad: ha megvan a helyreállítási kódod,\n a mentéseid visszaszerezhetők, és a törlés elmarad.", + "backups_remote.hogy_ezek_meg_visszaszerezhetok_e": "Hogy ezek még visszaszerezhetők-e a helyreállítási kóddal, azt innen nem tudjuk megállapítani — ha vissza szeretnéd kapni őket, írj nekünk a törlés előtt.", + "backups_remote.megis_visszaszerzem_a_koddal": "Mégis visszaszerzem a kóddal", + "backups_remote.a_korabbi_tavoli_menteseid_torlese": "A korábbi távoli mentéseid törlése megtörtént. A hozzájuk tartozó lezárt helyreállítási csomag eltávolítása még folyamatban van.", + "backups_remote.tavoli_mentes_most": "Távoli mentés most", + "backups_remote.mely_alkalmazasok_mentodnek_a_tavoli": "Mely alkalmazások mentődnek a távoli tárolóra?", + "backups_remote.nincs_tavoli_mentesre_jelolt_alkalmazas": "Nincs távoli mentésre jelölt alkalmazás — jelölj ki legalább egyet.", + "backups_remote.tavoli_mentes_kikapcsolasa": "Távoli mentés kikapcsolása", + "backups_remote.tavoli_mentes_bekapcsolasa": "Távoli mentés bekapcsolása", + "backups_remote.a_teljes_mentes_tullepne_a": "A teljes mentés túllépné a tárhelykeretet — csak a konfiguráció és az adatbázis kerül mentésre.", + "backups_remote.nincs_telepitett_alkalmazas": "Nincs telepített alkalmazás.", + "backups_remote.meg_nincs_beallitva_tavoli_mentesi": "Még nincs beállítva távoli mentési cél.", + "backups_remote.tavoli_mentesi_cel_beallitasa": "Távoli mentési cél beállítása", + "backups_remote.cel_cime_ip_vagy_hosztnev": "Cél címe (IP vagy hosztnév — NAS vagy SFTP-kiszolgáló)", + "backups_remote.felhasznalo": "Felhasználó", + "backups_remote.tarolo_utvonala_a_celgepen": "Tároló útvonala a célgépen", + "backups_remote.napi_automatikus_tavoli_mentes_engedelye": "Napi automatikus távoli mentés engedélyezve", + "backups_remote.ssh_privat_kulcs": "SSH privát kulcs", + "backups_remote.uresen_hagyva_valtozatlan": "(üresen hagyva változatlan)", + "backups_remote.a_kulcsot_0600_as_fajlba": "A kulcsot 0600-as fájlba írjuk; sosem naplózzuk és nem tároljuk a beállításokban.", + "backups_remote.a_celgep_ismert_host_sora": "A célgép ismert-host sora (known_hosts)", + "backups_remote.a_host_kulcs_rogzitese_no": "A host-kulcs rögzítése (no blind TOFU). Lekérdezhető:", + "backups_remote.mentes": "Mentés", + "backups_remote.adatbazisok_mentese_a_pillanatkephez": "Adatbázisok mentése a pillanatképhez…", + "backups_remote.karbantartas_regi_mentesek_rendezese_a": "Karbantartás: régi mentések rendezése a távoli tárolón…", + "backups_remote.megosztott_mappak_mentese": "Megosztott mappák mentése…", + "backups_remote.mentes_2": "Mentés:", + "backups_remote.mentes_folyamatban": "Mentés folyamatban", + "backups_remote.fajl": "fájl", + "backups_remote.feldolgozas_alatt": "· feldolgozás alatt:", + "backups_remote.a_mentendo_adatok_felmerese": "— a mentendő adatok felmérése…", + "backups_restore.biztonsagi_mentes_visszaallitas": "Biztonsági mentés — Visszaállítás", + "backups_restore.megszakadt_visszaallitas": "Megszakadt visszaállítás", + "backups_restore.a_doboz_ujraindult_mikozben_a": "A doboz újraindult, miközben a visszaállítás futott, ezért nem tudjuk, hogy befejeződött-e. Indítsd el újra lent, ugyanabból a mentésből.", + "backups_restore.visszaallitas": "Visszaállítás", + "backups_restore.alkalmazas": "Alkalmazás:", + "backups_restore.valasszon": "— Válasszon —", + "backups_restore.eltavolitott_alkalmazasok_mentes_megtart": "Eltávolított alkalmazások (mentés megtartva)", + "backups_restore.eltavolitva": "{{.DisplayName}} — eltávolítva", + "backups_restore.pillanatkep": "Pillanatkép:", + "backups_restore.valasszon_alkalmazast": "— Válasszon alkalmazást —", + "backups_restore.meg_nincs_mentes_felhasznaloi_adattal": "Még nincs mentés felhasználói adattal.", + "backups_restore.a_visszaallitas_felulirja_az_alkalmazas": "A visszaállítás felülírja az alkalmazás jelenlegi adatait a kiválasztott mentés állapotával.\n Az alkalmazás a folyamat során automatikusan leáll és újraindul.", + "backups_restore.megertettem_visszaallitas_inditasa": "Megértettem, visszaállítás indítása.", + "backups_restore.visszaallitas_inditasa": "Visszaállítás indítása", + "backups_restore.importalas_mentett_csomagbol_fab": "Importálás mentett csomagból (.fab)", + "backups_restore.visszaallitas_a_tavoli_tarolobol": "Visszaállítás a távoli tárolóból", + "backups_restore.valaszd_ki_az_alkalmazast_es": "Válaszd ki az alkalmazást, és a következő oldalon döntsd el, mit szeretnél: ellenőrzést külön mappába, csak a hiányzó fájlok visszahozását, vagy teljes visszaállítást. Egyik sem indul el kérdés nélkül.", + "backups_restore.elobb_csatold_vissza_az_adatmeghajtot": "Előbb csatold vissza az adatmeghajtót. A mentéseid megvannak, és a meghajtók is\n megvannak — újratelepítés után viszont a gép még nem ismeri őket, ezért most nincs hová\n visszaállítani.", + "backups_restore.ez_ket_kattintas_tarhely_meghajtok": "Ez két kattintás: Tárhely →\n Meghajtók, „Meglévő meghajtó csatolása\". Utána gyere vissza ide.", + "backups_restore.csatolhato_meghajtot_viszont_most_nem": "Csatolható meghajtót viszont most nem látunk ezen a gépen, ezért ezt innen nem tudod\n elindítani. Ha a meghajtó be van kötve, de nincs csatlakoztatva, az üzemeltető tudja\n csatlakoztatni — jelezd neki. A Tárhely →\n Meghajtók oldalon látod, mit ismer most a gép.", + "backups_restore.nem_tudjuk_elolvasni_a_tavoli": "Nem tudjuk elolvasni a távoli tárolót, ezért nem tudjuk, mi van benne. Ez nem azt jelenti, hogy üres — próbáld újra később, vagy jelezd az üzemeltetőnek.", + "backups_restore.a_tavoli_tarolo_kapcsolodasi_adatai": "A távoli tároló kapcsolódási adatai még nem érkeztek meg ehhez a géphez, ezért még nem tudjuk megmutatni, mi van benne. Ez magától rendeződik.", + "backups_restore.nincs_telepitve_elobb_telepitsd_ujra": "Nincs telepítve — előbb telepítsd újra, utána hozhatod vissza az adatait.", + "backups_restore.nem_tudjuk_van_e_mentese": "Nem tudjuk, van-e mentése — a tárolót nem sikerült elolvasni.", + "backups_restore.visszaallitas_2": "Visszaállítás…", + "backups_restore.nincs_mentese_a_tavoli_taroloban": "Nincs mentése a távoli tárolóban — nincs mit visszaállítani.", + "backups_restore.a_tavoli_tarolo_ures_nincs": "A távoli tároló üres — nincs mit visszaállítani.", + "backups_restore.megosztasok_visszaallitasa": "Megosztások visszaállítása", + "backups_restore.helyreallitas_az_elo_adatok_koze": "Helyreállítás az élő adatok közé (csak a hiányzó fájlok)", + "backups_restore.a_meglevo_fajlokat_nem_irja": "A meglévő fájlokat nem írja felül. A már létező megosztás-beállítások változatlanok maradnak.", + "backups_restore.meglevo_ellenorzo_masolatok": "Meglévő ellenőrző másolatok", + "backups_restore.ezek_a_visszaallitott_masolatok_helyet": "Ezek a visszaállított másolatok helyet foglalnak a meghajtón. A tényleges adataidat nem érintik, bármikor törölhetők.", + "backups_restore.masolat_torlese": "Másolat törlése", + "backups_restore.nincs_ellenorzo_masolat_a_meghajton": "Nincs ellenőrző másolat a meghajtón.", + "backups_restore.hordozhato_mentescsomag_fab": "Hordozható mentéscsomag (.fab)", + "backups_restore.hordozhato_pillanatfelvetel_barhol_tarol": "Hordozható pillanatfelvétel — bárhol tárolhatod, és bármikor visszatöltheted egy meghajtóról. A folyamatos védelmet az 1–3. szintű mentés adja.", + "backups_restore.jelszavas_titkositas_opcionalis": "Jelszavas titkosítás (opcionális)", + "backups_restore.opcionalis_jelszo": "Opcionális jelszó", + "backups_restore.uresen_hagyva_a_csomag_titkositas": "Üresen hagyva a csomag titkosítás nélkül készül.", + "backups_restore.letoltes_fab": "Letöltés (.fab)", + "backups_restore.osszes_letoltese_egyenkent": "Összes letöltése (egyenként)", + "backups_restore.a_csomagok_egyenkent_keszulnek_es": "A csomagok egyenként készülnek és töltődnek le — pillanatfelvétel a mostani állapotról.", + "backups_restore.nincs_telepitett_alkalmazas": "Nincs telepített alkalmazás.", + "backups_restore.hiba": "Hiba:", + "backups_restore.a_becsles_sikertelen": "a becslés sikertelen", + "backups_restore.a_csomag_becsult_merete": "A csomag becsült mérete:", + "backups_restore.elinditod_a_letoltest_pillanatfelvetel_a": ". Elindítod a letöltést? (Pillanatfelvétel a mostani állapotról.)", + "backups_restore.hiba_a_becsles_nem_erheto": "Hiba: a becslés nem érhető el.", + "backups_restore.biztosan_torlod_ezt_az_ellenorzo": "Biztosan törlöd ezt az ellenőrző másolatot?", + "backups_restore.a_tenyleges_adataid_valtozatlanok_maradn": "— a tényleges adataid változatlanok maradnak.", + "backups_restore.utolso_megerosites_a_masolat_veglegesen": "UTOLSÓ MEGERŐSÍTÉS: a másolat véglegesen törlődik.", + "backups_restore.hiba_2": "Hiba (", + "backups_restore.az_export_nem_indult_el": "az export nem indult el", + "backups_restore.csomag_keszitese": "Csomag készítése:", + "backups_restore.hiba_az_export_nem_indult": "Hiba: az export nem indult el.", + "backups_restore.hiba_a_csomag_utvonala_hianyzik": "Hiba: a csomag útvonala hiányzik.", + "backups_restore.letoltes": "Letöltés:", + "backups_restore.minden_csomag_elkeszult": "Minden csomag elkészült.", + "backups_restore.vasarnap": "vasárnap", + "backups_restore.hetfo": "hétfő", + "backups_restore.csutortok": "csütörtök", + "backups_restore.pentek": "péntek", + "backups_restore.teljes_visszaallitas_adatbazis_konfigura": "Teljes visszaállítás: adatbázis + konfiguráció + felhasználói adatok a kiválasztott pillanatképből.", + "backups_restore.adatbazis_es_konfiguracio_visszaallitasa": "Adatbázis és konfiguráció visszaállítása — az alkalmazásnak nincs külön felhasználói adata.", + "backups_restore.csak_konfiguracio_visszaallitasa_compose": "Csak konfiguráció visszaállítása (compose fájlok, beállítások).", + "backups_restore.betoltes": "— Betöltés... —", + "backups_restore.1_szint_helyi_mentes_ajanlott": "1. szint — Helyi mentés (ajánlott)", + "backups_restore.2_szint_masodlagos_masolat": "2. szint — Másodlagos másolat", + "backups_restore.nincs_elerheto_mentes": "— Nincs elérhető mentés —", + "backups_restore.visszaallitas_folyamatban": "Visszaállítás folyamatban...", + "backups_restore_wizard.vissza": "← Vissza", + "backups_restore_wizard.visszaallitas": "Visszaállítás — {{.AppDisplayName}}", + "backups_restore_wizard.elokeszites": "Előkészítés", + "backups_restore_wizard.megerosites": "Megerősítés", + "backups_restore_wizard.vegrehajtas": "Végrehajtás", + "backups_restore_wizard.eredmeny": "Eredmény", + "backups_restore_wizard.eszlelve": "Észlelve", + "backups_restore_wizard.ha_szeretned_alabb_ujra_indithatsz": ": {{fmtTime .FinishedAt}}. Ha szeretnéd, alább újra indíthatsz egy visszaállítást.", + "backups_restore_wizard.jelenleg_egy_mentesi_vagy_visszaallitasi": "Jelenleg egy mentési vagy visszaállítási művelet fut", + "backups_restore_wizard.amig_ez_tart_uj_visszaallitas": ". Amíg ez tart, új visszaállítás nem indítható.", + "backups_restore_wizard.az_allapot_fent_automatikusan_frissul": "Az állapot fent automatikusan frissül, és a művelet eredménye is ott jelenik meg, amint elkészült.", + "backups_restore_wizard.allapot_frissitese": "Állapot frissítése", + "backups_restore_wizard.megerosites_teljes_visszaallitas_elokesz": "Megerősítés — teljes visszaállítás előkészítése", + "backups_restore_wizard.a_teljes_visszaallitashoz_a_mentes": "A teljes visszaállításhoz a mentés teljes tartalmát le kell tölteni a távoli tárolóból", + "backups_restore_wizard.a_becsult_meret": "— a becsült méret: {{.}}", + "backups_restore_wizard.a_letoltes_a_meghajton_egy": ". A letöltés a meghajtón egy külön előkészítő mappába kerül; az élő adataid ebben a lépésben még nem változnak.", + "backups_restore_wizard.a_letoltes_a_merettol_es": "A letöltés a mérettől és a kapcsolat sebességétől függően hosszabb ideig is tarthat. Ha elkészült, ezen az oldalon választhatod ki, hogy csak a hiányzó fájlokat hozod vissza, vagy teljes visszaállítást kérsz.", + "backups_restore_wizard.elokeszites_inditasa": "Előkészítés indítása", + "backups_restore_wizard.megsem": "Mégsem", + "backups_restore_wizard.1_ellenorzes_kulon_mappaba_beallitasok": "1. Ellenőrzés külön mappába (beállítások és adatbázis)", + "backups_restore_wizard.az_alkalmazas_beallitasait_es_adatbazisa": "Az alkalmazás beállításait és adatbázisát hozza vissza egy külön ellenőrző mappába. A saját fájljaidat (dokumentumok, képek, feltöltések) nem hozza vissza — azokhoz a 3. pont teljes visszaállítása kell. Az élő adataid nem változnak.", + "backups_restore_wizard.ellenorzes_inditasa": "Ellenőrzés indítása", + "backups_restore_wizard.2_hianyzo_fajlok_visszahozasa": "2. Hiányzó fájlok visszahozása", + "backups_restore_wizard.csak_a_hianyzo_fajlokat_masolja": "Csak a hiányzó fájlokat másolja vissza a meglévők közé. A meglévő fájlokat nem írja felül, adatbázist nem állít vissza — törölt tartalom ettől nem jelenik meg újra.", + "backups_restore_wizard.hianyzo_fajlok_visszahozasa": "Hiányzó fájlok visszahozása", + "backups_restore_wizard.ehhez_elobb_elo_kell_kesziteni": "Ehhez előbb elő kell készíteni a teljes mentést — lásd a 3. pontot.", + "backups_restore_wizard.3_teljes_visszaallitas_fajlok_adatbazis": "3. Teljes visszaállítás (fájlok + adatbázis)", + "backups_restore_wizard.a_fajlokat_a_mentes_szerinti": "A fájlokat a mentés szerinti változatra állítja vissza és az adatbázist is visszatölti. Semmit nem töröl: a mentés óta létrejött fájlok megmaradnak. A jelenlegi adatbázisról előtte biztonsági mentés készül.", + "backups_restore_wizard.az_elokeszitett_mentes": "Az előkészített mentés:", + "backups_restore_wizard.adatbazis_mentes_ideje": "adatbázis-mentés ideje: {{fmtTime .Pair.DumpsAt}}.", + "backups_restore_wizard.az_adatbazis_mentes_ideje_nem": "az adatbázis-mentés ideje nem állapítható meg.", + "backups_restore_wizard.az_adatbazis_mentes_regebbi": "Az adatbázis-mentés régebbi", + "backups_restore_wizard.a_fajlok_es_az_adatbazis": "— a fájlok és az adatbázis eltérő időpontból származnak.", + "backups_restore_wizard.a_mentett_adatbazis_uresnek_tunik": "A mentett adatbázis üresnek tűnik (nincs benne felhasználói fiók) — elképzelhető, hogy a mentés korábbi, mint az adataid.", + "backups_restore_wizard.teljes_visszaallitas_inditasa": "Teljes visszaállítás indítása", + "backups_restore_wizard.a_teljes_visszaallitashoz_eloszor_le": "A teljes visszaállításhoz először le kell tölteni a mentés teljes tartalmát. Az előkészítés megmutatja a méretet, mielőtt bármi elindulna — az élő adataid az előkészítés alatt nem változnak.", + "backups_restore_wizard.teljes_visszaallitas_elokeszitese": "Teljes visszaállítás előkészítése", + "backups_restore_wizard.teljes_visszaallitas": "Teljes visszaállítás:", + "backups_restore_wizard.a_mentes_ideje": "— a mentés ideje:", + "backups_restore_wizard.figyelem_a_fajlok_es_az": "FIGYELEM: a fájlok és az adatbázis eltérő időpontból származnak.", + "backups_restore_wizard.figyelem_a_mentett_adatbazis_uresnek": "FIGYELEM: a mentett adatbázis üresnek tűnik.", + "backups_restore_wizard.a_fajlok_a_mentes_szerinti": "A fájlok a mentés szerinti változatra állnak vissza, semmi nem törlődik.", + "backups_restore_wizard.utolso_megerosites_az_alkalmazas_leall": "UTOLSÓ MEGERŐSÍTÉS: az alkalmazás leáll, az adatbázis visszatöltődik, majd újraindul. A jelenlegi adatbázisról biztonsági mentés készül.", + "backups_escrow.vissza": "← Vissza", + "backups_escrow.helyreallitasi_kod": "Helyreállítási kód", + "backups_escrow.ehhez_nem_kell_semmit_tenned": "Ehhez nem kell semmit tenned. Ha fél óra múlva is ezt látod, szólj az üzemeltetőnek.", + "backups_escrow.a_funkciohoz_az_ugynok_frissitese": "A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik. Próbálja újra később.", + "backups_escrow.1_elofeltetelek_ellenorzese": "1. Előfeltételek ellenőrzése", + "backups_escrow.ellenorzes_folyamatban": "Ellenőrzés folyamatban…", + "backups_escrow.2_fontos_tudnivalok": "2. Fontos tudnivalók", + "backups_escrow.a_helyreallitasi_kod_a_mentesei": "A helyreállítási kód a mentései utolsó kulcsa. Pontosan egyszer jelenik meg — a rendszer\n sehol nem tárolja, és a Felhom sem ismeri. Ha a szerver megsemmisül, a távoli mentések CSAK\n ezzel a kóddal állíthatók vissza. Írja fel papírra vagy mentse jelszókezelőbe — de NE ezen a\n szerveren tárolja.", + "backups_escrow.az_uj_kod_letrehozasaval_a": "Az új kód létrehozásával a korábbi kód a jövőbeli mentésekre érvényét veszti; a már meglévő\n mentési előzményekhez érvényes marad.", + "backups_escrow.3_megerosites": "3. Megerősítés", + "backups_escrow.a_folytatashoz_adja_meg_a": "A folytatáshoz adja meg a bejelentkezési jelszavát", + "backups_escrow.kod_letrehozasa": "Kód létrehozása", + "backups_escrow.megsem": "Mégsem", + "backups_escrow.4_letrehozas": "4. Létrehozás", + "backups_escrow.a_kod_letrehozasa_folyamatban_altalaban": "A kód létrehozása folyamatban… (általában néhány másodperc)", + "backups_escrow.5_a_helyreallitasi_kod": "5. A helyreállítási kód", + "backups_escrow.a_kod_pontosan_egyszer_jelenitheto": "A kód pontosan egyszer jeleníthető meg. Készítsen elő papírt és tollat, mielőtt megnyomja a gombot.", + "backups_escrow.kod_megjelenitese": "Kód megjelenítése", + "backups_escrow.ez_mostantol_az_elo_helyreallitasi": "Ez mostantól az élő helyreállítási kód — a korábbi kód érvényét vesztette. Mentse el most: a kód többé nem jeleníthető meg.", + "backups_escrow.elrejtes": "Elrejtés", + "backups_escrow.6_ellenorzes": "6. Ellenőrzés", + "backups_escrow.megerosites_irja_be_a_kod": "Megerősítés: írja be a kód szavait", + "backups_escrow.a_megadott_szavak_nem_egyeznek": "A megadott szavak nem egyeznek — ellenőrizze a felírt kódot.", + "backups_escrow.szavak_ellenorzese": "Szavak ellenőrzése", + "backups_escrow.7_befejezes": "7. Befejezés", + "backups_escrow.mi_tortenik_ezutan_a_helyreallitasi": "Mi történik ezután? A helyreállítási kód elkészült, és a rendszer elküldi a központba megerősítésre — ez általában néhány másodperc, legfeljebb 15 perc. Addig a Távoli mentés oldalon a „megerősítésre vár\" üzenet látható; a megerősítés után indítható az első távoli mentés.", + "backups_escrow.felirtam_a_kodot_es_biztonsagos": "Felírtam a kódot, és biztonságos helyen — nem ezen a szerveren — tárolom.", + "backups_escrow.befejezes": "Befejezés", + "backups_escrow.a_kod_letrejott_de_nem": "A kód létrejött, de nem lett megjelenítve — biztonsági okból újra nem kérhető le.\n Indítsa újra a folyamatot: az új kód a régit érvényteleníti.", + "backups_escrow.ujrainditas": "Újraindítás", + "backups_escrow.mentesi_tarolo_pbs_beallitva": "Mentési tároló (PBS) beállítva", + "backups_escrow.helyreallitasi_dr_szint_aktiv": "Helyreállítási (DR) szint aktív", + "backups_escrow.titkosito_eszkoz_telepitve": "Titkosító eszköz telepítve", + "backups_escrow.kozponti_feltoltes_beallitva": "Központi feltöltés beállítva", + "backups_escrow.tavoli_mentes_jelszava_elokeszitve": "Távoli mentés jelszava előkészítve", + "backups_escrow.rendszerjogosultsag_engedelyezve": "Rendszerjogosultság engedélyezve", + "backups_escrow.nincs_beallitva_mentesi_tarolo": "nincs beállítva mentési tároló", + "backups_escrow.a_titkosito_eszkoz_age_nem": "a titkosító eszköz (age) nem található", + "backups_escrow.a_dr_szint_nincs_alkalmazva": "a DR-szint nincs alkalmazva ezen a gépen", + "backups_escrow.a_kozponti_feltoltes_nincs_beallitva": "a központi feltöltés nincs beállítva", + "backups_escrow.a_rendszerjogosultsag_hianyzik_az_ugynok": "a rendszerjogosultság hiányzik — az ügynök frissítése szükséges", + "backups_escrow.nincs_elokeszitett_jelszo_a_varazslo": "nincs előkészített jelszó — a varázsló indításkor automatikusan előkészíti, ha a távoli mentés be van állítva", + "backups_escrow.elokeszitve": "előkészítve", + "backups_escrow.hiba": "Hiba", + "backups_escrow.a_funkciohoz_az_ugynok_frissitese_2": "A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik.", + "backups_escrow.a_folyamat_a_piros_feltetelek": "A folyamat a piros feltételek teljesüléséig nem indítható.", + "backups_escrow.az_elofeltetelek_ellenorzese_nem_sikerul": "Az előfeltételek ellenőrzése nem sikerült:", + "backups_escrow.a_folyamat_inditasa_nem_sikerult": "A folyamat indítása nem sikerült.", + "backups_escrow.hiba_2": "Hiba:", + "backups_escrow.a_letrehozas_nem_sikerult": "A létrehozás nem sikerült.", + "backups_escrow.reszletek": "Részletek:", + "backups_escrow.a_kod_lekerese_nem_sikerult": "A kód lekérése nem sikerült.", + "backups_escrow.megerosites_irja_be_a_kod_2": "Megerősítés: írja be a kód", + "backups_escrow.es": ". és", + "backups_escrow.szavat": ". szavát", + "backups_escrow.megjelenites": "Megjelenítés", + "tier2_config.2_mentes_beallitasa": "2. mentés beállítása — {{.DisplayName}}", + "tier2_config.vissza_a_mentesekhez": "← Vissza a mentésekhez", + "tier2_config.a_2_mentes_egy_masik": "A 2. mentés egy másik fizikai meghajtóra készít másolatot az alkalmazás\n helyreállítási csomagjáról és adatairól. Ez az egyetlen off-drive védelem a böngészhető\n felhasználói fájlokhoz (a teljes rendszermentés/PBS nem éri el ezeket).", + "tier2_config.ennek_az_alkalmazasnak_az_adatai": "Ennek az alkalmazásnak az adatai a belső rendszerlemezen vannak, amelyek\n már szerepelnek a teljes rendszermentésben (PBS). A 2. (off-drive) másolat\n kiegészítő, és elsősorban a külső adatmeghajtón tárolt alkalmazásokhoz készül — ehhez az\n alkalmazáshoz nincs külön teendő.", + "tier2_config.jelenlegi_allapot": "Jelenlegi állapot", + "tier2_config.2_mentes": "2. mentés", + "tier2_config.kikapcsolva": "Kikapcsolva", + "tier2_config.bekapcsolva": "Bekapcsolva", + "tier2_config.cel": "Cél", + "tier2_config.nincs_elerheto_off_drive_cel": "Nincs elérhető off-drive cél", + "tier2_config.megjegyzes": "Megjegyzés", + "tier2_config.cel_meghajto": "Cél meghajtó", + "tier2_config.csak_db_konfiguracio": "— csak DB/konfiguráció", + "tier2_config.kivalasztas_modja": "Kiválasztás módja", + "tier2_config.kezi_valasztas": "kézi választás", + "tier2_config.jelenleg_csak_a_belso_ssd": "Jelenleg csak a belső SSD érhető el 2. célként, ezért csak az adatbázis és a konfiguráció\n másolódik. A belső rendszerlemez kicsi, ezért a nagy fájlok off-drive mentéséhez egy\n 2. adatmeghajtó szükséges (hogy a rendszerlemez ne teljen meg).", + "tier2_config.2_mentes_bekapcsolva": "2. mentés bekapcsolva", + "tier2_config.nincs_masik_adatmeghajto_automatikus_cel": "Nincs másik adatmeghajtó — automatikus cél a belső SSD (csak DB/konfiguráció). Egy 2.\n adatmeghajtó hozzáadásával a teljes adat is off-drive menthető.", + "tier2_config.mentes": "Mentés", + "recovery.adatok_visszaszerzese_felhom": "Adatok visszaszerzése — Felhom", + "recovery.a_menteseid": "A mentéseid", + "recovery.elerhetok": "elérhetők", + "recovery.a_tarolo_megnyilt_de_nincs": "A tároló megnyílt, de nincs benne egyetlen mentés sem. Ez azt jelenti, hogy a\n kulcs jó volt, de ehhez a géphez nem tartozik korábbi mentés. Ha korábban biztosan készültek\n mentések, keresd a Felhom ügyfélszolgálatát, mielőtt bármit tennél.", + "recovery.a_tarolo_megnyilt_es_van": "A tároló megnyílt, és van benne tartalom, de nem tudtuk alkalmazásokhoz rendelni. A Biztonsági\n mentés oldalon nézheted meg részletesen.", + "recovery.ezek_a_te_menteseid_a": "Ezek a te mentéseid, a lent jelzett időpontokból. Nézd át, hogy tényleg azt\n találod-e itt, amire számítasz — semmit nem állítottunk vissza és semmi nem változott.", + "recovery.alkalmazas": "Alkalmazás", + "recovery.legutobbi_mentes": "Legutóbbi mentés", + "recovery.meret": "Méret", + "recovery.a_visszaallitas_alkalmazasonkent_torteni": "A visszaállítás alkalmazásonként történik, a Biztonsági mentés → Visszaállítás\n oldalon. Ott választhatod ki, melyik alkalmazás mit hozzon vissza.", + "recovery.tovabb_a_visszaallitashoz": "Tovább a visszaállításhoz", + "recovery.vissza_a_kezdolapra": "Vissza a kezdőlapra", + "recovery.adatok": "Adatok", + "recovery.visszaszerzese": "visszaszerzése", + "recovery.ezt_a_gepet_ujratelepitettek_a": "Ezt a gépet újratelepítették. A korábbi, házon kívüli mentéseid megvannak — a\n Felhom központi rendszere őriz hozzájuk egy lezárt csomagot", + "recovery.amelyet_zartunk_le": ", amelyet\n {{.}} zártunk le", + "recovery.a_csomagot_csak_a_te": ". A csomagot csak a te helyreállítási\n kódoddal lehet kinyitni.", + "recovery.a_helyreallitasi_kodot_senki_nem": "A helyreállítási kódot senki nem tudja pótolni — sem a Felhom, sem az\n ügyfélszolgálat, sem az üzemeltető. Ez szándékos: így a mentéseidet rajtad kívül senki nem\n tudja megnyitni. Ha a kód elveszett, a korábbi mentések nem nyithatók meg többé.", + "recovery.ha_megadod_a_kodot_feloldjuk": "Ha megadod a kódot, feloldjuk a mentéseid zárolását és megmutatjuk, mi van bennük\n — melyik alkalmazás, mikorról, mekkora. Ebben a lépésben semmit nem állítunk vissza és\n semmi nem változik. A visszaállítást utána, alkalmazásonként külön választhatod.", + "recovery.helyreallitasi_kod_tiz_szo": "Helyreállítási kód (tíz szó)", + "recovery.tiz_szo_szokozokkel_elvalasztva": "tíz szó, szóközökkel elválasztva", + "recovery.mentesek_feloldasa": "Mentések feloldása", + "recovery.most_nem": "Most nem", + "recovery.feloldas_folyamatban": "Feloldás folyamatban…", + "recovery.a_gep_eppen_ujraindul_ezert": "A gép éppen újraindul, ezért most nem tudtuk befejezni a műveletet.", + "recovery.semmi_nem_valtozott_varj_nehany": "Semmi nem változott. Várj néhány másodpercet, és próbáld újra — a kódodra továbbra is szükséged lesz,", + "recovery.ugyhogy_tartsd_keznel": "úgyhogy tartsd kéznél.", + "recovery.a_most_nem_csak_azt": "A „Most nem” csak azt jelenti, hogy nem zavarunk vele többet a kezdőlapon. A mentéseid ettől\n megmaradnak, és ez az oldal a Biztonsági mentés → Távoli mentés oldalról\n bármikor újra elérhető.", + "recovery.biztosan_nem_kered_vissza_a": "Biztosan nem kéred vissza a korábbi mentéseket?", + "recovery.ha_megerosited": "Ha megerősíted:", + "recovery.a_korabbi_menteseket_most_felretesszuk": "a korábbi mentéseket most félretesszük, és {{.AbandonGraceDays}} nap múlva véglegesen töröljük — a lezárt helyreállítási csomaggal együtt;", + "recovery.a_nap_alatt_meggondolhatod_magad": "a {{.AbandonGraceDays}} nap alatt meggondolhatod magad: ha előkerül a helyreállítási kódod, a mentéseid visszaszerezhetők, és a törlés elmarad;", + "recovery.a_pontos_datumot_a_tavoli": "a pontos dátumot a Távoli mentés oldalon végig látni fogod, és emlékeztetni is fogunk;", + "recovery.a_gep_uj_ures_mentesi": "a gép új, üres mentési tárolót kezd, és mostantól oda ment;", + "recovery.a_torles_utan_ez_a": "a törlés után ez a kérdés nem jön vissza többé — mert nem marad mit visszaszerezni.", + "recovery.ha_csak_most_nincs_keznel": "Ha csak most nincs kéznél a kódod, válaszd inkább a „Most nem” lehetőséget — az semmit nem indít el.", + "recovery.igen_felretehetitek_a_korabbi_menteseket": "Igen, félretehetitek a korábbi mentéseket", + "recovery.megsem": "Mégsem", + "recovery.ha_a_helyreallitasi_kodod_veglegesen": "Ha a helyreállítási kódod véglegesen elveszett, és tudomásul veszed, hogy a korábbi mentések\n így nem nyithatók meg többé:", + "recovery.nem_kerem_vissza_a_korabbi": "nem kérem vissza a korábbi adatokat.", + "recovery.ez_a_lehetoseg_akkor_valik": "ez a lehetőség akkor válik elérhetővé, ha a gép már újra kapcsolódott a házon kívüli\n tárhelyhez. Addig a mentéseid érintetlenül megmaradnak.", + "backups_shared.fajl_visszaallitas": "Fájl-visszaállítás", + "backups_shared.folyamatban": "folyamatban", + "backups_shared.kesz": "kész.", + "backups_shared.sikertelen": "sikertelen.", + "backups_shared.tavoli_visszaallitas": "Távoli visszaállítás", + "backups_shared.visszaallitas": "Visszaállítás", + "backups_apps.visszaallitja_legutobbi_sikeres_masolat": "Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: {{fmtTimeStr .Tier2LastSuccess}}.", + "backups_apps.figyelem_legutobbi_kiserlet_nem_sikerult": " Figyelem: a legutóbbi mentési kísérlet nem sikerült, ezért a visszaállított fájlok ennél régebbiek lehetnek.", + "backups_apps.konfig": "Konfig", + "backups_apps.megtartva": "Megtartva", + "backups_apps.helyi": "helyi", + "backups_remote.pl_felhom": "pl. felhom", + "backups_remote.pl_repo_path": "pl. /volume1/felhom-backup/repo", + "backups_restore_wizard.befejezve": "Befejezve", + "tier2_config.automatikus_kisbetu": "automatikus", + "tier2_config.automatikus": "Automatikus", + "tier2_config.jelenleg": "(jelenleg: {{.EffectiveLabel}})", + "backups_restore.kedd": "kedd", + "backups_restore.szerda": "szerda", + "backups_restore.szombat": "szombat", + "backups_restore.2_szint": "2. szint", + "backups_restore.1_szint": "1. szint", + "page.title.backups_remote": "Biztonsági mentés — Távoli mentés", + "page.title.backups_apps": "Biztonsági mentés — Alkalmazások", + "page.title.backups_restore": "Biztonsági mentés — Visszaállítás", + "page.title.escrow": "Helyreállítási kód", + "backups_remote.pl_ip": "pl. 192.168.0.10" } diff --git a/controller/internal/report/types.go b/controller/internal/report/types.go index b7e9121..0de20c8 100644 --- a/controller/internal/report/types.go +++ b/controller/internal/report/types.go @@ -104,9 +104,9 @@ type ContainerDetailReport struct { // BackupReport holds backup subsystem status. type BackupReport struct { - Enabled bool `json:"enabled"` - LastDBDump *time.Time `json:"last_db_dump,omitempty"` - LastSnapshot *time.Time `json:"last_snapshot,omitempty"` + Enabled bool `json:"enabled"` + LastDBDump *time.Time `json:"last_db_dump,omitempty"` + LastSnapshot *time.Time `json:"last_snapshot,omitempty"` // ⚠ THE FOUR FIELDS BELOW HAVE NO PRODUCER AND MUST NOT BE RENDERED. They are declared, they // are on the wire, and nothing has assigned them since disk-tier restic moved to the host agent // (slice 8C) — see the comment in buildBackupReport, which leaves them zero deliberately. diff --git a/controller/internal/web/escrow_handlers.go b/controller/internal/web/escrow_handlers.go index a65fb5b..fd77866 100644 --- a/controller/internal/web/escrow_handlers.go +++ b/controller/internal/web/escrow_handlers.go @@ -120,6 +120,7 @@ func (s *Server) escrowWizardPageHandler(w http.ResponseWriter, r *http.Request) } data := map[string]interface{}{ "Title": "Helyreállítási kód", + "TitleKey": "page.title.escrow", // i18n: the Hungarian title above is what hu renders "CustomerName": s.cfg.Customer.Name, "Domain": s.cfg.Customer.Domain, "ActivePage": "backups-remote", diff --git a/controller/internal/web/handlers.go b/controller/internal/web/handlers.go index b9e6729..2a80970 100644 --- a/controller/internal/web/handlers.go +++ b/controller/internal/web/handlers.go @@ -993,6 +993,7 @@ func offboxCeremonyWaitState(t *settings.OffboxTarget) (awaiting, timedOut bool) // participation toggles and the manual-target form. func (s *Server) backupsRemoteHandler(w http.ResponseWriter, r *http.Request) { data := s.backupsCommonData("backups-remote", "Biztonsági mentés — Távoli mentés", r) + data["TitleKey"] = "page.title.backups_remote" // i18n: the Hungarian title above is what hu renders s.backupsOffboxData(data) // Escrow ceremony card states (v0.127.0): the Scenario-F stale flag + the agent version gate. data["EscrowStale"] = s.escrowStale() @@ -1040,6 +1041,7 @@ func (s *Server) backupsRemoteHandler(w http.ResponseWriter, r *http.Request) { // 1./2./3. tier rows. func (s *Server) backupsAppsHandler(w http.ResponseWriter, r *http.Request) { data := s.backupsCommonData("backups-apps", "Biztonsági mentés — Alkalmazások", r) + data["TitleKey"] = "page.title.backups_apps" // i18n: the Hungarian title above is what hu renders s.backupsOffboxData(data) // the tier-3 rows render $.Offbox status if fullStatus, ok := data["Backup"].(*backup.FullBackupStatus); ok && fullStatus != nil { @@ -1072,6 +1074,7 @@ func (s *Server) backupsAppsHandler(w http.ResponseWriter, r *http.Request) { // restore-to-verify list and the .fab export/import loop. func (s *Server) backupsRestoreHandler(w http.ResponseWriter, r *http.Request) { data := s.backupsCommonData("backups-restore", "Biztonsági mentés — Visszaállítás", r) + data["TitleKey"] = "page.title.backups_restore" // i18n: the Hungarian title above is what hu renders // R-550: restores the box was running when it stopped — shown until that app is restored again. if s.backupMgr != nil { data["InterruptedRestores"] = s.backupMgr.InterruptedRestores() diff --git a/controller/internal/web/i18n_cases_b_test.go b/controller/internal/web/i18n_cases_b_test.go index 37d8d42..28b67e5 100644 --- a/controller/internal/web/i18n_cases_b_test.go +++ b/controller/internal/web/i18n_cases_b_test.go @@ -123,6 +123,16 @@ func i18nCasesB() []i18nCase { d["Backup"].(m)["DiscoveredDBs"] = []m{} return d }}, + {"backups_apps_stale_copy", "backups_apps", func() map[string]interface{} { + d := i18nAppsData("ok", false, true, "dumps") + rows := d["AppBackupRows"].([]m) + for _, r := range rows { + if r["StackName"] == "oksucc" { + r["Tier2StaleCopy"] = true + } + } + return d + }}, {"backups_apps_empty", "backups_apps", func() map[string]interface{} { return i18nLayoutData("backups-apps", "Alkalmazás mentések") }}, {"backups_remote_full", "backups_remote", func() map[string]interface{} { return i18nRemoteData(func(d, o m) { diff --git a/controller/internal/web/i18n_wiring_test.go b/controller/internal/web/i18n_wiring_test.go index d994786..9b263c4 100644 --- a/controller/internal/web/i18n_wiring_test.go +++ b/controller/internal/web/i18n_wiring_test.go @@ -3,6 +3,8 @@ package web import ( "fmt" "io/fs" + "os" + "path/filepath" "net/http" "net/http/httptest" "net/url" @@ -263,3 +265,68 @@ func huTemplateSource(name string) ([]byte, error) { out, _ := b.Expand(i18n.Default, string(raw)) return []byte(out), nil } + +// ── Slice 1: pages rendered OUTSIDE executeTemplate follow the language (executeTemplateLang) ─────── +// +// i18nDirectPages lists them with a parity case and a phrase that must appear in English. Release B adds +// recovery; release C adds login, claim, the two guest share pages and the catch-all. +var i18nDirectPages = []struct{ tmpl, caseName, enProbe string }{ + {"recovery", "recovery_locked_can", "Unlock backups"}, +} + +// TestI18nDirectRenderPagesFollowLanguage — with the household language saved as English the page is +// English (`` and a known English phrase); saved as Hungarian it is byte-identical to the +// fixture captured from the unconverted template. +func TestI18nDirectRenderPagesFollowLanguage(t *testing.T) { + cases := map[string]i18nCase{} + for _, c := range i18nCases() { + cases[c.name] = c + } + for _, p := range i18nDirectPages { + c, ok := cases[p.caseName] + if !ok { + t.Fatalf("%s: no parity case %q", p.tmpl, p.caseName) + } + for _, lang := range []string{"hu", "en"} { + s := i18nTestServer(t) + if err := s.settings.SetLanguage(lang); err != nil { + t.Fatal(err) + } + var buf strings.Builder + if err := s.executeTemplateLang(&buf, httptest.NewRequest(http.MethodGet, "/x", nil), p.tmpl, c.data()); err != nil { + t.Fatalf("%s [%s]: %v", p.tmpl, lang, err) + } + got := relativeAgeRe.ReplaceAllString(buf.String(), "# $1") + if lang == "hu" { + want, err := os.ReadFile(filepath.Join("testdata", "i18n_parity", p.caseName+".html")) + if err != nil { + t.Fatal(err) + } + if got != string(want) { + t.Errorf("%s: Hungarian render through executeTemplateLang differs from fixture %s", p.tmpl, p.caseName) + } + continue + } + if !strings.Contains(got, ` -

Biztonsági mentés — Alkalmazások

+

{{T "backups_apps.biztonsagi_mentes_alkalmazasok"}}

{{.Domain}} @@ -13,54 +13,54 @@ {{template "backups_empty" .}} {{else}} -

Alkalmazás-mentések (adatbázis + konfiguráció)

-

Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.

+

{{T "backups_apps.alkalmazas_mentesek_adatbazis_konfigurac"}}

+

{{T "backups_apps.az_egyes_alkalmazasok_reszletes_granulal"}}

-

Ütemezés

+

{{T "backups_apps.utemezes"}}

- Adatbázis mentés + {{T "backups_apps.adatbazis_mentes"}} {{.Backup.DBDumpSchedule}} - Következő: {{nextRunLabel .Backup.NextDBDump}} + {{T "backups_apps.kovetkezo"}}
{{if .Backup.LastDBDump}}
- Utolsó adatbázis mentés: + {{T "backups_apps.utolso_adatbazis_mentes"}} {{fmtTime .Backup.LastDBDump.LastRun}} ({{timeAgo .Backup.LastDBDump.LastRun}})
{{else}}
- Utolsó adatbázis mentés: - Még nem futott + {{T "backups_apps.utolso_adatbazis_mentes"}} + {{T "backups_apps.meg_nem_futott"}}
{{end}}
-

Adatbázisok

+

{{T "backups_apps.adatbazisok"}}

{{if or .Backup.DumpFiles .Backup.DiscoveredDBs}}
- - - - - - + + + + + + @@ -75,16 +75,16 @@ {{if .Error}} – {{else if .Validation.Valid}} - {{.Validation.TableCount}} tábla + {{T "backups_apps.tabla"}} {{else if .Validation.Error}} - Hiba + {{T "backups_apps.hiba"}} {{else}} - – + – {{end}}
AlkalmazásTípusMéretUtolsóÉrvényesítésÁllapot{{T "backups_apps.alkalmazas"}}{{T "backups_apps.tipus"}}{{T "backups_apps.meret"}}{{T "backups_apps.utolso"}}{{T "backups_apps.ervenyesites"}}{{T "backups_apps.allapot"}}
{{if .Error}} - Hiba + {{T "backups_apps.hiba"}} {{else}} OK {{end}} @@ -100,9 +100,9 @@ {{fmtTimeShort .ModTime}} {{if .Validation.Valid}} - {{.Validation.TableCount}} tábla + {{T "backups_apps.tabla"}} {{else if .Validation.Error}} - Hiba + {{T "backups_apps.hiba"}} {{else}} – {{end}} @@ -115,23 +115,20 @@
{{else if eq .DBSectionState "pending"}} -
Még nem készült adatbázis-mentés — az első ütemezett mentés éjjel fut le.
+
{{T "backups_apps.meg_nem_keszult_adatbazis_mentes"}}
{{else}} -
A telepített alkalmazások beágyazott adatbázist használnak (pl. SQLite) — adatbázisuk a fájl- és kötetmentés része, külön adatbázis-kiírás nem szükséges.
+
{{T "backups_apps.a_telepitett_alkalmazasok_beagyazott_ada"}}
{{end}}
{{if .Backup.AppDataInfo}}
-

Alkalmazások mentési állapota

+

{{T "backups_apps.alkalmazasok_mentesi_allapota"}}

{{if .NoUserDataBackupWarning}}
- Felhasználói adatokról nincs biztonsági mentés.
- A szerveren tárolt fotók, dokumentumok és egyéb fájlok jelenleg csak egy példányban léteznek. - Külső meghajtó csatlakoztatásával biztonsági másolat készíthető a 3-2-1 szabály szerint. - Meghajtó beállítása → + {{T "backups_apps.felhasznaloi_adatokrol_nincs_biztonsagi"}}
{{end}} @@ -148,17 +145,17 @@ {{.DisplayName}}
{{if .Removed}} - Eltávolítva — visszaállítható + {{T "backups_apps.eltavolitva_visszaallithato"}} {{if .StorageLabel}}{{.StorageLabel}}{{end}} {{else if .DriveDisconnected}} - Meghajtó leválasztva + {{T "backups_apps.meghajto_levalasztva"}} {{else if .HasHDDData}} {{if .StorageLabel}}{{.StorageLabel}}{{end}} {{.HDDSizeHuman}} {{else if .HasVolumeData}} - Konfig{{if .HasDB}} + DB{{end}} + Adatok + {{T "backups_apps.konfig"}}{{if .HasDB}} + DB{{end}} {{T "backups_apps.adatok"}} {{else}} - Konfig{{if .HasDB}} + DB{{end}} + {{T "backups_apps.konfig"}}{{if .HasDB}} + DB{{end}} {{end}}
@@ -171,15 +168,15 @@ from the unit (R-253). No tier rows: nothing is scheduled for an app that is not here. */}}
- Mentés - Megtartva - helyi - Az alkalmazást eltávolítottad, a mentése megmaradt. Legutóbbi mentés: {{fmtTimeStr .RemovedUnitTime}}. + {{T "backups_apps.mentes"}} + {{T "backups_apps.megtartva"}} + {{T "backups_apps.helyi"}} + {{T "backups_apps.az_alkalmazast_eltavolitottad_a_mentese"}}
{{$.CSRFField}} - +
@@ -188,82 +185,82 @@
- 1. mentés + {{T "backups_apps.1_mentes"}} Auto - helyi + {{T "backups_apps.helyi"}} {{if .Tier1LastRun}} {{/* R-258: three states. The tick is THIS app's own most recent dump result, not the box's most recent run — and a third value renders NO icon, which is where "we have no result for this backup" belongs. A tick standing for "a file exists" is what this replaced. */}} - Utolsó: {{timeAgoStr .Tier1LastRun}} + {{T "backups_apps.utolso_2"}} {{if eq .Tier1LastStatus "ok"}} {{else if eq .Tier1LastStatus "error"}} - {{else}}—{{end}} + {{else}}—{{end}} {{end}} {{.Tier1Contents}} {{if .DriveFilesNote}}{{.DriveFilesNote}}{{if .DriveFilesNoteLink}} {{.DriveFilesNoteLinkText}} →{{end}}{{end}} {{if and .HasDB (eq .Tier1DBStatus "error")}} - DB dump hiba + {{T "backups_apps.db_dump_hiba"}} {{end}}
- 2. mentés + {{T "backups_apps.2_mentes"}} {{if .Tier2UserDisabled}} - 2. mentés kikapcsolva + {{T "backups_apps.2_mentes_kikapcsolva"}} {{else if and .Tier2Configured .Tier2DestDisconnected}} rsync → {{.Tier2Dest}} - Cél meghajtó leválasztva + {{T "backups_apps.cel_meghajto_levalasztva"}} {{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}} - Utolsó: {{timeAgoStr .Tier2LastRun}} + {{T "backups_apps.utolso_3"}} {{end}}{{else if .Tier2LastSuccess}} - Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}} + {{T "backups_apps.utolso_sikeres"}} {{else}} - Még nincs sikeres másolat + {{T "backups_apps.meg_nincs_sikeres_masolat"}} {{end}} {{.Tier23Contents}} {{else if and .Tier2Configured .Tier2DestInactive}} rsync → {{.Tier2Dest}} - Cél meghajtó inaktív + {{T "backups_apps.cel_meghajto_inaktiv"}} {{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}} - Utolsó: {{timeAgoStr .Tier2LastRun}} + {{T "backups_apps.utolso_3"}} {{end}}{{else if .Tier2LastSuccess}} - Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}} + {{T "backups_apps.utolso_sikeres"}} {{else}} - Még nincs sikeres másolat + {{T "backups_apps.meg_nincs_sikeres_masolat"}} {{end}} {{.Tier23Contents}} {{else if .Tier2Configured}} rsync → {{.Tier2Dest}} {{.Tier2Schedule}} {{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}} - Utolsó: {{timeAgoStr .Tier2LastRun}} + {{T "backups_apps.utolso_3"}} {{.Tier2StatusBadge}} {{end}}{{else if .Tier2LastSuccess}} - Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}} + {{T "backups_apps.utolso_sikeres"}} {{.Tier2StatusBadge}} {{else}} - Még nincs sikeres másolat + {{T "backups_apps.meg_nincs_sikeres_masolat"}} {{.Tier2StatusBadge}} {{end}} @@ -274,20 +271,20 @@ this one is about the PACKAGE, and after a preserved leg they differ. */}} {{if .Tier2UnitStaleNotice}}{{.Tier2UnitStaleNotice}}{{end}} {{.Tier23Contents}} - +
{{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}}
{{$.CSRFField}} - +
{{end}}{{else if .Tier2LastSuccess}}
{{$.CSRFField}} - +
{{else}} - Még nincs sikeres másolat, amiből vissza lehetne állítani. + {{T "backups_apps.meg_nincs_sikeres_masolat_amibol"}} {{end}} {{/* R-102/R-103: the DESTRUCTIVE twin of the button above. Offered only when the copy holds an openable recovery unit (Tier2UnitRestorable — a second @@ -297,54 +294,54 @@ {{if .Tier2UnitRestorable}}
{{$.CSRFField}} - +
{{end}} - Beállítás + {{T "backups_apps.beallitas"}}
{{else}} - 1. mentés auto - Nincs 2. (off-drive) másolat + {{T "backups_apps.1_mentes_auto"}} + {{T "backups_apps.nincs_2_off_drive_masolat"}} {{if .Tier2LastError}} - {{.Tier2LastError}} + {{.Tier2LastError}} {{end}} {{end}}
{{if eq .Tier3State "active"}}
- 3. mentés - {{if eq $.Offbox.LastStatus "ok"}}Sikeres{{else if eq $.Offbox.LastStatus "error"}}Hiba{{else if eq $.Offbox.LastStatus "running"}}Fut...{{else}}—{{end}} + {{T "backups_apps.3_mentes"}} + {{if eq $.Offbox.LastStatus "ok"}}{{T "backups_apps.sikeres"}}{{else if eq $.Offbox.LastStatus "error"}}{{T "backups_apps.hiba"}}{{else if eq $.Offbox.LastStatus "running"}}{{T "backups_apps.fut"}}{{else}}—{{end}} restic → {{$.Offbox.Host}} - {{if $.Offbox.LastRun}}Utolsó: {{timeAgoStr $.Offbox.LastRun}}{{end}} - Helyreállítási egység, titkosítva + {{if $.Offbox.LastRun}}{{T "backups_apps.utolso_4"}}{{end}} + {{T "backups_apps.helyreallitasi_egyseg_titkositva"}}
{{else if eq .Tier3State "escrow_pending"}}
- 3. mentés - Kulcsletétre vár - A távoli mentés a titkosítási kulcs letétbe helyezéséig szünetel + {{T "backups_apps.3_mentes"}} + {{T "backups_apps.kulcsletetre_var"}} + {{T "backups_apps.a_tavoli_mentes_a_titkositasi"}}
{{else if eq .Tier3State "off"}}
- 3. mentés - Kikapcsolva - Ez az alkalmazás nincs kijelölve távoli mentésre + {{T "backups_apps.3_mentes"}} + {{T "backups_apps.kikapcsolva"}} + {{T "backups_apps.ez_az_alkalmazas_nincs_kijelolve"}}
{{else}}
- 3. mentés - Nincs beállítva - távoli (offsite) - Nincs távoli mentési cél beállítva + {{T "backups_apps.3_mentes"}} + {{T "backups_apps.nincs_beallitva"}} + {{T "backups_apps.tavoli_offsite"}} + {{T "backups_apps.nincs_tavoli_mentesi_cel_beallitva"}}
{{end}} @@ -383,22 +380,22 @@ function toggleBackupDetail(header) { function triggerBackupFromPage() { const btn = document.getElementById('backup-page-btn'); btn.disabled = true; - btn.textContent = 'Mentés indítása...'; + btn.textContent = '{{T "backups_apps.mentes_inditasa"}}'; fetch('/api/backup/run', { method: 'POST', headers: csrfHeaders() }) .then(r => r.json()) .then(data => { if (data.ok) { - btn.textContent = 'Mentés folyamatban...'; + btn.textContent = '{{T "backups_apps.mentes_folyamatban"}}'; btn.classList.add('loading'); startBackupPolling(); } else { - btn.textContent = data.error || 'Hiba'; - setTimeout(() => { btn.textContent = 'Mentés most'; btn.disabled = false; }, 3000); + btn.textContent = data.error || '{{T "backups_apps.hiba"}}'; + setTimeout(() => { btn.textContent = '{{T "backups_apps.mentes_most"}}'; btn.disabled = false; }, 3000); } }) .catch(() => { - btn.textContent = 'Hiba'; - setTimeout(() => { btn.textContent = 'Mentés most'; btn.disabled = false; }, 3000); + btn.textContent = '{{T "backups_apps.hiba"}}'; + setTimeout(() => { btn.textContent = '{{T "backups_apps.mentes_most"}}'; btn.disabled = false; }, 3000); }); } diff --git a/controller/internal/web/templates/backups_escrow.html b/controller/internal/web/templates/backups_escrow.html index cdc059d..ee7ccda 100644 --- a/controller/internal/web/templates/backups_escrow.html +++ b/controller/internal/web/templates/backups_escrow.html @@ -7,8 +7,8 @@ @@ -20,7 +20,7 @@ polls and reloads itself when the agent says ready. -->
{{.EscrowNotReadyMessage}}
-

Ehhez nem kell semmit tenned. Ha fél óra múlva is ezt látod, szólj az üzemeltetőnek.

+

{{T "backups_escrow.ehhez_nem_kell_semmit_tenned"}}

{{else if not .AgentSupported}} -
A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik. Próbálja újra később.
+
{{T "backups_escrow.a_funkciohoz_az_ugynok_frissitese"}}
{{else}}
-

1. Előfeltételek ellenőrzése

+

{{T "backups_escrow.1_elofeltetelek_ellenorzese"}}

-

Ellenőrzés folyamatban…

+

{{T "backups_escrow.ellenorzes_folyamatban"}}

- A „Most nem” csak azt jelenti, hogy nem zavarunk vele többet a kezdőlapon. A mentéseid ettől - megmaradnak, és ez az oldal a Biztonsági mentés → Távoli mentés oldalról - bármikor újra elérhető. + {{T "recovery.a_most_nem_csak_azt"}}

@@ -172,34 +158,32 @@ the question end instead of returning at every login. A confirmation that still said "we do not delete" would be the most consequential false sentence on the whole surface. */}}
-

Biztosan nem kéred vissza a korábbi mentéseket?

-

Ha megerősíted:

+

{{T "recovery.biztosan_nem_kered_vissza_a"}}

+

{{T "recovery.ha_megerosited"}}

    -
  • a korábbi mentéseket most félretesszük, és {{.AbandonGraceDays}} nap múlva véglegesen töröljük — a lezárt helyreállítási csomaggal együtt;
  • -
  • a {{.AbandonGraceDays}} nap alatt meggondolhatod magad: ha előkerül a helyreállítási kódod, a mentéseid visszaszerezhetők, és a törlés elmarad;
  • -
  • a pontos dátumot a Távoli mentés oldalon végig látni fogod, és emlékeztetni is fogunk;
  • -
  • a gép új, üres mentési tárolót kezd, és mostantól oda ment;
  • -
  • a törlés után ez a kérdés nem jön vissza többé — mert nem marad mit visszaszerezni.
  • +
  • {{T "recovery.a_korabbi_menteseket_most_felretesszuk"}}
  • +
  • {{T "recovery.a_nap_alatt_meggondolhatod_magad"}}
  • +
  • {{T "recovery.a_pontos_datumot_a_tavoli"}}
  • +
  • {{T "recovery.a_gep_uj_ures_mentesi"}}
  • +
  • {{T "recovery.a_torles_utan_ez_a"}}
-

Ha csak most nincs kéznél a kódod, válaszd inkább a „Most nem” lehetőséget — az semmit nem indít el.

+

{{T "recovery.ha_csak_most_nincs_keznel"}}

{{.CSRFField}} - +
- Mégsem + {{T "recovery.megsem"}}
{{else}}

- Ha a helyreállítási kódod véglegesen elveszett, és tudomásul veszed, hogy a korábbi mentések - így nem nyithatók meg többé: + {{T "recovery.ha_a_helyreallitasi_kodod_veglegesen"}} {{if .CanSetAside}} - nem kérem vissza a korábbi adatokat. + {{T "recovery.nem_kerem_vissza_a_korabbi"}} {{else}} - ez a lehetőség akkor válik elérhetővé, ha a gép már újra kapcsolódott a házon kívüli - tárhelyhez. Addig a mentéseid érintetlenül megmaradnak. + {{T "recovery.ez_a_lehetoseg_akkor_valik"}} {{end}}

{{end}} diff --git a/controller/internal/web/templates/tier2_config.html b/controller/internal/web/templates/tier2_config.html index b8cdda2..b41f0eb 100644 --- a/controller/internal/web/templates/tier2_config.html +++ b/controller/internal/web/templates/tier2_config.html @@ -2,8 +2,8 @@ {{template "layout_start" .}} {{if .Flash}}
{{.Flash}}
{{end}} @@ -12,51 +12,44 @@
{{with .Tier2}}

- A 2. mentés egy másik fizikai meghajtóra készít másolatot az alkalmazás - helyreállítási csomagjáról és adatairól. Ez az egyetlen off-drive védelem a böngészhető - felhasználói fájlokhoz (a teljes rendszermentés/PBS nem éri el ezeket). + {{T "tier2_config.a_2_mentes_egy_masik"}}

{{if not .IsHDDApp}}
- Ennek az alkalmazásnak az adatai a belső rendszerlemezen vannak, amelyek - már szerepelnek a teljes rendszermentésben (PBS). A 2. (off-drive) másolat - kiegészítő, és elsősorban a külső adatmeghajtón tárolt alkalmazásokhoz készül — ehhez az - alkalmazáshoz nincs külön teendő. + {{T "tier2_config.ennek_az_alkalmazasnak_az_adatai"}}
{{else}} -

Jelenlegi állapot

+

{{T "tier2_config.jelenlegi_allapot"}}

- 2. mentés - {{if .Disabled}}Kikapcsolva{{else}}Bekapcsolva{{end}} + {{T "tier2_config.2_mentes"}} + {{if .Disabled}}{{T "tier2_config.kikapcsolva"}}{{else}}{{T "tier2_config.bekapcsolva"}}{{end}}
{{if .NoTarget}}
- Cél - Nincs elérhető off-drive cél + {{T "tier2_config.cel"}} + {{T "tier2_config.nincs_elerheto_off_drive_cel"}}
- Megjegyzés + {{T "tier2_config.megjegyzes"}} {{.NoTargetReason}}
{{else}}
- Cél meghajtó - {{.EffectiveLabel}}{{if .EffectiveIsSSD}} — csak DB/konfiguráció{{end}} + {{T "tier2_config.cel_meghajto"}} + {{.EffectiveLabel}}{{if .EffectiveIsSSD}} {{T "tier2_config.csak_db_konfiguracio"}}{{end}}
- Kiválasztás módja - {{if .Preferred}}kézi választás{{else}}automatikus{{end}} — {{.EffectiveDesc}} + {{T "tier2_config.kivalasztas_modja"}} + {{if .Preferred}}{{T "tier2_config.kezi_valasztas"}}{{else}}{{T "tier2_config.automatikus_kisbetu"}}{{end}} — {{.EffectiveDesc}}
{{end}}
{{if .EffectiveIsSSD}}
- Jelenleg csak a belső SSD érhető el 2. célként, ezért csak az adatbázis és a konfiguráció - másolódik. A belső rendszerlemez kicsi, ezért a nagy fájlok off-drive mentéséhez egy - 2. adatmeghajtó szükséges (hogy a rendszerlemez ne teljen meg). + {{T "tier2_config.jelenleg_csak_a_belso_ssd"}}
{{end}} @@ -65,25 +58,24 @@
- + {{if not .Alternatives}}
- Nincs másik adatmeghajtó — automatikus cél a belső SSD (csak DB/konfiguráció). Egy 2. - adatmeghajtó hozzáadásával a teljes adat is off-drive menthető. + {{T "tier2_config.nincs_masik_adatmeghajto_automatikus_cel"}}
{{end}}
- + {{end}} {{end}} diff --git a/controller/internal/web/testdata/i18n_parity/backups_apps_stale_copy.html b/controller/internal/web/testdata/i18n_parity/backups_apps_stale_copy.html new file mode 100644 index 0000000..eeeea2e --- /dev/null +++ b/controller/internal/web/testdata/i18n_parity/backups_apps_stale_copy.html @@ -0,0 +1,1585 @@ + + + + + + + + Alkalmazás mentések — Felhom.eu + + + + + + + + +
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +

Alkalmazás-mentések (adatbázis + konfiguráció)

+

Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.

+ + +
+

Ütemezés

+
+
+ Adatbázis mentés + 02:30 + Következő: 2026-09-14 05:12 +
+
+
+ +
+ Utolsó adatbázis mentés: + 2026-09-14 05:12 (# napja) +
+ +
+
+ +
+
+ + +
+

Adatbázisok

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AlkalmazásTípusMéretUtolsóÉrvényesítésÁllapot
kimaiMariaDB–– + + – + + + + Hiba + +
bookstackMariaDB1.0 MB09-14 05:12 + + 12 tábla + + + + OK + +
immichPostgreSQL2.0 MB09-14 05:12 + + Hiba + + + + OK + +
rommPostgreSQL3.0 MB09-14 05:12 + + – + + + + OK + +
+
+ +
+ + + +
+

Alkalmazások mentési állapota

+ + +
+ Felhasználói adatokról nincs biztonsági mentés.
+ A szerveren tárolt fotók, dokumentumok és egyéb fájlok jelenleg csak egy példányban léteznek. + Külső meghajtó csatlakoztatásával biztonsági másolat készíthető a 3-2-1 szabály szerint. + Meghajtó beállítása → +
+ + + +
+ +
+ + App removed +
+ + Eltávolítva — visszaállítható + HDD egy + + +
+ ▶ +
+ +
+ +
+ +
+ + App disconnected +
+ + Meghajtó leválasztva + + +
+ ▶ +
+ +
+ +
+ +
+ + App hdd +
+ + HDD egy + 12 GB + + +
+ ▶ +
+ +
+ +
+ +
+ + App volume +
+ + Konfig + DB + Adatok + + +
+ ▶ +
+ +
+ +
+ +
+ + App confonly +
+ + Konfig + + +
+ ▶ +
+ +
+ +
+ +
+ + App inact1 +
+ + Konfig + Adatok + + +
+ ▶ +
+ +
+ +
+ +
+ + App inact2 +
+ + Konfig + Adatok + + +
+ ▶ +
+ +
+ +
+ +
+ + App inact3 +
+ + Konfig + Adatok + + +
+ ▶ +
+ +
+ +
+ +
+ + App okrun +
+ + Konfig + + +
+ ▶ +
+ +
+ +
+ +
+ + App oksucc +
+ + Konfig + + +
+ ▶ +
+ +
+ +
+ +
+ + App nosucc +
+ + Konfig + + +
+ ▶ +
+ +
+ +
+ +
+ + App nosucc2 +
+ + Konfig + + +
+ ▶ +
+ +
+ +
+ +
+ + App t2err +
+ + Konfig + + +
+ ▶ +
+ +
+ + +
+ + + + + + + +
+ + + + diff --git a/controller/scripts/i18n_extract.py b/controller/scripts/i18n_extract.py index 6d51f0c..0968bf7 100644 --- a/controller/scripts/i18n_extract.py +++ b/controller/scripts/i18n_extract.py @@ -43,7 +43,9 @@ ASCII_HU = re.compile(r"\b(Fut|Nincs|Igen|Nem|Hiba|Mentve|Rendben|Adatok|Napi|He r"Ismeretlen|Szabad|Foglalt|Kijelentkezes|Napok|nap|perc|ora|" r"Megszakadt|Elavult|Csak|kompatibilis|Rendszermonitor|Most nem|" # slice 1 release A review: left behind on dashboard..settings_notifications - r"Folyamat|Titkos|Processzor|Hamarosan|aldomain|adatai|Figyelem|pelda)\b", re.I) + r"Folyamat|Titkos|Processzor|Hamarosan|aldomain|adatai|Figyelem|pelda|" + # slice 1 release B review + r"Konfig|Megtartva|helyi|pl|Befejezve|automatikus|jelenleg|kedd|szerda|szombat|szint)\b", re.I) INLINE = {"strong", "em", "b", "i", "br", "code", "small", "a", "kbd", "u"} # NOT span: it is layout here VOID = {"br"} diff --git a/controller/scripts/i18n_missing_gate.py b/controller/scripts/i18n_missing_gate.py index d4d135f..d50b4c7 100644 --- a/controller/scripts/i18n_missing_gate.py +++ b/controller/scripts/i18n_missing_gate.py @@ -38,7 +38,7 @@ TEMPLATE_ROOTS = [os.path.join(CTRL, "internal", "web", "templates")] MARKER = re.compile(r'\{\{\s*T\s+"([A-Za-z0-9_.\-]+)"\s*\}\}') EN_MISSING_CEILING = 0 -HU_FORMAL_CEILING = 10 # raised 6 -> 10 in slice 1 release A: the converted pages carry 4 more (R-516), not changed (parity) +HU_FORMAL_CEILING = 12 # 6 -> 10 (release A) -> 12 (release B): converted copy carries more „ön" forms (R-516), unchanged by rule EN_FORBIDDEN = re.compile(r"\b(please|kindly)\b", re.I) diff --git a/controller/scripts/retrieval_promise_gate.py b/controller/scripts/retrieval_promise_gate.py index dbb866e..0f2f9b9 100644 --- a/controller/scripts/retrieval_promise_gate.py +++ b/controller/scripts/retrieval_promise_gate.py @@ -118,6 +118,39 @@ ALLOWLIST_EN = { "= layout.html 'Addig még visszaszerezheted őket...': R-302's TRUE branch.", ("layout.html", "whether your recovery code can still get them back"): "= layout.html 'Hogy ezek még visszaszerezhetők-e': the cautious QUESTION branch.", + # slice 1 release B — mirrors of registered Hungarian claims + ("backups_apps.html", "it can be restored per app"): + "= backups_apps.html 'alkalmazásonként visszaállítható': per-app LOCAL restore, no recovery code.", + ("backups_apps.html", "Removed — restorable"): + "= backups_apps.html 'Eltávolítva — visszaállítható' (R-487): the kept unit on a connected drive.", + ("backups_remote.html", "Your earlier off-site backups can be retrieved."): + "= backups_remote.html 'mentéseid visszaszerezhetők.': the RecoveryOffer entry point, gated on the hub.", + ("backups_remote.html", "your backups can be retrieved, and the deletion is cancelled."): + "= backups_remote.html 'a mentéseid visszaszerezhetők, és a törlés elmarad.': R-302 TRUE branch.", + ("backups_remote.html", "whether your recovery code can still get them back"): + "= backups_remote.html 'Hogy ezek még visszaszerezhetők-e': the QUESTION branch.", + ("recovery.html", "your backups can be retrieved, and the deletion is cancelled;"): + "= recovery.html 'a mentéseid visszaszerezhetők, és a törlés elmarad;': the confirmation screen.", + # slice 1 release B — English claims whose HUNGARIAN escapes the Hungarian stems (split verbs: + # „állíthatók vissza", „hozod vissza"). The English gate saw them first; the Hungarian blind spot + # is a register row (R-564). Each is registered on its own merits: + ("backups_remote.html", "Remote backups can be restored after a complete failure only if you create the recovery code."): + "a PRECONDITION, not a promise: restorable only IF the code exists — true by the escrow design (hu: " + "'csak akkor állíthatók vissza … ha létrehozza').", + ("backups_escrow.html", "the remote backups can be restored ONLY"): + "the same precondition stated on the ceremony page, restrictive by construction (hu: 'CSAK ezzel a " + "kóddal állíthatók vissza').", + ("backups_restore.html", "bringing back only the missing files"): + "describes the three actions offered on the NEXT page for an app with a backup in the store; each is " + "gated on the store's own listing, no recovery code involved.", + ("backups_restore_wizard.html", "whether to bring back only the missing files"): + "the wizard's own choice, rendered after preparation; the action beside it is what it names.", + ("backups_restore_wizard.html", "does not bring back your own files"): + "a NEGATIVE statement — says what the check does not restore.", + ("backups_restore_wizard.html", "2. Bring back missing files"): + "a heading for the action directly below it.", + ("backups_restore_wizard.html", "Bring back missing files"): + "the button label of that action.", } TEMPLATE_COMMENT = re.compile(r"\{\{/\*.*?\*/\}\}", re.S)