Files
MobilityOps/frontend/src/i18n/locales/nl-BE/dashboard.json
T
NuklearRabbit e427313bce feat: add time-dependent Europe/Brussels dashboard greeting
The dashboard greeting was a fully static "Goedemorgen..." regardless of
actual time of day. New frontend/src/i18n/greeting.ts::getGreetingPeriod
is a pure, clock-injectable function resolving one of 4 periods (05:00-
11:59 morning, 12:00-17:59 afternoon, 18:00-22:59 evening, 23:00-04:59
night) against Europe/Brussels wall-clock time via
Intl.DateTimeFormat({ timeZone, hourCycle: "h23" }), which is DST-safe
by construction.

useGreetingPeriod.ts wires this into React with a 30s poll so the
greeting rolls over live while the app stays open, no reload required.
Each period now has its own greeting word and accompanying sentence in
all 3 languages (dashboard.json), replacing both the fixed "Goedemorgen"
and the fixed "Here's the fleet" follow-up sentence. Night never says
"Goedenacht" (used as a farewell, not a welcome, in Dutch).
2026-08-04 03:08:45 +02:00

79 lines
2.9 KiB
JSON

{
"eyebrow": "Uitvoeren / Live overzicht",
"greeting": {
"morning": "Goedemorgen",
"afternoon": "Goedemiddag",
"evening": "Goedenavond",
"night": "Welkom terug"
},
"greetingBody": {
"morning": "Hier is de status van je wagenpark voor vandaag.",
"afternoon": "Hier is het actuele overzicht van je wagenpark.",
"evening": "Hier is het overzicht van je wagenpark voor vanavond.",
"night": "Hier is het laatste overzicht van je wagenpark."
},
"description": "Beschikbaarheid, uitzonderingen en overdrachten doorheen de huidige werking.",
"viewFleet": "Wagenpark bekijken",
"demoStart": {
"title": "Probeer een demonstratiescenario",
"readyCount": "{{ready}} van {{total}} scenario's klaar voor demo.",
"readyCountFallback": "Vijf afgebakende scenario's.",
"startGuide": "Start demo-gids",
"resumeGuide": "Verder met demo-gids ({{current}}/{{total}})",
"viewScenarios": "Bekijk scenario's"
},
"readiness": {
"title": "Wagenparkstatus",
"description": "Live vanuit persistente voertuigstatus",
"openFleet": "Wagenpark openen",
"available": "Beschikbaar",
"rented": "Verhuurd",
"cleaning": "Reiniging",
"maintenance": "Onderhoud",
"blocked": "Geblokkeerd"
},
"attention": {
"title": "Aandachtspunten",
"description": "{{openIssues}} open datakwaliteitsproblemen · {{workflowExceptions}} automatiseringsuitzonderingen",
"reviewQueue": "Wachtrij bekijken",
"filterPlaceholder": "Filter aandachtspunten…",
"filterAriaLabel": "Zoek in aandachtspunten",
"severityAll": "Alle ernst",
"severityHigh": "Kritiek",
"severityMedium": "Waarschuwing",
"severityLow": "Info",
"severityAriaLabel": "Ernst",
"empty": "Geen aandachtspunten voor dit filter.",
"openRecord": "Open {{title}}"
},
"movements": {
"title": "Bewegingen vandaag",
"description": "Vertrekken en retours in Europa/Brussel",
"allBookings": "Alle boekingen",
"empty": "Geen bewegingen gepland vandaag.",
"departure": "vertrek",
"return": "retour",
"openBooking": "Open boeking {{ref}}"
},
"integrationPulse": {
"title": "Integratiestatus",
"description": "Actuele evidentie van gekoppelde diensten",
"systemDetail": "Systeemdetail",
"n8nTitle": "n8n-aflevering",
"n8nSummary": "{{succeeded}} geslaagd · {{failed}} mislukt",
"n8nLatest": "Meest recente gebeurtenis {{ref}}",
"n8nNoEvidence": "Geen automatiseringsevidentie geregistreerd",
"knowledgeTitle": "Kennisassistent",
"knowledgeSummary": "{{count}} procedures geïndexeerd",
"knowledgeUnavailable": "Statuscontrole niet beschikbaar",
"mcpTitle": "MCP Hub",
"mcpEnabled": "Registratie ingeschakeld",
"mcpNotConnected": "Nog niet gekoppeld"
},
"recent": {
"title": "Recente activiteit",
"description": "Laatst geauditeerde workflowwijzigingen",
"empty": "Geen automatiseringsactiviteit geregistreerd."
}
}