/**
 * Dutch translations for Cyber-Assistant
 * Beheertool voor een ISMS conform ISO 27001:2022 / ISO 27002:2022 en NIS2
 */
(function() {
  'use strict';

  const translations = {
    app: {
      title: 'Cyber-Assistant',
      subtitle: 'Beheersysteem voor informatiebeveiliging',
      loading: 'ISMS-toepassing wordt geladen...',
      skipLink: 'Ga naar de hoofdinhoud',
      loadingAria: 'Bezig met laden'
    },

    // Header buttons
    header: {
      manual: 'Gebruikershandleiding',
      logout: 'Afmelden',
      presentation: 'Presentatie',
      settings: 'Instellingen',
      editMode: 'Bewerkingsmodus',
      exitEditMode: 'Bewerken afsluiten',
      readOnlyMode: 'Alleen-lezenmodus',
      editModeSubtitle: 'Bewerkingsmodus actief: u kunt gegevens wijzigen en naar de server publiceren.',
      readOnlyNotice: 'Alleen-lezenmodus: activeer de bewerkingsmodus om wijzigingen aan te brengen.',
      viewerReadOnly: 'Uw rol is Lezer — permanente alleen-lezenmodus.',
      darkMode: 'Donkere modus',
      lightMode: 'Lichte modus',
      powderMode: 'Poedermodus',
      authRequired: 'Authenticatie vereist',
      editPasswordPrompt: 'Bewerkingswachtwoord:',
      passwordLabel: 'Wachtwoord',
      validate: 'Bevestigen',
      auditLog: 'Audittrail',
      backToDashboard: 'Terug naar het dashboard',
      themeToggleAria: 'Thema wisselen',
      themeToggleTitle: 'Thema wijzigen',
      autoSaveTitle: 'Laatste automatische opslag',
      connectedUsers: 'Verbonden gebruikers',
      traceability: 'Traceerbaarheid',
      // Herwerking header 2026-07: gebruikersmenu + synchronisatie-indicator
      userMenu: 'Gebruikersmenu',
      themeLabel: 'Thema:',
      syncSynced: 'Gesynchroniseerd',
      syncSaving: 'Opslaan…',
      syncError: 'Sync mislukt',
      syncLocal: 'Automatisch opslaan'
    },

    // Mode banner
    mode: {
      readOnly: 'Alleen-lezenmodus',
      editing: 'Bewerkingsmodus',
      editingSubtitle: 'Wijzigingen worden automatisch opgeslagen'
    },

    // Bewerkingsbanner en coördinatie van de globale serververgrendeling
    modeBanner: {
      readOnly: 'Alleen-lezen',
      editingByYou: 'Bewerkingsmodus actief',
      editingByOther: 'Wordt bewerkt door',
      untilExpiry: 'tot de vergrendeling vervalt',
      // FIX-BANNER-HONESTY (co-editie-audit 2026-07-17): actieve houder = geen aftelling.
      holderActive: 'bewerking bezig',
      // === CSI-CO === (Lot 4, 2026-07-17) "De hand vragen" — beleefd verzoek aan de houder.
      requestHand: 'De hand vragen',
      requestHandTitle: 'Laat de persoon die deze module bewerkt weten dat u wacht',
      requestHandSent: 'Verzoek verzonden',
      requestHandConfirmed: 'Verzoek verzonden — {{name}} wordt verwittigd dat u op deze module wacht.',
      requestHandFailed: 'Verzoek momenteel niet mogelijk — probeer opnieuw.',
      handRequested: '{{name}} wacht op module "{{module}}" — navigeer naar een andere module of verlaat de bewerkingsmodus om ze vrij te geven.',
      lockExpiringSoon: 'vergrendeling vervalt binnenkort',
      lockedShort: 'Vergrendeld',
      takeover: 'Overnemen',
      takeoverTitle: 'Vergrendeling geforceerd vrijgeven (alleen beheerder)',
      takeoverConfirm: 'De vergrendeling van {{name}} geforceerd vrijgeven? Zijn of haar niet-opgeslagen wijzigingen gaan verloren.',
      takeoverSuccess: 'Vergrendeling met succes overgenomen',
      takeoverFailed: 'De vergrendeling kon niet worden overgenomen',
      takeoverDenied: 'Actie voorbehouden aan beheerders',
      acquireOtherTab: "U bewerkt al in een ander venster (ander tabblad, browser of apparaat). Verlaat daar de bewerkingsmodus en probeer het hier opnieuw.",
      acquireFailed: 'Bewerken niet mogelijk: {{name}} is al aan het bewerken',
      lockStolen: 'Een beheerder heeft de bewerking overgenomen. U bevindt zich nu in alleen-lezenmodus.',
      lockExpired: 'Uw bewerkingsvergrendeling is vervallen (verbinding verloren). Activeer de bewerkingsmodus opnieuw om verder te gaan.',
      autoQuitInactivity: 'Bewerkingsmodus uitgeschakeld na 5 min zonder wijzigingen',
      // FIX-I18N-KEYS (audit 2026-06-10)
      acquireNetworkError: 'De bewerkingsvergrendeling kon niet worden gecontroleerd (netwerkprobleem). Probeer het opnieuw.',
      // === CSI-CO === co-editing per cluster (banner contextueel bij de weergegeven module)
      editingModule: 'Module: {{module}}',
      moduleEditedBy: 'Module {{module}} — wordt bewerkt door',
      clusterBusy: 'Module "{{module}}" wordt bewerkt door {{name}} — hier alleen-lezen.',
      clickToRetry: 'klik om opnieuw te proberen'
    },

    // === CSI-BUILD === Updatebanner (tabblad bleef open tijdens een serverupdate)
    updateBanner: {
      newVersion: 'Er is een nieuwe versie van de toepassing beschikbaar.',
      reload: 'Nu bijwerken',
      hardReload: 'De update werd niet overgenomen — voer een geforceerde herlaadactie uit (Ctrl+F5, of Cmd+Shift+R op Mac).',
      dismiss: 'Negeren'
    },

    // === CSI-UPD === Serverupdate via ondertekend ZIP-pakket (Server-editie, beheerder)
    serverUpdate: {
      adminOnly: 'Voorbehouden aan beheerders in servermodus.',
      unavailable: 'Updatedienst niet beschikbaar.',
      timeout: 'Time-out — de update loopt mogelijk nog op de server. Herlaad deze pagina zo meteen om te controleren.',
      notDeployed: 'Updatemodule ontbreekt op de server.',
      notDeployedHelp: 'Deze installatie beschikt nog niet over de updatemodule (update.php). Plaats die één keer handmatig; volgende updates verlopen via dit scherm.',
      cardVersionTitle: 'Geïnstalleerde versie',
      cardVersionDesc: 'Status van de installatie en technische vereisten.',
      installedVersion: 'Versie',
      unknownVersion: 'onbekend',
      lastUpdate: 'Laatste update',
      never: 'nooit via dit scherm',
      capZip: 'ZIP-extensie',
      capWrite: 'Schrijfrechten',
      capDisk: 'Vrije schijfruimte',
      cardUploadTitle: 'Bijwerken met een pakket',
      cardUploadDesc: 'Upload het .zip-pakket van de uitgever. Het wordt geverifieerd (handtekening en controlesommen) voordat er iets wordt gewijzigd.',
      chooseFile: 'Kies een pakket…',
      notAZip: 'Het bestand moet een .zip-archief zijn.',
      fileTooBig: 'Pakket te groot voor de limieten van deze hosting (maximaal 6,5 MB).',
      readError: 'Het bestand kon niet worden gelezen.',
      checking: 'Pakket wordt geverifieerd…',
      planFrom: 'Geïnstalleerde versie:',
      planTo: 'Versie van het pakket:',
      planChanged: 'Vervangen bestanden:',
      planAdded: 'Toegevoegde bestanden:',
      planRemoved: 'Verwijderde bestanden:',
      planUnchanged: 'Ongewijzigde bestanden:',
      applyBtn: 'Update toepassen',
      confirmTitle: 'Update toepassen?',
      confirmBody: 'Vóór elke schrijfactie worden een back-up van de code en een momentopname van de gegevens gemaakt. Bij een fout wordt de vorige versie automatisch hersteld.',
      applying: 'Update bezig — sluit deze pagina niet…',
      applyOk: 'Update toegepast.',
      applyPartial: 'Update toegepast, maar sommige bestanden komen niet overeen met het manifest — controleer de server.',
      editorsActiveTitle: 'Er zijn gebruikers aan het bewerken',
      forceHelp: 'De update forceren onderbreekt hun lopende bewerking.',
      forceAnyway: 'Update forceren',
      reloadNow: 'Toepassing herladen',
      cardRollbackTitle: 'Terugdraaien',
      cardRollbackDesc: 'Herstelt de code van de vorige versie. Gegevens worden niet gewijzigd.',
      backupAvailable: 'Bewaarde versie:',
      noBackup: 'Geen back-up beschikbaar.',
      rollbackBtn: 'Vorige versie herstellen',
      rollbackConfirmTitle: 'Vorige versie herstellen?',
      rollbackConfirmBody: 'De servercode wordt vervangen door de bewaarde versie. Gegevens en accounts worden niet gewijzigd.',
      rollbackOk: 'Vorige versie hersteld.',
      showcaseTitle: 'Serverupdate',
      showcaseBody: 'In de Server-editie worden updates vanuit de toepassing toegepast: u plaatst het pakket van de uitgever en de server doet de rest.',
      showcaseHowTitle: 'Hoe het werkt',
      showcaseHow1: 'Het pakket is ondertekend door de uitgever: een gewijzigd pakket of een pakket van onbekende oorsprong wordt geweigerd vóór er iets wordt geschreven.',
      showcaseHow2: 'Uw gegevens, accounts, instellingen en SSO-configuratie blijven ongemoeid — alleen de toepassingscode wordt vervangen.',
      showcaseHow3: 'Vóór elke update wordt een back-up gemaakt, met terugdraaien in één klik.',
      showcaseMeanwhile: 'In afwachting: in deze editie werkt u bij door de toepassingsbestanden te vervangen (procedure in de installatiegids).',
      errors: {
        signatureInvalid: 'Ongeldige pakkethandtekening — dit pakket komt niet van de uitgever of werd gewijzigd.',
        manifestMissing: 'Dit bestand is geen Cyber-Assistant-updatepakket.',
        manifestNotCanonical: 'Manifest van het pakket onleesbaar of niet-conform.',
        manifestInvalid: 'Ongeldig manifest van het pakket.',
        formatUnsupported: 'Pakketformaat wordt niet ondersteund door deze serverversie.',
        editionMismatch: 'Dit pakket is niet bedoeld voor de Server-editie.',
        migrationsUnsupported: 'Dit pakket vereist een migratie die deze serverversie niet ondersteunt.',
        pathRejected: 'Het pakket bevat een niet-toegelaten bestand — update geweigerd.',
        undeclaredEntry: 'Het pakket bevat een niet-aangegeven bestand — update geweigerd.',
        hashMismatch: 'De inhoud van het pakket komt niet overeen met het manifest (gewijzigd bestand).',
        entryMissing: 'Het pakket is onvolledig.',
        downgrade: 'Dit pakket is ouder dan de geïnstalleerde versie. Gebruik terugdraaien om terug te keren.',
        minVersion: 'Dit pakket vereist een recentere geïnstalleerde versie.',
        stagingTampered: 'Het wachtende pakket werd gewijzigd — upload het opnieuw.',
        noStaging: 'Geen wachtend pakket — upload eerst een bestand.',
        zipUnavailable: 'De PHP-extensie « zip » ontbreekt op deze hosting: bijwerken met een pakket is hier niet beschikbaar (handmatige procedure in de servergids).',
        tooLarge: 'Pakket te groot voor de limieten van deze hosting.',
        tooLargePhp: 'Pakket te groot voor de PHP-limieten van deze hosting.',
        badZip: 'Het archief is onleesbaar.',
        badBase64: 'Het verzonden bestand is onleesbaar.',
        noPackage: 'Geen pakket ontvangen.',
        backupFailed: 'Back-up mislukt vóór de update — er werd niets gewijzigd.',
        rolledBack: 'De update is mislukt — de vorige versie werd hersteld.',
        noBackup: 'Geen back-up beschikbaar.',
        backupCorrupt: 'De back-up is onleesbaar.'
      }
    },

    // === CSI-CO === Leesbare namen van de co-editingclusters (nooit « cluster » op het scherm)
    clusters: {
      coeur: 'Kern van het ISMS',
      pilotage: 'Sturing & documenten',
      analyse: 'Risicoanalyses',
      config: 'Configuratie'
    },

    // Navigation
    nav: {
      dashboard: 'Dashboard',
      controlsISO: 'ISO27002-maatregelen',
      controlsISO27002: 'ISO27002-maatregelen',
      controlsNIS2: 'NIS2-maatregelen',
      recyfControls: 'ReCyF-maatregelen',
      soa: 'Verklaring van toepasselijkheid',
      docReview: 'Normatieve review',
      actions: 'Actieplan',
      risks: 'ISMS-risico\'s',
      threats: 'Dreigingen',
      nonConformities: 'Non-conformiteiten',
      audits: 'Audits',
      managementReviews: 'Directiebeoordelingen',
      stakeholders: 'Belanghebbenden',
      documents: 'Documentstructuur',
      kpis: 'KPI\'s',
      nis2Program: 'Cyberbeveiligingsbudget',
      nis2Socle: 'Beveiligingsbasis',
      criticalAssets: 'Essentiële assets',
      projectRisks: 'Projectrisico\'s',
      riskAnalysis: 'Risicoanalyse',
      impactMatrices: 'Impactmatrix',
      frameworkMapping: 'Transversale mapping',
      bar1Title: 'Fundamenten van het ISMS',
      bar2Title: 'Governance van het ISMS',
      bar3Title: 'Maatregelen van het ISMS',
      bar4Title: 'Beheer van projectrisico\'s',
      bar5Title: 'NIS2-conformiteit',
      ariaLabel: 'Hoofdnavigatie'
    },

    // Dashboard
    dashboard: {
      title: 'ISMS-dashboard',
      subtitle: 'Overzicht van de conformiteit met ISO 27001:2022',
      conformityRate: 'Globale conformiteit',
      implementedControls: 'Geïmplementeerde maatregelen',
      totalActions: 'Lopende acties',
      criticalRisks: 'Kritieke risico\'s',
      openNonConformities: 'Non-conformiteiten',
      projectRiskAnalyses: 'Projectrisicoanalyses',
      criticalAssets: 'Kritieke assets',
      identifiedThreats: 'Geïdentificeerde dreigingen',
      plannedAudits: 'Geplande audits',
      documentStructure: 'Documentstructuur',
      riskAnalysesTile: 'Risicoanalyses',
      managementReviewsTile: 'Directiebeoordelingen',
      exportPdf: 'Exporteren als PDF',
      alertsTitle: 'Waarschuwingen & prioriteiten',
      alertCriticalRisks: 'kritiek(e) risico(\'s) te behandelen',
      alertOverdueActions: 'actie(s) over tijd',
      alertUpcomingAudits: 'audit(s) binnen 30 dagen',
      alertProjectsAtRisk: 'project(en) met hoog risico',
      noAlerts: 'Geen actieve waarschuwingen',
      badgeUrgent: 'Dringend',
      badgeOverdue: 'Over tijd',
      badgePlanned: 'Gepland',
      badgeProjects: 'Projecten',
      chartImplemented: 'Geïmplementeerd',
      chartRemaining: 'Resterend',
      maturityISO: 'ISO27002-maturiteit',
      radarNote: 'Een waarde van 0 betekent dat er geen gekoppelde maatregel is.',
      scoreSMSI: 'ISMS-score',
      scoreISO: 'ISO 27001',
      scoreCyFun: 'NIS2',
      scoreRisks: 'Beheerste risico\'s',
      riskDistribution: 'Risicoverdeling',
      maturityCMM: 'CMM-maturiteit',
      riskMatrix: 'Risicomatrix',
      actionsStatus: 'Status acties',
      controlsByDomain: 'Maatregelen per domein',
      projectRisks: 'Projectrisico\'s',
      recentActivity: 'Recente activiteit',
      iso27001: 'ISO 27001',
      controls: 'Maatregelen',
      actions: 'Acties',
      risks: 'Risico\'s',
      nc: 'NC',
      noActions: 'Geen acties',
      noProjects: 'Geen projecten',
      cmmLevels: 'Maturiteitsniveaus',
      filtersNotImplemented: 'Tijdsfiltering binnenkort beschikbaar',
      openAuditTrail: 'Audittrail openen',
      conformityByCategory: 'Conformiteit per categorie',
      actionsByPriority: 'Acties per prioriteit',
      risksByLevel: 'Risico\'s per niveau',
      actionsEvolution: 'Evolutie van de acties',
      noRecentActivity: 'Geen recente activiteit',
      viewSwitchAria: 'Dashboardweergave',
      viewLabel: 'Weergave',
      currentPerimeter: 'Huidige scope',
      allEntities: 'Alle entiteiten',
      consolidatedNote: 'Geconsolideerde alleen-lezenweergave van de bedrijfsgegevens.',
      consolidatedLoadError: 'De geconsolideerde weergave is momenteel niet beschikbaar.',
      maturityByEntity: 'Maturiteit per entiteit',
      maturityByEntityHint: 'De conformiteitsscores worden voor elke entiteit afzonderlijk berekend.',
      referential: 'Referentieel',
      controlScore: 'Maatregelen',
      iso27001Conformity: 'ISO 27001-conformiteit',
      iso27002Maturity: 'ISO 27002-maturiteit',
      // (audit 2026-07-10) neutraal label: in ReCyF is de waarde een conformiteits-
      // percentage, geen maturiteit — « NIS2-score » dekt beide referentiëlen.
      nis2MaturityScore: 'NIS2-maturiteit (beoordeeld)',
      evaluatedControls: 'Geëvalueerd',
      noMaturityData: 'Geen maturiteitsgegevens ingevoerd.',
      alertOverdueAudits: 'audit(s) over tijd'
    },

    // Charts
    charts: {
      iso27002Maturity: 'ISO27002-maturiteit',
      nis2Maturity: 'NIS2-maturiteit',
      riskDistribution: 'Risicoverdeling',
      riskDistributionSubtitle: 'Classificatie per kriticiteitsniveau: objectieve beoordeling van incidenten/acties op een schaal (laag tot kritiek) om de middelen gericht in te zetten.',
      controlMaturity: 'Maturiteit van de maatregelen',
      controlMaturitySubtitle: 'Verdeling per CMM-niveau: inventarisatie van de processen over vijf maturiteitsniveaus om continue verbetering te structureren en te sturen.',
      riskMatrix: 'Risicomatrix',
      riskMatrixSubtitle: 'Impact x waarschijnlijkheid: matrix die ernst en frequentie van gebeurtenissen kruist om risico\'s te prioriteren en mitigatieplannen op te stellen.',
      actionsEvolution: 'Evolutie van de acties',
      actionsEvolutionSubtitle: 'Voortgang van het actieplan per prioriteit: prioritering van taken volgens urgentie en impact, met duidelijke mijlpalen en regelmatige opvolging.',
      noControlNote: 'Een waarde van 0 betekent dat er geen gekoppelde maatregel is.',
      actionCount: 'Aantal acties',
      months: 'Maanden',
      actionsHistoryBuilding: 'De geschiedenis wordt maand na maand opgebouwd. De evolutiegrafiek verschijnt zodra er minstens twee maanden aan gegevens zijn geregistreerd.'
    },

    // Controls table headers
    controls: {
      ref: 'Ref.',
      clickToExpand: 'Klik om uit/in te klappen',
      control: 'Maatregel',
      attributes: 'Attributen',
      owner: 'Eigenaar',
      status: 'Status',
      maturity: 'Maturiteit',
      lastEval: 'Laatste evaluatie',
      evidence: 'Bewijs'
    },

    // Controls ISO27002
    controlsISO: {
      title: 'ISO27002-maatregelen',
      subtitle: 'ISO 27002:2022-maatregelen per domein, status en maturiteitsniveau',
      allDomains: 'Alle domeinen',
      organizational: 'Organisatorisch',
      human: 'Menselijk',
      physical: 'Fysiek',
      technological: 'Technologisch',
      unclassified: 'Niet geclassificeerd',
      allStatuses: 'Alle statussen',
      notImplemented: 'Niet geïmplementeerd',
      inProgress: 'In uitvoering',
      implemented: 'Geïmplementeerd',
      verified: 'Geverifieerd',
      allLevels: 'Alle niveaus',
      initial: 'Initieel',
      repeatable: 'Herhaalbaar',
      defined: 'Gedefinieerd',
      managed: 'Beheerd',
      optimized: 'Geoptimaliseerd',
      allCapabilities: 'Alle capaciteiten',
      exportExcel: 'Excel-export',
      newControl: 'Nieuwe maatregel',
      num: 'Nr.',
      titleCol: 'Titel',
      description: 'Beschrijving',
      capability: 'Capaciteit',
      status: 'Status',
      linkedActions: 'Gekoppelde acties',
      cmmLevel: 'CMM-maturiteitsniveau',
      notEvaluated: 'Niet geëvalueerd'
    },

    // Controls CyFun (NIS2)
    controlsNIS2: {
      title: 'NIS2-maatregelen',
      allFunctions: 'Alle functies',
      allCategories: 'Alle categorieën',
      function: 'Functie',
      category: 'Categorie',
      justification: 'Motivering',
      cmmMaturity: 'CMM-maturiteit',
      ref: 'Ref.',
      owner: 'Verantwoordelijke',
      reviewer: 'Reviewer',
      reviewFrequency: 'Reviewfrequentie',
      lastEvaluation: 'Laatste evaluatie',
      nextReviewDate: 'Volgende review',
      docMaturity: 'Mat. doc.',
      implMaturity: 'Mat. impl.',
      status: 'Status',
      avg: 'Gemiddelde',
      filterFunction: 'Functie',
      filterCategory: 'Categorie',
      filterLevel: 'Niveau',
      allFunctions: 'Functie: alle',
      allCategories: 'Categorie: alle',
      allLevels: 'Niveau: alle',
      filterMeasure: 'Maatregel',
      allMeasures: 'Maatregelen: alle',
      keyMeasures: 'Sleutelmaatregelen',
      otherMeasures: 'Overige maatregelen',
      filterScoring: 'Evaluatie',
      filterOwner: 'Verantwoordelijke',
      filterReview: 'Review',
      allScoring: 'Evaluatie: alle',
      scored: 'Geëvalueerd',
      unscored: 'Niet geëvalueerd',
      allOwners: 'Verantwoordelijke: alle',
      allReviews: 'Review: alle',
      unassignedOwner: 'Zonder verantwoordelijke',
      reviewOverdue: 'Review vervallen',
      reviewNext30: 'Review binnen 30 dagen',
      description: 'Beschrijving',
      average: 'Gem.'
    },

    // ReCyF (Référentiel Cyber France / ANSSI)
    recyfControls: {
      title: 'ReCyF-maatregelen',
      ref: 'Ref.',
      objective: 'Doelstelling',
      theme: 'Thema',
      measure: 'Maatregel',
      target: 'Doelgroep',
      owner: 'Verantwoordelijke',
      reviewer: 'Reviewer',
      reviewFrequency: 'Reviewfrequentie',
      lastEvaluation: 'Laatste evaluatie',
      nextReviewDate: 'Volgende review',
      evidence: 'Bewijzen / artefacten',
      evidencePlaceholder: 'Documenten, logs, schermafbeeldingen…',
      conformity: 'Conformiteit',
      justification: 'Motivering',
      justificationPlaceholder: 'Motivering, geïmplementeerde alternatieve maatregel, actieplan…',
      justificationMissing: 'Motivering ontbreekt',
      modalTitle: 'ReCyF-maatregel',
      conformityRate: 'Conformiteit (geëvalueerde maatregelen)',
      evaluatedCount: 'Geëvalueerd',
      naCount: 'N.v.t.',
      totalCount: 'Totaal',
      eiEe: 'Belangrijke en essentiële entiteiten',
      eeOnly: 'Alleen essentiële entiteit',
      editJustification: 'Details / motivering',
      filterObjective: 'Doelstelling',
      filterTheme: 'Thema',
      filterTarget: 'Doelgroep',
      filterConformity: 'Conformiteit',
      filterOwner: 'Verantwoordelijke',
      filterReview: 'Review',
      allObjectives: 'Doelstelling: alle',
      allThemes: 'Thema: alle',
      allTargets: 'Doelgroep: alle',
      allConformity: 'Conformiteit: alle',
      allOwners: 'Verantwoordelijke: alle',
      allReviews: 'Review: alle',
      unassignedOwner: 'Zonder verantwoordelijke',
      reviewOverdue: 'Review vervallen',
      reviewNext30: 'Review binnen 30 dagen',
      radarTitle: 'ReCyF-conformiteit per doelstelling'
    },

    // CyFun 2025
    cyfun: {
      levelBasic: 'BASIC',
      levelImportant: 'IMPORTANT',
      levelEssential: 'ESSENTIAL',
      docMaturity: 'Maturiteit documentatie',
      implMaturity: 'Maturiteit implementatie',
      keyMeasure: 'Sleutelmaatregel',
      managementLinked: 'Aan het management gekoppelde maatregel',
      scoring: 'NIS2-scoring',
      threshold: 'Conformiteitsdrempel',
      compliant: 'CONFORM',
      nonCompliant: 'NIET CONFORM',
      selectLevel: 'Selecteer het NIS2-assurance-niveau',
      evidence: 'Bewijzen / artefacten',
      evidencePlaceholder: 'Documenten, logs, schermafbeeldingen...',
      keyMeasureInfo: 'Ja - Deze maatregel is cruciaal voor de conformiteit',
      mgmtLinkedInfo: 'Ja - Verplichte review bij elke audit',
      avgScore: 'Gemiddelde score',
      keyMeasuresScore: 'Score sleutelmaatregelen',
      categoryMin: 'Minimum per categorie',
      coverage: 'Dekking',
      unevaluatedWarn: 'Een niet-beoordeelde maatregel telt als 0 voor de drempel (CCB-methode). Niet-beoordeelde categorieën: {{n}}.',
      functions: {
        GV: 'Besturen',
        ID: 'Identificeren',
        PR: 'Beschermen',
        DE: 'Detecteren',
        RS: 'Reageren',
        RC: 'Herstellen'
      }
    },

    // Statement of Applicability
    soa: {
      controlNotApplicable: 'Deze maatregel is als niet van toepassing verklaard',
      justificationLabel: 'Motivering',
      seeInDeclaration: 'Zie in de Verklaring van toepasselijkheid',
      title: 'Verklaring van toepasselijkheid',
      all: 'Alle',
      applicable: 'Van toepassing',
      notApplicable: 'Niet van toepassing',
      reference: 'Referentie',
      applicability: 'Toepasselijkheid',
      subtitle: 'Conformiteit ISO 27001:2022 - clausule 6.1.3',
      colControl: 'Maatregel',
      colApplicable: 'Toepasselijkheid',
      colImplementation: 'Implementatie',
      colRisks: 'Gekoppelde risico\'s',
      colDocumentation: 'Documentatie',
      colJustification: 'Motivering',
      colSource: 'Bron van de vereiste',
      colImplStatus: 'Implementatiestatus',
      comments: 'Opmerkingen bij de maatregel',
      implDate: 'Implementatiedatum',
      evidenceRef: 'Referentie bewijzen',
      lastReviewDate: 'Laatste review',
      exclusionReason: 'Reden van uitsluiting',
      pdfPublic: 'PDF publiek',
      pdfAudit: 'PDF audit',
      pdfPublicTitle: 'Vereenvoudigde publieke versie',
      pdfAuditTitle: 'Volledige versie voor audit',
      implemented: 'Geïmplementeerd',
      declaredNonApplicable: 'In de VvT als niet van toepassing verklaard',
      nonApplicable: 'Niet van toepassing',
      viewInSoa: 'Bekijken in de Verklaring van toepasselijkheid',
      multiSelectHelp: 'Houd Ctrl (of Cmd) ingedrukt om meerdere risico\'s te selecteren'
    },

    // Document Review
    docReview: {
      title: 'Documentreview 27001',
      reviewOverdue: 'Review achterstallig',
      nextReviewLabel: 'Volgende',
      subtitle: 'Clausules 4 tot en met 10 - ISMS-vereisten en conformiteitsbewijzen',
      requirement: 'Vereiste',
      evidence: 'Tool / bewijs',
      colClause: 'Clausule',
      colRequirement: 'Vereiste',
      colClauseExigence: 'Clausule / vereiste',
      colConformite: 'Conformiteit',
      colStatus: 'Status',
      colOwner: 'Verantwoordelijke',
      colJustification: 'Motivering',
      colEvidence: 'Bewijs / document',
      colDocumentation: 'Documentatie',
      colLastReview: 'Laatste review',
      colRevue: 'Review',
      comments: 'Opmerkingen bij de clausule',
      expandJustification: 'Motivering',
      status: 'Conformiteitsstatus',
      tool: 'Document / bewijs',
      documentLink: 'Documentlink',
      lastReview: 'Laatste review',
      nextReview: 'Volgende review',
      pdfAudit: 'PDF audit',
      pdfAuditTitle: 'Auditpakket ISO 27001-certificering',
      conforming: 'Conform',
      partial: 'Gedeeltelijk',
      nonConforming: 'Niet conform',
      complianceRate: 'Conformiteitspercentage'
    },

    // Actions
    actions: {
      title: 'Actieplan',
      sortPriority: 'Sortering: prioriteit',
      sortId: 'Sortering: ID',
      sortLink: 'Sortering: gekoppeld element',
      sortDueDate: 'Sortering: vervaldatum',
      sortProgress: 'Sortering: voortgang',
      filterAll: 'Filter: alle',
      filterRisk: 'Filter: risico',
      filterNc: 'Filter: non-conformiteit',
      filterAudit: 'Filter: audit',
      filterThreat: 'Filter: dreiging',
      filterOwner: 'Filter: verantwoordelijke',
      filterContinuous: 'Filter: continue verbetering',
      newAction: 'Nieuwe actie',
      id: 'ID',
      action: 'Actie',
      link: 'Koppeling',
      criticalAssets: 'Kritieke assets',
      priority: 'Prioriteit',
      statusCol: 'Status',
      progress: 'Voortgang',
      dueDate: 'Vervaldatum',
      owner: 'Verantwoordelijke',
      comments: 'Opmerkingen',
      colTitle: 'Titel',
      colPriority: 'Prioriteit',
      colStatus: 'Status',
      colDueDate: 'Vervaldatum',
      colAssignedTo: 'Verantwoordelijke',
      colProgress: 'Voortgang',
      colId: 'ID',
      colLink: 'Koppeling',
      colAssets: 'Kritieke assets',
      colComments: 'Opmerkingen',
      linkType: 'Type koppeling',
      linkedElement: 'Gekoppeld element',
      manageComments: 'Opmerkingen bij de actie',
      overdue: 'Over tijd'
    },
    nc: {
      colTitle: 'Titel',
      colType: 'Type',
      colStatus: 'Status',
      colOwner: 'Verantwoordelijke',
      colDate: 'Detectiedatum',
      colAudit: 'Gekoppelde audit',
      colActions: 'Gekoppelde acties',
      colAssets: 'Kritieke assets',
      colDescription: 'Beschrijving',
      linkedActionsCount: '{n} actie(s)',
      newNc: 'Nieuwe non-conformiteit'
    },

    // Risks
    risks: {
      title: 'ISMS-risico\'s',
      newRisk: 'Nieuw risico',
      importFromAnalysis: 'Importeren vanuit een analyse',
      importTitle: 'Analyserisico\'s promoveren naar het ISMS-register',
      importApply: 'Selectie promoveren',
      importDone: 'Risico\'s gepromoveerd: ',
      importNoAnalysis: 'Geen analyse met risico\'s.',
      alreadyImported: 'al gepromoveerd',
      risk: 'Risico',
      impact: 'Impact',
      probability: 'Waarschijnlijkheid',
      score: 'Score',
      level: 'Niveau',
      treatment: 'Behandeling',
      codirDate: 'Datum directiecomité',
      manageComments: 'Opmerkingen bij het risico',
      columns: {
        risk: 'Risico',
        impact: 'Impact',
        probability: 'Waarschijnlijkheid',
        level: 'Niveau',
        linkedActions: 'Gekoppelde acties',
        treatment: 'Behandeling',
        codirDate: 'Datum directiecomité'
      }
    },

    // Threats
    threats: {
      title: 'Dreigingen',
      newThreat: 'Nieuwe dreiging',
      proposeFromCatalog: 'Voorstellen vanuit een referentieel',
      proposeTitle: 'Dreigingen voorstellen vanuit een referentieel',
      proposeHint: 'Voorgestelde score (waarschijnlijkheid×impact) te herzien na invoeging.',
      proposeApply: 'Selectie toevoegen',
      proposeDone: 'Dreigingen toegevoegd: ',
      alreadyImported: 'al geïmporteerd',
      columns: {
        title: 'Titel',
        description: 'Beschrijving',
        impact: 'Impact',
        probability: 'Waarschijnlijkheid',
        score: 'Score',
        level: 'Niveau',
        status: 'Status',
        linkedActions: 'Gekoppelde acties',
        criticalAssets: 'Kritieke assets',
        links: 'Koppelingen'
      },
      linkedActionsCount: '{n} actie(s)',
      linkedAssetsCount: '{n} asset(s)'
    },

    // Non-Conformities
    nonConformities: {
      title: 'Non-conformiteiten',
      sortType: 'Sorteren: Type',
      sortStatus: 'Sorteren: Status',
      sortDate: 'Sorteren: Detectiedatum',
      sortAudit: 'Sorteren: Gekoppelde audit',
      sortOwner: 'Sorteren: Verantwoordelijke',
      filterAllAudits: 'Filter: Alle audits',
      filterAllOwners: 'Filter: Alle verantwoordelijken',
      newNc: 'Nieuwe non-conformiteit',
      type: 'Type',
      detectionDate: 'Detectiedatum',
      linkedAudit: 'Gekoppelde audit',
      operations: 'Bewerkingen'
    },

    // Audits
    audits: {
      title: 'Audits',
      newAudit: 'Nieuwe audit',
      scope: 'Scope',
      plannedDate: 'Geplande datum',
      auditor: 'Auditor',
      overdue: 'Audit achterstallig',
      columns: {
        title: 'Titel',
        type: 'Type',
        scope: 'Scope',
        plannedDate: 'Geplande datum',
        auditor: 'Auditor',
        status: 'Status',
        linkedActions: 'Gekoppelde acties'
      }
    },

    // Transversale mapping
    mapping: {
      title: 'Transversale mapping van referentiëlen',
      subtitle: 'Overeenkomsten tussen beveiligingsreferentiëlen',
      allTypes: 'Alle types',
      search: 'Een maatregel zoeken...',
      noMappings: 'Geen overeenkomsten gevonden voor deze criteria.',
      noLink: 'Geen koppeling',
      noResults: 'Geen resultaten voor deze zoekopdracht.',
      notAvailable: 'Mappingmodule niet beschikbaar.',
      needTwo: 'Activeer minstens twee referentiëlen in de instellingen.',
      listView: 'Lijstweergave',
      heatmapView: 'Heatmapweergave',
      viewList: 'Lijstweergave',
      viewHeatmap: 'Matrixweergave',
      conflict: 'Statusconflict gedetecteerd',
      heatmap: {
        caption: 'Dekkingsmatrix tussen bron- en doelreferentiëlen',
        avgCoverage: 'gem. dekking',
        relations: 'relaties',
        unavailable: 'Matrixweergave niet beschikbaar voor dit referentieel. Gebruik de lijstweergave.'
      },
      col: {
        ref: 'Ref.',
        title: 'Titel',
        status: 'Status',
        mappings: 'Overeenkomsten'
      },
      stats: {
        totalMappings: 'Overeenkomsten',
        avgCoverage: 'Gemiddelde dekking',
        mapped: 'Gemapte maatregelen',
        covered: 'Dekking'
      },
      status: {
        notImplemented: 'Niet geïmplementeerd',
        inProgress: 'In uitvoering',
        implemented: 'Geïmplementeerd',
        verified: 'Geverifieerd'
      },
      relationship: {
        equivalent: 'Equivalent',
        covers: 'Dekt',
        coveredBy: 'Gedekt door',
        related: 'Gerelateerd'
      },
      settings: {
        title: 'Beveiligingsreferentiëlen',
        description: 'Activeer of deactiveer de beschikbare referentiëlen.',
        alwaysActive: 'Altijd actief',
        controls: 'maatregelen',
        mappingsLoaded: 'overeenkomsten geladen'
      }
    },

    // Top-level status labels
    status: {
      notImplemented: 'Niet geïmpl.',
      inProgress: 'In uitvoering',
      implemented: 'Geïmpl.',
      verified: 'Geverifieerd'
    },

    // Management Reviews
    reviews: {
      title: 'Directiebeoordelingen',
      newReview: 'Nieuwe beoordeling',
      date: 'Datum',
      participants: 'Deelnemers',
      inputs: 'Input',
      decisions: 'Beslissingen',
      manageComments: 'Opmerkingen bij de beoordeling',
      newComment: 'Nieuwe opmerking',
      addComment: 'Opmerking toevoegen',
      maxComments: 'Maximum van 10 opmerkingen bereikt.',
      commentAdded: 'Opmerking toegevoegd.',
      columns: {
        date: 'Datum',
        participants: 'Deelnemers',
        inputs: 'Input',
        decisions: 'Beslissingen',
        comments: 'Opmerkingen'
      }
    },

    // Stakeholders
    stakeholders: {
      title: 'Belanghebbenden',
      newStakeholder: 'Nieuwe belanghebbende',
      name: 'Naam',
      role: 'Rol',
      contact: 'Contact',
      filterRole: 'Rol',
      allRoles: 'Rol: alle',
      columns: {
        name: 'Naam',
        role: 'Rol',
        contact: 'Contact',
        comments: 'Opmerkingen'
      }
    },

    // Genormaliseerde rollen van belanghebbenden (Lot 1b)
    stakeholderRoles: {
      internal: 'Intern',
      supplier: 'Leverancier',
      client: 'Klant',
      authority: 'Autoriteit',
      partner: 'Partner',
      other: 'Andere',
      currentValue: '(huidige waarde)'
    },

    // Documents
    documents: {
      title: 'Documentstructuur',
      newDocument: 'Nieuw document',
      levelCol: 'Niveau',
      typeCol: 'Type',
      tool: 'Tool',
      linkCol: 'Link',
      columns: {
        level: 'Niveau',
        type: 'Type',
        tool: 'Tool',
        link: 'Link'
      }
    },

    // Document categories
    docCategories: {
      policy: 'Beleid',
      process: 'Proces',
      procedure: 'Procedure',
      record: 'Registratie'
    },

    // KPIs
    kpis: {
      title: 'KPI\'s',
      newKpi: 'Nieuwe KPI',
      comment: 'Opmerking',
      progressCol: 'Voortgang'
    },

    // CyFun Program
    nis2Program: {
      title: 'Cyberbeveiligingsbudget',
      printPdf: 'Afdrukken / PDF',
      exportHtml: 'HTML-export',
      newDomain: 'Nieuw domein',
      newAction: 'Nieuwe actie',
      budgetCategories: 'Budgetcategorieën',
      newBudgetLine: 'Nieuwe lijn',
      manageYears: 'Jaren beheren',
      manageYearsTitle: 'Budgetjaren beheren',
      totalBudget: 'Totaal budget',
      lineLabel: 'Omschrijving',
      lineOwner: 'Verantwoordelijke',
      lineStatus: 'Status',
      lineCategory: 'Categorie',
      lineTotal: 'Totaal',
      lineSingular: 'lijn',
      linesPlural: 'lijnen',
      amountForYear: 'Bedrag',
      grandTotal: 'Algemeen totaal',
      subtotal: 'Subtotaal',
      rowType: 'Type',
      rowTypeLine: 'Lijn',
      rowTypeSubtotal: 'Subtotaal',
      rowTypeTotal: 'Totaal',
      noFilterMatch: 'Geen enkele lijn voldoet aan de geselecteerde filters.',
      filteredTotal: 'Totaal (gefilterd)',
      untitledLine: 'Zonder omschrijving',
      noBudgetData: 'Geen budgetgegevens om weer te geven',
      budgetEmptyTitle: 'Geen budgetlijnen',
      budgetEmptyHint: 'Voeg uw eerste cyberbeveiligingsbudgetlijn toe met de knop "Nieuwe lijn".',
      chartByYear: 'Budget per jaar',
      chartByYearSubtitle: 'Verdeling van het cyberbeveiligingsbudget per boekjaar',
      chartByCategory: 'Verdeling per categorie',
      chartByCategorySubtitle: 'Aandeel van het totale budget per uitgavencategorie',
      filterCategoryLabel: 'Categorie',
      filterStatusLabel: 'Status',
      allCategories: 'Alle categorieën',
      allStatuses: 'Alle statussen',
      maturity: 'NIS2-maturiteit',
      maturitySubtitle: 'Huidige maturiteit vergeleken met de doelstellingen 2027/2028',
      keyStatuses: 'Kernstatussen',
      keyStatusesSubtitle: 'Registratie, maturiteit en regelgevende mijlpalen',
      addStatus: 'Kernstatus toevoegen',
      nis2Actions: 'NIS2-acties',
      nis2ActionsSubtitle: 'Verdeling van de acties per status en algemene dynamiek',
      actionsByDomain: 'Acties per domein',
      actionsByDomainSubtitle: 'Verdeling van de acties per domein van het NIS2-plan',
      actionPlan: 'NIS2-actieplan',
      allPhases: 'Alle fasen',
      phase1: 'Fase 1 (2026)',
      phase2: 'Fase 2 (2027)',
      phase3: 'Fase 3 (2028)',
      allPillars: 'Alle pijlers',
      pillar: 'Pijler',
      infoBox: 'Stuur uw cyberbeveiligingsbudget per lijn: koppel elke uitgave aan een categorie, een verantwoordelijke, een status (gepland, vastgelegd, gerealiseerd) en een bedrag per jaar. Voeg jaren toe of hernoem ze via "Jaren beheren".',
      actionsCyFun: 'NIS2-acties',
      actionsCyFunSubtitle: 'Verdeling van de acties per status en algemene dynamiek',
      filterPhaseLabel: 'Fase',
      filterPillarLabel: 'Functie',
      infoBoxText: 'Dit NIS2-actieplan staat los van het ISO-actieplan. Voeg uw domeinen en acties toe, filter per fase of pijler en werk de statussen bij om uw mijlpalen 2026-2028 op te volgen.',
      showLegend: 'Radarlegende weergeven',
      manageBudgetCategoriesTitle: 'Budgetcategorieën beheren',
      addStatusTitle: 'Kernstatus toevoegen',
      pillarGV: 'Besturen (GV)',
      pillarID: 'Identificeren (ID)',
      pillarPR: 'Beschermen (PR)',
      pillarDE: 'Detecteren (DE)',
      pillarRS: 'Reageren (RS)',
      pillarRC: 'Herstellen (RC)'
    },

    // NIS2 Socle
    nis2Socle: {
      title: 'Beveiligingsfundament',
      editPillar: 'Pijler bewerken', // FIX-I18N-KEYS (audit 2026-06-10)
      subtitle: 'De 5 structurerende pijlers',
      infoBox: 'Geprioriteerd strategisch kader gebaseerd op de top 10 van de belangrijkste risico\'s, Zero Trust-strategie en NIS2-conformiteit.'
    },


    securityBaseline: {
      title: 'Beveiligingsfundament',
      subtitle: 'De 5 structurerende pijlers',
      infoBoxText: 'Geprioriteerd strategisch kader gebaseerd op de top 10 van de belangrijkste risico\'s, Zero Trust-strategie en NIS2-conformiteit.'
    },

    kpi: {
      title: 'KPI',
      newKpi: 'Nieuwe KPI',
      description: 'Beschrijving',
      comment: 'Opmerking',
      progress: 'Voortgang'
    },

    // Critical Assets
    criticalAssets: {
      title: 'Kritieke assets',
      form: {
        priority: 'Prioriteit',
        beneficiary: 'Begunstigde',
        productCode: 'Product (code)',
        productName: 'Product (naam)',
        productTags: 'Producttags (door komma\'s gescheiden)',
        availability: 'Beschikbaarheid',
        availabilityNote: 'Notitie beschikbaarheid',
        confidentiality: 'Vertrouwelijkheid',
        dacpSensitive: 'DACP-gevoelig',
        mfaStatus: 'MFA-verplichting',
        mfaDetail: 'MFA-detail'
      },
      subtitle: 'Inventaris van kritieke assets en continuïteitsvereisten.',
      rename: 'Hernoemen',
      newAsset: 'Nieuwe asset',
      beneficiary: 'Begunstigde',
      availability: 'Beschikbaarheid',
      reset: 'Resetten',
      priorityCol: 'Prioriteit',
      product: 'Product',
      rto: 'RTO',
      rpo: 'RPO',
      confidentiality: 'Vertr.',
      impactCol: 'Impact',
      dacpSensitive: 'Gevoelige DACP',
      mfaObligation: 'MFA-verplichting',
      columns: {
        priority: 'Prioriteit',
        beneficiary: 'Begunstigde',
        product: 'Product',
        assetType: 'Type',
        importance: 'Belang',
        rto: 'RTO',
        rpo: 'RPO',
        rtoRpo: 'RTO / RPO',
        availability: 'Beschikbaarheid',
        confidentiality: 'Vertr.',
        integrity: 'Integr.',
        impact: 'Impact',
        dacpSensitive: 'Gev. DACP',
        mfaObligation: 'MFA-verplichting'
      },
      addBtn: 'Asset toevoegen',
      colName: 'Naam',
      colType: 'Type',
      colOwner: 'Eigenaar',
      colCriticality: 'Kriticiteit',
      renameBtn: 'Hernoemen',
      filterBeneficiary: 'Begunstigde',
      filterAvailability: 'Beschikbaarheid',
      filterImpact: 'Impact',
      openAsset: 'Asset bekijken'
    },

    // Empty States
    emptyStates: {
      noThreats: 'Geen dreigingen geïdentificeerd. Klik op "Nieuwe dreiging" om te beginnen.',
      noAudits: 'Geen audits geregistreerd. Klik op "Nieuwe audit" om een audit te plannen.',
      noReviews: 'Geen directiebeoordelingen. Klik op "Nieuwe beoordeling" om er een aan te maken.',
      noDocuments: 'Geen documenten geregistreerd. Klik op "Nieuw document" om te beginnen.',
      noStakeholders: 'Geen belanghebbenden. Klik op "Nieuwe belanghebbende" om er een toe te voegen.',
      noRisks: 'Geen risico\'s geïdentificeerd.',
      noComments: 'Geen opmerkingen.',
      noActions: 'Geen lopende acties',
      noNonconformities: 'Geen non-conformiteiten',
      noCriticalAssets: 'Geen kritieke assets'
    },

    // Generiek systeem voor opmerkingen
    comments: {
      manage: 'Opmerkingen',
      new: 'Nieuwe opmerking',
      add: 'Opmerking toevoegen',
      max: 'Maximum van {n} opmerkingen bereikt.',
      added: 'Opmerking toegevoegd.',
      none: 'Geen opmerkingen.',
      deleteConfirm: 'Deze opmerking verwijderen?',
      close: 'Sluiten'
    },

    // Project Risks
    projectRisks: {
      title: 'Projectrisico\'s',
      subtitle: 'Opvolging van projectrisicoanalyses en bijbehorende aanbevelingen.',
      newAnalysis: 'Nieuwe analyse',
      search: 'Zoeken',
      searchPlaceholder: 'Naam, begunstigde, rapport, beschrijving',
      statusFilter: 'Status',
      pendingFilter: 'Niet-geïmplementeerde aanbevelingen',
      projectName: 'Projectnaam',
      reportNumber: 'Rapportnummer',
      revisionNumber: 'Revisienummer',
      projectDescription: 'Projectbeschrijving',
      riskAnalysisLink: 'Link naar risicoanalyse',
      completionDate: 'Uitvoeringsdatum',
      kpiAnalyses: 'Uitgevoerde analyses',
      kpiRecos: 'Geïmplementeerde aanbevelingen',
      priority: 'Prioriteit',
      priorityLabel: 'Prioriteit',
      priorityCritical: 'P0 - Kritiek', // FIX-I18N-PRIORITY-CRITICAL (audit 2026-06-10)
      priorityHigh: 'P1 - Hoog',
      priorityMedium: 'P2 - Gemiddeld',
      priorityLow: 'P3 - Laag',
      openAnalysis: 'Analyse openen',
      allBeneficiaries: 'Alle begunstigden',
      allStatuses: 'Alle statussen',
      noResults: 'Geen resultaten.',
      noData: 'Geen projectrisicoanalyse.',
      recoTitle: 'Aanbevelingen',
      recoAdd: 'Toevoegen',
      recoTitleLabel: 'Titel van de aanbeveling',
      recoTextLabel: 'Aanbeveling',
      recoImplemented: 'Geïmplementeerd',
      recoRemove: 'Verwijderen',
      recoEmpty: 'Geen aanbevelingen toegevoegd.',
      note: 'Notitie',
      resetFilters: 'Resetten',
      beneficiaryLabel: 'Begunstigde',
      statusFilterLabel: 'Status',
      statusCol: 'Status',
      beneficiary: 'Begunstigde',
      sortLabel: 'Sorteren',
      sortName: 'Projectnaam',
      sortBeneficiary: 'Begunstigde',
      sortStatus: 'Status',
      sortDate: 'Datum',
      sortPriority: 'Prioriteit',
      autoSyncBadge: 'Auto',
      autoSyncBanner: 'Deze vermelding wordt automatisch gesynchroniseerd vanuit de risicoanalyse "{title}". Sommige velden worden automatisch bijgewerkt.',
      autoSyncReadonly: 'Dit veld wordt automatisch bijgewerkt.',
      consolidatedAnalysesTitle: 'Uitgevoerde risicoanalyses',
      consolidatedAnalysesHint: 'Deze tabel toont de portefeuille van projectrisico\'s. De gedetailleerde analyses beschikken over een eigen geconsolideerde weergave.',
      openConsolidatedAnalyses: 'Alle analyses bekijken',
      tagPlaceholder: 'Een tag toevoegen...'
    },
    // Instellingen
    settings: {
      title: 'Instellingen',
      subtitle: 'Configuratie, back-ups en serversynchronisatie.',
      nav: {
        general: 'Algemeen',
        security: 'Beveiliging',
        data: 'Gegevens',
        storage: 'Opslag',
        sync: 'Sync Pro',
        license: 'Licentie',
        advanced: 'Geavanceerd',
        danger: 'Gevarenzone',
        users: 'Gebruikers',
        mcp: 'AI-toegang',
        maintenance: 'Serveronderhoud'
      },
      users: 'Gebruikers',
      general: 'Algemene configuratie',
      appTitle: 'Titel van de applicatie',
      theme: 'Thema',
      themeClair: 'Licht',
      themeSombre: 'Donker',
      themePoudre: 'Poeder',
      isoTarget: 'ISO-doel',
      isoTargetHelp: 'Beoogd maturiteitsniveau (1-5).',
      entities: 'Multi-entiteit',
      nis2Target: 'NIS2-doel',
      backup: 'Back-up',
      export: 'Exporteren',
      import: 'Importeren',
      importAnalyse: 'Analyse importeren',
      advancedExport: 'Geavanceerde export',
      pdfDraftNumber: 'CONCEPT (alleen-lezen modus)',
      pdfReport: 'PDF-rapport',
      excelExport: 'Excel-export',
      serverSync: 'Serversynchronisatie',
      baseUrl: 'Basis-URL',
      user: 'Gebruiker',
      password: 'Wachtwoord',
      quality: 'Kwaliteit & Historiek',
      analyze: 'Analyseren',
      snapshots: 'Snapshots',
      demoData: 'Demogegevens',
      loadDemo: 'Demo laden',
      tests: 'Tests',
      reset: 'Resetten',
      resetData: 'Gegevens resetten',
      language: 'Taal',
      chooseLanguage: 'Kies uw taal',
      complete: 'Volledig',
      global: 'Globaal',
      logoTitle: 'Bedrijfslogo',
      logoDescription: 'Importeer het logo dat in de PDF-exports wordt gebruikt.',
      logoUpload: 'Selecteer een bestand (PNG, JPEG, SVG)',
      logoNone: 'Geen logo geconfigureerd',
      logoSave: 'Logo opslaan',
      logoRemove: 'Logo verwijderen',
      logoSaved: 'Logo succesvol opgeslagen',
      logoRemoved: 'Logo verwijderd',
      logoTooLarge: 'Het bestand is te groot (max. 500 kB)',
      // Kaart algemene instellingen (bundle.js)
      generalTitle: 'Algemene configuratie',
      generalDesc: 'Pas de titel, het thema en de maturiteitsdoelen aan.',
      appTitleLabel: 'Titel van de applicatie',
      themeLabel: 'Thema',
      theme_clair: 'Licht',
      theme_sombre: 'Donker',
      theme_poudre: 'Poeder',
      theme_bleu: 'Blauw',
      saveBtn: 'Instellingen opslaan',
      saved: 'Instellingen opgeslagen',
      nis2TargetHelp: 'Doelwaarde (1-5) voor alle categorieën.',
      cyfunLevel: 'NIS2-zekerheidsniveau',
      cyfunLevelChanged: 'NIS2-niveau gewijzigd: ',
      cyfunLang: 'Taal van het CyFun-referentieel',
      cyfunLangChanged: 'Taal van het CyFun-referentieel gewijzigd.',
      recyfDegree: 'Graad van de entiteit (ReCyF)',
      recyfDegreeChanged: 'ReCyF-graad: ',
      nis2Referential: 'Actief NIS2-referentieel',
      nis2RefBE: 'NIS2 België — CyFun 2025 (CCB)',
      nis2RefFR: 'NIS2 Frankrijk — ReCyF (ANSSI)',
      nis2ReferentialChanged: 'Actief NIS2-referentieel: ',
      nis2ReferentialHint: 'Bepaalt welke NIS2-tabbladen worden getoond (CyFun België of ReCyF Frankrijk).',
      nis2RefLocked: 'Referentieel vergrendeld. Een reset is nodig om het te wijzigen.',
      nis2RefLockedNote: 'Referentieel vergrendeld. Om het te wijzigen, reset de applicatie (alle gegevens worden gewist).',
      nis2RefLockedToast: 'Referentieel vergrendeld: een reset is nodig om het te wijzigen.',
      nis2RefActive: 'Actief NIS2-referentieel',
      nis2RefInactive: 'NIS2-referentieel — niet geselecteerd',
      // Kaart weergaveopties
      displayTitle: 'Weergaveopties',
      displayDesc: 'Pas het uiterlijk en de dichtheid van de interface aan.',
      compactMode: 'Compacte modus',
      compactModeHelp: 'Verkleint de tussenruimte en de grootte van elementen om meer informatie te tonen.',
      compactEnabled: 'Compacte modus ingeschakeld',
      compactDisabled: 'Compacte modus uitgeschakeld',
      // Kaart beveiliging
      editPasswordTitle: 'Wachtwoord van de bewerkingsmodus',
      editPasswordDesc: 'Minimaal {{min}} tekens, 1 hoofdletter, 1 kleine letter, 1 speciaal teken.',
      newPassword: 'Nieuw wachtwoord',
      minCharsPlaceholder: 'Minimaal {{min}} tekens',
      confirmation: 'Bevestiging',
      retypePassword: 'Typ het wachtwoord opnieuw',
      customPasswordActive: 'Aangepast wachtwoord actief.',
      defaultPasswordActive: 'Standaardwachtwoord actief.',
      updatePassword: 'Wachtwoord bijwerken',
      passwordNonCompliant: 'Wachtwoord voldoet niet aan de vereisten.',
      changeServerPassword: 'Mijn wachtwoord wijzigen',
      changeServerPasswordDesc: 'Wijzig uw aanmeldingswachtwoord.',
      changePasswordBtn: 'Wachtwoord wijzigen',
      // Kaart back-up
      backupTitle: 'Back-up',
      backupDesc: 'Exporteer of importeer uw ISMS-gegevens.',
      // Kaart snapshots
      snapshotTitle: 'Historiek & Snapshots',
      snapshotDesc: 'Maak lokale herstelpunten aan.',
      snapshotLabel: 'Naam van de snapshot',
      snapshotPlaceholder: 'Bijv.: veiligheidscomité Q2',
      createSnapshot: 'Aanmaken',
      manualSnapshot: 'Handmatige snapshot',
      cleanSnapshots: 'Opschonen',
      backupBeforeReset: 'Back-up vóór reset',
      backupBeforeRestore: 'Back-up vóór herstel',
      backupBeforeImport: 'Back-up vóór import',
      backupBeforeDemo: 'Back-up vóór demogegevens',
      // Kaart opslag
      storageTitle: 'Opslag & Status',
      storageDesc: 'Monitoring van het localStorage-gebruik.',
      storageUsage: 'localStorage-gebruik',
      storageTitleServer: 'Lokale cache',
      storageDescServer: 'In servermodus worden de gegevens op de server opgeslagen. De browser bewaart een lokale cache.',
      storageUsageServer: 'Gebruik van de lokale cache',
      storageServerNote: 'Uw gegevens worden hoofdzakelijk op de server opgeslagen. Deze lokale cache maakt offline werken mogelijk.',
      dataSize: 'Gegevensgrootte',
      lastAutosave: 'Laatste autosave',
      storageLow: 'Weinig opslagruimte. Exporteer uw gegevens.',
      storageFull: 'Opslag bijna vol: exporteer uw gegevens of verwijder snapshots.',
      storageInsufficient: 'Onvoldoende opslagruimte',
      storageWarning: 'Let op: opslag bijna vol',
      storageExportHint: 'Denk eraan uw gegevens te exporteren.',
      never: 'Nooit',
      // Licentie-instellingen
      license: {
        statusTitle: 'Licentiestatus',
        statusDesc: 'Informatie over uw licentie of proefperiode.',
        activateTitle: 'Een licentie activeren',
        activateDesc: 'Plak uw CSI2-...-sleutel om uw licentie te activeren of te verlengen.'
      },
      // Kaart synchronisatie
      syncTitle: 'Serversynchronisatie',
      syncDesc: 'Deel een snapshot via de API /data/export en /data/import.',
      syncUrlLabel: 'Basis-URL (optioneel)',
      syncUser: 'Gebruiker',
      syncPassword: 'Wachtwoord',
      rememberPassword: 'Wachtwoord onthouden',
      test: 'Testen',
      openSync: 'Sync openen',
      noTestRun: 'Geen test uitgevoerd.',
      testInProgress: 'Test bezig...',
      invalidUrl: 'Ongeldige URL',
      networkError: 'Netwerkfout',
      authDenied: 'Authenticatie geweigerd',
      // Kaart tests
      testsTitle: 'Tests',
      testsDesc: 'Snelle controle van de belangrijkste functies.',
      runTests: 'Tests uitvoeren',
      // Kaart demoreset
      demoResetTitle: 'Demogegevens resetten',
      demoResetDesc: 'Laadt de oorspronkelijke demogegevens opnieuw.',
      demoMode: 'Demomodus',
      demoModeLabel: 'Demomodus',
      demoAutoReload: 'De gegevens worden elk uur automatisch opnieuw geladen.',
      demoManualReset: 'Gebruik deze knop om handmatig te resetten.',
      demoResetInfo: 'De gegevens worden elk uur automatisch opnieuw geladen. Gebruik deze knop om handmatig te resetten.',
      reloadDemoData: 'Demogegevens opnieuw laden',
      reloadDemoBtn: 'Demogegevens opnieuw laden',
      // Kaart reset
      resetTitle: 'Reset',
      resetDesc: 'Zet de applicatie terug naar de oorspronkelijke instellingen.',
      warning: 'Let op:',
      resetWarningTitle: 'Let op:',
      resetWarningText: 'Deze actie verwijdert al uw gegevens. Vóór de reset wordt automatisch een veiligheidssnapshot aangemaakt.',
      resetWarning: 'Deze actie verwijdert al uw gegevens.',
      resetWarningDelete: 'Deze actie verwijdert al uw gegevens.',
      resetWarningSnapshot: 'Vóór de reset wordt automatisch een veiligheidssnapshot aangemaakt.',
      resetSnapshot: 'Vóór de reset wordt automatisch een veiligheidssnapshot aangemaakt.',
      resetApp: 'Applicatie resetten',
      resetBtn: 'Applicatie resetten',
      resetAdminOnly: 'Reset is voorbehouden aan een beheerdersaccount.',
      confirmReset: 'Reset bevestigen',
      confirmResetMessage: 'Deze actie zet de applicatie terug naar de begintoestand. Al uw gegevens worden definitief verwijderd. Weet u het zeker?',
      // FIX-I18N-AUTH (audit 2026-06-10, auth-manager.js:656) : kaarten Serverinstellingen
      storageServerTitle: 'Serveropslag',
      storageServerDesc: 'Uw gegevens worden op de server opgeslagen en gesynchroniseerd.',
      storageServerActive: 'De server beheert de hoofdopslag. Alle wijzigingen worden automatisch gesynchroniseerd.',
      serverStorageTitle: 'Serveropslag',
      serverStorageDesc: 'De gegevens worden uitsluitend op de server opgeslagen. Geen lokale cache in gebruik.',
      lastServerPull: 'Laatste ontvangst',
      lastServerPush: 'Laatste verzending',
      auditLog: 'Auditlogboek',
      auditLogDesc: 'Historiek van de beveiligingsgebeurtenissen van de server.',
      securityDashboard: 'Beveiligingsdashboard',
      securityRecommendations: 'Beveiligingsaanbevelingen',
      securityRecommendationsDesc: 'Contextueel advies op basis van uw beveiligingspostuur.',
      ipFiltering: 'IP-filtering',
      ipFilteringDesc: 'Beperk de toegang per IP-adres (CIDR-notatie ondersteund).',
      passwordPolicy: 'Wachtwoordbeleid',
      passwordPolicyDesc: 'Configureer de beveiligingsregels voor wachtwoorden.',
      // FIX-I18N-WIZARD (audit 2026-06-10, bundle.js:2713) : vergrendeling CyFun-niveau
      cyfunLevelLocked: 'Niveau vergrendeld voor deze organisatie. Neem contact op met de beheerder om te ontgrendelen.',
      cyfunLevelLockedNote: 'Niveau vergrendeld voor deze organisatie. Wijzigen uitgeschakeld.',
      cyfunLevelLockedToast: 'Niveau vergrendeld: wijziging geweigerd.'
    },

    // Algemeen
    common: {
      save: 'Opslaan',
      cancel: 'Annuleren',
      delete: 'Verwijderen',
      readOnly: 'Alleen-lezen',
      edit: 'Bewerken',
      actions: 'Acties',
      add: 'Toevoegen',
      close: 'Sluiten',
      search: 'Zoeken...',
      filter: 'Filteren',
      all: 'Alle',
      none: 'Geen',
      yes: 'Ja',
      no: 'Nee',
      loading: 'Laden...',
      saving: 'Opslaan...',
      saved: 'Opgeslagen',
      savedAt: 'Opgeslagen om',
      error: 'Fout',
      success: 'Gelukt',
      warning: 'Let op',
      info: 'Informatie',
      confirm: 'Bevestigen',
      discardConfirm: 'Niet-opgeslagen wijzigingen negeren?',
      confirmDelete: 'Weet u zeker dat u dit element wilt verwijderen? Deze actie is onomkeerbaar.',
      noData: 'Geen gegevens beschikbaar',
      required: 'Dit veld is verplicht',
      invalid: 'Ongeldige waarde',
      exportSuccess: 'Export geslaagd',
      exportError: 'Export mislukt. Controleer of er gegevens bestaan.',
      importSuccess: 'Import geslaagd',
      importError: 'Import mislukt. Controleer het bestandsformaat.',
      saveError: 'Opslaan mislukt. Uw gegevens blijven lokaal bewaard.',
      syncSuccess: 'Synchronisatie geslaagd',
      syncError: 'Synchronisatie mislukt',
      moveUp: 'Omhoog',
      moveDown: 'Omlaag',
      sortBy: 'Sorteren:',
      refresh: 'Vernieuwen',
      later: 'Later',
      enabled: 'Ingeschakeld',
      disabled: 'Uitgeschakeld',
      requirements: 'vereisten',
      measures: 'maatregelen',
      skip: 'Overslaan',
      new: 'Nieuw',
      status: 'Status',
      other: 'Overige',
      open: 'Openen',
      select: 'Selecteren',
      searchControl: 'Een maatregel zoeken',
      // FIX-I18N-KEYS (audit 2026-06-10)
      retry: 'Opnieuw proberen',
      never: 'Nooit'
    },

    // Sorteerlabels
    // Toolbar v2 (section-toolbar.js)
    sectionToolbar: {
      reset: 'Resetten',
      moreFilters: 'Filters'
    },

    sort: {
      reference: 'Ref.',
      title: 'Titel',
      status: 'Status',
      maturity: 'Maturiteit',
      date: 'Datum',
      name: 'Naam',
      value: 'Waarde',
      level: 'Niveau',
      priority: 'Prioriteit',
      score: 'Score',
      impact: 'Impact',
      probability: 'Waarschijnlijkheid',
      function: 'Functie',
      docMaturity: 'Doc.',
      implMaturity: 'Impl.',
      average: 'Gem.',
      applicability: 'Toepasselijkheid',
      implementation: 'Implementatie',
      clause: 'Clausule',
      lastReview: 'Laatste evaluatie',
      id: 'ID',
      dueDate: 'Vervaldatum',
      progress: 'Voortgang',
      link: 'Link',
      type: 'Type',
      audit: 'Audit',
      owner: 'Verantwoordelijke',
      ascending: 'oplopend',
      descending: 'aflopend'
    },

    // Prioriteiten
    priorities: {
      critical: 'Kritiek',
      high: 'Hoog',
      medium: 'Gemiddeld',
      low: 'Laag'
    },

    // Statussen
    statuses: {
      notStarted: 'Niet gestart',
      inProgress: 'In uitvoering',
      completed: 'Afgerond',
      blocked: 'Geblokkeerd',
      cancelled: 'Geannuleerd',
      open: 'Open',
      closed: 'Gesloten',
      planned: 'Gepland',
      realized: 'Uitgevoerd',
      todo: 'Te doen',
      suspended: 'Opgeschort'
    },

    statusLabels: {
      todo: 'Uit te voeren',
      inProgress: 'In uitvoering',
      suspended: 'Opgeschort',
      done: 'Uitgevoerd'
    },

    soaSourceLabels: {
      risk: 'Geïdentificeerd risico',
      legal: 'Wettelijke vereiste',
      contractual: 'Contractuele vereiste',
      bestPractice: 'Goede praktijk',
      regulatory: 'Regelgevende vereiste',
      business: 'Bedrijfsvereiste'
    },

    // Maanden
    months: {
      january: 'Januari',
      february: 'Februari',
      march: 'Maart',
      april: 'April',
      may: 'Mei',
      june: 'Juni',
      july: 'Juli',
      august: 'Augustus',
      september: 'September',
      october: 'Oktober',
      november: 'November',
      december: 'December'
    },

    // Eerste start
    firstLaunch: {
      title: 'Welkom bij Cyber-Assistant',
      subtitle: 'Selecteer uw voorkeurstaal',
      continue: 'Doorgaan',
      changeSettings: 'U kunt de taal op elk moment wijzigen in de Instellingen'
    },

    // Voettekst
    footer: {
      createdBy: 'Ontworpen door Jean-François Avart',
      contactMe: 'Contacteer mij',
      terms: 'Algemene voorwaarden',
      onlineManual: 'Onlinehandleiding'
    },

    // Zoeken
    search: {
      placeholder: 'Zoeken (acties, risico\'s, maatregelen, documenten...)',
      noResults: 'Geen resultaten gevonden',
      results: 'resultaten',
      ariaLabel: 'Globaal zoeken',
      scopeNote: 'Zoekopdracht beperkt tot het bereik:'
    },

    // Globale zoekresultaten
    searchResults: {
      action: 'Actie',
      risk: 'Risico',
      control: 'Maatregel',
      document: 'Document',
      audit: 'Audit',
      nc: 'Non-conformiteit',
      threat: 'Dreiging',
      stakeholder: 'Belanghebbende',
      kpi: 'KPI',
      asset: 'Kritieke asset',
      review: 'Evaluatie',
      nis2Control: 'NIS2-maatregel',
      criticalAsset: 'Kritieke asset',
      projectRisk: 'Projectrisico',
      // FIX-I18N-KEYS (audit 2026-06-10)
      recyfControl: 'ReCyF-maatregel'
    },

    // Servermodus
    serverMode: {
      notAvailable: 'De servermodus is niet beschikbaar in deze versie. Neem contact op met de uitgever voor de synchronisatiemodule.'
    },

    // Licentie / Activering
    license: {
      detecting: 'Licentie detecteren...',
      valid: 'Geldige licentie',
      notFound: 'Geen licentie gedetecteerd',
      title: 'Activering',
      trialActive: 'Proefperiode actief',
      trialExpired: 'Proefperiode verlopen',
      daysLeft: '{days} dagen resterend',
      pasteKey: 'Plak uw activeringssleutel',
      pasteHint: 'Plak de CSI2-...-sleutel die u per e-mail hebt ontvangen',
      activate: 'Licentie activeren',
      continueTrial: 'Proefperiode voortzetten',
      success: 'Licentie succesvol geactiveerd',
      error: 'Ongeldige licentiesleutel',
      expired: 'Licentie verlopen',
      organization: 'Organisatie',
      readOnlyNotice: 'Alleen-lezenmodus — activeer een licentie om gegevens te wijzigen',
      expiresAt: 'Verloopt op {date}',
      renewNeeded: 'Licentie verlopen — voer een nieuwe sleutel in om opnieuw te activeren',
      validUntil: 'Licentie geldig tot {date}',
      enterKey: 'Voer een licentiesleutel in',
      trialInfo: 'U beschikt over een proefperiode van {days} dagen om de oplossing te evalueren.',
      trialBanner: 'Proef: {days} d. resterend',
      trialExpiredBanner: 'Proefperiode verlopen',
      active: 'Licentie actief',
      // FIX-I18N-LICENSE (audit 2026-06-10, bundle.js:5479) : proefbanner,
      // licentiemuur en activeringsstap van de wizard
      wallTitle: 'Proefperiode beëindigd',
      wallDesc: 'Voer uw CSI2-...-licentiesleutel in om de applicatie te blijven gebruiken.',
      trialBannerText: 'Gratis proefperiode — {days} dagen resterend van 14',
      trialDetail: 'Gratis proefperiode — {days} dagen resterend van 14. Alle functies zijn beschikbaar.',
      activateBtn: 'Activeren',
      activated: 'Geactiveerd',
      mustActivate: 'Activeer uw licentie voordat u doorgaat',
      noLicense: 'Geen actieve licentie',
      noLicenseDetail: 'Activeer hieronder een licentiesleutel.'
    },
    // Authenticatie
    auth: {
      login: 'Aanmelden',
      logout: 'Afmelden',
      register: 'Registreren',
      username: 'Gebruikersnaam',
      password: 'Wachtwoord',
      confirmPassword: 'Wachtwoord bevestigen',
      setupTitle: 'Initiële configuratie',
      setupPrompt: 'U wordt de beheerder.',
      createAccount: 'Account aanmaken',
      createAdminAccount: 'Beheerdersaccount aanmaken',
      loginRequired: 'Toegang tot het managementsysteem voor informatiebeveiliging',
      loginFailed: 'Aanmelden mislukt',
      maxUsersReached: 'Maximum aantal gebruikers bereikt',
      userCreated: 'Account aangemaakt',
      accountCreated: 'Beheerdersaccount aangemaakt',
      sessionExpired: 'Sessie verlopen',
      passwordPolicy: '18+ tekens, hoofdletter, kleine letter, speciaal teken',
      passwordMismatch: 'De wachtwoorden komen niet overeen',
      fieldsRequired: 'Alle velden zijn verplicht',
      noAccount: 'Nog geen account?',
      backToLogin: 'Terug naar aanmelden',
      yourName: 'Uw naam',
      nameRequired: 'Naam vereist',
      passwordInvalid: 'Wachtwoord',
      chars18: '18+ tekens',
      uppercase: 'hoofdletter',
      lowercase: 'kleine letter',
      specialChar: 'speciaal teken',
      newPassword: 'Nieuw wachtwoord',
      // Wachtwoordvalidatie (i18n voor validatePwd)
      pwdMinChars: '18+ tekens',
      pwdUppercase: 'hoofdletter',
      pwdLowercase: 'kleine letter',
      pwdSpecial: 'speciaal teken',
      // FIX-I18N-AUTH (audit 2026-06-10, auth-manager.js:656) : serverschermen
      // (aanmelden, configuratie, wachtwoord, fouten) — sleutels ontbraken in beide locales
      adminAccess: 'Beheerderstoegang',
      hideAdminAccess: 'Verbergen',
      ssoLogin: 'Aanmelden via bedrijfs-SSO',
      serverUnavailable: 'Server tijdelijk onbeschikbaar — aanmelden kan mislukken.',
      serverError: 'Server onbeschikbaar',
      sessionTimeout: 'Formulier verlopen wegens inactiviteit. Voer uw gegevens opnieuw in.',
      setupAdminNotice: 'De eerste aangemaakte gebruiker wordt beheerder met alle beheerrechten.',
      setupFailed: 'Fout tijdens de configuratie',
      registrationFailed: 'Fout tijdens de registratie',
      changePassword: 'Wachtwoord wijzigen',
      changePasswordBtn: 'Wijzigen',
      changePasswordFailed: 'Fout bij het wijzigen van het wachtwoord',
      mustChangePassword: 'Wachtwoordwijziging verplicht',
      mustChangePasswordHint: 'Uw tijdelijk wachtwoord moet worden gewijzigd.',
      passwordChanged: 'Wachtwoord gewijzigd',
      currentPassword: 'Huidig wachtwoord',
      cooldown: 'Te veel pogingen. Probeer opnieuw over ',
      lastLogin: 'Laatste aanmelding',
      capsLockOn: 'Caps Lock staat aan',
      or: 'of',
      attemptWarning: 'Poging {n}/{max} — vergrendeling na {max} mislukte pogingen',
      httpBlockedTitle: 'Onbeveiligde verbinding',
      httpBlockedMsg: 'Cyber-Assistant verzendt gevoelige authenticatiegegevens. Toegang via onversleuteld HTTP is geblokkeerd in servermodus. Gebruik HTTPS om deze applicatie te openen.',
      httpsAccessBtn: 'Openen via HTTPS',
      httpBlockedNote: 'Als u een zelfondertekend certificaat gebruikt, aanvaard dan de beveiligingsuitzondering in uw browser.',
      iframeBlocked: 'De applicatie kan om veiligheidsredenen niet in een iframe worden weergegeven.',
      connEncrypted: 'Versleutelde verbinding',
      connUnencrypted: 'Onversleutelde verbinding',
      useHttpsProd: 'gebruik HTTPS in productie',
      httpsProdWarning: 'Gegevens worden onversleuteld verzonden. Schakel HTTPS in in productie.'
    },

    // Tabbladvergrendeling
    locks: {
      lockedBy: 'Dit tabblad wordt bewerkt door',
      lockAcquired: 'Tabblad vergrendeld',
      lockDenied: 'Tabblad al vergrendeld',
      lockReleased: 'Tabblad ontgrendeld',
      lockExpired: 'Vergrendeling verlopen. Schakel opnieuw over naar bewerkingsmodus.',
      connectedUsers: 'Aangemelde gebruikers',
      readOnlyLocked: 'Alleen-lezen — bewerkt door een andere gebruiker',
      readOnlyTab: 'Alleen-lezen.'
    },

    // Gebruikersbeheer
    users: {
      title: 'Gebruikersbeheer',
      description: 'Gebruikersaccounts aanmaken, schorsen of verwijderen.',
      noAccess: 'Toegang voorbehouden aan beheerders.',
      noUsers: 'Geen gebruikers gevonden.',
      count: '{count} / {max} gebruikers',
      countFiltered: '{shown} / {count} gebruikers (gefilterd)',
      searchPlaceholder: 'Zoeken (naam, e-mail, rol)…',
      addUser: 'Gebruiker toevoegen',
      name: 'Naam',
      role: 'Rol',
      admin: 'Beheerder',
      editor: 'Editor',
      status: 'Status',
      actions: 'Acties',
      active: 'Actief',
      suspended: 'Geschorst',
      you: '(u)',
      suspend: 'Schorsen',
      reactivate: 'Heractiveren',
      resetPassword: 'Wachtw. resetten',
      resetPasswordFor: 'Wachtwoord resetten van',
      newPassword: 'Nieuw wachtwoord (18+ tekens)',
      confirmPassword: 'Bevestigen',
      password: 'Wachtwoord',
      passwordHelp: 'Minimaal 18 tekens, 1 hoofdletter, 1 kleine letter, 1 speciaal teken.',
      delete: 'Verwijderen',
      deleteConfirm: 'Deze gebruiker verwijderen?',
      confirmDelete: 'Deze gebruiker definitief verwijderen?',
      confirmDeleteDouble: 'Deze actie is onomkeerbaar. Verwijdering bevestigen?',
      confirmSuspend: 'Deze gebruiker schorsen?',
      confirmReactivate: 'Deze gebruiker heractiveren?',
      create: 'Gebruiker aanmaken',
      createDesc: 'Voeg een nieuw gebruikersaccount toe.',
      createBtn: 'Account aanmaken',
      createSuccess: 'Gebruiker aangemaakt',
      deleteSuccess: 'Gebruiker verwijderd',
      suspendSuccess: 'Gebruiker geschorst',
      reactivateSuccess: 'Gebruiker geheractiveerd',
      resetSuccess: 'Wachtwoord gereset',
      loadError: 'Kan de gebruikers niet laden.',
      errorNameShort: 'De naam moet minstens 2 tekens bevatten.',
      errorPwdShort: 'Het wachtwoord moet minstens 18 tekens bevatten.',
      errorPwdWeak: 'Het wachtwoord moet een hoofdletter, een kleine letter en een speciaal teken bevatten.',
      errorPwdMismatch: 'De wachtwoorden komen niet overeen.',
      accountSuspended: 'Account geschorst',
      currentUser: 'U',
      userCount: '{{count}}/{{max}} gebruikers',
      roleAdmin: 'Beheerder',
      roleEditor: 'Editor',
      roleViewer: 'Lezer',
      roleLabel: 'Rol',
      roleHelp: 'Editor = kan gegevens wijzigen. Lezer = alleen-lezen.',
      changeRoleTitle: 'Rol wijzigen',
      changeRoleConfirm: 'De rol van {name} wijzigen in {role}?',
      roleChangeSuccess: 'Rol gewijzigd',
      usernamePlaceholder: 'gebruiker',
      pwdMinPlaceholder: 'min. 18 tekens',
      confirmPwdPlaceholder: 'Wachtwoord bevestigen',
      deleteTitle: 'Gebruiker verwijderen',
      confirmDeleteBtn: 'Definitief verwijderen',
      suspendTitle: 'Schorsen',
      reactivateTitle: 'Heractiveren',
      usersLabel: 'gebruikers',
      // FIX-I18N-AUTH (audit 2026-06-10) : badge tijdelijk wachtwoord
      tempPassword: 'Tijd. wachtw.',
      // FIX-SSO-EMAIL-LINK (audit 2026-06-10, aanvulling client) : e-mailveld
      email: 'E-mail',
      emailOptional: 'E-mail (optioneel)',
      emailPlaceholder: 'gebruiker@voorbeeld.be',
      emailHelp: 'Maakt koppeling van het account met de bedrijfs-SSO mogelijk.',
      editEmail: 'E-mail',
      editEmailTitle: 'E-mail wijzigen (SSO-koppeling)',
      emailClearHint: 'Laat leeg en sla op om het e-mailadres te verwijderen.',
      emailUpdateSuccess: 'E-mail bijgewerkt',
      // === CSI-ME === multi-entiteiten
      entityMain: 'Hoofdentiteit',
      entityLabel: 'Entiteit(en)',
      entityHelp: 'Een subentiteit ziet enkel haar eigen registraties.',
      entityHelpMulti: 'Een subentiteit ziet enkel haar eigen registraties. Meervoudige selectie mogelijk (Ctrl/Cmd) — "Hoofdentiteit" kan niet worden gecombineerd.',
      editEntities: 'Entiteit(en)',
      editEntitiesTitle: 'Toewijzing aan subentiteiten wijzigen',
      canEditSubEntities: 'Mag gegevens van sub-entiteiten bewerken (alleen accounts van de hoofdperimeter)',
      editEntitiesHint: 'Meervoudige selectie mogelijk (Ctrl/Cmd). "Hoofdentiteit" = geen toewijzing. De laatste subentiteit verwijderen schorst het account (fail-closed).',
      entitiesUpdateSuccess: 'Toewijzing bijgewerkt',
      lastEntityDetach: 'Dit account behoort dan tot geen enkele subentiteit meer en zou toegang krijgen tot de hoofdperimeter. Bevestigen?',
      ssoDefaultEntity: 'Standaardsubentiteit voor nieuwe SSO-gebruikers',
      ssoCardTitle: 'SSO-authenticatie (OIDC)',
      ssoLoading: 'SSO-configuratie laden…',
      ssoLoadFailed: 'Kan de SSO-configuratie niet laden.',
      ssoEnable: 'SSO-authenticatie inschakelen',
      ssoIssuer: 'Issuer URL',
      ssoClientId: 'Client ID',
      ssoClientSecret: 'Client Secret',
      ssoMode: 'Authenticatiemodus',
      ssoModeOnly: 'Alleen SSO (aanbevolen)',
      ssoModeMixed: 'SSO + wachtwoord',
      ssoDefaultRole: 'Standaardrol voor nieuwe SSO-gebruikers',
      ssoRoleEditor: 'Editor',
      ssoRoleViewer: 'Lezer',
      ssoMaxUsers: 'Max. aantal gebruikers (alle accounts)',
      ssoAllowedDomains: 'Toegestane e-maildomeinen (leeg = alle)',
      ssoAdvanced: 'Geavanceerde opties (lokale IAM / on-premise)',
      ssoAllowHttp: 'HTTP toestaan (lokale IAM zonder TLS-certificaat)',
      ssoCaPath: 'Pad naar het CA-certificaat (interne PKI)',
      ssoSkipVerify: 'TLS-verificatie uitschakelen (enkel dev/test!)',
      ssoSkipVerifyWarn: 'Opgelet: het uitschakelen van TLS-verificatie stelt de SSO-uitwisselingen bloot aan man-in-the-middle-aanvallen. Enkel te gebruiken in een testomgeving.',
      ssoPasswordNote: 'Aanmelden met wachtwoord blijft altijd beschikbaar voor het beheerdersaccount, zelfs in de modus "alleen SSO".',
      ssoCallbackUrl: 'Callback URL (te configureren in uw IdP)',
      ssoTestBtn: 'Verbinding testen',
      ssoTesting: 'Test bezig…',
      ssoTestFailedPrefix: 'SSO-test mislukt: ',
      ssoIssuerRequired: 'Gelieve de Issuer URL in te vullen.',
      ssoSaveBtn: 'Opslaan',
      ssoSaving: 'Opslaan…',
      ssoSaved: 'SSO-configuratie opgeslagen.',
      ssoErrorPrefix: 'Fout: ',
      ssoRequiredFields: 'Issuer URL, Client ID en Client Secret zijn vereist om SSO in te schakelen.',
      ssoCaInvalid: 'Ongeldig CA-pad. Gebruik een absoluut pad zonder ".." (bv. /etc/ssl/certs/ca.pem)',
      ssoDefaultEntityNone: 'Hoofdentiteit (geen)',
      ssoAllowedDomainsWarn: 'Geen toegestaan domein: elk account dat door de IdP wordt teruggegeven, kan toegang krijgen. Vul uw domeinen in, zeker bij een multi-tenant IdP (Google, Azure "common").',
      ssoMapSection: 'Groepstoewijzing (rollen & entiteiten)',
      ssoMapInfo: 'Wijs automatisch een rol en/of entiteit toe op basis van de groepen die de IdP verzendt. Zonder overeenkomst geldt de standaardrol/-entiteit.',
      ssoMapAddRow: '+ Regel toevoegen',
      ssoGroupClaim: 'Naam van de groepsclaim (bijv. groups, roles)',
      ssoScopes: 'OIDC-scopes (leeg = openid email profile)',
      ssoGroupToRole: 'Groep → rol',
      ssoGroupToEntity: 'Groep → entiteit',
      ssoGroupPlaceholder: 'IdP-groep',
      ssoStrictMapping: 'Accounts zonder toegewezen groep weigeren (strikt)',
      ssoReconcile: 'Toewijzing bij elke aanmelding opnieuw toepassen',
      ssoSecSection: 'Verhoogde beveiliging (aanbevolen)',
      ssoVerifySig: 'Handtekening van tokens verifiëren (JWKS) — aanbevolen',
      ssoRequireEmailVerified: 'Geverifieerd e-mailadres vereisen om een account aan te maken — aanbevolen',
      ssoIdpLogout: 'Ook afmelden bij de identiteitsprovider (SSO-logout)',

      // === CSI-MCP === MCP-interface (alleen-lezen AI-toegang)
      mcpCardTitle: 'AI-toegang (MCP)',
      mcpCardDesc: 'Geef een AI-assistent alleen-lezen toegang tot uw governancegegevens via MCP (Model Context Protocol), de interoperabiliteitsstandaard voor AI-assistenten.',
      mcpAskTitle: 'Wat u aan uw AI zult kunnen vragen',
      mcpAsk1: 'Welke kritieke risico\'s hebben geen actieplan?',
      mcpAsk2: 'Hoe staat mijn NIS2-maturiteit ervoor, functie per functie?',
      mcpAsk3: 'Welke acties zijn te laat, en bij wie?',
      mcpAsk4: 'Stel de conformiteitssamenvatting op voor de directiebeoordeling.',
      mcpAskFoot: 'Uw assistent antwoordt op uw echte, actuele gegevens — geen copy-paste, geen manuele export.',
      mcpSharedUs: 'Wat Cyber-Assistant beveiligt',
      mcpSharedYou: 'Wat uw organisatie beveiligt',
      mcpSharedUsList: 'Persoonlijke intrekbare tokens · Alleen-lezen · Bereik beperkt tot het account · Toegangslogboek',
      mcpSharedYouList: 'Intern netwerk · VPN · Reverse proxy · IP-filtering · mTLS · Identiteitsgateway',
      mcpHowTitle: 'Hoe het werkt',
      mcpHow1: 'Cyber-Assistant stelt een standaard MCP-interface beschikbaar: elke compatibele assistent maakt verbinding met een token dat u hier genereert.',
      mcpHow2: 'De toegang is alleen-lezen — geen enkele assistent kan uw gegevens wijzigen.',
      mcpHow3: 'Elk token is persoonlijk: het erft het entiteitsbereik van het gekoppelde account, elke toegang wordt gelogd en u trekt het met één klik in.',
      mcpSharedTitle: 'Model van gedeelde verantwoordelijkheid',
      mcpSharedApp: 'Cyber-Assistant beveiligt de applicatietoegang: persoonlijke intrekbare tokens, alleen-lezen, gegevensbereik beperkt tot het account, toegangslogboek.',
      mcpSharedOrg: 'Uw organisatie beveiligt de blootstelling van deze interface, volgens haar beleid en architectuur: intern netwerk, VPN, reverse proxy, IP-filtering, mTLS of identiteitsgateway.',
      mcpSharedReco: 'Aanbeveling: stel deze interface uitsluitend binnen uw vertrouwde netwerk beschikbaar.',
      mcpChoiceTitle: 'Keuze van de AI-assistent',
      mcpChoiceBody: 'De geraadpleegde gegevens verlaten de toepassing richting de assistent die u koppelt en worden verwerkt volgens de voorwaarden van de aanbieder. Geef de voorkeur aan een AI die op uw eigen infrastructuur draait of van een soevereine aanbieder komt, en toets die aan uw beleid: gegevenslocatie, geen hergebruik voor training, AVG- en NIS2-conformiteit.',
      mcpEnableLabel: 'AI-toegang (MCP) inschakelen',
      mcpEndpointLabel: 'Adres van de MCP-interface',
      mcpEndpointHint: 'Plak dit adres in uw AI-client, met de header Authorization: Bearer <token>.',
      mcpBanner: 'AI-toegang is actief. Geraadpleegde gegevens worden naar de gekoppelde assistenten verzonden. Controleer regelmatig de tokenlijst en geef de voorkeur aan een lokale of soevereine AI die aan uw beleid voldoet.',
      mcpTokensTitle: 'Toegangstokens',
      mcpTokensEmpty: 'Nog geen token.',
      mcpTokenLabel: 'Label',
      mcpTokenAccount: 'Gekoppeld account',
      mcpTokenNoAccount: 'Geen geschikt account: maak eerst een actief account aan voordat u een token genereert.',
      mcpTokenUsersFailed: 'Accountlijst niet beschikbaar — controleer de serververbinding en open dit venster opnieuw.',
      mcpTokenCreated: 'Aangemaakt op',
      mcpTokenExpires: 'Verloopt op',
      mcpTokenLastUsed: 'Laatst gebruikt',
      mcpTokenNever: 'Nooit',
      mcpTokenRevoked: 'Ingetrokken',
      mcpTokenCreate: 'Token genereren',
      mcpTokenRevoke: 'Intrekken',
      mcpTokenRevokeConfirm: 'Dit token intrekken? De AI-client die het gebruikt verliest onmiddellijk toegang.',
      mcpTokenOnce: 'Kopieer dit token nu: het wordt nooit meer getoond.',
      mcpTokenCreatedOk: 'Token aangemaakt.',
      mcpTokenRevokedOk: 'Token ingetrokken.',
      mcpTest: 'Testen',
      mcpTestOk: 'MCP-interface bereikbaar en operationeel.',
      mcpTestFail: 'Test mislukt.',
      mcpTestPartial: 'Interface bereikbaar, maar er zijn nog punten te corrigeren.',
      mcpTokensLoadFailed: 'Kan de tokenlijst niet lezen.',
      mcpDisabledTokensHint: 'De functie is uitgeschakeld: de interface reageert niet meer. Deze tokens worden NIET verwijderd — ze worden weer geldig zodra u opnieuw inschakelt. Trek in wat niet meer gebruikt mag worden.',
      mcpCheckEnabled: 'Functie ingeschakeld',
      mcpCheckLicense: 'Geldige licentie',
      mcpCheckHtaccess: 'Gegevensbestanden beschermd (.htaccess)',
      mcpCheckUserIni: 'PHP-hardening aanwezig (.user.ini)',
      mcpSaved: 'Configuratie opgeslagen.',
      mcpSaveFailed: 'Opslaan mislukt.',
      mcpLoadFailed: 'Laden van de MCP-configuratie mislukt.',
      mcpNotDeployed: 'mcp.php staat niet op de server — upload het bestand en herlaad de pagina.',
      mcpModalTitle: 'AI-toegang (MCP) inschakelen?',
      mcpModalIntro: 'U staat op het punt alleen-lezen toegang te openen tot uw governancegegevens — conformiteit, risico\'s, activa, actieplan — voor de AI-assistenten die u per token toestaat.',
      mcpModalControl: 'Wat onder uw controle blijft: alleen-lezen, één token per gebruiker beperkt tot zijn entiteitsbereik, een logboek van alle raadplegingen, onmiddellijke intrekking en een globale uitschakeling op elk moment.',
      mcpModalArchi: 'Wat tot uw architectuur behoort: de blootstelling van deze interface (intern netwerk, VPN, reverse proxy, IP-filtering, identiteitsgateway). Wij raden aan die binnen uw vertrouwde netwerk te houden.',
      mcpModalGov: 'Wat uw governance engageert: de geraadpleegde gegevens worden naar de gekoppelde AI-assistent verzonden. Geef de voorkeur aan een lokale of soevereine AI en toets die aan uw beleid (gegevenslocatie, geen training op uw inhoud, AVG/NIS2).',
      mcpModalCheck: 'Ik heb het bovenstaande gelezen en bevestig het openen van de MCP-toegang.',
      mcpModalConfirm: 'Inschakelen',
      mcpModalCancel: 'Annuleren',
      mcpShowcaseTitle: 'AI-toegang (MCP)',
      mcpShowcaseBadge: 'Server-editie',
      mcpShowcaseBadgeShort: 'Server',
      mcpShowcaseBody: 'Koppel een AI-assistent aan uw ISMS zodat die antwoordt op uw conformiteitsgegevens, alleen-lezen en met persoonlijke intrekbare toegang.',
      mcpShowcaseAvail: 'Beschikbaar in de Server-editie.',
      mcpShowcaseMeanwhile: 'In afwachting daarvan: u kunt uw gegevens als JSON exporteren en bij een gesprek met uw AI-assistent voegen — rekening houdend met de gevoeligheid ervan en met uw vertrouwelijkheidsbeleid.',
      entShowcaseTitle: 'Multi-entiteit',
      entShowcaseBody: 'Beheer tot 50 entiteiten vanuit één installatie: geconsolideerd groepsdashboard, strikte gegevensscheiding per vestiging, import/export per entiteit.',
      entShowcaseAvail: 'Beschikbaar in de Server-editie.',
      entShowcaseWhoTitle: 'Voor wie?',
      entShowcaseWho1: 'Groep met meerdere vestigingen: elke vestiging voert in, de directie consolideert.',
      entShowcaseWho2: 'Entiteiten met gescheiden ISMS: gescheiden gegevens, gemeenschappelijke methode.',
      entShowcaseWho3: 'Dienstverlener (MSSP): één afgeschermde ruimte per klant, één installatie.',
      entShowcaseFeat1: 'Tot 50 entiteiten',
      entShowcaseFeat1d: 'Eén installatie, één bereik per vestiging, entiteit of klant.',
      entShowcaseFeat2: 'Geconsolideerd dashboard',
      entShowcaseFeat2d: 'Risico\'s, acties, non-conformiteiten en activa van alle entiteiten, op één scherm.',
      entShowcaseFeat3: 'Strikte scheiding',
      entShowcaseFeat3d: 'Gegevensscheiding aan de serverzijde; een vestigingsaccount ziet de andere nooit.',
      entShowcaseFeat4: 'Rechten per sectie',
      entShowcaseFeat4d: 'Geen / Lezen / Schrijven per sectie, per entiteit. Een nieuwe entiteit start zonder rechten.',
      entShowcaseFeat5: 'Import/export per entiteit',
      entShowcaseFeat5d: 'Elke export is gestempeld; de server weigert een herimport in het verkeerde bereik.',
      entShowcaseFeat6: 'Navigeren zonder verwarring',
      entShowcaseFeat6d: 'Bereikselector, permanente banner, gemarkeerde tabtitel en favicon.',
      mcpShowcaseHowTitle: 'Hoe het zal werken',
      mcpShowcaseHow1: 'Een persoonlijk token dat u genereert, met één klik intrekbaar.',
      mcpShowcaseHow2: 'Alleen-lezen: geen enkele assistent kan uw gegevens wijzigen.',
      mcpShowcaseHow3: 'Werkt met gangbare assistenten en met een AI op uw eigen infrastructuur.'
    },

    entities: {
      // === CSI-ME === labels van de multi-entiteitenfunctie (entity-ui.js)
      cardTitle: 'Multi-entiteiten',
      cardDesc: 'Schot subentiteiten af (directies, vestigingen, sites…) die enkel toegang hebben tot hun eigen registraties.',
      notInLicense: 'Deze functie is niet inbegrepen in uw huidige licentie.',
      loadConfigFailed: 'Kan de multi-entiteitenconfiguratie niet laden.',
      opsTitle: 'Multi-entiteiten — bewerkingen',
      opsDesc: 'Back-up en herstel van ALLE partities (hoofdentiteit + subentiteiten).',
      backupBtn: 'Volledige back-up downloaden',
      restoreBtn: 'Volledige back-up herstellen…',
      opsHint: 'Het herstel vervangt elke partitie (automatische momentopname vóór overschrijven, rotatie 20). Als een partitie wordt bewerkt, wordt het herstel geweigerd — u kunt dan de vergrendelingen overnemen.',
      perimeter: 'Perimeter',
      allEntities: 'Alle entiteiten',
      allEntitiesTitle: 'Geconsolideerde alleen-lezen weergave (alle entiteiten samen)',
      consolidatedHint: 'alleen-lezen',
      truncatedTitle: 'Weergave beperkt om de vlotheid te behouden.',
      truncatedHint: 'Gedeeltelijke lijst — verfijn via zoekopdracht of entiteit.',
      mainEntity: 'Hoofdentiteit',
      archivedTag: '(gearchiveerd)',
      backupFailedPrefix: 'Back-up mislukt: ',
      confirmScopeEdit: 'U bevindt zich op de perimeter "{{name}}".\n\nBewerkingsmodus inschakelen op DEZE perimeter?',
      crossImportConfirm: 'Dit bestand komt uit een andere perimeter ({{origin}}).\n\nHier importeren zal de gegevens van de huidige perimeter ({{target}}) VERVANGEN. Bevestigen?',
      prefillTitle: 'Kopieer de veilige standaardwaarden van de hoofdentiteit (schalen, referentieel, doel) — nooit bedrijfsgegevens',
      restoreErrorPrefix: 'Herstel: ',
      restoreTakeoverConfirm: 'De vergrendelingen overnemen en toch herstellen?',
      sections: {
        'risks': 'Risico\'s', 'threats-section': 'Dreigingen', 'actions': 'Acties',
        'nonconformities': 'Afwijkingen', 'critical-assets': 'Kritieke assets',
        'audits': 'Audits', 'documents': 'Documenten', 'stakeholders': 'Belanghebbenden',
        'kpis': 'Indicatoren', 'managementReviews': 'Directiebeoordelingen',
        'project-risks': 'Projectrisico\'s', 'risk-analysis': 'Risicoanalyses',
        'nis2-program': 'Budget / Programma', 'docReview': 'Documentbeoordeling',
        'nis2-socle': 'NIS2-basis', 'app-config': 'Configuratie (taal, referentieel)'
      },
      cols: {
        title: 'Titel', category: 'Categorie', likelihoodShort: 'W', impactShort: 'I',
        status: 'Status', threat: 'Dreiging', type: 'Type', priority: 'Prioriteit',
        dueDate: 'Deadline', assignee: 'Verantwoordelijke', severity: 'Ernst', name: 'Naam',
        importance: 'Belang', date: 'Datum', version: 'Versie', role: 'Rol',
        indicator: 'Indicator', value: 'Waarde', target: 'Doel', item: 'Element'
      },
      moveTargetAria: 'Doelperimeter van de verplaatsing',
      actionsCol: 'Acties',
      shownCountSingular: '{{n}} element weergegeven',
      shownCountPlural: '{{n}} elementen weergegeven',
      shownTotal: '{{total}} in totaal (max. 1000 geladen)',
      selectionCol: 'Selectie',
      selectItemAria: 'Selecteren: {{title}} ({{entity}})',
      switchFailed: 'Overschakelen naar "{{name}}" onmogelijk (server onbereikbaar) — perimeter ongewijzigd.',
      switchDirtyConfirm: 'Sommige wijzigingen zijn nog niet op de server opgeslagen:\n\n{{list}}\n\nVan perimeter wisselen verwerpt ze (er wordt een reservekopie gedownload).\n\nToch doorgaan?',
      switchDirtyBackedUp: 'Reservekopie van uw niet-opgeslagen wijzigingen: {{n}} bestand(en).',
      switchRenderFailed: 'Perimeter gewijzigd, maar een scherm kon niet correct worden weergegeven — herlaad de pagina als de weergave inconsistent lijkt.',
      switchFlushPending: 'Er worden nog wijzigingen verzonden — probeer zo dadelijk opnieuw.',
      readonlySectionNote: 'Sectie in alleen-lezen voor uw perimeter — wijzigingen worden er niet opgeslagen.',
      readonlyNav: 'Alleen-lezen (rechten van de perimeter)',
      myEntity: 'Mijn entiteit',
      consoleTitle: 'Geconsolideerde weergave — alle entiteiten',
      consoleHint: 'Alleen-lezen. Elke rij vermeldt de entiteit van herkomst. Bewerken gebeurt in de betrokken perimeter.',
      sectionLabel: 'Sectie',
      refresh: 'Vernieuwen',
      loading: 'Laden…',
      loadFailed: 'Laden onmogelijk',
      networkError: 'Netwerkfout',
      noItems: 'Geen elementen.',
      entityCol: 'Entiteit',
      readOnly: 'Alleen-lezen',
      sectionViewAria: 'Weergave van de sectie',
      entityFilterAll: 'Alle entiteiten',
      sectionSearchPlaceholder: 'Zoeken in de geconsolideerde weergave…',
      openInEntity: 'Openen in de entiteit',
      openedInEntity: 'Bronperimeter geopend. Het element blijft in raadpleegmodus.',
      exportGroupTag: 'hoofdentiteit',
      selectedN: '{{n}} geselecteerd',
      moveTo: '→ verplaatsen naar',
      move: 'Verplaatsen',
      scopeBanner: 'Perimeter: {{name}} — u raadpleegt/bewerkt een subentiteit',
      spaceLabel: 'Werkruimte {{name}}',
      spaceGeneric: 'Werkruimte subentiteit',
      groupDataBtn: 'Groepsgegevens (lezen)',
      groupConsoleTitle: 'Gegevens van de hoofdentiteit — alleen-lezen',
      groupConsoleHint: 'Secties die de hoofdentiteit ter lezing deelt. Om een van deze elementen aan uw registraties te koppelen, maakt u er lokaal een variant van in uw werkruimte.',
      noSharedSection: 'Geen gedeelde sectie.',
      noSharedItems: 'Geen gedeelde elementen in deze sectie (of gegevens nog niet gesynchroniseerd).',
      tileTitle: 'Groepsweergave — activiteit van de subentiteiten',
      subEntitiesN: '{{n}} subentiteit(en)',
      tileEmpty: 'Geen subentiteit geconfigureerd. Voeg er toe via Instellingen ▸ Multi-entiteiten.',
      colSubEntity: 'Subentiteit',
      colLastActivity: 'Laatste activiteit',
      colBy: 'Door',
      colSections: 'Secties',
      colState: 'Toestand',
      archivedTag: '(gearchiveerd)',
      disabledTag: '(uitgeschakeld)',
      inEdition: 'In bewerking · {{name}}',
      free: 'Vrij',
      consult: 'Raadplegen',
      noActivity: 'geen activiteit',
      justNow: 'zonet',
      minsAgo: '{{n}} min geleden',
      hoursAgo: '{{n}} u geleden',
      daysAgo: '{{n}} d geleden',
      activateHint: 'Schakel de modus in om subentiteiten aan te maken. Het inschakelen schrijft geen gegevens: uw huidige registraties worden de hoofdentiteit.',
      activated: 'Multi-entiteitenmodus ingeschakeld',
      deactivated: 'Modus uitgeschakeld',
      addPlaceholder: 'Naam van de subentiteit',
      capReached: 'Licentieplafond bereikt ({{max}}).',
      clusterKeys: 'risico\'s, dreigingen, acties, SoA, maatregelen, audits, afwijkingen, assets',
      clusterName: 'ISMS-kernblok',
      configChangedReload: 'Configuratie elders gewijzigd — herladen',
      configInvalid: 'Ongeldige configuratie',
      countMax: '{{count}} / {{max}} subentiteiten',
      created: 'Subentiteit aangemaakt (rechten gesloten — open ze via het profiel en wijs accounts toe)',
      deactivateConfirm: 'Multi-entiteitenmodus uitschakelen?\n\nDe {{n}} subentiteit(en) en hun gegevens worden BEWAARD maar blijven onzichtbaar tot heractivering. De toegewezen accounts worden geblokkeerd.',
      deleteConfirm: 'Subentiteit "{{name}}" verwijderen?',
      deleteConfirmStrong: '"{{name}}" definitief VERWIJDEREN?\n\n• De gegevens worden ONTOEGANKELIJK (inclusief auditbewijs).\n• De naam "{{name}}" blijft GERESERVEERD en kan niet opnieuw worden aangemaakt zonder serveringreep.\n\nVerkies "Archiveren" (omkeerbaar, geen verlies). Er wordt een reserve-export gedownload vóór de verwijdering.\n\nVerwijdering bevestigen?',
      deleteFailed: 'Mislukt (nog accounts toegewezen?)',
      archive: 'Archiveren',
      unarchive: 'Dearchiveren',
      archiveTitle: 'Verbergen en uitsluiten van het licentiequotum — omkeerbaar, geen gegevensverlies',
      archived: 'Sub-entiteit gearchiveerd (omkeerbaar)',
      unarchived: 'Sub-entiteit gedearchiveerd',
      deleted: 'Subentiteit verwijderd',
      invalidBackup: 'Ongeldig bestand: een volledige back-up werd verwacht (csi-backup-all-v1).',
      modeActivate: 'Multi-entiteitenmodus inschakelen',
      modeOn: 'Modus ingeschakeld',
      modifiedReload: 'Elders gewijzigd — herladen',
      moveConfirm: '{{n}} element(en) verplaatsen naar "{{name}}"?\n\nDe elementen worden gekopieerd en vervolgens gecontroleerd vóór verwijdering uit de bron (geen verlies). Bewerken blijft daarna mogelijk in de doelperimeter.\n\n⚠ Enkel de elementen van deze sectie worden verplaatst — GEKOPPELDE objecten (acties, maatregelen, gekoppelde assets…) blijven in de bronperimeter. Verplaats ze indien nodig afzonderlijk, of koppel ze lokaal opnieuw in de doelperimeter.',
      moveDone: '{{n}} element(en) verplaatst',
      moveErrors: '{{n}} mislukking(en)',
      moveSkipped: '{{n}} overgeslagen (al aanwezig)',
      moveTargetSame: 'De geselecteerde elementen bevinden zich al in de doelperimeter.',
      nameInvalid: 'Ongeldige naam',
      nameRequired: 'Naam vereist',
      newEntityHint: 'Een nieuwe subentiteit start LEEG en zonder rechten (fail-closed). Open haar secties via het profiel en wijs vervolgens accounts toe in "Gebruikers".',
      prefill: 'Vooraf invullen',
      prefillConfirm: '"{{name}}" vooraf invullen met de standaardwaarden van de hoofdentiteit (impactschalen, referentieel, maturiteitsdoel)?\n\nEr worden geen bedrijfsgegevens (risico\'s, acties…) gekopieerd.',
      prefilled: 'Standaardwaarden gekopieerd naar "{{name}}"',
      profileTitle: 'Profiel "Standaardsubentiteit" — rechten per sectie',
      restoreConfirm: 'VOLLEDIG HERSTEL\n\nDit zal de gegevens van de hoofdentiteit en van {{n}} subentiteit(en) VERVANGEN door de inhoud van de back-up{{when}}.\n\nEr wordt automatisch een momentopname van de huidige toestand genomen vóór het overschrijven. Doorgaan?',
      rightNone: 'Niets',
      rightRead: 'Lezen',
      rightWrite: 'Schrijven',
      rightsUpdated: 'Rechten bijgewerkt',
      saveFailed: 'Mislukt',
      scalesImposed: 'opgelegd door de hoofdentiteit',
      scalesLocked: 'Lezen (vergrendeld)',
      scalesName: 'Schalen & referentieel',
      subEntitiesLabel: 'Subentiteiten',
      // === CSI-ME === (import/export per entiteit, 2026-07-09)
      impexpTitle: 'Multi-entiteiten — export / import per entiteit',
      impexpDesc: 'Exporteer een individuele entiteit (opnieuw importeerbaar in de lokale versie), de hele groep, of importeer een bestand om het toe te voegen als nieuwe entiteit of een bestaande entiteit te overschrijven.',
      exportEntityLabel: 'Een individuele entiteit exporteren:',
      exportEntityBtn: 'Deze entiteit exporteren',
      exportGroupLabel: 'De hele groep exporteren:',
      exportBundleBtn: 'Eén bundel (alle)',
      exportPerFileBtn: 'Eén bestand per entiteit',
      exportPerFileDone: 'Export per bestand voltooid ({{n}} bestand(en))',
      exportFailedPrefix: 'Export mislukt: ',
      importLabel: 'Een entiteitsbestand of een back-up importeren:',
      importEntityBtn: 'Een entiteit importeren…',
      importTitle: 'Een entiteit importeren',
      importIntro: 'Importeer een entiteitsexport (individueel bestand) of een volledige back-up. U kunt het toevoegen als NIEUWE entiteit, of een bestaande entiteit OVERSCHRIJVEN.',
      chooseFile: 'Een bestand kiezen…',
      fileReadError: 'Kan het bestand niet lezen.',
      invalidFile: 'Ongeldig JSON-bestand.',
      importedEntity: 'Geïmporteerde entiteit',
      noDataInFile: 'Dit bestand bevat geen bruikbare entiteit (geen gegevens).',
      bundleDetected: 'Volledige back-up gedetecteerd ({{n}} entiteit(en) met gegevens). Kies de te importeren bron, of voeg ze allemaal toe als nieuwe entiteiten.',
      importAllAsNew: 'ALLE toevoegen als nieuwe entiteiten',
      modeConsolidate: 'Consolideren — toevoegen als NIEUWE entiteit',
      modeOverwrite: 'Een BESTAANDE entiteit overschrijven',
      newEntityNamePh: 'Naam van de nieuwe entiteit',
      newEntityNameLabel: 'Naam van de nieuwe entiteit:',
      overwriteTargetLabel: 'Te overschrijven entiteit:',
      overwriteWarn: '⚠ De inhoud van de gekozen entiteit wordt VERVANGEN. Er wordt automatisch een momentopname genomen vóór het overschrijven.',
      importConfirmBtn: 'Importeren',
      importInProgress: 'Import bezig…',
      importCancelled: 'Import geannuleerd.',
      importErrorPrefix: 'Import: ',
      importLockConfirm: 'De doelpartitie wordt bewerkt door {{who}}. De vergrendeling overnemen en toch importeren?',
      overwriteConfirm: 'Entiteit "{{name}}" OVERSCHRIJVEN met deze gegevens?\n\nAl haar huidige gegevens worden vervangen. Er wordt een momentopname genomen vóór het overschrijven.',
      overwriteGroupConfirm: 'De HOOFDENTITEIT OVERSCHRIJVEN met deze gegevens?\n\nDe door de groep opgelegde schalen blijven behouden, maar alle andere gegevens van de hoofdentiteit worden vervangen. Er wordt een momentopname genomen vóór het overschrijven.',
      createdOk: 'Entiteit aangemaakt: {{name}} (id {{id}}).',
      overwrittenOk: 'Entiteit overschreven: {{id}}.',
      lockStolen: '(vergrendeling overgenomen van {{who}})',
      bundleImportDone: 'Voltooid: {{ok}} aangemaakt, {{fail}} mislukt.',
      pickEntityToLoadTitle: 'Een entiteit laden',
      pickEntityToLoad: 'Welke entiteit laden in deze werkruimte?'
    },
    // Operationele capaciteiten (spider-/radargrafiek)
    capabilities: {
      gouvernance: 'Governance',
      gestionActifs: 'Assetbeheer',
      protectionInformations: 'Informatiebescherming',
      securiteRH: 'Personeelsbeveiliging',
      securitePhysique: 'Fysieke beveiliging',
      securiteSystemeReseau: 'Systeem- en netwerkbeveiliging',
      securiteApplications: 'Applicatiebeveiliging',
      configurationSecurisee: 'Veilige configuratie',
      gestionIdentitesAcces: 'Identiteits- en toegangsbeheer',
      gestionMenacesVulnerabilites: 'Beheer van dreigingen en kwetsbaarheden',
      continuite: 'Continuïteit',
      securiteRelationsFournisseurs: 'Beveiliging van leveranciersrelaties',
      reglementationConformite: 'Regelgeving en conformiteit',
      gestionEvenementsSI: 'Beheer van informatiebeveiligingsgebeurtenissen',
      assuranceSI: 'Informatiebeveiligingsassurance'
    },

    // Grafieklabels
    chartLabels: {
      target: 'Doel',
      averageCMM: 'Gemiddelde CMM',
      globalTarget: 'Globaal doel',
      averageMaturity: 'Gemiddelde maturiteit',
      docMaturity: 'Documentatie',
      implMaturity: 'Implementatie'
    },

    // Statusopties maatregelen
    controlStatuses: {
      nonImplemente: 'Niet geïmplementeerd',
      enCours: 'In uitvoering',
      implemente: 'Geïmplementeerd',
      verifie: 'Geverifieerd'
    },

    // Domeinopties
    domains: {
      organisationnel: 'Organisatorisch',
      humain: 'Menselijk',
      physique: 'Fysiek',
      technologique: 'Technologisch',
      nonClasse: 'Niet geclassificeerd'
    },

    // CMM-niveaus
    cmmLevels: {
      initial: 'Initieel',
      repetable: 'Herhaalbaar',
      defini: 'Gedefinieerd',
      gere: 'Beheerd',
      optimise: 'Geoptimaliseerd'
    },

    // Risiconiveaus (uit calculateRiskLevel)
    riskLevels: {
      critical: 'Kritiek',
      high: 'Ernstig',
      medium: 'Significant',
      low: 'Gering',
      negligible: 'Verwaarloosbaar'
    },

    // Behandelingsopties
    treatments: {
      reduction: 'Reductie',
      acceptation: 'Acceptatie',
      transfert: 'Overdracht',
      evitement: 'Vermijding'
    },

    // Prioriteitsopties acties
    actionPriorities: {
      critical: 'Kritiek',
      high: 'Hoog',
      medium: 'Middel',
      low: 'Laag'
    },

    // Koppelingstypes acties (PDF-rapporten)
    actionLinkTypes: {
      control: 'Maatregel',
      risk: 'Risico',
      nc: 'Non-conformiteit',
      audit: 'Audit',
      threat: 'Dreiging',
      continuous: 'Continue verbetering'
    },

    // Statusopties acties
    actionStatuses: {
      planifie: 'Gepland',
      enCours: 'In uitvoering',
      termine: 'Afgerond',
      annule: 'Geannuleerd'
    },

    // Statusopties non-conformiteiten
    ncStatuses: {
      detection: 'Detectie',
      analyse: 'Analyse',
      action: 'Actie',
      cloture: 'Afsluiting'
    },

    // Typeopties non-conformiteiten
    ncTypes: {
      majeure: 'Majeur',
      mineure: 'Mineur'
    },

    // Auditopties
    auditStatuses: {
      planifie: 'Gepland',
      realise: 'Uitgevoerd',
      enCours: 'In uitvoering',
      annule: 'Geannuleerd'
    },
    auditTypes: {
      interne: 'Interne audit',
      externe: 'Externe audit',
      certification: 'Certificatie',
      surveillance: 'Toezicht'
    },

    // Dreigingsstatussen
    threatStatuses: {
      reduction: 'Reductie',
      acceptation: 'Acceptatie',
      transfert: 'Overdracht',
      evitement: 'Vermijding'
    },

    // Bronopties SoA
    soaSources: {
      select: '— Selecteren —',
      risk: 'Geïdentificeerd risico',
      legal: 'Wettelijke vereiste',
      contractual: 'Contractuele vereiste',
      bestPractice: 'Goede praktijk',
      regulatory: 'Reglementaire vereiste',
      business: 'Bedrijfsvereiste'
    },

    // Implementatiestatus SoA
    soaImplStatuses: {
      select: '— Status —',
      notStarted: 'Niet gestart',
      planned: 'Gepland',
      inProgress: 'In uitvoering',
      implemented: 'Geïmplementeerd',
      verified: 'Geverifieerd'
    },

    // Statussen documentreview
    docReviewStatuses: {
      select: '— Status —',
      conforme: 'Conform',
      partiel: 'Gedeeltelijk conform',
      nonConforme: 'Niet conform',
      na: 'Niet van toepassing'
    },

    // Opties kritieke assets
    assetAvailability: {
      level1: 'Niveau 1 - Hoge beschikbaarheid',
      level2: 'Niveau 2 - Snel herstel',
      level3: 'Niveau 3 - Standaardherstel',
      level4: 'Niveau 4 - Verlengd herstel'
    },
    assetConfidentiality: {
      sensible: 'Gevoelig',
      tresSensible: 'Zeer gevoelig',
      restreint: 'Beperkt',
      public: 'Publiek'
    },
    assetIntegrity: {
      faible: 'Laag',
      moderee: 'Matig',
      elevee: 'Hoog',
      critique: 'Kritiek'
    },
    assetType: {
      hardware: 'Hardware',
      software: 'Software',
      sourceCode: 'Broncode',
      network: 'Netwerk',
      service: 'Dienst',
      document: 'Document',
      employee: 'Medewerker',
      site: 'Gebouwen',
      organization: 'Organisatie'
    },
    assetImportance: {
      normal: 'Normaal',
      important: 'Belangrijk',
      critique: 'Kritiek'
    },
    assetImpact: {
      societal: 'Maatschappelijk',
      operationnel: 'Operationeel',
      financier: 'Financieel',
      reputation: 'Reputatie',
      reglementaire: 'Reglementair'
    },
    assetMfa: {
      nonImplemente: 'Niet geïmplementeerd',
      partiel: 'Gedeeltelijk',
      implemente: 'Geïmplementeerd',
      externe: 'Extern'
    },
    assetDacp: {
      oui: 'Ja',
      non: 'Nee'
    },

    // Statussen projectrisico
    projectRiskStatuses: {
      red: 'Rood',
      yellow: 'Geel',
      green: 'Groen',
      todo: 'Uit te voeren',
      suspended: 'Opgeschort'
    },

    // NIS2-statussen
    nis2Statuses: {
      todo: 'Uit te voeren',
      inProgress: 'In uitvoering',
      suspended: 'Opgeschort',
      done: 'Uitgevoerd'
    },
    nis2Urgency: {
      high: 'Hoge urgentie',
      medium: 'Gemiddelde prioriteit',
      standard: 'Standaardprioriteit'
    },
    nis2ActionTypes: {
      service: 'Dienst',
      projet: 'Project',
      initiative: 'Initiatief',
      programme: 'Programma'
    },
    nis2Phases: {
      outOfPhase: 'Buiten fase',
      phase1: 'Fase 1 (2026)',
      phase2: 'Fase 2 (2027)',
      phase3: 'Fase 3 (2028)'
    },

    // Toastberichten
    toasts: {
      demoDataReloaded: 'Demogegevens automatisch opnieuw geladen.',
      recyfConfigured: 'NIS2-referentieel: Frankrijk (ReCyF) — {{deg}}',
      tooManyActions: 'Te veel acties in korte tijd. Gelieve enkele seconden te wachten.',
      noInconsistency: 'Geen inconsistenties gedetecteerd',
      snapshotSaved: 'Snapshot opgeslagen',
      snapshotError: 'Kan snapshot niet aanmaken: {{message}}',
      snapshotRestored: 'Snapshot hersteld, herladen...',
      snapshotHistoryCleared: 'Snapshotgeschiedenis gewist',
      snapshotHistoryError: 'Kan geschiedenis niet verwijderen',
      chartLibUnavailable: 'Fout: grafiekbibliotheek niet beschikbaar',
      enterPassword: 'Gelieve een wachtwoord in te voeren.',
      requiredFields: 'Gelieve de verplichte velden in te vullen.',
      passwordMismatch: 'De wachtwoorden komen niet overeen.',
      passwordSaved: 'Wachtwoord opgeslagen',
      readOnlyStart: 'De applicatie start in alleen-lezenmodus. Klik op het hangslot om naar bewerkingsmodus te gaan.',
      wrongPassword: 'Onjuist wachtwoord',
      serverModeActivated: 'Servermodus geactiveerd! De functionaliteit is nu beschikbaar.',
      syncPanelLoading: 'Synchronisatiepaneel wordt geladen...',
      itemDeleted: 'Element verwijderd',
      dataRefreshed: 'Gegevens bijgewerkt (gewijzigd door een andere gebruiker)',
      budgetLineSaved: 'Budgetlijn opgeslagen',
      budgetLineDeleted: 'Budgetlijn verwijderd',
      budgetLineLabelRequired: 'Een omschrijving is vereist',
      budgetYearsUpdated: 'Budgetjaren bijgewerkt',
      budgetYearMin: 'Minstens één jaar vereist',
      noDataToExport: 'Geen gegevens om te exporteren',
      excelExportSuccess: 'Excel-export geslaagd',
      excelExportError: 'Kan niet exporteren. Controleer of er gegevens bestaan.',
      exportTableNotFound: 'Exporttabel niet gevonden',
      exportNotSupported: 'Excel-export niet ondersteund voor deze sectie',
      selectAtLeastOneSection: 'Selecteer minstens één sectie.',
      exportSuccess: 'Export geslaagd',
      exportError: 'Kan de gegevens niet exporteren.',
      importNis2Success: 'Import geslaagd - NIS2-plan geïnitialiseerd (oud formaat)',
      importNis2Hint: 'U vindt uw budgetten terug in het tabblad Cybersecuritybudget (Governance)',
      importSuccess: 'Import geslaagd',
      importError: 'Kan het bestand niet importeren. Controleer het formaat.',
      testsRunning: 'Tests worden uitgevoerd...',
      settingsSaved: 'Instellingen opgeslagen',
      passwordUpdated: 'Wachtwoord bijgewerkt',
      passwordSaveError: 'Kan het wachtwoord niet opslaan',
      pdfUnavailable: 'PDF-generatie niet beschikbaar.',
      syncConfigSaved: 'Synchronisatieconfiguratie opgeslagen',
      syncConfigError: 'Kan de configuratie niet opslaan',
      syncPanelUnavailable: 'Serversynchronisatiepaneel niet beschikbaar',
      demoDataLoaded: 'Demogegevens geladen',
      demoDataLoadError: 'Kan de gegevens niet laden.',
      resetDone: 'Reset voltooid',
      resetServerFailed: 'Lokale reset uitgevoerd, maar de server kon niet worden bijgewerkt. Neem de controle over (bewerkingsmodus) en probeer opnieuw, anders verschijnen de oude gegevens weer bij het herladen.',
      resetError: 'Kan de gegevens niet resetten.',
      quotaExceeded: 'localStorage-quotum overschreden. Uw gegevens zijn als back-up gedownload.',
      saveError: 'Opslaan mislukt. Uw gegevens blijven lokaal bewaard.',
      noRisksDefined: 'Geen risico\'s gedefinieerd. Maak eerst risico\'s aan in de module ISMS-risico\'s.',
      soaRisksUpdated: 'Gekoppelde risico\'s bijgewerkt',
      addNis2DomainFirst: 'Voeg eerst een NIS2-domein toe voordat u een actie aanmaakt.',
      filterApplied: 'Filter toegepast: {{filter}}',
      activityRefreshed: 'Activiteit vernieuwd',
      preparingPdf: 'PDF wordt voorbereid...',
      dashboardExported: 'Dashboard geëxporteerd',
      useSaveAsPdf: 'Gebruik "Opslaan als PDF" in het dialoogvenster',
      soaPdfReady: 'SoA klaar — Gebruik "Opslaan als PDF"',
      auditPackReady: 'Audit Doc Review-pack klaar — Gebruik "Opslaan als PDF"',
      dataSaved: 'Gegevens opgeslagen',
      appLoaded: 'Applicatie succesvol geladen',
      appLoadError: 'Fout bij het laden: {{message}}',
      demoBlocked: 'Deze functionaliteit is uitgeschakeld in demomodus.',
      editModeEnabled: 'Bewerkingsmodus ingeschakeld',
      editModeDisabled: 'Alleen-lezenmodus ingeschakeld',
      justNow: 'Zonet',
      riskAnalysisModuleNotLoaded: 'Module risicoanalyse niet geladen.',
      duplicateControlRef: 'Er bestaat al een maatregel met deze referentie.',
      factoryPasswordWarning: 'U gebruikt het standaardwachtwoord. Gelieve het te wijzigen in de beveiligingsinstellingen.',
      popupBlocked: 'Gelieve pop-ups toe te staan om als PDF te exporteren.',
      fileTooLarge: 'Het bestand is te groot (max. 10 MB).',
      importIntegrityWarnings: 'Import voltooid met integriteitswaarschuwingen',
      invalidFileType: 'Ongeldig bestandsformaat. Selecteer een .json- of .smsi-bestand.',
      budgetCatMin: 'Minstens één categorie vereist',
      budgetCatUpdated: 'Budgetcategorieën bijgewerkt',
      saveFailed: 'Opslagfout — de geïmporteerde gegevens zijn niet bewaard. Probeer opnieuw.',
      importSyncFailed: 'Import in het geheugen toegepast maar NIET op de server opgeslagen: {{msg}}. Neem de controle over (bewerkingsmodus) en importeer opnieuw; sluit het tabblad niet.',
      importEpochConflict: 'De gegevens zijn herladen na een import, herstel of configuratiewijziging van een andere gebruiker. Een kopie van uw niet-opgeslagen wijzigingen is bewaard.',
      entityContextChanged: 'Uw entiteitstoewijzing is gewijzigd — de applicatie wordt herladen om uw nieuwe bereik toe te passen. Een kopie van uw niet-opgeslagen wijzigingen is gedownload.',
      importIgnoredSections: 'Secties in alleen-lezen voor uw bereik, niet gewijzigd door de import: {{list}}',
      bundleNoData: 'De back-up bevat geen bruikbare entiteit.',
      sectionReadonly: 'Deze sectie is ALLEEN-LEZEN voor uw bereik — uw wijzigingen zijn niet opgeslagen.',
      pushEntityUnknown: 'Uw perimeter is niet meer beschikbaar (net gearchiveerd of verwijderd). Uw wijzigingen kunnen niet meer worden opgeslagen — neem contact op met een beheerder voordat u het tabblad sluit.',
      pushEntityArchived: 'Dit perimeter is GEARCHIVEERD en dus alleen-lezen. Een beheerder moet het heractiveren in Instellingen ▸ Multi-entiteit om wijzigingen toe te staan.',
      pushCrossEdit: 'Uw account mag geen gegevens van sub-entiteiten wijzigen. Een beheerder kan dit toekennen in Instellingen ▸ Gebruikers ▸ Entiteit(en).',
      pushKeysOutOfSection: 'Toepassingsfout: de server heeft de inhoud van deze sectie geweigerd. Uw wijzigingen zijn niet opgeslagen — meld dit aan de support met de schermnaam.',
      pushForbidden: 'Schrijven geweigerd door de server (onvoldoende rechten) — wijzigingen niet opgeslagen.',
      syncGenericError: 'synchronisatiefout',
      syncFailed: 'Serversynchronisatie mislukt — de gegevens zijn lokaal opgeslagen.',
      lockExpired: 'De vergrendeling op dit tabblad is verlopen. Uw wijzigingen worden niet gesynchroniseerd.',
      lockConflict: 'Een andere gebruiker houdt de vergrendeling vast. Uw lokale wijzigingen zijn niet verzonden.',
      nis2Migration: 'Migratie naar NIS2 voltooid. Gelieve uw scores te controleren.',
      nis2LevelConfigured: 'NIS2-niveau geconfigureerd: {{level}} ({{lang}})',
      // FIX-I18N-KEYS (audit 2026-06-10) : kritieke toasts die voordien hardcoded of zonder sleutel waren
      dataCorrupted: 'Lokale gegevens beschadigd of onleesbaar: een reservekopie (smsi_backup_corrupted.json) is gedownload. De applicatie is leeg gestart — sla niets op voordat u deze kopie hebt veiliggesteld.',
      editLockPushRefused: 'Bewerkingsvergrendeling niet in bezit — uw wijzigingen blijven in het geheugen en worden niet op de server opgeslagen. Neem de controle over (bewerkingsmodus) om ze op te slaan; sluit het tabblad niet voordien.',
      // FIX-TOAST-423-CLUSTER (co-editie-audit 2026-07-17): varianten in bewerkingsmodus — noem
      // de geweigerde module in plaats van het advies « neem de controle over ».
      editLockPushRefusedCluster: 'Module "{{module}}" niet in bezit — uw wijzigingen blijven in het geheugen. Open een scherm van deze module om ze op te slaan.',
      editLockPushRefusedClusterBusy: 'Module "{{module}}" in gebruik door {{name}} — uw wijzigingen blijven in het geheugen en worden opgeslagen via een scherm van deze module zodra die vrij is.',
      // FIX-OPTIMISTIC-REV (2026-06-11) : berichten van het anti-overschrijfparachute
      pushConflict: 'Deze gegevens zijn door een andere gebruiker gewijzigd. Uw wijzigingen zijn NIET overschreven: ze zijn als reservebestand gedownload en het scherm toont nu de serverversie.',
      pushConflictRetry: 'Deze gegevens zijn door een andere gebruiker gewijzigd — nieuwe poging om uw versie op te slaan is bezig…',
      pushConflictRetryBackup: 'Deze gegevens zijn door een andere gebruiker gewijzigd — uw versie wordt opgeslagen; een kopie van de externe versie is apart bewaard (bestand « smsi_conflit_serveur_… »).',
      dirtyBackedUpBeforeRepull: '{{n}} niet-opgeslagen wijziging(en) zijn in een reservebestand opgeslagen vóór het herladen van de serverstatus.',
      multiTabConflict: 'Gegevens zijn in een ander tabblad gewijzigd. Herlaad deze pagina om overschrijven van uw werk te voorkomen.',
      restoreNeedsLock: 'Herstel niet toegepast op de server: ga naar bewerkingsmodus (of neem de controle over) en probeer opnieuw.',
      restoreSyncFailed: 'Synchronisatie van het herstel mislukt — niet toegepast op de server. Probeer opnieuw.',
      configNotPersisted: 'Configuratie niet op de server opgeslagen (een andere gebruiker is aan het bewerken) — ze wordt toegepast wanneer u opnieuw naar bewerkingsmodus gaat.',
      // FIX-CONFIG-LOCK-EDITING (adversariële review 2026-07-17): niet-vergrendelingsfout.
      configPersistFailed: 'Configuratie niet op de server opgeslagen (netwerk- of serverfout) — ze wordt bij de volgende synchronisatie opnieuw geprobeerd.',
      serverConflict: 'Serverconflict — uw gegevens blijven in het geheugen.',
      licenseExpired: 'Licentie verlopen — alleen-lezenmodus.',
      syncFailedRetry: 'Serversynchronisatie mislukt — uw gegevens blijven in het geheugen. Sluit de browser niet.',
      syncFailedReload: 'Synchronisatie mislukt — herladen bezig',
      nis2LegacyMigrated: 'NIS2-maatregelen gemigreerd vanuit het oude formaat (23 maatregelen). Controleer de scores.',
      restoreFailed: 'Kan de snapshot niet herstellen',
      testsCompleted: 'Tests voltooid: {passed}/{total} geslaagd',
      testsCompletedFailed: 'Tests voltooid: {passed}/{total} geslaagd, {failed} mislukt',
      crossImportCancelled: 'Import buiten uw bereik geannuleerd — gegevens ongewijzigd.'
    },

    // Validatieberichten
    validation: {
      blocked: 'Opslaan geblokkeerd: ',
      warnings: 'Gegevens opgeslagen met waarschuwingen'
    },

    // Legacy-importmodule
    legacyImport: {
      modalTitle: 'Analyse van het geïmporteerde bestand',
      versionDetected: 'Gedetecteerde versie',
      confidence: 'Betrouwbaarheid',
      fieldMapping: 'Veldtoewijzing',
      matched: 'Overeenkomend',
      missing: 'Ontbrekend (standaardwaarden)',
      migrated: 'Gemigreerd',
      ignored: 'Genegeerd',
      migrations: 'Toe te passen migraties',
      warnings: 'Waarschuwingen',
      crossRefIssues: 'Problemen met kruisverwijzingen',
      sizeEstimate: 'Grootteschatting',
      canImport: 'Import mogelijk',
      cannotImport: 'Import onmogelijk',
      importWithMigrations: 'Importeren met migraties',
      importBtn: 'Importeren',
      cancelBtn: 'Annuleren',
      postImportOk: 'Import gevalideerd — geen integriteitsproblemen gedetecteerd',
      postImportWarnings: 'Import voltooid met integriteitswaarschuwingen',
      detectedVersion: 'Gedetecteerde versie',
      dataSummary: 'Gegevensoverzicht',
      section: 'Sectie',
      elements: 'Elementen',
      missingFields: 'Ontbrekende velden (standaardwaarden):',
      field: 'Veld',
      defaultValue: 'Standaardwaarde',
      unknownFields: 'Onbekende velden (genegeerd):',
      crossReferences: 'Kruisverwijzingen',
      // FIX-I18N-KEYS (audit 2026-06-10) : ontbrekende sleutels van de legacy-importmodale
      andMoreIssues: '... en',
      moreItems: 'andere',
      autoMigrations: 'Automatische migraties',
      importBlocked: 'Import geblokkeerd',
      quotaRisk: 'Quotumrisico'
    },

    // Import
    import: {
      oldFormatDetected: 'Oud formaat gedetecteerd: het NIS2-plan en de budgetten',
      willBeInitialized: 'worden geïnitialiseerd met de standaardwaarden.',
      warningOverwrite: 'Opgelet: deze bewerking overschrijft de lokale gegevens.',
      file: 'Bestand',
      importedFile: 'Geïmporteerd bestand',
      summaryBeforeImport: 'Overzicht vóór import',
      importBtn: 'Importeren'
    },

    // Synchronisatiebeheer
    sync: {
      syncing: 'Synchronisatie bezig',
      synced: 'Gesynchroniseerd met de server',
      retrying: 'Nieuwe synchronisatiepoging',
      authError: 'Authenticatiefout - controleer het wachtwoord',
      licenseExpired: 'Licentie of proefperiode verlopen — alleen-lezenmodus',
      syncError: 'Synchronisatiefout',
      licenseLabel: 'Licentie',
      editLocked: 'Synchronisatie uitgesteld — bewerkingsvergrendeling niet in bezit'
    },

    // Serverconfiguratie
    serverSetup: {
      configureTitle: 'Server configureren',
      configureSub: 'Kies een wachtwoord om uw gegevens te beschermen.',
      connectionTitle: 'Verbinding met de server',
      connectionSub: 'Voer het serverwachtwoord in om u aan te melden.',
      serverPassword: 'Serverwachtwoord',
      connect: 'Aanmelden',
      configure: 'Configureren',
      configuring: 'Configuratie...',
      configSuccess: 'Server succesvol geconfigureerd!',
      passwordInvalid: 'Het wachtwoord voldoet niet aan de vereisten.',
      passwordMismatch: 'De wachtwoorden komen niet overeen.',
      configError: 'Configuratiefout',
      syncEnabled: 'Synchronisatie ingeschakeld',
      passwordRequired: 'Wachtwoord vereist',
      requirements: 'Vereisten:',
      reqLength: 'minimaal 18 tekens',
      reqUpper: '1 hoofdletter',
      reqLower: '1 kleine letter',
      reqSpecial: '1 speciaal teken',
      minChars: 'minimaal {{min}} tekens',
      confirmation: 'Bevestiging'
    },

    // Modaaltitels
    modals: {
      dataQuality: 'Gegevenskwaliteit',
      setPassword: 'Wachtwoord instellen',
      editKpi: 'KPI bewerken',
      addKpi: 'KPI toevoegen',
      globalExcelExport: 'Globale Excel-export',
      confirmImport: 'Import bevestigen',
      nis2ControlTracking: 'Opvolging NIS2-maatregel',
      controlTracking: 'Opvolging van de maatregel',
      addControl: 'Maatregel toevoegen',
      editAction: 'Actie bewerken',
      addAction: 'Actie toevoegen',
      renameSection: 'Sectie hernoemen',
      editRisk: 'Risico bewerken',
      addRisk: 'Risico toevoegen',
      editNc: 'Non-conformiteit bewerken',
      addNc: 'Non-conformiteit toevoegen',
      editAudit: 'Audit bewerken',
      addAudit: 'Audit toevoegen',
      addReview: 'Directiebeoordeling toevoegen',
      editReview: 'Directiebeoordeling bewerken',
      addStakeholder: 'Belanghebbende toevoegen',
      editStakeholder: 'Belanghebbende bewerken',
      addDocument: 'Document toevoegen',
      editDocument: 'Document bewerken',
      editCriticalAsset: 'Kritieke asset bewerken',
      addCriticalAsset: 'Nieuwe kritieke asset',
      addNis2Domain: 'Nieuw NIS2-domein',
      editNis2Domain: 'NIS2-domein bewerken',
      addNis2Action: 'Nieuwe NIS2-actie',
      editNis2Action: 'NIS2-actie bewerken',
      addNis2Status: 'Nieuwe sleutelstatus',
      editNis2Status: 'Sleutelstatus bewerken',
      addThreat: 'Dreiging toevoegen',
      editThreat: 'Dreiging bewerken',
      addProjectRisk: 'Nieuwe projectrisicoanalyse',
      editProjectRisk: 'Projectrisicoanalyse bewerken',
      viewProjectRisk: 'Projectrisicoanalyse raadplegen',
      budgetCategories: 'Budgetcategorieën',
      associatedRisks: 'Gekoppelde risico\'s',
      editSoaControl: 'Maatregel bewerken',
      editDocReview: 'Clausule bewerken',
      editPillar: 'Pijler bewerken',
      nis2Block: 'NIS2-blok',
      budgetBlock: 'Budgetblok',
      addBudgetLine: 'Nieuwe budgetlijn',
      editBudgetLine: 'Budgetlijn bewerken',
      manageYears: 'Budgetjaren beheren',
      controlDetails: 'Details van de maatregel',
      riskDetails: 'Details van het risico',
      threatDetails: 'Details van de dreiging'
    },
    fields: {
      title: 'Titel',
      budgetYearsList: 'Eén jaar per regel (min. 1)',
      budgetYearsHelp: 'Voeg jaren toe, verwijder of hernoem ze (één per regel). De bedragen blijven gekoppeld aan het label van elk jaar; hernoemen op dezelfde positie behoudt de waarde.',
      auditTitle: 'Titel van de audit',
      description: 'Beschrijving',
      status: 'Status',
      type: 'Type',
      priority: 'Prioriteit',
      owner: 'Verantwoordelijke',
      dueDate: 'Vervaldatum',
      progress: 'Voortgang',
      comments: 'Opmerkingen',
      existingComments: 'Bestaande opmerkingen',
      newComment: 'Nieuwe opmerking',
      impact: 'Impact',
      probability: 'Waarschijnlijkheid',
      level: 'Niveau',
      treatment: 'Behandeling',
      criticalAssets: 'Kritieke assets',
      detectionDate: 'Detectiedatum',
      scope: 'Toepassingsgebied',
      plannedDate: 'Geplande datum',
      auditor: 'Auditor',
      date: 'Datum',
      participants: 'Deelnemers',
      inputElements: 'Invoerelementen',
      decisions: 'Beslissingen',
      name: 'Naam',
      role: 'Rol',
      contact: 'Contact',
      documentLevel: 'Niveau',
      documentType: 'Type',
      tool: 'Tool',
      link: 'Link',
      target: 'Doel',
      current: 'Huidig',
      comment: 'Opmerking',
      beneficiary: 'Begunstigde',
      productCode: 'Product (code)',
      productName: 'Product (naam)',
      productTags: 'Producttags (gescheiden door komma\'s)',
      rto: 'RTO',
      rpo: 'RPO',
      availability: 'Beschikbaarheid',
      confidentiality: 'Vertrouwelijkheid',
      integrity: 'Integriteit',
      assetType: 'Type asset',
      importance: 'Belang',
      mfaStatus: 'MFA-status',
      dacpSensitive: 'Gevoelige DACP',
      context: 'Context',
      likelihood: 'Aannemelijkheid',
      linkedAudit: 'Gekoppelde audit',
      correctiveAction: 'Corrigerende actie',
      linkType: 'Type koppeling',
      linkedElement: 'Gekoppeld element',
      password: 'Wachtwoord',
      confirmPassword: 'Bevestig het wachtwoord',
      sectionName: 'Naam van de sectie',
      domainTitle: 'Titel van het domein',
      objective: 'Doelstelling',
      pillar: 'Pijler',
      urgencyHigh: 'Hoge urgentie',
      urgencyMedium: 'Gemiddelde prioriteit',
      urgencyStandard: 'Standaardprioriteit',
      domain: 'Domein',
      actionDescription: 'Beschrijving van de actie',
      phase: 'Fase',
      workType: 'Type (Dienst / Project / Initiatief / Programma)',
      actionOwner: 'Verantwoordelijke voor de actie',
      budget2026: 'Budget 2026',
      budget2027: 'Budget 2027',
      budget2028: 'Budget 2028',
      budgetGlobal: 'Globaal budget (optioneel)',
      budgetCategory: 'Budgetcategorie',
      reference: 'Referentie',
      measure: 'Maatregel',
      recommendations: 'Aanbevelingen',
      category: 'Categorie',
      cmm: 'CMM-niveau',
      linkedActions: 'Gekoppelde acties',
      justification: 'Motivering',
      score: 'Score',
      operations: 'Operaties',
      executionDate: 'Uitvoeringsdatum',
      findings: 'Bevindingen',
      reviewInputs: 'Invoer van de beoordeling',
      reviewDecisions: 'Beslissingen en acties',
      budgetCategoriesList: 'Eén categorie per regel (min. 1)',
      deliverableType: 'Type deliverable',
      toolUsed: 'Gebruikte tool',
      accessLink: 'Toegangslink',
      numbering: 'Nummering',
      cmmLevel: 'CMM-maturiteitsniveau',
      controlOwner: 'Eigenaar van de maatregel',
      ownerPlaceholder: 'Naam van de verantwoordelijke',
      ownerOrStakeholderPlaceholder: 'Vrije naam of belanghebbende',
      ownerOrStakeholderHelp: 'Voer een vrije naam in of kies een bestaande belanghebbende.',
      riskOwner: 'Risico-eigenaar',
      // FIX-I18N-NIS2-PLAN (audit 2026-07-10) : modale pilier du socle
      subtitle: 'Ondertitel',
      keyItems: 'Kernelementen (één per regel)',
      projectLead: 'Projectleider',
      reviewer: 'Revisor',
      lastEvaluation: 'Laatste evaluatie',
      nextReviewDate: 'Volgende beoordeling',
      reviewFrequency: 'Beoordelingsfrequentie',
      effectiveness: 'Gemeten doeltreffendheid',
      evidence: 'Bewijzen / Artefacten',
      evidencePlaceholder: 'Documenten, logs, schermafbeeldingen...',
      kpiRef: 'Gekoppelde KPI',
      kpiPlaceholder: 'Referentie van de KPI die de doeltreffendheid meet',
      select: 'Selecteren' // FIX-I18N-KEYS (audit 2026-06-10)
    },

    // Control type labels
    controlType: {
      preventive: 'Preventief',
      detective: 'Detectief',
      corrective: 'Correctief',
      undefined: 'Niet gedefinieerd'
    },

    // Effectiveness labels
    effectiveness: {
      effective: 'Doeltreffend',
      partial: 'Gedeeltelijk',
      partiallyEffective: 'Gedeeltelijk doeltreffend',
      ineffective: 'Niet doeltreffend',
      notTested: 'Niet getest',
      notEvaluated: 'Niet geëvalueerd'
    },

    // Confirm dialog messages
    confirms: {
      deleteRisk: 'Dit risico verwijderen?',
      deleteThreat: 'Deze dreiging verwijderen?',
      deleteNc: 'Deze non-conformiteit verwijderen?',
      deleteAudit: 'Deze audit verwijderen?',
      deleteReview: 'Deze beoordeling verwijderen?',
      deleteStakeholder: 'Deze belanghebbende verwijderen?',
      deleteDocument: 'Dit document verwijderen?',
      deleteAction: 'Deze actie verwijderen?',
      deleteKpi: 'Deze KPI verwijderen?',
      deleteAsset: 'Deze kritieke asset verwijderen?',
      resetData: 'Wilt u werkelijk alle gegevens opnieuw instellen? Deze actie is onomkeerbaar.',
      loadDemoData: 'De demonstratiegegevens laden? De huidige gegevens worden overschreven.',
      deleteSnapshot: 'Deze snapshot verwijderen?',
      clearSnapshots: 'De volledige snapshotgeschiedenis verwijderen?',
      restoreSnapshot: 'Deze snapshot herstellen? De huidige gegevens worden vervangen.',
      deleteProjectRisk: 'Deze projectrisicoanalyse verwijderen?',
      deleteControl: 'Deze maatregel verwijderen?',
      deleteDomain: 'Dit domein en de bijbehorende acties verwijderen?',
      deletePhase: 'Deze fase verwijderen? De acties worden verplaatst naar de reservefase.',
      deleteKeyStatus: 'Deze sleutelstatus verwijderen?',
      budgetCategoriesList: 'Eén categorie per regel (min. 1)',
      deleteTitle: 'Verwijderen?',
      deleteComment: 'Deze opmerking verwijderen?',
      deleteBudgetLine: 'Deze budgetlijn verwijderen?'
    },

    // Budget categories
    budgetCategories: {
      infra: 'Infrastructuur',
      cyber: 'Cyberbeveiliging',
      divers: 'Diversen',
      cyberBudget3y: 'Budget Cyberbeveiliging 3 jaar'
    },

    // Budget line statuses
    budgetStatus: {
      planifie: 'Gepland',
      engage: 'Vastgelegd',
      realise: 'Gerealiseerd'
    },

    // Edit mode actions
    editMode: {
      manageBudgetCategories: 'budgetcategorieën beheren',
      editBudgetLine: 'een budgetlijn bewerken',
      deleteBudgetLine: 'een budgetlijn verwijderen',
      manageBudgetYears: 'budgetjaren beheren'
    },

    // Common labels used in various places
    labels: {
      none: 'Geen',
      noAsset: 'Geen',
      all: 'Alle',
      notApplicable: 'N.v.t.',
      pillar: 'Pijler {{number}}',
      phase: 'Fase {{number}}',
      completed: 'voltooid',
      todo: 'te doen',
      noneM: 'Geen',
      openAction: 'Actie openen',
      select: 'Selecteren',
      atRisk: 'risicovol' // FIX-I18N-KEYS (audit 2026-06-10)
    },

    // Impact and probability levels (for risk/threat forms and exports)
    impactLevels: {
      1: 'Verwaarloosbaar',
      2: 'Gering',
      3: 'Matig',
      4: 'Groot',
      5: 'Ernstig'
    },
    probabilityLevels: {
      1: 'Zeer onwaarschijnlijk',
      2: 'Onwaarschijnlijk',
      3: 'Mogelijk',
      4: 'Waarschijnlijk',
      5: 'Zeer waarschijnlijk'
    },

    // PDF Report
    pdfReportLabels: {
      // Cover page
      coverTitle: 'ISMS-rapport',
      coverSubtitle: 'Managementsysteem voor informatiebeveiliging',
      generatedOn: 'Rapport gegenereerd op',
      confidential: 'Vertrouwelijk document',
      conformityISO: 'Conformiteit ISO27002',
      implementedControls: 'Geïmplementeerde maatregelen',
      actionsInProgress: 'Lopende acties',
      criticalRisks: 'Kritieke risico\'s',

      // Table of contents
      tableOfContents: 'Inhoudsopgave',
      dashboardAndIndicators: 'Dashboard en indicatoren',

      // Dashboard
      dashboardTitle: 'ISMS-dashboard',
      conformity: 'Conformiteit',
      controls: 'Maatregelen',
      actions: 'Acties',

      // Chart labels
      maturityISO: 'Maturiteit ISO27002',
      maturityNIS2: 'Maturiteit NIS2',
      riskDistribution: 'Verdeling van de risico\'s',
      riskMatrix: 'Risicomatrix',
      maturityCMM: 'CMM-maturiteit',
      probability: 'Waarschijnlijkheid',
      impact: 'Impact',

      // Pagination
      pageOf: 'Pagina {{current}} van {{total}}',
      page: 'Pagina {{current}}',

      // Section labels
      continued: '(vervolg)',
      elements: 'element',
      elementsPlural: 'elementen',
      noData: 'Geen gegevens',

      // Modal
      sectionsTitle: 'Secties van het PDF-rapport',
      selectAtLeastOne: 'Selecteer minstens één sectie',
      pdfGeneratedSuccess: 'PDF-rapport met succes gegenereerd',
      pdfExportDisabled: 'De PDF-export is uitgeschakeld in demonstratiemodus.'
    },

    // Report sections (PDF + Excel)
    reportSections: {
      controls: 'Maatregelen ISO27002',
      soa: 'Verklaring van toepasselijkheid',
      nis2Controls: 'Maatregelen NIS2',
      nis2Program: 'Budget Cyberbeveiliging',
      nis2Socle: 'Beveiligingsbasis',
      actions: 'Actieplan',
      risks: 'ISMS-risico\'s',
      threats: 'Dreigingen',
      nonconformities: 'Non-conformiteiten',
      audits: 'Audits',
      managementReviews: 'Directiebeoordelingen',
      docReview: 'Documentbeoordeling 27001',
      documents: 'Documentstructuur',
      stakeholders: 'Belanghebbenden',
      kpis: 'KPI',
      criticalAssets: 'Kritieke assets',
      projectRisks: 'Projectrisico\'s'
    },

    // PDF table headers
    pdfTableHeaders: {
      hash: '#',
      num: 'Nr.',
      title: 'Titel',
      status: 'Status',
      cmm: 'CMM',
      reference: 'Referentie',
      applicable: 'Toepasselijk',
      justification: 'Motivering',
      function: 'Functie',
      category: 'Categorie',
      domain: 'Domein',
      action: 'Actie',
      phase: 'Fase',
      progression: 'Voortgang',
      link: 'Link',
      dueDate: 'Vervaldatum',
      owner: 'Verantw.',
      risk: 'Risico',
      impact: 'Impact',
      prob: 'Waarsch.',
      score: 'Score',
      level: 'Niveau',
      treatment: 'Behandeling',
      threat: 'Dreiging',
      type: 'Type',
      detectionDate: 'Detectiedatum',
      date: 'Datum',
      participants: 'Deelnemers',
      decisions: 'Beslissingen',
      exigence: 'Vereiste',
      tool: 'Tool / bewijs',
      docLevel: 'Niveau',
      docType: 'Type',
      docTool: 'Tool',
      docLink: 'Link',
      name: 'Naam',
      role: 'Rol',
      contact: 'Contact',
      description: 'Beschrijving',
      beneficiary: 'Begunstigde',
      product: 'Product',
      rto: 'RTO',
      rpo: 'RPO',
      availability: 'Beschikbaarheid',
      project: 'Project',
      recommendations: 'Aanbevelingen',
      pillar: 'Pijler',
      element: 'Element',
      subtitle: 'Ondertitel',
      auditor: 'Auditor',
      scope: 'Toepassingsgebied',
      plannedDate: 'Geplande datum',
      yes: 'Ja',
      no: 'Nee',
      noAction: 'Geen actie',
      noAsset: 'Geen',
      pending: 'in afwachting',
      outOfPhase: 'Buiten fase',
      priority: 'Prioriteit',
      detailedRecommendations: 'Gedetailleerde aanbevelingen',
      autoSyncNote: '* Risico gesynchroniseerd vanuit de analyse',
      auditExecutionDate: 'Uitvoeringsdatum',
      auditFindings: 'Bevindingen',
      auditRecommendations: 'Aanbevelingen'
    },

    // SoA PDF export labels
    pdfSoa: {
      title: 'Verklaring van toepasselijkheid (SoA)',
      subtitle: 'ISO 27001:2022 - Clausule 6.1.3 - Bijlage A',
      fullAuditVersion: 'VOLLEDIG AUDITDOCUMENT',
      publicVersion: 'PUBLIEKE VERSIE',
      issueDate: 'Uitgiftedatum:',
      docRef: 'Documentreferentie',
      scope: 'Toepassingsgebied',
      refStandard: 'Referentienorm',
      classification: 'Classificatie',
      confidential: 'Vertrouwelijk',
      internal: 'Intern',
      execSummary: 'Managementsamenvatting',
      applicableControls: 'Toepasselijke maatregelen',
      implRate: 'Implementatiegraad',
      verifiedControls: 'Geverifieerde maatregelen',
      notApplicable: 'Niet toepasselijk',
      docQuality: 'Kwaliteit van de documentatie',
      withOwner: 'met eigenaar',
      withEvidence: 'met bewijzen',
      linkedToRisks: 'gekoppeld aan risico\'s',
      reviewedLast6m: 'beoordeeld <6 maanden',
      selectionSources: 'Selectiebronnen',
      domainCoverage: 'Dekking per domein ISO 27002:2022',
      domain: 'Domein',
      total: 'Totaal',
      applicable: 'Toepasselijk',
      implemented: 'Geïmplementeerd',
      verified: 'Geverifieerd',
      progression: 'Voortgang',
      controlDetails: 'Detail van de maatregelen ISO 27002:2022',
      ref: 'Ref.',
      control: 'Maatregel',
      applic: 'Toepass.',
      source: 'Bron',
      state: 'Status',
      owner: 'Eigenaar',
      evidence: 'Bewijzen',
      risks: 'Risico\'s',
      justification: 'Motivering',
      excluded: 'Uitgesloten:',
      approvals: 'Goedkeuringen en handtekeningen',
      ismsManager: 'ISMS-verantwoordelijke',
      generalManagement: 'Algemene directie',
      securityOfficer: 'Beveiligingsverantwoordelijke',
      nameField: 'Naam: ________________________________',
      dateField: 'Datum: ________________________________',
      signatureField: 'Handtekening:',
      versionHistory: 'Versiegeschiedenis',
      version: 'Versie',
      date: 'Datum',
      author: 'Auteur',
      changes: 'Wijzigingen',
      currentVersionAuto: 'Huidige versie - Automatische generatie',
      initialRevision: 'Initiële revisie',
      footerRef: 'Referentie:',
      footerGenerated: 'Document gegenereerd door Cyber-Assistant | Conform ISO 27001:2022 Clausule 6.1.3',
      footerConfidential: 'VERTROUWELIJK DOCUMENT - BEPERKTE VERSPREIDING - UITSLUITEND VOOR AUDITGEBRUIK'
    },

    // Doc Review PDF export labels
    pdfDocReview: {
      title: 'Documentbeoordeling ISMS',
      subtitle: 'ISO 27001:2022 - Clausules 4 tot 10',
      generatedOn: 'Gegenereerd op',
      auditLabel: 'CERTIFICATIEAUDITPAKKET',
      conforming: 'Conform',
      partial: 'Gedeeltelijk',
      nonConforming: 'Niet conform',
      conformityRate: 'Conformiteitsgraad',
      clause: 'Clausule',
      requirement: 'Vereiste',
      status: 'Status',
      responsible: 'Verantwoordelijke',
      justificationEvidence: 'Motivering / Bewijs',
      review: 'Beoordeling',
      toEvaluate: 'Te evalueren',
      evidence: 'Bewijs:',
      document: 'Document',
      comments: 'opmerking(en)',
      lastReview: 'Laatste:',
      nextReview: 'Volgende:',
      checklistTitle: 'Checklist Auditvoorbereiding ISO 27001:2022',
      checklistSubtitle: 'Controlepunten voor de externe auditor',
      documented: 'Gedocumenteerd',
      footerTitle: 'Certificatieauditpakket ISO 27001:2022',
      footerRef: 'Referentie:',
      footerGenerated: 'Document gegenereerd door Cyber-Assistant',
      footerConfidential: 'VERTROUWELIJK DOCUMENT - AUDITVOORBEREIDING',
      checkContext: 'Context van de organisatie',
      checkContextItems: 'Interne/externe uitdagingen gedocumenteerd|Belanghebbende partijen geïdentificeerd|Toepassingsgebied gedefinieerd',
      checkLeadership: 'Leiderschap',
      checkLeadershipItems: 'Informatiebeveiligingsbeleid ondertekend en gecommuniceerd|Rollen en verantwoordelijkheden toegewezen|Engagement van de directie gedocumenteerd',
      checkPlanning: 'Planning',
      checkPlanningItems: 'Risicobeoordelingsproces|Risicobehandelplan|Verklaring van toepasselijkheid (SoA)|Meetbare informatiebeveiligingsdoelstellingen',
      checkSupport: 'Ondersteuning',
      checkSupportItems: 'Toegewezen middelen|Gedocumenteerde competenties|Bewustmakingsprogramma|Communicatieplan|Documentbeheersing',
      checkOperation: 'Uitvoering',
      checkOperationItems: 'Gedocumenteerde operationele processen|Actuele risicobeoordelingen|Lopende risicobehandeling',
      checkPerformance: 'Prestatie-evaluatie',
      checkPerformanceItems: 'Intern auditprogramma|Prestatie-indicatoren (KPI)|Geplande directiebeoordeling|Notulen van de beoordeling',
      checkImprovement: 'Verbetering',
      checkImprovementItems: 'Proces van continue verbetering|Beheer van non-conformiteiten|Getraceerde corrigerende acties'
    },
    excelHeaders: {
      // Maatregelen
      controlNum: 'Nr.',
      controlTitle: 'Titel',
      controlDescription: 'Beschrijving',
      controlCapability: 'Capaciteit',
      controlStatus: 'Status',
      controlLinkedActions: 'Gekoppelde acties',
      controlCmm: 'CMM-maturiteitsniveau',

      // NIS2 Controls
      nis2Function: 'Functie',
      nis2Category: 'Categorie',
      nis2Description: 'Beschrijving',
      nis2Status: 'Status',
      nis2Cmm: 'Maturiteit (afgeleid)',
      nis2Justification: 'Motivering',

      // SOA
      soaReference: 'Referentie',
      soaTitle: 'Titel',
      soaApplicability: 'Toepasselijkheid',
      soaJustification: 'Motivering',
      soaApplicable: 'Van toepassing',
      soaNonApplicable: 'Niet van toepassing',

      // Doc Review
      docReference: 'Referentie',
      docExigence: 'Vereiste',
      docJustification: 'Motivering',
      docTool: 'Tool / bewijs',

      // Actions
      actionId: 'ID',
      actionTitle: 'Actie',
      actionLink: 'Link',
      actionAssets: 'Kritieke assets',
      actionPriority: 'Prioriteit',
      actionProgress: 'Voortgang',
      actionDueDate: 'Deadline',
      actionOwner: 'Verantwoordelijke',
      actionStatus: 'Status',
      actionComments: 'Commentaren',

      // Risks
      riskId: 'ID',
      riskTitle: 'Risico',
      riskDescription: 'Beschrijving',
      riskImpact: 'Impact',
      riskProbability: 'Waarschijnlijkheid',
      riskScore: 'Score',
      riskLevel: 'Niveau',
      riskLinkedActions: 'Gekoppelde acties',
      riskAssets: 'Kritieke assets',
      riskTreatment: 'Behandeling',
      riskOwner: 'Eigenaar',
      riskCodirDate: 'Datum directiecomité',
      riskComments: 'Commentaren',

      // Threats
      threatTitle: 'Titel',
      threatDescription: 'Beschrijving',
      threatImpact: 'Impact',
      threatProbability: 'Waarschijnlijkheid',
      threatScore: 'Score',
      threatLevel: 'Niveau',
      threatStatus: 'Status',
      threatLinkedActions: 'Gekoppelde acties',
      threatAssets: 'Kritieke assets',

      // Non-conformities
      ncTitle: 'Titel',
      ncType: 'Type',
      ncStatus: 'Status',
      ncDetectionDate: 'Detectiedatum',
      ncOwner: 'Verantwoordelijke',
      ncLinkedAudit: 'Gekoppelde audit',
      ncLinkedActions: 'Gekoppelde acties',
      ncAssets: 'Kritieke assets',
      ncOperations: 'Verrichtingen',

      // Audits
      auditTitle: 'Titel',
      auditType: 'Type',
      auditScope: 'Reikwijdte',
      auditPlannedDate: 'Geplande datum',
      auditAuditor: 'Auditor',
      auditStatus: 'Status',
      auditLinkedActions: 'Gekoppelde acties',
      auditExecutionDate: 'Uitvoeringsdatum',
      auditFindings: 'Bevindingen',
      auditRecommendations: 'Aanbevelingen',

      // Reviews
      reviewDate: 'Datum',
      reviewParticipants: 'Deelnemers',
      reviewInputs: 'Input',
      reviewDecisions: 'Beslissingen',
      reviewComments: 'Commentaren',

      // Stakeholders
      stakeholderName: 'Naam',
      stakeholderRole: 'Rol',
      stakeholderContact: 'Contact',
      stakeholderComments: 'Commentaren',

      // Documents
      documentLevel: 'Niveau',
      documentType: 'Type',
      documentTool: 'Tool',
      documentLink: 'Link',

      // KPIs
      kpiTitle: 'Titel',
      kpiDescription: 'Beschrijving',
      kpiComment: 'Commentaar',
      kpiProgress: 'Voortgang',

      // NIS2 Program
      nis2Domain: 'Domein',
      nis2Pillar: 'Pijler',
      nis2Urgency: 'Urgentie',
      nis2Objective: 'Doelstelling',
      nis2Action: 'Actie',
      nis2Type: 'Type',
      nis2Phase: 'Fase',
      nis2ProgramStatus: 'Status',
      nis2Owner: 'Verantwoordelijke',
      nis2Progression: 'Voortgang (%)',
      nis2Budget2026: 'Budget 2026',
      nis2Budget2027: 'Budget 2027',
      nis2Budget2028: 'Budget 2028',
      nis2BudgetTotal: 'Totaal budget',
      nis2BudgetCategory: 'Budgetcategorie',

      // NIS2 Socle
      soclePillar: 'Pijler',
      socleTitle: 'Titel',
      socleSubtitle: 'Ondertitel',
      socleElement: 'Element',
      socleOwner: 'Verantwoordelijke',

      // Critical Assets
      assetPriority: 'Prioriteit',
      assetBeneficiary: 'Begunstigde',
      assetProduct: 'Product',
      assetType: 'Type',
      assetImportance: 'Belang',
      assetRto: 'RTO',
      assetRpo: 'RPO',
      assetAvailability: 'Beschikbaarheid',
      assetConfidentiality: 'Vertr.',
      assetIntegrity: 'Integriteit',
      assetImpact: 'Impact',
      assetDacp: 'Gevoelige pers. geg.',
      assetMfa: 'MFA-verplichting',

      // Project Risks
      projectName: 'Projectnaam',
      projectBeneficiary: 'Begunstigde',
      projectReportNum: 'Rapportnummer',
      projectRevision: 'Revisienummer',
      projectDescription: 'Projectbeschrijving',
      projectAnalysisLink: 'Link naar de risicoanalyse',
      projectCompletionDate: 'Uitvoeringsdatum',
      projectStatus: 'Status',

      // Common
      none: 'Geen',
      noAsset: 'Geen',
      na: 'N.v.t.',
      continuousImprovement: 'Continue verbetering',
      projectPriority: 'Prioriteit'
    },

    // Labels van de exportmodale
    exportLabels: {
      exportExcelBtn: 'Excel exporteren',
      cancelBtn: 'Annuleren',
      selectSections: 'Selecteer de te exporteren secties. Elke sectie wordt een Excel-tabblad.',
      selectAll: 'Alles selecteren',
      deselectAll: 'Alles deselecteren',
      selectAtLeastOne: 'Selecteer ten minste één sectie.',
      exportNotSupported: 'Excel-export niet ondersteund voor deze sectie',
      htmlExportDisabled: 'HTML-export is uitgeschakeld in demonstratiemodus.',
      pdfExportNis2Disabled: 'PDF-export is uitgeschakeld in demonstratiemodus.',
      printDisabledDemo: 'Afdrukken is uitgeschakeld in demonstratiemodus.',
      preparingExport: 'Export wordt voorbereid...',
      loadingDependencies: 'Afhankelijkheden worden geladen...',
      preparingContent: 'Inhoud wordt voorbereid...',
      capturingScreen: 'Scherm wordt vastgelegd...',
      creatingPdf: 'PDF wordt aangemaakt...',
      downloadingPdf: 'PDF wordt gedownload...',
      pdfSuccess: 'PDF succesvol gegenereerd!',
      htmlExportSuccess: 'HTML-export geslaagd!',
      nis2ModuleNotFound: 'NIS2-module niet gevonden',
      nis2NotFound: 'NIS2-module onvindbaar.',
      popupBlocked: 'Pop-up geblokkeerd',
      printError: 'NIS2 afdrukken mislukt. Probeer opnieuw na het herladen van de pagina.',
      generation: 'Genereren...',
      programNIS2: 'Cyberbeveiligingsbudget',
      exportedOn: 'Geëxporteerd op:',
      normReference: 'Cyber-Assistant - Norm ISO27001 & 27002:2022',
      htmlStandaloneExport: 'Zelfstandige HTML-export - Gemaakt met Cyber-Assistant',
      htmlNis2Content: 'Dit bestand bevat alle stijlen en gegevens van de sectie Cyberbeveiligingsbudget',
      preparingPdf: 'PDF wordt voorbereid...',
      pdfUnavailable: 'PDF-generatie niet beschikbaar.'
    },

    // Standaardsjablonen en referentiegegevens
    templates: {
      // NIS2-fasen
      outOfPhase: 'Buiten fase',

      // ISO 27001 hoofdstukken documentbeoordeling
      chapter4: '4 - Context van de organisatie',
      chapter5: '5 - Leiderschap',
      chapter6: '6 - Planning',
      chapter7: '7 - Ondersteuning',
      chapter8: '8 - Uitvoering',
      chapter9: '9 - Evaluatie van de prestaties',
      chapter10: '10 - Verbetering',

      // Standaardtitels van de basispijlers
      pillar1Title: 'Besturen (GV)',
      pillar1Subtitle: 'Governance en cyberbeleid',
      pillar2Title: 'Identificeren (ID)',
      pillar2Subtitle: 'Assets, risico\'s en verbetering',
      pillar3Title: 'Beschermen (PR)',
      pillar3Subtitle: 'Toegang, gegevens en infrastructuur',
      pillar4Title: 'Detecteren (DE)',
      pillar4Subtitle: 'Monitoring en analyse',
      pillar5Title: 'Reageren (RS)',
      pillar5Subtitle: 'Incidentbeheer en -communicatie',
      pillar6Title: 'Herstellen (RC)',
      pillar6Subtitle: 'Herstel en crisiscommunicatie',
      defaultOwner: 'Projectleider: aan te duiden',

      // Standaarddomeinen NIS2-plan
      domainGovernance: 'Governance & verantwoordelijkheid',
      domainRiskMgmt: 'Risicobeheer (ISMS)',
      domainIncident: 'Incidentbeheer & melding',
      domainBcpDrp: 'Bedrijfscontinuïteit & crisisbeheer (BCP/DRP)',
      domainSupplyChain: 'Beveiliging van de toeleveringsketen',
      domainDevSec: 'Beveiliging bij verwerving, ontwikkeling & onderhoud',
      domainTraceability: 'Traceerbaarheid en auditeerbaarheid',
      domainVulnerability: 'Kwetsbaarhedenbeheer',
      domainAwareness: 'Bewustmaking & opleiding',
      domainCryptography: 'Cryptografie',
      domainPhysical: 'Fysieke beveiliging',
      domainAccessMgmt: 'Toegangsbeheer tot het informatiesysteem',

      // Standaard NIS2-budgetblokken
      budgetTotal: 'Totaal budget conformiteitstraject',
      budget2026: 'Budget 2026',
      budget2027: 'Budget 2027',
      budget2028: 'Budget 2028',
      budgetInfra: 'Infrastructuurbudget',
      budgetSSI: 'Cyberbeveiligingsbudget',

      // Standaard aangepaste NIS2-blokken
      budgetEngaged: 'Vastgelegd budget',
      globalProgress: 'Globale voortgang',
      completedActions: 'Afgeronde acties',

      // NIS2-maturiteitslabels
      maturityAssetMgmt: 'Assetbeheer',
      maturityOpEnv: 'Operationele omgeving',
      maturityGovernance: 'Governance',
      maturityRiskEval: 'Risicobeoordeling',
      maturityRiskStrategy: 'Strategie voor risicobeheer',
      maturitySupplyChain: 'Beheer van risico\'s in de toeleveringsketen',
      maturityIAM: 'Identiteitsbeheer, authenticatie, toegangscontrole',
      maturityAwareness: 'Bewustmaking en opleiding',
      maturityDataSec: 'Gegevensbeveiliging',
      maturityInfoProtection: 'Processen en procedures voor informatiebescherming',
      maturityMaintenance: 'Onderhoud',
      maturityProtectionTech: 'Beschermingstechnologie',
      maturityAnomalies: 'Anomalieën en gebeurtenissen',
      maturityMonitoring: 'Continue monitoring',
      maturityDetection: 'Detectieprocessen',
      maturityResponsePlan: 'Responsplanning',
      maturityComms: 'Communicatie',
      maturityAnalysis: 'Analyse',
      maturityMitigation: 'Mitigatie',
      maturityImprovements: 'Verbeteringen',
      maturityRecoveryPlan: 'Herstelplanning',
      domainAssetRisk: 'Assets en risicobeoordeling',
      domainDataInfra: 'Beveiliging van gegevens en infrastructuur'
    },


    // Configuratiewizard (eerste start buiten demo)
    setup: {
      langHint: 'U kunt deze keuze wijzigen in de instellingen.',
      welcomeTitle: 'Welkom bij Cyber-Assistant',
      welcomeSubtitle: 'Uw ISMS-beheertool conform ISO 27001:2022 en NIS2',
      featureCompliance: 'Beheer uw conformiteit in één tool',
      featureDashboards: 'Dashboards',
      featureDashboardsDesc: 'Volg uw indicatoren en uw maturiteit',
      featureExports: 'Exports & rapporten',
      featureExportsDesc: 'Genereer PDF, Excel en JSON in één klik',
      importTitle: 'Gegevens importeren',
      importSubtitle: 'U kunt een eerder geëxporteerd JSON-bestand importeren.',
      importYes: 'Een JSON-bestand importeren',
      importYesDesc: 'Gegevens herstellen vanuit een back-up',
      importNo: 'Beginnen zonder gegevens',
      importNoDesc: 'De 93 ISO 27002-maatregelen worden vooraf geladen',
      importHint: 'U kunt op elk moment gegevens importeren of exporteren via Instellingen.',
      importSuccess: 'Bestand succesvol geïmporteerd',
      importError: 'Fout: ongeldig JSON-bestand of niet-herkend formaat.',
      frameworksTitle: 'Beveiligingsreferentiëlen',
      frameworksSubtitle: 'Kies de te activeren referentiëlen',
      frameworksHint: 'Aanpasbaar in Instellingen > Referentiëlen',
      frameworksLocked: 'Verplicht',
      frameworksControls: 'maatregelen',
      btnPrevious: 'Vorige',
      btnNext: 'Volgende',
      btnStart: 'Starten'
    },
    riskAnalysis: {
      title: 'Analyse van beveiligingsrisico\'s',
      subtitle: 'Voer een pragmatische risicoanalyse uit, afgestemd op ISO 27005.',
      importAnalyse: 'Analyse importeren',
      perimeterRequired: 'De scope is verplicht.',
      newAnalysis: 'Nieuwe analyse',
      statusDraft: 'Concept',
      statusComplete: 'Voltooid',
      noAnalyses: 'Geen risicoanalyses.',
      noAnalysesHint: 'Maak uw eerste analyse aan om uw risico\'s te beoordelen en te beheren.',
      createFirst: 'Analyse aanmaken',
      confirmDelete: 'Deze risicoanalyse verwijderen?',
      duplicated: 'Analyse gedupliceerd.',
      deleted: 'Analyse verwijderd.',
      saved: 'Analyse opgeslagen.',
      listColumns: {
        title: 'Titel',
        created: 'Aangemaakt op',
        status: 'Status',
        score: 'Score',
        light: 'Signaal',
        actions: 'Acties'
      },
      moreActions: 'Meer acties',
      steps: {
        context: 'Context',
        cia: 'CIA',
        continuity: 'Continuïteit',
        architecture: 'Documentatie',
        controls: 'Maatregelen',
        risks: 'Risico\'s',
        mesures: 'Maatregelen & Review',
        results: 'Resultaten',
        exportPdf: 'PDF-export',
        preview: 'Voorbeeld'
      },
      mesures: {
        subtitle: 'Bepaal uw belangrijkste aanbevelingen en plan de volgende review.'
      },
      nav: {
        previous: 'Vorige',
        next: 'Volgende',
        finish: 'Afronden',
        backToList: 'Terug naar de lijst'
      },
      context: {
        titleField: 'Titel van de analyse',
        perimeter: 'Scope',
        perimeterHint: 'Beschrijf de scope die deze analyse dekt.',
        description: 'Beschrijving',
        stakeholders: 'Belanghebbenden',
        stakeholdersHint: 'Scheid met komma\'s.',
        sourceFramework: 'Risicocatalogus',
        sourceFrameworkNone: '— Niet gespecificeerd —',
        sourceFrameworkHint: 'Voedt de voorgestelde risico\'s in de stap Risico\'s. “Geïntegreerde catalogus” = meegeleverde items; anders wordt de methode enkel in het rapport vermeld.',
        analysisMethod: 'Analysemethode',
        analysisMethodHint: 'Selecteert vooraf de bijbehorende impactmatrix; de matrixkeuze blijft aanpasbaar.',
        methodDefault: 'Pragmatische Cyber-Assistant-aanpak',
        methodEbios: 'EBIOS RM (compatibel met ISO 27005)',
        methodNist: 'NIST SP 800-30',
        catalogBuiltin: 'Generieke Cyber-Assistant-catalogus',
        catalogIntegrated: 'geïntegreerde catalogus',
        catalogLegacy: 'vermeld in het rapport',
        ebiosCouples: 'Paren risicobron × beoogd doelwit (EBIOS RM, workshop 2)',
        ebiosCouplesHint: 'Aanbevolen selectie: 3 tot 6 paren (ANSSI-gids v1.5). Opgenomen in het voorbeeld en het rapport, zonder effect op de scoring.',
        ebiosCouplesShort: 'Risicobronnen (EBIOS RM)',
        personalData: 'Verwerkte persoonsgegevens',
        dataSensitivity: 'Gevoeligheid van de gegevens',
        sensitivityLow: 'Laag',
        sensitivityMedium: 'Gemiddeld',
        sensitivityHigh: 'Hoog',
        subtitle: 'Beschrijf de context en de scope van de analyse.',
        perimeterPlaceholder: 'Bv.: Webapplicatie voor voorraadbeheer, servers en databases.',
        descriptionPlaceholder: 'Bv.: Analyse uitgevoerd in het kader van de ISO 27001-conformiteit.'
      },
      identity: {
        sectionTitle: 'Identiteit van het project',
        encoder: 'Invoer van de analyse (Naam - Voornaam)',
        validator: 'Validatie van de analyse (Naam - Voornaam)',
        controlBody: 'Naam van de controle-instantie',
        beneficiary: 'Naam van de begunstigde/klant',
        projectManager: 'Naam van de projectleider'
      },
      cia: {
        title: 'CIA-classificatie',
        subtitle: 'Beoordeel de behoeften inzake Vertrouwelijkheid, Integriteit en Beschikbaarheid.',
        confidentiality: 'Vertrouwelijkheid',
        integrity: 'Integriteit',
        availability: 'Beschikbaarheid',
        justification: 'Motivering',
        justificationHint: 'Licht de classificatiekeuzes toe.',
        level1: 'Laag',
        level2: 'Gemiddeld',
        level3: 'Hoog',
        level1Desc: 'Beperkte impact bij compromittering.',
        level2Desc: 'Significante impact op de activiteiten.',
        level3Desc: 'Kritieke impact, ernstige gevolgen.'
      },
      gdpr: {
        title: 'AVG — Gegevensbescherming',
        subtitle: 'Beoordeel de implicaties inzake de bescherming van persoonsgegevens.',
        personalData: 'Aanwezigheid van persoonsgegevens',
        personalDataExplain: 'Alle informatie over een geïdentificeerde of identificeerbare natuurlijke persoon (naam, e-mail, IP-adres, rijksregisternummer, enz.) in de zin van artikel 4 van de AVG.',
        sensitiveData: 'Aanwezigheid van gevoelige gegevens',
        sensitiveDataExplain: 'Gegevens waaruit raciale/etnische afkomst, politieke opvattingen, religieuze overtuigingen of vakbondslidmaatschap blijken, genetische/biometrische gegevens, gezondheidsgegevens, seksueel gedrag (artikel 9 van de AVG). De verwerking ervan is verboden, behoudens uitzonderingen.',
        processingRegistry: 'Verwerkingsregister opgesteld voor dit project?',
        processingRegistryExplain: 'Het register van verwerkingsactiviteiten (artikel 30 van de AVG) is verplicht voor organisaties met meer dan 250 werknemers, of bij regelmatige verwerking van gevoelige gegevens.',
        registryYes: 'Ja',
        registryNo: 'Nee',
        registryPlanned: 'Gepland'
      },
      continuity: {
        title: 'Continuïteit (RTO/RPO)',
        subtitle: 'Bepaal de hersteldoelstellingen en het toelaatbare gegevensverlies.',
        rtoLabel: 'RTO (uren)',
        rtoHint: '≤4u = zeer strikt, 8u = strikt, 24u = standaard, 72u = soepel',
        rpoLabel: 'RPO (uren)',
        rpoHint: '≤1u = zeer strikt, 6u = strikt, 24u = standaard, 72u = soepel',
        strict: 'Zeer strikt',
        moderate: 'Strikt',
        standard: 'Standaard',
        relaxed: 'Soepel',
        commentLabel: 'Opmerking continuïteit',
        commentPlaceholder: 'Motivering van de RTO/RPO-doelstellingen, bedrijfsbeperkingen...'
      },
      architecture: {
        title: 'Documentatie',
        subtitle: 'Technische documentatie en identiteitsbeheer.',
        techArchTitle: 'Technische architectuur',
        hosting: 'Hosting',
        hostingOnprem: 'On-premise',
        hostingCloud: 'Cloud',
        hostingHybrid: 'Hybride',
        internetExposed: 'Blootgesteld aan internet',
        iamTitle: 'Identiteitsbeheer (IAM)',
        sso: 'SSO (Single Sign-On)',
        mfa: 'MFA (Multifactorauthenticatie)',
        adminSeparation: 'Scheiding van beheerdersaccounts',
        architectureDocTitle: 'Architectuur',
        architectureDoc: 'Architectuurdossier ingevuld'
      },
      controls: {
        title: 'Vragenlijst Maatregelen',
        subtitle: 'Beoordeel de maturiteit van uw maatregelen in 8 operationele domeinen.',
        implemented: 'Geïmplementeerd',
        partial: 'Gedeeltelijk',
        planned: 'Gepland',
        toVerify: 'Te verifiëren',
        plannedAutoComment: '[Gepland] Implementatie voorzien — motivering: ',
        plannedBanner: '{count} maatregel(en) gemarkeerd als "Gepland" — De huidige score is voorwaardelijk aan hun effectieve implementatie.',
        plannedBadge: 'waarvan gepland',
        plannedControlsTitle: 'Geplande maatregelen (voorwaardelijk)',
        plannedDisclaimer: 'De bovenstaande maturiteitsscores omvatten {count} maatregel(en) gemarkeerd als "Gepland". De eindscore is voorwaardelijk aan hun effectieve implementatie. Een herbeoordeling wordt aanbevolen na hun invoering.',
        plannedAssumption: 'Opgelet: {count} maatregel(en) zijn gemarkeerd als "Gepland". De maturiteitsscores nemen deze maatregelen voorwaardelijk mee. Het werkelijke risiconiveau hangt af van hun effectieve implementatie binnen de voorziene termijnen.',
        importAnalyse: 'Importeren',
        exportAnalyseFile: '.analyse exporteren',
        importAnalyseSuccess: 'Analyse succesvol geïmporteerd.',
        importAnalyseError: 'Ongeldig .analyse-bestand.',
        importAnalyseSummary: 'Samenvatting van de te importeren analyse:',
        importConfirm: 'Deze analyse importeren?',
        importSource: 'Bron',
        imported: 'geïmporteerd',
        analyseExported: '.analyse-bestand geëxporteerd.',
        no: 'Nee',
        na: 'N.v.t.',
        comment: 'Opmerking',
        answeredOf: 'van',
        statusLabel: 'Status',
        warningTitle: 'Opgelet — Geplande maatregelen',
        improvedWarning: 'Het resultaat van de risicoanalyse berust op de veronderstelling dat de geplande maatregelen correct worden geïmplementeerd — het is onontbeerlijk om een risicoanalyse uit te voeren vóór de ingebruikname van het project in productie.',
        pdfControls: 'Maatregelen & Controles'
      },
      risks: {
        title: 'Risico\'s',
        subtitle: 'Selecteer en beoordeel de toepasselijke risico\'s.',
        selectFromCatalog: 'Selecteer de risico\'s uit de catalogus',
        addCustom: 'Aangepast risico toevoegen',
        customTitle: 'Aangepast risico',
        customTitlePlaceholder: 'Naam van het risico',
        deleteCustom: 'Dit risico verwijderen',
        confirmDeleteCustom: 'Dit aangepaste risico verwijderen?',
        customScenario: 'Beschrijf het risicoscenario',
        likelihood: 'Waarschijnlijkheid',
        impact: 'Impact',
        inherentScore: 'Inherente score',
        residualScore: 'Restscore',
        treatment: 'Behandeling',
        treatReduce: 'Verminderen',
        treatAccept: 'Aanvaarden',
        treatTransfer: 'Overdragen',
        treatAvoid: 'Vermijden',
        treatNa: 'Niet van toepassing (uitgesloten van scoring)',
        naJustification: 'Rechtvaardiging van niet-toepasselijkheid',
        naJustifPlaceholder: 'Waarom dit risico niet van toepassing is (ISO 27001-spoor, afgedrukt in het rapport)',
        naMissing: 'Ontbrekende rechtvaardiging — vereist door ISO 27001 §6.1.3.d',
        notes: 'Notities',
        likelihoodLevels: {
          1: 'Onbekend',
          2: 'Zeer laag',
          3: 'Laag',
          4: 'Gemiddeld',
          5: 'Hoog'
        },
        impactLevels: {
          1: 'Verwaarloosbaar',
          2: 'Beperkt',
          3: 'Significant',
          4: 'Ernstig',
          5: 'Kritiek'
        },
        owner: 'Risico-eigenaar',
        ownerPlaceholder: 'Naam van de verantwoordelijke'
      },
      results: {
        title: 'Resultaten & Aanbevelingen',
        subtitle: 'Automatische synthese van uw risicoanalyse.',
        globalLight: 'Globaal signaal',
        globalScore: 'Globale score',
        posture: 'Maatregelenpostuur',
        keyPoints: 'Kernpunten',
        domainSynthesis: 'Synthese per domein',
        riskRegister: 'Risicoregister',
        recommendations: 'Aanbevelingen',
        maturity: 'Maturiteit',
        computing: 'Berekening bezig...',
        noRisks: 'Geen risico geselecteerd.',
        scoreLabels: {
          1: 'Zeer goed',
          2: 'Goed',
          3: 'Aanvaardbaar',
          4: 'Zorgwekkend',
          5: 'Kritiek'
        },
        riskLevel: 'Niveau',
        tabSynthese: 'Synthese',
        tabRisques: 'Risico\'s',
        tabRecommandations: 'Aanbevelingen',
        tabMesures: 'Maatregelen & Review'
      },
      filters: {
        search: 'Zoeken...',
        status: 'Status',
        statusAll: 'Alle statussen',
        statusDraft: 'Concept',
        statusComplete: 'Voltooid',
        sortDateDesc: 'Meest recent',
        sortDateAsc: 'Oudste',
        sortTitle: 'Titel A-Z',
        sortScore: 'Score ↓'
      },
      reviewDate: {
        title: 'Volgende review',
        enable: 'Datum volgende review activeren',
        overdue: 'Achterstallig',
        upcoming: 'Binnenkort',
        column: 'Review'
      },
      exportPdf: {
        title: 'PDF-export',
        subtitle: 'Genereer het risicoanalyserapport in PDF-formaat.',
        generatePdf: 'PDF genereren',
        generating: 'Genereren bezig...',
        sections: 'Het rapport zal bevatten:',
        sectionList: {
          cover: 'Voorblad',
          executive: 'Managementsamenvatting',
          context: 'Context & scope',
          cia: 'CIA-classificatie & RTO/RPO',
          architecture: 'Documentatie',
          controls: 'Maatregelen & Controles',
          domains: 'Synthese van de domeinen',
          risks: 'Risicoregister',
          recommendations: 'Aanbevelingen',
          assumptions: 'Aannames & beperkingen',
          spot: 'Beveiligingsanalyse',
          keyRecommendations: 'Prioritaire mitigerende maatregelen',
          methodology: 'Methodologisch kader'
        },
        analyseTitle: '.analyse-export',
        analyseDesc: 'Exporteert de volledige analyse in herimporteerbaar JSON-formaat. Bevat de impactmatrix en de gekoppelde risicodrempels.'
      },
      priority: { P1: 'P1 - Kritiek', P2: 'P2 - Belangrijk', P3: 'P3 - Aanbevolen' },
      effort: { S: 'Klein', M: 'Gemiddeld', L: 'Groot' },
      light: { green: 'Groen', yellow: 'Geel', red: 'Rood' },
      domains: {
        IAM: 'Identiteit & Toegang',
        SDLC: 'Veilige ontwikkeling',
        VULN: 'Kwetsbaarheden',
        LOG: 'Logs & Detectie',
        DATA: 'Gegevensbescherming',
        INFRA: 'Infrastructuur',
        NETCRYPTO: 'Netwerk & Crypto',
        BCP: 'Continuïteit'
      },
      spot: {
        title: 'Resultaten van de evaluatie (Beveiliging)',
        inherentCriticality: 'Kriticiteit van de asset (inherent risico)',
        measuresPercent: 'Implementatieniveau van de maatregelen',
        residualScore: 'Restrisiconiveau',
        residualPlusOpen: 'Restrisico + open risico',
        inherentCriticalityHint: 'Beoordeelt het intrinsieke blootstellingsniveau van de asset, op basis van de CIA-classificatie, de internetblootstelling en de gevoeligheid van de gegevens.',
        measuresPercentHint: 'Gemiddeld implementatiepercentage van de beveiligingsmaatregelen over alle 8 geëvalueerde domeinen.',
        residualScoreHint: 'Risiconiveau na toepassing van de beveiligingsmaatregelen. Gebaseerd op de slechtste restscore onder de geïdentificeerde risico\'s.',
        residualPlusOpenHint: 'Restscore verhoogd met de nog niet behandelde open risico\'s (bekende kwetsbaarheden, openstaande acties).',
        openRiskAdj: 'Aanpassing open risico',
        openRiskHint: 'Voeg een punt toe als bekende risico\'s nog niet behandeld zijn (bv.: geïdentificeerde kwetsbaarheden, openstaande acties). Dit verhoogt de uiteindelijke restscore.',
        openRiskNone: '0 - Geen open risico',
        openRiskModerate: '1 - Enkele open risico\'s',
        openRiskSignificant: '2 - Aanzienlijke open risico\'s',
        avisCommentLabel: 'Opmerking van de evaluator',
        avisCommentHint: 'Voeg hier uw observaties of nuances toe over het resultaat van de evaluatie (bv.: bijzondere context, aandachtspunten).',
        avisOverrideLabel: 'Handmatige correctie van het advies',
        avisOverrideHint: 'Als het automatisch berekende advies de realiteit niet weerspiegelt (bv.: factoren buiten de analyse), kunt u het handmatig overschrijven. Laat "—" staan om de automatische berekening te behouden.',
        avisOverrideActive: 'Het automatische advies was: ',
        avisOverrideJustifLabel: 'Motivering van de correctie van het advies',
        avisOverrideJustifHint: 'Leg uit waarom u het berekende advies corrigeert (verplicht als een correctie wordt toegepast).',
        residualOverrideLabel: 'Handmatige correctie van de restscore',
        residualOverrideHint: 'Als de automatisch berekende restscore de realiteit niet weerspiegelt, kunt u die handmatig vervangen. Laat "—" staan om de automatische berekening te behouden.',
        residualOverrideAuto: 'automatische berekening',
        residualOverrideJustifLabel: 'Motivering van de correctie',
        residualOverrideJustifHint: 'Leg uit waarom u de berekende score corrigeert (verplicht als een correctie wordt toegepast).',
        residualCorrectedLabel: 'Opmerking over het restrisico',
        residualCorrectedHint: 'Vrije opmerking over het restrisiconiveau na inachtneming van de beveiligingsmaatregelen.',
        avisLabels: {
          green: 'Gunstig advies',
          yellow: 'Gunstig advies mits uitvoering van de belangrijkste aanbevelingen',
          red: 'Ongunstig advies'
        }
      },
      finalRecs: {
        title: 'Belangrijkste aanbevelingen',
        mitigationTitle: 'Prioritaire mitigerende maatregelen',
        mitigationSubtitle: 'Prioritaire acties geïdentificeerd om het risiconiveau te verlagen',
        add: 'Belangrijke aanbeveling toevoegen',
        titlePlaceholder: 'Titel van de aanbeveling',
        detailsPlaceholder: 'Details, acties, context...',
        statusTodo: 'Te doen',
        statusDone: 'Gedaan'
      },
      preview: {
        reportTitle: 'Risicoanalyse informatiebeveiliging - Cyberbeveiliging',
        reportNumber: 'Rapportnummer',
        reportDate: 'Datum van het rapport',
        treatmentDistribution: 'Verdeling van de behandelingen',
        riskLevel: 'Risiconiveau',
        riskMatrix: 'Risicomatrix',
        infoText: 'Voorbeeld van het rapport. Controleer de gegevens vóór de PDF-export.',
        toc: 'Inhoudsopgave',
        assumptions: 'Aannames'
      },
      impactMatrix: {
        selectMatrix: 'Impactmatrix',
        selectHint: 'Kies een matrix om de impact van elk risico volgens meerdere dimensies te beoordelen (bv.: financieel, reputatie, juridisch…). Als er geen geselecteerd is, wordt de impact beoordeeld op een eenvoudige schaal van 1 tot 5.',
        noMatrix: 'Geen (handmatige beoordeling 1-5)',
        evaluateVia: 'Beoordelen via matrix',
        evaluateHint: 'Gebruik de impactmatrix om dit risico volgens meerdere dimensies te beoordelen',
        modalTitle: 'Impactbeoordeling',
        modalHint: 'Selecteer voor elke dimensie het impactniveau dat het best bij dit risico past. De beschrijvende tekst helpt u het juiste niveau te kiezen. De globale impact wordt automatisch berekend (maximum van de geselecteerde niveaus).',
        computedImpact: 'Globale impact',
        computedMethod: 'Berekeningsmethode',
        aggregationMax: 'het maximumniveau onder de beoordeelde dimensies',
        apply: 'Toepassen',
        cancel: 'Annuleren',
        evaluated: 'dim. beoordeeld',
        matrixNotFound: 'Matrix niet gevonden',
        matrixUsed: 'Gebruikte impactmatrix',
        configureHint: 'U kunt impactmatrices configureren in de speciale sectie "Impactmatrices" om risico\'s volgens meerdere dimensies te beoordelen.'
      },
      pdfTitle: 'Risicoanalyse informatiebeveiliging',
      pdfSubject: 'Risicoanalyserapport',
      pdfUntitled: 'Zonder titel',
      pdfReport: 'Rapport',
      pdfDate: 'Datum',
      pdfStatus: 'Status',
      pdfComplete: 'Voltooid',
      pdfDraft: 'Concept',
      pdfGlobalScore: 'Globale score',
      pdfControlPosture: 'Maatregelenpostuur',
      pdfRiskCount: 'Geïdentificeerde risico\'s',
      pdfConfidential: 'Vertrouwelijk document',
      pdfGeneratedBy: 'Gegenereerd door Cyber-Assistant',
      pdfTOC: 'Inhoudsopgave',
      pdfSecurityResults: 'Resultaten van de evaluatie (Beveiliging)',
      pdfInherentCriticality: 'Kriticiteit van de asset (inherent risico)',
      pdfMeasuresImpl: 'Implementatieniveau van de maatregelen',
      pdfResidualLevel: 'Restrisiconiveau',
      pdfResidualPlusOpen: 'Restrisico + open risico',
      pdfSecurityComment: 'Opmerking advies Beveiliging',
      pdfResidualComment: 'Opmerking gecorrigeerd restrisico',
      pdfExecSummary: 'Managementsamenvatting',
      pdfGlobalLight: 'Globaal signaal',
      pdfContext: 'Context & Scope',
      pdfPerimeter: 'Scope',
      pdfDescription: 'Beschrijving',
      pdfStakeholders: 'Belanghebbenden',
      pdfSourceFramework: 'Bronreferentieel',
      pdfPersonalData: 'Persoonsgegevens',
      pdfSensitivity: 'Gevoeligheid',
      pdfImpactMatrix: 'Impactmatrix',
      pdfCIA: 'CIA-classificatie & Continuïteit',
      pdfConfidentiality: 'Vertrouwelijkheid',
      pdfIntegrity: 'Integriteit',
      pdfAvailability: 'Beschikbaarheid',
      pdfJustification: 'Motivering',
      pdfArchitecture: 'Documentatie',
      pdfHosting: 'Hosting',
      pdfInternetExposed: 'Blootgesteld aan internet',
      pdfAdminSep: 'Scheiding admin',
      pdfDomainSynthesis: 'Synthese van de domeinen',
      pdfDomain: 'Domein',
      pdfMaturity: 'Maturiteit',
      pdfLight: 'Signaal',
      pdfRiskRegister: 'Risicoregister',
      pdfRisk: 'Risico',
      pdfThreat: 'Dreiging',
      pdfScenario: 'Scenario',
      pdfMethodTitle: 'Scoringsmethode',
      pdfMethodInherent: 'Inherent risico = waarschijnlijkheid (1-5) × impact (1-5), dus 1 tot 25.',
      pdfMethodResidual: 'Restrisico = inherent risico verminderd met maximaal 40% volgens de gemiddelde maturiteit van de aan het risico gekoppelde controledomeinen, daarna verhoogd (+1) door: internetblootstelling (enkel vijandige gebeurtenissen), hoge C/I/B-classificatie, RTO ≤ 8u of RPO ≤ 6u.',
      pdfMethodNa: 'Risico\'s gemarkeerd als “niet van toepassing” blijven vermeld met hun rechtvaardiging maar zijn uitgesloten van de scores en het globale licht; een controledomein dat volledig N.v.t. is, wordt uitgesloten van de gemiddelden.',
      pdfMethodThresholds: 'De niveaus (lichten) komen uit de actieve risicoschaal, raadpleegbaar en aanpasbaar via “Risicodrempels” in de module Risicoanalyse.',
      pdfInherent: 'Inh.',
      pdfResidual: 'Rest.',
      pdfTreatment: 'Behandeling',
      pdfImpactDetail: 'Detail impactbeoordeling',
      pdfMatrix: 'matrix',
      pdfKeyRecs: 'Belangrijkste aanbevelingen',
      pdfDone: 'Gedaan',
      pdfTodo: 'Te doen',
      pdfRecTitle: 'Titel',
      pdfRecDetails: 'Details',
      pdfRecStatus: 'Status',
      pdfRecommendations: 'Aanbevelingen',
      pdfPriority: 'Prioriteit',
      pdfRecommendation: 'Aanbeveling',
      pdfEffort: 'Inspanning',
      pdfRationale: 'Onderbouwing',
      pdfAssumptions: 'Aannames & beperkingen',
      pdfAssumptionsText1: 'Deze analyse weerspiegelt de situatie op de datum van uitvoering. De scores zijn indicatief en vervangen geen formele audit.',
      pdfAssumptionsText2: 'De aanbevelingen worden automatisch gegenereerd op basis van de gegeven antwoorden.',
      pdfEncoder: 'Invoer',
      pdfValidator: 'Validatie',
      pdfControlBody: 'Controle-instantie',
      pdfBeneficiary: 'Begunstigde/Klant',
      pdfProjectManager: 'Projectleider',
      pdfArchitectureDoc: 'Architectuurdossier',
      pdfGenerated: 'PDF gegenereerd',
      syncToProject: 'Sync naar Projectrisico\'s',
      syncSuccess: 'Projectrisico succesvol aangemaakt.',
      syncAlreadySynced: 'Projectrisico bijgewerkt.',
      syncDuplicateTitle: 'Duplicaat gedetecteerd',
      syncDuplicateMsg: 'Er bestaat al een projectrisico met dezelfde naam. Wat wilt u doen?',
      syncOptionNew: 'Nieuw aanmaken',
      syncOptionOverwrite: 'Bestaande overschrijven',
      syncOptionCancel: 'Annuleren',
      thresholds: {
        title: 'Risicodrempels',
        subtitle: 'Matrix Waarschijnlijkheid × Ernst met risiconiveaus',
        new: 'Nieuw',
        newName: 'Nieuwe drempel',
        duplicate: 'Dupliceren',
        delete: 'Verwijderen',
        activate: 'Activeren',
        active: 'Actief',
        editName: 'Naam',
        editDescription: 'Beschrijving',
        riskLevels: 'Risiconiveaus',
        matrix: 'Matrix Waarschijnlijkheid × Ernst',
        matrixTitle: 'Risicomatrix',
        probability: 'Waarschijnlijkheid',
        gravity: 'Ernst',
        clickToChange: 'Klik op een cel om het niveau te wijzigen',
        confirmDelete: 'Deze risicodrempel verwijderen?',
        levels: {
          minimum: 'Minimaal',
          faible: 'Laag',
          modere: 'Matig',
          eleve: 'Hoog',
          tresEleve: 'Zeer hoog'
        }
      },
      methodology: {
        title: 'Methodologisch kader',
        objective: 'Doelstelling',
        objectiveText: 'Deze analyse beoogt de risico\'s inzake informatiebeveiliging te identificeren, te beoordelen en te behandelen in lijn met de richtsnoeren van ISO/IEC 27005:2022.',
        normativeRef: 'Normatieve referentie',
        normativeRefText: 'ISO/IEC 27005:2022 — Informatietechnologie — Beheer van informatiebeveiligingsrisico\'s. Deze norm biedt richtlijnen voor het risicobeheerproces inzake informatiebeveiliging binnen een ISMS (ISO/IEC 27001).',
        processTitle: 'Analyseproces in 8 stappen',
        step1: 'Context & scope — Bepaling van de scope, de belanghebbenden en de beoordelingscriteria',
        step2: 'CIA-classificatie & AVG — Beoordeling van vertrouwelijkheid, integriteit, beschikbaarheid en AVG-impact',
        step3: 'Bedrijfscontinuïteit — RTO/RPO-doelstellingen en bedrijfsbeperkingen',
        step4: 'Documentatie — Technische architectuur, identiteitsbeheer, documentatie',
        step5: 'Maatregelen & Controles — Beoordeling van 24 beveiligingsmaatregelen in 8 domeinen',
        step6: 'Risico-identificatie — Selectie en beoordeling van de risicoscenario\'s',
        step7: 'Resultaten & evaluatie — Geautomatiseerde synthese, scoring, aanbevelingen',
        step8: 'Risicobehandeling — Behandelingsbeslissingen (verminderen, aanvaarden, overdragen, vermijden)',
        scoringTitle: 'Scoringsformule',
        scoringFormula: 'Restrisico = Waarschijnlijkheid × Impact × (1 − Maturiteit maatregelen × 0.40)',
        scoringAdjust: 'Contextuele aanpassingen: +1 bij internetblootstelling, +1 bij hoge CIA, +1 bij strikte RTO/RPO.',
        scaleTitle: 'Risicoschaal',
        pdcaTitle: 'PDCA-cyclus',
        pdcaPlan: 'De context bepalen, de risico\'s identificeren',
        pdcaDo: 'De behandelingsmaatregelen implementeren',
        pdcaCheck: 'Bewaken, controleren, herbeoordelen',
        pdcaAct: 'Verbeteren, de analyse bijwerken'
      }
    },

    // Impactmatrices
    impactMatrices: {
      title: 'Impactmatrices',
      subtitle: 'Definieer en personaliseer uw impactmatrices voor de risicoanalyse.',
      listTitle: 'Matrices',
      newMatrix: 'Nieuw',
      newMatrixName: 'Nieuwe matrix',
      active: 'Actief',
      activate: 'Activeren',
      duplicate: 'Dupliceren',
      delete: 'Verwijderen',
      copy: 'kopie',
      selectOrCreate: 'Selecteer of maak een matrix aan',
      generalInfo: 'Algemene informatie',
      matrixName: 'Naam',
      matrixDescription: 'Beschrijving',
      levelsTitle: 'Ernstniveaus',
      addLevel: 'Toevoegen',
      levelLabel: 'Label',
      levelBand: 'Band',
      levelPriority: 'Prioriteit',
      levelCapability: 'Reactiecapaciteit',
      newLevelLabel: 'Niveau',
      maxLevels: 'Maximaal 5 niveaus (afgestemd op de risicoscoreschaal 1-5).',
      dimensionsTitle: 'Dimensies',
      addDimension: 'Toevoegen',
      newDimensionLabel: 'Dimensie',
      gridTitle: 'Impactraster',
      cardLevels: 'niveaus',
      cardDimensions: 'dimensies',
      dimension: 'Dimensie',
      aggregationTitle: 'Aggregatiemethode',
      aggregationMethod: 'Berekening van de globale impact',
      aggregationNotes: 'Notities',
      confirmDelete: 'Deze matrix verwijderen?',
      toastCreated: 'Matrix aangemaakt',
      toastDuplicated: 'Matrix gedupliceerd',
      toastDeleted: 'Matrix verwijderd',
      toastActivated: 'Matrix geactiveerd',
      toastCannotDeleteLast: 'De laatste matrix kan niet worden verwijderd'
    },

    audit: {
      title: 'Traceerbaarheid van wijzigingen',
      localUser: 'Lokale gebruiker',
      actionAdd: 'Toevoeging',
      actionEdit: 'Wijziging',
      actionDelete: 'Verwijdering',
      actionImport: 'Import',
      actionExport: 'Export',
      actionConfig: 'Configuratie',
      columnDate: 'Datum / Tijd',
      columnUser: 'Gebruiker',
      columnAction: 'Actie',
      columnCategory: 'Categorie',
      columnTarget: 'Element',
      columnDetails: 'Details',
      emptyState: 'Geen geregistreerde acties',
      clearHistory: 'Geschiedenis wissen',
      clearConfirm: 'De volledige traceerbaarheidsgeschiedenis verwijderen?',
      activityTitle: 'Recente activiteit',
      noActivity: 'Geen recente activiteit',
      catControls: 'Maatregelen',
      catActions: 'Acties',
      catRisks: 'Risico\'s',
      catAudits: 'Audits',
      catNc: 'Non-conformiteiten',
      catReviews: 'Reviews',
      catKpis: 'KPI',
      catDocuments: 'Documenten',
      catStakeholders: 'Belanghebbenden',
      catThreats: 'Dreigingen',
      catRiskAnalysis: 'Risicoanalyse',
      catProjectRisks: 'Projectrisico\'s',
      catCriticalAssets: 'Kritieke assets',
      catImpactMatrices: 'Matrices',
      catNis2: 'NIS2',
      catSoa: 'SOA',
      catSettings: 'Instellingen',
      catSystem: 'Systeem',
      filterAll: 'Alle',
      clearTitle: 'Logboek wissen',
      importFile: 'Bestandsimport',
      logoRemoved: 'Logo verwijderd',
      logoUploaded: 'Logo geüpload',
      passwordChanged: 'Wachtwoord gewijzigd'
    },
    wizard: {
      serverCheck: 'Servercontrole',
      serverCheckSub: 'Beschikbaarheid van de services controleren',
      serverReady: 'Server gereed',
      serverError: 'Probleem gedetecteerd',
      checkSync: 'Synchronisatie-endpoint',
      checkUsers: 'Gebruikers-endpoint',
      checkSysInfo: 'Systeeminformatie',
      checkLicense: 'Licentiestatus',
      checkServer: 'Serverconfiguratie',
      recheck: 'Opnieuw controleren',
      noWriteAccess: 'Geen schrijftoegang',
      lowDiskSpace: 'Onvoldoende schijfruimte',
      sysInfoUnavailable: 'Systeeminfo niet beschikbaar',
      freeSpace: 'vrij',
      // Detectie van de runtime
      checkRuntime: 'Uitvoeringsomgeving',
      runtimeNode: 'Node.js',
      runtimePHP: 'Apache/PHP',
      runtimeDetected: 'Gedetecteerd: {runtime}',
      // Slide netwerkbeveiliging
      networkSecTitle: 'Netwerkbeveiliging',
      networkSecSub: 'Belangrijke informatie',
      networkSecWarning: 'Deze applicatie is uitsluitend ontworpen voor gebruik op een lokaal netwerk (LAN/intranet).',
      networkSecExplain: 'Cyber-Assistant bevat authenticatie en toegangscontroles, maar is niet ontworpen om aan het internet te worden blootgesteld. Als de applicatie op een lokaal netwerk wordt gehost, is het essentieel de toegang op netwerkniveau te beperken (firewall, VLAN, VPN), aangezien ze niet over voldoende bescherming beschikt tegen aanvallen vanaf het internet.',
      networkSecRecTitle: 'Aanbevolen voorzorgsmaatregelen:',
      networkSecRec1: 'Achter een bedrijfsfirewall of VPN implementeren',
      networkSecRec2: 'De toegang beperken tot uitsluitend het interne netwerk',
      networkSecRec3: 'HTTPS gebruiken met een geldig TLS-certificaat',
      networkSecRec4: 'De applicatie nooit aan het internet blootstellen',
      networkSecRec5: 'De serveromgeving regelmatig bijwerken',
      networkSecRec6: 'De toegang tot de applicatie beperken tot uitsluitend geautoriseerde gebruikers',
      networkSecRec7: 'De applicatie niet vrij toegankelijk op het netwerk laten zonder authenticatie',
      networkSecAck: 'Ik verbind mij ertoe de toegang tot deze applicatie te beperken tot uitsluitend geautoriseerde gebruikers en ze niet vrij toegankelijk op het netwerk bloot te stellen',
      adminSetup: 'Beheerdersaccount',
      trialExplain: 'Gratis proefperiode van 14 dagen om de servermodus te testen.',
      trialExpiry: 'Wijzigingen worden geblokkeerd na afloop van de proefperiode.',
      // Stap lokaal wachtwoord
      localPwdTitle: 'Wachtwoordbeveiliging',
      localPwdSub: 'Optioneel maar aanbevolen',
      localPwdExplain: 'Stel een wachtwoord in om de toegang tot de bewerkingsmodus te beschermen. Dit wachtwoord voorkomt onbedoelde wijzigingen aan uw gegevens.',
      localPwdLabel: 'Wachtwoord',
      localPwdPlaceholder: 'Minimaal 18 tekens',
      localPwdConfirmLabel: 'Wachtwoord bevestigen',
      localPwdConfirmPlaceholder: 'Herhaal het wachtwoord',
      localPwdHint: 'U kunt deze stap overslaan en later een wachtwoord instellen in de Instellingen.',
      localPwdWeak: 'Het wachtwoord voldoet niet aan de vereiste criteria.',
      localPwdMismatch: 'De wachtwoorden komen niet overeen.',
      // Slide transversaliteit
      transTitle: 'Transversaliteit van de referentiëlen',
      transSub: 'Eén inspanning, meerdere conformiteiten',
      transTimeSave: 'Tijdswinst',
      transTimeSaveDesc: 'Documenteer een ISO 27002-maatregel: die dekt automatisch de overeenkomstige vereisten van NIS2, CyFun en NIST CSF.',
      transConsistency: 'Gegarandeerde consistentie',
      transConsistencyDesc: 'De automatische mappings tussen referentiëlen zorgen voor consistentie van begin tot einde, zonder herinvoer of vergetelheden.',
      transVisibility: 'Eengemaakt overzicht',
      transVisibilityDesc: 'Eén enkel dashboard weerspiegelt uw conformiteit over alle geactiveerde referentiëlen.',
      // Slide serverpromotie (alleen lokaal)
      serverPromoTitle: 'Serverversie beschikbaar',
      serverPromoSub: 'Werk in team samen aan uw ISMS',
      serverPromoCoEdit: 'Co-editing in realtime',
      serverPromoCoEditDesc: 'Werk met meerdere personen tegelijk aan hetzelfde ISMS dankzij een intelligent vergrendelingssysteem.',
      serverPromoUsers: 'Gebruikersbeheer',
      serverPromoUsersDesc: 'Beheerders- en editorrollen, tot 100 gebruikers met beveiligde authenticatie.',
      serverPromoSync: 'Automatische synchronisatie',
      serverPromoSyncDesc: 'Gecentraliseerde gegevens op de server, toegankelijk vanaf elk verbonden werkstation.',
      serverPromoLink: 'Meer informatie op cyber-assistant.com',
      // Stap NIS2-zekerheidsniveau
      nis2LevelTitle: 'NIS2-zekerheidsniveau',
      nis2LevelSub: 'Bepaal het CyFun-niveau dat bij uw organisatie past',
      nis2LevelAdviceLabel: 'Tip:',
      nis2LevelAdvice: 'Vóór u kiest, raden wij u aan de zelfidentificatietool van het',
      nis2LevelAdvice2: 'te gebruiken om uw NIS2-zekerheidsniveau te bepalen.',
      nis2LevelAdvice3: 'Deze keuze bepaalt het aantal te beoordelen eisen en de nalevingsdrempels.',
      nis2LevelSelect: 'Selecteer het NIS2-zekerheidsniveau dat bij uw organisatie past:',
      nis2Requirements: 'vereisten',
      nis2KeyMeasures: 'sleutelmaatregelen',
      nis2LevelBasicDesc: 'Voor organisaties die hun NIS2-traject starten. Conformiteitsdrempel: 2.5/5.',
      nis2LevelImportantDesc: 'Voor belangrijke entiteiten in de zin van NIS2. Conformiteitsdrempel: 3/5.',
      nis2LevelEssentialDesc: 'Voor essentiële entiteiten in de zin van NIS2. Conformiteitsdrempel: 3.5/5 + minimum per categorie.',
      nis2Lang: 'Taal van de maatregelen:',
      nis2LangHint: 'De taal van de titels en beschrijvingen van de NIS2-vereisten.',
      // ReCyF / NIS2-referentieel (gecombineerde stap)
      nis2SetupTitle: 'NIS2-referentieel',
      nis2SetupSub: 'Kies het referentieel en het niveau die bij uw organisatie passen',
      nis2RefSelect: 'Welk NIS2-referentieel wilt u gebruiken?',
      nis2RefBEDesc: 'Belgisch kader (CCB) gebaseerd op NIST CSF 2.0. Niveaus Basic / Important / Essential, evaluatie op basis van maturiteit.',
      nis2RefFRDesc: 'Referentieel Cyber France (ANSSI). 20 beveiligingsdoelstellingen, graden Belangrijke / Essentiële Entiteit, aanvaardbare conformiteitsmiddelen.',
      recyfAdvice: 'De graad hangt af van de kwalificatie van uw entiteit onder NIS2: Belangrijke Entiteit (EI) of Essentiële Entiteit (EE).',
      recyfObj115: 'doelstellingen 1 tot 15',
      recyfObj120: 'doelstellingen 1 tot 20',
      recyfDegreeSelect: 'Selecteer de graad van uw entiteit (ReCyF):',
      recyfEIDesc: 'Voor belangrijke entiteiten in de zin van NIS2.',
      recyfEEDesc: 'Voor essentiële entiteiten (incl. risicogebaseerde aanpak, audit, toezicht).',
      // Slide serverfunctionaliteiten (alleen server)
      serverCapTitle: 'Serverfunctionaliteiten',
      serverCapSub: 'Met deze serverversie kunt u…',
      serverCapCoEdit: 'Co-editing',
      serverCapCoEditDesc: 'Werk met meerdere personen tegelijk dankzij automatische vergrendeling per sectie.',
      serverCapUsers: 'Gebruikersbeheer',
      serverCapUsersDesc: 'Beheerders- en editorrollen, tot 100 gebruikers met beveiligde sessies.',
      serverCapSync: 'Synchronisatie',
      serverCapSyncDesc: 'Gecentraliseerde gegevens, automatisch gesynchroniseerd tussen alle werkstations.',
      serverCapLock: 'Vergrendeling',
      serverCapLockDesc: 'Heartbeat-systeem dat bewerkingsconflicten tussen medewerkers voorkomt.',
      // === CSI-MCP === toegevoegde servercapaciteiten + showcase-slide lokale edities
      serverCapEntities: 'Multi-entiteit',
      serverCapEntitiesDesc: 'Beheer tot 50 entiteiten: geconsolideerd groepsdashboard, strikte gegevensscheiding per vestiging.',
      serverCapMcp: 'AI-toegang (MCP)',
      serverCapMcpDesc: 'Koppel uw AI-assistent aan uw ISMS via de MCP-standaard — alleen-lezen en onder uw controle. Bij voorkeur een AI op uw eigen infrastructuur of soeverein.',
      mcpSlideTitle: 'Ga verder met de Server-editie',
      mcpSlideSubtitle: 'Twee capaciteiten die het verschil maken',
      mcpSlideHead: 'Uw ISMS, bevraagbaar door uw AI',
      mcpSlideBody: 'De Server-editie biedt een standaard <strong>MCP</strong>-interface: uw AI-assistent antwoordt rechtstreeks op uw conformiteitsgegevens, alleen-lezen, met persoonlijke intrekbare toegang. Compatibel met gangbare assistenten en met een AI op uw eigen infrastructuur.',
      mcpSlideEntHead: 'Beheer meerdere entiteiten',
      mcpSlideEntBody: 'Tot 50 entiteiten in één installatie: geconsolideerd groepsoverzicht, strikte isolatie per vestiging, import/export per entiteit.',
      mcpSlideAvail: 'Beschikbaar in de Server-editie.',
      mcpSlideServerOk: 'Uw Server-editie bevat multi-entiteit en AI-toegang (MCP).',
      multiEntTitle: 'Multi-entiteiten',
      multiEntSub: 'Eén ISMS, meerdere afgeschermde perimeters',
      multiEntIsolation: 'Afscherming',
      multiEntIsolationDesc: 'Meerdere entiteiten of sites in één installatie — de gegevens van elke perimeter (risico\'s, acties, maatregelen…) zijn strikt gescheiden.',
      multiEntAccounts: 'Gekoppelde accounts',
      multiEntAccountsDesc: 'Elk gekoppeld account ziet alleen zijn eigen perimeter, met rechten per sectie (lezen / schrijven). Meervoudig lidmaatschap mogelijk.',
      multiEntGroup: 'Geconsolideerd groepsoverzicht',
      multiEntGroupDesc: 'Dashboard "Alle entiteiten" en geconsolideerde secties in alleen-lezen, met badges, entiteitsmarkeringen en opening van de bronperimeter om te bewerken.',
      multiEntTransfer: 'Beheerste verdeling',
      multiEntTransferDesc: 'Assistent voor verplaatsing tussen perimeters, exports benoemd per entiteit en beveiliging tegen kruislingse import.',
      multiEntAvailServer: 'Functie activeerbaar in Instellingen > Multi-entiteiten (licentieoptie multi-entiteiten).',
      multiEntAvailLocal: 'Beschikbaar in servermodus (licentieoptie).',
      // Statuslabels van de wizard
      alreadyConfigured: 'De server is al geconfigureerd.',
      configured: 'Geconfigureerd',
      firstSetup: 'Eerste start',
      loginHint: 'Meld u na de wizard aan om toegang te krijgen tot de bewerkingsmodus.',
      serverUnavailable: 'Server niet beschikbaar',
      syncMissing: 'Niet geïmplementeerd',
      trialBadge: 'Gratis proefperiode — {days} dagen resterend van 14',
      usersMissing: 'Niet geïmplementeerd',
      // FIX-I18N-WIZARD (audit 2026-06-10, bundle.js:2713) : sleutels verplaatst vanuit
      // snapshots.* waar ze per vergissing waren ondergebracht (nooit opgelost door t())
      disclaimerTitle: 'Beveiligingsreferentiëlen',
      disclaimerSubtitle: 'Belangrijke informatie',
      disclaimerInfoTitle: 'Open referentiëlen',
      disclaimerInfoBody: 'Deze editie gebruikt de open referentiëlen "Open Security Controls" en "Open Security Management Framework", originele herformuleringen geïnspireerd op de beveiligingsdoelstellingen van de normen ISO/IEC 27002:2022 en ISO/IEC 27001:2022.',
      disclaimerWarningTitle: 'Waarschuwing',
      disclaimerWarningBody: 'Deze referentiëlen zijn geen officiële ISO-normen en vervangen niet de aanschaf van de originele documenten bij ISO. Voor een certificeerbare conformiteit dient u de officiële normen aan te schaffen op iso.org.',
      corporateUpsellSlideTitle: 'Corporate-editie',
      corporateUpsellSlideSubtitle: 'Ga verder',
      corporateUpsellTitle: 'Wilt u verder gaan?',
      corporateUpsellBody: 'De <strong>Corporate-versie</strong> bevat de officiële normen <strong>ISO/IEC 27001:2022</strong> en <strong>ISO/IEC 27002:2022</strong> — ideaal als u een certificering of een formele audit beoogt.',
      corporateFeatureCollab: 'Co-editing met meerdere medewerkers in realtime',
      corporateFeatureServer: 'Gecentraliseerde servermodus met synchronisatie',
      corporateFeatureISO: 'Officiële normen ISO/IEC 27001 & 27002 inbegrepen',
      corporateFeatureLang: 'Geavanceerd natief Engels (professionele vertalingen)',
      corporateUpsellContact: 'Neem contact met ons op voor meer informatie: <a href="mailto:info@cyber-assistant.com" style="color:var(--color-info,#3b82f6);text-decoration:underline;">info@cyber-assistant.com</a>',
      transMeasures: 'maatregelen'
    },

    // Gebruikershandleiding

    // Wachtwoordbeleid
    passwordPolicy: {
      title: 'Wachtwoordvereisten:',
      minLength: 'Minstens {{min}} tekens',
      uppercase: 'Minstens één hoofdletter',
      lowercase: 'Minstens één kleine letter',
      special: 'Minstens één speciaal teken',
      ok: 'OK',
      missing: 'Ontbreekt',
      missingRequirements: 'Ontbrekende vereisten'
    },

    // Opties voor herzieningsfrequentie
    reviewFreq: {
      monthly: 'Maandelijks',
      quarterly: 'Driemaandelijks',
      biannual: 'Halfjaarlijks',
      annual: 'Jaarlijks',
      onChange: 'Bij wijziging'
    },

    // Testresultaten
    tests: {
      passed: 'Tests voltooid: {{passed}}/{{total}} geslaagd',
      failed: 'Tests voltooid: {{passed}}/{{total}} geslaagd, {{failed}} mislukt'
    },

    // Snapshots
    snapshots: {
      empty: 'Geen snapshot opgeslagen',
      historyEmpty: 'Geschiedenis leeg.',
      kept: 'Bewaarde snapshots: {{count}}/{{limit}}',
      displayed: 'Weergegeven: {{count}}',
      latest: 'Laatste snapshot: {{date}}',
      totalSize: 'Totale grootte: {{size}}',
      noMatch: 'Geen enkele snapshot komt overeen met de filters.',
      tagAuto: 'Auto',
      tagManual: 'Handmatig',
      restore: 'Herstellen',
      export: 'Exporteren',
      // FIX-I18N-KEYS (audit 2026-06-10) : labels van automatische snapshots
      backupBeforeRestore: 'Back-up vóór herstel',
      backupBeforeImport: 'Back-up vóór import',
      backupBeforeReset: 'Back-up vóór reset',
      backupBeforeDemo: 'Back-up vóór demogegevens'
    },

    // Demomodus
    demo: {
      thisFeature: 'Deze functie',
      disabledInDemo: 'is uitgeschakeld in demomodus.',
      limitReached: 'Limiet bereikt',
      maxInDemo: 'maximum in demomodus',
      storageLimitReached: 'Opslaglimiet bereikt in demomodus',
      banner: {
        text: 'Demoversie',
        backWebsite: 'Terug naar de website',
        download: 'Applicatie downloaden',
        contact: 'Contacteer ons'
      }
    },

    // Waarschuwingen
    warnings: {
      missingSubcategory: 'Ontbrekende subcategorie voor {{count}} maatregel(en)'
    },

    // FIX-I18N-AUTH (audit 2026-06-10) : scherm « server onbereikbaar » bij het opstarten
    errors: {
      serverUnreachable: 'Server onbereikbaar',
      serverUnreachableDesc: 'Kan de gegevens niet van de server laden. Controleer uw netwerkverbinding en of de server actief is.'
    },

    // I18N-ADMINUI (2026-07-10): teksten van het beheerpaneel server/beveiliging (bundle.js)
    adminUi: {
      checkWebCrypto: 'Web Crypto API beschikbaar',
      checkEditPassword: 'Bewerkingswachtwoord ingesteld',
      checkHashAlgo: 'Hash-algoritme (PBKDF2 600k)',
      checkRandomUuid: 'crypto.randomUUID() ondersteund',
      checkSecureProtocol: 'Beveiligd protocol (file:// of https://)',
      checksOkSuffix: 'controles OK',
      serverStats: 'Serverstatistieken',
      recoEditPassword: 'Stel een sterk bewerkingswachtwoord in om uw gegevens te beschermen.',
      recoExportBackup: 'Exporteer uw gegevens regelmatig als back-up.',
      recoModernBrowser: 'Gebruik een moderne browser met ondersteuning voor de Web Crypto API.',
      recoHttps: 'Activeer HTTPS voor versleutelde communicatie.',
      recoCors: 'Configureer een specifieke CORS-origin in plaats van * (wildcard).',
      recoUpdates: 'Werk de server en zijn afhankelijkheden regelmatig bij.',
      recoBackups: 'Activeer automatische back-ups op de server.',
      recoAuditLogs: 'Controleer regelmatig het auditlogboek.',
      filterByType: 'Filteren op type:',
      allEvents: 'Alle gebeurtenissen',
      colDate: 'Datum',
      colEvent: 'Gebeurtenis',
      colUser: 'Gebruiker',
      colIp: 'IP',
      colDetails: 'Details',
      auditLoadError: 'Fout bij het laden van het logboek.',
      loadMore: 'Meer laden',
      ipModeDisabled: 'Uitgeschakeld',
      ipModeAllowlist: 'Witte lijst (allowlist)',
      ipModeDenylist: 'Zwarte lijst (denylist)',
      ipAddressesLabel: 'IP-adressen (één per regel, CIDR-notatie ondersteund):',
      save: 'Opslaan',
      saving: 'Bezig met opslaan...',
      serverRefusedConfig: 'De server heeft de configuratie geweigerd.',
      ipFilterErrorPrefix: 'Fout IP-filtering: ',
      ipFilterSaved: 'IP-filterconfiguratie opgeslagen.',
      ipFilterSaveError: 'Fout bij het opslaan van de IP-filtering.',
      currentPolicy: 'Huidig beleid:',
      policyRules: 'Minimaal 18 tekens, 1 hoofdletter, 1 kleine letter en 1 speciaal teken verplicht.',
      passwordExpiration: 'Vervaltermijn van wachtwoorden:',
      expirationDisabled: 'Uitgeschakeld (geen vervaltermijn)',
      days30: '30 dagen',
      days60: '60 dagen',
      days90: '90 dagen',
      policyErrorPrefix: 'Fout wachtwoordbeleid: ',
      policySaved: 'Wachtwoordbeleid opgeslagen.',
      policySaveError: 'Fout bij het opslaan van het beleid.',
      ssoCardDesc: 'Koppel een identiteitsprovider (Azure AD, Google Workspace, Okta\u2026) voor eenmalige aanmelding.',
      ssoTestRefused: 'De server heeft de SSO-test geweigerd.',
      ssoTestOk: 'SSO-verbinding OK: de provider heeft geantwoord.',
      ssoCertAutoFetched: 'TLS-certificaat automatisch opgehaald',
      ssoUnreachable: 'Kan de SSO-provider niet bereiken. Controleer de URL en de netwerkverbinding.',
      demoDataUnavailable: 'Demogegevens niet beschikbaar',
      userPlaceholder: 'gebruiker',
      loadedSuffix: 'geladen'
    },

    // FIX-I18N-AUTOSAVE (audit 2026-06-10, bundle.js:12866) : indicator voor automatisch opslaan
    autoSave: {
      saving: 'Bezig met opslaan...',
      savedToServer: 'Opgeslagen op de server',
      syncFailed: 'Synchronisatie mislukt',
      saved: 'Opgeslagen'
    },
    // NIS2-plan
    nis2Plan: {
      planPhases: 'Planfasen',
      addPhase: 'Fase toevoegen',
      editPhase: 'Fase bewerken',
      deletePhase: 'Fase verwijderen',
      editAction: 'Actie bewerken',
      deleteAction: 'Actie verwijderen',
      noActionsForDomain: 'Geen acties voor dit domein.',
      noActionsMatchFilters: 'Geen enkele actie voldoet aan uw huidige filters.',
      actionsFiltered: 'acties (filter toegepast)',
      completed: 'uitgevoerd',
      inProgressTodo: 'lopend / te doen',
      avgProgress: 'Gemiddelde voortgang',
      cumulativeBudget: 'Gecumuleerd budget',
      budget: 'Budget',
      // FIX-I18N-KEYS (audit 2026-06-10)
      editDomain: 'Domein bewerken',
      editKeyStatus: 'Sleutelstatus bewerken',
      // FIX-I18N-NIS2-PLAN (audit 2026-07-10)
      colAction: 'Actie',
      colBudgetTotal: 'Totaal budget',
      colOwner: 'Verantwoordelijke',
      colPhase: 'Fase',
      colProgress: 'Voortgang',
      colStatus: 'Status',
      colActions: 'Acties',
      pillar: 'Pijler',
      domain: 'Domein',
      delivered: 'opgeleverd',
      addAction: 'Actie toevoegen'
    },
  };

  // Load translations into i18n module
  if (window.CSI_i18n) {
    window.CSI_i18n.loadTranslations('nl', translations);
  } else {
    // Store for later loading
    window._pendingTranslations = window._pendingTranslations || {};
    window._pendingTranslations.nl = translations;
  }

})();
