# -*- coding: utf-8 -*- """Part A — the Hungarian pages: every claim the claim table marks FIX or CUT, plus the nav switch and hreflang. Starts from HEAD each run (idempotent). Every replacement asserts it matched exactly once.""" import html, json, re, sys sys.path.insert(0, __file__.rsplit("/", 1)[0]) from common import * APPS = 56 # measured 2026-10-08: 58 catalog templates minus plant-it (abandoned) and wger (hidden) # ------------------------------------------------------------------ index.html s = head_text("index.html") s = sub1(s, "53 telepíthető nyílt forráskódú alkalmazás, kétszintű automatikus mentés, magyar nyelvű vezérlőpult.", "%d telepíthető alkalmazás, háromszintű automatikus mentés, magyar vagy angol nyelvű vezérlőpult." % APPS) s = sub1(s, '"knowsLanguage": "hu",', '"knowsLanguage": ["hu", "en"],') s = sub1(s, """Kétszintű automatikus mentés
Minden éjjel készül egy helyi másodpéldány egy második meghajtóra, és egy titkosított másolat egy távoli tárhelyre. A megosztott mappáid is benne vannak mindkettőben.
""", """Háromszintű automatikus mentésMinden éjjel készül egy mentés a dobozon, egy másodpéldány egy második meghajtóra (ha van), és egy titkosított másolat egy távoli tárhelyre. A megosztott mappáid a második meghajtón és a távoli másolatban is benne vannak.
""") s = sub1(s, """53 telepíthető alkalmazásEgy magyar nyelvű vezérlőpultból telepíthetők, pár kattintással — parancssor nélkül. Mind nyílt forráskódú, és mind a te gépeden fut.
""", """%d telepíthető alkalmazásA vezérlőpultból telepíthetők, pár kattintással — parancssor nélkül. Szinte mind nyílt forráskódú (a kivételeket az alkalmazások oldalán jelöljük), és mind a te gépeden fut.
""" % APPS) s = sub1(s, """Távoli felügyelet, automatikus frissítésFigyeljük a doboz állapotát, és a vezérlőpult magától frissül a legutóbbi kiadásra — neked nem kell csinálnod semmit. Ha valami elromlik, mi látjuk.
""", """Távoli felügyelet, automatikus frissítésFigyeljük a doboz állapotát. A vezérlőpult magától frissül a legutóbbi kiadásra, és a doboz rendszere is megkapja a biztonsági frissítéseket — neked nem kell csinálnod semmit. Ha valami elromlik, mi látjuk.
Egy alkalmazás új verziója csak akkor jut el hozzád, ha előbb kipróbáltuk. Frissítés előtt friss mentés készül, és ha az új verzió nem indul el rendesen, a doboz magától visszaállítja az előzőt, az adataiddal együtt.
A vezérlőpult magyarul és angolul is használható. A nyelvet a háztartás választja, és a dobozról érkező e-mailek is ezt a nyelvet követik.
Egy törölt fájl visszahozható a mentésből. Hardverhiba esetén az egész rendszer visszaállítható egy új gépre, a titkosított távoli mentésből.
", "Egy törölt fájl visszahozható a mentésből. Ha maga a doboz megy tönkre, az újratelepített rendszerre a titkosított távoli mentésből visszahozhatók az alkalmazásaid adatai — a helyreállítási kóddal.
") s = sub1(s, "Az adataid a te otthonodban maradnak. Senki más nem fér hozzájuk - sem a Google, sem a Microsoft, sem senki más.
", "Az adataid a te otthonodban maradnak, nem a Google vagy a Microsoft szerverein. A távoli mentésbe csak titkosítva kerülnek.
") s = sub1(s, """Egyszeri befektetésNincs havi előfizetés, nincs rejtett költség. A szerver a tiéd, örökre. Csak az áramért fizetsz.
""", """Egyszeri befektetésA gép a tiéd, örökre. Nincs tárhely-előfizetés, ami évről évre drágul: az áramot fizeted, és ha kéred, az üzemeltetést.
""") s = sub1(s, "Soha többé nem veszíted el az adataidat - rendszeres, automatikus mentések.
", "Rendszeres, automatikus mentések három szinten: a dobozon, egy második meghajtón és titkosítva egy távoli tárhelyen.
") s = sub1(s, "Paperless-ngx, BookStack, Outline
", "Paperless-ngx, Docmost, BookStack, Outline
") s = sub1(s, "Tandoor, Plant-it, wger, Actual Budget
", "Tandoor, Mealie, Homebox, Actual Budget
") s = sub1(s, "AdventureLog, Wanderer, Cal.com
", "AdventureLog, Wanderer, Dawarich, Cal.com
") s = sub1(s, "53 alkalmazás — mind 100% nyílt forráskódú", "%d alkalmazás — szinte mind nyílt forráskódú" % APPS) s = sub1(s, "Magyar nyelvű kezelőfelület
", "Magyar vagy angol kezelőfelület
") s = sub1(s, """Helyi másodpéldány + titkosított távoli
""", """A dobozon, második meghajtón, titkosítva távol
""") s = sub1(s, "SSL, tűzfal, VPN védelem
", "HTTPS, titkosított alagút, nyitott port nélkül
") s = sub1(s, "SSD + HDD, RAID védelem
", "SSD + HDD, második meghajtó a mentéseknek
") s = sub1(s, "A 3-2-1 mentési szabályt követve professzionális szintű adatbiztonságot építünk fel – semmi sem vész el, még katasztrófa esetén sem.
", "A 3-2-1 mentési szabályt követve professzionális szintű adatbiztonságot építünk fel – egy katasztrófa után is marad egy titkosított másolat, távol az otthonodtól.
") s = sub1(s, "A TV-re streamelés hamarosan jön, egyelőre böngészőből és mobil appból megy a médiatár.", "A TV-re streamelés (DLNA) még nincs: egyelőre böngészőből és mobil appból megy a médiatár.") s = set_alternates(s, "/", "/en/") s = set_nav(s, "hu", None, "/en/") write("index.html", s) # ------------------------------------------------------------------ technologiak.html s = head_text("technologiak.html") s = s[: s.index("