diff --git a/src/meshcore_hub/web/static/locales/nl.json b/src/meshcore_hub/web/static/locales/nl.json
new file mode 100644
index 0000000..fb3726b
--- /dev/null
+++ b/src/meshcore_hub/web/static/locales/nl.json
@@ -0,0 +1,216 @@
+{
+ "entities": {
+ "home": "Startpagina",
+ "dashboard": "Dashboard",
+ "nodes": "Knooppunten",
+ "node": "Knooppunt",
+ "node_detail": "Knooppuntdetails",
+ "advertisements": "Advertenties",
+ "advertisement": "Advertentie",
+ "messages": "Berichten",
+ "message": "Bericht",
+ "map": "Kaart",
+ "members": "Leden",
+ "member": "Lid",
+ "admin": "Beheer",
+ "tags": "Labels",
+ "tag": "Label"
+ },
+ "common": {
+ "filter": "Filter",
+ "clear": "Wissen",
+ "clear_filters": "Filters wissen",
+ "search": "Zoeken",
+ "cancel": "Annuleren",
+ "delete": "Verwijderen",
+ "edit": "Bewerken",
+ "move": "Verplaatsen",
+ "save": "Opslaan",
+ "save_changes": "Wijzigingen opslaan",
+ "add": "Toevoegen",
+ "add_entity": "{{entity}} toevoegen",
+ "add_new_entity": "Nieuwe {{entity}} toevoegen",
+ "edit_entity": "{{entity}} bewerken",
+ "delete_entity": "{{entity}} verwijderen",
+ "delete_all_entity": "Alle {{entity}} verwijderen",
+ "move_entity": "{{entity}} verplaatsen",
+ "move_entity_to_another_node": "{{entity}} naar ander knooppunt verplaatsen",
+ "copy_entity": "{{entity}} kopiëren",
+ "copy_all_entity_to_another_node": "Alle {{entity}} naar ander knooppunt kopiëren",
+ "view_entity": "{{entity}} bekijken",
+ "recent_entity": "Recente {{entity}}",
+ "total_entity": "Totaal {{entity}}",
+ "all_entity": "Alle {{entity}}",
+ "no_entity_found": "Geen {{entity}} gevonden",
+ "no_entity_recorded": "Geen {{entity}} geregistreerd",
+ "no_entity_defined": "Geen {{entity}} gedefinieerd",
+ "no_entity_in_database": "Geen {{entity}} in database",
+ "no_entity_configured": "Geen {{entity}} geconfigureerd",
+ "no_entity_yet": "Nog geen {{entity}}",
+ "entity_not_found_details": "{{entity}} niet gevonden: {{details}}",
+ "page_not_found": "Pagina niet gevonden",
+ "delete_entity_confirm": "Weet u zeker dat u {{entity}} {{name}} wilt verwijderen?",
+ "delete_all_entity_confirm": "Weet u zeker dat u alle {{count}} {{entity}} van {{name}} wilt verwijderen?",
+ "cannot_be_undone": "Deze actie kan niet ongedaan worden gemaakt.",
+ "entity_added_success": "{{entity}} succesvol toegevoegd",
+ "entity_updated_success": "{{entity}} succesvol bijgewerkt",
+ "entity_deleted_success": "{{entity}} succesvol verwijderd",
+ "entity_moved_success": "{{entity}} succesvol verplaatst",
+ "all_entity_deleted_success": "Alle {{entity}} succesvol verwijderd",
+ "copy_all_entity_description": "Kopieer alle {{count}} {{entity}} van {{name}} naar een ander knooppunt.",
+ "previous": "Vorige",
+ "next": "Volgende",
+ "go_home": "Naar startpagina",
+ "loading": "Laden...",
+ "error": "Fout",
+ "failed_to_load_page": "Pagina laden mislukt",
+ "total": "{{count}} totaal",
+ "shown": "{{count}} weergegeven",
+ "count_entity": "{{count}} {{entity}}",
+ "type": "Type",
+ "name": "Naam",
+ "key": "Sleutel",
+ "value": "Waarde",
+ "time": "Tijd",
+ "actions": "Acties",
+ "updated": "Bijgewerkt",
+ "sign_in": "Inloggen",
+ "sign_out": "Uitloggen",
+ "view_details": "Details bekijken",
+ "all_types": "Alle types",
+ "node_type": "Knooppunttype",
+ "show": "Toon",
+ "search_placeholder": "Zoek op naam, ID of publieke sleutel...",
+ "contact": "Contact",
+ "description": "Beschrijving",
+ "callsign": "Roepnaam",
+ "tags": "Labels",
+ "last_seen": "Laatst gezien",
+ "first_seen_label": "Eerst gezien:",
+ "last_seen_label": "Laatst gezien:",
+ "location": "Locatie",
+ "public_key": "Publieke sleutel",
+ "received": "Ontvangen",
+ "received_by": "Ontvangen door",
+ "receivers": "Ontvangers",
+ "from": "Van",
+ "close": "sluiten",
+ "unnamed": "Naamloos",
+ "unnamed_node": "Naamloos knooppunt"
+ },
+ "links": {
+ "website": "Website",
+ "github": "GitHub",
+ "discord": "Discord",
+ "youtube": "YouTube",
+ "profile": "Profiel"
+ },
+ "auto_refresh": {
+ "pause": "Pauzeer verversen",
+ "resume": "Hervat verversen"
+ },
+ "time": {
+ "days_ago": "{{count}}d geleden",
+ "hours_ago": "{{count}}u geleden",
+ "minutes_ago": "{{count}}m geleden",
+ "less_than_minute": "<1m geleden",
+ "last_7_days": "Laatste 7 dagen",
+ "per_day_last_7_days": "Per dag (laatste 7 dagen)",
+ "over_time_last_7_days": "In de tijd (laatste 7 dagen)",
+ "activity_per_day_last_7_days": "Activiteit per dag (laatste 7 dagen)"
+ },
+ "node_types": {
+ "chat": "Chat",
+ "repeater": "Repeater",
+ "room": "Ruimte",
+ "unknown": "Onbekend"
+ },
+ "home": {
+ "welcome_default": "Welkom bij het {{network_name}} mesh-netwerk dashboard. Monitor netwerkactiviteit, bekijk verbonden knooppunten en verken berichtgeschiedenis.",
+ "all_discovered_nodes": "Alle ontdekte knooppunten",
+ "network_info": "Netwerkinfo",
+ "network_activity": "Netwerkactiviteit",
+ "meshcore_attribution": "Ons lokale off-grid mesh-netwerk is mogelijk gemaakt door",
+ "frequency": "Frequentie",
+ "bandwidth": "Bandbreedte",
+ "spreading_factor": "Spreading Factor",
+ "coding_rate": "Coderingssnelheid",
+ "tx_power": "TX Vermogen"
+ },
+ "dashboard": {
+ "all_discovered_nodes": "Alle ontdekte knooppunten",
+ "recent_channel_messages": "Recente kanaalberichten",
+ "channel": "Kanaal {{number}}"
+ },
+ "nodes": {
+ "scan_to_add": "Scan om als contact toe te voegen"
+ },
+ "advertisements": {},
+ "messages": {
+ "type_direct": "Direct",
+ "type_channel": "Kanaal",
+ "type_contact": "Contact",
+ "type_public": "Publiek"
+ },
+ "map": {
+ "show_labels": "Toon labels",
+ "infrastructure_only": "Alleen infrastructuur",
+ "legend": "Legenda:",
+ "infrastructure": "Infrastructuur",
+ "public": "Publiek",
+ "nodes_on_map": "{{count}} knooppunten op kaart",
+ "nodes_none_have_coordinates": "{{count}} knooppunten (geen met coördinaten)",
+ "gps_description": "Knooppunten worden op de kaart geplaatst op basis van GPS-coördinaten uit knooppuntrapporten of handmatige labels.",
+ "owner": "Eigenaar:",
+ "role": "Rol:",
+ "select_destination_node": "-- Selecteer bestemmingsknooppunt --"
+ },
+ "members": {
+ "empty_state_description": "Om netwerkleden weer te geven, maak een members.yaml bestand aan in je seed-directory.",
+ "members_file_format": "Members bestandsformaat",
+ "members_file_description": "Maak een YAML-bestand aan op $SEED_HOME/members.yaml met de volgende structuur:",
+ "members_import_instructions": "Voer meshcore-hub collector seed uit om leden te importeren.
Om knooppunten aan leden te koppelen, voeg een member_id label toe aan knooppunten in node_tags.yaml."
+ },
+ "not_found": {
+ "description": "De pagina die u zoekt bestaat niet of is verplaatst."
+ },
+ "custom_page": {
+ "failed_to_load": "Pagina laden mislukt"
+ },
+ "admin": {
+ "access_denied": "Toegang geweigerd",
+ "admin_not_enabled": "De beheerinterface is niet ingeschakeld.",
+ "admin_enable_hint": "Stel WEB_ADMIN_ENABLED=true in om beheerfuncties in te schakelen.",
+ "auth_required": "Authenticatie vereist",
+ "auth_required_description": "U moet inloggen om toegang te krijgen tot de beheerinterface.",
+ "welcome": "Welkom bij het beheerpaneel.",
+ "members_description": "Beheer netwerkleden en operators.",
+ "tags_description": "Beheer aangepaste labels en metadata voor netwerkknooppunten."
+ },
+ "admin_members": {
+ "network_members": "Netwerkleden ({{count}})",
+ "member_id": "Lid-ID",
+ "member_id_hint": "Unieke identificatie (letters, cijfers, underscore)",
+ "empty_state_hint": "Klik op \"Lid toevoegen\" om het eerste lid aan te maken."
+ },
+ "admin_node_tags": {
+ "select_node": "Selecteer knooppunt",
+ "select_node_placeholder": "-- Selecteer een knooppunt --",
+ "load_tags": "Labels laden",
+ "move_warning": "Dit verplaatst het label van het huidige knooppunt naar het bestemmingsknooppunt.",
+ "copy_all": "Alles kopiëren",
+ "copy_all_info": "Labels die al bestaan op het bestemmingsknooppunt worden overgeslagen. Originele labels blijven op dit knooppunt.",
+ "delete_all": "Alles verwijderen",
+ "delete_all_warning": "Alle labels worden permanent verwijderd.",
+ "destination_node": "Bestemmingsknooppunt",
+ "tag_key": "Label sleutel",
+ "for_this_node": "voor dit knooppunt",
+ "empty_state_hint": "Voeg hieronder een nieuw label toe.",
+ "select_a_node": "Selecteer een knooppunt",
+ "select_a_node_description": "Kies een knooppunt uit de vervolgkeuzelijst hierboven om de labels te bekijken en beheren.",
+ "copied_entities": "{{copied}} label(s) gekopieerd, {{skipped}} overgeslagen"
+ },
+ "footer": {
+ "powered_by": "Mogelijk gemaakt door"
+ }
+}