feat(cms): add recovery history and operational reliability tools
CI / check (push) Failing after 22s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped

This commit is contained in:
Simo committed 2026-09-09 21:57:56 +02:00
1 parent 89526af344
commit 1ef405be0a
92 files changed
+6384 -267

No files matched your search

+140 -3
View File
@@ -1090,7 +1090,8 @@
"guilds": "Groepen",
"shop": "Winkel",
"hint": "Typ om te zoeken naar gebruikers, artikelen, kamers, groepen en winkelartikelen."
}
},
"operationsCenter": "Operatiecentrum"
},
"dashboard": {
"title": "Dashboard",
@@ -2033,6 +2034,40 @@
"acceptBulk": "Prijzen overnemen in concept",
"previous": "Vorige",
"next": "Volgende"
},
"integrity": {
"title": "Catalogusintegriteit",
"description": "Controleer verwijzingen, categoriepaden, identificaties en meubeliconen. Een controle wijzigt geen records.",
"catalog": "Catalogus",
"normal": "Normale catalogus",
"bc": "Builders Club",
"refresh": "Opnieuw controleren",
"working": "Controleren…",
"failed": "De bewerking kon niet worden voltooid. Probeer opnieuw.",
"stalePreview": "De catalogus is sinds het voorbeeld gewijzigd. Maak een nieuw voorbeeld voordat je reparaties toepast.",
"applied": "{count} categorieën opnieuw aan de catalogushoofdmap gekoppeld.",
"iconsUnavailable": "De map met iconen kon niet worden gelezen. De beschikbaarheid van iconen is niet gecontroleerd.",
"healthy": "Geen problemen gevonden in de voltooide controles.",
"total": "{count} problemen gevonden. {shown} weergegeven.",
"open": "Openen",
"reference": "Verwijzing: {value}",
"repairHint": "Bekijk categorieën waarvan de bovenliggende categorie niet meer bestaat. Alleen deze categorieën worden naar de hoofdmap verplaatst; alle records blijven behouden. Cycli, ontbrekende meubels, iconen en conflicterende identificaties vereisen afzonderlijke controle.",
"preview": "Veilige reparaties bekijken",
"planned": "{count} categorieën worden verplaatst:",
"parentChange": "bovenliggende categorie #{from} → catalogushoofdmap",
"apply": "Getoonde reparaties toepassen",
"legacyTitle": "Geavanceerd onderhoud",
"legacyHint": "Deze bestaande onderhoudstools kunnen identificaties herschrijven en dubbele records samenvoegen of verwijderen. Ze staan los van de integriteitscontrole die niets verwijdert en de vooraf getoonde reparatie van bovenliggende categorieën.",
"issues": {
"missing_furniture": "Aanbieding verwijst naar ontbrekende meubels",
"invalid_item_ids": "Ongeldige meubelidentificaties",
"missing_page": "Aanbieding verwijst naar ontbrekende categorie",
"unreachable_page": "Onbereikbare categorie",
"category_cycle": "Categoriepad bevat een cyclus",
"missing_icon": "Ontbrekend meubelicoon",
"invalid_offer_id": "Ongeldige aanbiedingsidentificatie",
"duplicate_offer_id": "Herhaalde aanbiedingsidentificatie"
}
}
},
"shop": {
@@ -2782,6 +2817,51 @@
"colStatus": "Status",
"statusUnknown": "onbekend",
"searchPlaceholder": "Zoek op gebruikersnaam…"
},
"history": {
"preview": "Herstel bekijken",
"title": "Een opgeslagen wijziging herstellen",
"description": "Vergelijk de huidige waarden met de vorige waarden voordat je bevestigt. Alleen categorie-instellingen, aanbiedingsprijzen of nieuwsinhoud worden hersteld. Verwijderde gegevens en de categoriehiërarchie kunnen hier niet worden hersteld.",
"loading": "Laden…",
"unavailable": "Deze revisie is niet beschikbaar of je hebt geen toestemming om deze te herstellen.",
"conflict": "Dit record is na de geselecteerde wijziging aangepast. Vernieuw en bekijk de nieuwste geschiedenis voordat je herstelt.",
"failed": "Het herstellen is mislukt. Vernieuw de pagina en probeer het opnieuw.",
"field": "Veld",
"current": "Huidige waarde",
"restore": "Te herstellen waarde",
"confirm": "Herstel bevestigen",
"restoring": "Herstellen…",
"fields": {
"caption": "Categorienaam",
"captionSave": "Interne categorienaam",
"pageLayout": "Categorie-indeling",
"enabled": "Ingeschakeld",
"visible": "Zichtbaar",
"clubOnly": "Alleen clubleden",
"vipOnly": "Alleen VIP-leden",
"minRank": "Minimale rang",
"iconImage": "Categoriepictogram",
"iconColor": "Pictogramkleur",
"pageHeadline": "Kopafbeelding",
"pageTeaser": "Voorbeeldafbeelding",
"pageSpecial": "Speciale afbeelding",
"pageText1": "Primaire tekst",
"pageText2": "Secundaire tekst",
"pageTextDetails": "Detailtekst",
"pageTextTeaser": "Voorbeeldtekst",
"includes": "Inbegrepen categorieën",
"costCredits": "Prijs in credits",
"costPoints": "Prijs in punten",
"pointsType": "Puntenvaluta",
"title": "Nieuwstitel",
"slug": "Nieuwsadres",
"image": "Nieuwsafbeelding",
"shortStory": "Samenvatting",
"fullStory": "Artikelinhoud",
"status": "Publicatiestatus",
"publishAt": "Geplande publicatie",
"publishedAt": "Publicatiedatum"
}
}
},
"wordfilter": {
@@ -3574,7 +3654,17 @@
"clearAssignment": "Toewijzing verwijderen",
"openOperation": "Gerelateerd onderdeel openen",
"releaseOccurrences": "Gebeurtenissen per release",
"releaseScope": "Deze releases komen voor in de bewaarde gegevens. De eerste beschikbare gebeurtenis bewijst niet welke release de fout heeft geïntroduceerd."
"releaseScope": "Deze releases komen voor in de bewaarde gegevens. De eerste beschikbare gebeurtenis bewijst niet welke release de fout heeft geïntroduceerd.",
"releaseFilter": "Versie",
"allReleases": "Alle versies",
"period": "Periode",
"allRetained": "Alle bewaarde gebeurtenissen",
"last24h": "Afgelopen 24 uur",
"last7d": "Afgelopen 7 dagen",
"sort": "Volgorde",
"recentFirst": "Nieuwste eerst",
"frequentFirst": "Meest voorkomend eerst",
"filterScope": "Aantallen gelden voor passende bewaarde gebeurtenissen. Groepsstatus en nieuwste details blijven actueel over alle versies."
},
"installation": {
"title": "Installatiediagnose",
@@ -3614,7 +3704,11 @@
"refreshHistory": "Geschiedenis vernieuwen",
"showMoreItems": "Nog 50 items tonen",
"uncertainOutcome": "Een onderbroken item heeft mogelijk al lokale gegevens gewijzigd. Het wordt niet opnieuw geprobeerd.",
"reviewLocalData": "Lokale gegevens controleren"
"reviewLocalData": "Lokale gegevens controleren",
"ownerHistory": "Je imports en reparaties, nieuwste eerst. Herhalen voert voltooide of onzekere onderdelen nooit opnieuw uit.",
"previousPage": "Vorige",
"nextPage": "Volgende",
"page": "Pagina {page}"
},
"operations": {
"title": "Aandacht nodig",
@@ -3708,6 +3802,49 @@
"retry": "Opnieuw proberen",
"description": "Zoek pagina’s, gebruikers, meubels, cataloguscategorieën, artikelen en supporttickets.",
"partialError": "Sommige resultaten konden niet worden geladen. Probeer opnieuw."
},
"permissionPreview": {
"title": "Voorbeeld van roltoegang",
"description": "Bekijk CMS-toegang zonder een sessie te wijzigen of een gebruiker over te nemen.",
"back": "Terug naar rechten",
"role": "Rol",
"show": "Toegang bekijken",
"missing": "Selecteer een bestaande rol.",
"entryAllowed": "Toegang tot housekeeping toegestaan",
"entryDenied": "Geen toegang tot housekeeping: dashboardrecht ontbreekt",
"superAdmin": "Deze rang krijgt momenteel de rechten van de hoogste rang.",
"scope": "Dit voorbeeld toont één rol. Een gebruiker kan extra rollen hebben. Aangepaste navigatie kan toegestane onderdelen verbergen; specifieke gegevens en acties kunnen extra controles vereisen.",
"sections": "Onderdelen",
"allowed": "Toegestaan",
"denied": "Niet toegestaan",
"actions": "CMS-rechten",
"actionScope": "Een toegekend recht omzeilt geen controles op toegang, ranghiërarchie, eigendom of de specifieke actie.",
"granted": "Toegekend",
"notGranted": "Niet toegekend"
},
"operationsCenter": {
"title": "Operatiecentrum",
"hint": "Volg je opgeslagen imports en reparaties en de gedeelde wachtrij voor catalogusexport.",
"syncTitle": "Bronsynchronisatie",
"syncHint": "Bronsynchronisatie wordt op de eigen pagina uitgevoerd. Er is hier geen opgeslagen geschiedenis of automatische herhaling van mislukte onderdelen. Catalogusexport toont de gedeelde wachtrij en het laatste resultaat; herhalen per onderdeel wordt niet ondersteund.",
"openSync": "Synchronisatie en export openen",
"openImports": "Meubelimports openen"
},
"operationsExport": {
"title": "Catalogusrepository export",
"hint": "Automatische export van bundels, pictogrammen, gamedata, vertalingen en catalogus-SQL. De wachtrij en het laatste resultaat worden gedeeld tussen medewerkers.",
"loadError": "Exportstatus kon niet worden geladen",
"queueError": "Export kon niet worden ingepland",
"loading": "Laden…",
"disabled": "Export is uitgeschakeld. Open synchronisatie om de configuratie te bekijken.",
"active": "Wachten totdat {count} bewerking(en) voltooid zijn.",
"running": "Export wordt uitgevoerd…",
"pending": "{count} update(s) in de exportwachtrij.",
"idle": "Geen updates in de wachtrij.",
"lastCommit": "Laatst gepubliceerde commit:",
"lastAttempt": "Laatste poging: {date}",
"queuing": "Inplannen…",
"queue": "Nu exporteren / opnieuw proberen"
}
},
"mod": {