From e02d9f10354a17667eb56ab3a73dbf98bee36f90 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Wed, 17 Apr 2024 08:35:12 +0200 Subject: [PATCH 1/9] next step - same coordinates format. --- .../shared/components/map/map.component.ts | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/app/shared/components/map/map.component.ts b/src/app/shared/components/map/map.component.ts index e448ca62..a63ed37d 100644 --- a/src/app/shared/components/map/map.component.ts +++ b/src/app/shared/components/map/map.component.ts @@ -239,6 +239,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy this.coordinateList ? this.coordinateList[0]?.longitude : this.coordinates?.longitude, ], zoom: this.zoomLevel, + maxZoom: 19, doubleClickZoom: false, fullscreenControl: true, fullscreenControlOptions: { @@ -246,11 +247,36 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy content: '
', }, }); - const tiles = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + const streetTiles = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19, attribution: '© OpenStreetMap', - }); - tiles.addTo(this.map); + }).addTo(this.map); + + const ortofotowmts = L.tileLayer( + "https://services.datafordeler.dk/GeoDanmarkOrto/orto_foraar_wmts/1.0.0/WMTS?username=MSLFWDKAZS&password=Rosenkrantzgade1!&request=GetTile&version=1.0.0&service=WMTS&Layer=orto_foraar_wmts&style=default&format=image/jpeg&TileMatrixSet=KortforsyningTilingDK&TileMatrix={z}&TileRow={y}&TileCol={x}", + { + maxZoom: 19, + attribution: "test", + noWrap: true, + } + ); + + // var hillshadeDAF = L.tileLayer( + // "https://services.datafordeler.dk/DHMhoejdekurver/DHMhoejdekurver_GML3/1.0.0/WFS?username=MSLFWDKAZS&password=Rosenkrantzgade1!&service=WFS&request=getfeature&typename=Formkurve0_5&Version=2.0.0" + // ) + + // Define layer groups for layer control + var baseLayers = { + "Street view": streetTiles, + "Test - Datafordeleren": ortofotowmts, + }; + + var overlays = { + // "Street view": hillshadeDAF, + }; + + // Add layer control to map + L.control.layers(baseLayers, overlays).addTo(this.map); } } } From c29aa44b06b273c84847d968a8925c941a99b0ff Mon Sep 17 00:00:00 2001 From: August Andersen Date: Wed, 17 Apr 2024 18:52:45 +0200 Subject: [PATCH 2/9] finally made two maps work. --- package-lock.json | 88 +++++++++++++ package.json | 7 +- .../shared/components/map/map.component.ts | 118 +++++++++++++++--- src/assets/env.js | 4 +- src/environments/environment.ts | 4 +- 5 files changed, 201 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7db96951..fee121d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,8 @@ "@ngx-translate/http-loader": "^6.0.0", "@popperjs/core": "^2.11.6", "@types/leaflet.markercluster": "1.5.3", + "@types/proj4": "^2.5.5", + "@types/proj4leaflet": "^1.0.10", "all": "0.0.0", "animate.css": "^4.1.1", "bootstrap": "5.0.0-alpha2", @@ -48,6 +50,8 @@ "ngx-monaco-editor-v2": "^14.0.4", "ngx-papaparse": "^5.0.0", "popper.js": "^1.16.1", + "proj4": "^2.11.0", + "proj4leaflet": "^1.0.2", "rxjs": "~6.6.7", "tslib": "^2.0.0", "tslint": "~6.1.0", @@ -3492,6 +3496,21 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, + "node_modules/@types/proj4": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.5.tgz", + "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==" + }, + "node_modules/@types/proj4leaflet": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/proj4leaflet/-/proj4leaflet-1.0.10.tgz", + "integrity": "sha512-Yie5J8sHUgTQ1FTRP9cCDXpWvHXjUiSjwlnJb1F06Czwo6cVOt8Bxy6txMSIVgznbnRWlbYmxNjWDhYtNxAflw==", + "dependencies": { + "@types/geojson": "*", + "@types/leaflet": "*", + "@types/proj4": "*" + } + }, "node_modules/@types/q": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", @@ -9666,6 +9685,11 @@ "node": ">= 0.6" } }, + "node_modules/mgrs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", + "integrity": "sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==" + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -11704,6 +11728,23 @@ "node": ">=0.4.0" } }, + "node_modules/proj4": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.11.0.tgz", + "integrity": "sha512-SasuTkAx8HnWQHfIyhkdUNJorSJqINHAN3EyMWYiQRVorftz9DHz650YraFgczwgtHOxqnfuDxSNv3C8MUnHeg==", + "dependencies": { + "mgrs": "1.0.0", + "wkt-parser": "^1.3.3" + } + }, + "node_modules/proj4leaflet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/proj4leaflet/-/proj4leaflet-1.0.2.tgz", + "integrity": "sha512-6GdDeUlhX/tHUiMEj80xQhlPjwrXcdfD0D5OBymY8WvxfbmZcdhNqQk7n7nFf53ue6QdP9ls9ZPjsAxnbZDTsw==", + "dependencies": { + "proj4": "^2.3.14" + } + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -15055,6 +15096,11 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wkt-parser": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.3.3.tgz", + "integrity": "sha512-ZnV3yH8/k58ZPACOXeiHaMuXIiaTk1t0hSUVisbO0t4RjA5wPpUytcxeyiN2h+LZRrmuHIh/1UlrR9e7DHDvTw==" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -17580,6 +17626,21 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, + "@types/proj4": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.5.tgz", + "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==" + }, + "@types/proj4leaflet": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/proj4leaflet/-/proj4leaflet-1.0.10.tgz", + "integrity": "sha512-Yie5J8sHUgTQ1FTRP9cCDXpWvHXjUiSjwlnJb1F06Czwo6cVOt8Bxy6txMSIVgznbnRWlbYmxNjWDhYtNxAflw==", + "requires": { + "@types/geojson": "*", + "@types/leaflet": "*", + "@types/proj4": "*" + } + }, "@types/q": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", @@ -22245,6 +22306,11 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, + "mgrs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", + "integrity": "sha512-awNbTOqCxK1DBGjalK3xqWIstBZgN6fxsMSiXLs9/spqWkF2pAhb2rrYCFSsr1/tT7PhcDGjZndG8SWYn0byYA==" + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -23654,6 +23720,23 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "proj4": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.11.0.tgz", + "integrity": "sha512-SasuTkAx8HnWQHfIyhkdUNJorSJqINHAN3EyMWYiQRVorftz9DHz650YraFgczwgtHOxqnfuDxSNv3C8MUnHeg==", + "requires": { + "mgrs": "1.0.0", + "wkt-parser": "^1.3.3" + } + }, + "proj4leaflet": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/proj4leaflet/-/proj4leaflet-1.0.2.tgz", + "integrity": "sha512-6GdDeUlhX/tHUiMEj80xQhlPjwrXcdfD0D5OBymY8WvxfbmZcdhNqQk7n7nFf53ue6QdP9ls9ZPjsAxnbZDTsw==", + "requires": { + "proj4": "^2.3.14" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -26174,6 +26257,11 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "wkt-parser": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.3.3.tgz", + "integrity": "sha512-ZnV3yH8/k58ZPACOXeiHaMuXIiaTk1t0hSUVisbO0t4RjA5wPpUytcxeyiN2h+LZRrmuHIh/1UlrR9e7DHDvTw==" + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 670b4e8b..f8886d1d 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,8 @@ "@ngx-translate/http-loader": "^6.0.0", "@popperjs/core": "^2.11.6", "@types/leaflet.markercluster": "1.5.3", + "@types/proj4": "^2.5.5", + "@types/proj4leaflet": "^1.0.10", "all": "0.0.0", "animate.css": "^4.1.1", "bootstrap": "5.0.0-alpha2", @@ -43,7 +45,6 @@ "leaflet": "^1.9.4", "leaflet-geosearch": "3.6.1", "leaflet.fullscreen": "^3.0.1", - "moment": "^2.29.4", "monaco-editor": "^0.33.0", "ng": "0.0.0", @@ -52,6 +53,8 @@ "ngx-monaco-editor-v2": "^14.0.4", "ngx-papaparse": "^5.0.0", "popper.js": "^1.16.1", + "proj4": "^2.11.0", + "proj4leaflet": "^1.0.2", "rxjs": "~6.6.7", "tslib": "^2.0.0", "tslint": "~6.1.0", @@ -68,7 +71,6 @@ "@types/jwt-decode": "^3.1.0", "@types/leaflet": "^1.9.8", "@types/leaflet.fullscreen": "^3.0.2", - "leaflet.markercluster": "1.5.3", "@types/node": "^12.11.1", "codelyzer": "^6.0.2", "eslint": "^7.3.1", @@ -79,6 +81,7 @@ "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", + "leaflet.markercluster": "1.5.3", "ngrx-store-freeze": "^0.2.4", "prettier": "^2.0.5", "protractor": "~7.0.0", diff --git a/src/app/shared/components/map/map.component.ts b/src/app/shared/components/map/map.component.ts index a63ed37d..e5c07268 100644 --- a/src/app/shared/components/map/map.component.ts +++ b/src/app/shared/components/map/map.component.ts @@ -17,7 +17,15 @@ import { OpenStreetMapProvider, GeoSearchControl } from "leaflet-geosearch"; import { TranslateService } from "@ngx-translate/core"; import moment from "moment"; import "leaflet.markercluster"; +import "proj4leaflet"; +import proj4 from "proj4"; +import { environment } from "@environments/environment"; +proj4.defs("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs"); +proj4.defs( + "EPSG:3857", + "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs" +); @Component({ selector: "app-map", templateUrl: "./map.component.html", @@ -33,13 +41,23 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy @Input() coordinates?: MapCoordinates; @Input() coordinateList: [MapCoordinates]; @Output() updateCoordinates = new EventEmitter(); - private zoomLevel = 15; + private zoomLevel = 13; private redMarker = "/assets/images/red-marker.png"; private greenMarker = "/assets/images/green-marker.png"; private greyMarker = "/assets/images/grey-marker.png"; - subscription: Subscription; - provider: OpenStreetMapProvider; - searchControl: L.Control; + private dafusername = environment.dafusername; + private dafpw = environment.dafpassword; + private clusterMaxRadius = 80; + //Datafordeler uses 25832 format for coordinates. + private crs = new L.Proj.CRS("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs", { + resolutions: [1638.4, 819.2, 409.6, 204.8, 102.4, 51.2, 25.6, 12.8, 6.4, 3.2, 1.6, 0.8, 0.4, 0.2], + origin: [120000, 6500000], + }); + private maxZoomToEnableLayerChange = 17; + private previousCenter: L.LatLngExpression | null = null; + private previousZoom: number | null = null; + private provider: OpenStreetMapProvider; + private searchControl: L.Control; constructor(private translate: TranslateService) {} ngOnInit(): void { @@ -64,6 +82,9 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy ngAfterViewInit(): void { this.initMap(); this.placeMarkers(); + + this.changeLayerListener(); + if (!this.isFromCreation) { return; } @@ -86,14 +107,66 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy } } - changeMarkers() { + private changeLayerListener() { + this.map.on("baselayerchange", (e: L.LayersControlEvent) => { + const layerName = e.name; + + // Save current center and zoom before changing the layer + this.previousCenter = this.map.getCenter(); + this.previousZoom = this.map.getZoom(); + + if (layerName === "Street view") { + this.map.options.crs = L.CRS.EPSG3857; //Default CRS. + this.map.options.maxZoom = 18; + } else { + this.map.options.crs = this.crs; // Set back to custom CRS if needed + this.map.options.maxZoom = 15; // Max zoom for datafordeler map. + } + + //Cluster groups has to be "updated" when change of layer. + if (this.markers) { + this.makeClusterGroup(); + } + + // Re-center the map to the previous center and adjust zoom level after changing the base layer + if (this.previousCenter && this.previousZoom !== null) { + let newZoom: number; + + //Zoom is different compared between leaflet and datafordeler map. Therefore, by testing, +-5 is close to the same. + if (layerName === "Street view") { + newZoom = Math.min(this.previousZoom + 5, this.map.options.maxZoom); + } else { + newZoom = Math.min(this.previousZoom - 5, this.map.options.maxZoom); + } + + // Set the map's view to the previous center and adjusted zoom level. + this.map.setView(this.previousCenter, newZoom); + } + }); + } + + private changeMarkers() { if (this.markers) { this.markers.clearLayers(); } this.placeMarkers(); } - setGeolocation() { + private makeClusterGroup() { + this.markers.clearLayers(); + const clusterGroup = L.markerClusterGroup({ + maxClusterRadius: this.clusterMaxRadius, + }); + + this.coordinateList.forEach(coord => { + clusterGroup.addLayer(this.addMarker(coord.latitude, coord.longitude, coord.draggable, coord.markerInfo)); + }); + + this.markers = clusterGroup.addTo(this.map); + this.fitToBounds(clusterGroup.getLayers()); + } + + private setGeolocation() { if (window.navigator.geolocation) { window.navigator.geolocation.getCurrentPosition(res => { this.coordinates.longitude = res.coords.longitude; @@ -104,7 +177,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy } } - updateMarker() { + private updateMarker() { this.marker?.setLatLng([this.coordinates.latitude, this.coordinates.longitude]); this.map?.setView(this.marker._latlng, this.zoomLevel); } @@ -115,7 +188,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy } if (this.coordinateList) { const clusterGroup = L.markerClusterGroup({ - maxClusterRadius: 80, + maxClusterRadius: this.clusterMaxRadius, }); this.coordinateList.forEach(coord => { @@ -226,7 +299,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy this.marker?.setLatLng([this.coordinates.latitude, this.coordinates.longitude]); } - setCoordinatesOutput() { + private setCoordinatesOutput() { this.updateCoordinates.emit({ latitude: this.coordinates.latitude, longitude: this.coordinates.longitude }); } @@ -239,8 +312,9 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy this.coordinateList ? this.coordinateList[0]?.longitude : this.coordinates?.longitude, ], zoom: this.zoomLevel, - maxZoom: 19, + maxZoom: 18, doubleClickZoom: false, + crs: L.CRS.EPSG3857, fullscreenControl: true, fullscreenControlOptions: { position: "topleft", @@ -248,15 +322,13 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy }, }); const streetTiles = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { - maxZoom: 19, attribution: '© OpenStreetMap', }).addTo(this.map); const ortofotowmts = L.tileLayer( - "https://services.datafordeler.dk/GeoDanmarkOrto/orto_foraar_wmts/1.0.0/WMTS?username=MSLFWDKAZS&password=Rosenkrantzgade1!&request=GetTile&version=1.0.0&service=WMTS&Layer=orto_foraar_wmts&style=default&format=image/jpeg&TileMatrixSet=KortforsyningTilingDK&TileMatrix={z}&TileRow={y}&TileCol={x}", + `https://services.datafordeler.dk/GeoDanmarkOrto/orto_foraar_wmts/1.0.0/WMTS?username=${this.dafusername}&password=${this.dafpw}!&request=GetTile&version=1.0.0&service=WMTS&Layer=orto_foraar_wmts&style=default&format=image/jpeg&TileMatrixSet=KortforsyningTilingDK&TileMatrix={z}&TileRow={y}&TileCol={x}`, { - maxZoom: 19, - attribution: "test", + attribution: '© Datafordeler', noWrap: true, } ); @@ -275,8 +347,22 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy // "Street view": hillshadeDAF, }; - // Add layer control to map - L.control.layers(baseLayers, overlays).addTo(this.map); + const layerControl = L.control.layers(baseLayers, overlays).addTo(this.map); + + //If it's a map with more than 1 marker, then the map change from street view to satelite will fail if zoom is above 16 for some reason.. Therefore, remove the possibility for it to happen. + this.map.on("zoomend", () => { + if (this.coordinateList) { + const currentZoom = this.map.getZoom(); + + if (currentZoom >= this.maxZoomToEnableLayerChange) { + layerControl.remove(); + } else { + if (!this.map.hasLayer(layerControl)) { + layerControl.addTo(this.map); + } + } + } + }); } } } diff --git a/src/assets/env.js b/src/assets/env.js index a5a52bd7..e5910c0a 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -4,4 +4,6 @@ window["env"].PRODUCTION = false; window["env"].BASE_URL = 'http://localhost:3000/api/v1/'; // For local testing window["env"].TABLE_PAGE_SIZE = 25; // For local testing - })(this); \ No newline at end of file + window["env"].DAF_USERNAME = "MSLFWDKAZS"; // For local testing + window["env"].DAF_PASSWORD = "Rosenkrantzgade1"; // For local testing + })(this); diff --git a/src/environments/environment.ts b/src/environments/environment.ts index e4c38386..c954e49f 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -2,7 +2,9 @@ export const environment = { production: window["env"].PRODUCTION === "true", baseUrl: window["env"].BASE_URL || "http://localhost:3000/api/v1/", - tablePageSize: parseInt(window["env"].TABLE_PAGE_SIZE) || 25 + tablePageSize: parseInt(window["env"].TABLE_PAGE_SIZE) || 25, + dafusername: window["env"].DAF_USERNAME || "", + dafpassword: window["env"].DAF_PASSWORD || "", }; /* From 92694f3987c69a3354f3bea4c4c7c0352c70328a Mon Sep 17 00:00:00 2001 From: August Andersen Date: Fri, 19 Apr 2024 12:27:20 +0200 Subject: [PATCH 3/9] cleanup and small additions (a translation), and moved magic strings to constants. --- package-lock.json | 24 +- package.json | 6 +- .../gateway-edit/gateway-edit.component.html | 446 ++++++++++++------ .../shared/components/map/map.component.ts | 92 ++-- src/assets/env.js | 8 +- src/assets/env.template.js | 4 +- src/assets/i18n/da.json | 5 +- src/assets/i18n/en.json | 5 +- tsconfig.json | 65 +-- 9 files changed, 432 insertions(+), 223 deletions(-) diff --git a/package-lock.json b/package-lock.json index fee121d1..3bfa2f58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,9 +29,6 @@ "@ngx-translate/core": "^13.0.0", "@ngx-translate/http-loader": "^6.0.0", "@popperjs/core": "^2.11.6", - "@types/leaflet.markercluster": "1.5.3", - "@types/proj4": "^2.5.5", - "@types/proj4leaflet": "^1.0.10", "all": "0.0.0", "animate.css": "^4.1.1", "bootstrap": "5.0.0-alpha2", @@ -50,7 +47,6 @@ "ngx-monaco-editor-v2": "^14.0.4", "ngx-papaparse": "^5.0.0", "popper.js": "^1.16.1", - "proj4": "^2.11.0", "proj4leaflet": "^1.0.2", "rxjs": "~6.6.7", "tslib": "^2.0.0", @@ -68,7 +64,9 @@ "@types/jwt-decode": "^3.1.0", "@types/leaflet": "^1.9.8", "@types/leaflet.fullscreen": "^3.0.2", + "@types/leaflet.markercluster": "1.5.3", "@types/node": "^12.11.1", + "@types/proj4leaflet": "^1.0.10", "codelyzer": "^6.0.2", "eslint": "^7.3.1", "jasmine-core": "^3.8.0", @@ -3396,7 +3394,8 @@ "node_modules/@types/geojson": { "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", + "dev": true }, "node_modules/@types/http-errors": { "version": "2.0.4", @@ -3448,6 +3447,7 @@ "version": "1.9.8", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==", + "dev": true, "dependencies": { "@types/geojson": "*" } @@ -3465,6 +3465,7 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", "integrity": "sha512-G19K7/Nzwvoz9RDKL2/U1RxkdhDqXPDVRokrmI4eNDfSLShlitY6w/hp4bUaMdi2cwyYcNgdNOarpzDHMuSFrQ==", + "dev": true, "dependencies": { "@types/leaflet": "*" } @@ -3499,12 +3500,14 @@ "node_modules/@types/proj4": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.5.tgz", - "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==" + "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==", + "dev": true }, "node_modules/@types/proj4leaflet": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@types/proj4leaflet/-/proj4leaflet-1.0.10.tgz", "integrity": "sha512-Yie5J8sHUgTQ1FTRP9cCDXpWvHXjUiSjwlnJb1F06Czwo6cVOt8Bxy6txMSIVgznbnRWlbYmxNjWDhYtNxAflw==", + "dev": true, "dependencies": { "@types/geojson": "*", "@types/leaflet": "*", @@ -17527,7 +17530,8 @@ "@types/geojson": { "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", + "dev": true }, "@types/http-errors": { "version": "2.0.4", @@ -17578,6 +17582,7 @@ "version": "1.9.8", "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==", + "dev": true, "requires": { "@types/geojson": "*" } @@ -17595,6 +17600,7 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", "integrity": "sha512-G19K7/Nzwvoz9RDKL2/U1RxkdhDqXPDVRokrmI4eNDfSLShlitY6w/hp4bUaMdi2cwyYcNgdNOarpzDHMuSFrQ==", + "dev": true, "requires": { "@types/leaflet": "*" } @@ -17629,12 +17635,14 @@ "@types/proj4": { "version": "2.5.5", "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.5.tgz", - "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==" + "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==", + "dev": true }, "@types/proj4leaflet": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@types/proj4leaflet/-/proj4leaflet-1.0.10.tgz", "integrity": "sha512-Yie5J8sHUgTQ1FTRP9cCDXpWvHXjUiSjwlnJb1F06Czwo6cVOt8Bxy6txMSIVgznbnRWlbYmxNjWDhYtNxAflw==", + "dev": true, "requires": { "@types/geojson": "*", "@types/leaflet": "*", diff --git a/package.json b/package.json index f8886d1d..ef63ceea 100644 --- a/package.json +++ b/package.json @@ -32,9 +32,6 @@ "@ngx-translate/core": "^13.0.0", "@ngx-translate/http-loader": "^6.0.0", "@popperjs/core": "^2.11.6", - "@types/leaflet.markercluster": "1.5.3", - "@types/proj4": "^2.5.5", - "@types/proj4leaflet": "^1.0.10", "all": "0.0.0", "animate.css": "^4.1.1", "bootstrap": "5.0.0-alpha2", @@ -53,7 +50,6 @@ "ngx-monaco-editor-v2": "^14.0.4", "ngx-papaparse": "^5.0.0", "popper.js": "^1.16.1", - "proj4": "^2.11.0", "proj4leaflet": "^1.0.2", "rxjs": "~6.6.7", "tslib": "^2.0.0", @@ -71,6 +67,8 @@ "@types/jwt-decode": "^3.1.0", "@types/leaflet": "^1.9.8", "@types/leaflet.fullscreen": "^3.0.2", + "@types/leaflet.markercluster": "1.5.3", + "@types/proj4leaflet": "^1.0.10", "@types/node": "^12.11.1", "codelyzer": "^6.0.2", "eslint": "^7.3.1", diff --git a/src/app/gateway/gateway-edit/gateway-edit.component.html b/src/app/gateway/gateway-edit/gateway-edit.component.html index ceea42bc..d9f4b1b2 100644 --- a/src/app/gateway/gateway-edit/gateway-edit.component.html +++ b/src/app/gateway/gateway-edit/gateway-edit.component.html @@ -1,153 +1,321 @@
-
-
    -
  • - {{ error | translate }} -
  • -
-
- -
-
- * - +
+
    +
  • + {{ error | translate }} +
  • +
-
- - -
+ class="form-control" + [(ngModel)]="gateway.description" + [ngClass]="{ + 'is-invalid': formFailedSubmit && errorFields.includes('description'), + 'is-valid': formFailedSubmit && !errorFields.includes('description') + }" + > +
-
- * - -
+
+ * + +
-
- -
-

{{'DBLCLICKINFO' | translate}}

+
+ +
-
-
- - -
+
+

{{ "DBLCLICKINFO" | translate }}

+

{{ "HEIGHTCURVESINFO" | translate }}

+
-
- - -
+
+
+ + +
-
- - -
-
- - - - {{ placementOption.label }} - - -
-
- - -
-
- - -
-
- - - - {{ statusOption.label }} - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - +
+ + +
+ +
+ + +
+
+ + + + {{ placementOption.label }} + + +
+
+ + +
+
+ + +
+
+ + + + {{ statusOption.label }} + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
-
-
- - -
+
+ + +
diff --git a/src/app/shared/components/map/map.component.ts b/src/app/shared/components/map/map.component.ts index e5c07268..89091301 100644 --- a/src/app/shared/components/map/map.component.ts +++ b/src/app/shared/components/map/map.component.ts @@ -11,31 +11,32 @@ import { } from "@angular/core"; import * as L from "leaflet"; import "leaflet.fullscreen"; -import { Subscription } from "rxjs"; import { MapCoordinates, MarkerInfo } from "./map-coordinates.model"; import { OpenStreetMapProvider, GeoSearchControl } from "leaflet-geosearch"; import { TranslateService } from "@ngx-translate/core"; import moment from "moment"; import "leaflet.markercluster"; import "proj4leaflet"; -import proj4 from "proj4"; import { environment } from "@environments/environment"; -proj4.defs("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs"); -proj4.defs( - "EPSG:3857", - "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs" -); @Component({ selector: "app-map", templateUrl: "./map.component.html", styleUrls: ["./map.component.scss"], }) export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { - private map; + private satelliteCenterLat = 56.07900207957074; + private satelliteCenterLng = 9.998776628830988; + private streetViewName = "Street view"; + private datafordelerName; + private heightCurvesName; + private ortofotowmts: L.TileLayer; + private streetMap: L.TileLayer; + private heightsMapWms: L.TileLayer.WMS; + private map: L.Map; public mapId; - private marker; - private markers: any; + private marker: L.Marker; + private markers: L.MarkerClusterGroup; @Input() isFromApplication? = false; @Input() isFromCreation? = false; @Input() coordinates?: MapCoordinates; @@ -49,7 +50,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy private dafpw = environment.dafpassword; private clusterMaxRadius = 80; //Datafordeler uses 25832 format for coordinates. - private crs = new L.Proj.CRS("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs", { + private datafordelerCrs = new L.Proj.CRS("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs", { resolutions: [1638.4, 819.2, 409.6, 204.8, 102.4, 51.2, 25.6, 12.8, 6.4, 3.2, 1.6, 0.8, 0.4, 0.2], origin: [120000, 6500000], }); @@ -58,9 +59,14 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy private previousZoom: number | null = null; private provider: OpenStreetMapProvider; private searchControl: L.Control; + constructor(private translate: TranslateService) {} ngOnInit(): void { + this.translate.get(["HEIGHTCURVES", "SATELLITEDENMARK"]).subscribe(translations => { + this.datafordelerName = translations["SATELLITEDENMARK"]; + this.heightCurvesName = translations["HEIGHTCURVES"]; + }); this.mapId = Math.random().toString(); if (this.coordinates?.useGeolocation) { this.setGeolocation(); @@ -115,12 +121,12 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy this.previousCenter = this.map.getCenter(); this.previousZoom = this.map.getZoom(); - if (layerName === "Street view") { + if (layerName === this.streetViewName) { this.map.options.crs = L.CRS.EPSG3857; //Default CRS. - this.map.options.maxZoom = 18; + this.map.options.maxZoom = 18; // Max zoom for leaflet map. } else { - this.map.options.crs = this.crs; // Set back to custom CRS if needed - this.map.options.maxZoom = 15; // Max zoom for datafordeler map. + this.map.options.crs = this.datafordelerCrs; // Set back to custom CRS if needed + this.map.options.maxZoom = 13; // Max zoom for datafordeler map. } //Cluster groups has to be "updated" when change of layer. @@ -129,14 +135,20 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy } // Re-center the map to the previous center and adjust zoom level after changing the base layer - if (this.previousCenter && this.previousZoom !== null) { + if (this.previousCenter && this.previousZoom) { let newZoom: number; //Zoom is different compared between leaflet and datafordeler map. Therefore, by testing, +-5 is close to the same. - if (layerName === "Street view") { + if (layerName === this.streetViewName) { newZoom = Math.min(this.previousZoom + 5, this.map.options.maxZoom); } else { newZoom = Math.min(this.previousZoom - 5, this.map.options.maxZoom); + //If zoom is below 7, then center the map to denmark in satellite. + if (this.previousZoom < 7) { + const latlng: L.LatLng = new L.LatLng(this.satelliteCenterLat, this.satelliteCenterLng); + this.map.setView(latlng, 2); + return; + } } // Set the map's view to the previous center and adjusted zoom level. @@ -179,7 +191,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy private updateMarker() { this.marker?.setLatLng([this.coordinates.latitude, this.coordinates.longitude]); - this.map?.setView(this.marker._latlng, this.zoomLevel); + this.map?.setView(this.marker.getLatLng(), this.zoomLevel); } private placeMarkers() { @@ -321,30 +333,41 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy content: '
', }, }); - const streetTiles = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + + this.streetMap = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { attribution: '© OpenStreetMap', }).addTo(this.map); - const ortofotowmts = L.tileLayer( - `https://services.datafordeler.dk/GeoDanmarkOrto/orto_foraar_wmts/1.0.0/WMTS?username=${this.dafusername}&password=${this.dafpw}!&request=GetTile&version=1.0.0&service=WMTS&Layer=orto_foraar_wmts&style=default&format=image/jpeg&TileMatrixSet=KortforsyningTilingDK&TileMatrix={z}&TileRow={y}&TileCol={x}`, + this.ortofotowmts = L.tileLayer( + `https://services.datafordeler.dk/GeoDanmarkOrto/orto_foraar_wmts/1.0.0/WMTS?username=${this.dafusername}&password=${this.dafpw}&request=GetTile&version=1.0.0&service=WMTS&Layer=orto_foraar_wmts&style=default&format=image/jpeg&TileMatrixSet=KortforsyningTilingDK&TileMatrix={z}&TileRow={y}&TileCol={x}`, { attribution: '© Datafordeler', noWrap: true, } ); - // var hillshadeDAF = L.tileLayer( - // "https://services.datafordeler.dk/DHMhoejdekurver/DHMhoejdekurver_GML3/1.0.0/WFS?username=MSLFWDKAZS&password=Rosenkrantzgade1!&service=WFS&request=getfeature&typename=Formkurve0_5&Version=2.0.0" - // ) + this.heightsMapWms = L.tileLayer.wms( + `https://services.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS?username=${this.dafusername}&password=${this.dafpw}`, + { + transparent: "TRUE", + styles: "gul", + format: "image/png", + layers: "dhm_kurve_0_5_m", + version: "1.3.0", + attribution: '© Datafordeler', + noWrap: true, + crs: this.datafordelerCrs, + } as any //has to be any since transparent has to be "TRUE" but the type expects a boolean + ); // Define layer groups for layer control - var baseLayers = { - "Street view": streetTiles, - "Test - Datafordeleren": ortofotowmts, + var baseLayers: L.Control.LayersObject = { + [this.streetViewName]: this.streetMap, + [this.datafordelerName ?? "Satellit Danmark"]: this.ortofotowmts, }; - var overlays = { - // "Street view": hillshadeDAF, + var overlays: L.Control.LayersObject = { + [this.heightCurvesName ?? "Højdekurver (0,5 m)"]: this.heightsMapWms, }; const layerControl = L.control.layers(baseLayers, overlays).addTo(this.map); @@ -354,12 +377,15 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy if (this.coordinateList) { const currentZoom = this.map.getZoom(); + //The layerControl type doesnt have any way to check if map is set. Therefore we have to make it "any". + //If layerControl._map is NOT set, then the picker on the map is not shown. + var tempControl = layerControl as any; + if (currentZoom >= this.maxZoomToEnableLayerChange) { layerControl.remove(); - } else { - if (!this.map.hasLayer(layerControl)) { - layerControl.addTo(this.map); - } + } else if (!tempControl._map) { + //This seems to be the best way to remove and add the layer control, with fewest adds to layers. + layerControl.addTo(this.map); } } }); diff --git a/src/assets/env.js b/src/assets/env.js index e5910c0a..ff09815f 100644 --- a/src/assets/env.js +++ b/src/assets/env.js @@ -2,8 +2,8 @@ (function (window) { window["env"] = window["env"] || {}; window["env"].PRODUCTION = false; - window["env"].BASE_URL = 'http://localhost:3000/api/v1/'; // For local testing + window["env"].BASE_URL = "http://localhost:3000/api/v1/"; // For local testing window["env"].TABLE_PAGE_SIZE = 25; // For local testing - window["env"].DAF_USERNAME = "MSLFWDKAZS"; // For local testing - window["env"].DAF_PASSWORD = "Rosenkrantzgade1"; // For local testing - })(this); + window["env"].DAF_USERNAME = ""; // For local testing + window["env"].DAF_PASSWORD = ""; // For local testing +})(this); diff --git a/src/assets/env.template.js b/src/assets/env.template.js index a49bcf61..c60d9756 100644 --- a/src/assets/env.template.js +++ b/src/assets/env.template.js @@ -4,4 +4,6 @@ window["env"].PRODUCTION = "${PRODUCTION}"; window["env"].BASE_URL = "${BASE_URL}"; window["env"].TABLE_PAGE_SIZE = "${TABLE_PAGE_SIZE}"; - })(this); \ No newline at end of file + window["env"].DAF_USERNAME = "${DAF_USERNAME}"; + window["env"].DAF_PASSWORD = "${DAF_PASSWORD}"; +})(this); diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json index ea1b4301..ac8c1daa 100644 --- a/src/assets/i18n/da.json +++ b/src/assets/i18n/da.json @@ -1242,5 +1242,8 @@ "GIVE-DATATARGET-CLIENTSECRET-PLACEHOLDER": "Client's kode" } }, - "DBLCLICKINFO": "Dobbeltklik på kortet eller træk i markøren for at flytte markøren" + "DBLCLICKINFO": "Dobbeltklik på kortet eller træk i markøren for at flytte markøren", + "HEIGHTCURVESINFO": "Højdekurver vises kun det er valgt, og man er zoomet langt nok ind.", + "HEIGHTCURVES": "Højdekurver (0,5 m)", + "SATELLITEDENMARK": "Satellit Danmark" } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 977a4b26..fcdd018a 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -41,5 +41,8 @@ "NAME-ASCENDING": "Name: acsending", "NAME-DESCENDING": "Name: faldende" }, - "DBLCLICKINFO": "Doubleclick on the map or drag the marker to move the marker" + "DBLCLICKINFO": "Doubleclick on the map or drag the marker to move the marker", + "HEIGHTCURVESINFO": "Height curves will only be shown if it's selected, and if you are zoomed in far enough.", + "HEIGHTCURVES": "Height curves (0,5 m)", + "SATELLITEDENMARK": "Satellite Denmark" } diff --git a/tsconfig.json b/tsconfig.json index 32950e45..d0c6f00c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,35 +1,36 @@ { - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "module": "es2020", - "moduleResolution": "node", - "importHelpers": true, - "target": "es2015", - "lib": ["es2018", "dom"], - "allowSyntheticDefaultImports": true, - "typeRoots": ["node_modules/@types"], - "paths": { - "@shared-material": ["src/app/shared/modules/material.module"], - "@shared/*": ["src/app/shared/*"], - "@admin/*": ["src/app/admin"], - "@applications/*": ["src/app/applications/*"], - "@auth/*": ["src/app/auth/*"], - "@navbar/*": ["src/app/navbar/*"], - "@payload-decoder/*": ["src/app/payload-decoder/*"], - "@profiles/*": ["src/app/profiles/*"], - "@sigfox/*": ["src/app/sigfox/*"], - "@environments/*": ["src/environments/*"], - "@app/*": ["src/app/*"] + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "es2020", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "lib": ["es2018", "dom"], + "allowSyntheticDefaultImports": true, + "typeRoots": ["node_modules/@types"], + "paths": { + "@shared-material": ["src/app/shared/modules/material.module"], + "@shared/*": ["src/app/shared/*"], + "@admin/*": ["src/app/admin"], + "@applications/*": ["src/app/applications/*"], + "@auth/*": ["src/app/auth/*"], + "@navbar/*": ["src/app/navbar/*"], + "@payload-decoder/*": ["src/app/payload-decoder/*"], + "@profiles/*": ["src/app/profiles/*"], + "@sigfox/*": ["src/app/sigfox/*"], + "@environments/*": ["src/environments/*"], + "@app/*": ["src/app/*"], + "timers": ["node_modules/timers-browserify"] + } + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true } - }, - "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true - } } From 18097d52abc114aaf764c3675c95b942e16d8948 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Fri, 19 Apr 2024 13:19:49 +0200 Subject: [PATCH 4/9] changed descriptions --- src/assets/i18n/da.json | 2409 +++++++++++++++++++-------------------- src/assets/i18n/en.json | 92 +- 2 files changed, 1249 insertions(+), 1252 deletions(-) diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json index ac8c1daa..397c4a9a 100644 --- a/src/assets/i18n/da.json +++ b/src/assets/i18n/da.json @@ -1,1249 +1,1246 @@ { - "GEN": { - "CANCEL": "Annuller", - "SHOW": "Vis", - "PER-PAGE": "Per side", - "DELETE": "Slet", - "BACK": "Tilbage", - "EDIT": "Redigér", - "APPLICATION": "Applikation", - "HTTP": "Generisk HTTP", - "SAVE": "Gem", - "KEY": "Nøgle", - "VALUE": "Værdi", - "NAME": "Navn", - "DESCRIPTION": "Beskrivelse", - "to": "til", - "ONLINE": "Online", - "OFFLINE": "Offline", - "NEVER-SEEN": "Aldrig set", - "DATE": "Dato", - "NO-DATA": "Der er ingen data at vise" - }, - "NAV": { - "APPLICATIONS": "Applikationer", - "APPLICATION": "Applikation", - "ALL-IOT-DEVICES": "Alle IoT enheder", - "LORA-GATEWAYS": "LoRaWAN gateways", - "DATATARGET": "Datatarget", - "MULTICAST": "Multicast", - "MY-DATATARGET": "Tilbage", - "DATATARGET-APPLIKATION": "for applikation:", - "PROFILES": "LoRaWAN profiler", - "PAYLOAD-DECODER": "Payload decoder", - "ORGANISATIONS": "Organisationer", - "PERMISSIONS": "Brugergrupper", - "USERS": "Brugere", - "LOGIN": "Login", - "ADMIN": "Administration", - "SIGFOX": "Sigfox", - "SIGFOX-ADMIN": "Sigfox administration", - "SIGFOX-DEVICE-TYPES": "Sigfox enhedstyper", - "SEARCH": "Søgeresultater", - "MENU-ITEM-MISC": "Generelt", - "DEVICE-MODEL": "Device model", - "BACK": "Tilbage", - "LOGOUT": "Log ud", - "HELP": "Hjælp", - "API-KEY": "API nøgler" - }, - "TOPBAR":{ - "SEARCH": { - "BUTTON": "Søg" + "GEN": { + "CANCEL": "Annuller", + "SHOW": "Vis", + "PER-PAGE": "Per side", + "DELETE": "Slet", + "BACK": "Tilbage", + "EDIT": "Redigér", + "APPLICATION": "Applikation", + "HTTP": "Generisk HTTP", + "SAVE": "Gem", + "KEY": "Nøgle", + "VALUE": "Værdi", + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "to": "til", + "ONLINE": "Online", + "OFFLINE": "Offline", + "NEVER-SEEN": "Aldrig set", + "DATE": "Dato", + "NO-DATA": "Der er ingen data at vise" }, - "DROPDOWN": { - "EDIT": "Rediger", - "DELETE": "Slet" - } - }, - "SNACK": { - "SAVE": "Gemt succesfuldt", - "DELETE": "Slettet succesfuldt", - "UPDATE": "Opdateret succesfuldt", - "FAIL": "Fejl - aktion ikke fuldført", - "LOADFAIL": "Fejl - kunne ikke loade", - "QUEUE": "Element sat i kø", - "CLOSE": "Luk", - "NODEVICES": "Kan ikke sende downlink - der er ingen devices!" - }, - "SEARCH": { - "ICON": "", - "TYPE": "Type", - "NAME": "Navn", - "ID": "Id", - "ORGANISATION": "Organisation", - "PLACEHOLDER": "Der kan søges efter IoT enheder, applikationer og gateways", - "QUERY": "resultater for", - "NO-RESULTS": "Du kun kan søge efter IoT enheder, applikationer og gateways", - "FETCHING": "Henter søgeresultater" - }, - "SIGFOX-GROUP": { - "NAME": "Sigfox administration", - "SIGFOX-GROUP": "Sigfox grupper", - "SIGFOX-LOGIN": "Sigfox API login", - "API-ACCESS": "For at kunne tilgå din Sigfox gruppe skal du først have oprettet en API adgang til gruppen i Sigfox. Denne skal bruges til at logge ind med nedenfor. Læs hvordan du opretter adgangen her -", - "LOGIN": "Login", - "ADMINISTRATION": { - "NAME": "Sigfox grupper", - "CREATE-NEW-GROUP": "Opret forbindelse til ny gruppe" + "NAV": { + "APPLICATIONS": "Applikationer", + "APPLICATION": "Applikation", + "ALL-IOT-DEVICES": "Alle IoT enheder", + "LORA-GATEWAYS": "LoRaWAN gateways", + "DATATARGET": "Datatarget", + "MULTICAST": "Multicast", + "MY-DATATARGET": "Tilbage", + "DATATARGET-APPLIKATION": "for applikation:", + "PROFILES": "LoRaWAN profiler", + "PAYLOAD-DECODER": "Payload decoder", + "ORGANISATIONS": "Organisationer", + "PERMISSIONS": "Brugergrupper", + "USERS": "Brugere", + "LOGIN": "Login", + "ADMIN": "Administration", + "SIGFOX": "Sigfox", + "SIGFOX-ADMIN": "Sigfox administration", + "SIGFOX-DEVICE-TYPES": "Sigfox enhedstyper", + "SEARCH": "Søgeresultater", + "MENU-ITEM-MISC": "Generelt", + "DEVICE-MODEL": "Device model", + "BACK": "Tilbage", + "LOGOUT": "Log ud", + "HELP": "Hjælp", + "API-KEY": "API nøgler" }, - "PROFILES": { - "NAME": "Sigfox enhedstyper", - "DEVICE-TYPE": "Sigfox enhedstyper", - "DEVICE-TYPE-NAME": "Navn", - "DEVICE-TYPE-CONTRACT-ID": "kontrakt id", - "DEVICE-TYPE-ALERT-EMAIL": "Alarm email", - "CREATE-NEW-DEVICE-TYPE": "Opret ny enhedstype", - "SAVE": "Gem enhedstype" - } - }, - "APPLICATION": { - "CREATE": "Opret applikation", - "SAVE": "Gem applikation", - "DELETE": "Slet applikation", - "DELETE-HAS-DEVICES-PROMPT": "Der er knyttet IoT-enheder til denne applikation. Disse vil også blive slettet. Slet alligevel?", - "DELETE-HAS-SIGFOX-DEVICES-PROMPT": "Applikationen kan ikke slettes, da der er knyttet Sigfox enheder til den", - "NAME": "Applikationens navn", - "DESCRIPTION": "Applikationens beskrivelse", - "ATTACHED-IOT": "Tilknyttede IoT enheder", - "DATATARGET-SHOW": "Tilknyttede data targets", - "MULTICAST-SHOW": "Tilknyttede multicast", - "MULTICAST-GROUPS": "Multicast-grupper", - "IMPORT-CSV": "Bulk import", - "EXPORT-CSV": "Eksport (CSV)", - "IOT-DEVICES": "IoT-enheder", - "BULK": { - "TEMPLATE": { - "GENERIC": "Generic HTTP sample", - "LORAWAN": "LoRaWan sample", - "SIGFOX": "Sigfox sample" - }, - "TITLE": "Import af .csv", - "DOWNLOAD": "Download sample CSV fil", - "DROPFILE": "Klik eller drop din .csv file her", - "NAME": "Navn", - "TYPE": "Type", - "IMPORTSTATUS": "Status", - "ERROR": "Fejl", - "EMPTY": "Der er ingen enheder at vise endnu", - "FILEFORMATERRORMESSAGE": "Forkert filformat, upload en .csv fil" + "TOPBAR": { + "SEARCH": { + "BUTTON": "Søg" + }, + "DROPDOWN": { + "EDIT": "Rediger", + "DELETE": "Slet" + } }, - "STATUS": { - "NONE": "-", - "IN-OPERATION": "I drift", - "PROJECT": "Projekt", - "PROTOTYPE": "Prototype", - "OTHER": "Andet" + "SNACK": { + "SAVE": "Gemt succesfuldt", + "DELETE": "Slettet succesfuldt", + "UPDATE": "Opdateret succesfuldt", + "FAIL": "Fejl - aktion ikke fuldført", + "LOADFAIL": "Fejl - kunne ikke loade", + "QUEUE": "Element sat i kø", + "CLOSE": "Luk", + "NODEVICES": "Kan ikke sende downlink - der er ingen devices!" }, - "DETAILS": "Detaljer", - "METADATA-FIELD": { - "PERMISSIONS": "Brugergrupper", - "STATUS": "Status", - "START-DATE": "Startdato", - "END-DATE": "Slutdato", - "CATEGORY": "Kategori", - "OWNER": "Ejer", - "CONTACT-PERSON": "Kontaktperson", - "CONTACT-EMAIL": "Kontaktmail", - "CONTACT-PHONE": "Kontakttelefon", - "PERSONAL-DATA": "Persondata", - "HARDWARE": "Hardware", - "CONTROLLED-PROPERTY": "Data", - "DEVICE-TYPE": "Forbindelsesteknologi" - } - }, - "GATEWAY": { - "DETAILS":"Detaljer", - "CREATED": "Oprettet", - "UPDATED": "Senest opdateret", - "DESCRIPTION": "LoRaWAN gateway beskrivelse", - "LONGITUDE": "Længdegrad", - "LATITUDE": "Breddegrad", - "ALTITUDE": "Højde", - "SAVE": "Gem gateway", - "ID": "Gateway id", - "LOCATION": "Placering", - "TAGS": "Tags", - "NAME": "Gatewayens navn", - "STATS": "Statistik", - "STATS-RXPACKETSRECEIVED": "Pakker modtaget", - "STATS-TXPACKETSEMITTED": "Pakker sendt", - "STATS-TIMESTAMP": "Tidspunkt", - "TABEL-TAB": "Listevisning", - "DROPDOWNFILTER": "Organisationsfilter", - "DROPDOWNDEFAULT": "Alle", - "MAP-TAB": "Kort", - "ORGANIZATION": "Organisation", - "ONLINE-STATUS": "Online status", - "DATA-PACKETS": "Datapakker", - "PLACEMENT-LABEL": "Placering", - "PLACEMENT": { - "NONE" : "-", - "OUTDOORS" : "Udendørs", - "INDOORS" : "Indendørs", - "OTHER" : "Andet" + "SEARCH": { + "ICON": "", + "TYPE": "Type", + "NAME": "Navn", + "ID": "Id", + "ORGANISATION": "Organisation", + "PLACEHOLDER": "Der kan søges efter IoT enheder, applikationer og gateways", + "QUERY": "resultater for", + "NO-RESULTS": "Du kun kan søge efter IoT enheder, applikationer og gateways", + "FETCHING": "Henter søgeresultater" }, - "STATUS-NAME": "Status", - "STATUS": { - "NONE": "-", - "IN-OPERATION": "I drift", - "PROJECT": "Projekt", - "PROTOTYPE": "Prototype", - "OTHER": "Andet" - } - }, - "IOT-DEVICE": { - "CREATE": "Gem IoT enhed", - "SAVE": "Gem IoT enhed", - "DELETE": "Slet IoT enhed", - "RESTART": "Genstart IoT enhed" - }, - "DATATARGET": { - "DETAILS": "Detaljer", - "SAVE": "Gem datatarget", - "CREATE": "Opret", - "READMORE": "Læs mere", - "DESCRIPTION": "Beskrivelse", - "URL": "URL", - "TIMEOUT": "Timeout", - "TYPE": "Type", - "NAME": "Datatarget navn", - "SHOW-OPTIONS":"Håndter datatarget", - "DELETE": "Slet", - "RELATIONS": "Tilknyttede IoT enheder og payload decoders", - "PAYLOADEDECODER": "Payload decoder", - "NO-PAYLOADDECODER": "Ingen payload decoder", - "IOTDEVICE": "IoT enhed(er)", - "NO-RELATIONS": "ingen tilknyttede relationer", - "TENANT": "Tenant", - "NO-TENANT": "Ingen Tenant angivet", - "CONTEXT": "Context", - "NO-CONTEXT": "Ingen Context angivet", - "AUTHORIZATIONHEADER": "Authorization header", - "TOKENENDPOINT": "Token endpoint URL", - "CLIENTID": "Client ID", - "CLIENTSECRET": "Client secret", - "NO-AUTHORIZATIONHEADER": "Ingen Authorization header angivet", - "NO-TOKENENDPOINT": "Ingen token endpoint URL", - "NO-CLIENTID": "Ingen client ID", - "NO-CLIENTSECRET": "Ingen client secret", - "ADD-TO-OPENDATADK": "Send data til OpenDataDK", - "OPENDATA-DK": { - "TYPE": "OpenDataDK", - "NAME": "Open Data DK", - "DESCRIPTION": "Offentliggør datasæt i Open Data DK's åbne dataportal." + "SIGFOX-GROUP": { + "NAME": "Sigfox administration", + "SIGFOX-GROUP": "Sigfox grupper", + "SIGFOX-LOGIN": "Sigfox API login", + "API-ACCESS": "For at kunne tilgå din Sigfox gruppe skal du først have oprettet en API adgang til gruppen i Sigfox. Denne skal bruges til at logge ind med nedenfor. Læs hvordan du opretter adgangen her -", + "LOGIN": "Login", + "ADMINISTRATION": { + "NAME": "Sigfox grupper", + "CREATE-NEW-GROUP": "Opret forbindelse til ny gruppe" + }, + "PROFILES": { + "NAME": "Sigfox enhedstyper", + "DEVICE-TYPE": "Sigfox enhedstyper", + "DEVICE-TYPE-NAME": "Navn", + "DEVICE-TYPE-CONTRACT-ID": "kontrakt id", + "DEVICE-TYPE-ALERT-EMAIL": "Alarm email", + "CREATE-NEW-DEVICE-TYPE": "Opret ny enhedstype", + "SAVE": "Gem enhedstype" + } }, - "NO-OPENDATA-DK": "Der er ikke oprettet nogen datadeling med Open Data DK endnu", - "HTTP_PUSH": { - "TYPE": "HTTP Push", - "NAME": "Generisk HTTP Push", - "DESCRIPTION": "Send data med HTTP POST requests til et HTTP URL endpoint" + "APPLICATION": { + "CREATE": "Opret applikation", + "SAVE": "Gem applikation", + "DELETE": "Slet applikation", + "DELETE-HAS-DEVICES-PROMPT": "Der er knyttet IoT-enheder til denne applikation. Disse vil også blive slettet. Slet alligevel?", + "DELETE-HAS-SIGFOX-DEVICES-PROMPT": "Applikationen kan ikke slettes, da der er knyttet Sigfox enheder til den", + "NAME": "Applikationens navn", + "DESCRIPTION": "Applikationens beskrivelse", + "ATTACHED-IOT": "Tilknyttede IoT enheder", + "DATATARGET-SHOW": "Tilknyttede data targets", + "MULTICAST-SHOW": "Tilknyttede multicast", + "MULTICAST-GROUPS": "Multicast-grupper", + "IMPORT-CSV": "Bulk import", + "EXPORT-CSV": "Eksport (CSV)", + "IOT-DEVICES": "IoT-enheder", + "BULK": { + "TEMPLATE": { + "GENERIC": "Generic HTTP sample", + "LORAWAN": "LoRaWan sample", + "SIGFOX": "Sigfox sample" + }, + "TITLE": "Import af .csv", + "DOWNLOAD": "Download sample CSV fil", + "DROPFILE": "Klik eller drop din .csv file her", + "NAME": "Navn", + "TYPE": "Type", + "IMPORTSTATUS": "Status", + "ERROR": "Fejl", + "EMPTY": "Der er ingen enheder at vise endnu", + "FILEFORMATERRORMESSAGE": "Forkert filformat, upload en .csv fil" + }, + "STATUS": { + "NONE": "-", + "IN-OPERATION": "I drift", + "PROJECT": "Projekt", + "PROTOTYPE": "Prototype", + "OTHER": "Andet" + }, + "DETAILS": "Detaljer", + "METADATA-FIELD": { + "PERMISSIONS": "Brugergrupper", + "STATUS": "Status", + "START-DATE": "Startdato", + "END-DATE": "Slutdato", + "CATEGORY": "Kategori", + "OWNER": "Ejer", + "CONTACT-PERSON": "Kontaktperson", + "CONTACT-EMAIL": "Kontaktmail", + "CONTACT-PHONE": "Kontakttelefon", + "PERSONAL-DATA": "Persondata", + "HARDWARE": "Hardware", + "CONTROLLED-PROPERTY": "Data", + "DEVICE-TYPE": "Forbindelsesteknologi" + } }, - "FIWARE": { - "TYPE": "FIWARE", - "NAME": "FIWARE connection", - "DESCRIPTION": "En integration til FIWARE Context Broker" + "GATEWAY": { + "DETAILS": "Detaljer", + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "DESCRIPTION": "LoRaWAN gateway beskrivelse", + "LONGITUDE": "Længdegrad", + "LATITUDE": "Breddegrad", + "ALTITUDE": "Højde", + "SAVE": "Gem gateway", + "ID": "Gateway id", + "LOCATION": "Placering", + "TAGS": "Tags", + "NAME": "Gatewayens navn", + "STATS": "Statistik", + "STATS-RXPACKETSRECEIVED": "Pakker modtaget", + "STATS-TXPACKETSEMITTED": "Pakker sendt", + "STATS-TIMESTAMP": "Tidspunkt", + "TABEL-TAB": "Listevisning", + "DROPDOWNFILTER": "Organisationsfilter", + "DROPDOWNDEFAULT": "Alle", + "MAP-TAB": "Kort", + "ORGANIZATION": "Organisation", + "ONLINE-STATUS": "Online status", + "DATA-PACKETS": "Datapakker", + "PLACEMENT-LABEL": "Placering", + "PLACEMENT": { + "NONE": "-", + "OUTDOORS": "Udendørs", + "INDOORS": "Indendørs", + "OTHER": "Andet" + }, + "STATUS-NAME": "Status", + "STATUS": { + "NONE": "-", + "IN-OPERATION": "I drift", + "PROJECT": "Projekt", + "PROTOTYPE": "Prototype", + "OTHER": "Andet" + } }, - "MQTT": { - "TYPE": "MQTT", - "NAME": "MQTT forbindelse", - "DESCRIPTION": "En integration til MQTT Broker", - "BROKER-URL": "Broker URL", - "PORT": "Port", - "TOPIC": "Topic", - "QOS": "QoS", - "USERNAME": "Brugernavn", - "PASSWORD": "Adgangskode" + "IOT-DEVICE": { + "CREATE": "Gem IoT enhed", + "SAVE": "Gem IoT enhed", + "DELETE": "Slet IoT enhed", + "RESTART": "Genstart IoT enhed" + }, + "DATATARGET": { + "DETAILS": "Detaljer", + "SAVE": "Gem datatarget", + "CREATE": "Opret", + "READMORE": "Læs mere", + "DESCRIPTION": "Beskrivelse", + "URL": "URL", + "TIMEOUT": "Timeout", + "TYPE": "Type", + "NAME": "Datatarget navn", + "SHOW-OPTIONS": "Håndter datatarget", + "DELETE": "Slet", + "RELATIONS": "Tilknyttede IoT enheder og payload decoders", + "PAYLOADEDECODER": "Payload decoder", + "NO-PAYLOADDECODER": "Ingen payload decoder", + "IOTDEVICE": "IoT enhed(er)", + "NO-RELATIONS": "ingen tilknyttede relationer", + "TENANT": "Tenant", + "NO-TENANT": "Ingen Tenant angivet", + "CONTEXT": "Context", + "NO-CONTEXT": "Ingen Context angivet", + "AUTHORIZATIONHEADER": "Authorization header", + "TOKENENDPOINT": "Token endpoint URL", + "CLIENTID": "Client ID", + "CLIENTSECRET": "Client secret", + "NO-AUTHORIZATIONHEADER": "Ingen Authorization header angivet", + "NO-TOKENENDPOINT": "Ingen token endpoint URL", + "NO-CLIENTID": "Ingen client ID", + "NO-CLIENTSECRET": "Ingen client secret", + "ADD-TO-OPENDATADK": "Send data til OpenDataDK", + "OPENDATA-DK": { + "TYPE": "OpenDataDK", + "NAME": "Open Data DK", + "DESCRIPTION": "Offentliggør datasæt i Open Data DK's åbne dataportal." + }, + "NO-OPENDATA-DK": "Der er ikke oprettet nogen datadeling med Open Data DK endnu", + "HTTP_PUSH": { + "TYPE": "HTTP Push", + "NAME": "Generisk HTTP Push", + "DESCRIPTION": "Send data med HTTP POST requests til et HTTP URL endpoint" + }, + "FIWARE": { + "TYPE": "FIWARE", + "NAME": "FIWARE connection", + "DESCRIPTION": "En integration til FIWARE Context Broker" + }, + "MQTT": { + "TYPE": "MQTT", + "NAME": "MQTT forbindelse", + "DESCRIPTION": "En integration til MQTT Broker", + "BROKER-URL": "Broker URL", + "PORT": "Port", + "TOPIC": "Topic", + "QOS": "QoS", + "USERNAME": "Brugernavn", + "PASSWORD": "Adgangskode" + }, + "OPENDATADK": { + "TYPE": "OpenDataDK" + } + }, + "MULTICAST": { + "SAVE": "Gem multicast", + "BASIC-DETAILS": "Basale detaljer", + "LORAWAN-DETAILS": "LoRaWAN detailjer", + "GROUPNAME": "Gruppe navn", + "ADDRESS": "Adresse", + "NETWORK-KEY": "Network session key", + "APPLICATION-KEY": "Network application key", + "FRAMECOUNTER": "Frame counter", + "DATARATE": "Data rate", + "FREQUENCY": "Frekvens (Hz)", + "GROUPTYPE": "Gruppe type", + "PERIODICITY": "Periodicitet", + "IOTDEVICE": "IoT enheder", + "DOWNLINK": { + "PORT": "Angiv den ønskede port", + "PAYLOAD": "Angiv det ønskede payload", + "START": "Sæt downlink i kø" + } }, "OPENDATADK": { - "TYPE": "OpenDataDK" - } - }, - "MULTICAST": { - "SAVE": "Gem multicast", - "BASIC-DETAILS": "Basale detaljer", - "LORAWAN-DETAILS": "LoRaWAN detailjer", - "GROUPNAME": "Gruppe navn", - "ADDRESS": "Adresse", - "NETWORK-KEY": "Network session key", - "APPLICATION-KEY": "Network application key", - "FRAMECOUNTER": "Frame counter", - "DATARATE": "Data rate", - "FREQUENCY": "Frekvens (Hz)", - "GROUPTYPE": "Gruppe type", - "PERIODICITY": "Periodicitet", - "IOTDEVICE": "IoT enheder", - "DOWNLINK": { - "PORT": "Angiv den ønskede port", - "PAYLOAD": "Angiv det ønskede payload", - "START": "Sæt downlink i kø" - } - }, - "OPENDATADK": { - "INTRO": { - "GUIDE_HEADER": "Guide til Open Data DK-data target", - "GUIDE1": "Det er nemt at sende data fra OS2iot til Open Data DK (ODDK). Første gange der oprettes et ODDK-data target, bliver det muligt for ODDK at høste oplysninger om jeres datasæt til opendata.dk. Når først høstningen er sat op, vil alle jeres ODDK-data targets automatisk blive oprettet og opdateret på opendata.dk.", - "GUIDE2": "Senest modtagede datapakke udstilles via OS2iots API og kan hentes via en URL angivet på det enkelte ODDK-data target og på jeres datasæt på opendata.dk. Der opsamles og udstilles altså ikke historisk data i hverken OS2iot eller på opendata.dk.", - "GUIDE3": "Nye ODDK-data targets høstes automatisk, og I behøver ikke gøre noget aktivt for at gøre dem tilgængelige på opendata.dk. Hvis I sletter et ODDK-data target forsvinder det af sig selv fra opendata.dk.", - "GUIDE4": "Datasæt fra OS2iot publiceres under licensen", - "GUIDE5": "Creative Commons CC0 1.0 Universel.", - "PROCEDURE_HEADER": "Procedure ved oprettelse af første data target", - "PROCEDURE1": "Bliv medlem af Open Data DK, hvis jeres myndighed ikke allerede er det:", - "PROCEDURE2": "Opret første ODDK-data target i OS2iot", - "PROCEDURE3": "Ved oprettelsen tilbyder OS2iot at sende en mail til Open Data DK's administrator, som sætter høstningen op. I må forvente op til 2-3 ugers behandlingstid.", - "PROCEDURE4": "Når høstningen er aktiv, kan datasæt findes og beriges på", - "PROCEDURE4_LINK": "ODDK administrationsmodulet" + "INTRO": { + "GUIDE_HEADER": "Guide til Open Data DK-data target", + "GUIDE1": "Det er nemt at sende data fra OS2iot til Open Data DK (ODDK). Første gange der oprettes et ODDK-data target, bliver det muligt for ODDK at høste oplysninger om jeres datasæt til opendata.dk. Når først høstningen er sat op, vil alle jeres ODDK-data targets automatisk blive oprettet og opdateret på opendata.dk.", + "GUIDE2": "Senest modtagede datapakke udstilles via OS2iots API og kan hentes via en URL angivet på det enkelte ODDK-data target og på jeres datasæt på opendata.dk. Der opsamles og udstilles altså ikke historisk data i hverken OS2iot eller på opendata.dk.", + "GUIDE3": "Nye ODDK-data targets høstes automatisk, og I behøver ikke gøre noget aktivt for at gøre dem tilgængelige på opendata.dk. Hvis I sletter et ODDK-data target forsvinder det af sig selv fra opendata.dk.", + "GUIDE4": "Datasæt fra OS2iot publiceres under licensen", + "GUIDE5": "Creative Commons CC0 1.0 Universel.", + "PROCEDURE_HEADER": "Procedure ved oprettelse af første data target", + "PROCEDURE1": "Bliv medlem af Open Data DK, hvis jeres myndighed ikke allerede er det:", + "PROCEDURE2": "Opret første ODDK-data target i OS2iot", + "PROCEDURE3": "Ved oprettelsen tilbyder OS2iot at sende en mail til Open Data DK's administrator, som sætter høstningen op. I må forvente op til 2-3 ugers behandlingstid.", + "PROCEDURE4": "Når høstningen er aktiv, kan datasæt findes og beriges på", + "PROCEDURE4_LINK": "ODDK administrationsmodulet" + }, + "QUESTION": { + "GIVE-OPENDATADK-NAME": "Datasæt titel", + "GIVE-OPENDATADK-NAME-PLACEHOLDER": "Datasæt titel", + "GIVE-OPENDATADK-NAME-INFO": "Overordnet titel på datasættet på opendata.dk", + "GIVE-OPENDATADK-RESOURCETITLE": "Data ressource titel", + "GIVE-OPENDATADK-RESOURCETITLE-PLACEHOLDER": "Kloaksensorer - Aarhus kommune", + "GIVE-OPENDATADK-RESOURCETITLE-INFO": "Titel på den ressource, der vises i datasættet på opendata.dk", + "GIVE-OPENDATADK-DESCRIPTION": "Beskrivelse", + "GIVE-OPENDATADK-DESCRIPTION-PLACEHOLDER": "Beskrivelse", + "GIVE-OPENDATADK-KEYWORDS": "Angiv emneord", + "GIVE-OPENDATADK-KEYWORDS-PLACEHOLDER": "Vælg nøgleord fra drop-down", + "GIVE-OPENDATADK-AUTHORNAME": "Dataejer", + "GIVE-OPENDATADK-AUTHORNAME-PLACEHOLDER": "Jens Jensen", + "GIVE-OPENDATADK-AUTHORNAME-INFO": "Ansvarlig afdeling eller person", + "GIVE-OPENDATADK-AUTHOR-EMAIL": "Dataejers e-mail", + "GIVE-OPENDATADK-AUTHOR-EMAIL-PLACEHOLDER": "jens@jensen.dk", + "ACCEPT-TERMS-PART-ONE": "Jeg accepterer hermed, at datasættet udgives under en", + "TERMS-AND-CONDITIONS": "Creative Commons CC0 1.0 Universel (CC0 1.0) licens" + }, + "DETAILS": { + "NAME": "Datasæt titel", + "RESOURCETITLE": "Datakilde titel", + "DESCRIPTION": "Beskrivelse", + "KEYWORDS": "Emneord", + "LICENSE": "Licens", + "AUTHORNAME": "Forfatterens navn", + "AUTHOREMAIL": "Forfatterens email", + "URL": "Endpoint til hentning af data", + "NA": "Intet angivet" + }, + "MAIL": { + "DIALOG_TITLE": "Anmod Open Data DK om høstning af data", + "DIALOG_TEXT1": "For at få", + "DIALOG_TEXT2": "s ODDK datatargets gjort synlige på opendata.dk, skal Open Data DK have en anmodning om at begynde at høste jeres oplysninger fra OS2iot. Hvis du udfylder oplysningerne herunder, sender OS2iot automatisk en mail til Open Data DK", + "DIALOG_CONFIRM": "Send mail", + "GIVE-OPENDATADK-ORGNAME": "Organisation (i Open Data DK)", + "GIVE-OPENDATADK-ORGNAME-PLACEHOLDER": "Organisation", + "GIVE-OPENDATADK-COMMENT": "Eventuel kommentar", + "GIVE-OPENDATADK-COMMENT-PLACEHOLDER": "Kort kommentar", + "SELECTED_ORG_FALLBACK": "organisationen", + "WARNING": "Advarsel", + "WARNING-TEXT": "Hvis Open Data DK ikke får besked om integrationen, vises datasættet ikke på opendata.dk", + "NEVER-AGAIN": "Vis ikke igen. Open Data DK høster allerede denne organisation fra OS2iot." + } }, - "QUESTION": { - "GIVE-OPENDATADK-NAME": "Datasæt titel", - "GIVE-OPENDATADK-NAME-PLACEHOLDER": "Datasæt titel", - "GIVE-OPENDATADK-NAME-INFO": "Overordnet titel på datasættet på opendata.dk", - "GIVE-OPENDATADK-RESOURCETITLE": "Data ressource titel", - "GIVE-OPENDATADK-RESOURCETITLE-PLACEHOLDER": "Kloaksensorer - Aarhus kommune", - "GIVE-OPENDATADK-RESOURCETITLE-INFO": "Titel på den ressource, der vises i datasættet på opendata.dk", - "GIVE-OPENDATADK-DESCRIPTION": "Beskrivelse", - "GIVE-OPENDATADK-DESCRIPTION-PLACEHOLDER": "Beskrivelse", - "GIVE-OPENDATADK-KEYWORDS": "Angiv emneord", - "GIVE-OPENDATADK-KEYWORDS-PLACEHOLDER": "Vælg nøgleord fra drop-down", - "GIVE-OPENDATADK-AUTHORNAME": "Dataejer", - "GIVE-OPENDATADK-AUTHORNAME-PLACEHOLDER": "Jens Jensen", - "GIVE-OPENDATADK-AUTHORNAME-INFO": "Ansvarlig afdeling eller person", - "GIVE-OPENDATADK-AUTHOR-EMAIL": "Dataejers e-mail", - "GIVE-OPENDATADK-AUTHOR-EMAIL-PLACEHOLDER": "jens@jensen.dk", - "ACCEPT-TERMS-PART-ONE": "Jeg accepterer hermed, at datasættet udgives under en", - "TERMS-AND-CONDITIONS": "Creative Commons CC0 1.0 Universel (CC0 1.0) licens" + "APPLICATION-TABLE": { + "NAME": "Navn", + "IOT-DEVICES": "IoT enheder", + "UPDATED": "Senest opdateret", + "DATA-TARGETS": "Datatargets", + "STATUS": "Status", + "START-DATE": "Startdato", + "END-DATE": "Slutdato", + "CATEGORY": "Kategori", + "OWNER": "Ejer", + "CONTACT-PERSON": "Kontaktperson", + "PERSONAL-DATA": "Persondata", + "CONTROLLED-PROPERTIES": "Data", + "DEVICE-TYPES": "Forbindelsesteknologi", + "OPEN-DATA-DK": "Open Data DK" + }, + "IOT-TABLE": { + "APPLICATION": "Applikation", + "NETWORK-TECHNOLOGY": "Netværksteknologi", + "ALARM": "Alarm", + "BATTERY": "Batteri", + "ACTIVE": "Sidst aktiv", + "DATA": "Data(24 timer)", + "ORGANISATION": "Organisation", + "NAME": "Navn", + "RSSI": "RSSI (dBm)", + "SNR": "SNR (dB)", + "DEV-EUI": "DevEUI", + "APP-KEY": "AppKey (OTAA)" }, - "DETAILS": { - "NAME": "Datasæt titel", - "RESOURCETITLE": "Datakilde titel", - "DESCRIPTION": "Beskrivelse", - "KEYWORDS": "Emneord", - "LICENSE": "Licens", - "AUTHORNAME": "Forfatterens navn", - "AUTHOREMAIL": "Forfatterens email", - "URL": "Endpoint til hentning af data", - "NA": "Intet angivet" + "LORA-GATEWAY-TABLE": { + "NAME": "Navn", + "GATEWAYID": "Gateway ID", + "LOCATION": "Placering", + "LAST-SEEN-AT": "Seneste aktivitet", + "STATUS": "Status", + "ORGANIZATION": "Organisation", + "PACKETS-RECEIVED": "Pakker modtaget", + "PACKETS-SENT": "Pakker sendt", + "PLACEMENT": "Placering", + "MODEL-NAME": "Modelnavn", + "ANTENNA-TYPE": "Antennetype (dBi)", + "RESPONSIBLE-NAME": "Gateway-ansvarlig", + "RESPONSIBLE-EMAIL": "Kontaktmail", + "RESPONSIBLE-PHONE-NUMBER": "Kontakttelefon", + "OPERATIONAL-NAME": "Driftansvarlig", + "OPERATIONAL-EMAIL": "Kontaktmail - drift", + "TAGS": "Tags", + "CREATED-AT": "Oprettelsesdato" + }, + "LORA-GATEWAY-STATUS": { + "TITLE": "LoRaWAN online status historik", + "TIMESTAMP": "Tidspunkt", + "INTERVAL": { + "DAY": "Seneste døgn", + "WEEK": "Seneste uge", + "MONTH": "Seneste måned" + } + }, + "DEVICE-MODEL": { + "DELETE-FAILED": "Slet Fejlede", + "HEADLINE": "Detaljer", + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "ID": "Unik identifikator", + "TABLE": { + "ID": "Id" + }, + "NAME": "Navn", + "TYPE": "Type", + "BRANDNAME": "Mærke", + "MODELNAME": "Model", + "MANUFACTURERNAME": "Producentens navn", + "CONTROLLEDPROPERTY": "Kontrol egenskaber", + "CATEGORY": "Kategori", + "SUPPORTEDUNITS": "Måleenheder", + "FUNCTION": "Enhedsfunktioner", + "ENERGYLIMITATIONCLASS": "Energibegrænsningsklassen", + "SUPPORTEDPROTOCOL": "Understøttede protokoller", + "DETAIL-TITLE": "Device model detalje", + "DEVICE-MODEL": "Device nodel", + "SHOW-OPTIONS": "Håndter device model" + }, + "LORA-GATEWAY-TABLE-ROW": { + "SHOW-OPTIONS": "Håndtér gateway" + }, + "LORA-GATEWAY": { + "CREATE": "Opret LoRaWAN gateway" + }, + "DATATARGET-TABLE": { + "NAME": "Navn", + "TYPE": "Type" + }, + "MULTICAST-TABLE": { + "NAME": "Gruppenavn", + "TYPE": "Gruppetype" + }, + "IOT-DEVICE-TYPES": { + "GENERIC_HTTP": "Generisk HTTP", + "LORAWAN": "LoRaWAN", + "SIGFOX": "Sigfox", + "MQTT": "MQTT", + "MQTT_INTERNAL_BROKER": "MQTT intern broker", + "MQTT_EXTERNAL_BROKER": "MQTT ekstern broker", + "OTHER": "Andet" + }, + "ACTIVITY": { + "NEVER": "Aldrig set" }, - "MAIL": { - "DIALOG_TITLE": "Anmod Open Data DK om høstning af data", - "DIALOG_TEXT1": "For at få", - "DIALOG_TEXT2": "s ODDK datatargets gjort synlige på opendata.dk, skal Open Data DK have en anmodning om at begynde at høste jeres oplysninger fra OS2iot. Hvis du udfylder oplysningerne herunder, sender OS2iot automatisk en mail til Open Data DK", - "DIALOG_CONFIRM": "Send mail", - "GIVE-OPENDATADK-ORGNAME": "Organisation (i Open Data DK)", - "GIVE-OPENDATADK-ORGNAME-PLACEHOLDER": "Organisation", - "GIVE-OPENDATADK-COMMENT": "Eventuel kommentar", - "GIVE-OPENDATADK-COMMENT-PLACEHOLDER": "Kort kommentar", - "SELECTED_ORG_FALLBACK": "organisationen", - "WARNING": "Advarsel", - "WARNING-TEXT": "Hvis Open Data DK ikke får besked om integrationen, vises datasættet ikke på opendata.dk", - "NEVER-AGAIN": "Vis ikke igen. Open Data DK høster allerede denne organisation fra OS2iot." - } - }, - "APPLICATION-TABLE": { - "NAME": "Navn", - "IOT-DEVICES": "IoT enheder", - "UPDATED": "Senest opdateret", - "DATA-TARGETS": "Datatargets", - "STATUS": "Status", - "START-DATE": "Startdato", - "END-DATE": "Slutdato", - "CATEGORY": "Kategori", - "OWNER": "Ejer", - "CONTACT-PERSON": "Kontaktperson", - "PERSONAL-DATA": "Persondata", - "CONTROLLED-PROPERTIES": "Data", - "DEVICE-TYPES": "Forbindelsesteknologi", - "OPEN-DATA-DK": "Open Data DK" - }, - "IOT-TABLE": { - "APPLICATION": "Applikation", - "NETWORK-TECHNOLOGY": "Netværksteknologi", - "ALARM": "Alarm", - "BATTERY": "Batteri", - "ACTIVE": "Sidst aktiv", - "DATA": "Data(24 timer)", - "ORGANISATION": "Organisation", - "NAME": "Navn", - "RSSI": "RSSI (dBm)", - "SNR": "SNR (dB)", - "DEV-EUI": "DevEUI", - "APP-KEY": "AppKey (OTAA)" - }, - "LORA-GATEWAY-TABLE": { - "NAME": "Navn", - "GATEWAYID": "Gateway ID", - "LOCATION": "Placering", - "LAST-SEEN-AT": "Seneste aktivitet", - "STATUS": "Status", - "ORGANIZATION": "Organisation", - "PACKETS-RECEIVED": "Pakker modtaget", - "PACKETS-SENT": "Pakker sendt", - "PLACEMENT": "Placering", - "MODEL-NAME": "Modelnavn", - "ANTENNA-TYPE": "Antennetype (dBi)", - "RESPONSIBLE-NAME": "Gateway-ansvarlig", - "RESPONSIBLE-EMAIL": "Kontaktmail", - "RESPONSIBLE-PHONE-NUMBER": "Kontakttelefon", - "OPERATIONAL-NAME": "Driftansvarlig", - "OPERATIONAL-EMAIL": "Kontaktmail - drift", - "TAGS": "Tags", - "CREATED-AT": "Oprettelsesdato" - }, - "LORA-GATEWAY-STATUS": { - "TITLE": "LoRaWAN online status historik", - "TIMESTAMP": "Tidspunkt", - "INTERVAL": { - "DAY": "Seneste døgn", - "WEEK": "Seneste uge", - "MONTH": "Seneste måned" - } - }, - "DEVICE-MODEL": { - "DELETE-FAILED":"Slet Fejlede", - "HEADLINE":"Detaljer", - "CREATED":"Oprettet", - "UPDATED":"Senest opdateret", - "ID": "Unik identifikator", "TABLE": { - "ID": "Id" + "PAGINATION": "Navigér tabel", + "COLUMNS": "Kolonner" }, - "NAME": "Navn", - "TYPE" : "Type", - "BRANDNAME" : "Mærke", - "MODELNAME" : "Model", - "MANUFACTURERNAME" : "Producentens navn", - "CONTROLLEDPROPERTY" : "Kontrol egenskaber", - "CATEGORY" : "Kategori", - "SUPPORTEDUNITS" : "Måleenheder", - "FUNCTION" : "Enhedsfunktioner", - "ENERGYLIMITATIONCLASS" : "Energibegrænsningsklassen", - "SUPPORTEDPROTOCOL" : "Understøttede protokoller", - "DETAIL-TITLE": "Device model detalje", - "DEVICE-MODEL": "Device nodel", - "SHOW-OPTIONS": "Håndter device model" - }, - "LORA-GATEWAY-TABLE-ROW": { - "SHOW-OPTIONS": "Håndtér gateway" - }, - "LORA-GATEWAY": { - "CREATE": "Opret LoRaWAN gateway" - }, - "DATATARGET-TABLE": { - "NAME": "Navn", - "TYPE": "Type" - }, - "MULTICAST-TABLE":{ - "NAME": "Gruppenavn", - "TYPE": "Gruppetype" - }, - "IOT-DEVICE-TYPES": { - "GENERIC_HTTP": "Generisk HTTP", - "LORAWAN": "LoRaWAN", - "SIGFOX": "Sigfox", - "MQTT": "MQTT", - "MQTT_INTERNAL_BROKER": "MQTT intern broker", - "MQTT_EXTERNAL_BROKER": "MQTT ekstern broker", - "OTHER": "Andet" - }, - "ACTIVITY": { - "NEVER": "Aldrig set" - }, - "TABLE": { - "PAGINATION": "Navigér tabel", - "COLUMNS": "Kolonner" - }, - "APPLICATION-TABLE-ROW": { - "DELETE": "Slet", - "EDIT": "Redigér", - "SHOW-OPTIONS": "Håndter applikation" - }, - "IOTDEVICE-TABLE-ROW": { - "DELETE": "Slet", - "EDIT": "Redigér", - "SHOW-OPTIONS": "Håndter IoT enhed", - "BATTERY-ERROR-MESSAGE":"Den valgte teknologi understøtter ikke batteristatus", - "RESET-API-KEY": "Nulstil API nøgle", - "NOT-SUPPORTED": "Ikke understøttet", - "NOT-SUPPORTED-SHORT": "-", - "NOT-AVAILABLE": "N/A" - }, - "DATATARGET-TABLE-ROW": { - "DELETE": "Slet datatarget", - "EDIT": "Redigér", - "SHOW-OPTIONS": "Håndter datatarget" - }, - "MULTICAST-TABLE-ROW": { - "DELETE": "Slet multicast", - "EDIT": "Redigér", - "SHOW-OPTIONS": "Håndter multicast" - }, - "PAYLOAD-DECODER": { - "DELETE-FAILED": "Slet fejlede", - "DETAILS":"Detaljer", - "CREATED": "Oprettet", - "UPDATED":"Senest opdateret", - "TITLE": "Payload decoder", - "SAVE": "Gem payload decoder", - "NAME": "Navn", - "ID": "Payload decoder id", - "ORGANIZATION": "Organisation", - "BELONGS-TO-ORGANIZATION": "Organisation", - "DECODINGFUNCTION": "Decoder funktion", - "DETAIL": { - "DROPDOWN": "Håndter payload decoder", - "EDIT": "Redigér", - "DELETE": "Slet" + "APPLICATION-TABLE-ROW": { + "DELETE": "Slet", + "EDIT": "Redigér", + "SHOW-OPTIONS": "Håndter applikation" }, - "IOT-DEVICES": "Tilknyttede IoT enheder" - }, - "PAYLOAD-DECODER-TABLE-ROW": { - "EDIT": "Redigér", - "DELETE": "Slet" - }, - "ORGANISATION": { - "HEADLINE":"Detaljer", - "CREATED":"Oprettet", - "UPDATED":"Senest opdateret", - "NAME": "Navn", - "APPLICATION-COUNT": "Applikationer", - "SAVE": "Gem organisation", - "EDIT": "Rediger organisation", - "DROPDOWN": "Håndter organisation", - "DETAIL": { - "APPLICATIONS": "Organisationens applikationer", - "PERMISSIONS": "Organisations brugergrupper", - "NAME": "Navn" + "IOTDEVICE-TABLE-ROW": { + "DELETE": "Slet", + "EDIT": "Redigér", + "SHOW-OPTIONS": "Håndter IoT enhed", + "BATTERY-ERROR-MESSAGE": "Den valgte teknologi understøtter ikke batteristatus", + "RESET-API-KEY": "Nulstil API nøgle", + "NOT-SUPPORTED": "Ikke understøttet", + "NOT-SUPPORTED-SHORT": "-", + "NOT-AVAILABLE": "N/A" }, - "FORM": { - "NAME": "Indtast organisationens navn", - "NAME-PLACEHOLDER": "Indtast organisationens navn", - "CANCEL": "Annuller", - "SAVE": "Gem organisation", - "CREATE-NEW-ORGANISATION": "Opret organisation" - } - }, - "ORGANISATION-TABLE-ROW": { - "EDIT": "Redigér", - "DELETE": "Slet" - }, - "PERMISSION": { - "NAME": "Navn", - "ORGANISATION": "Organisation", - "NUMBER_OF_MEMBERS": "Antal medlemmer", - "TYPE": "Type af brugergruppe", - "NO_ORGANISATION": "N/A", - "SAVE": "Gem brugergruppe", - "DETAIL": { - "TYPE": "Adgangstype ", - "ORG": "Organisation ", - "DROPDOWN": "Håndter brugergruppe", - "EDIT": "Rediger", - "DELETE": "Slet", - "USERS": "Brugergruppens brugere", - "APPLICATIONS": "Brugergruppens applikationer", - "HEADLINE": "Detaljer", - "CREATED":"Oprettet", - "UPDATED":"Senest opdateret" + "DATATARGET-TABLE-ROW": { + "DELETE": "Slet datatarget", + "EDIT": "Redigér", + "SHOW-OPTIONS": "Håndter datatarget" }, - "EDIT": { - "NAME": "Indtast brugergruppens navn", - "NAME-PLACEHOLDER": "Brugergruppens navn", - "TYPE": "Rettigheder", - "TYPE-PLACEHOLDER": "Adgangs rettigheder", - "USERS": "Vælg brugere", - "USERS-PLACEHOLDER": "Brugere", - "ORG": "Vælg en organisation", - "ORG-PLACEHOLDER": "Organisation", - "APPS": "Vælg en eller flere applikationer", - "APPS-PLACEHOLDER": "Applikationer", - "ADD-APPLICATION-ON-CREATE": "Skal nye applikationer automatisk tilføjes til brugergruppen", - "ADD-APPLICATION-AUTOMATIC": "Automatisk tilføjelse af applikationer til brugergruppen" + "MULTICAST-TABLE-ROW": { + "DELETE": "Slet multicast", + "EDIT": "Redigér", + "SHOW-OPTIONS": "Håndter multicast" }, - "TABLE-ROW": { - "EDIT": "Rediger", - "DELETE": "Slet" - } - }, - "PERMISSION-TYPE": { - "GlobalAdmin": "Global administrator", - "OrganizationUserAdmin": "Brugeradministrator", - "OrganizationGatewayAdmin": "Gateway administrator", - "OrganizationApplicationAdmin": "Applikationsadministrator", - "Read": "Læserettigheder" - }, - "FORM": { - "CREATE-NEW-APPLICATION": "Opret ny applikation", - "CREATE-NEW-LORA-GATEWAY": "Opret ny LoRaWAN gateway", - "CREATE-NEW-DEVICE-MODEL": "Opret ny device model", - "CREATE-NEW-DATATARGET": "Opret nyt datatarget", - "CREATE-NEW-MULTICAST": "Opret nyt multicast", - "EDIT-DATATARGET": "Redigér datatarget", - "EDIT-MULTICAST": "Redigér multicast", - "CREATE-NEW-IOT-DEVICE": "Tilføj en IoT enhed", - "EDIT-NEW-GATEWAY": "Redigér LoRaWAN gateway", - "EDIT-NEW-APPLICATION": "Redigér applikation", - "TRANSMISSION_PROTOCOL_TEXT": "Vælg transmissionsprotokol", - "TRANSMISSION_PROTOCOL_DESCRIPTION": "Transmissions protokollen angiver måden IoT-enheden forbinder til OS2IoT", - "ALERT-NO-DELETE-DEVICES": "Du kan ikke slette denne applikation da den indeholder IOT enhed(er)", - "CREATE-NEW-PAYLOAD-DECODER": "Opret payload decoder", - "EDIT-PAYLOAD-DECODER": "Redigér payload decoder", - "EDIT-DEVICE-PREDIT-SIGFOX-GROUPSOFILE": "Redigér device profil", - "CREATE-NEW-ORGANISATION": "Opret organisation", - "EDIT-ORGANISATION": "Redigér organisation", - "CREATE-NEW-PERMISSION": "Opret ny brugergruppe", - "EDIT-PERMISSION": "Redigér brugergruppe", - "EDIT-SIGFOX-DEVICE-TYPE": "Redigér Sigfox enhedstype", - "EDIT-SIGFOX-GROUPS": "Redigér Sigfox grupper", - "EDIT-SIGFOX-GROUP": "Redigér Sigfox gruppe", - "EDIT-USERS": "Redigér bruger", - "EDIT-DEVICE-PROFILE": "Redigér device profil", - "EDIT-API-KEY": "Redigér API nøgle", - "ADD-METADATA-ROW": "Tilføj metadata række" - }, - "QUESTION": { - "CREATE-IOT-DEVICE": "IoT-enhed", - "DEVICE-MODEL-SELECT": "Tilknyt en device model til enheden", - "DEVICE-MODEL-SELECT-NON": "Ingen device model valgt", - "TRANSMISSION-PROTOCOL": "Vælg transmissionsprotokol", - "ESTABLISH-CONNECTION-TO-DEVICE": "Opret forbindelse til din enhed", - "ADD-MORE-INFO-ABOUT-DEVICE": "Tilføj yderlige informationer om din enhed", - "REVIEW-AND-SUBMIT": "Gennemgå og godkend indstillinger for din IoT enhed", - "DEVICE-NAME-PLACEHOLDER": "Enhedsnavn", - "GIVE-DEVICE-NAME": "Navngiv enhed", - "EXTRA-COMMENT-PLACEHOLDER": "Anden relevant information", - "LOCATION-DESCRIPTION": "Beskrivelse af placering", - "LOCATION-DESCRIPTION-PLACEHOLDER": "F.eks. køleskab på 3. sal", - "RELATION-APPLICATION": "Tilknyttet applikation: ", - "GIVE-DATATARGET-NAME": "Navngiv datatarget", - "GIVE-DATATARGET-NAME-PLACEHOLDER": "Datatarget's navn", - "GIVE-DATATARGET-NAME-INFO": "Benyttes kun i OS2iot", - "GIVE-DATATARGET-TIMEOUT": "Timeout i millisekunder", - "GIVE-DATATARGET-AUTHORIZATIONHEADER": "Angiv authorization header", - "GIVE-DATATARGET-URL": "Angiv datatargets URL", - "GIVE-DATATARGET-URL-PLACEHOLDER": "https://datatarget.dk/data", - "GIVE-PAYLOADDECODER-NAME": "Navngiv payload decoder", - "GIVE-PAYLOADDECODER-NAME-PLACEHOLDER": "F.eks. kloak sensor decoder", - "GIVE-PAYLOADDECODER-DECODINGFUNCTION": "Payload decoder funktion", - "GIVE-PAYLOADDECODER-CHOOSE-APPLICATION": "Vælg applikation", - "GIVE-PAYLOADDECODER-CHOOSE-DEVICE": "Vælg enhed", - "GIVE-PAYLOADDECODER-PAYLOAD": "Test med den valgte enheds payload", - "GIVE-PAYLOADDECODER-METADATA": "Test med den valgte enheds metadata", - "GIVE-PAYLOADDECODER-TESTBUTTON": "Test din kode", - "GIVE-PAYLOADDECODER-OUTPUT": "Test preview af payload decoder Output", - "GIVE-PAYLOADDECODER-METADATA-PLACEHOLDER": "// Vælg applikation og enhed først for at \n// teste din decoder funktion med metadata", - "GIVE-PAYLOADDECODER-PAYLOAD-PLACEHOLDER": "// Vælg applikation og enhed først for at \n// teste din decoder funktion med payload data", - "GIVE-PAYLOADDECODER-METADATA-ERRORMESSAGE": "// Kan ikke finde noget metadata på den pågældende enhed. \n// Det kan enten skyldes at vi ikke har modtaget noget fra enheden eller der er ikke blevet tilknyttet en devicemodel til enheden", - "GIVE-PAYLOADDECODER-PAYLOAD-ERRORMESSAGE": "// Kan ikke finde noget payload på den pågældende enhed. \n// Det kan enten skyldes at vi ikke har modtaget noget fra enheden eller der er ikke blevet tilknyttet en devicemodel til enheden", - "GIVE-PAYLOADDECODER-OUTPUT-PLACEHOLDER": "// Tryk 'Test koden' for at decode payload og metadata", - "GIVE-PAYLOADDECODER-METADATA-INVALID-JSON": "Det angivne JSON var ikke gyldigt i feltet device metadata", - "GIVE-PAYLOADDECODER-PAYLOAD-INVALID-JSON": "Det angivne JSON var ikke gyldigt i feltet payload", - "GIVE-ORGANISATION-NAME": "Navngiv organisation", - "GIVE-ORGANISATION-NAME-PLACEHOLDER": "F.eks. 'Aarhus Kommune'", - "GIVE-MULTICAST-NAME": "Navngiv multicast", - "GIVE-MULTICAST-ADDRESS": "Angiv multicast adressen (mcAddr)", - "GIVE-MULTICAST-NETWORK-KEY": "Angiv multicast network session key (mcNwkSKey)", - "GIVE-MULTICAST-APPLICATION-KEY": "Angiv multicast application session key (mcAppSKey)", - "GIVE-MULTICAST-FRAMECOUNTER": "Angiv frame counter", - "GIVE-MULTICAST-DATARATE": "Angiv data rate", - "GIVE-MULTICAST-IOTDEVICES": "Angiv IoT-enheder", - "GIVE-MULTICAST-FREQUENCY": "Angiv frekvens (Hz)", - "GIVE-MULTICAST-GROUP-TYPE": "Angiv multicast gruppe type", - "GIVE-MULTICAST-PERIODICITY": "Angiv multicast ping-slot periodicitet", - "GIVE-MULTICAST-GROUPTYPE": "Angiv multicast gruppe typen", - "MULTICAST-NAME-PLACEHOLDER": "Multicastens navn", - "MULTICAST-ADDRESS-PLACEHOLDER": "Multicast adressen", - "MULTICAST-NETWORK-KEY-PLACEHOLDER": "Multicastens network session key", - "MULTICAST-APPLICATION-KEY-PLACEHOLDER": "Multicastens application session key", - "MULTICAST-GROUPTYPE-PLACEHOLDER": "Vælg multicast gruppe typen", - "MULTICAST-PERIODICITY-PLACEHOLDER": "Vælg Class-B ping periodiciteten", - "OTAAAPPLICATIONKEY": "OTAA application key (AppKey)", - "OTAAAPPLICATIONKEY-PLACEHOLDER": "Indtast OTAA application key", - "DEVADDR": "Device adress", - "DEVADDR-PLACEHOLDER": "Indtast device adress", - "NETWORKSESSIONKEY": "Networksessionkey", - "NETWORKSESSIONKEY-PLACEHOLDER": "Indtast network session key", - "APPLICATIONSESSIONKEY": "Applicationsessionkey", - "APPLICATIONSESSIONKEY-PLACEHOLDER": "Indtast application session key", - "FCNTUP": "fCntUp", - "FCNTUP-PLACEHOLDER": "Angiv upload framerate", - "NFCNTDOWN": "nfcntdown", - "NFCNTDOWN-PLACEHOLDER": "Angiv download framerate", - "DEVEUI": "Enheds EUI (DevEUI)", - "DEVEUI-PLACEHOLDER": "Angiv DevEUI (16 tegn)", - "SKIPFCNTCHECK": "SkipFCntCheck", - "SKIPFCNTCHECK-NO": "Nej", - "SKIPFCNTCHECK-YES": "Ja", - "OTAA": "Over The Air Activation", - "OTAA-ABP-CONFIG-HELP": "Du vælger din aktivation type via device profile", - "ABP": "Activation By Personalisation", - "CHOOSE-DEVICE": "Vælg device profile", - "OTAA-ACTIVATE": "Opret forbindelse vha. OTAA", - "ADD-RELATIONS": "Tilføj IoT enhed og payload decoder", - "METADATA": "Metadata", - "DATATARGET": { - "SELECT-PAYLOADDECODER": "Vælg payload decoder", - "NO-PAYLOAD-DECODER-SELECTED": "Ingen payload decoder valgt", - "SELECT-DEVICES": "Vælg enheder", - "SELECTALLDEVICES": "Vælg alle", - "DESELECTALLDEVICES": "Fravælg alle", - "RELATIONS": "*Efter oprettelse af dit data target parres dette med en/flere payload decoder(s) og IoT-devices", - "MQTT": { - "GIVE-URL": "Angiv datatargets broker URL", - "GIVE-URL-PLACEHOLDER": "https://min-mqtt-broker.dk", - "GIVE-PORT": "Angiv datatargets broker port", - "GIVE-PORT-PLACEHOLDER": "1883", - "GIVE-QOS": "Angiv hvilken QoS-niveau data skal sendes med", - "GIVE-QOS-PLACEHOLDER": "0, 1, 2", - "GIVE-QOS-INFO": "QoS (Quality of Service) fastlægger, hvor sikker leveringen af beskeden skal være. Der er tre muligheder: 0 (at most once), 1 (at least once) og 2 (exactly once)", - "GIVE-TOPIC": "Angiv hvilket topic på brokeren der skal sendes til", - "GIVE-TOPIC-PLACEHOLDER": "Topic på ekstern broker", - "GIVE-TOPIC-INFO": "Topic'et kan være givet af den udbyder, som data skal sendes til. Der kan ikke bruges wildcards", - "GIVE-AUTHENTICATION-METHOD": "Vælg autentificeringsmetode", - "USERNAME-PASSWORD": "Brugernavn og password", - "CERTIFICATE": "Certifikat", - "USERNAME": "Brugernavn", - "GIVE-USERNAME": "Angiv et brugernavn med adgang til brokeren og det valgte topic", - "PASSWORD": "Adgangskode", - "GIVE-PASSWORD": "Angiv adgangskoden" - } + "PAYLOAD-DECODER": { + "DELETE-FAILED": "Slet fejlede", + "DETAILS": "Detaljer", + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "TITLE": "Payload decoder", + "SAVE": "Gem payload decoder", + "NAME": "Navn", + "ID": "Payload decoder id", + "ORGANIZATION": "Organisation", + "BELONGS-TO-ORGANIZATION": "Organisation", + "DECODINGFUNCTION": "Decoder funktion", + "DETAIL": { + "DROPDOWN": "Håndter payload decoder", + "EDIT": "Redigér", + "DELETE": "Slet" + }, + "IOT-DEVICES": "Tilknyttede IoT enheder" }, - "MULTICAST": { - "SELECT-DEVICES": "Vælg enheder", - "SELECTALLDEVICES": "Vælg alle", - "DESELECTALLDEVICES": "Fravælg alle", - "NO-PORT-OR-PAYLOAD": "Angiv en port og en payload", - "ONLY-LORAWAN": "* På nuværende tidspunkt er det kun muligt at tilknytte LoRaWAN devices.", - "HINT-8-HEXA": "8-tegns hexadecimal værdi", - "HINT-32-HEXA": "32-tegns hexadecimal værdi", - "HINT-DATA-RATE": "Data rate, der skal bruges ved overførsel af multicast-frames. Se venligst LoRaWAN Regional Parameters specifikationen for gyldige værdier", - "HINT-FREQUENCY": "Frekvensen, der skal bruges ved transmission af multicast-frames. Se venligst LoRaWAN Regional Parameters specifikationen for gyldige værdier" + "PAYLOAD-DECODER-TABLE-ROW": { + "EDIT": "Redigér", + "DELETE": "Slet" }, - "SIGFOX": { - "TITLE": "Sigfox specifikke felter", - "CONNECTTOEXISTINGDEVICEINBACKEND": "Er enheden allerede registreret i Sigfox backend?", - "GROUPID": "Vælg en Sigfox gruppe", - "DEVICEID": "Sigfox enhedsid", - "DEVICEID-PLACEHOLDER": "Enhedens unikke id", - "DEVICETYPEID": "Vælg en Sigfox enhedstype", - "DEVICETYPEID-PLACEHOLDER": "Enhedstype", - "PAC": "PAC", - "PAC-PLACEHOLDER": "Porting authorization code", - "ENDPRODUCTCERTIFICATE": "Produkt certifikat", - "ENDPRODUCTCERTIFICATE-PLACEHOLDER": "Produkt certifikat", - "ENDPRODUCTCERTIFICATE-HELP-TITLE": "Hjælp til at finde produkt certifikatet", - "ENDPRODUCTCERTIFICATE-HELP-TEXT": "Få hjælp til at finde produkt certifikatet ved at klikke her", - "DISCLAIMER": "Bemærk dit abonnement med Sigfox holdes ude af OS2iot og løber automatisk. Afmeld dit abonnement ved at registrere en unsubscribe date i Sigfox.", - "DISCLAIMER-CLICK": "Guide til unsubscripe", - "PROTOTYPE": "Aktiver som prototype", - "PROTOTYPE-TITLE": "Hvis enhedstypen endnu ikke har tildelt et produkt certifikat, kan enheden oprettes som en prototype", - "SELECTGROUPFIRST": "Du skal vælge en gruppe før du kan udfylde kontrakt og enhedstype", - "DEVICETYPE": { - "NAME": "Navngiv enhedstypen", - "NAME-PLACEHOLDER": "XC-123", - "ALERTEMAIL-PLACEHOLDER": "Jens@jensen.dk", - "ALERTEMAIL": "Angiv e-mail til brug i tilfælde af alarm fra Sigfox", - "DESCRIPTION": "Angiv beskrivelse", - "DESCRIPTION-PLACEHOLDER": "Lipsum larum", - "CHOOSE-GROUP": "Vælg en sigfoxgruppe", - "CHOOSE-CONTRACT": "Vælg en kontrakt" - } + "ORGANISATION": { + "HEADLINE": "Detaljer", + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "NAME": "Navn", + "APPLICATION-COUNT": "Applikationer", + "SAVE": "Gem organisation", + "EDIT": "Rediger organisation", + "DROPDOWN": "Håndter organisation", + "DETAIL": { + "APPLICATIONS": "Organisationens applikationer", + "PERMISSIONS": "Organisations brugergrupper", + "NAME": "Navn" + }, + "FORM": { + "NAME": "Indtast organisationens navn", + "NAME-PLACEHOLDER": "Indtast organisationens navn", + "CANCEL": "Annuller", + "SAVE": "Gem organisation", + "CREATE-NEW-ORGANISATION": "Opret organisation" + } }, - "DEVICE-MODEL": { - "GIVE-NAME": "Angiv navn", - "GIVE-NAME-PLACEHOLDER": "F.eks. Elsys-tx3", - "GIVE-ID": "Angiv unik identifikator (id)", - "GIVE-ID-PLACEHOLDER": "Angiv id", - "GIVE-BRANDNAME": "Angiv mærket (brandName)", - "GIVE-BRANDNAME-PLACEHOLDER": "Angiv mærket", - "GIVE-MODELNAME": "Angiv model navnet (modelName)", - "GIVE-MODELNAME-PLACEHOLDER": "Angiv model navnet", - "GIVE-MANUFACTURERNAME": "Angiv producentens navn (manufacturerName)", - "GIVE-MANUFACTURERNAME-PLACEHOLDER": "Angiv producentens navn", - "SELECT-CONTROLLEDPROPERTY": "Vælg en eller flere kontrolegenskaber (controlledProperty)", - "SELECT-CATEGORY": "Vælg kategori (category)", - "SELECT-SUPPORTEDUNITS": "Vælg måleenheder (supportedUnits)", - "SELECT-DEVICEFUNCTIONS": "Vælg enhedsfunktioner (function)", - "SELECT-ENERGYLIMITATIONCLASS": "Vælg energibegrænsningsklassen (energyLimitationClass)", - "SELECT-SUPPORTEDPROTOCOL": "Vælg understøttede protokoller (supportedProtocol)", - "FIWARE-LINK-TEXT": "Denne data model er adopteret fra Fiware og følger ETSI standarden" + "ORGANISATION-TABLE-ROW": { + "EDIT": "Redigér", + "DELETE": "Slet" }, "PERMISSION": { - "SELECT-PERMISSION": "Vælg brugergruppe" + "NAME": "Navn", + "ORGANISATION": "Organisation", + "NUMBER_OF_MEMBERS": "Antal medlemmer", + "TYPE": "Type af brugergruppe", + "NO_ORGANISATION": "N/A", + "SAVE": "Gem brugergruppe", + "DETAIL": { + "TYPE": "Adgangstype ", + "ORG": "Organisation ", + "DROPDOWN": "Håndter brugergruppe", + "EDIT": "Rediger", + "DELETE": "Slet", + "USERS": "Brugergruppens brugere", + "APPLICATIONS": "Brugergruppens applikationer", + "HEADLINE": "Detaljer", + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret" + }, + "EDIT": { + "NAME": "Indtast brugergruppens navn", + "NAME-PLACEHOLDER": "Brugergruppens navn", + "TYPE": "Rettigheder", + "TYPE-PLACEHOLDER": "Adgangs rettigheder", + "USERS": "Vælg brugere", + "USERS-PLACEHOLDER": "Brugere", + "ORG": "Vælg en organisation", + "ORG-PLACEHOLDER": "Organisation", + "APPS": "Vælg en eller flere applikationer", + "APPS-PLACEHOLDER": "Applikationer", + "ADD-APPLICATION-ON-CREATE": "Skal nye applikationer automatisk tilføjes til brugergruppen", + "ADD-APPLICATION-AUTOMATIC": "Automatisk tilføjelse af applikationer til brugergruppen" + }, + "TABLE-ROW": { + "EDIT": "Rediger", + "DELETE": "Slet" + } }, - "APPLICATION": { - "NAME-PLACEHOLDER": "Navngiv applikationen", - "DESCRIPTION-PLACEHOLDER": "Lav kort beskrivelse af applikationen", - "START-DATE-PLACEHOLDER": "Angiv en startdato for applikationen", - "END-DATE-PLACEHOLDER": "Angiv en slutdato for applikationen", - "DATE-HINT": "Dato berører ikke funktionalitet i OS2IoT", - "CATEGORY-PLACEHOLDER": "Angiv den/de kategorier applikationen tilhører. Fx indeklima eller tracking", - "OWNER-PLACEHOLDER": "Angiv afdeling eller lignende, der ejer data", - "CONTACT-PERSON-PLACEHOLDER": "Angiv navn og eventuel afdeling på ansvarlig medarbejder", - "CONTACT-EMAIL-PLACEHOLDER": "Angiv mailadresse på ansvarlig medarbejder", - "CONTACT-PHONE-PLACEHOLDER": "Angiv telefonnummer på ansvarlig medarbejder", - "PERSONAL-DATA-PLACEHOLDER": "Markér, hvis data i applikationen indeholder personoplysninger. Berører ikke funktionalitet i OS2iot", - "HARDWARE-PLACEHOLDER": "Angiv hvad der bruges af sensorer/hardware, samt model", - "CONTROLLED-PROPERTY-PLACEHOLDER": "Angiv hvilke datatyper der opsamles", - "DEVICE-TYPE-PLACEHOLDER": "Angiv hvilke forbindelsesteknologier, der benyttes", - "PERMISSION-HINT": "Husk at alle med adgang til brugergruppen vil kunne se applikationen", - "ADD-PERMISSION": "Tilføj til brugergruppe" + "PERMISSION-TYPE": { + "GlobalAdmin": "Global administrator", + "OrganizationUserAdmin": "Brugeradministrator", + "OrganizationGatewayAdmin": "Gateway administrator", + "OrganizationApplicationAdmin": "Applikationsadministrator", + "Read": "Læserettigheder" + }, + "FORM": { + "CREATE-NEW-APPLICATION": "Opret ny applikation", + "CREATE-NEW-LORA-GATEWAY": "Opret ny LoRaWAN gateway", + "CREATE-NEW-DEVICE-MODEL": "Opret ny device model", + "CREATE-NEW-DATATARGET": "Opret nyt datatarget", + "CREATE-NEW-MULTICAST": "Opret nyt multicast", + "EDIT-DATATARGET": "Redigér datatarget", + "EDIT-MULTICAST": "Redigér multicast", + "CREATE-NEW-IOT-DEVICE": "Tilføj en IoT enhed", + "EDIT-NEW-GATEWAY": "Redigér LoRaWAN gateway", + "EDIT-NEW-APPLICATION": "Redigér applikation", + "TRANSMISSION_PROTOCOL_TEXT": "Vælg transmissionsprotokol", + "TRANSMISSION_PROTOCOL_DESCRIPTION": "Transmissions protokollen angiver måden IoT-enheden forbinder til OS2IoT", + "ALERT-NO-DELETE-DEVICES": "Du kan ikke slette denne applikation da den indeholder IOT enhed(er)", + "CREATE-NEW-PAYLOAD-DECODER": "Opret payload decoder", + "EDIT-PAYLOAD-DECODER": "Redigér payload decoder", + "EDIT-DEVICE-PREDIT-SIGFOX-GROUPSOFILE": "Redigér device profil", + "CREATE-NEW-ORGANISATION": "Opret organisation", + "EDIT-ORGANISATION": "Redigér organisation", + "CREATE-NEW-PERMISSION": "Opret ny brugergruppe", + "EDIT-PERMISSION": "Redigér brugergruppe", + "EDIT-SIGFOX-DEVICE-TYPE": "Redigér Sigfox enhedstype", + "EDIT-SIGFOX-GROUPS": "Redigér Sigfox grupper", + "EDIT-SIGFOX-GROUP": "Redigér Sigfox gruppe", + "EDIT-USERS": "Redigér bruger", + "EDIT-DEVICE-PROFILE": "Redigér device profil", + "EDIT-API-KEY": "Redigér API nøgle", + "ADD-METADATA-ROW": "Tilføj metadata række" }, - "MQTT": { - "TITLE": "MQTT specifik opsætning", - "SUBTYPE": "Enhedstype", - "SUBTYPE-HOVER": "Med en MQTT internal broker-enhed kan du sende data til OS2iots interne MQTT-broker. Med en MQTT extern broker-enhed kan du modtage data i OS2iot fra en ekstern MQTT-broker.", - "MQTT_INTERNAL_BROKER": "Intern broker", - "MQTT_EXTERNAL_BROKER": "Ekstern broker", - "AUTHENTICATIONTYPE": "Autentifikation", - "USERNAME-PLACEHOLDER": "EtBrugernavn", - "PASSWORD-PLACEHOLDER": "EtKodeord", - "CERTIFICATE": "Certifikat", - "CERTIFICATE-PLACEHOLDER" : "-----BEGIN CERTIFICATE-----", - "PASSWORD": "Brugernavn & kodeord", - "USERNAME-LABEL": "Brugernavn", - "USERNAME-HOVER": "Brugernavn som enheden sender med sine beskeder", - "PASSWORD-LABEL": "Kodeord", - "PASSWORD-HOVER": "Kodeordet som enheden sender med sine beskeder", - "BROKER-URL": "MQTT broker URL", - "BROKER-URL-PLACEHOLDER": "mqtts://someUrl", - "BROKER-PORT": "MQTT broker port", - "BROKER-PORT-PLACEHOLDER": "1883", - "TOPIC-PATH": "MQTT Topic", - "TOPIC-PATH-PLACEHOLDER": "some/topic/path", - "CA-CERTIFICATE": "CA Certifikat", - "CA-CERTIFICATE-HOVER": "Certifikatet som enhedens certifikat er lavet med", - "DEVICE-CERTIFICATE": "Enhedens certifikat", - "DEVICE-CERTIFICATE-HOVER": "Certifikatet som enheden har fået via CA'en", - "DEVICE-CERTIFICATE-KEY": "Enhedens certifikat nøgle", - "DEVICE-CERTIFICATE-KEY-PLACEHOLDER": "-----BEGIN PRIVATE KEY-----", - "CONFIG-HELP": "MQTT-specifikke oplysninger genereres automatisk og vises efter oprettelse af enheden", - "CERTIFICATE-OBS": "Der oprettes automatisk et certifikat, som skal benyttes sammen med brugernavn og kodeord for sikre forbindelsen mellem enheden og OS2iot." - } - }, - "QUESTION-LORA-GATEWAY": { - "NAME": "Navngiv LoRaWAN gateway", - "NAME-PLACEHOLDER": "Navn på LoRaWAN gateway", - "DESCRIPTION": "LoRaWAN gateway beskrivelse", - "DESCRIPTION-PLACEHOLDER": "Beskrivelse af LoRaWAN gateway", - "GATEWAYID": "Gateway id (EUI)", - "GATEWAYID-PLACEHOLDER": "0000000000000000", - "METADATA": "Gateway tags", - "METADATA-PLACEHOLDER": "Angiv JSON her", - "ALTITUDE": "Højde", - "ALTITUDE-PLACEHOLDER": "00", - "LONGITUDE": "Længdegrad", - "LONGITUDE-PLACEHOLDER": "00", - "LATITUDE": "Breddegrad", - "LATITUDE-PLACEHOLDER": "00", - "MODEL-NAME": "Modelnavn", - "MODEL-NAME-PLACEHOLDER": "Angiv gateway-modellens navn", - "ANTENNA-TYPE": "Antennetype (dBi)", - "ANTENNA-TYPE-PLACEHOLDER": "Angiv antennens dBi", - "GATEWAY-RESPONSIBLE": "Gateway-ansvarlig", - "GATEWAY-RESPONSIBLE-PLACEHOLDER": "Angiv navn på ansvarlig for gateways i organisationen", - "GATEWAY-RESPONSIBLE-CONTACT": "Kontaktmail", - "GATEWAY-RESPONSIBLE-CONTACT-PLACEHOLDER": "Angiv mailadresse på gateway-ansvarlig", - "GATEWAY-RESPONSIBLE-CONTACT-NUMBER": "Kontakttelefon", - "GATEWAY-RESPONSIBLE-CONTACT-NUMBER-PLACEHOLDER": "Angiv telefonnummer på gateway-ansvarlig", - "OPERATION-RESPONSIBLE": "Driftansvarlig", - "OPERATION-RESPONSIBLE-PLACEHOLDER": "Angiv ansvarlig for den fysiske drift af gateway", - "OPERATION-RESPONSIBLE-CONTACT": "Kontaktmail - drift", - "OPERATION-RESPONSIBLE-CONTACT-PLACEHOLDER": "Angiv mailadresse på driftsansvarlig" - }, - "SORT": { - "SORT": "Sortér", - "UPDATED-ASCENDING": "Senest opdateret: stigende", - "UPDATED-DESCENDING": "Senest opdateret: faldende", - "CREATED-ASCENDING": "Oprettet: stigende", - "CREATED-DESCENDING": "Oprettet: faldende", - "NAME-ASCENDING": "Navn: stigende", - "NAME-DESCENDING": "Navn: faldende", - "APPLICATION-ASCENDING": "Applikation: stigende", - "APPLICATION-DESCENDING": "Applikation: faldende", - "BATTERY-ASCENDING": "Batteri: stigende", - "BATTERY-DESCENDING": "Batteri: faldende", - "ACTIVE-ASCENDING": "Aktiv: sigende", - "ACTIVE-DESCENDING": "Aktiv: faldende" - }, - "IOTDEVICE": { - "HEADING": { - "PROTOCOL": "Transmission protokol", - "BASIC": "Basis info", - "OPTIONAL": "Yderligere info" + "QUESTION": { + "CREATE-IOT-DEVICE": "IoT-enhed", + "DEVICE-MODEL-SELECT": "Tilknyt en device model til enheden", + "DEVICE-MODEL-SELECT-NON": "Ingen device model valgt", + "TRANSMISSION-PROTOCOL": "Vælg transmissionsprotokol", + "ESTABLISH-CONNECTION-TO-DEVICE": "Opret forbindelse til din enhed", + "ADD-MORE-INFO-ABOUT-DEVICE": "Tilføj yderlige informationer om din enhed", + "REVIEW-AND-SUBMIT": "Gennemgå og godkend indstillinger for din IoT enhed", + "DEVICE-NAME-PLACEHOLDER": "Enhedsnavn", + "GIVE-DEVICE-NAME": "Navngiv enhed", + "EXTRA-COMMENT-PLACEHOLDER": "Anden relevant information", + "LOCATION-DESCRIPTION": "Beskrivelse af placering", + "LOCATION-DESCRIPTION-PLACEHOLDER": "F.eks. køleskab på 3. sal", + "RELATION-APPLICATION": "Tilknyttet applikation: ", + "GIVE-DATATARGET-NAME": "Navngiv datatarget", + "GIVE-DATATARGET-NAME-PLACEHOLDER": "Datatarget's navn", + "GIVE-DATATARGET-NAME-INFO": "Benyttes kun i OS2iot", + "GIVE-DATATARGET-TIMEOUT": "Timeout i millisekunder", + "GIVE-DATATARGET-AUTHORIZATIONHEADER": "Angiv authorization header", + "GIVE-DATATARGET-URL": "Angiv datatargets URL", + "GIVE-DATATARGET-URL-PLACEHOLDER": "https://datatarget.dk/data", + "GIVE-PAYLOADDECODER-NAME": "Navngiv payload decoder", + "GIVE-PAYLOADDECODER-NAME-PLACEHOLDER": "F.eks. kloak sensor decoder", + "GIVE-PAYLOADDECODER-DECODINGFUNCTION": "Payload decoder funktion", + "GIVE-PAYLOADDECODER-CHOOSE-APPLICATION": "Vælg applikation", + "GIVE-PAYLOADDECODER-CHOOSE-DEVICE": "Vælg enhed", + "GIVE-PAYLOADDECODER-PAYLOAD": "Test med den valgte enheds payload", + "GIVE-PAYLOADDECODER-METADATA": "Test med den valgte enheds metadata", + "GIVE-PAYLOADDECODER-TESTBUTTON": "Test din kode", + "GIVE-PAYLOADDECODER-OUTPUT": "Test preview af payload decoder Output", + "GIVE-PAYLOADDECODER-METADATA-PLACEHOLDER": "// Vælg applikation og enhed først for at \n// teste din decoder funktion med metadata", + "GIVE-PAYLOADDECODER-PAYLOAD-PLACEHOLDER": "// Vælg applikation og enhed først for at \n// teste din decoder funktion med payload data", + "GIVE-PAYLOADDECODER-METADATA-ERRORMESSAGE": "// Kan ikke finde noget metadata på den pågældende enhed. \n// Det kan enten skyldes at vi ikke har modtaget noget fra enheden eller der er ikke blevet tilknyttet en devicemodel til enheden", + "GIVE-PAYLOADDECODER-PAYLOAD-ERRORMESSAGE": "// Kan ikke finde noget payload på den pågældende enhed. \n// Det kan enten skyldes at vi ikke har modtaget noget fra enheden eller der er ikke blevet tilknyttet en devicemodel til enheden", + "GIVE-PAYLOADDECODER-OUTPUT-PLACEHOLDER": "// Tryk 'Test koden' for at decode payload og metadata", + "GIVE-PAYLOADDECODER-METADATA-INVALID-JSON": "Det angivne JSON var ikke gyldigt i feltet device metadata", + "GIVE-PAYLOADDECODER-PAYLOAD-INVALID-JSON": "Det angivne JSON var ikke gyldigt i feltet payload", + "GIVE-ORGANISATION-NAME": "Navngiv organisation", + "GIVE-ORGANISATION-NAME-PLACEHOLDER": "F.eks. 'Aarhus Kommune'", + "GIVE-MULTICAST-NAME": "Navngiv multicast", + "GIVE-MULTICAST-ADDRESS": "Angiv multicast adressen (mcAddr)", + "GIVE-MULTICAST-NETWORK-KEY": "Angiv multicast network session key (mcNwkSKey)", + "GIVE-MULTICAST-APPLICATION-KEY": "Angiv multicast application session key (mcAppSKey)", + "GIVE-MULTICAST-FRAMECOUNTER": "Angiv frame counter", + "GIVE-MULTICAST-DATARATE": "Angiv data rate", + "GIVE-MULTICAST-IOTDEVICES": "Angiv IoT-enheder", + "GIVE-MULTICAST-FREQUENCY": "Angiv frekvens (Hz)", + "GIVE-MULTICAST-GROUP-TYPE": "Angiv multicast gruppe type", + "GIVE-MULTICAST-PERIODICITY": "Angiv multicast ping-slot periodicitet", + "GIVE-MULTICAST-GROUPTYPE": "Angiv multicast gruppe typen", + "MULTICAST-NAME-PLACEHOLDER": "Multicastens navn", + "MULTICAST-ADDRESS-PLACEHOLDER": "Multicast adressen", + "MULTICAST-NETWORK-KEY-PLACEHOLDER": "Multicastens network session key", + "MULTICAST-APPLICATION-KEY-PLACEHOLDER": "Multicastens application session key", + "MULTICAST-GROUPTYPE-PLACEHOLDER": "Vælg multicast gruppe typen", + "MULTICAST-PERIODICITY-PLACEHOLDER": "Vælg Class-B ping periodiciteten", + "OTAAAPPLICATIONKEY": "OTAA application key (AppKey)", + "OTAAAPPLICATIONKEY-PLACEHOLDER": "Indtast OTAA application key", + "DEVADDR": "Device adress", + "DEVADDR-PLACEHOLDER": "Indtast device adress", + "NETWORKSESSIONKEY": "Networksessionkey", + "NETWORKSESSIONKEY-PLACEHOLDER": "Indtast network session key", + "APPLICATIONSESSIONKEY": "Applicationsessionkey", + "APPLICATIONSESSIONKEY-PLACEHOLDER": "Indtast application session key", + "FCNTUP": "fCntUp", + "FCNTUP-PLACEHOLDER": "Angiv upload framerate", + "NFCNTDOWN": "nfcntdown", + "NFCNTDOWN-PLACEHOLDER": "Angiv download framerate", + "DEVEUI": "Enheds EUI (DevEUI)", + "DEVEUI-PLACEHOLDER": "Angiv DevEUI (16 tegn)", + "SKIPFCNTCHECK": "SkipFCntCheck", + "SKIPFCNTCHECK-NO": "Nej", + "SKIPFCNTCHECK-YES": "Ja", + "OTAA": "Over The Air Activation", + "OTAA-ABP-CONFIG-HELP": "Du vælger din aktivation type via device profile", + "ABP": "Activation By Personalisation", + "CHOOSE-DEVICE": "Vælg device profile", + "OTAA-ACTIVATE": "Opret forbindelse vha. OTAA", + "ADD-RELATIONS": "Tilføj IoT enhed og payload decoder", + "METADATA": "Metadata", + "DATATARGET": { + "SELECT-PAYLOADDECODER": "Vælg payload decoder", + "NO-PAYLOAD-DECODER-SELECTED": "Ingen payload decoder valgt", + "SELECT-DEVICES": "Vælg enheder", + "SELECTALLDEVICES": "Vælg alle", + "DESELECTALLDEVICES": "Fravælg alle", + "RELATIONS": "*Efter oprettelse af dit data target parres dette med en/flere payload decoder(s) og IoT-devices", + "MQTT": { + "GIVE-URL": "Angiv datatargets broker URL", + "GIVE-URL-PLACEHOLDER": "https://min-mqtt-broker.dk", + "GIVE-PORT": "Angiv datatargets broker port", + "GIVE-PORT-PLACEHOLDER": "1883", + "GIVE-QOS": "Angiv hvilken QoS-niveau data skal sendes med", + "GIVE-QOS-PLACEHOLDER": "0, 1, 2", + "GIVE-QOS-INFO": "QoS (Quality of Service) fastlægger, hvor sikker leveringen af beskeden skal være. Der er tre muligheder: 0 (at most once), 1 (at least once) og 2 (exactly once)", + "GIVE-TOPIC": "Angiv hvilket topic på brokeren der skal sendes til", + "GIVE-TOPIC-PLACEHOLDER": "Topic på ekstern broker", + "GIVE-TOPIC-INFO": "Topic'et kan være givet af den udbyder, som data skal sendes til. Der kan ikke bruges wildcards", + "GIVE-AUTHENTICATION-METHOD": "Vælg autentificeringsmetode", + "USERNAME-PASSWORD": "Brugernavn og password", + "CERTIFICATE": "Certifikat", + "USERNAME": "Brugernavn", + "GIVE-USERNAME": "Angiv et brugernavn med adgang til brokeren og det valgte topic", + "PASSWORD": "Adgangskode", + "GIVE-PASSWORD": "Angiv adgangskoden" + } + }, + "MULTICAST": { + "SELECT-DEVICES": "Vælg enheder", + "SELECTALLDEVICES": "Vælg alle", + "DESELECTALLDEVICES": "Fravælg alle", + "NO-PORT-OR-PAYLOAD": "Angiv en port og en payload", + "ONLY-LORAWAN": "* På nuværende tidspunkt er det kun muligt at tilknytte LoRaWAN devices.", + "HINT-8-HEXA": "8-tegns hexadecimal værdi", + "HINT-32-HEXA": "32-tegns hexadecimal værdi", + "HINT-DATA-RATE": "Data rate, der skal bruges ved overførsel af multicast-frames. Se venligst LoRaWAN Regional Parameters specifikationen for gyldige værdier", + "HINT-FREQUENCY": "Frekvensen, der skal bruges ved transmission af multicast-frames. Se venligst LoRaWAN Regional Parameters specifikationen for gyldige værdier" + }, + "SIGFOX": { + "TITLE": "Sigfox specifikke felter", + "CONNECTTOEXISTINGDEVICEINBACKEND": "Er enheden allerede registreret i Sigfox backend?", + "GROUPID": "Vælg en Sigfox gruppe", + "DEVICEID": "Sigfox enhedsid", + "DEVICEID-PLACEHOLDER": "Enhedens unikke id", + "DEVICETYPEID": "Vælg en Sigfox enhedstype", + "DEVICETYPEID-PLACEHOLDER": "Enhedstype", + "PAC": "PAC", + "PAC-PLACEHOLDER": "Porting authorization code", + "ENDPRODUCTCERTIFICATE": "Produkt certifikat", + "ENDPRODUCTCERTIFICATE-PLACEHOLDER": "Produkt certifikat", + "ENDPRODUCTCERTIFICATE-HELP-TITLE": "Hjælp til at finde produkt certifikatet", + "ENDPRODUCTCERTIFICATE-HELP-TEXT": "Få hjælp til at finde produkt certifikatet ved at klikke her", + "DISCLAIMER": "Bemærk dit abonnement med Sigfox holdes ude af OS2iot og løber automatisk. Afmeld dit abonnement ved at registrere en unsubscribe date i Sigfox.", + "DISCLAIMER-CLICK": "Guide til unsubscripe", + "PROTOTYPE": "Aktiver som prototype", + "PROTOTYPE-TITLE": "Hvis enhedstypen endnu ikke har tildelt et produkt certifikat, kan enheden oprettes som en prototype", + "SELECTGROUPFIRST": "Du skal vælge en gruppe før du kan udfylde kontrakt og enhedstype", + "DEVICETYPE": { + "NAME": "Navngiv enhedstypen", + "NAME-PLACEHOLDER": "XC-123", + "ALERTEMAIL-PLACEHOLDER": "Jens@jensen.dk", + "ALERTEMAIL": "Angiv e-mail til brug i tilfælde af alarm fra Sigfox", + "DESCRIPTION": "Angiv beskrivelse", + "DESCRIPTION-PLACEHOLDER": "Lipsum larum", + "CHOOSE-GROUP": "Vælg en sigfoxgruppe", + "CHOOSE-CONTRACT": "Vælg en kontrakt" + } + }, + "DEVICE-MODEL": { + "GIVE-NAME": "Angiv navn", + "GIVE-NAME-PLACEHOLDER": "F.eks. Elsys-tx3", + "GIVE-ID": "Angiv unik identifikator (id)", + "GIVE-ID-PLACEHOLDER": "Angiv id", + "GIVE-BRANDNAME": "Angiv mærket (brandName)", + "GIVE-BRANDNAME-PLACEHOLDER": "Angiv mærket", + "GIVE-MODELNAME": "Angiv model navnet (modelName)", + "GIVE-MODELNAME-PLACEHOLDER": "Angiv model navnet", + "GIVE-MANUFACTURERNAME": "Angiv producentens navn (manufacturerName)", + "GIVE-MANUFACTURERNAME-PLACEHOLDER": "Angiv producentens navn", + "SELECT-CONTROLLEDPROPERTY": "Vælg en eller flere kontrolegenskaber (controlledProperty)", + "SELECT-CATEGORY": "Vælg kategori (category)", + "SELECT-SUPPORTEDUNITS": "Vælg måleenheder (supportedUnits)", + "SELECT-DEVICEFUNCTIONS": "Vælg enhedsfunktioner (function)", + "SELECT-ENERGYLIMITATIONCLASS": "Vælg energibegrænsningsklassen (energyLimitationClass)", + "SELECT-SUPPORTEDPROTOCOL": "Vælg understøttede protokoller (supportedProtocol)", + "FIWARE-LINK-TEXT": "Denne data model er adopteret fra Fiware og følger ETSI standarden" + }, + "PERMISSION": { + "SELECT-PERMISSION": "Vælg brugergruppe" + }, + "APPLICATION": { + "NAME-PLACEHOLDER": "Navngiv applikationen", + "DESCRIPTION-PLACEHOLDER": "Lav kort beskrivelse af applikationen", + "START-DATE-PLACEHOLDER": "Angiv en startdato for applikationen", + "END-DATE-PLACEHOLDER": "Angiv en slutdato for applikationen", + "DATE-HINT": "Dato berører ikke funktionalitet i OS2IoT", + "CATEGORY-PLACEHOLDER": "Angiv den/de kategorier applikationen tilhører. Fx indeklima eller tracking", + "OWNER-PLACEHOLDER": "Angiv afdeling eller lignende, der ejer data", + "CONTACT-PERSON-PLACEHOLDER": "Angiv navn og eventuel afdeling på ansvarlig medarbejder", + "CONTACT-EMAIL-PLACEHOLDER": "Angiv mailadresse på ansvarlig medarbejder", + "CONTACT-PHONE-PLACEHOLDER": "Angiv telefonnummer på ansvarlig medarbejder", + "PERSONAL-DATA-PLACEHOLDER": "Markér, hvis data i applikationen indeholder personoplysninger. Berører ikke funktionalitet i OS2iot", + "HARDWARE-PLACEHOLDER": "Angiv hvad der bruges af sensorer/hardware, samt model", + "CONTROLLED-PROPERTY-PLACEHOLDER": "Angiv hvilke datatyper der opsamles", + "DEVICE-TYPE-PLACEHOLDER": "Angiv hvilke forbindelsesteknologier, der benyttes", + "PERMISSION-HINT": "Husk at alle med adgang til brugergruppen vil kunne se applikationen", + "ADD-PERMISSION": "Tilføj til brugergruppe" + }, + "MQTT": { + "TITLE": "MQTT specifik opsætning", + "SUBTYPE": "Enhedstype", + "SUBTYPE-HOVER": "Med en MQTT internal broker-enhed kan du sende data til OS2iots interne MQTT-broker. Med en MQTT extern broker-enhed kan du modtage data i OS2iot fra en ekstern MQTT-broker.", + "MQTT_INTERNAL_BROKER": "Intern broker", + "MQTT_EXTERNAL_BROKER": "Ekstern broker", + "AUTHENTICATIONTYPE": "Autentifikation", + "USERNAME-PLACEHOLDER": "EtBrugernavn", + "PASSWORD-PLACEHOLDER": "EtKodeord", + "CERTIFICATE": "Certifikat", + "CERTIFICATE-PLACEHOLDER": "-----BEGIN CERTIFICATE-----", + "PASSWORD": "Brugernavn & kodeord", + "USERNAME-LABEL": "Brugernavn", + "USERNAME-HOVER": "Brugernavn som enheden sender med sine beskeder", + "PASSWORD-LABEL": "Kodeord", + "PASSWORD-HOVER": "Kodeordet som enheden sender med sine beskeder", + "BROKER-URL": "MQTT broker URL", + "BROKER-URL-PLACEHOLDER": "mqtts://someUrl", + "BROKER-PORT": "MQTT broker port", + "BROKER-PORT-PLACEHOLDER": "1883", + "TOPIC-PATH": "MQTT Topic", + "TOPIC-PATH-PLACEHOLDER": "some/topic/path", + "CA-CERTIFICATE": "CA Certifikat", + "CA-CERTIFICATE-HOVER": "Certifikatet som enhedens certifikat er lavet med", + "DEVICE-CERTIFICATE": "Enhedens certifikat", + "DEVICE-CERTIFICATE-HOVER": "Certifikatet som enheden har fået via CA'en", + "DEVICE-CERTIFICATE-KEY": "Enhedens certifikat nøgle", + "DEVICE-CERTIFICATE-KEY-PLACEHOLDER": "-----BEGIN PRIVATE KEY-----", + "CONFIG-HELP": "MQTT-specifikke oplysninger genereres automatisk og vises efter oprettelse af enheden", + "CERTIFICATE-OBS": "Der oprettes automatisk et certifikat, som skal benyttes sammen med brugernavn og kodeord for sikre forbindelsen mellem enheden og OS2iot." + } + }, + "QUESTION-LORA-GATEWAY": { + "NAME": "Navngiv LoRaWAN gateway", + "NAME-PLACEHOLDER": "Navn på LoRaWAN gateway", + "DESCRIPTION": "LoRaWAN gateway beskrivelse", + "DESCRIPTION-PLACEHOLDER": "Beskrivelse af LoRaWAN gateway", + "GATEWAYID": "Gateway id (EUI)", + "GATEWAYID-PLACEHOLDER": "0000000000000000", + "METADATA": "Gateway tags", + "METADATA-PLACEHOLDER": "Angiv JSON her", + "ALTITUDE": "Højde", + "ALTITUDE-PLACEHOLDER": "00", + "LONGITUDE": "Længdegrad", + "LONGITUDE-PLACEHOLDER": "00", + "LATITUDE": "Breddegrad", + "LATITUDE-PLACEHOLDER": "00", + "MODEL-NAME": "Modelnavn", + "MODEL-NAME-PLACEHOLDER": "Angiv gateway-modellens navn", + "ANTENNA-TYPE": "Antennetype (dBi)", + "ANTENNA-TYPE-PLACEHOLDER": "Angiv antennens dBi", + "GATEWAY-RESPONSIBLE": "Gateway-ansvarlig", + "GATEWAY-RESPONSIBLE-PLACEHOLDER": "Angiv navn på ansvarlig for gateways i organisationen", + "GATEWAY-RESPONSIBLE-CONTACT": "Kontaktmail", + "GATEWAY-RESPONSIBLE-CONTACT-PLACEHOLDER": "Angiv mailadresse på gateway-ansvarlig", + "GATEWAY-RESPONSIBLE-CONTACT-NUMBER": "Kontakttelefon", + "GATEWAY-RESPONSIBLE-CONTACT-NUMBER-PLACEHOLDER": "Angiv telefonnummer på gateway-ansvarlig", + "OPERATION-RESPONSIBLE": "Driftansvarlig", + "OPERATION-RESPONSIBLE-PLACEHOLDER": "Angiv ansvarlig for den fysiske drift af gateway", + "OPERATION-RESPONSIBLE-CONTACT": "Kontaktmail - drift", + "OPERATION-RESPONSIBLE-CONTACT-PLACEHOLDER": "Angiv mailadresse på driftsansvarlig" }, - "DOWNLINK": { - "TITLE": "Downlink", - "PAYLOAD": "Angiv det ønskede payload", - "PAYLOAD-PLACEHOLDER": "ADF12345", - "PORT": "Angiv den ønskede port", - "START": "Sæt downlink i kø", - "ERROR-SIGFOX-LENGTH": "Fejl i payload længde - payload må ikke overskride 16 karaktere", - "ERROR-FORMAT": "Fejl i formatet. Downlink skal være på hexidecimal format: a-f 0-9", - "DESCRIPTION": "Her kan du starte et downlink til din enhed", - "CONFIRMEDDOWNLINK": "Bekræft downlink", - "DIALOG-TITLE": "Downlink", - "DIALOG-MESSAGE": "Der ligger allerede et downlink i kø, vil du overskrive?", - "DIALOG-DECLINE": "Annuller", - "DIALOG-CONFIRM": "Ja, overskriv", - "NOTIMPLEMENTED": "Denne feature er endnu ikke implementeret for den pågældende enhedstype", - "NO-PORT-OR-PAYLOAD": "Angiv en port og en payload", - "NO-PAYLOAD": "Angiv en payload", - "SIGFOX-PAYLOAD-LENGTH": "Downlink payload til Sigfox skal være præcis 16 tegn (Hexadecimal)", - "FORMAT-ERROR": "Payload skal angives som Hexadecimal" + "SORT": { + "SORT": "Sortér", + "UPDATED-ASCENDING": "Senest opdateret: stigende", + "UPDATED-DESCENDING": "Senest opdateret: faldende", + "CREATED-ASCENDING": "Oprettet: stigende", + "CREATED-DESCENDING": "Oprettet: faldende", + "NAME-ASCENDING": "Navn: stigende", + "NAME-DESCENDING": "Navn: faldende", + "APPLICATION-ASCENDING": "Applikation: stigende", + "APPLICATION-DESCENDING": "Applikation: faldende", + "BATTERY-ASCENDING": "Batteri: stigende", + "BATTERY-DESCENDING": "Batteri: faldende", + "ACTIVE-ASCENDING": "Aktiv: sigende", + "ACTIVE-DESCENDING": "Aktiv: faldende" }, - "CREATED": "Oprettet", - "UPDATED": "Senest opdateret", - "DATA-PACKETS": "Datapakker", - "DEVICEMODEL": "Device model", - "DEVICEMODEL-ERROR": "Der er ikke tilknyttet nogen device model endnu", - "DETAIL": "Detaljer", - "DOWNLINK-TAB": "Downlink", - "NAME": "Navn", - "TYPE": "Enhedstype", - "APPLICATION": "Applikation", - "LOCATION": "Placering", - "LONGITUDE": "Længdegrad", - "LATITUDE": "Breddegrad", - "COMMENTONLOCATION": "Beskrivelse af placeringen", - "COMMENT": "Kommentar: ", - "NOCOMMENT": "Ingen kommentar er angivet", - "NOLOCATION": "Ingen placering er angivet", - "NOCOMMENTONLOCATION": "Ingen beskrivelse af placeringen er angivet", - "GENERIC_HTTP": { - "APIKEY": "API kald", - "INSTRUCTIONS": "Du kalder denne url:", - "RESET-API-KEY": { - "BODY": "Advarsel! Nulstilling vil stoppe modtagelse af data på den eksisterende API nøgle. Vil du fortsætte?", - "YESRESET": "Nulstil" - } + "IOTDEVICE": { + "HEADING": { + "PROTOCOL": "Transmission protokol", + "BASIC": "Basis info", + "OPTIONAL": "Yderligere info" + }, + "DOWNLINK": { + "TITLE": "Downlink", + "PAYLOAD": "Angiv det ønskede payload", + "PAYLOAD-PLACEHOLDER": "ADF12345", + "PORT": "Angiv den ønskede port", + "START": "Sæt downlink i kø", + "ERROR-SIGFOX-LENGTH": "Fejl i payload længde - payload må ikke overskride 16 karaktere", + "ERROR-FORMAT": "Fejl i formatet. Downlink skal være på hexidecimal format: a-f 0-9", + "DESCRIPTION": "Her kan du starte et downlink til din enhed", + "CONFIRMEDDOWNLINK": "Bekræft downlink", + "DIALOG-TITLE": "Downlink", + "DIALOG-MESSAGE": "Der ligger allerede et downlink i kø, vil du overskrive?", + "DIALOG-DECLINE": "Annuller", + "DIALOG-CONFIRM": "Ja, overskriv", + "NOTIMPLEMENTED": "Denne feature er endnu ikke implementeret for den pågældende enhedstype", + "NO-PORT-OR-PAYLOAD": "Angiv en port og en payload", + "NO-PAYLOAD": "Angiv en payload", + "SIGFOX-PAYLOAD-LENGTH": "Downlink payload til Sigfox skal være præcis 16 tegn (Hexadecimal)", + "FORMAT-ERROR": "Payload skal angives som Hexadecimal" + }, + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "DATA-PACKETS": "Datapakker", + "DEVICEMODEL": "Device model", + "DEVICEMODEL-ERROR": "Der er ikke tilknyttet nogen device model endnu", + "DETAIL": "Detaljer", + "DOWNLINK-TAB": "Downlink", + "NAME": "Navn", + "TYPE": "Enhedstype", + "APPLICATION": "Applikation", + "LOCATION": "Placering", + "LONGITUDE": "Længdegrad", + "LATITUDE": "Breddegrad", + "COMMENTONLOCATION": "Beskrivelse af placeringen", + "COMMENT": "Kommentar: ", + "NOCOMMENT": "Ingen kommentar er angivet", + "NOLOCATION": "Ingen placering er angivet", + "NOCOMMENTONLOCATION": "Ingen beskrivelse af placeringen er angivet", + "GENERIC_HTTP": { + "APIKEY": "API kald", + "INSTRUCTIONS": "Du kalder denne url:", + "RESET-API-KEY": { + "BODY": "Advarsel! Nulstilling vil stoppe modtagelse af data på den eksisterende API nøgle. Vil du fortsætte?", + "YESRESET": "Nulstil" + } + }, + "LORAWANSETUP": "LoRaWAN specifik opsætning", + "LATEST-DATAPACKAGE": "Seneste datapakke sendt fra enheden:", + "LATEST-DATAPACKAGES": "Seneste modtagelser af datapakker (nyeste først):", + "NO-DATAPACKAGE": "Der er ikke modtaget nogle datapakker", + "DATAPACKAGE": "Datapakke", + "LORA": { + "DEVEUI": "Enheds EUI (DevEUI)", + "DEVICEPROFILE": "Device profil", + "ACTIVATIONTYPE": "Aktivations type", + "OTAA": "OTAA", + "DEVADDR": "devADDR", + "NETWORKSESSIONKEY": "Netværks session key", + "APPLICATIONSESSIONKEY": "Applikation session key", + "SKIPFCNTCHECK": "skipfcntcheck", + "OTAAAPPLICATIONKEY": "OTAA application key (AppKey)", + "NFCNTDOWN": "nfcntdown", + "FCNTUP": "fcntup" + }, + "SIGFOX": { + "GROUP-NAME": "Sigfox gruppe navn", + "PROTOTYPE": "Prototype", + "PAC": "PAC", + "ENDPRODUCTCERTIFICATE": "Produkt certifikat", + "DEVICETYPE": "Enhedstypen", + "DEVICEID": "EnhedsId" + }, + "HISTORY": "Historik", + "HISTORY-TAB": { + "DATA-RATE": "Data rate", + "SNR": "SNR", + "RSSI": "RSSI", + "HISTORY-NOT-SUPPORTED": "Understøttes ikke af denne teknologi" + }, + "MQTT": { + "URL": "URL", + "PORT": "Port", + "TOPIC_NAME": "Topic navn", + "CERTIFICATE": "Certifikat værdi", + "COPY-TO-CLIPBOARD": "Kopier", + "DOWNLOAD": "Download", + "NOCONNECTION": "Denne enhed kunne ikke forbinde til den eksterne broker. Ret indstillingerne til eller slet enheden." + } }, - "LORAWANSETUP": "LoRaWAN specifik opsætning", - "LATEST-DATAPACKAGE": "Seneste datapakke sendt fra enheden:", - "LATEST-DATAPACKAGES": "Seneste modtagelser af datapakker (nyeste først):", - "NO-DATAPACKAGE": "Der er ikke modtaget nogle datapakker", - "DATAPACKAGE": "Datapakke", - "LORA": { - "DEVEUI": "Enheds EUI (DevEUI)", - "DEVICEPROFILE": "Device profil", - "ACTIVATIONTYPE": "Aktivations type", - "OTAA": "OTAA", - "DEVADDR": "devADDR", - "NETWORKSESSIONKEY": "Netværks session key", - "APPLICATIONSESSIONKEY": "Applikation session key", - "SKIPFCNTCHECK": "skipfcntcheck", - "OTAAAPPLICATIONKEY": "OTAA application key (AppKey)", - "NFCNTDOWN": "nfcntdown", - "FCNTUP": "fcntup" + "MESSAGE": { + "NAME-INVALID-OR-ALREADY-IN-USE": "Dette navn er allerede i brug", + "ORGANIZATION-ALREADY-EXISTS": "Navnet er forkert eller en organisation med det navn eksistere allerede", + "PASSWORD-DOES-NOT-MEET-REQUIREMENTS": "Password lever ikke op til kravene. Password skal minimum være 6 tegn", + "GROUP-CAN-ONLY-BE-CREATED-ONCE-PR-ORGANIZATION": "Der er allerede oprette forbindelse til denne Sigfox gruppe", + "SIGFOX-BAD-LOGIN": "Login fejlet: Forkert Sigfox login eller kode", + "DOWNLINK-LENGTH-WRONG-FOR-SIGFOX": "Angiv korrekt payload længde", + "ONLY-ALLOWED-FOR-LORAWAN": "Handlinger er kun tilladt for LoRaWAN enheder", + "DEVICE-IS-NOT-ACTIVATED-IN-CHIRPSTACK": "Enheden er ikke aktiveret i Chirpstack", + "IS-USED": "Profilen kan ikke slettes da den er i brug.", + "USER-ALREADY-EXISTS": "Brugeren findes allerede", + "ID-INVALID-OR-ALREADY-IN-USE": "Id skal være unikt. Det pågældende Id er allerede brug", + "DELETE-NOT-ALLOWED-ITEM-IS-IN-USE": "Dette element er i brug og kan derfor ikke slettes", + "DELETE-NOT-ALLOWED-HAS-SIGFOX-DEVICE": "Applikation kan ikke blive slettet, da den indeholder en eller flere Sigfox enheder.", + "DELETE-NOT-ALLOWED-HAS-LORAWAN-DEVICE": "Device profilen kan ikke blive slettet, da den er i brug af en eller flere LoRaWAN enheder.", + "OTAA-INFO-MISSING": "OTAA nøgle mangler eller er ikke gyldig.", + "ABP-INFO-MISSING": "ABP nøgle mangler eller er ikke gyldig.", + "DIFFERENT-CREATION-SERVICE-PROFILE": "Dine devices har ved oprettelse haft forskellige service profiles. De skal have haft den samme service profile ved oprettelse!", + "WRONG-SERVICE-PROFILE": "Dine devices har forkert service profile. Vælg devices som har samme service profile som din multicast.", + "ID-DOES-NOT-EXIST": "Id'et findes ikke", + "APPLICATION-DOES-NOT-EXIST": "Den tilhørende applikation findes ikke", + "FAILED-TO-CREATE-OR-UPDATE-IOT-DEVICE": "Enheden kunne ikke oprettes eller opdateres", + "DEVICE-MODEL-ORGANIZATION-DOES-NOT-MATCH": "Organisationsid'et på device modellen matcher ikke den tilhørende applikation", + "DEVICE-MODEL-DOES-NOT-EXIST": "Device model findes ikke", + "DUPLICATE-PERMISSION-TYPES": "Den samme rettighed må ikke optræde flere gange", + "DUPLICATE-METADATA-KEY": "Metadata må ikke indeholde den samme nøgle flere gange", + "INVALID-KEY-IN-KEY-VALUE-PAIR": "En eller flere nøgler er ugyldige. Det skal være en gyldig tekstværdi", + "INVALID-VALUE-IN-KEY-VALUE-PAIR": "En eller flere værdier er ugyldige. Det skal være en gyldig tekstværdi", + "INVALID-DATE": "Datoen er ugyldig", + "USER-ALREADY-HAVE-MAIL": "Brugeren har allerede sat en email", + "EMAIL-ALREADY-IN-USE": "Den valgte email er allerede i brug. Kontakt din lokale administrator for hjælp." }, - "SIGFOX": { - "GROUP-NAME": "Sigfox gruppe navn", - "PROTOTYPE": "Prototype", - "PAC": "PAC", - "ENDPRODUCTCERTIFICATE": "Produkt certifikat", - "DEVICETYPE": "Enhedstypen", - "DEVICEID": "EnhedsId" + "PROFILES": { + "NAME": "LoRaWAN profiler", + "DELETE-FAILED": "Slet fejlede", + "DEVICE_PROFILE": { + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "DETAILS": "Detaljer", + "DELETE-FROM-LIST": "Slet", + "HEADLINE": "Device profiler", + "DROPDOWN": "Håndter device profil", + "CREATE-NEW-DEVICE-PROFILE": "Opret device profile", + "EDIT": "Rediger profil", + "DELETE": "Slet profil", + "NAME": "Device profil navn", + "NAME_PLACEHOLDER": "Device profil navn", + "MACVERSION": "LoRaWAN MAC version ", + "ADRALGORITHM": "ADR algoritme ", + "DEVSTATUSREQFREQ": "Device-status request frequency (req/day)", + "REGPARAMSREVISION": "LoRaWAN regional parameters revision ", + "MAXEIRP": "Max EIRP ", + "GEOLOCBUFFERTTL": "Geolocation buffer TTL (seconds)", + "GEOLOCMINBUFFERSIZE": "Geolocation minimum buffer size", + "OTAA-ACTIVATE": "Device supports OTAA", + "RXDELAY1": "RX1 delay ", + "RXDROFFSET1": "RX1 data-rate offset", + "RXDATARATE2": "RX2 data-rate", + "RXFREQ2": "RX2 channel frequency (Hz)", + "FACTORYPRESETFREQS": "Factory-preset frequencies (Hz)", + "FACTORYPRESETFREQS_PLACEHOLDER": "Factory-preset frequencies (Hz)", + "SUPPORTSCLASSB_ACTIVATE": "Device supports Class-B", + "CLASSBTIMEOUT": "Class B confirmed downlink timeout", + "PINGSLOTPERIOD": "Class-B ping-slot periodicity", + "PINGSLOTDR": "Class-B ping-slot data-rate", + "PINGSLOTFREQ": "Class-B ping-slot frequency", + "SUPPORTSCLASSC_ACTIVATE": "Device supports Class-C", + "CLASSCTIMEOUT": "Class C confirmed downlink timeout", + "CANCEL": "Annuller", + "SAVE": "Gem", + "OTAA-ABP": "Join (OTAA / ABP)", + "MACVERSION_PLACEHOLDER": "1.0.0", + "MAXEIRP_PLACEHOLDER": "0", + "GEOLOCBUFFERTTL_PLACEHOLDER": "0", + "GEOLOCMINBUFFERSIZE_PLACEHOLDER": "0", + "DEVSTATUSREQFREQ_PLACEHOLDER": "1", + "RXDROFFSET1_PLACEHOLDER": "0", + "RXDATARATE2_PLACEHOLDER": "0", + "RXFREQ2_PLACEHOLDER": "0", + "CLASSBTIMEOUT_PLACEHOLDER": "0", + "PINGSLOTDR_PLACEHOLDER": "0", + "PINGSLOTFREQ_PLACEHOLDER": "0", + "CLASSCTIMEOUT_PLACEHOLDER": "0", + "ID": "Device profilens id", + "ORGANIZATION": "Organisation" + } }, - "HISTORY": "Historik", - "HISTORY-TAB": { - "DATA-RATE": "Data rate", - "SNR": "SNR", - "RSSI": "RSSI", - "HISTORY-NOT-SUPPORTED": "Understøttes ikke af denne teknologi" + "USERS": { + "AWAITING-USERS": "Afventende brugere", + "EXISTING-USERS": "Tilknyttede brugere", + "SAVE": "Gem", + "NAME": "Navn", + "EMAIL": "Email", + "GLOBALADMIN": "Global administrator", + "STATUS": "Status", + "LASTLOG": "Sidste login", + "EDIT": "Redigér User", + "CREATE": "Opret ny bruger", + "LOGIN": "Sidst aktiv", + "DIALOG": { + "QUESTION-REJECT": "Er du sikker på, at du vil afvise brugeren?", + "HEAD-REJECT": "Afvis bruger" + }, + "TABLE-ROW": { + "EDIT": "Redigér", + "DELETE": "Slet", + "APPROVE": "Godkend", + "REJECT": "Afvis" + }, + "FORM": { + "NAME": "Indtast det fulde navn på brugeren", + "NAME-PLACEHOLDER": "Navn", + "EMAIL": "Indtast Email addressen til brugeren", + "EMAIL-PLACEHOLDER": "Email", + "PASSWORD": "Password", + "PASSWORD-PLACEHOLDER": "Indtast eller redigér password", + "ACTIVE": "Aktiveret", + "GLOBAL-ADMIN": "Skal den nye bruger være global administrator?", + "SAVE": "Gem Bruger" + }, + "DETAIL": { + "DROPDOWN": "Håndter Bruger", + "LAST-LOGIN": "Sidste login ", + "NO-LOGIN": "Ikke logget på endnu", + "ADDED-DATE": "Oprettet den: ", + "GLOBALADMIN": "Global Administrator ", + "PERMISSIONS": "Medlem af disse brugergrupper", + "APPLICATIONS": "Rettigheder til disse applikationer", + "NAME-PLACEHOLDER": "Navn", + "EMAIL": "Email", + "CREATED": "Oprettet", + "UPDATED": "Senest opdateret", + "STATUS": "Status", + "HEADLINE": "Detaljer" + }, + "GLOBAL_ADMIN": { + "TRUE": "Ja", + "FALSE": "Nej" + }, + "ACCEPT-USER": { + "ACCEPT": "Godkend bruger", + "QUESTION-ACCEPT": "Vælg brugergruppe til ", + "IN-ORGANIZATION": "i organisationen " + } + }, + "AUTH": { + "EMAIL": "Email", + "PASSWORD": "Adgangskode", + "KOMBIT-BUTTON": "Login med KOMBIT adgangsstyring" + }, + "WELCOME-DIALOG": { + "WELCOME": "VELKOMMEN TIL OS2iot", + "WELCOME-SUB": " Din indgang til administration af IoT enheder", + "LINK-1": "OS2iot's brugerforum", + "LINK-2": "produktsiden", + "LINK-3": "Github", + "SUB-HEADER-1": "Brugerforum", + "SUB-HEADER-2": "Om OS2iot", + "WELCOME-MESSAGE": "Bliv en aktiv del af ", + "WELCOME-MESSAGE-2": ". Her kan du stille spørgsmål, indrapportere fejl og dele dine udviklingsønsker. Ved fælles hjælp bliver løsningen bedre.", + "WELCOME-MESSAGE-3": "OS2iot er en open source løsning organiseret igennem OS2-fællesskabet. Du kan finde mere information om OS2iot på ", + "WELCOME-MESSAGE-4": " og følge udviklingen på ", + "NO-ACCESS": "Du har endnu ikke de fornødne rettigheder i OS2iot. Anmod om adgang til en organisation for at få tildelt rettigheder af din administrator.", + "NO-JOB-ACCESS": "Du har ikke passende jobfunktionsrolle, og har derfor ikke adgang til OS2IoT.", + "KOMBIT-LOGIN-ERROR": "Der skete en fejl ved login via KOMBIT adgangsstyring. Prøv igen senere.", + "USER-INACTIVE": "Login successfuldt, men din bruger er deaktiveret i OS2IoT. Kontakt din administrator for at få tildelt rettigheder" + }, + "ERROR": { + "SEMANTIC": "Semantisk fejl, verificer at navn og værdier er på det rigtige format" }, - "MQTT": { - "URL": "URL", - "PORT": "Port", - "TOPIC_NAME": "Topic navn", - "CERTIFICATE": "Certifikat værdi", - "COPY-TO-CLIPBOARD": "Kopier", - "DOWNLOAD": "Download", - "NOCONNECTION": "Denne enhed kunne ikke forbinde til den eksterne broker. Ret indstillingerne til eller slet enheden." - } - }, - "MESSAGE": { - "NAME-INVALID-OR-ALREADY-IN-USE": "Dette navn er allerede i brug", - "ORGANIZATION-ALREADY-EXISTS": "Navnet er forkert eller en organisation med det navn eksistere allerede", - "PASSWORD-DOES-NOT-MEET-REQUIREMENTS": "Password lever ikke op til kravene. Password skal minimum være 6 tegn", - "GROUP-CAN-ONLY-BE-CREATED-ONCE-PR-ORGANIZATION": "Der er allerede oprette forbindelse til denne Sigfox gruppe", - "SIGFOX-BAD-LOGIN": "Login fejlet: Forkert Sigfox login eller kode", - "DOWNLINK-LENGTH-WRONG-FOR-SIGFOX": "Angiv korrekt payload længde", - "ONLY-ALLOWED-FOR-LORAWAN": "Handlinger er kun tilladt for LoRaWAN enheder", - "DEVICE-IS-NOT-ACTIVATED-IN-CHIRPSTACK": "Enheden er ikke aktiveret i Chirpstack", - "IS-USED": "Profilen kan ikke slettes da den er i brug.", - "USER-ALREADY-EXISTS": "Brugeren findes allerede", - "ID-INVALID-OR-ALREADY-IN-USE": "Id skal være unikt. Det pågældende Id er allerede brug", - "DELETE-NOT-ALLOWED-ITEM-IS-IN-USE": "Dette element er i brug og kan derfor ikke slettes", - "DELETE-NOT-ALLOWED-HAS-SIGFOX-DEVICE": "Applikation kan ikke blive slettet, da den indeholder en eller flere Sigfox enheder.", - "DELETE-NOT-ALLOWED-HAS-LORAWAN-DEVICE": "Device profilen kan ikke blive slettet, da den er i brug af en eller flere LoRaWAN enheder.", - "OTAA-INFO-MISSING": "OTAA nøgle mangler eller er ikke gyldig.", - "ABP-INFO-MISSING": "ABP nøgle mangler eller er ikke gyldig.", - "DIFFERENT-CREATION-SERVICE-PROFILE": "Dine devices har ved oprettelse haft forskellige service profiles. De skal have haft den samme service profile ved oprettelse!", - "WRONG-SERVICE-PROFILE": "Dine devices har forkert service profile. Vælg devices som har samme service profile som din multicast.", - "ID-DOES-NOT-EXIST": "Id'et findes ikke", - "APPLICATION-DOES-NOT-EXIST": "Den tilhørende applikation findes ikke", - "FAILED-TO-CREATE-OR-UPDATE-IOT-DEVICE": "Enheden kunne ikke oprettes eller opdateres", - "DEVICE-MODEL-ORGANIZATION-DOES-NOT-MATCH": "Organisationsid'et på device modellen matcher ikke den tilhørende applikation", - "DEVICE-MODEL-DOES-NOT-EXIST": "Device model findes ikke", - "DUPLICATE-PERMISSION-TYPES": "Den samme rettighed må ikke optræde flere gange", - "DUPLICATE-METADATA-KEY": "Metadata må ikke indeholde den samme nøgle flere gange", - "INVALID-KEY-IN-KEY-VALUE-PAIR": "En eller flere nøgler er ugyldige. Det skal være en gyldig tekstværdi", - "INVALID-VALUE-IN-KEY-VALUE-PAIR": "En eller flere værdier er ugyldige. Det skal være en gyldig tekstværdi", - "INVALID-DATE": "Datoen er ugyldig", - "USER-ALREADY-HAVE-MAIL": "Brugeren har allerede sat en email", - "EMAIL-ALREADY-IN-USE": "Den valgte email er allerede i brug. Kontakt din lokale administrator for hjælp." - - }, - "PROFILES": { - "NAME": "LoRaWAN profiler", - "DELETE-FAILED":"Slet fejlede", - "DEVICE_PROFILE": { - "CREATED":"Oprettet", - "UPDATED":"Senest opdateret", - "DETAILS": "Detaljer", - "DELETE-FROM-LIST":"Slet", - "HEADLINE": "Device profiler", - "DROPDOWN": "Håndter device profil", - "CREATE-NEW-DEVICE-PROFILE": "Opret device profile", - "EDIT": "Rediger profil", - "DELETE": "Slet profil", - "NAME": "Device profil navn", - "NAME_PLACEHOLDER": "Device profil navn", - "MACVERSION": "LoRaWAN MAC version ", - "ADRALGORITHM": "ADR algoritme ", - "DEVSTATUSREQFREQ": "Device-status request frequency (req/day)", - "REGPARAMSREVISION": "LoRaWAN regional parameters revision ", - "MAXEIRP": "Max EIRP ", - "GEOLOCBUFFERTTL": "Geolocation buffer TTL (seconds)", - "GEOLOCMINBUFFERSIZE": "Geolocation minimum buffer size", - "OTAA-ACTIVATE": "Device supports OTAA", - "RXDELAY1": "RX1 delay ", - "RXDROFFSET1": "RX1 data-rate offset", - "RXDATARATE2": "RX2 data-rate", - "RXFREQ2": "RX2 channel frequency (Hz)", - "FACTORYPRESETFREQS": "Factory-preset frequencies (Hz)", - "FACTORYPRESETFREQS_PLACEHOLDER": "Factory-preset frequencies (Hz)", - "SUPPORTSCLASSB_ACTIVATE": "Device supports Class-B", - "CLASSBTIMEOUT": "Class B confirmed downlink timeout", - "PINGSLOTPERIOD": "Class-B ping-slot periodicity", - "PINGSLOTDR": "Class-B ping-slot data-rate", - "PINGSLOTFREQ": "Class-B ping-slot frequency", - "SUPPORTSCLASSC_ACTIVATE": "Device supports Class-C", - "CLASSCTIMEOUT": "Class C confirmed downlink timeout", - "CANCEL": "Annuller", - "SAVE": "Gem", - "OTAA-ABP": "Join (OTAA / ABP)", - "MACVERSION_PLACEHOLDER": "1.0.0", - "MAXEIRP_PLACEHOLDER": "0", - "GEOLOCBUFFERTTL_PLACEHOLDER": "0", - "GEOLOCMINBUFFERSIZE_PLACEHOLDER": "0", - "DEVSTATUSREQFREQ_PLACEHOLDER": "1", - "RXDROFFSET1_PLACEHOLDER": "0", - "RXDATARATE2_PLACEHOLDER": "0", - "RXFREQ2_PLACEHOLDER": "0", - "CLASSBTIMEOUT_PLACEHOLDER": "0", - "PINGSLOTDR_PLACEHOLDER": "0", - "PINGSLOTFREQ_PLACEHOLDER": "0", - "CLASSCTIMEOUT_PLACEHOLDER": "0", - "ID": "Device profilens id", - "ORGANIZATION": "Organisation" - } - }, - "USERS": { - "AWAITING-USERS": "Afventende brugere", - "EXISTING-USERS": "Tilknyttede brugere", - "SAVE": "Gem", - "NAME": "Navn", - "EMAIL": "Email", - "GLOBALADMIN": "Global administrator", - "STATUS": "Status", - "LASTLOG": "Sidste login", - "EDIT": "Redigér User", - "CREATE": "Opret ny bruger", - "LOGIN": "Sidst aktiv", "DIALOG": { - "QUESTION-REJECT": "Er du sikker på, at du vil afvise brugeren?", - "HEAD-REJECT": "Afvis bruger" + "SAVE.TITLE": "Slet", + "DELETE.MESSAGE": "Vil du slette?", + "DELETE.ARE-YOU-SURE": "Er du sikker på, at du vil slette?", + "CLOSE": "Annuller", + "OK": "Ok", + "DIALOG-CONFIRM": "Ja, slet", + "DIALOG-REJECT": "Ja, afvis", + "OPENDATADK": { + "OK": "Send mail til OpenDataDk", + "CLOSE": "Nej, tak", + "TITLE": "Vil du sende data til OpenDataDK?", + "MESSAGE": "Send en mail til OpendataDK så opretter de dit datasæt" + }, + "WELCOME": { + "DONT-SHOW-AGAIN": "Vis ikke igen" + }, + "EXPORT-CSV": { + "TITLE": "Eksportér metadata", + "BODY": "Igangsæt eksport af metadata om alle IoT-enheder i denne applikation i en CSV-fil?" + } }, - "TABLE-ROW": { - "EDIT": "Redigér", - "DELETE": "Slet", - "APPROVE": "Godkend", - "REJECT": "Afvis" + "BATTERY": { + "NOT_AVAILABLE": "N/A" }, - "FORM": { - "NAME": "Indtast det fulde navn på brugeren", - "NAME-PLACEHOLDER": "Navn", - "EMAIL": "Indtast Email addressen til brugeren", - "EMAIL-PLACEHOLDER": "Email", - "PASSWORD": "Password", - "PASSWORD-PLACEHOLDER": "Indtast eller redigér password", - "ACTIVE": "Aktiveret", - "GLOBAL-ADMIN": "Skal den nye bruger være global administrator?", - "SAVE": "Gem Bruger" + "TITLE": { + "APPLICATION": "OS2IoT - Applikationer", + "SIGFOX": "OS2IoT - Sigfox administration", + "DEVICEMODEL": "OS2IoT - Device model", + "LORAWAN-GATEWAY": "OS2IoT - LoRaWAN gateways", + "LORAWAN-PROFILE": "OS2IoT - LoRaWAN profiler", + "PAYLOADDECODER": "OS2IoT - Payload decoder", + "USER": "OS2IoT - Brugere", + "PERMISSION": "OS2IoT - Brugergrupper", + "ORGANIZATION": "OS2IoT - Organisationer", + "DATATARGET": "OS2IoT - Datatarget", + "MULTICAST": "OS2IoT - Multicast", + "BULKIMPORT": "OS2IoT - Bulk import", + "IOTDEVICE": "OS2IoT - IoT enhed", + "FRONTPAGE": "OS2IoT - Forside", + "API-KEY": "OS2IoT - API nøgler" }, - "DETAIL": { - "DROPDOWN": "Håndter Bruger", - "LAST-LOGIN": "Sidste login ", - "NO-LOGIN": "Ikke logget på endnu", - "ADDED-DATE": "Oprettet den: ", - "GLOBALADMIN": "Global Administrator ", - "PERMISSIONS": "Medlem af disse brugergrupper", - "APPLICATIONS": "Rettigheder til disse applikationer", - "NAME-PLACEHOLDER": "Navn", - "EMAIL":"Email", - "CREATED":"Oprettet", - "UPDATED":"Senest opdateret", - "STATUS":"Status", - "HEADLINE":"Detaljer" + "PAGINATOR": { + "ITEM_PER_PAGE": "Antal pr. side", + "NEXT_PAGE": "Næste side", + "PREVIOUS_PAGE": "Forrige side", + "FIRST_PAGE": "Første side", + "LAST_PAGE": "Sidste side", + "OF": "af" }, - "GLOBAL_ADMIN": { - "TRUE": "Ja", - "FALSE": "Nej" + "NEW_USER": { + "FIRST_LOGIN": "Siden dette er dit første login, bedes du udfylde din mail og de organisationer du ønsker at være medlem af." }, - "ACCEPT-USER": { - "ACCEPT": "Godkend bruger", - "QUESTION-ACCEPT": "Vælg brugergruppe til ", - "IN-ORGANIZATION": "i organisationen " - } - }, - "AUTH": { - "EMAIL": "Email", - "PASSWORD": "Adgangskode", - "KOMBIT-BUTTON": "Login med KOMBIT adgangsstyring" - }, - "WELCOME-DIALOG": { - "WELCOME": "VELKOMMEN TIL OS2iot", - "WELCOME-SUB": " Din indgang til administration af IoT enheder", - "LINK-1": "OS2iot's brugerforum", - "LINK-2": "produktsiden", - "LINK-3": "Github", - "SUB-HEADER-1":"Brugerforum", - "SUB-HEADER-2": "Om OS2iot", - "WELCOME-MESSAGE": "Bliv en aktiv del af ", - "WELCOME-MESSAGE-2": ". Her kan du stille spørgsmål, indrapportere fejl og dele dine udviklingsønsker. Ved fælles hjælp bliver løsningen bedre.", - "WELCOME-MESSAGE-3": "OS2iot er en open source løsning organiseret igennem OS2-fællesskabet. Du kan finde mere information om OS2iot på ", - "WELCOME-MESSAGE-4": " og følge udviklingen på ", - "NO-ACCESS": "Du har endnu ikke de fornødne rettigheder i OS2iot. Anmod om adgang til en organisation for at få tildelt rettigheder af din administrator.", - "NO-JOB-ACCESS": "Du har ikke passende jobfunktionsrolle, og har derfor ikke adgang til OS2IoT.", - "KOMBIT-LOGIN-ERROR": "Der skete en fejl ved login via KOMBIT adgangsstyring. Prøv igen senere.", - "USER-INACTIVE": "Login successfuldt, men din bruger er deaktiveret i OS2IoT. Kontakt din administrator for at få tildelt rettigheder" - }, - "ERROR": { - "SEMANTIC": "Semantisk fejl, verificer at navn og værdier er på det rigtige format" - }, - "DIALOG": { - "SAVE.TITLE": "Slet", - "DELETE.MESSAGE": "Vil du slette?", - "DELETE.ARE-YOU-SURE": "Er du sikker på, at du vil slette?", - "CLOSE": "Annuller", - "OK": "Ok", - "DIALOG-CONFIRM": "Ja, slet", - "DIALOG-REJECT": "Ja, afvis", - "OPENDATADK": { - "OK": "Send mail til OpenDataDk", - "CLOSE": "Nej, tak", - "TITLE": "Vil du sende data til OpenDataDK?", - "MESSAGE": "Send en mail til OpendataDK så opretter de dit datasæt" + "USER_PAGE": { + "AWAITING_CONFIRMATION": "Din bruger er oprettet og afventer bekræftelse fra administratorer på de organisationer du har søgt tilknytning.", + "APPLY_ORGANISATIONS": "Søg tilknytning til andre organisationer", + "APPLIED_ORGANISATIONS": "Der er pt. søgt eller allerede eksisterende tilknytning til følgende organisationer:", + "QUESTION_APPLY_ORGANISATIONS": "Ønsker du at søge tilknytning til andre organisationer?", + "USER_PAGE": "Organisationstilknytning", + "NO_APPLIED_ORGS": "Du har ikke søgt tilknytning til nogle organisationer.", + "NO_ORGS": "Der findes ikke yderligere organisationer." }, - "WELCOME": { - "DONT-SHOW-AGAIN": "Vis ikke igen" + "false": "Nej", + "true": "Ja", + "GUIDE": "Guide", + "HTTP_PUSH": "HTTP Push", + "Forbidden": "Du har ikke rettigheder til at foretage denne handling", + "Forbidden resource": "Du har ikke rettigheder til at foretage denne handling", + "GENERIC_HTTP": "Generisk HTTP", + "LORAWAN": "LoRaWAN", + "SIGFOX": "Sigfox", + "API-KEY": { + "NAME": "Navn", + "ORGANIZATION": "Organisation", + "PERMISSIONS": "Brugergrupper", + "KEY": "Nøgle", + "CREATE-NEW-API-KEY": "Opret ny nøgle", + "DETAIL": {}, + "EDIT": { + "NAME": "Indtast nøglens navn", + "NAME-PLACEHOLDER": "Indtast nøglens navn", + "CANCEL": "Annuller", + "SAVE": "Gem nøgle", + "CREATE-API-KEY": "Opret nøgle" + }, + "TABLE-ROW": { + "EDIT": "Redigér", + "DELETE": "Slet" + } }, - "EXPORT-CSV": { - "TITLE": "Eksportér metadata", - "BODY": "Igangsæt eksport af metadata om alle IoT-enheder i denne applikation i en CSV-fil?" - } - }, - "BATTERY": { - "NOT_AVAILABLE": "N/A" - }, - "TITLE": { - "APPLICATION": "OS2IoT - Applikationer", - "SIGFOX": "OS2IoT - Sigfox administration", - "DEVICEMODEL": "OS2IoT - Device model", - "LORAWAN-GATEWAY": "OS2IoT - LoRaWAN gateways", - "LORAWAN-PROFILE": "OS2IoT - LoRaWAN profiler", - "PAYLOADDECODER": "OS2IoT - Payload decoder", - "USER": "OS2IoT - Brugere", - "PERMISSION": "OS2IoT - Brugergrupper", - "ORGANIZATION": "OS2IoT - Organisationer", - "DATATARGET": "OS2IoT - Datatarget", - "MULTICAST": "OS2IoT - Multicast", - "BULKIMPORT": "OS2IoT - Bulk import", - "IOTDEVICE": "OS2IoT - IoT enhed", - "FRONTPAGE": "OS2IoT - Forside", - "API-KEY": "OS2IoT - API nøgler" - - }, - "PAGINATOR": { - "ITEM_PER_PAGE": "Antal pr. side", - "NEXT_PAGE": "Næste side", - "PREVIOUS_PAGE": "Forrige side", - "FIRST_PAGE": "Første side", - "LAST_PAGE": "Sidste side", - "OF": "af" - }, - "NEW_USER": { - "FIRST_LOGIN": "Siden dette er dit første login, bedes du udfylde din mail og de organisationer du ønsker at være medlem af." - }, - "USER_PAGE": { - "AWAITING_CONFIRMATION": "Din bruger er oprettet og afventer bekræftelse fra administratorer på de organisationer du har søgt tilknytning.", - "APPLY_ORGANISATIONS": "Søg tilknytning til andre organisationer", - "APPLIED_ORGANISATIONS": "Der er pt. søgt eller allerede eksisterende tilknytning til følgende organisationer:", - "QUESTION_APPLY_ORGANISATIONS": "Ønsker du at søge tilknytning til andre organisationer?", - "USER_PAGE": "Organisationstilknytning", - "NO_APPLIED_ORGS": "Du har ikke søgt tilknytning til nogle organisationer.", - "NO_ORGS": "Der findes ikke yderligere organisationer." - - }, - "false": "Nej", - "true": "Ja", - "GUIDE": "Guide", - "HTTP_PUSH": "HTTP Push", - "Forbidden": "Du har ikke rettigheder til at foretage denne handling", - "Forbidden resource": "Du har ikke rettigheder til at foretage denne handling", - "GENERIC_HTTP": "Generisk HTTP", - "LORAWAN": "LoRaWAN", - "SIGFOX": "Sigfox", - "API-KEY": { - "NAME": "Navn", - "ORGANIZATION": "Organisation", - "PERMISSIONS": "Brugergrupper", - "KEY": "Nøgle", - "CREATE-NEW-API-KEY": "Opret ny nøgle", - "DETAIL": {}, - "EDIT": { - "NAME": "Indtast nøglens navn", - "NAME-PLACEHOLDER": "Indtast nøglens navn", - "CANCEL": "Annuller", - "SAVE": "Gem nøgle", - "CREATE-API-KEY": "Opret nøgle" + "NoUsersAdded": "Ingen brugergrupper er tilføjet", + "FIWARE": { + "QUESTION": { + "GIVE-DATATARGET-CONTEXTBROKER-URL": "Angiv datatargets 'context broker' URL", + "GIVE-DATATARGET-CONTEXTBROKER-URL-PLACEHOLDER": "https://contextBroker.dk/", + "GIVE-DATATARGET-TENANT": "Angiv 'tenant'", + "GIVE-DATATARGET-TENANT-INFO": "hvis tom, vil default tenant blive brugt", + "GIVE-DATATARGET-TENANT-PLACEHOLDER": "Tenant's navn", + "GIVE-DATATARGET-CONTEXT": "Angiv 'context'", + "GIVE-DATATARGET-CONTEXT-INFO": "hvis tom, skal den angives i 'payload'", + "GIVE-DATATARGET-CONTEXT-PLACEHOLDER": "https://os2iot/context-file.json", + "GIVE-DATATARGET-TOKENENDPOINT": "Angiv token endpoint URL", + "GIVE-DATATARGET-TOKENENDPOINT-PLACEHOLDER": "https://os2iot/connect/token", + "GIVE-DATATARGET-CLIENTID": "Angiv client ID", + "GIVE-DATATARGET-CLIENTID-PLACEHOLDER": "Client's navn", + "GIVE-DATATARGET-CLIENTSECRET": "Angiv client secret", + "GIVE-DATATARGET-CLIENTSECRET-PLACEHOLDER": "Client's kode" + } }, - "TABLE-ROW": { - "EDIT": "Redigér", - "DELETE": "Slet" - } - }, - "NoUsersAdded": "Ingen brugergrupper er tilføjet", - "FIWARE": { - "QUESTION": { - "GIVE-DATATARGET-CONTEXTBROKER-URL": "Angiv datatargets 'context broker' URL", - "GIVE-DATATARGET-CONTEXTBROKER-URL-PLACEHOLDER": "https://contextBroker.dk/", - "GIVE-DATATARGET-TENANT": "Angiv 'tenant'", - "GIVE-DATATARGET-TENANT-INFO": "hvis tom, vil default tenant blive brugt", - "GIVE-DATATARGET-TENANT-PLACEHOLDER": "Tenant's navn", - "GIVE-DATATARGET-CONTEXT": "Angiv 'context'", - "GIVE-DATATARGET-CONTEXT-INFO": "hvis tom, skal den angives i 'payload'", - "GIVE-DATATARGET-CONTEXT-PLACEHOLDER": "https://os2iot/context-file.json", - "GIVE-DATATARGET-TOKENENDPOINT": "Angiv token endpoint URL", - "GIVE-DATATARGET-TOKENENDPOINT-PLACEHOLDER": "https://os2iot/connect/token", - "GIVE-DATATARGET-CLIENTID": "Angiv client ID", - "GIVE-DATATARGET-CLIENTID-PLACEHOLDER": "Client's navn", - "GIVE-DATATARGET-CLIENTSECRET": "Angiv client secret", - "GIVE-DATATARGET-CLIENTSECRET-PLACEHOLDER": "Client's kode" - } - }, - "DBLCLICKINFO": "Dobbeltklik på kortet eller træk i markøren for at flytte markøren", - "HEIGHTCURVESINFO": "Højdekurver vises kun det er valgt, og man er zoomet langt nok ind.", - "HEIGHTCURVES": "Højdekurver (0,5 m)", - "SATELLITEDENMARK": "Satellit Danmark" + "DBLCLICKINFO": "Dobbeltklik på kortet eller træk i markøren for at placere markøren", + "HEIGHTCURVESINFO": "Aktiverede højdekurver vises kun på de inderste zoomniveauer", + "HEIGHTCURVES": "Højdekurver (0,5 m)", + "SATELLITEDENMARK": "Satellit Danmark" } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index fcdd018a..d167bd07 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1,48 +1,48 @@ { - "GEN": { - "CANCEL": "Cancel", - "SHOW": "Show", - "PER-PAGE": "Per page" - }, - "NAV": { - "DASHBOARD": "Dashboard", - "APPLICATIONS": "Applications", - "ALL-IOT-DEVICES": "All IoT Devices" - }, - "APPLICATION": { - "CREATE": "Create application", - "SAVE": "Save application" - }, - "APPLICATION-TABLE": { - "NAME": "NAME", - "IOT-DEVICES": "IOT DEVICES", - "UPDATED": "LAST UPDATED" - }, - "APPLICATION-TABLE-ROW": { - "DELETE": "Delete", - "EDIT": "Edit", - "SHOW-OPTIONS": "Show options" - }, - "FORM": { - "CREATE-NEW-APPLICATION": "Create new application", - "EDIT-NEW-APPLICATION": "Edit application", - "CREATE-NEW-IOT-DEVICE": "Add IoT unit" - }, - "QUESTION": { - "APPLICATION-NAME-PLACEHOLDER": "Name of the application", - "APPLICATION-DESCRIPTION-PLACEHOLDER": "Short description of the application" - }, - "SORT": { - "SORT": "Sort by", - "UPDATED-ASCENDING": "Last updated: acsending", - "UPDATED-DESCENDING": "Last updated: faldende", - "CREATED-ASCENDING": "Created: acsending", - "CREATED-DESCENDING": "Created: faldende", - "NAME-ASCENDING": "Name: acsending", - "NAME-DESCENDING": "Name: faldende" - }, - "DBLCLICKINFO": "Doubleclick on the map or drag the marker to move the marker", - "HEIGHTCURVESINFO": "Height curves will only be shown if it's selected, and if you are zoomed in far enough.", - "HEIGHTCURVES": "Height curves (0,5 m)", - "SATELLITEDENMARK": "Satellite Denmark" + "GEN": { + "CANCEL": "Cancel", + "SHOW": "Show", + "PER-PAGE": "Per page" + }, + "NAV": { + "DASHBOARD": "Dashboard", + "APPLICATIONS": "Applications", + "ALL-IOT-DEVICES": "All IoT Devices" + }, + "APPLICATION": { + "CREATE": "Create application", + "SAVE": "Save application" + }, + "APPLICATION-TABLE": { + "NAME": "NAME", + "IOT-DEVICES": "IOT DEVICES", + "UPDATED": "LAST UPDATED" + }, + "APPLICATION-TABLE-ROW": { + "DELETE": "Delete", + "EDIT": "Edit", + "SHOW-OPTIONS": "Show options" + }, + "FORM": { + "CREATE-NEW-APPLICATION": "Create new application", + "EDIT-NEW-APPLICATION": "Edit application", + "CREATE-NEW-IOT-DEVICE": "Add IoT unit" + }, + "QUESTION": { + "APPLICATION-NAME-PLACEHOLDER": "Name of the application", + "APPLICATION-DESCRIPTION-PLACEHOLDER": "Short description of the application" + }, + "SORT": { + "SORT": "Sort by", + "UPDATED-ASCENDING": "Last updated: acsending", + "UPDATED-DESCENDING": "Last updated: faldende", + "CREATED-ASCENDING": "Created: acsending", + "CREATED-DESCENDING": "Created: faldende", + "NAME-ASCENDING": "Name: acsending", + "NAME-DESCENDING": "Name: faldende" + }, + "DBLCLICKINFO": "Doubleclick on the map or drag the marker to place the marker", + "HEIGHTCURVESINFO": "The activated contour lines are only displayed at the innermost zoom levels.", + "HEIGHTCURVES": "Height curves (0,5 m)", + "SATELLITEDENMARK": "Satellite Denmark" } From 2e60a16d203236a872f2c628f9870265c491c8e3 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Wed, 1 May 2024 12:21:06 +0200 Subject: [PATCH 5/9] pr changes --- .../shared/components/map/map.component.ts | 72 ++++++++++--------- src/app/shared/constants/map-constants.ts | 2 + src/assets/env.js | 9 --- 3 files changed, 40 insertions(+), 43 deletions(-) create mode 100644 src/app/shared/constants/map-constants.ts delete mode 100644 src/assets/env.js diff --git a/src/app/shared/components/map/map.component.ts b/src/app/shared/components/map/map.component.ts index 89091301..3068fd23 100644 --- a/src/app/shared/components/map/map.component.ts +++ b/src/app/shared/components/map/map.component.ts @@ -9,7 +9,7 @@ import { SimpleChanges, OnDestroy, } from "@angular/core"; -import * as L from "leaflet"; +import * as leaflet from "leaflet"; import "leaflet.fullscreen"; import { MapCoordinates, MarkerInfo } from "./map-coordinates.model"; import { OpenStreetMapProvider, GeoSearchControl } from "leaflet-geosearch"; @@ -18,6 +18,7 @@ import moment from "moment"; import "leaflet.markercluster"; import "proj4leaflet"; import { environment } from "@environments/environment"; +import { satelliteCenterLatitudeDenmark, satelliteCenterLongitudeDenmark } from "@shared/constants/map-constants"; @Component({ selector: "app-map", @@ -25,18 +26,16 @@ import { environment } from "@environments/environment"; styleUrls: ["./map.component.scss"], }) export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { - private satelliteCenterLat = 56.07900207957074; - private satelliteCenterLng = 9.998776628830988; private streetViewName = "Street view"; private datafordelerName; private heightCurvesName; - private ortofotowmts: L.TileLayer; - private streetMap: L.TileLayer; - private heightsMapWms: L.TileLayer.WMS; - private map: L.Map; + private ortofotowmts: leaflet.TileLayer; + private streetMap: leaflet.TileLayer; + private heightsMapWms: leaflet.TileLayer.WMS; + private map: leaflet.Map; public mapId; - private marker: L.Marker; - private markers: L.MarkerClusterGroup; + private marker: leaflet.Marker; + private markers: leaflet.MarkerClusterGroup; @Input() isFromApplication? = false; @Input() isFromCreation? = false; @Input() coordinates?: MapCoordinates; @@ -50,15 +49,15 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy private dafpw = environment.dafpassword; private clusterMaxRadius = 80; //Datafordeler uses 25832 format for coordinates. - private datafordelerCrs = new L.Proj.CRS("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs", { + private datafordelerCrs = new leaflet.Proj.CRS("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs", { resolutions: [1638.4, 819.2, 409.6, 204.8, 102.4, 51.2, 25.6, 12.8, 6.4, 3.2, 1.6, 0.8, 0.4, 0.2], origin: [120000, 6500000], }); private maxZoomToEnableLayerChange = 17; - private previousCenter: L.LatLngExpression | null = null; + private previousCenter: leaflet.LatLngExpression | null = null; private previousZoom: number | null = null; private provider: OpenStreetMapProvider; - private searchControl: L.Control; + private searchControl: leaflet.Control; constructor(private translate: TranslateService) {} @@ -89,7 +88,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy this.initMap(); this.placeMarkers(); - this.changeLayerListener(); + this.setupChangeLayerListener(); if (!this.isFromCreation) { return; @@ -113,8 +112,8 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy } } - private changeLayerListener() { - this.map.on("baselayerchange", (e: L.LayersControlEvent) => { + private setupChangeLayerListener() { + this.map.on("baselayerchange", (e: leaflet.LayersControlEvent) => { const layerName = e.name; // Save current center and zoom before changing the layer @@ -122,7 +121,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy this.previousZoom = this.map.getZoom(); if (layerName === this.streetViewName) { - this.map.options.crs = L.CRS.EPSG3857; //Default CRS. + this.map.options.crs = leaflet.CRS.EPSG3857; //Default CRS. this.map.options.maxZoom = 18; // Max zoom for leaflet map. } else { this.map.options.crs = this.datafordelerCrs; // Set back to custom CRS if needed @@ -145,7 +144,10 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy newZoom = Math.min(this.previousZoom - 5, this.map.options.maxZoom); //If zoom is below 7, then center the map to denmark in satellite. if (this.previousZoom < 7) { - const latlng: L.LatLng = new L.LatLng(this.satelliteCenterLat, this.satelliteCenterLng); + const latlng: leaflet.LatLng = new leaflet.LatLng( + satelliteCenterLatitudeDenmark, + satelliteCenterLongitudeDenmark + ); this.map.setView(latlng, 2); return; } @@ -166,7 +168,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy private makeClusterGroup() { this.markers.clearLayers(); - const clusterGroup = L.markerClusterGroup({ + const clusterGroup = leaflet.markerClusterGroup({ maxClusterRadius: this.clusterMaxRadius, }); @@ -199,7 +201,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy return; } if (this.coordinateList) { - const clusterGroup = L.markerClusterGroup({ + const clusterGroup = leaflet.markerClusterGroup({ maxClusterRadius: this.clusterMaxRadius, }); @@ -226,15 +228,15 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy //If it's the map from application details, then the gateways should not be included in the fit. //Only way to know if it's NOT a gateway, is if the marker is the grey marker. const group = !this.isFromApplication - ? L.featureGroup(markers) - : L.featureGroup(markers.filter(m => m.options.icon.options.iconUrl === this.greyMarker)); + ? leaflet.featureGroup(markers) + : leaflet.featureGroup(markers.filter(m => m.options.icon.options.iconUrl === this.greyMarker)); this.map.fitBounds(group.getBounds(), { padding: [50, 50] }); } private addMarker(latitude: number, longitude: number, draggable = true, markerInfo: MarkerInfo = null) { const markerIcon = this.getMarkerIcon(markerInfo?.active, markerInfo?.isDevice); - const marker = L.marker([latitude, longitude], { draggable, icon: markerIcon }); + const marker = leaflet.marker([latitude, longitude], { draggable, icon: markerIcon }); marker.on("dragend", event => this.dragend(event)); if (markerInfo && !markerInfo.isDevice) { const isActive = markerInfo.active ? "Aktiv" : "Inaktiv"; @@ -290,7 +292,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy return marker; } private getMarkerIcon(active = true, isDevice = false): any { - return L.icon({ + return leaflet.icon({ iconUrl: isDevice ? this.greyMarker : active ? this.greenMarker : this.redMarker, iconSize: [30, 38], iconAnchor: [19, 38], @@ -318,7 +320,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy private initMap(): void { const container = document.getElementById(this.mapId); if (container) { - this.map = L.map(this.mapId, { + this.map = leaflet.map(this.mapId, { center: [ this.coordinateList ? this.coordinateList[0]?.latitude : this.coordinates?.latitude, this.coordinateList ? this.coordinateList[0]?.longitude : this.coordinates?.longitude, @@ -326,7 +328,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy zoom: this.zoomLevel, maxZoom: 18, doubleClickZoom: false, - crs: L.CRS.EPSG3857, + crs: leaflet.CRS.EPSG3857, fullscreenControl: true, fullscreenControlOptions: { position: "topleft", @@ -334,11 +336,13 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy }, }); - this.streetMap = L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { - attribution: '© OpenStreetMap', - }).addTo(this.map); + this.streetMap = leaflet + .tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + attribution: '© OpenStreetMap', + }) + .addTo(this.map); - this.ortofotowmts = L.tileLayer( + this.ortofotowmts = leaflet.tileLayer( `https://services.datafordeler.dk/GeoDanmarkOrto/orto_foraar_wmts/1.0.0/WMTS?username=${this.dafusername}&password=${this.dafpw}&request=GetTile&version=1.0.0&service=WMTS&Layer=orto_foraar_wmts&style=default&format=image/jpeg&TileMatrixSet=KortforsyningTilingDK&TileMatrix={z}&TileRow={y}&TileCol={x}`, { attribution: '© Datafordeler', @@ -346,7 +350,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy } ); - this.heightsMapWms = L.tileLayer.wms( + this.heightsMapWms = leaflet.tileLayer.wms( `https://services.datafordeler.dk/DHMNedboer/dhm/1.0.0/WMS?username=${this.dafusername}&password=${this.dafpw}`, { transparent: "TRUE", @@ -361,16 +365,16 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy ); // Define layer groups for layer control - var baseLayers: L.Control.LayersObject = { + const baseLayers: leaflet.Control.LayersObject = { [this.streetViewName]: this.streetMap, [this.datafordelerName ?? "Satellit Danmark"]: this.ortofotowmts, }; - var overlays: L.Control.LayersObject = { + const overlays: leaflet.Control.LayersObject = { [this.heightCurvesName ?? "Højdekurver (0,5 m)"]: this.heightsMapWms, }; - const layerControl = L.control.layers(baseLayers, overlays).addTo(this.map); + const layerControl = leaflet.control.layers(baseLayers, overlays).addTo(this.map); //If it's a map with more than 1 marker, then the map change from street view to satelite will fail if zoom is above 16 for some reason.. Therefore, remove the possibility for it to happen. this.map.on("zoomend", () => { @@ -379,7 +383,7 @@ export class MapComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy //The layerControl type doesnt have any way to check if map is set. Therefore we have to make it "any". //If layerControl._map is NOT set, then the picker on the map is not shown. - var tempControl = layerControl as any; + const tempControl = layerControl as any; if (currentZoom >= this.maxZoomToEnableLayerChange) { layerControl.remove(); diff --git a/src/app/shared/constants/map-constants.ts b/src/app/shared/constants/map-constants.ts new file mode 100644 index 00000000..95b5c9d4 --- /dev/null +++ b/src/app/shared/constants/map-constants.ts @@ -0,0 +1,2 @@ +export const satelliteCenterLatitudeDenmark = 56.07900207957074; +export const satelliteCenterLongitudeDenmark = 9.998776628830988; diff --git a/src/assets/env.js b/src/assets/env.js deleted file mode 100644 index ff09815f..00000000 --- a/src/assets/env.js +++ /dev/null @@ -1,9 +0,0 @@ -// This file will be overwritten when running in Docker using env.template.js and envsubst -(function (window) { - window["env"] = window["env"] || {}; - window["env"].PRODUCTION = false; - window["env"].BASE_URL = "http://localhost:3000/api/v1/"; // For local testing - window["env"].TABLE_PAGE_SIZE = 25; // For local testing - window["env"].DAF_USERNAME = ""; // For local testing - window["env"].DAF_PASSWORD = ""; // For local testing -})(this); From 79f242e1ae5c45b0df2dbbf54c70260d185fe383 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Wed, 1 May 2024 12:21:37 +0200 Subject: [PATCH 6/9] added envjs to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 7f0380b0..131c61f0 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,5 @@ testem.log # System Files .DS_Store Thumbs.db + +*.env.js From a81abc76e43049c874d7d670bb511d5c13bdae62 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Wed, 1 May 2024 12:23:31 +0200 Subject: [PATCH 7/9] changed gitignore path to env --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 131c61f0..2f7a6fe5 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,4 @@ testem.log .DS_Store Thumbs.db -*.env.js +*/env.js From 2d4302d368be96e666fc7416fac4a955338c0476 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Wed, 1 May 2024 12:24:33 +0200 Subject: [PATCH 8/9] changed path to correct path.. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2f7a6fe5..5b6b731f 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,4 @@ testem.log .DS_Store Thumbs.db -*/env.js +src/assets/env.js From 9de113a92a0877027945ca5cca7f3bfcb31a9e4b Mon Sep 17 00:00:00 2001 From: August Andersen Date: Thu, 2 May 2024 07:51:26 +0200 Subject: [PATCH 9/9] fixed formatting --- src/assets/i18n/da.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json index e8d80650..99225a20 100644 --- a/src/assets/i18n/da.json +++ b/src/assets/i18n/da.json @@ -384,7 +384,7 @@ "RESPONSIBLE-NAME": "Gateway-ansvarlig", "RESPONSIBLE-EMAIL": "Kontaktmail", "RESPONSIBLE-PHONE-NUMBER": "Kontakttelefon", - "OPERATIONAL-NAME": "Driftsansvarlig", + "OPERATIONAL-NAME": "Driftsansvarlig", "OPERATIONAL-EMAIL": "Kontaktmail - drift", "TAGS": "Tags", "CREATED-AT": "Oprettelsesdato" @@ -828,7 +828,7 @@ "GATEWAYID": "Gateway id (EUI)", "GATEWAYID-PLACEHOLDER": "0000000000000000", "METADATA": "Gateway tags", - "METADATA-PLACEHOLDER": "Angiv JSON her: {\"tagName\": \"tagValue\"}", + "METADATA-PLACEHOLDER": "Angiv JSON her: {\"tagName\": \"tagValue\"}", "ALTITUDE": "Højde", "ALTITUDE-PLACEHOLDER": "00", "LONGITUDE": "Længdegrad", @@ -845,7 +845,7 @@ "GATEWAY-RESPONSIBLE-CONTACT-PLACEHOLDER": "Angiv mailadresse på gateway-ansvarlig", "GATEWAY-RESPONSIBLE-CONTACT-NUMBER": "Kontakttelefon", "GATEWAY-RESPONSIBLE-CONTACT-NUMBER-PLACEHOLDER": "Angiv telefonnummer på gateway-ansvarlig", - "OPERATION-RESPONSIBLE": "Driftsansvarlig", + "OPERATION-RESPONSIBLE": "Driftsansvarlig", "OPERATION-RESPONSIBLE-PLACEHOLDER": "Angiv ansvarlig for den fysiske drift af gateway", "OPERATION-RESPONSIBLE-CONTACT": "Kontaktmail - drift", "OPERATION-RESPONSIBLE-CONTACT-PLACEHOLDER": "Angiv mailadresse på driftsansvarlig"