Files
deflock-app/lib/localizations/nl.json
Doug Borg 2d92214bed Add offline-first tile system with per-provider caching and error retry
- Add ServicePolicy framework with OSM-specific rate limiting and TTL
- Add per-provider disk tile cache (ProviderTileCacheStore) with O(1)
  lookup, oldest-modified eviction, and ETag/304 revalidation
- Rewrite DeflockTileProvider with two paths: common (NetworkTileProvider)
  and offline-first (disk cache -> local tiles -> network with caching)
- Add zoom-aware offline routing so tiles outside offline area zoom ranges
  use the efficient common path instead of the overhead-heavy offline path
- Fix HTTP client lifecycle: dispose() is now a no-op for flutter_map
  widget recycling; shutdown() handles permanent teardown
- Add TileLayerManager with exponential backoff retry (2s->60s cap),
  provider switch detection, and backoff reset
- Guard null provider/tileType in download dialog with localized error
- Fix Nominatim cache key to use normalized viewbox values
- Comprehensive test coverage (1800+ lines across 6 test files)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:34:01 -07:00

562 lines
29 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"language": {
"name": "Nederlands"
},
"app": {
"title": "DeFlock"
},
"about": {
"title": "DeFlock - Surveillance Transparantie",
"description": "DeFlock is een privacy-gerichte mobiele app voor het in kaart brengen van openbare surveillance infrastructuur met behulp van OpenStreetMap. Documenteer camera's, ALPR's, schot detectoren en andere surveillance apparaten in uw gemeenschap om deze infrastructuur zichtbaar en doorzoekbaar te maken.",
"features": "• Offline-capabel karteren met downloadbare gebieden\n• Direct uploaden naar OpenStreetMap met OAuth2\n• Ingebouwde profielen voor grote fabrikanten\n• Privacy-respecterend - geen gebruikersgegevens verzameld\n• Meerdere kaart tile providers (OSM, satellietbeelden)",
"initiative": "Onderdeel van het bredere DeFlock initiatief om surveillance transparantie te bevorderen.",
"footer": "Bezoek: deflock.me\nGebouwd met Flutter • Open Source",
"showWelcome": "Toon Welkomstbericht",
"showSubmissionGuide": "Toon Inzendingsgids",
"viewReleaseNotes": "Bekijk Release Notes"
},
"welcome": {
"title": "Welkom bij DeFlock",
"description": "DeFlock werd opgericht op het idee dat openbare surveillance tools transparant zouden moeten zijn. Binnen deze mobiele app, net zoals op de website, zult u de locatie van ALPR's en andere surveillance infrastructuur in uw lokale gebied en in het buitenland kunnen bekijken.",
"mission": "Echter, dit project is niet geautomatiseerd; het vraagt ons allemaal om dit project beter te maken. Bij het bekijken van de kaart kunt u op \"Nieuwe Node\" tikken om een voorheen onbekende installatie toe te voegen. Met uw hulp kunnen we ons doel van verhoogde transparantie en publiek bewustzijn van surveillance infrastructuur bereiken.",
"firsthandKnowledge": "BELANGRIJK: Draag alleen surveillance apparaten bij die u persoonlijk uit de eerste hand heeft waargenomen. OpenStreetMap en Google beleid verbiedt het gebruik van bronnen zoals Street View beelden voor inzendingen. Uw bijdragen moeten gebaseerd zijn op uw eigen directe waarnemingen.",
"privacy": "Privacy Opmerking: Deze app draait volledig lokaal op uw apparaat en gebruikt de derde partij OpenStreetMap API voor gegevensopslag en inzendingen. DeFlock verzamelt of slaat geen gebruikersgegevens op van welke aard dan ook, en is niet verantwoordelijk voor accountbeheer.",
"tileNote": "OPMERKING: De gratis kaart tiles van OpenStreetMap kunnen erg traag laden. Alternatieve tile providers kunnen geconfigureerd worden in Instellingen > Geavanceerd.",
"moreInfo": "U kunt meer links vinden onder Instellingen > Over.",
"dontShowAgain": "Toon dit welkomstbericht niet opnieuw",
"getStarted": "Laten we beginnen met DeFlocking!"
},
"submissionGuide": {
"title": "Inzending Beste Praktijken",
"description": "Voordat u uw eerste surveillance apparaat inzendt, neem even de tijd om deze belangrijke richtlijnen door te nemen om hoogwaardige bijdragen aan OpenStreetMap te garanderen.",
"bestPractices": "• Breng alleen apparaten in kaart die u persoonlijk uit de eerste hand heeft waargenomen\n• Neem de tijd om het apparaattype en fabrikant nauwkeurig te identificeren\n• Gebruik precieze positionering - zoom dichtbij voordat u de marker plaatst\n• Neem richtingsinformatie mee wanneer van toepassing\n• Controleer uw tag selecties dubbel voordat u inzendt",
"placementNote": "Onthoud: Nauwkeurige, eerste hands gegevens zijn essentieel voor de DeFlock gemeenschap en OpenStreetMap project.",
"moreInfo": "Voor gedetailleerde begeleiding bij apparaat identificatie en kartering beste praktijken:",
"identificationGuide": "Identificatie Gids",
"osmWiki": "OpenStreetMap Wiki",
"dontShowAgain": "Toon deze gids niet opnieuw",
"gotIt": "Begrepen!"
},
"positioningTutorial": {
"title": "Verfijn Uw Locatie",
"instructions": "Sleep de kaart om de apparaat marker precies over de locatie van het surveillance apparaat te positioneren.",
"hint": "U kunt inzoomen voor betere nauwkeurigheid voordat u positioneert."
},
"actions": {
"tagNode": "Nieuwe Node",
"download": "Download",
"settings": "Instellingen",
"edit": "Bewerken",
"delete": "Verwijderen",
"cancel": "Annuleren",
"ok": "OK",
"close": "Sluiten",
"submit": "Indienen",
"logIn": "Inloggen",
"saveEdit": "Bewerking Opslaan",
"clear": "Wissen",
"viewOnOSM": "Bekijk op OSM",
"advanced": "Geavanceerd",
"useAdvancedEditor": "Gebruik Geavanceerde Editor"
},
"proximityWarning": {
"title": "Node Zeer Dichtbij Bestaand Apparaat",
"message": "Deze node is slechts {} meter van een bestaand surveillance apparaat.",
"suggestion": "Als meerdere apparaten op dezelfde paal staan, gebruik dan meerdere richtingen op een enkele node in plaats van aparte nodes te creëren.",
"nearbyNodes": "Nabijgelegen apparaat/apparaten gevonden ({}):",
"nodeInfo": "Node #{} - {}",
"andMore": "...en {} meer",
"goBack": "Ga Terug",
"submitAnyway": "Toch Indienen",
"nodeType": {
"alpr": "ALPR/ANPR Camera",
"publicCamera": "Openbare Surveillance Camera",
"camera": "Surveillance Camera",
"amenity": "{}",
"device": "{} Apparaat",
"unknown": "Onbekend Apparaat"
}
},
"followMe": {
"off": "Schakel volg-me in",
"follow": "Schakel volg-me in (roterend)",
"rotating": "Schakel volg-me uit"
},
"settings": {
"title": "Instellingen",
"language": "Taal & Regio",
"systemDefault": "Systeem Standaard",
"aboutInfo": "Over / Info",
"aboutThisApp": "Over Deze App",
"aboutSubtitle": "App informatie en credits",
"languageSubtitle": "Kies uw voorkeurtaal en eenheden",
"distanceUnit": "Afstand Eenheden",
"distanceUnitSubtitle": "Kies tussen metrische (km/m) of imperiale (mijl/voet) eenheden",
"metricUnits": "Metrisch (km, m)",
"imperialUnits": "Imperiaal (mijl, voet)",
"maxNodes": "Max getekende nodes",
"maxNodesSubtitle": "Stel een bovengrens in voor het aantal nodes op de kaart.",
"maxNodesWarning": "U wilt dit waarschijnlijk niet doen tenzij u absoluut zeker weet dat u daar een goede reden voor heeft.",
"offlineMode": "Offline Modus",
"offlineModeSubtitle": "Schakel alle netwerk verzoeken uit behalve voor lokale/offline gebieden.",
"pauseQueueProcessing": "Pauzeer Upload Wachtrij",
"pauseQueueProcessingSubtitle": "Stop het uploaden van wachtrij veranderingen terwijl live data toegang behouden blijft.",
"offlineModeWarningTitle": "Actieve Downloads",
"offlineModeWarningMessage": "Het inschakelen van offline modus zal alle actieve gebied downloads annuleren. Wilt u doorgaan?",
"enableOfflineMode": "Schakel Offline Modus In",
"profiles": "Profielen",
"profilesSubtitle": "Beheer node en operator profielen",
"offlineSettings": "Offline Instellingen",
"offlineSettingsSubtitle": "Beheer offline modus en gedownloade gebieden",
"advancedSettings": "Geavanceerde Instellingen",
"advancedSettingsSubtitle": "Prestaties, waarschuwingen en tile provider instellingen",
"proximityAlerts": "Nabijheids Waarschuwingen",
"networkStatusIndicator": "Netwerk Status Indicator"
},
"proximityAlerts": {
"getNotified": "Krijg meldingen wanneer u surveillance apparaten nadert",
"batteryUsage": "Gebruikt extra batterij voor continue locatie monitoring",
"notificationsEnabled": "✓ Meldingen ingeschakeld",
"notificationsDisabled": "⚠ Meldingen uitgeschakeld",
"permissionRequired": "Melding toestemming vereist",
"permissionExplanation": "Push meldingen zijn uitgeschakeld. U ziet alleen in-app waarschuwingen en wordt niet gewaarschuwd wanneer de app op de achtergrond draait.",
"enableNotifications": "Schakel Meldingen In",
"checkingPermissions": "Toestemmingen controleren...",
"alertDistance": "Waarschuwingsafstand: ",
"rangeInfo": "Bereik: {}-{} {} (standaard: {})"
},
"node": {
"title": "Node #{}",
"tagSheetTitle": "Surveillance Apparaat Tags",
"queuedForUpload": "Node in wachtrij geplaatst voor upload",
"editQueuedForUpload": "Node bewerking in wachtrij geplaatst voor upload",
"deleteQueuedForUpload": "Node verwijdering in wachtrij geplaatst voor upload",
"confirmDeleteTitle": "Verwijder Node",
"confirmDeleteMessage": "Weet u zeker dat u node #{} wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt."
},
"addNode": {
"profile": "Profiel",
"selectProfile": "Selecteer een profiel...",
"profileRequired": "Selecteer een profiel om door te gaan.",
"direction": "Richting {}°",
"profileNoDirectionInfo": "Dit profiel vereist geen richting.",
"mustBeLoggedIn": "U moet ingelogd zijn om nieuwe nodes in te dienen. Log in via Instellingen.",
"enableSubmittableProfile": "Schakel een indienbaar profiel in via Instellingen om nieuwe nodes in te dienen.",
"profileViewOnlyWarning": "Dit profiel is alleen voor kaart weergave. Selecteer een indienbaar profiel om nieuwe nodes in te dienen.",
"loadingAreaData": "Gebied gegevens laden... Wacht even voordat u indient.",
"refineTags": "Tags Verfijnen"
},
"editNode": {
"title": "Bewerk Node #{}",
"profile": "Profiel",
"selectProfile": "Selecteer een profiel...",
"profileRequired": "Selecteer een profiel om door te gaan.",
"direction": "Richting {}°",
"profileNoDirectionInfo": "Dit profiel vereist geen richting.",
"temporarilyDisabled": "Bewerkingen zijn tijdelijk uitgeschakeld terwijl we een bug oplossen - excuses - controleer binnenkort opnieuw.",
"mustBeLoggedIn": "U moet ingelogd zijn om nodes te bewerken. Log in via Instellingen.",
"sandboxModeWarning": "Kan geen bewerkingen op productie nodes naar sandbox versturen. Schakel naar Productie modus in Instellingen om nodes te bewerken.",
"enableSubmittableProfile": "Schakel een indienbaar profiel in via Instellingen om nodes te bewerken.",
"profileViewOnlyWarning": "Dit profiel is alleen voor kaart weergave. Selecteer een indienbaar profiel om nodes te bewerken.",
"loadingAreaData": "Gebied gegevens laden... Wacht even voordat u indient.",
"cannotMoveConstrainedNode": "Kan deze camera niet verplaatsen - het is verbonden met een ander kaart element (OSM weg/relatie). U kunt nog steeds de tags en richting bewerken.",
"zoomInRequiredMessage": "Zoom in tot ten minste niveau {} om surveillance nodes toe te voegen of te bewerken. Dit zorgt voor precieze positionering voor nauwkeurige kartering.",
"extractFromWay": "Haal node uit weg/relatie",
"extractFromWaySubtitle": "Maak nieuwe node met dezelfde tags, sta verplaatsing naar nieuwe locatie toe",
"refineTags": "Tags Verfijnen",
"existingTags": "<Bestaande tags>",
"noChangesDetected": "Geen wijzigingen gedetecteerd - niets om in te dienen",
"noChangesTitle": "Geen Wijzigingen om In Te Dienen",
"noChangesMessage": "U heeft geen wijzigingen gemaakt aan deze node. Om een bewerking in te dienen, moet u de locatie, profiel, richtingen of tags wijzigen."
},
"download": {
"title": "Download Kaart Gebied",
"maxZoomLevel": "Max zoom niveau",
"storageEstimate": "Opslag schatting:",
"tilesAndSize": "{} tiles, {} MB",
"minZoom": "Min zoom:",
"maxRecommendedZoom": "Max aanbevolen zoom: Z{}",
"withinTileLimit": "Binnen {} tile limiet",
"exceedsTileLimit": "Huidige selectie overschrijdt {} tile limiet",
"offlineModeWarning": "Downloads uitgeschakeld in offline modus. Schakel offline modus uit om nieuwe gebieden te downloaden.",
"areaTooBigMessage": "Zoom in tot ten minste niveau {} om offline gebieden te downloaden. Grote gebied downloads kunnen ervoor zorgen dat de app niet meer reageert.",
"downloadStarted": "Download gestart! Tiles en nodes ophalen...",
"downloadFailed": "Download starten mislukt: {}",
"offlineNotPermitted": "De {}-server staat geen offline downloads toe. Schakel over naar een tegelserver die offline gebruik toestaat (bijv. Bing Maps, Mapbox of een zelf gehoste tegelserver).",
"currentTileProvider": "huidige tegel",
"noTileProviderSelected": "Geen tegelprovider geselecteerd. Selecteer een kaartstijl voordat u een offlinegebied downloadt."
},
"downloadStarted": {
"title": "Download Gestart",
"message": "Download gestart! Tiles en nodes ophalen...",
"ok": "OK",
"viewProgress": "Bekijk Voortgang in Instellingen"
},
"uploadMode": {
"title": "Upload Bestemming",
"subtitle": "Kies waar camera's geüpload worden",
"production": "Productie",
"sandbox": "Sandbox",
"simulate": "Simuleren",
"productionDescription": "Upload naar de live OSM database (zichtbaar voor alle gebruikers)",
"sandboxDescription": "Uploads gaan naar de OSM Sandbox (veilig voor testen, wordt regelmatig gereset).",
"simulateDescription": "Simuleer uploads (neemt geen contact op met OSM servers)",
"cannotChangeWithQueue": "Kan upload bestemming niet wijzigen terwijl {} items in wachtrij staan. Wis eerst de wachtrij."
},
"auth": {
"osmAccountTitle": "OpenStreetMap Account",
"osmAccountSubtitle": "Beheer uw OSM login en bekijk uw bijdragen",
"loggedInAs": "Ingelogd als {}",
"loginToOSM": "Inloggen bij OpenStreetMap",
"tapToLogout": "Tik om uit te loggen",
"requiredToSubmit": "Vereist om camera gegevens in te dienen",
"loggedOut": "Uitgelogd",
"testConnection": "Test Verbinding",
"testConnectionSubtitle": "Verifieer dat OSM credentials werken",
"connectionOK": "Verbinding OK - credentials zijn geldig",
"connectionFailed": "Verbinding mislukt - log alstublieft opnieuw in",
"viewMyEdits": "Bekijk Mijn Bewerkingen op OSM",
"viewMyEditsSubtitle": "Zie uw bewerkingsgeschiedenis op OpenStreetMap",
"aboutOSM": "Over OpenStreetMap",
"aboutOSMDescription": "OpenStreetMap is een collaboratief, open-source kaartproject waar bijdragers een gratis, bewerkbare kaart van de wereld maken en onderhouden. Uw surveillance apparaat bijdragen helpen deze infrastructuur zichtbaar en doorzoekbaar te maken.",
"visitOSM": "Bezoek OpenStreetMap",
"deleteAccount": "Verwijder OSM Account",
"deleteAccountSubtitle": "Beheer uw OpenStreetMap account",
"deleteAccountExplanation": "Om uw OpenStreetMap account te verwijderen, moet u de OpenStreetMap website bezoeken. Dit zal permanent uw OSM account en alle bijbehorende gegevens verwijderen.",
"deleteAccountWarning": "Waarschuwing: Deze actie kan niet ongedaan worden gemaakt en zal permanent uw OSM account verwijderen.",
"goToOSM": "Ga naar OpenStreetMap",
"accountManagement": "Account Beheer",
"accountManagementDescription": "Om uw OpenStreetMap account te verwijderen, moet u de juiste OpenStreetMap website bezoeken. Dit zal permanent uw account en alle bijbehorende gegevens verwijderen.",
"currentDestinationProduction": "Momenteel verbonden met: Productie OpenStreetMap",
"currentDestinationSandbox": "Momenteel verbonden met: Sandbox OpenStreetMap",
"currentDestinationSimulate": "Momenteel in: Simuleer modus (geen echt account)",
"viewMessages": "Bekijk Berichten op OSM",
"unreadMessagesCount": "U heeft {} ongelezen berichten",
"noUnreadMessages": "Geen ongelezen berichten",
"reauthRequired": "Ververs Authenticatie",
"reauthExplanation": "U moet uw authenticatie verversen om OSM bericht meldingen te ontvangen via de app.",
"reauthBenefit": "Dit zal melding stippen inschakelen wanneer u ongelezen berichten heeft op OpenStreetMap.",
"reauthNow": "Doe Dat Nu",
"reauthLater": "Later"
},
"queue": {
"title": "Upload Wachtrij",
"subtitle": "Beheer wachtende surveillance apparaat uploads",
"pendingUploads": "Wachtende uploads: {}",
"pendingItemsCount": "Wachtende Items: {}",
"nothingInQueue": "Niets in wachtrij",
"simulateModeEnabled": "Simuleer modus ingeschakeld uploads gesimuleerd",
"sandboxMode": "Sandbox modus uploads gaan naar OSM Sandbox",
"tapToViewQueue": "Tik om wachtrij te bekijken",
"clearUploadQueue": "Wis Upload Wachtrij",
"removeAllPending": "Verwijder alle {} wachtende uploads",
"clearQueueTitle": "Wis Wachtrij",
"clearQueueConfirm": "Alle {} wachtende uploads verwijderen?",
"queueCleared": "Wachtrij gewist",
"uploadQueueTitle": "Upload Wachtrij ({} items)",
"queueIsEmpty": "Wachtrij is leeg",
"itemWithIndex": "Item {}",
"error": " (Fout)",
"completing": " (Voltooien...)",
"destination": "Bestemming: {}",
"latitude": "Breedtegraad: {}",
"longitude": "Lengtegraad: {}",
"direction": "Richting: {}°",
"attempts": "Pogingen: {}",
"uploadFailedRetry": "Upload mislukt. Tik opnieuw proberen om nog eens te proberen.",
"retryUpload": "Probeer upload opnieuw",
"clearAll": "Wis Alles",
"errorDetails": "Fout Details",
"creatingChangeset": " (Changeset maken...)",
"uploading": " (Uploaden...)",
"closingChangeset": " (Changeset sluiten...)",
"processingPaused": "Wachtrij Verwerking Gepauzeerd",
"pausedDueToOffline": "Upload verwerking is gepauzeerd omdat offline modus is ingeschakeld.",
"pausedByUser": "Upload verwerking is handmatig gepauzeerd."
},
"tileProviders": {
"title": "Tile Providers",
"noProvidersConfigured": "Geen tile providers geconfigureerd",
"tileTypesCount": "{} tile types",
"apiKeyConfigured": "API Key geconfigureerd",
"needsApiKey": "Heeft API key nodig",
"editProvider": "Bewerk Provider",
"addProvider": "Voeg Provider Toe",
"deleteProvider": "Verwijder Provider",
"deleteProviderConfirm": "Weet u zeker dat u \"{}\" wilt verwijderen?",
"providerName": "Provider Naam",
"providerNameHint": "bijv., Aangepaste Kaarten B.V.",
"providerNameRequired": "Provider naam is vereist",
"apiKey": "API Key (Optioneel)",
"apiKeyHint": "Voer API key in indien vereist door tile types",
"tileTypes": "Tile Types",
"addType": "Voeg Type Toe",
"noTileTypesConfigured": "Geen tile types geconfigureerd",
"atLeastOneTileTypeRequired": "Minstens één tile type is vereist",
"manageTileProviders": "Beheer Providers"
},
"tileTypeEditor": {
"editTileType": "Bewerk Tile Type",
"addTileType": "Voeg Tile Type Toe",
"name": "Naam",
"nameHint": "bijv., Satelliet",
"nameRequired": "Naam is vereist",
"urlTemplate": "URL Template",
"urlTemplateHint": "https://example.com/{z}/{x}/{y}.png",
"urlTemplateRequired": "URL template is vereist",
"urlTemplatePlaceholders": "URL moet ofwel {quadkey} of {z}, {x}, en {y} placeholders bevatten",
"attribution": "Attributie",
"attributionHint": "© Kaart Provider",
"attributionRequired": "Attributie is vereist",
"maxZoom": "Max Zoom Niveau",
"maxZoomHint": "Maximum zoom niveau (1-23)",
"maxZoomRequired": "Max zoom is vereist",
"maxZoomInvalid": "Max zoom moet een nummer zijn",
"maxZoomRange": "Max zoom moet tussen {} en {} zijn",
"fetchPreview": "Haal Voorbeeld Op",
"previewTileLoaded": "Voorbeeld tile succesvol geladen",
"previewTileFailed": "Kon voorbeeld niet ophalen: {}",
"save": "Opslaan"
},
"profiles": {
"nodeProfiles": "Node Profielen",
"newProfile": "Nieuw Profiel",
"builtIn": "Ingebouwd",
"custom": "Aangepast",
"view": "Bekijk",
"deleteProfile": "Verwijder Profiel",
"deleteProfileConfirm": "Weet u zeker dat u \"{}\" wilt verwijderen?",
"profileDeleted": "Profiel verwijderd",
"getMore": "Krijg meer...",
"addProfileChoice": "Voeg Profiel Toe",
"addProfileChoiceMessage": "Hoe wilt u een profiel toevoegen?",
"createCustomProfile": "Maak Aangepast Profiel",
"createCustomProfileDescription": "Bouw een profiel vanaf nul met uw eigen tags",
"importFromWebsite": "Importeer van Website",
"importFromWebsiteDescription": "Blader en importeer profielen van deflock.me/identify"
},
"mapTiles": {
"title": "Kaart Tiles",
"manageProviders": "Beheer Providers",
"attribution": "Kaart Attributie",
"mapAttribution": "Kaartbron: {}",
"couldNotOpenLink": "Kon link niet openen",
"openLicense": "Open licentie: {}"
},
"profileEditor": {
"viewProfile": "Bekijk Profiel",
"newProfile": "Nieuw Profiel",
"editProfile": "Bewerk Profiel",
"profileName": "Profiel naam",
"profileNameHint": "bijv., Aangepaste ALPR Camera",
"profileNameRequired": "Profiel naam is vereist",
"requiresDirection": "Vereist Richting",
"requiresDirectionSubtitle": "Of camera's van dit type een richting tag nodig hebben",
"fov": "Gezichtsveld",
"fovHint": "FOV in graden (laat leeg voor standaard)",
"fovSubtitle": "Camera gezichtsveld - gebruikt voor kegel breedte en bereik inzending formaat",
"fovInvalid": "FOV moet tussen 1 en 360 graden zijn",
"submittable": "Indienbaar",
"submittableSubtitle": "Of dit profiel gebruikt kan worden voor camera inzendingen",
"osmTags": "OSM Tags",
"addTag": "Voeg tag toe",
"saveProfile": "Sla Profiel Op",
"keyHint": "sleutel",
"valueHint": "waarde",
"atLeastOneTagRequired": "Minstens één tag is vereist",
"profileSaved": "Profiel \"{}\" opgeslagen"
},
"operatorProfileEditor": {
"newOperatorProfile": "Nieuw Operator Profiel",
"editOperatorProfile": "Bewerk Operator Profiel",
"operatorName": "Operator naam",
"operatorNameHint": "bijv., Amsterdam Politie",
"operatorNameRequired": "Operator naam is vereist",
"operatorProfileSaved": "Operator profiel \"{}\" opgeslagen"
},
"operatorProfiles": {
"title": "Operator Profielen",
"noProfilesMessage": "Geen operator profielen gedefinieerd. Maak er een om operator tags toe te passen op node inzendingen.",
"tagsCount": "{} tags",
"deleteOperatorProfile": "Verwijder Operator Profiel",
"deleteOperatorProfileConfirm": "Weet u zeker dat u \"{}\" wilt verwijderen?",
"operatorProfileDeleted": "Operator profiel verwijderd"
},
"offlineAreas": {
"title": "Offline Gebieden",
"noAreasTitle": "Geen offline gebieden",
"noAreasSubtitle": "Download een kaart gebied voor offline gebruik.",
"provider": "Provider",
"maxZoom": "Max zoom",
"zoomLevels": "Z{}-{}",
"latitude": "Breedtegraad",
"longitude": "Lengtegraad",
"tiles": "Tiles",
"size": "Grootte",
"nodes": "Nodes",
"areaIdFallback": "Gebied {}...",
"renameArea": "Hernoem gebied",
"refreshWorldTiles": "Ververs/herdownload wereld tiles",
"deleteOfflineArea": "Verwijder offline gebied",
"cancelDownload": "Annuleer download",
"renameAreaDialogTitle": "Hernoem Offline Gebied",
"areaNameLabel": "Gebied Naam",
"renameButton": "Hernoem",
"megabytes": "MB",
"kilobytes": "KB",
"progress": "{}%",
"refreshArea": "Ververs gebied",
"refreshAreaDialogTitle": "Ververs Offline Gebied",
"refreshAreaDialogSubtitle": "Kies wat te verversen voor dit gebied:",
"refreshTiles": "Ververs Kaart Tiles",
"refreshTilesSubtitle": "Herdownload alle tiles voor bijgewerkte beelden",
"refreshNodes": "Ververs Nodes",
"refreshNodesSubtitle": "Haal node gegevens opnieuw op voor dit gebied",
"startRefresh": "Start Verversen",
"refreshStarted": "Verversen gestart!",
"refreshFailed": "Verversen mislukt: {}"
},
"refineTagsSheet": {
"title": "Verfijn Tags",
"operatorProfile": "Operator Profiel",
"done": "Klaar",
"none": "Geen",
"noAdditionalOperatorTags": "Geen aanvullende operator tags",
"additionalTags": "aanvullende tags",
"additionalTagsTitle": "Aanvullende Tags",
"noTagsDefinedForProfile": "Geen tags gedefinieerd voor dit operator profiel.",
"noOperatorProfiles": "Geen operator profielen gedefinieerd",
"noOperatorProfilesMessage": "Maak operator profielen in Instellingen om aanvullende tags toe te passen op uw node inzendingen.",
"profileTags": "Profiel Tags",
"profileTagsDescription": "Vul deze optionele tag waarden in voor meer gedetailleerde inzendingen:",
"selectValue": "Selecteer waarde...",
"noValue": "(laat leeg)",
"noSuggestions": "Geen suggesties beschikbaar",
"existingTagsTitle": "Bestaande Tags",
"existingTagsDescription": "Bewerk de bestaande tags op dit apparaat. Voeg toe, verwijder of wijzig elke tag:",
"existingOperator": "<Bestaande operator>",
"existingOperatorTags": "bestaande operator tags"
},
"layerSelector": {
"cannotChangeTileTypes": "Kan tile types niet wijzigen tijdens het downloaden van offline gebieden",
"selectMapLayer": "Selecteer Kaart Laag",
"noTileProvidersAvailable": "Geen tile providers beschikbaar"
},
"advancedEdit": {
"title": "Geavanceerde Bewerkingsopties",
"subtitle": "Deze editors bieden meer geavanceerde functies voor complexe bewerkingen.",
"webEditors": "Web Editors",
"mobileEditors": "Mobiele Editors",
"iDEditor": "iD Editor",
"iDEditorSubtitle": "Volledig uitgeruste web editor - werkt altijd",
"rapidEditor": "RapiD Editor",
"rapidEditorSubtitle": "AI-geassisteerde bewerking met Facebook data",
"vespucci": "Vespucci",
"vespucciSubtitle": "Geavanceerde Android OSM editor",
"streetComplete": "StreetComplete",
"streetCompleteSubtitle": "Enquête-gebaseerde mapping app",
"everyDoor": "EveryDoor",
"everyDoorSubtitle": "Snelle POI bewerking",
"goMap": "Go Map!!",
"goMapSubtitle": "iOS OSM editor",
"couldNotOpenEditor": "Kon editor niet openen - app is mogelijk niet geïnstalleerd",
"couldNotOpenURL": "Kon URL niet openen",
"couldNotOpenOSMWebsite": "Kon OSM website niet openen"
},
"networkStatus": {
"showIndicator": "Toon netwerk status indicator",
"showIndicatorSubtitle": "Toon surveillance data laden en fout status",
"loading": "Surveillance data laden...",
"timedOut": "Verzoek verlopen",
"noData": "Geen offline data",
"success": "Surveillance data geladen",
"nodeDataSlow": "Surveillance data traag",
"rateLimited": "Snelheid beperkt door server",
"networkError": "Netwerk fout"
},
"nodeLimitIndicator": {
"message": "{rendered} van {total} apparaten getoond",
"editingDisabledMessage": "Te veel apparaten getoond om veilig te bewerken. Zoom verder in om het aantal zichtbare apparaten te verminderen, probeer dan opnieuw."
},
"navigation": {
"searchLocation": "Zoek Locatie",
"searchPlaceholder": "Zoek plaatsen of coördinaten...",
"routeTo": "Route Naar",
"routeFrom": "Route Vanaf",
"selectLocation": "Selecteer Locatie",
"calculatingRoute": "Route berekenen...",
"routeCalculationFailed": "Route berekening mislukt",
"start": "Start",
"resume": "Hervatten",
"endRoute": "Beëindig Route",
"routeOverview": "Route Overzicht",
"retry": "Opnieuw Proberen",
"cancelSearch": "Annuleer zoeken",
"noResultsFound": "Geen resultaten gevonden",
"searching": "Zoeken...",
"location": "Locatie",
"startPoint": "Start",
"endPoint": "Einde",
"startSelect": "Start (selecteer)",
"endSelect": "Einde (selecteer)",
"distance": "Afstand: {} km",
"routeActive": "Route actief",
"locationsTooClose": "Start en eind locaties zijn te dicht bij elkaar",
"navigationSettings": "Navigatie",
"navigationSettingsSubtitle": "Route planning en vermijding instellingen",
"avoidanceDistance": "Vermijding Afstand",
"avoidanceDistanceSubtitle": "Minimum afstand om weg te blijven van surveillance apparaten",
"searchHistory": "Max Zoekgeschiedenis",
"searchHistorySubtitle": "Maximum aantal recente zoekopdrachten om te onthouden"
},
"suspectedLocations": {
"title": "Verdachte Locaties",
"showSuspectedLocations": "Toon Verdachte Locaties",
"showSuspectedLocationsSubtitle": "Toon vraagteken markers voor verdachte surveillance sites van nutsbedrijf vergunning data",
"lastUpdated": "Laatst Bijgewerkt",
"refreshNow": "Ververs nu",
"dataSource": "Gegevensbron",
"dataSourceDescription": "Nutsbedrijf vergunning data die mogelijke surveillance infrastructuur installatie sites aangeeft",
"dataSourceCredit": "Gegevens verzameling en hosting geleverd door alprwatch.org",
"minimumDistance": "Minimum Afstand van Echte Nodes",
"minimumDistanceSubtitle": "Verberg verdachte locaties binnen {}m van bestaande surveillance apparaten",
"updating": "Verdachte Locaties Bijwerken",
"downloadingAndProcessing": "Data downloaden en verwerken...",
"updateSuccess": "Verdachte locaties succesvol bijgewerkt",
"updateFailed": "Kon verdachte locaties niet bijwerken",
"neverFetched": "Nooit opgehaald",
"daysAgo": "{} dagen geleden",
"hoursAgo": "{} uur geleden",
"minutesAgo": "{} minuten geleden",
"justNow": "Zojuist"
},
"suspectedLocation": {
"title": "Verdachte Locatie #{}",
"ticketNo": "Ticket Nr",
"address": "Adres",
"street": "Straat",
"city": "Stad",
"state": "Provincie",
"intersectingStreet": "Kruisende Straat",
"workDoneFor": "Werk Gedaan Voor",
"remarks": "Opmerkingen",
"url": "URL",
"coordinates": "Coördinaten",
"noAddressAvailable": "Geen adres beschikbaar"
},
"units": {
"meters": "m",
"feet": "ft",
"kilometers": "km",
"miles": "mijl",
"metersLong": "meters",
"feetLong": "voet",
"kilometersLong": "kilometers",
"milesLong": "mijlen",
"metric": "Metrisch",
"imperial": "Imperiaal",
"metricDescription": "Metrisch (km, m)",
"imperialDescription": "Imperiaal (mijl, ft)"
}
}