Files
TREK/shared/src/i18n/nl/settings.ts
T
Maurice b401da2264 fix(maps): default the Leaflet basemap to OpenFreeMap
CARTO started stamping "API KEY REQUIRED" across every keyless basemap tile
on 26.08.2026. #2060 added a key field as the immediate answer, but it leaves
a self-hosted instance needing an email exchange with CARTO before its maps
look right, and every default in the client still pointed at CARTO. Default
to OpenFreeMap Positron instead: no key, no account, no request limit,
commercial use allowed, attribution required.

OpenFreeMap serves vector tiles only, so the Leaflet basemap is a MapLibre
style document rather than an XYZ template. maplibre-gl-leaflet hangs a GL
canvas into Leaflet's own tile pane, which leaves everything above it alone -
markers, GeoJSON, clusters, plugin layers, the custom panes, and the click
handling, since Leaflet's CSS already puts pointer-events:none on that layer.
maplibre-gl still arrives only through a dynamic import, so no chunk that
draws a map grows by a megabyte.

Switched: the trip planner, the MapView fallback every preview goes through,
the journey map, collections, the atlas, the shared trip page and the offline
tile prefetch. OpenFreeMap Positron and Bright join the tile presets in
settings, the admin defaults and both mobile screens.

A CARTO template that is already saved keeps working when a key backs it -
that stays a supported choice. Without a key it is not drawn at all:
resolveTileUrl falls back to the default rather than to a watermark, so an
instance that upgrades with one in its settings sees the new basemap
immediately and needs no migration. The stored value is left as it is, so the
Map settings tab still shows what was chosen and the warning underneath it
explains why - one sentence appended, in all 23 locales.

OpenFreeMap asks for a credit of its own; OpenStreetMap alone under its tiles
is wrong and a licence problem. attributionForTile() derives it from the URL
rather than from a flag at each call site, and the shared trip map, which
carried no attribution at all, now gets one.

Offline maps keep working and get cheaper. A vector style is four things
instead of one, so sync/glPrefetcher.ts walks the style document, its sprite,
the Latin glyph ranges of each font stack it uses, the TileJSON - the planet
path is versioned, so guessing it answers 200 with an empty body - and then
the .pbf tiles. Over the Berlin bounding box TREK computes, raster z10-16 is
2237 requests and 34.6 MB and gives up above z16; vector z10-14 is 177
requests and 32.1 MB and stays sharp above that, because MapLibre scales the
z14 tile rather than asking for another. The Workbox rule for
tiles.openfreemap.org moves to CacheFirst and shares the prefetcher's cache,
so browsing tops a downloaded region up instead of filling a second copy
beside it - a versioned tile path can never be stale. Clearing offline maps
clears it too.

The atlas loses its second raster layer. It existed to warm the HTTP cache of
neighbouring zoom levels, which a vector basemap does not need; a second one
would only cost a second WebGL context. OpenFreeMap has no label-free style,
so its labels are switched off on the live map instead - they are all symbol
layers, while borders and coastlines are line and fill - re-armed on
style.load so a theme switch keeps them off.

Theme changes call setStyle in place rather than rebuilding the layer: a swap
per toggle would leak a WebGL context, and browsers cap those in the low
teens.
2026-08-29 00:51:43 +02:00

563 lines
35 KiB
TypeScript

import type { TranslationStrings } from '../types';
const settings: TranslationStrings = {
'settings.title': 'Instellingen',
'settings.subtitle': 'Configureer je persoonlijke instellingen',
'settings.tabs.display': 'Weergave',
'settings.tabs.map': 'Kaart',
'settings.tabs.notifications': 'Meldingen',
'settings.tabs.integrations': 'Integraties',
'settings.plugins.oauth.connected': 'Verbonden',
'settings.plugins.oauth.notConnected': 'Niet verbonden',
'settings.plugins.oauth.connect': 'Verbinden',
'settings.plugins.oauth.disconnect': 'Verbinding verbreken',
'settings.tabs.plugins': 'Plug-ins',
'settings.plugins.title': 'Plug-in-instellingen',
'settings.plugins.subtitle':
'Je persoonlijke instellingen voor de plug-ins die je gebruikt (API-sleutels, voorkeuren).',
'settings.plugins.empty': 'Er zijn geen plug-ins actief.',
'settings.plugins.saved': 'Instellingen opgeslagen',
'settings.tabs.account': 'Account',
'settings.tabs.offline': 'Offline',
'settings.tabs.about': 'Over',
'settings.map': 'Kaart',
'settings.mapTemplate': 'Kaartsjabloon',
'settings.mapTemplatePlaceholder.select': 'Selecteer sjabloon...',
'settings.mapDefaultHint': 'Laat leeg voor OpenStreetMap (standaard)',
'settings.mapHint': 'URL-sjabloon voor kaarttegels',
'settings.mapProvider': 'Kaartprovider',
'settings.mapProviderHint': 'Geldt voor Trip Planner en Journey kaarten. Atlas gebruikt altijd Leaflet.',
'settings.mapLeafletSubtitle': 'Klassiek 2D, elke raster-tile',
'settings.mapMapboxSubtitle': 'Vector tiles, 3D-gebouwen & terrein',
'settings.mapMapLibreSubtitle': 'OpenFreeMap vector tiles, geen token',
'settings.mapExperimental': 'Experimenteel',
'settings.mapMapboxToken': 'Mapbox Access Token',
'settings.mapMapboxTokenHint': 'Openbaar token (pk.*) van',
'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens',
'settings.mapCartoKey': 'CARTO API-sleutel',
'settings.mapCartoKeyHint': 'CARTO-basiskaarten tonen zonder sleutel een watermerk. Gratis en zonder account, via',
'settings.mapCartoKeyLink': 'carto.com basemap API-sleutel',
'settings.mapCartoKeyMissing':
'Deze sjabloon is een CARTO-basiskaart. Zonder sleutel drukt CARTO "API KEY REQUIRED" op elke tegel. Zolang er geen sleutel is, toont TREK de standaardbasiskaart.',
'settings.mapStyle': 'Kaartstijl',
'settings.mapStylePlaceholder': 'Kies een Mapbox-stijl',
'settings.mapStyleHint': 'Preset of eigen mapbox://styles/USER/ID URL',
'settings.mapOpenFreeMapStylePlaceholder': 'Kies een OpenFreeMap-stijl',
'settings.mapOpenFreeMapStyleHint': 'Preset of OpenFreeMap-stijl-URL. OpenFreeMap-stijlen werken zonder token.',
'settings.map3dBuildings': '3D-gebouwen & terrein',
'settings.map3dHint': 'Kanteling + echte 3D-gebouwenextrusies — werkt op elke stijl, inclusief satelliet.',
'settings.mapHighQuality': 'Hoge kwaliteit modus',
'settings.mapHighQualityHint':
'Antialiasing + globeprojectie voor scherpere randen en een realistische wereldweergave.',
'settings.mapHighQualityWarning': 'Kan de prestaties op minder krachtige apparaten beïnvloeden.',
'settings.mapTipLabel': 'Tip:',
'settings.mapTip':
'Rechts-klik en sleep om de kaart te roteren/kantelen. Middenklik om een locatie toe te voegen (rechts-klik is voor rotatie).',
'settings.saveMap': 'Kaart opslaan',
'settings.apiKeys': 'API-sleutels',
'settings.mapsKey': 'Google Maps API-sleutel',
'settings.mapsKeyHint': 'Voor plaatsen zoeken. Vereist Places API (New). Verkrijgbaar op console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API-sleutel',
'settings.weatherKeyHint': 'Voor weergegevens. Gratis op openweathermap.org/api',
'settings.keyPlaceholder': 'Sleutel invoeren...',
'settings.configured': 'Geconfigureerd',
'settings.saveKeys': 'Sleutels opslaan',
'settings.display': 'Weergave',
'settings.colorMode': 'Kleurmodus',
'settings.light': 'Licht',
'settings.dark': 'Donker',
'settings.auto': 'Automatisch',
'settings.language': 'Taal',
'settings.temperature': 'Temperatuureenheid',
'settings.distance': 'Afstandseenheid',
'settings.timeFormat': 'Tijdnotatie',
'settings.blurBookingCodes': 'Boekingscodes vervagen',
'settings.aiAlwaysRetry': 'Always retry booking imports with AI',
'settings.aiAlwaysRetryHint': 'When a file cannot be read by the standard parser, automatically retry it with AI.',
'settings.optimizeFromAccommodation': 'Route optimaliseren vanaf accommodatie',
'settings.optimizeFromAccommodationHint':
'Begin bij het optimaliseren van een dag de route bij het hotel waar je wakker wordt en eindig bij het hotel waar je die avond incheckt.',
'settings.notifications': 'Meldingen',
'settings.notifyTripInvite': 'Reisuitnodigingen',
'settings.notifyBookingChange': 'Boekingswijzigingen',
'settings.notifyTripReminder': 'Reisherinneringen',
'settings.notifyTodoDue': 'Taak verloopt',
'settings.notifyVacayInvite': 'Vacay-fusieuitnodigingen',
'settings.notifyVacayShare': 'Gedeelde Vacay-kalenders',
'settings.notifyPhotosShared': "Gedeelde foto's (Immich)",
'settings.notifyCollabMessage': 'Chatberichten (Collab)',
'settings.notifyPackingTagged': 'Inpaklijst: toewijzingen',
'settings.notifyWebhook': 'Webhook-meldingen',
'settings.notificationsDisabled':
'Meldingen zijn niet geconfigureerd. Vraag een beheerder om e-mail- of webhookmeldingen in te schakelen.',
'settings.notificationsActive': 'Actief kanaal',
'settings.notificationsManagedByAdmin': 'Meldingsgebeurtenissen worden geconfigureerd door je beheerder.',
'settings.on': 'Aan',
'settings.off': 'Uit',
'settings.mcp.title': 'MCP-configuratie',
'settings.mcp.endpoint': 'MCP-eindpunt',
'settings.mcp.clientConfig': 'Clientconfiguratie',
'settings.mcp.clientConfigHint':
'Vervang <your_token> door een API-token uit de onderstaande lijst. Het pad naar npx moet mogelijk worden aangepast voor jouw systeem (bijv. C:\\PROGRA~1\\nodejs\\npx.cmd op Windows).',
'settings.mcp.clientConfigHintOAuth':
'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:PROGRA~1\nodejs\npx.cmd on Windows).',
'settings.mcp.copy': 'Kopiëren',
'settings.mcp.copied': 'Gekopieerd!',
'settings.mcp.apiTokens': 'API-tokens',
'settings.mcp.createToken': 'Nieuw token aanmaken',
'settings.mcp.noTokens': 'Nog geen tokens. Maak er een aan om MCP-clients te verbinden.',
'settings.mcp.tokenCreatedAt': 'Aangemaakt',
'settings.mcp.tokenUsedAt': 'Gebruikt',
'settings.mcp.deleteTokenTitle': 'Token verwijderen',
'settings.mcp.deleteTokenMessage':
'Dit token werkt onmiddellijk niet meer. Elke MCP-client die het gebruikt verliest de toegang.',
'settings.mcp.modal.createTitle': 'API-token aanmaken',
'settings.mcp.modal.tokenName': 'Tokennaam',
'settings.mcp.modal.tokenNamePlaceholder': 'bijv. Claude Desktop, Werklaptop',
'settings.mcp.modal.creating': 'Aanmaken…',
'settings.mcp.modal.create': 'Token aanmaken',
'settings.mcp.modal.createdTitle': 'Token aangemaakt',
'settings.mcp.modal.createdWarning':
'Dit token wordt slechts één keer getoond. Kopieer en bewaar het nu — het kan niet worden hersteld.',
'settings.mcp.modal.done': 'Klaar',
'settings.mcp.toast.created': 'Token aangemaakt',
'settings.mcp.toast.createError': 'Token aanmaken mislukt',
'settings.mcp.toast.deleted': 'Token verwijderd',
'settings.mcp.toast.deleteError': 'Token verwijderen mislukt',
'settings.mcp.apiTokensDeprecated':
'API-tokens zijn verouderd en worden in een toekomstige versie verwijderd. Gebruik OAuth 2.1-clients in plaats daarvan.',
'settings.oauth.clients': 'OAuth 2.1-clients',
'settings.oauth.clientsHint':
'Registreer OAuth 2.1-clients zodat externe MCP-toepassingen (Claude Web, Cursor, enz.) verbinding kunnen maken zonder statische tokens.',
'settings.oauth.createClient': 'Nieuwe client',
'settings.oauth.noClients': 'Geen OAuth-clients geregistreerd.',
'settings.oauth.clientId': 'Client-ID',
'settings.oauth.clientSecret': 'Clientgeheim',
'settings.oauth.deleteClient': 'Client verwijderen',
'settings.oauth.deleteClientMessage':
'Deze client en alle actieve sessies worden permanent verwijderd. Elke toepassing die deze client gebruikt, verliest onmiddellijk de toegang.',
'settings.oauth.rotateSecret': 'Geheim vernieuwen',
'settings.oauth.rotateSecretMessage':
'Er wordt een nieuw clientgeheim gegenereerd en alle bestaande sessies worden direct ongeldig. Werk uw toepassing bij voordat u dit venster sluit.',
'settings.oauth.rotateSecretConfirm': 'Vernieuwen',
'settings.oauth.rotateSecretConfirming': 'Vernieuwen…',
'settings.oauth.rotateSecretDoneTitle': 'Nieuw geheim gegenereerd',
'settings.oauth.rotateSecretDoneWarning':
'Dit geheim wordt slechts eenmalig getoond. Kopieer het nu en werk uw toepassing bij — alle vorige sessies zijn ongeldig gemaakt.',
'settings.oauth.activeSessions': 'Actieve OAuth-sessies',
'settings.oauth.sessionScopes': 'Rechten',
'settings.oauth.sessionExpires': 'Verloopt',
'settings.oauth.revoke': 'Intrekken',
'settings.oauth.revokeSession': 'Sessie intrekken',
'settings.oauth.revokeSessionMessage': 'Dit trekt onmiddellijk de toegang voor deze OAuth-sessie in.',
'settings.oauth.modal.createTitle': 'OAuth-client registreren',
'settings.oauth.modal.presets': 'Snelle instellingen',
'settings.oauth.modal.clientName': 'Toepassingsnaam',
'settings.oauth.modal.clientNamePlaceholder': 'bijv. Claude Web, Mijn MCP-app',
'settings.oauth.modal.redirectUris': "Redirect-URI's",
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
'settings.oauth.modal.redirectUrisHint':
'Eén URI per regel. HTTPS vereist (localhost uitgezonderd). Exacte overeenkomst vereist.',
'settings.oauth.modal.scopes': 'Toegestane rechten',
'settings.oauth.modal.scopesHint':
"list_trips en get_trip_summary zijn altijd beschikbaar — geen recht vereist. Ze helpen de AI trip-ID's te ontdekken.",
'settings.oauth.modal.selectAll': 'Alles selecteren',
'settings.oauth.modal.deselectAll': 'Alles deselecteren',
'settings.oauth.modal.creating': 'Registreren…',
'settings.oauth.modal.create': 'Client registreren',
'settings.oauth.modal.createdTitle': 'Client geregistreerd',
'settings.oauth.modal.createdWarning':
'Het clientgeheim wordt slechts eenmalig getoond. Kopieer het nu — het kan niet worden hersteld.',
'settings.oauth.toast.createError': 'OAuth-client kon niet worden geregistreerd',
'settings.oauth.toast.deleted': 'OAuth-client verwijderd',
'settings.oauth.toast.deleteError': 'OAuth-client kon niet worden verwijderd',
'settings.oauth.toast.revoked': 'Sessie ingetrokken',
'settings.oauth.toast.revokeError': 'Sessie kon niet worden ingetrokken',
'settings.oauth.toast.rotateError': 'Clientgeheim kon niet worden vernieuwd',
'settings.oauth.modal.machineClient': 'Machineclient (zonder browserinlog)',
'settings.oauth.modal.machineClientHint':
"Gebruikt de client_credentials grant — geen redirect-URI's nodig. Het token wordt direct verstrekt via client_id + client_secret en handelt namens jou binnen de geselecteerde scopes.",
'settings.oauth.modal.machineClientUsage':
'Token ophalen: POST /oauth/token met grant_type=client_credentials, client_id en client_secret. Geen browser, geen vernieuwingstoken.',
'settings.oauth.badge.machine': 'machine',
'settings.account': 'Account',
'settings.about': 'Over',
'settings.about.reportBug': 'Bug melden',
'settings.about.reportBugHint': 'Probleem gevonden? Laat het ons weten',
'settings.about.featureRequest': 'Feature aanvragen',
'settings.about.featureRequestHint': 'Stel een nieuwe functie voor',
'settings.about.wikiHint': 'Documentatie en handleidingen',
'settings.about.descriptionManaged':
'TREK helps you organize your trips from the first idea to the last memory. Day planning, budget, packing lists, photos and much more — all in one place.',
'settings.about.sourceTitle': 'Source code',
'settings.about.sourceHint': 'TREK is open source, licensed AGPL-3.0',
'settings.about.supporters.badge': 'Maandelijkse Steuners',
'settings.about.supporters.title': 'Reisgezelschap voor TREK',
'settings.about.supporters.subtitle':
'Terwijl jij je volgende route plant, plannen deze mensen mee aan de toekomst van TREK. Hun maandelijkse bijdrage gaat rechtstreeks naar ontwikkeling en echte uren — zodat TREK Open Source blijft.',
'settings.about.supporters.since': 'steuner sinds {date}',
'settings.about.supporters.tierEmpty': 'Wees de eerste',
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
'settings.about.description':
"TREK is een zelf-gehoste reisplanner die je helpt je reizen te organiseren van het eerste idee tot de laatste herinnering. Dagplanning, budget, paklijsten, foto's en nog veel meer — alles op één plek, op je eigen server.",
'settings.about.madeWith': 'Gemaakt met',
'settings.about.madeBy': 'door Maurice en een groeiende open-source community.',
'settings.username': 'Gebruikersnaam',
'settings.email': 'E-mail',
'settings.role': 'Rol',
'settings.roleAdmin': 'Beheerder',
'settings.oidcLinked': 'Gekoppeld met',
'settings.changePassword': 'Wachtwoord wijzigen',
'settings.mustChangePassword':
'U moet uw wachtwoord wijzigen voordat u kunt doorgaan. Stel hieronder een nieuw wachtwoord in.',
'settings.currentPassword': 'Huidig wachtwoord',
'settings.currentPasswordRequired': 'Huidig wachtwoord is verplicht',
'settings.newPassword': 'Nieuw wachtwoord',
'settings.confirmPassword': 'Bevestig nieuw wachtwoord',
'settings.updatePassword': 'Wachtwoord bijwerken',
'settings.passwordRequired': 'Voer het huidige en nieuwe wachtwoord in',
'settings.passwordTooShort': 'Wachtwoord moet minimaal 8 tekens bevatten',
'settings.passwordMismatch': 'Wachtwoorden komen niet overeen',
'settings.passwordWeak': 'Wachtwoord moet hoofdletters, kleine letters, een cijfer en een speciaal teken bevatten',
'settings.passwordChanged': 'Wachtwoord succesvol gewijzigd',
'settings.deleteAccount': 'Account verwijderen',
'settings.deleteAccountTitle': 'Account verwijderen?',
'settings.deleteAccountWarning':
'Je account en al je reizen, plaatsen en bestanden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.',
'settings.deleteAccountConfirm': 'Permanent verwijderen',
'settings.deleteBlockedTitle': 'Verwijderen niet mogelijk',
'settings.deleteBlockedMessage':
'Je bent de enige beheerder. Maak eerst een andere gebruiker beheerder voordat je je account verwijdert.',
'settings.roleUser': 'Gebruiker',
'settings.saveProfile': 'Profiel opslaan',
'settings.mfa.title': 'Tweefactorauthenticatie (2FA)',
'settings.mfa.description':
'Voegt een tweede stap toe bij het inloggen. Gebruik een authenticator-app (Google Authenticator, Authy, etc.).',
'settings.mfa.requiredByPolicy':
'Je beheerder vereist tweestapsverificatie. Stel hieronder een authenticator-app in voordat je verdergaat.',
'settings.mfa.backupTitle': 'Back-upcodes',
'settings.mfa.backupDescription':
'Gebruik deze eenmalige codes als je geen toegang meer hebt tot je authenticator-app.',
'settings.mfa.backupWarning': 'Sla deze codes nu op. Elke code kan maar een keer worden gebruikt.',
'settings.mfa.backupCopy': 'Codes kopiëren',
'settings.mfa.backupDownload': 'TXT downloaden',
'settings.mfa.backupPrint': 'Afdrukken / PDF',
'settings.mfa.backupCopied': 'Back-upcodes gekopieerd',
'settings.mfa.enabled': '2FA is ingeschakeld op je account.',
'settings.mfa.disabled': '2FA is niet ingeschakeld.',
'settings.mfa.setup': 'Authenticator instellen',
'settings.mfa.scanQr': 'Scan deze QR-code met je app of voer de sleutel handmatig in.',
'settings.mfa.secretLabel': 'Geheime sleutel (handmatige invoer)',
'settings.mfa.codePlaceholder': '6-cijferige code',
'settings.mfa.enable': '2FA inschakelen',
'settings.mfa.cancelSetup': 'Annuleren',
'settings.mfa.disableTitle': '2FA uitschakelen',
'settings.mfa.disableHint': 'Voer je wachtwoord en een huidige code van je authenticator in.',
'settings.mfa.disable': '2FA uitschakelen',
'settings.mfa.toastEnabled': 'Tweefactorauthenticatie ingeschakeld',
'settings.mfa.toastDisabled': 'Tweefactorauthenticatie uitgeschakeld',
'settings.mfa.demoBlocked': 'Niet beschikbaar in demomodus',
'settings.toast.mapSaved': 'Kaartinstellingen opgeslagen',
'settings.toast.keysSaved': 'API-sleutels opgeslagen',
'settings.toast.displaySaved': 'Weergave-instellingen opgeslagen',
'settings.toast.profileSaved': 'Profiel opgeslagen',
'settings.uploadAvatar': 'Profielfoto uploaden',
'settings.removeAvatar': 'Profielfoto verwijderen',
'settings.avatarUploaded': 'Profielfoto bijgewerkt',
'settings.avatarRemoved': 'Profielfoto verwijderd',
'settings.avatarError': 'Uploaden mislukt',
'settings.avatarRemoveError': 'Verwijderen mislukt',
'settings.bookingLabels': 'Routelabels voor boekingen',
'settings.bookingLabelsHint': 'Toon station- / luchthavennamen op de kaart. Indien uit, alleen het icoon.',
'settings.notifyVersionAvailable': 'Nieuwe versie beschikbaar',
'settings.notificationPreferences.noChannels':
'Er zijn geen meldingskanalen geconfigureerd. Vraag een beheerder om e-mail- of webhookmeldingen in te stellen.',
'settings.webhookUrl.label': 'Webhook-URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Voer je Discord-, Slack- of aangepaste webhook-URL in om meldingen te ontvangen.',
'settings.webhookUrl.saved': 'Webhook-URL opgeslagen',
'settings.webhookUrl.test': 'Testen',
'settings.webhookUrl.testSuccess': 'Test-webhook succesvol verzonden',
'settings.webhookUrl.testFailed': 'Test-webhook mislukt',
'settings.ntfyUrl.topicLabel': 'Ntfy-onderwerp',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'Ntfy-server-URL (optioneel)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
'Voer je Ntfy-onderwerp in om pushmeldingen te ontvangen. Laat het serverveld leeg om de standaard te gebruiken die door je beheerder is ingesteld.',
'settings.ntfyUrl.tokenLabel': 'Toegangstoken (optioneel)',
'settings.ntfyUrl.tokenHint': 'Vereist voor onderwerpen die met een wachtwoord zijn beveiligd.',
'settings.ntfyUrl.saved': 'Ntfy-instellingen opgeslagen',
'settings.ntfyUrl.test': 'Testen',
'settings.ntfyUrl.testSuccess': 'Test-Ntfy-melding succesvol verzonden',
'settings.ntfyUrl.testFailed': 'Test-Ntfy-melding mislukt',
'settings.ntfyUrl.tokenCleared': 'Toegangstoken gewist',
'settings.notificationPreferences.inapp': 'In-App',
'settings.notificationPreferences.notConfigured':
'Nog niet ingesteld — configureer het in de instellingen van de plug-in',
'settings.plugins.actions': 'Acties',
'settings.plugins.actions.confirm': 'Deze actie uitvoeren?',
'settings.notificationPreferences.sendTest': 'Test versturen',
'settings.notificationPreferences.configure': 'Instellen',
'settings.notificationPreferences.testSuccess': 'Testmelding verstuurd.',
'settings.notificationPreferences.testFailed': 'Test mislukt.',
'settings.notificationPreferences.pluginConfigured':
'Ingesteld. Beheer je gegevens op de instellingenpagina van de plug-in.',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.email': 'Email',
'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.currency': 'Weergavevaluta',
'settings.currencyHint':
'Bedragen onder Onkosten worden alleen ter weergave naar deze valuta omgerekend — de oorspronkelijke bedragen blijven ongewijzigd.',
'settings.currencyTrip': 'Valuta van de reis',
'settings.passkey.title': 'Passkeys',
'settings.passkey.description':
'Log sneller en phishingbestendig in met een passkey — je vingerafdruk, gezicht, pincode of een hardwaresleutel. Je wachtwoord blijft als back-up bestaan.',
'settings.passkey.notConfigured':
'Passkeys zijn ingeschakeld maar nog niet volledig geconfigureerd op deze server. Vraag je beheerder om het WebAuthn-domein in te stellen.',
'settings.passkey.add': 'Een passkey toevoegen',
'settings.passkey.addTitle': 'Een passkey toevoegen',
'settings.passkey.passwordPrompt': 'Bevestig je huidige wachtwoord en volg daarna de aanwijzingen van je apparaat.',
'settings.passkey.passwordRequired': 'Je huidige wachtwoord is vereist.',
'settings.passkey.namePlaceholder': 'Naam (optioneel, bijv. "iPhone")',
'settings.passkey.addedToast': 'Passkey toegevoegd',
'settings.passkey.added': 'Toegevoegd',
'settings.passkey.addError': 'Passkey kon niet worden toegevoegd',
'settings.passkey.cancelled': 'Passkey instellen geannuleerd',
'settings.passkey.deleted': 'Passkey verwijderd',
'settings.passkey.deleteConfirm': 'Deze passkey verwijderen? Bevestig met je wachtwoord.',
'settings.passkey.rename': 'Naam wijzigen',
'settings.passkey.defaultName': 'Passkey',
'settings.passkey.synced': 'Gesynchroniseerd',
'settings.passkey.deviceBound': 'Dit apparaat',
'settings.passkey.lastUsed': 'Laatst gebruikt',
'settings.passkey.neverUsed': 'Nooit gebruikt',
'settings.mapPoiPill': 'Plaatsen op de kaart ontdekken',
'settings.mapPoiPillHint':
'Toon een categorielabel op de reiskaart om restaurants, hotels en meer in de buurt te vinden via OpenStreetMap.',
'settings.airtrail.title': 'AirTrail',
'settings.airtrail.hint':
'Verbind je zelf-gehoste AirTrail om vluchten te importeren en te synchroniseren. Maak een API-sleutel aan in AirTrail onder Instellingen → Beveiliging.',
'settings.airtrail.url': 'Instantie-URL',
'settings.airtrail.apiKey': 'API-sleutel',
'settings.airtrail.apiKeyPlaceholder': 'Bearer API-sleutel',
'settings.airtrail.apiKeyHint': 'Aangemaakt in AirTrail onder Instellingen → Beveiliging. Versleuteld opgeslagen.',
'settings.airtrail.allowInsecureTls': 'Zelfondertekende certificaten toestaan',
'settings.airtrail.allowInsecureTlsHint': 'Schakel dit alleen in voor een vertrouwde instantie op je eigen netwerk.',
'settings.airtrail.writeBack': 'Wijzigingen terugschrijven naar AirTrail',
'settings.airtrail.writeBackHint':
'Standaard uit: AirTrail is de bron van waarheid en TREK leest er alleen uit. Schakel in om in TREK gemaakte wijzigingen terug te sturen naar AirTrail.',
'settings.airtrail.connected': 'Verbonden',
'settings.airtrail.notConnected': 'Niet verbonden',
'settings.airtrail.toast.saved': 'AirTrail-verbinding opgeslagen',
'settings.airtrail.toast.saveError': 'De verbinding kon niet worden opgeslagen',
'settings.airtrail.test.button': 'Verbinding testen',
'settings.airtrail.test.success': 'Verbonden — {count} vlucht(en) gevonden',
'settings.airtrail.test.failed': 'Verbinding mislukt',
'settings.aiParsing.title': 'AI-verwerking',
'settings.aiParsing.hint':
'Kies het AI-model waarmee boekingen uit geüploade bestanden worden gehaald. Dit geldt alleen als je beheerder geen model voor de hele instantie heeft ingesteld.',
'settings.aiParsing.provider': 'Provider',
'settings.aiParsing.providerLocal': 'Lokaal (Ollama)',
'settings.aiParsing.providerOpenai': 'OpenAI',
'settings.aiParsing.providerAnthropic': 'Anthropic',
'settings.aiParsing.localAdminOnly':
'Een lokaal endpoint (Ollama) wordt eenmalig voor de hele instantie ingesteld in de beheerinstellingen. Je kunt hier nog steeds je eigen OpenAI- of Anthropic-sleutel gebruiken.',
'settings.aiParsing.model': 'Model',
'settings.aiParsing.baseUrl': 'Basis-URL',
'settings.aiParsing.baseUrlHint':
'Waar het model draait — een lokale Ollama-server of een OpenAI-compatibel endpoint.',
'settings.aiParsing.apiKey': 'API-sleutel',
'settings.aiParsing.apiKeyHint': 'Versleuteld opgeslagen. Laat leeg om de huidige sleutel te behouden.',
'settings.aiParsing.multimodal': 'Documenten als afbeeldingen versturen',
'settings.aiParsing.multimodalHint':
'Voor modellen met beeldherkenning — verstuurt de originele PDF in plaats van geëxtraheerde tekst.',
'settings.aiParsing.toast.saved': 'AI-instellingen opgeslagen',
'settings.aiParsing.toast.saveError': 'AI-instellingen konden niet worden opgeslagen',
'settings.tabs.appearance': 'Appearance',
'settings.appearance.theme': 'Theme',
'settings.appearance.scheme': 'Color scheme',
'settings.appearance.scheme.default': 'Default',
'settings.appearance.scheme.highContrast': 'High contrast',
'settings.appearance.scheme.indigo': 'Indigo',
'settings.appearance.scheme.teal': 'Teal',
'settings.appearance.scheme.rose': 'Rose',
'settings.appearance.scheme.amber': 'Amber',
'settings.appearance.scheme.violet': 'Violet',
'settings.appearance.scheme.custom': 'Custom',
'settings.appearance.customAccent': 'Custom accent',
'settings.appearance.contrastOk': 'Good contrast',
'settings.appearance.contrastLow': 'Low contrast',
'settings.appearance.readability': 'Readability',
'settings.appearance.transparency': 'Transparency',
'settings.appearance.transparencyHint':
'Glassy translucent surfaces. Turn off for solid, higher-contrast backgrounds.',
'settings.appearance.reduceMotion': 'Reduce motion',
'settings.appearance.reduceMotionHint': 'Minimize animations and transitions.',
'settings.appearance.density': 'Density',
'settings.appearance.comfortable': 'Comfortable',
'settings.appearance.compact': 'Compact',
'settings.appearance.textSize': 'Text size',
'settings.appearance.advancedTextSizes': 'Advanced text sizes',
'settings.appearance.hideAdvanced': 'Hide advanced',
'settings.appearance.tier.title': 'Titles',
'settings.appearance.tier.subtitle': 'Subtitles',
'settings.appearance.tier.body': 'Body',
'settings.appearance.tier.caption': 'Captions',
'settings.appearance.dashboardWidgets': 'Dashboard widgets',
'settings.appearance.dashboardWidgetsHint': 'Show or hide dashboard widgets independently on desktop and mobile.',
'settings.appearance.desktop': 'Desktop',
'settings.appearance.mobile': 'Mobile',
'settings.appearance.widget.sidebar': 'Right sidebar',
'settings.appearance.widget.currency': 'Currency',
'settings.appearance.widget.collections': 'Collecties',
'settings.appearance.widget.timezones': 'Timezones',
'settings.appearance.widget.upcomingReservations': 'Upcoming reservations',
'settings.appearance.widget.atlas': 'Atlas / countries',
'settings.appearance.widget.tripsTotal': 'Trips total',
'settings.appearance.widget.daysTraveled': 'Days traveled',
'settings.appearance.widget.distanceFlown': 'Distance flown',
'settings.appearance.reset': 'Reset to defaults',
'settings.appearance.group.belowHero': 'Below the hero',
'settings.appearance.group.bottomOfPage': 'Bottom of page',
'settings.appearance.sidebarHint': 'The whole right column. Turn off and the dashboard centers.',
'settings.appearance.densityHint':
'Compact tightens spacing and padding for a denser layout that fits more on screen.',
'settings.appearance.textSizeAll': 'Everything',
'settings.appearance.perSize': 'Adjust each size separately',
'settings.appearance.size.large': 'Large',
'settings.appearance.size.medium': 'Medium',
'settings.appearance.size.normal': 'Normal',
'settings.appearance.size.small': 'Small',
'settings.appearance.preview.large': 'Large heading',
'settings.appearance.preview.medium': 'Medium subtitle',
'settings.appearance.preview.normal': 'Normal body text',
'settings.appearance.preview.small': 'Small caption / address',
'settings.appearance.example.large': 'Headings, big numbers',
'settings.appearance.example.medium': 'Sub-headings',
'settings.appearance.example.normal': 'Place names, descriptions',
'settings.appearance.example.small': 'Addresses, labels',
'settings.appearance.experimental': 'Experimental',
'settings.appearance.mobileNav': 'Onderste navigatiebalk',
'settings.appearance.mobileNav.hint':
'Kies welke items in de balk verschijnen en welke onder “Meer” staan. Dashboard staat altijd vooraan.',
'settings.appearance.mobileNav.inBar': 'In de balk',
'settings.appearance.mobileNav.underMore': 'Onder “Meer”',
'settings.appearance.mobileNav.moreEmpty': 'Nog niets hier — alles past in de balk.',
'settings.appearance.mobileNav.pinned': 'Vastgezet',
'settings.appearance.mobileNav.toMore': 'Naar “Meer” verplaatsen',
'settings.appearance.mobileNav.toBar': 'Naar de balk verplaatsen',
'settings.appearance.dashOrder': 'Dashboardvolgorde',
'settings.appearance.dashOrder.hint':
'Wijzig de volgorde waarin de reislijst en widgets op je mobiele dashboard worden gestapeld. De uitgelichte reis blijft altijd bovenaan.',
'settings.appearance.dashOrder.trips': 'Reizen',
'settings.appearance.dashOrder.hidden': 'Verborgen',
'settings.general.languageRegion': 'Language & region',
'settings.general.travelMap': 'Travel & map',
'settings.general.startup': 'Opstarten',
'settings.startPage': 'Startpagina',
'settings.startPageDashboard': 'Dashboard',
'settings.startPageActiveTrip': 'Actieve reis',
'settings.startPageHint':
'TREK opent direct de reis die nu loopt, of anders de eerstvolgende. Dat is dezelfde reis die het dashboard uitlicht.',
'settings.startTripTab': 'Starttabblad',
'settings.startTripTabHint':
'Het tabblad waarmee de reis opent. Hoort het bij een uitgeschakelde add-on, dan opent het plan in plaats daarvan.',
// ── Offline (#1135)
'settings.offline.cache.title': 'Offline cache',
'settings.offline.mode.title': 'Offlinemodus',
'settings.offline.mode.force': 'Offlinemodus forceren',
'settings.offline.mode.forceHint':
'Werk alleen met gecachte gegevens en zet je wijzigingen in de wachtrij. Schakel uit om opnieuw te verbinden en te synchroniseren.',
'settings.offline.mode.active':
'Offlinemodus staat aan — je wijzigingen staan in de wachtrij en worden gesynchroniseerd zodra je hem uitschakelt.',
'settings.offline.prepare.title': 'Voorbereiden op offline',
'settings.offline.prepare.hint':
'Download alles wat je nodig hebt — reisgegevens, documenten en kaarttegels — voordat je je verbinding verliest.',
'settings.offline.prepare.button': 'Downloaden voor offline gebruik',
'settings.offline.prepare.running': 'Downloaden…',
'settings.offline.prepare.done': 'Klaar voor offline gebruik',
'settings.offline.prepare.phase.trips': 'Reisgegevens',
'settings.offline.prepare.phase.files': 'Documenten',
'settings.offline.prepare.phase.tiles': 'Kaarttegels',
'settings.offline.resync': 'Nu opnieuw synchroniseren',
'settings.offline.resyncing': 'Synchroniseren…',
'settings.offline.storage.title': 'Wat offline opslaan',
'settings.offline.storage.tiles': 'Kaarttegels offline opslaan',
'settings.offline.storage.tilesHint':
'Kaarttegels gebruiken de meeste opslag. Schakel dit uit om alleen reisgegevens en documenten offline te bewaren.',
'settings.offline.storage.tripsTitle': 'Reizen',
'settings.offline.storage.tripOn': 'Offline opgeslagen',
'settings.offline.storage.tripOff': 'Niet opgeslagen',
'settings.offline.clear': 'Cache wissen',
'settings.offline.clearConfirm':
'Alle offline reisgegevens wissen? Je kunt altijd opnieuw synchroniseren wanneer je online bent.',
'settings.offline.stats.trips': 'Gecachte reizen',
'settings.offline.stats.pending': 'Wijzigingen in afwachting',
'settings.offline.stats.failed': 'Mislukte wijzigingen',
'settings.offline.stats.conflicts': 'Conflicten',
'settings.offline.empty': 'Nog geen reizen gecacht. Maak verbinding met internet om te synchroniseren.',
'settings.offline.loading': 'Laden…',
'settings.offline.conflicts.title': 'Synchronisatieconflicten',
'settings.offline.conflicts.hint':
'Wijzigingen die je offline hebt gemaakt botsen met nieuwere wijzigingen op de server. Kies welke versie je wilt behouden.',
'settings.offline.conflicts.keepMine': 'Die van mij behouden',
'settings.offline.conflicts.keepServer': 'Die van de server behouden',
'settings.offline.conflicts.mine': 'Jouw versie',
'settings.offline.conflicts.server': 'Serverversie',
'settings.offline.conflicts.item': 'Wijziging in “{name}”',
'settings.offline.conflicts.strategyTitle': 'Wanneer er een conflict optreedt',
'settings.offline.conflicts.strategy.ask': 'Vraag het me elke keer',
'settings.offline.conflicts.strategy.mine': 'Altijd mijn versie behouden',
'settings.offline.conflicts.strategy.server': 'Altijd de serverversie behouden',
'settings.offline.banner.offline': 'Offline',
'settings.offline.banner.forced': 'Offlinemodus',
'settings.offline.banner.queued': 'Offline · {count} in wachtrij',
'settings.offline.banner.syncing': 'Synchroniseren {count}…',
'settings.offline.banner.failed': 'Synchroniseren mislukt: {count}',
'settings.offline.banner.conflicts': 'Conflicten: {count}',
'settings.pluginActivity.title': 'Plugin-activiteit',
'settings.pluginActivity.description': 'Elke actie die een plugin namens jou heeft uitgevoerd, nieuwste eerst.',
'settings.pluginActivity.empty': 'Nog geen plugin-activiteit.',
'settings.pluginActivity.refresh': 'Vernieuwen',
'settings.pluginActivity.columns.plugin': 'Plugin',
'settings.pluginActivity.columns.action': 'Actie',
'settings.pluginActivity.columns.resource': 'Bron',
'settings.pluginActivity.columns.when': 'Wanneer',
'settings.pluginActivity.columns.status': 'Resultaat',
'settings.alwaysShowRoutes': 'Boekingsroutes altijd tonen',
'settings.alwaysShowRoutesHint':
'Toont automatisch de route van elke vlucht, trein en andere boeking op de kaart, zonder dat u dit per boeking hoeft in te schakelen.',
// Public API keys (Settings -> Integrations)
'settings.apiKeys.title': 'API-sleutels',
'settings.apiKeys.description': 'Sleutels voor de publieke API, zodat andere software je reizen kan lezen. Alleen-lezen: een sleutel kan niets wijzigen of verwijderen.',
'settings.apiKeys.create': 'Sleutel aanmaken',
'settings.apiKeys.empty': 'Nog geen sleutels. Maak er een om andere software te koppelen.',
'settings.apiKeys.createdAt': 'aangemaakt',
'settings.apiKeys.usedAt': 'laatst gebruikt',
'settings.apiKeys.deleteTitle': 'Sleutel verwijderen',
'settings.apiKeys.deleteMessage': 'Alles wat deze sleutel gebruikt, stopt direct met werken. Dit kan niet ongedaan worden gemaakt.',
'settings.apiKeys.deleted': 'Sleutel verwijderd',
'settings.apiKeys.deleteFailed': 'Sleutel kon niet worden verwijderd',
'settings.apiKeys.createFailed': 'Sleutel kon niet worden aangemaakt',
'settings.apiKeys.copy': 'Kopiëren',
'settings.apiKeys.docsHint': 'Stuur de sleutel als "Authorization: Bearer ..." of "X-API-Key: ..." naar /api/v1.',
'settings.apiKeys.modal.createTitle': 'API-sleutel aanmaken',
'settings.apiKeys.modal.name': 'Naam',
'settings.apiKeys.modal.namePlaceholder': 'bijv. Dawarich',
'settings.apiKeys.modal.nameHint': 'Alleen voor jou, zodat je de sleutel later herkent.',
'settings.apiKeys.modal.creating': 'Aanmaken...',
'settings.apiKeys.modal.create': 'Aanmaken',
'settings.apiKeys.modal.createdTitle': 'API-sleutel aangemaakt',
'settings.apiKeys.modal.createdWarning': 'Kopieer de sleutel nu. Hij wordt één keer getoond en kan later niet worden opgehaald.',
'settings.apiKeys.modal.done': 'Klaar',
};
export default settings;