{ "language": { "name": "English" }, "app": { "title": "DeFlock" }, "actions": { "tagNode": "New Node", "download": "Download", "settings": "Settings", "edit": "Edit", "delete": "Delete", "cancel": "Cancel", "ok": "OK", "close": "Close", "submit": "Submit", "saveEdit": "Save Edit", "clear": "Clear" }, "followMe": { "off": "Enable follow-me (north up)", "northUp": "Enable follow-me (rotating)", "rotating": "Disable follow-me" }, "settings": { "title": "Settings", "language": "Language", "systemDefault": "System Default", "aboutInfo": "About / Info", "aboutThisApp": "About This App", "maxNodes": "Max nodes fetched/drawn", "maxNodesSubtitle": "Set an upper limit for the number of nodes on the map (default: 250).", "maxNodesWarning": "You probably don't want to do that unless you are absolutely sure you have a good reason for it.", "offlineMode": "Offline Mode", "offlineModeSubtitle": "Disable all network requests except for local/offline areas.", "offlineModeWarningTitle": "Active Downloads", "offlineModeWarningMessage": "Enabling offline mode will cancel any active area downloads. Do you want to continue?", "enableOfflineMode": "Enable Offline Mode" }, "node": { "title": "Node #{}", "tagSheetTitle": "Surveillance Device Tags", "queuedForUpload": "Node queued for upload", "editQueuedForUpload": "Node edit queued for upload", "deleteQueuedForUpload": "Node deletion queued for upload", "confirmDeleteTitle": "Delete Node", "confirmDeleteMessage": "Are you sure you want to delete node #{}? This action cannot be undone." }, "addNode": { "profile": "Profile", "direction": "Direction {}°", "profileNoDirectionInfo": "This profile does not require a direction.", "mustBeLoggedIn": "You must be logged in to submit new nodes. Please log in via Settings.", "enableSubmittableProfile": "Enable a submittable profile in Settings to submit new nodes.", "profileViewOnlyWarning": "This profile is for map viewing only. Please select a submittable profile to submit new nodes.", "refineTags": "Refine Tags", "refineTagsWithProfile": "Refine Tags ({})" }, "editNode": { "title": "Edit Node #{}", "profile": "Profile", "direction": "Direction {}°", "profileNoDirectionInfo": "This profile does not require a direction.", "mustBeLoggedIn": "You must be logged in to edit nodes. Please log in via Settings.", "sandboxModeWarning": "Cannot submit edits on production nodes to sandbox. Switch to Production mode in Settings to edit nodes.", "enableSubmittableProfile": "Enable a submittable profile in Settings to edit nodes.", "profileViewOnlyWarning": "This profile is for map viewing only. Please select a submittable profile to edit nodes.", "refineTags": "Refine Tags", "refineTagsWithProfile": "Refine Tags ({})" }, "download": { "title": "Download Map Area", "maxZoomLevel": "Max zoom level", "storageEstimate": "Storage estimate:", "tilesAndSize": "{} tiles, {} MB", "minZoom": "Min zoom:", "maxRecommendedZoom": "Max recommended zoom: Z{}", "withinTileLimit": "Within {} tile limit", "exceedsTileLimit": "Current selection exceeds {} tile limit", "offlineModeWarning": "Downloads disabled while in offline mode. Disable offline mode to download new areas.", "downloadStarted": "Download started! Fetching tiles and cameras...", "downloadFailed": "Failed to start download: {}" }, "uploadMode": { "title": "Upload Destination", "subtitle": "Choose where cameras are uploaded", "production": "Production", "sandbox": "Sandbox", "simulate": "Simulate", "productionDescription": "Upload to the live OSM database (visible to all users)", "sandboxDescription": "Uploads go to the OSM Sandbox (safe for testing, resets regularly).", "simulateDescription": "Simulate uploads (does not contact OSM servers)" }, "auth": { "loggedInAs": "Logged in as {}", "loginToOSM": "Log in to OpenStreetMap", "tapToLogout": "Tap to logout", "requiredToSubmit": "Required to submit camera data", "loggedOut": "Logged out", "testConnection": "Test Connection", "testConnectionSubtitle": "Verify OSM credentials are working", "connectionOK": "Connection OK - credentials are valid", "connectionFailed": "Connection failed - please re-login" }, "queue": { "pendingUploads": "Pending uploads: {}", "simulateModeEnabled": "Simulate mode enabled – uploads simulated", "sandboxMode": "Sandbox mode – uploads go to OSM Sandbox", "tapToViewQueue": "Tap to view queue", "clearUploadQueue": "Clear Upload Queue", "removeAllPending": "Remove all {} pending uploads", "clearQueueTitle": "Clear Queue", "clearQueueConfirm": "Remove all {} pending uploads?", "queueCleared": "Queue cleared", "uploadQueueTitle": "Upload Queue ({} items)", "queueIsEmpty": "Queue is empty", "cameraWithIndex": "Camera {}", "error": " (Error)", "completing": " (Completing...)", "destination": "Dest: {}", "latitude": "Lat: {}", "longitude": "Lon: {}", "direction": "Direction: {}°", "attempts": "Attempts: {}", "uploadFailedRetry": "Upload failed. Tap retry to try again.", "retryUpload": "Retry upload", "clearAll": "Clear All" }, "tileProviders": { "title": "Tile Providers", "noProvidersConfigured": "No tile providers configured", "tileTypesCount": "{} tile types", "apiKeyConfigured": "API Key configured", "needsApiKey": "Needs API key", "editProvider": "Edit Provider", "addProvider": "Add Provider", "deleteProvider": "Delete Provider", "deleteProviderConfirm": "Are you sure you want to delete \"{}\"?", "providerName": "Provider Name", "providerNameHint": "e.g., Custom Maps Inc.", "providerNameRequired": "Provider name is required", "apiKey": "API Key (Optional)", "apiKeyHint": "Enter API key if required by tile types", "tileTypes": "Tile Types", "addType": "Add Type", "noTileTypesConfigured": "No tile types configured", "atLeastOneTileTypeRequired": "At least one tile type is required", "manageTileProviders": "Manage Providers" }, "tileTypeEditor": { "editTileType": "Edit Tile Type", "addTileType": "Add Tile Type", "name": "Name", "nameHint": "e.g., Satellite", "nameRequired": "Name is required", "urlTemplate": "URL Template", "urlTemplateHint": "https://example.com/{z}/{x}/{y}.png", "urlTemplateRequired": "URL template is required", "urlTemplatePlaceholders": "URL must contain {z}, {x}, and {y} placeholders", "attribution": "Attribution", "attributionHint": "© Map Provider", "attributionRequired": "Attribution is required", "fetchPreview": "Fetch Preview", "previewTileLoaded": "Preview tile loaded successfully", "previewTileFailed": "Failed to fetch preview: {}", "save": "Save" }, "profiles": { "nodeProfiles": "Node Profiles", "newProfile": "New Profile", "builtIn": "Built-in", "custom": "Custom", "view": "View", "deleteProfile": "Delete Profile", "deleteProfileConfirm": "Are you sure you want to delete \"{}\"?", "profileDeleted": "Profile deleted" }, "mapTiles": { "title": "Map Tiles", "manageProviders": "Manage Providers" }, "profileEditor": { "viewProfile": "View Profile", "newProfile": "New Profile", "editProfile": "Edit Profile", "profileName": "Profile name", "profileNameHint": "e.g., Custom ALPR Camera", "profileNameRequired": "Profile name is required", "requiresDirection": "Requires Direction", "requiresDirectionSubtitle": "Whether cameras of this type need a direction tag", "submittable": "Submittable", "submittableSubtitle": "Whether this profile can be used for camera submissions", "osmTags": "OSM Tags", "addTag": "Add tag", "saveProfile": "Save Profile", "keyHint": "key", "valueHint": "value", "atLeastOneTagRequired": "At least one tag is required", "profileSaved": "Profile \"{}\" saved" }, "operatorProfileEditor": { "newOperatorProfile": "New Operator Profile", "editOperatorProfile": "Edit Operator Profile", "operatorName": "Operator name", "operatorNameHint": "e.g., Austin Police Department", "operatorNameRequired": "Operator name is required", "operatorProfileSaved": "Operator profile \"{}\" saved" }, "operatorProfiles": { "title": "Operator Profiles", "noProfilesMessage": "No operator profiles defined. Create one to apply operator tags to node submissions.", "tagsCount": "{} tags", "deleteOperatorProfile": "Delete Operator Profile", "deleteOperatorProfileConfirm": "Are you sure you want to delete \"{}\"?", "operatorProfileDeleted": "Operator profile deleted" }, "offlineAreas": { "noAreasTitle": "No offline areas", "noAreasSubtitle": "Download a map area for offline use.", "provider": "Provider", "maxZoom": "Max zoom", "zoomLevels": "Z{}-{}", "latitude": "Lat", "longitude": "Lon", "tiles": "Tiles", "size": "Size", "cameras": "Cameras", "areaIdFallback": "Area {}...", "renameArea": "Rename area", "refreshWorldTiles": "Refresh/re-download world tiles", "deleteOfflineArea": "Delete offline area", "cancelDownload": "Cancel download", "renameAreaDialogTitle": "Rename Offline Area", "areaNameLabel": "Area Name", "renameButton": "Rename", "megabytes": "MB", "kilobytes": "KB", "progress": "{}%" }, "refineTagsSheet": { "title": "Refine Tags", "operatorProfile": "Operator Profile", "done": "Done", "none": "None", "noAdditionalOperatorTags": "No additional operator tags", "additionalTags": "additional tags", "additionalTagsTitle": "Additional Tags", "noTagsDefinedForProfile": "No tags defined for this operator profile.", "noOperatorProfiles": "No operator profiles defined", "noOperatorProfilesMessage": "Create operator profiles in Settings to apply additional tags to your node submissions." }, "layerSelector": { "cannotChangeTileTypes": "Cannot change tile types while downloading offline areas", "selectMapLayer": "Select Map Layer", "noTileProvidersAvailable": "No tile providers available" } }