M24: implement privacy governance

This commit is contained in:
NuklearRabbit
2026-08-10 15:56:03 +02:00
parent f0f1be83ae
commit 0935901f11
29 changed files with 920 additions and 11 deletions
+7
View File
@@ -16,6 +16,7 @@ import demoNl from "./locales/nl-BE/demo.json";
import errorsNl from "./locales/nl-BE/errors.json";
import accessibilityNl from "./locales/nl-BE/accessibility.json";
import operationsNl from "./locales/nl-BE/operations.json";
import privacyNl from "./locales/nl-BE/privacy.json";
import commonEn from "./locales/en-GB/common.json";
import authEn from "./locales/en-GB/auth.json";
@@ -32,6 +33,7 @@ import demoEn from "./locales/en-GB/demo.json";
import errorsEn from "./locales/en-GB/errors.json";
import accessibilityEn from "./locales/en-GB/accessibility.json";
import operationsEn from "./locales/en-GB/operations.json";
import privacyEn from "./locales/en-GB/privacy.json";
import commonFr from "./locales/fr-BE/common.json";
import authFr from "./locales/fr-BE/auth.json";
@@ -48,6 +50,7 @@ import demoFr from "./locales/fr-BE/demo.json";
import errorsFr from "./locales/fr-BE/errors.json";
import accessibilityFr from "./locales/fr-BE/accessibility.json";
import operationsFr from "./locales/fr-BE/operations.json";
import privacyFr from "./locales/fr-BE/privacy.json";
export const SUPPORTED_LANGUAGES = ["nl-BE", "en-GB", "fr-BE"] as const;
export type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number];
@@ -70,6 +73,7 @@ export const NAMESPACES = [
"errors",
"accessibility",
"operations",
"privacy",
] as const;
function readStoredLanguage(): SupportedLanguage {
@@ -122,6 +126,7 @@ void i18n
errors: errorsNl,
accessibility: accessibilityNl,
operations: operationsNl,
privacy: privacyNl,
},
"en-GB": {
common: commonEn,
@@ -139,6 +144,7 @@ void i18n
errors: errorsEn,
accessibility: accessibilityEn,
operations: operationsEn,
privacy: privacyEn,
},
"fr-BE": {
common: commonFr,
@@ -156,6 +162,7 @@ void i18n
errors: errorsFr,
accessibility: accessibilityFr,
operations: operationsFr,
privacy: privacyFr,
},
},
});
@@ -12,7 +12,8 @@
"knowledge": "Knowledge",
"integrations": "Integrations",
"audit": "Audit trail",
"users": "Users"
"users": "Users",
"privacy": "Privacy"
},
"primaryNavLabel": "Primary navigation",
"mobileNavLabel": "Mobile navigation",
@@ -42,7 +43,8 @@
"quality": "Quality workbench",
"knowledge": "Procedure assistant",
"integrations": "Automation and integration status",
"audit": "Audit history"
"audit": "Audit history",
"privacy": "Privacy management"
},
"switchRole": "Switch role",
"switchRoleTitle": "Switch demo role",
@@ -0,0 +1,19 @@
{
"eyebrow": "Assure / Governance",
"title": "Privacy management",
"description": "Export personal data, monitor retention and anonymise safely with a complete audit trail.",
"managerOnly": "These governance functions are available to Operations Managers only.",
"loading": "Loading privacy policy…",
"error": "The privacy action could not be completed. Check the reference and retention period.",
"policyTitle": "Retention policy",
"totalCustomers": "Customers",
"eligibleCustomers": "Eligible",
"anonymizedCustomers": "Anonymised",
"bookingRetention": "Minimum booking retention",
"auditRetention": "Audit retention",
"days_one": "{{count}} day",
"days_other": "{{count}} days",
"customerRef": "Customer reference",
"exports": {"title":"Data exports","detail":"Download a customer file as JSON or a bounded audit export as CSV. Every export is logged.","customer":"Download customer file","audit":"Download audit CSV"},
"anonymize": {"title":"Anonymise customer","detail":"Irreversible. Active bookings and bookings newer than {{days}} days block this action.","reason":"Reasoned justification","confirmation":"Type {{ref}} to confirm","submit":"Anonymise permanently","working":"Anonymising…","anonymized":"{{ref}} was anonymised.","already_anonymized":"{{ref}} was already anonymised."}
}
@@ -12,7 +12,8 @@
"knowledge": "Connaissances",
"integrations": "Intégrations",
"audit": "Piste d'audit",
"users": "Utilisateurs"
"users": "Utilisateurs",
"privacy": "Confidentialité"
},
"primaryNavLabel": "Navigation principale",
"mobileNavLabel": "Navigation mobile",
@@ -42,7 +43,8 @@
"quality": "Atelier qualité",
"knowledge": "Assistant de procédures",
"integrations": "Statut d'automatisation et d'intégration",
"audit": "Historique d’audit"
"audit": "Historique d’audit",
"privacy": "Gestion de la confidentialité"
},
"switchRole": "Changer de rôle",
"switchRoleTitle": "Changer de rôle de démo",
@@ -0,0 +1,19 @@
{
"eyebrow": "Surveiller / Gouvernance",
"title": "Gestion de la confidentialité",
"description": "Exportez les données personnelles, contrôlez la conservation et anonymisez avec une piste d’audit complète.",
"managerOnly": "Ces fonctions de gouvernance sont réservées aux responsables des opérations.",
"loading": "Chargement de la politique…",
"error": "L’action n’a pas pu être exécutée. Vérifiez la référence et la durée de conservation.",
"policyTitle": "Politique de conservation",
"totalCustomers": "Clients",
"eligibleCustomers": "Éligibles",
"anonymizedCustomers": "Anonymisés",
"bookingRetention": "Conservation minimale des réservations",
"auditRetention": "Conservation de l’audit",
"days_one": "{{count}} jour",
"days_other": "{{count}} jours",
"customerRef": "Référence client",
"exports": {"title":"Exports de données","detail":"Téléchargez un dossier client JSON ou un export d’audit CSV limité. Chaque export est journalisé.","customer":"Télécharger le dossier","audit":"Télécharger l’audit CSV"},
"anonymize": {"title":"Anonymiser un client","detail":"Irréversible. Les réservations actives ou de moins de {{days}} jours bloquent l’action.","reason":"Motif justifié","confirmation":"Saisissez {{ref}} pour confirmer","submit":"Anonymiser définitivement","working":"Anonymisation…","anonymized":"{{ref}} a été anonymisé.","already_anonymized":"{{ref}} était déjà anonymisé."}
}
@@ -12,7 +12,8 @@
"knowledge": "Kennis",
"integrations": "Integraties",
"audit": "Auditgeschiedenis",
"users": "Gebruikers"
"users": "Gebruikers",
"privacy": "Privacy"
},
"primaryNavLabel": "Hoofdnavigatie",
"mobileNavLabel": "Mobiele navigatie",
@@ -42,7 +43,8 @@
"quality": "Kwaliteitswerkbank",
"knowledge": "Procedureassistent",
"integrations": "Automatiserings- en integratiestatus",
"audit": "Auditgeschiedenis"
"audit": "Auditgeschiedenis",
"privacy": "Privacybeheer"
},
"switchRole": "Wissel van rol",
"switchRoleTitle": "Wissel van demo-rol",
@@ -0,0 +1,19 @@
{
"eyebrow": "Bewaken / Governance",
"title": "Privacybeheer",
"description": "Exporteer persoonsgegevens, bewaak bewaartermijnen en anonimiseer veilig met een volledig auditspoor.",
"managerOnly": "Deze governancefuncties zijn uitsluitend beschikbaar voor Operationsmanagers.",
"loading": "Privacybeleid laden…",
"error": "De privacyactie kon niet worden uitgevoerd. Controleer de referentie en bewaartermijn.",
"policyTitle": "Bewaarbeleid",
"totalCustomers": "Klanten",
"eligibleCustomers": "Anonimiseerbaar",
"anonymizedCustomers": "Geanonimiseerd",
"bookingRetention": "Minimum boekingsretentie",
"auditRetention": "Auditretentie",
"days_one": "{{count}} dag",
"days_other": "{{count}} dagen",
"customerRef": "Klantreferentie",
"exports": {"title":"Gegevensexport","detail":"Download een klantdossier als JSON of een begrensde auditexport als CSV. Elke export wordt gelogd.","customer":"Klantdossier downloaden","audit":"Audit CSV downloaden"},
"anonymize": {"title":"Klant anonimiseren","detail":"Onomkeerbaar. Actieve boekingen en boekingen jonger dan {{days}} dagen blokkeren deze actie.","reason":"Gemotiveerde reden","confirmation":"Typ {{ref}} ter bevestiging","submit":"Definitief anonimiseren","working":"Anonimiseren…","anonymized":"{{ref}} is geanonimiseerd.","already_anonymized":"{{ref}} was al geanonimiseerd."}
}