This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new 9df8ba5e46 Minor: Added sort to sites and label configuration (#4049)
9df8ba5e46 is described below

commit 9df8ba5e46afb8fa0375d727ab3b7f3ce499527f
Author: Jacqueline Höllig <[email protected]>
AuthorDate: Mon Dec 15 10:10:12 2025 +0100

    Minor: Added sort to sites and label configuration (#4049)
    
    Co-authored-by: Dominik Riemer <[email protected]>
    Co-authored-by: Philipp Zehnder <[email protected]>
---
 .../utils/configuration/ConfigurationUtils.ts      |   2 +-
 ui/deployment/i18n/de.json                         | 641 +++++++++++----------
 ui/deployment/i18n/en.json                         | 641 +++++++++++----------
 .../src/lib/apis/labels.service.ts                 |  25 +
 .../label-configuration.component.html             | 105 ++--
 .../label-configuration.component.ts               |  19 +-
 .../site-area-configuration.component.html         |  37 +-
 .../site-area-configuration.component.ts           |  36 +-
 8 files changed, 856 insertions(+), 650 deletions(-)

diff --git a/ui/cypress/support/utils/configuration/ConfigurationUtils.ts 
b/ui/cypress/support/utils/configuration/ConfigurationUtils.ts
index 2c06edea38..618809df64 100644
--- a/ui/cypress/support/utils/configuration/ConfigurationUtils.ts
+++ b/ui/cypress/support/utils/configuration/ConfigurationUtils.ts
@@ -52,6 +52,6 @@ export class ConfigurationUtils {
 
     public static deleteLabel() {
         cy.dataCy('delete-label-button').click();
-        cy.dataCy('available-labels-list').should('have.length', 0);
+        cy.dataCy('no-table-entries').should('be.visible');
     }
 }
diff --git a/ui/deployment/i18n/de.json b/ui/deployment/i18n/de.json
index 388b6ceed6..801d314eb2 100644
--- a/ui/deployment/i18n/de.json
+++ b/ui/deployment/i18n/de.json
@@ -22,6 +22,7 @@
   "Change password": "Passwort ändern",
   "Appearance": "Darstellung",
   "Change the look and feel of your installation": "Darstellung der Anwendung 
ändern",
+  "Color scheme": "Farbschema",
   "Light mode": "Hell",
   "Dark mode": "Dunkel",
   "Save color schema": "Farbschema speichern",
@@ -80,29 +81,43 @@
   "Delete Pipeline": "Pipeline löschen",
   "Accept": "Akzeptieren",
   "Reject": "Ablehnen",
+  "New password": "Neues Passwort",
+  "Repeat password": "Passwort wiederholen",
+  "Error": "Fehler",
+  "There was an error while resetting your password.": "Beim Zurücksetzen 
Ihres Passworts ist ein Fehler aufgetreten.",
+  "Password changed": "Passwort geändert",
+  "Your password successfully changed.": "Ihr Passwort wurde erfolgreich 
geändert.",
   "Restore password": "Passwort wiederherstellen",
+  "Enter your mail address and we'll send you a link to restore your 
password.": "Geben Sie Ihre E-Mail-Adresse ein und wir senden Ihnen einen Link, 
mit dem Sie Ihr Passwort wiederherstellen können.",
   "Email": "E-Mail",
   "Reset password": "Passwort zurücksetzen",
   "Unknown error - contact your administrator to check the mail settings.": 
"Unbekannter Fehler - Administrator kontaktieren, um die E-Mail-Einstellungen 
zu überprüfen.",
+  "Success": "Erfolg",
   "In case this account exists, you'll receive a mail with instructions to 
restore your password shortly.": "In dem Fall, dass dieses Konto existiert, 
erhalten Sie in Kürze eine E-Mail mit Anweisungen zur Wiederherstellung Ihres 
Passworts.",
   "Go to login page": "Zur Anmeldeseite gehen",
   "Register": "Registrieren",
   "Initial password": "Ursprüngliches Passwort",
-  "Repeat password": "Passwort wiederholen",
   "Passwords do not match.": "Die Passwörter stimmen nicht überein.",
+  "We've sent out a confirmation mail to this address.": "Wir haben eine 
Bestätigungsmail an diese Adresse verschickt.",
   "Login": "Anmelden",
   "Email ": "E-Mail",
-  "Password": "Passwort",
+  "Password ": "Passwort",
   "Logging in": "Anmelden...",
-  "User not found or incorrect password provided.": "Benutzer nicht gefunden 
oder falsches Passwort angegeben.",
   "Please try again": "Bitte erneut versuchen",
+  "User not found or incorrect password provided.": "Benutzer nicht gefunden 
oder falsches Passwort angegeben.",
   "Forgot password?": "Passwort vergessen?",
   "Create new account": "Neuen Account erstellen",
   "or": "oder",
   "Login with": "Anmelden mit",
   "Documentation": "Dokumentation",
   "API Documentation": "API-Dokumentation",
+  "Welcome": "Willkommen",
   "Preparing pipeline editor...": "Pipeline-Editor vorbereiten...",
+  "Pipeline Name": "Name der Rohrleitung",
+  "Pipeline name can only contain letters, numbers, dashes (-), and 
underscores (_).": "Pipeline-Namen dürfen nur Buchstaben, Zahlen, Bindestriche 
(-) und Unterstriche (_) enthalten.",
+  "Description": "Beschreibung",
+  "Pipeline description must not have more than 80 characters.": "Die 
Pipeline-Beschreibung darf nicht mehr als 80 Zeichen umfassen.",
+  "Options": "Optionen",
   "The tutorial requires pipeline elements that are not yet installed.": "Für 
das Lernprogramm werden Pipeline-Elemente benötigt, die noch nicht installiert 
sind.",
   "Install the following pipeline elements and start the tutorial again:": 
"Installieren Sie die folgenden Pipeline-Elemente und starten Sie das 
Lernprogramm erneut:",
   "The input data stream does not satisfy the requirements specified by the 
data processor.": "Der Eingabedatenstrom erfüllt nicht die vom Datenprozessor 
festgelegten Anforderungen.",
@@ -141,191 +156,99 @@
   "Add field": "Feld hinzufügen",
   "Select all": "Alle auswählen",
   "Select none": "Keine auswählen",
-  "Field": "Feld",
-  "Settings": "Einstellungen",
-  "Resolution": "Auflösung",
-  "Threshold": "Schwellenwert",
-  "With Threshold being": "Schwellenwert entspricht",
-  "Upper Limit": "Obere Grenze",
-  "Lower Limit": "Untere Grenze",
-  "Warning Range (%)": "Warnbereich (%)",
-  "Show Value in Traffic Light": "Wert anzeigen",
-  "Axes": "Achsen",
-  "left axis": "linke Achse",
-  "right axis": "rechte Achse",
-  "Axis Pointer": "Achsen-Pointer",
-  "Enable": "Aktivieren",
-  "Time": "Zeit",
-  "Select Fields": "Felder auswählen",
-  "Search": "Suche",
-  "Filter": "Filter",
-  "Last seen:": "Zuletzt gesehen:",
-  "Select Value Type": "Größe auswählen",
-  "Numeric Value": "Numerischer Wert",
-  "Boolean Value": "Boolescher Wert",
-  "Interval in seconds in which an event must arrive": "Sekundenintervall, in 
dem ein Ereignis eintreffen muss",
-  "Interval [sec]": "Intervall [sec]",
-  "Show Last Seen Timestamp": "Letzten Zeitstempel anzeigen",
-  "Select Mapping": "Mapping auswählen",
-  "True": "Wahr",
-  "False": "Falsch",
-  "Rounding": "Rundung",
-  "Inner Radius": "Innerer Radius",
-  "Fields": "Felder",
-  "Latitude": "Breitengrad",
-  "Longitude": "Längengrad",
-  "Map Zoom": "Karte vergrößern",
-  "Focus map on last event": "Karte auf letztes Ereignis fokussieren",
-  "Marker or Trace": "Markierung oder Spur",
-  "Marker": "Markierung",
-  "Trace": "Spur",
-  "Marker Type": "Markierungsart",
-  "Pin": "Pin",
-  "Car": "Auto",
-  "Tooltip": "Tooltip",
-  "Tooltip Content": "Tooltip-Inhalt",
-  "Show delta indicator": "Delta-Indikator anzeigen",
-  "Auto-compute number of bins": "Automatische Berechnung der Bins",
-  "Number of bins": "Anzahl der Bins",
-  "All values": "Alle Werte",
-  "Minimum value": "Minimaler Wert",
-  "Maximum value": "Maximaler Wert",
-  "Show values as labels": "Werte als Beschriftung anzeigen",
-  "Visual Map Min": "Visuelle Heatmap Maximum",
-  "Visual Map Max": "Visuelle Heatmap Minimum",
-  "Min": "Min",
-  "Max": "Max",
-  "Display Name": "Anzeigename",
-  "X": "X",
-  "X Label": "X-Label",
-  "Y": "Y",
-  "Y Label": "Y-Label",
-  "Warning": "Warnung",
-  "This chart tries to load too much data (#Events:": "Dieses Diagramm 
versucht, zu viele Daten zu laden (#Events:",
-  "Please change the chart settings or decrease the time range": "Bitte ändern 
Sie die Diagramm-Einstellungen oder ändern Sie die Zeitintervall",
-  "Load anyway": "Trotzdem laden",
-  "(This might crash the browser)": "(Dies kann zum Absturz des Browsers 
führen)",
-  "Found no data in selected time range": "Keine Daten im ausgewählten 
Zeitintervall gefunden",
-  "Invalid configuration for": "Ungültige Konfiguration für",
-  "This chart is missing required fields - choose another chart type or add 
additional fields.": "In diesem Diagramm fehlen erforderliche Felder - wählen 
Sie einen anderen Diagrammtyp oder fügen Sie zusätzliche Felder hinzu.",
-  "More options": "Weitere Optionen",
-  "Download data": "Daten herunterladen",
-  "Edit Chart": "Diagramm bearbeiten",
-  "Reset": "Zurücksetzen",
-  "Delete Chart": "Diagramm löschen",
-  "The current data selection can't be displayed by this chart.": "Die 
aktuelle Auswahl kann in diesem Diagramm nicht angezeigt werden.",
-  "Deselect all": "Alle abwählen",
-  "Field settings": "Feldeinstellungen",
-  "Color": "Farbe",
-  "Label": "Label",
-  "Type": "Typ",
-  "Bar": "Balken",
-  "Line": "Linien",
-  "Scatter": "Streudiagramm",
-  "Scattered Line": "Streudiagramm-Linie",
-  "Axis": "Achse",
-  "Left": "Links",
-  "Right": "Rechts",
-  "Auto-scale {{title}}": "{{title}} automatisch skalieren",
-  "Chart settings": "Diagramm-Einstellungen",
-  "Show legend": "Legende anzeigen",
-  "Show toolbox": "Toolbox anzeigen",
-  "Show tooltip": "Tooltip anzeigen",
-  "Data Zoom": "Zoom",
-  "Active": "Aktiv",
-  "Wheel": "Rad",
-  "Slider": "Slider",
-  "Add custom color mapping": "Benutzerdefiniertes Mapping hinzufügen",
-  "Add Mapping": "Mapping hinzufügen",
-  "Value": "Wert",
-  "Remove Mapping": "Mapping entfernen",
-  "New chart": "Neues Diagramm",
-  "Charts": "Diagramme",
-  "Chart": "Diagramm",
-  "Created": "Erstellt",
-  "Edit chart": "Diagramm bearbeiten",
-  "Clone chart": "Diagramm kopieren",
-  "Delete chart": "Diagramm löschen",
-  "The desired chart was not found!": "Die gewünschte Karte wurde nicht 
gefunden!",
-  "Chart Name": "Diagrammname",
-  "Add to Asset": "Zu Asset hinzufügen",
-  "Add To Asset": "Zu Asset hinzufügen",
-  "Discard": "Verwerfen",
-  "Data": "Daten",
-  "Visualization": "Visualisierung",
-  "Back": "Zurück",
-  "Create": "Erstellen",
-  "Chart Type": "Diagrammtyp",
-  "New Data Source": "Neue Datenquelle",
-  "Clone Data Source": "Datenquelle klonen",
-  "Delete Data Source": "Datenquelle löschen",
-  "Dataset": "Datensatz",
-  "No data available! Please connect an adapter or verify your pipeline is 
running": "Keine Daten verfügbar! Bitte schließen Sie einen Adapter an oder 
überprüfen Sie, ob Ihre Pipeline läuft",
-  "Connect Adapter": "Adapter anschließen",
-  "Query": "Abfrage",
-  "Expand Less": "Ausklappen",
-  "Expand More": "Einklappen",
-  "Raw": "Rohdaten",
-  "Show raw data from your data source.": "Zeigen Sie Rohdaten aus Ihrer 
Datenquelle an.",
-  "Limit": "Limit",
-  "Page": "Seite",
-  "Aggregated": "Aggregiert",
-  "Aggregate raw data by time unit or value.": "Rohdaten nach Zeiteinheit oder 
Wert aggregieren.",
-  "Auto-Aggregate": "Auto-Aggregiert",
-  "Single": "Einzeln",
-  "Show single data entry.": "Einzelne Dateneinträge anzeigen.",
-  "Add Data Source": "Datenquelle hinzufügen",
-  "Deactivate browser overload warning": "Warnung vor Browser-Überlastung 
deaktivieren",
-  "Ignore Events with missing values": "Ereignisse mit fehlenden Werten 
ignorieren",
-  "Order": "Sortieren",
-  "Newest (descending)": "Neueste zuerst (absteigend)",
-  "Oldest (ascending)": "Älteste zuerst (aufsteigend)",
-  "Group by": "Gruppieren nach",
-  "Add Filter": "Filter hinzufügen",
-  "Mean": "Mittelwert",
-  "First": "Erster",
-  "Last": "Letzter",
-  "Mode": "Modus",
-  "Count": "Anzahl",
-  "Sum": "Summe",
-  "Median": "Median",
-  "Standard deviation": "Standardabweichung",
-  "Spread": "Spanne",
-  "Unit": "Einheit",
-  "Background": "Hintergrund",
-  "Default": "Standard",
-  "Text": "Text",
+  "Provider Type": "Anbieter Typ",
+  "Select Provider": "Anbieter auswählen",
+  "S3": "S3",
+  "Provider Settings": "Anbieter-Einstellungen",
+  "Access Key": "Access Key",
+  "Enter Access Key": "Access Key eingeben",
+  "Secret Key": "Secret Key",
+  "Enter Secret Key": "Secret Key eingeben",
+  "Endpoint": "Endpunkt",
+  "Enter Endpoint": "Endpunkt eingeben",
+  "Invalid URI format.": "Ungültiges URI-Format.",
+  "Bucket": "Bucket",
+  "Enter Bucket Name": "Bucketnamen eingeben",
+  "Region": "Region",
+  "Enter Region Name": "Name der Region eingeben",
+  "Do you really want to delete the export provider?": "Exportprovider 
wirklich löschen?",
+  "This operation cannot be undone. Please ensure that the data provider is 
not used in a datalake retention.": "Dieser Vorgang kann nicht rückgängig 
gemacht werden. Bitte stellen Sie sicher, dass der Provider in keiner 
Speicherrichtlinie verwendet wird.",
+  "Delete Data": "Daten löschen",
+  "Truncate Data": "Daten leeren",
+  "Date": "Datum",
+  "Path": "Pfad",
+  "State": "Status",
+  "Fail": "Fehler",
+  "Start Sync": "Synchronisierung starten",
+  "Run Sync Now": "Sync jetzt ausführen",
+  "Delete Sync": "Sync löschen",
+  "Data Retention Action": "Aktion",
+  "delete": "löschen",
+  "save": "speichern",
+  "save and delete": "speichern und löschen",
+  "Data Retention Intervals": "Aktionsintervall",
+  "Everything older than": "Älter als",
+  "days": "Tage",
+  "Export Settings": "Export-Einstellungen",
+  "Download Format": "Download-Format",
+  "Delimiter": "Trennzeichen",
+  "Export Provider": "Exportanbieter",
+  "No export providers found": "Keine Exportanbieter gefunden",
+  "Create a new S3 export provider in the dataset settings.": "Erstellen Sie 
einen neuen S3-Exportanbieter in den Dataset-Einstellungen.",
+  "Datasets": "Datensätze",
+  "Refresh": "Neu laden",
+  "Related Pipeline": "Zugehörige Pipelines",
+  "# Events": "# Ereignisse",
+  "Loading": "Laden",
+  "Retention Rate": "Speicherrichtlinie",
+  "Set retention rate": "Speicherrichtlinie festlegen",
+  "Retention Log": "Speicherprotokoll",
+  "Open Retention Log": "Speicherprotokoll öffnen",
+  "Download data from index": "Daten aus dem Index herunterladen",
+  "Truncate all data from index": "Alle Daten aus dem Index leeren",
+  "Remove index from database": "Index aus der Datenbank löschen",
+  "Export Providers": "Exportanbieter",
+  "Add, Edit, and Delete export providers used for backing up data lakes.": 
"Hinzufügen, Bearbeiten und Löschen von Exportanbietern, die für die Sicherung 
von Data Lakes verwendet werden.",
+  "New": "Neu",
+  "Edit Export Provider": "Exportanbieter bearbeiten",
+  "Remove": "Löschen",
+  "Remove export provider configuration": "Konfiguration des Exportanbieters 
entfernen",
+  "Test": "Test",
+  "Test export provider configuration": "Konfiguration des Exportanbieters 
testen",
+  "no stored export providers": "keine gespeicherten Exportanbieter",
   "Dashboard title": "Dashboardtitel",
   "Title must not be empty": "Titel darf nicht leer sein!",
-  "Description": "Beschreibung",
   "Default view mode": "Standard-Ansicht",
   "Grid view": "Rasteransicht",
   "Slide view": "Folienansicht",
-  "Grid": "Raster",
   "Grid columns": "Gitternetz-Spalten",
-  "Time settings": "Zeiteinstellungen",
   "Use global time settings instead of chart time settings": "Einheitliche 
Zeiteinstellungen anstelle von Diagramm-Zeiteinstellungen verwenden",
-  "Add Dashboard to Assets": "Dashboard zu Assets hinzufügen",
   "Add the current dashboard to an existing asset": "Das aktuelle Dashboard zu 
einem bestehenden Asset hinzufügen",
+  "Create": "Erstellen",
   "New dashboard title": "Neuer Dashboard-Titel",
   "Clone options": "Optionen zum Klonen",
   "Deep clone (also clone widgets)": "Tiefes Klonen (auch Widgets klonen)",
   "Modify chart configurations": "Ändern von Diagrammkonfigurationen",
+  "Chart Name": "Diagrammname",
   "Clone": "Klonen",
   "The desired dashboard was not found!": "Das gewünschte Dashboard wurde 
nicht gefunden!",
   "This dashboard is empty and doesn't contain any charts.": "Dieses Dashboard 
ist leer und hat keine Diagramm zum Anzeigen.",
+  "Discard": "Verwerfen",
   "View mode": "Ansicht",
+  "Grid": "Raster",
   "Slides": "Folien",
-  "Options": "Optionen",
   "Edit dashboard": "Dashboard bearbeiten",
   "Show time range selector": "Zeiteinstellungen anzeigen",
   "Hide time range selector": "Zeiteinstellungen ausblenden",
   "Delete dashboard": "Dashboard löschen",
+  "Charts": "Diagramme",
   "No charts found - create a new chart first to add it to this dashboard.": 
"Keine Diagramme gefunden - erstellen Sie zuerst ein neues Diagramm, um es zu 
diesem Dashboard hinzuzufügen.",
   "Create chart": "Diagramm erstellen",
   "New dashboard": "Neues Dashboard",
   "Dashboards": "Dashboards",
+  "Created": "Erstellt",
   "Kiosk mode": "Kiosk-Modus",
+  "Settings": "Einstellungen",
   "ID": "ID",
   "Output Topics": "Output-Topics",
   "Copy": "Kopieren",
@@ -337,6 +260,7 @@
   "Reloading nodes": "Knoten neu laden",
   "Font Style": "Schriftstil",
   "Tree": "Baum",
+  "Text": "Text",
   "Browse": "Durchsuchen",
   "Add node": "Knoten hinzufügen",
   "Remove node": "Knoten entfernen",
@@ -351,6 +275,7 @@
   "Upload": "Hochladen",
   "Add": "Hinzufügen",
   "Import from file": "Aus Datei importieren",
+  "Back": "Zurück",
   "File": "Datei",
   "Reset code template": "Codevorlage zurücksetzen",
   "Clean code": "Code aufräumen",
@@ -387,6 +312,7 @@
   "will be stopped and needs manual review": "wird gestoppt und muss manuell 
überprüft werden",
   "Please check and possibly modify existing dashboards and data views 
afterwards.": "Bitte überprüfen Sie die bestehenden Dashboards und 
Datenansichten und ändern Sie diese gegebenenfalls.",
   "Update adapter and migrate pipelines": "Adapter aktualisieren und Pipelines 
migrieren",
+  "Search": "Suche",
   "New adapter": "Neuer Adapter",
   "Start all adapters": "Alle Adapter starten",
   "Stop all adapters": "Alle Adapter anhalten",
@@ -394,7 +320,6 @@
   "Adapters": "Adapter",
   "Messages": "Nachrichten",
   "Last message": "Letzte Nachricht",
-  "Refresh": "Neu laden",
   "The desired adapter was not found!": "Der gewünschte Adapter wurde nicht 
gefunden!",
   "Last published message": "Zuletzt veröffentlichte Nachricht",
   "Published messages": "Nachrichten",
@@ -407,6 +332,7 @@
   "Adapter Description": "Adapter Beschreibung",
   "Run adapter": "Adapter ausführen",
   "Start adapter now": "Adapter jetzt starten",
+  "Add to Asset": "Zu Asset hinzufügen",
   "Add Adapter to an existing Asset": "Adapter zu einem bestehenden Asset 
hinzufügen",
   "Remove Duplicates": "Duplikate entfernen",
   "Avoid duplicated events within a certain time interval": "Vermeidung von 
doppelten Datenpunkte innerhalb eines bestimmten Zeitintervalls",
@@ -430,7 +356,6 @@
   "Measurement": "Messwert",
   "Dimension": "Dimension",
   "Header": "Header",
-  "Add a Nested Property": "Geschachteltes Feld hinzufügen",
   "Edit field": "Feld bearbeiten",
   "There was an error while guessing the schema of your configured data 
stream": "Beim Erkennen des Schemas der Datenquelle ist ein Fehler aufgetreten",
   "Service Selection": "Serviceauswahl",
@@ -443,14 +368,19 @@
   "Docs": "Doku",
   "Sites & Areas": "Standorte & Bereiche",
   "Manage your organization's sites and production areas": "Verwaltung der 
Standorte und Produktionsbereiche",
-  "New": "Neu",
   "Site": "Standort",
   "Areas": "Bereiche",
   "Geo features": "Geo-Features",
   "Geo features are used to better organize assets.": "Geo-Features dienen der 
besseren Organisation von Assets.",
   "Enable geo features": "Geo-Features aktivieren",
-  "Tile server URL(use placeholders for x, y and z coordinates)": "URL des 
Tile-Servers (Platzhalter für x-, y- und z-Koordinaten verwenden)",
-  "Copyright notice if required by the tile server": "Copyright-Hinweis, falls 
vom Tile-Server erforderlich",
+  "Layer type": "Schichttyp",
+  "Both tile servers and vector styles are supported.": "Es werden sowohl 
Kachelserver als auch Vektorstile unterstützt.",
+  "Tile": "Fliese",
+  "Vector": "Vektor",
+  "Style/Tile server URL": "Stil/Kachelserver URL",
+  "For tile server, use placeholders for x, y and z coordinates": "Für 
Kachelserver Platzhalter für x-, y- und z-Koordinaten verwenden",
+  "Copyright notice": "Copyright-Hinweis",
+  "Will be shown on the map if required by the tile server": "Wird auf der 
Karte angezeigt, wenn der Kachelserver dies verlangt",
   "User Accounts": "Benutzerkonten",
   "Add and edit user accounts": "Benutzerkonten hinzufügen und bearbeiten",
   "Service Accounts": "Servicekonten",
@@ -466,6 +396,7 @@
   "Group ID": "Gruppen-ID",
   "Edit user": "Benutzer bearbeiten",
   "Delete service": "Service löschen",
+  "Type": "Typ",
   "Full Name": "Vor- und Nachname",
   "Last Login": "Letzte Anmeldung",
   "Delete user": "Benutzer löschen",
@@ -475,9 +406,12 @@
   "Settings of externally-managed users cannot be changed.": "Die 
Einstellungen von extern verwalteten Benutzern können nicht geändert werden.",
   "Must be a valid email address.": "Muss eine gültige E-Mail-Adresse sein.",
   "Changing the current user's email will require a re-login.": "Änderung der 
E-Mail-Adresse erfordert eine erneute Anmeldung.",
+  "Password": "Passwort",
   "Auto-create password and send to user": "Passwort automatisch generieren 
und an den Benutzer versenden",
   "Client Secret": "Client-Schlüssel",
   "Minimum length 35 characters.": "Mindestens 35 Zeichen.",
+  "No groups configured": "Keine Gruppen konfiguriert",
+  "Create a new group in the Groups section of the security page.": "Erstellen 
Sie eine neue Gruppe im Abschnitt Gruppen auf der Sicherheitsseite.",
   "Account": "Konto",
   "Enabled": "Aktiviert",
   "Locked": "Gesperrt",
@@ -488,35 +422,41 @@
   "Available Privileges": "Verfügbare Rechte",
   "Selected Privileges": "Ausgewählte Rechte",
   "Alternate IDs": "Alternative IDs",
+  "User alternate IDs to map externally defined roles to this group": 
"Alternative Benutzer-IDs, um extern definierte Rollen dieser Gruppe 
zuzuordnen",
   "Group Name": "Name der Benutzergruppe",
+  "User alternate IDs to map externally defined groups to this group": 
"Alternative Benutzer-IDs, um extern definierte Gruppen dieser Gruppe 
zuzuordnen",
   "Generate and download new key pair": "Neues Schlüsselpaar generieren und 
herunterladen",
   "New Alternate ID": "Neue alternative ID",
   "Enter new alternate ID": "Neue alternative ID eingeben",
   "Kafka Settings": "Kafka-Einstellungen",
   "Manage Kafka settings for pipeline communication": "Verwalten der 
Kafka-Einstellungen für Pipeline-Kommunikation",
-  "Batch Size": "Batch Size",
-  "Message Max Bytes": "Message Max Bytes",
-  "Acks": "Acks",
-  "Linger MS": "Linger MS",
   "Protocols": "Protokolle",
   "Manage the priority of protocols used": "Priorität der verwendeten 
Protokolle verwalten",
+  "Restart required": "Neustart erforderlich",
+  "Changing the broker priority does not take effect immediately and requires 
a restart. Use this feature with caution.": "Die Änderung der Broker-Priorität 
wird nicht sofort wirksam und erfordert einen Neustart. Verwenden Sie diese 
Funktion mit Bedacht.",
   "Broker Configuration": "Broker-Konfiguration",
   "Manage broker connectivity": "Broker-Verbindung verwalten",
   "Host": "Host",
   "Port": "Port",
   "Labels": "Labels",
   "Configure labels which can be assigned to assets and other resources": 
"Labels konfigurieren, die Assets und anderen Ressourcen zugewiesen werden 
können",
+  "Label": "Label",
   "Edit label": "Label bearbeiten",
+  "To delete a label, please remove the label from all assets": "Um ein Label 
zu löschen, entfernen Sie bitte das Label aus allen Assets",
   "Delete label": "Label löschen",
   "Basic": "Allgemein",
   "Basic settings": "Grundeinstellungen",
+  "Default values": "Standardwerte",
   "These are default values - to use features such as email you need to store 
these values once.": "Dies sind lediglich Platzhalter - um Funktionen wie 
E-Mails zu nutzen, müssen diese Werte einmal abspeichert werden.",
   "App Name": "App Name",
+  "The app name as shown on the login screen and in emails": "Der Name der 
Anwendung, wie er auf dem Anmeldebildschirm und in E-Mails angezeigt wird",
   "Host and Port": "Host und Port",
+  "The URL where the application can be accessed, e.g., for links in emails.": 
"Die URL, unter der die Anwendung aufgerufen werden kann, z. B. für Links in 
E-Mails.",
   "Protocol": "Protokoll",
   "Registration": "Registrierung",
   "Registration process": "Registrierungsprozess",
-  "Self - registration requires valid mail server and basic host settings.": 
"Die Selbstregistrierung erfordert einen verfügbaren Mailserver und 
Host-Einstellungen.",
+  "Configuration required": "Konfiguration erforderlich",
+  "Self-registration requires valid mail server and configured basic host/port 
settings.": "Die Selbstregistrierung erfordert einen gültigen Mailserver und 
konfigurierte Grundeinstellungen für Host und Port.",
   "Allow self - registration": "Selbst-Registrierung zulassen",
   "Default roles for new users": "Standardrollen für neue Benutzer",
   "Allow self - service password recovery": "Wiederherstellung von Passwörtern 
im Self-Service erlauben",
@@ -527,10 +467,12 @@
   "Links": "Links",
   "Configure application links": "Anwendungslinks konfigurieren",
   "Documentation Link": "Dokumentations-Link",
+  "Define individual link targets to the documentation": "Definieren Sie 
individuelle Linkziele zur Dokumentation",
   "Show documentation link on login page": "Link zur Dokumentation auf 
Anmeldeseite anzeigen",
   "Show documentation link in user menu": "Link zur Dokumentation im 
Benutzermenü anzeigen",
   "Show API documentation link on login page": "Link zur API-Dokumentation auf 
der Login-Seite anzeigen",
   "Support Link": "Support-Link",
+  "Add an additional link that links to your support page": "Fügen Sie einen 
zusätzlichen Link hinzu, der zu Ihrer Support-Seite führt",
   "Show support link on login page": "Support-Link auf der Anmeldeseite 
anzeigen",
   "Files": "Dateien",
   "Upload and manage files that are used by adapters or pipeline elements.": 
"Hochladen und Verwalten von Dateien, die von Adaptern oder Pipeline-Elementen 
verwendet werden.",
@@ -582,7 +524,10 @@
   "Import from application package": "Import aus Anwendungspaket",
   "Start import process": "Importvorgang starten",
   "Upload application package file": "Anwendungspaket-Datei hochladen",
+  "Error while uploading application package": "Fehler beim Hochladen des 
Anwendungspakets",
+  "Check that the uploaded zip file is a valid export": "Prüfen Sie, ob die 
hochgeladene Zip-Datei ein gültiger Export ist",
   "Select resources to import": "Zu importierende Ressourcen auswählen",
+  "Deselect all": "Alle abwählen",
   "Assets": "Assets",
   "Data Lake Storage": "Speicherung im Data Lake",
   "Pipelines": "Pipelines",
@@ -597,9 +542,12 @@
   "Download export": "Export herunterladen",
   "Additional documents from generic storage": "Zusätzliche Dokumente aus dem 
Generic Storage",
   "Document ID": "Dokument-ID",
+  "No linked resources": "Keine verknüpften Ressourcen",
+  "Only linked resources are part of the application package.": "Nur 
verknüpfte Ressourcen sind Teil des Anwendungspakets.",
   "Mail Settings": "E-Mail-Einstellungen",
   "Settings to connect to a mail server": "Einstellungen zur Verbindung mit 
einem Mailserver",
   "Mail Server": "Mailserver",
+  "SMTP Host": "SMTP-Host",
   "Transport": "Transport",
   "SMTP server requires authentication": "SMTP-Server erfordert 
Authentifizierung",
   "SMTP Username": "SMTP-Benutzername",
@@ -610,17 +558,20 @@
   "Proxy Port": "Proxy-Port",
   "Proxy requires authentication": "Proxy erfordert Authentifizierung",
   "Proxy Username": "Proxy-Benutzername",
+  "Proxy Password": "Proxy-Passwort",
   "Sender": "Absender",
   "Sender Email Address": "Absender-E-Mail-Adresse",
   "Sender Name": "Absender Name",
   "Recipient for test mail": "Empfänger für Test-Mail",
   "Send Test Mail": "Test-Mail senden",
   "Trying to send test mail...": "Test-Mail wird versendet...",
-  "Success - please check your mail inbox.": "Senden erfolgreich - bitte 
Posteingang prüfen.",
+  "Please check your mail inbox to ensure the mail has been delivered.": 
"Bitte überprüfen Sie Ihren Posteingang, um sicherzustellen, dass die E-Mail 
zugestellt wurde.",
+  "Test mail send": "Test-Mail senden",
   "Could not send email": "E-Mail konnte nicht versendet werden",
   "Mail Template": "Mail-Vorlage",
   "Email Template Configuration": "Konfiguration der E-Mail-Vorlage",
   "Reset changes": "Änderungen zurücksetzen",
+  "Use placeholders": "Platzhalter verwenden",
   "You can set various placeholder variables that will be replaced with the 
actual values when sending an email:": "Platzhalter festlegen, die beim Senden 
einer E-Mail ersetzt werden:",
   "Save changes": "Änderungen speichern",
   "Choose a name for your site": "Name des Standorts festlegen",
@@ -631,6 +582,7 @@
   "Exact location of the site": "Genaue Lage des Standorts",
   "No areas defined yet.": "Noch keine Bereiche definiert.",
   "This site already exists": "Standort existiert bereits",
+  "Could not upload file": "Datei konnte nicht hochgeladen werden",
   "The following files already exist. Please rename them.": "Die folgenden 
Dateien existieren bereits. Bitte umbenennen.",
   "Import files": "Dateien importieren",
   "Rename files": "Dateien umbenennen",
@@ -647,75 +599,169 @@
   "Uninstalling": "Deinstallation von",
   "More Details:": "Mehr Details:",
   "Make available to all users with appropriate role": "Allen Benutzern mit 
entsprechender Rolle zur Verfügung stellen",
-  "Select Provider": "Anbieter auswählen",
-  "S3": "S3",
-  "Access Key": "Access Key",
-  "Enter Access Key": "Access Key eingeben",
-  "Secret Key": "Secret Key",
-  "Enter Secret Key": "Secret Key eingeben",
-  "Endpoint": "Endpunkt",
-  "Enter Endpoint": "Endpunkt eingeben",
-  "Invalid URI format.": "Ungültiges URI-Format.",
-  "Bucket": "Bucket",
-  "Enter Bucket Name": "Bucketnamen eingeben",
-  "Region": "Region",
-  "Enter Region Name": "Name der Region eingeben",
-  "Do you really want to delete the export provider?": "Exportprovider 
wirklich löschen?",
-  "This operation cannot be undone. Please ensure that the data provider is 
not used in a datalake retention.": "Dieser Vorgang kann nicht rückgängig 
gemacht werden. Bitte stellen Sie sicher, dass der Provider in keiner 
Speicherrichtlinie verwendet wird.",
-  "Delete Data": "Daten löschen",
-  "Truncate Data": "Daten leeren",
-  "Date": "Datum",
-  "Path": "Pfad",
-  "State": "Status",
-  "Success": "Erfolg",
-  "Fail": "Fehler",
-  "Error": "Fehler",
-  "Start Sync": "Synchronisierung starten",
-  "Run Sync Now": "Sync jetzt ausführen",
-  "Delete Sync": "Sync löschen",
-  "Data Retention Action": "Aktion",
-  "delete": "löschen",
-  "save": "speichern",
-  "save and delete": "speichern und löschen",
-  "Data Retention Intervals": "Aktionsintervall",
-  "Everything older than": "Älter als",
-  "days": "Tage",
-  "Export Settings": "Export-Einstellungen",
-  "Download Format": "Download-Format",
-  "Delimiter": "Trennzeichen",
-  "Export Provider": "Exportanbieter",
-  "Select Provider Type": "Anbietertyp auswählen",
-  "No export providers found. Please create one first.": "Keine Exportanbieter 
gefunden. Bitte erstellen Sie zuerst einen.",
-  "Data Lake Settings": "Data Lake Einstellungen",
-  "Manage persisted data streams": "Verwalten von gespeicherten Datenströmen",
-  "Related Pipeline": "Zugehörige Pipelines",
-  "# Events": "# Ereignisse",
-  "Loading": "Laden",
-  "Download data from index": "Daten aus dem Index herunterladen",
-  "Truncate": "Leeren",
-  "Truncate all data from index": "Alle Daten aus dem Index leeren",
-  "Remove": "Löschen",
-  "Remove index from database": "Index aus der Datenbank löschen",
-  "Retention Rate": "Speicherrichtlinie",
-  "Set retention rate": "Speicherrichtlinie festlegen",
-  "Retention Log": "Speicherprotokoll",
-  "Open Retention Log": "Speicherprotokoll öffnen",
-  "(no stored measurements)": "(keine gespeicherten Measurements)",
-  "Export Providers": "Exportanbieter",
-  "Add, Edit, and Delete export providers used for backing up data lakes.": 
"Hinzufügen, Bearbeiten und Löschen von Exportanbietern, die für die Sicherung 
von Data Lakes verwendet werden.",
-  "Provider Type": "Anbieter Typ",
-  "Edit Export Provider": "Exportanbieter bearbeiten",
-  "Remove export provider configuration": "Konfiguration des Exportanbieters 
entfernen",
-  "Test": "Test",
-  "Test export provider configuration": "Konfiguration des Exportanbieters 
testen",
-  "no stored export providers": "keine gespeicherten Exportanbieter",
+  "Field": "Feld",
+  "Resolution": "Auflösung",
+  "Threshold": "Schwellenwert",
+  "With Threshold being": "Schwellenwert entspricht",
+  "Upper Limit": "Obere Grenze",
+  "Lower Limit": "Untere Grenze",
+  "Warning Range (%)": "Warnbereich (%)",
+  "Show Value in Traffic Light": "Wert anzeigen",
+  "Axes": "Achsen",
+  "left axis": "linke Achse",
+  "right axis": "rechte Achse",
+  "Axis Pointer": "Achsen-Pointer",
+  "Enable": "Aktivieren",
+  "Time": "Zeit",
+  "Select Fields": "Felder auswählen",
+  "Filter": "Filter",
+  "Last seen:": "Zuletzt gesehen:",
+  "Select Value Type": "Größe auswählen",
+  "Numeric Value": "Numerischer Wert",
+  "Boolean Value": "Boolescher Wert",
+  "Interval [sec]": "Intervall [sec]",
+  "Interval in seconds in which an event must arrive": "Sekundenintervall, in 
dem ein Ereignis eintreffen muss",
+  "Show Last Seen Timestamp": "Letzten Zeitstempel anzeigen",
+  "Select Mapping": "Mapping auswählen",
+  "True": "Wahr",
+  "False": "Falsch",
+  "Rounding": "Rundung",
+  "Inner Radius": "Innerer Radius",
+  "Fields": "Felder",
+  "Latitude": "Breitengrad",
+  "Longitude": "Längengrad",
+  "Map Zoom": "Karte vergrößern",
+  "Focus map on last event": "Karte auf letztes Ereignis fokussieren",
+  "Marker or Trace": "Markierung oder Spur",
+  "Marker": "Markierung",
+  "Trace": "Spur",
+  "Marker Type": "Markierungsart",
+  "Pin": "Pin",
+  "Car": "Auto",
+  "Tooltip": "Tooltip",
+  "Tooltip Content": "Tooltip-Inhalt",
+  "Show delta indicator": "Delta-Indikator anzeigen",
+  "Auto-compute number of bins": "Automatische Berechnung der Bins",
+  "Number of bins": "Anzahl der Bins",
+  "All values": "Alle Werte",
+  "Minimum value": "Minimaler Wert",
+  "Maximum value": "Maximaler Wert",
+  "Show values as labels": "Werte als Beschriftung anzeigen",
+  "Visual Map Min": "Visuelle Heatmap Maximum",
+  "Visual Map Max": "Visuelle Heatmap Minimum",
+  "Min": "Min",
+  "Max": "Max",
+  "Display Name": "Anzeigename",
+  "X": "X",
+  "X Label": "X-Label",
+  "Y": "Y",
+  "Y Label": "Y-Label",
+  "Warning": "Warnung",
+  "This chart tries to load too much data (#Events:": "Dieses Diagramm 
versucht, zu viele Daten zu laden (#Events:",
+  "Please change the chart settings or decrease the time range": "Bitte ändern 
Sie die Diagramm-Einstellungen oder ändern Sie die Zeitintervall",
+  "Load anyway": "Trotzdem laden",
+  "(This might crash the browser)": "(Dies kann zum Absturz des Browsers 
führen)",
+  "Found no data in selected time range": "Keine Daten im ausgewählten 
Zeitintervall gefunden",
+  "Invalid configuration for": "Ungültige Konfiguration für",
+  "This chart is missing required fields - choose another chart type or add 
additional fields.": "In diesem Diagramm fehlen erforderliche Felder - wählen 
Sie einen anderen Diagrammtyp oder fügen Sie zusätzliche Felder hinzu.",
+  "More options": "Weitere Optionen",
+  "Download data": "Daten herunterladen",
+  "Edit Chart": "Diagramm bearbeiten",
+  "Reset": "Zurücksetzen",
+  "Delete Chart": "Diagramm löschen",
+  "The current data selection can't be displayed by this chart.": "Die 
aktuelle Auswahl kann in diesem Diagramm nicht angezeigt werden.",
+  "Field settings": "Feldeinstellungen",
+  "Color": "Farbe",
+  "Bar": "Balken",
+  "Line": "Linien",
+  "Scatter": "Streudiagramm",
+  "Scattered Line": "Streudiagramm-Linie",
+  "Axis": "Achse",
+  "Left": "Links",
+  "Right": "Rechts",
+  "Auto-scale {{title}}": "{{title}} automatisch skalieren",
+  "Chart settings": "Diagramm-Einstellungen",
+  "Show legend": "Legende anzeigen",
+  "Show toolbox": "Toolbox anzeigen",
+  "Show tooltip": "Tooltip anzeigen",
+  "Data Zoom": "Zoom",
+  "Active": "Aktiv",
+  "Wheel": "Rad",
+  "Slider": "Slider",
+  "Add custom color mapping": "Benutzerdefiniertes Mapping hinzufügen",
+  "Add Mapping": "Mapping hinzufügen",
+  "Value": "Wert",
+  "Remove Mapping": "Mapping entfernen",
+  "The desired chart was not found!": "Die gewünschte Karte wurde nicht 
gefunden!",
+  "Add To Asset": "Zu Asset hinzufügen",
+  "Data": "Daten",
+  "Visualization": "Visualisierung",
+  "Chart Type": "Diagrammtyp",
+  "New Data Source": "Neue Datenquelle",
+  "Clone Data Source": "Datenquelle klonen",
+  "Delete Data Source": "Datenquelle löschen",
+  "Dataset": "Datensatz",
+  "No data available! Please connect an adapter or verify your pipeline is 
running": "Keine Daten verfügbar! Bitte schließen Sie einen Adapter an oder 
überprüfen Sie, ob Ihre Pipeline läuft",
+  "Connect Adapter": "Adapter anschließen",
+  "Query": "Abfrage",
+  "Expand Less": "Ausklappen",
+  "Expand More": "Einklappen",
+  "Raw": "Rohdaten",
+  "Show raw data from your data source.": "Zeigen Sie Rohdaten aus Ihrer 
Datenquelle an.",
+  "Limit": "Limit",
+  "Page": "Seite",
+  "Aggregated": "Aggregiert",
+  "Aggregate raw data by time unit or value.": "Rohdaten nach Zeiteinheit oder 
Wert aggregieren.",
+  "Auto-Aggregate": "Auto-Aggregiert",
+  "Single": "Einzeln",
+  "Show single data entry.": "Einzelne Dateneinträge anzeigen.",
+  "Add Data Source": "Datenquelle hinzufügen",
+  "Deactivate browser overload warning": "Warnung vor Browser-Überlastung 
deaktivieren",
+  "Ignore Events with missing values": "Ereignisse mit fehlenden Werten 
ignorieren",
+  "Order": "Sortieren",
+  "Newest (descending)": "Neueste zuerst (absteigend)",
+  "Oldest (ascending)": "Älteste zuerst (aufsteigend)",
+  "Group by": "Gruppieren nach",
+  "Add Filter": "Filter hinzufügen",
+  "Mean": "Mittelwert",
+  "First": "Erster",
+  "Last": "Letzter",
+  "Mode": "Modus",
+  "Count": "Anzahl",
+  "Sum": "Summe",
+  "Median": "Median",
+  "Standard deviation": "Standardabweichung",
+  "Spread": "Spanne",
+  "Unit": "Einheit",
+  "Background": "Hintergrund",
+  "Default": "Standard",
+  "New chart": "Neues Diagramm",
+  "Chart": "Diagramm",
+  "Edit chart": "Diagramm bearbeiten",
+  "Clone chart": "Diagramm kopieren",
+  "Delete chart": "Diagramm löschen",
   "Select All": "Alle auswählen",
   "Deselect All": "Alle abwählen",
   "Update links": "Links aktualisieren",
+  "Link Type": "Link Typ",
+  "Data Stream": "Datenstrom",
+  "Dashboard": "Dashboard",
+  "Adapter": "Adapter",
+  "Resource ID": "Ressourcen-ID",
   "Create link": "Link erstellen",
   "Update link": "Link aktualisieren",
   "Asset Name": "Asset Name",
   "New asset": "Neues Asset",
+  "Show subassets": "Teilassets anzeigen",
+  "Custom fields": "Benutzerdefinierte Felder",
+  "Linked Resources": "Verknüpfte Ressourcen",
+  "Adapters, dashboards, and other entries connected to this asset.": 
"Adapter, Dashboards und andere Einträge, die mit diesem Asset verbunden sind.",
+  "No linked resources found.": "Keine verlinkten Ressourcen gefunden.",
+  "Attach adapters, dashboards, or pipelines in the asset editor to surface 
them here.": "Fügen Sie Adapter, Dashboards oder Pipelines im Asset-Editor 
hinzu, um sie hier anzuzeigen.",
+  "Navigate": "navigieren.",
+  "No location defined for this asset yet.": "Für dieses Asset ist noch kein 
Standort definiert.",
+  "Select asset to view details": "Wählen Sie ein Objekt aus, um Details 
anzuzeigen",
+  "Asset links": "Asset-Links",
   "Manage links": "Verwalten von Links",
   "Add link": "Link hinzufügen",
   "A short name of the asset": "Ein kurzer Name des Assets",
@@ -723,64 +769,41 @@
   "A unique id for this asset in one word": "Eine eindeutige Kennung für 
dieses Asset in einem Wort",
   "Asset Type": "Asset-Typ",
   "The ISA95 type of this asset": "Der ISA95-Typ dieser Anlage",
-  "Assign additional labels to better discover your assets": "Weisen Sie 
zusätzliche Labels zu, um Ihre Assets besser zu finden",
+  "Labels & custom fields": "Label und benutzerdefinierte Felder",
   "Sites": "Standorte",
   "Assign a location (site and area) to this asset": "Weisen Sie diesem Asset 
einen Standort (Standort und Gebiet) zu",
   "Manage Sites": "Standorte verwalten",
+  "Area": "Bereich",
   "Add exact location": "Genauen Standort hinzufügen",
+  "Assign additional labels to better discover your assets": "Weisen Sie 
zusätzliche Labels zu, um Ihre Assets besser zu finden",
+  "Manage Labels": "Labels verwalten",
   "No labels available - Click 'Manage Labels'": "Keine Labels vorhanden - 
Klicken Sie auf 'Labels verwalten'.",
   "Click to add label": "Klicken Sie, um ein Label hinzuzufügen",
-  "Manage Labels": "Labels verwalten",
+  "Add additional fields to the asset, e.g., to manage responsibilities": 
"Hinzufügen zusätzlicher Felder zum Asset, z. B. zur Verwaltung von 
Zuständigkeiten",
+  "Field name": "Name des Feldes",
   "success": "Erfolg",
   "error": "Fehler",
   "waiting": "Warten",
   "Network Error": "Netzwerkfehler",
   "Deleting pipeline...": "Löschen der Pipeline...",
   "Stopping pipeline...": "Pipeline stoppen...",
-  "Gauge": "Gauge",
-  "The current value displayed in a gauge": "Der aktuelle Wert, der im 
Gauge-Chart angezeigt wird",
-  "Table": "Tabelle",
-  "A table displaying the data in rows and columns": "Eine Tabelle, die Daten 
in Zeilen und Spalten anzeigt",
-  "Traffic Light": "Ampel",
-  "A traffic light that shows if a value is above/below a threshold": "Eine 
Ampel, die anzeigt, ob ein Wert über/unter einem Schwellenwert liegt",
-  "A simple red/green status light": "Eine einfache rot/grüne Statuslampe",
-  "Map": "Karte",
-  "A map visualization for spatial coordinates": "Eine Kartenvisualisierung 
für räumliche Koordinaten",
-  "Time-Series Heatmap": "Zeitreihen-Heatmap",
-  "A heatmap that shows values mapped to a color range": "Eine Heatmap, die 
einem Farbbereich zugeordnete Werte anzeigt",
-  "A heatmap that lets you map specific values to a color": "Eine Heatmap, mit 
der Sie bestimmte Werte einer Farbe zuordnen können",
-  "Time Series Chart": "Zeitreihen-Diagramm",
-  "A simple chart that shows values on a value/time graph": "Ein einfaches 
Diagramm, das Werte in einem Wert/Zeit-Diagramm anzeigt",
-  "Image": "Bild",
-  "Display an image": "Ein Bild anzeigen",
-  "Indicator": "Indikator",
-  "The current value displayed as a number": "Der aktuelle Wert wird als Zahl 
angezeigt",
-  "Display points on an x/y plane": "Punkte in einer x/y-Ebene anzeigen",
-  "Histogram": "Histogramm",
-  "Shows the distribution of numerical data": "Zeigt die Verteilung der 
numerischen Daten",
-  "Pie": "Kreisdiagramm",
-  "A pie chart that shows the frequency of specific values": "Ein 
Kreisdiagramm, das die Häufigkeit bestimmter Werte anzeigt",
-  "Value Distribution Heatmap": "Wertverteilung-Heatmap",
-  "A chart that shows the distribution of numerical data as a heatmap": "Ein 
Diagramm, das die Verteilung von numerischen Daten als Heatmap darstellt",
-  "2D Density Contour": "2D-Dichteverteilung",
-  "A chart that shows data points as dots on an x/y plane and highlights 
similar points": "Ein Diagramm, das Datenpunkte als Punkte auf einer x/y-Ebene 
darstellt und ähnliche Punkte hervorhebt",
-  "No Warning Range defined": "Kein Warnbereich definiert",
-  "Current Warning Range: ": "Aktueller Warnbereich: ",
-  "to": "zu",
-  "Are you sure you want to delete this chart?": "Sind Sie sicher, dass Sie 
dieses Diagramm löschen wollen?",
-  "The chart will be removed from all dashboards as well. This action cannot 
be undone!": "Das Diagramm wird auch aus allen Dashboards entfernt. Diese 
Aktion kann nicht rückgängig gemacht werden!",
-  "Do you want to link the chart to an Asset?": "Diagramm mit einem Asset 
verknüpfen?",
-  "Update asset links or close.": "Asset-Links aktualisieren oder schließen.",
+  "Testing the connection.": "Testen der Verbindung.",
+  "Connection was established and test file was successfully saved:": "Die 
Verbindung wurde hergestellt und die Testdatei wurde erfolgreich gespeichert:",
+  "Connection could not be established.": "Die Verbindung konnte nicht 
hergestellt werden.",
+  "Truncating data...": "Daten leeren...",
+  "Deleting data...": "Daten löschen...",
+  "Sync was successful.": "Die Synchronisierung war erfolgreich.",
+  "Sync was not successful": "Synchronisierung war nicht erfolgreich",
+  "Export Data": "Daten exportieren",
+  "New Export Provider": "Neuer Exportanbieter",
+  "Truncate data": "Daten leeren",
+  "Delete data": "Daten löschen",
+  "Delete Export Provider": "Exportanbieter löschen",
+  "Test Export Provider Connection": "Test der Export-Provider-Verbindung",
+  "Set Data Retention": "Speicherrichtlinie bearbeiten",
   "Save changes?": "Änderungen speichern?",
-  "Update all changes to chart or discard current changes.": "Aktualisieren 
Sie alle Änderungen im Diagramm oder verwerfen Sie die aktuellen Änderungen.",
-  "Discard changes": "Änderungen verwerfen",
-  "Millisecond": "Millisekunde",
-  "Second": "Sekunde",
-  "Minute": "Minute",
-  "Hour": "Stunde",
-  "Day": "Tag",
-  "Week": "Woche",
   "Update all changes to dashboard charts or discard current changes.": 
"Aktualisieren Sie alle Änderungen der Diagramme oder verwerfen Sie aktuelle 
Änderungen.",
+  "Discard changes": "Änderungen verwerfen",
   "Off": "Aus",
   "Are you sure you want to delete this dashboard?": "Sind Sie sicher, dass 
Sie dieses Dashboard löschen möchten?",
   "This action cannot be undone!": "Diese Aktion kann nicht rückgängig gemacht 
werden!",
@@ -813,7 +836,6 @@
   "Edit adapter": "Adapter bearbeiten",
   "Adapter generation": "Adaptererzeugung",
   "General": "Allgemein",
-  "Data Lake": "Data Lake",
   "Export/Import": "Export/Import",
   "Extensions": "Extensions",
   "Extension Services": "Extension Services",
@@ -845,8 +867,6 @@
   "Service details": "Service-Details",
   "Certificate details": "Zertifikat-Details",
   "Installation": "Installation",
-  "Adapter": "Adapter",
-  "Data Stream": "Datenstrom",
   "Data Processor": "Datenprozessor",
   "Data Sink": "Datensenke",
   "Manage permissions for pipeline element {{name}}": "Berechtigungen für 
Pipeline-Element {{name}} verwalten",
@@ -858,27 +878,54 @@
   "Email title": "E-Mail-Titel",
   "Email preheader": "E-Mail Pre-Header",
   "Email custom inner content (mandatory)": "Benutzerdefinierter E-Mail-Inhalt 
(erforderlich)",
-  "Testing the connection.": "Testen der Verbindung.",
-  "Connection was established and test file was successfully saved:": "Die 
Verbindung wurde hergestellt und die Testdatei wurde erfolgreich gespeichert:",
-  "Connection could not be established.": "Die Verbindung konnte nicht 
hergestellt werden.",
-  "Truncating data...": "Daten leeren...",
-  "Deleting data...": "Daten löschen...",
-  "Sync was successful.": "Die Synchronisierung war erfolgreich.",
-  "Sync was not successful": "Synchronisierung war nicht erfolgreich",
-  "Export Data": "Daten exportieren",
-  "New Export Provider": "Neuer Exportanbieter",
-  "Truncate data": "Daten leeren",
-  "Delete data": "Daten löschen",
-  "Delete Export Provider": "Exportanbieter löschen",
-  "Test Export Provider Connection": "Test der Export-Provider-Verbindung",
-  "Set Data Retention": "Speicherrichtlinie bearbeiten",
+  "Gauge": "Gauge",
+  "The current value displayed in a gauge": "Der aktuelle Wert, der im 
Gauge-Chart angezeigt wird",
+  "Table": "Tabelle",
+  "A table displaying the data in rows and columns": "Eine Tabelle, die Daten 
in Zeilen und Spalten anzeigt",
+  "Traffic Light": "Ampel",
+  "A traffic light that shows if a value is above/below a threshold": "Eine 
Ampel, die anzeigt, ob ein Wert über/unter einem Schwellenwert liegt",
+  "A simple red/green status light": "Eine einfache rot/grüne Statuslampe",
+  "Map": "Karte",
+  "A map visualization for spatial coordinates": "Eine Kartenvisualisierung 
für räumliche Koordinaten",
+  "Time-Series Heatmap": "Zeitreihen-Heatmap",
+  "A heatmap that shows values mapped to a color range": "Eine Heatmap, die 
einem Farbbereich zugeordnete Werte anzeigt",
+  "A heatmap that lets you map specific values to a color": "Eine Heatmap, mit 
der Sie bestimmte Werte einer Farbe zuordnen können",
+  "Time Series Chart": "Zeitreihen-Diagramm",
+  "A simple chart that shows values on a value/time graph": "Ein einfaches 
Diagramm, das Werte in einem Wert/Zeit-Diagramm anzeigt",
+  "Image": "Bild",
+  "Display an image": "Ein Bild anzeigen",
+  "Indicator": "Indikator",
+  "The current value displayed as a number": "Der aktuelle Wert wird als Zahl 
angezeigt",
+  "Display points on an x/y plane": "Punkte in einer x/y-Ebene anzeigen",
+  "Histogram": "Histogramm",
+  "Shows the distribution of numerical data": "Zeigt die Verteilung der 
numerischen Daten",
+  "Pie": "Kreisdiagramm",
+  "A pie chart that shows the frequency of specific values": "Ein 
Kreisdiagramm, das die Häufigkeit bestimmter Werte anzeigt",
+  "Value Distribution Heatmap": "Wertverteilung-Heatmap",
+  "A chart that shows the distribution of numerical data as a heatmap": "Ein 
Diagramm, das die Verteilung von numerischen Daten als Heatmap darstellt",
+  "2D Density Contour": "2D-Dichteverteilung",
+  "A chart that shows data points as dots on an x/y plane and highlights 
similar points": "Ein Diagramm, das Datenpunkte als Punkte auf einer x/y-Ebene 
darstellt und ähnliche Punkte hervorhebt",
+  "No Warning Range defined": "Kein Warnbereich definiert",
+  "Current Warning Range: ": "Aktueller Warnbereich: ",
+  "to": "zu",
+  "Do you want to link the chart to an Asset?": "Diagramm mit einem Asset 
verknüpfen?",
+  "Update asset links or close.": "Asset-Links aktualisieren oder schließen.",
+  "Update all changes to chart or discard current changes.": "Aktualisieren 
Sie alle Änderungen im Diagramm oder verwerfen Sie die aktuellen Änderungen.",
+  "Millisecond": "Millisekunde",
+  "Second": "Sekunde",
+  "Minute": "Minute",
+  "Hour": "Stunde",
+  "Day": "Tag",
+  "Week": "Woche",
+  "Are you sure you want to delete this chart?": "Sind Sie sicher, dass Sie 
dieses Diagramm löschen wollen?",
+  "The chart will be removed from all dashboards as well. This action cannot 
be undone!": "Das Diagramm wird auch aus allen Dashboards entfernt. Diese 
Aktion kann nicht rückgängig gemacht werden!",
   "Create asset": "Asset erstellen",
   "Are you sure you want to delete this asset?": "Möchten Sie dieses Asset 
wirklich löschen?",
   "Delete Asset": "Lösche Asset",
   "Manage permissions for asset ": "Berechtigungen für Assets verwalten",
+  "Update asset links": "Asset-Links aktualisieren",
   "Manage asset links": "Verwalten von Asset-Verknüpfungen",
   "Create asset links": "Asset-Links erstellen",
-  "Update asset links": "Asset-Links aktualisieren",
   "Owner": "Eigentümer",
   "Public Element": "Öffentliches Element",
   "visible to registered users": "sichtbar für registrierte Benutzer",
diff --git a/ui/deployment/i18n/en.json b/ui/deployment/i18n/en.json
index a3214ca25e..369b497ee3 100644
--- a/ui/deployment/i18n/en.json
+++ b/ui/deployment/i18n/en.json
@@ -22,6 +22,7 @@
   "Change password": null,
   "Appearance": null,
   "Change the look and feel of your installation": null,
+  "Color scheme": null,
   "Light mode": null,
   "Dark mode": null,
   "Save color schema": null,
@@ -80,29 +81,43 @@
   "Delete Pipeline": null,
   "Accept": null,
   "Reject": null,
+  "New password": null,
+  "Repeat password": null,
+  "Error": null,
+  "There was an error while resetting your password.": null,
+  "Password changed": null,
+  "Your password successfully changed.": null,
   "Restore password": null,
+  "Enter your mail address and we'll send you a link to restore your 
password.": null,
   "Email": null,
   "Reset password": null,
   "Unknown error - contact your administrator to check the mail settings.": 
null,
+  "Success": null,
   "In case this account exists, you'll receive a mail with instructions to 
restore your password shortly.": null,
   "Go to login page": null,
   "Register": null,
   "Initial password": null,
-  "Repeat password": null,
   "Passwords do not match.": null,
+  "We've sent out a confirmation mail to this address.": null,
   "Login": null,
   "Email ": null,
-  "Password": null,
+  "Password ": null,
   "Logging in": null,
-  "User not found or incorrect password provided.": null,
   "Please try again": null,
+  "User not found or incorrect password provided.": null,
   "Forgot password?": null,
   "Create new account": null,
   "or": null,
   "Login with": null,
   "Documentation": null,
   "API Documentation": null,
+  "Welcome": null,
   "Preparing pipeline editor...": null,
+  "Pipeline Name": null,
+  "Pipeline name can only contain letters, numbers, dashes (-), and 
underscores (_).": null,
+  "Description": null,
+  "Pipeline description must not have more than 80 characters.": null,
+  "Options": null,
   "The tutorial requires pipeline elements that are not yet installed.": null,
   "Install the following pipeline elements and start the tutorial again:": 
null,
   "The input data stream does not satisfy the requirements specified by the 
data processor.": null,
@@ -141,191 +156,99 @@
   "Add field": null,
   "Select all": null,
   "Select none": null,
-  "Field": null,
-  "Settings": null,
-  "Resolution": null,
-  "Threshold": null,
-  "With Threshold being": null,
-  "Upper Limit": null,
-  "Lower Limit": null,
-  "Warning Range (%)": null,
-  "Show Value in Traffic Light": null,
-  "Axes": null,
-  "left axis": null,
-  "right axis": null,
-  "Axis Pointer": null,
-  "Enable": null,
-  "Time": null,
-  "Select Fields": null,
-  "Search": null,
-  "Filter": null,
-  "Last seen:": null,
-  "Select Value Type": null,
-  "Numeric Value": null,
-  "Boolean Value": null,
-  "Interval in seconds in which an event must arrive": null,
-  "Interval [sec]": null,
-  "Show Last Seen Timestamp": null,
-  "Select Mapping": null,
-  "True": null,
-  "False": null,
-  "Rounding": null,
-  "Inner Radius": null,
-  "Fields": null,
-  "Latitude": null,
-  "Longitude": null,
-  "Map Zoom": null,
-  "Focus map on last event": null,
-  "Marker or Trace": null,
-  "Marker": null,
-  "Trace": null,
-  "Marker Type": null,
-  "Pin": null,
-  "Car": null,
-  "Tooltip": null,
-  "Tooltip Content": null,
-  "Show delta indicator": null,
-  "Auto-compute number of bins": null,
-  "Number of bins": null,
-  "All values": null,
-  "Minimum value": null,
-  "Maximum value": null,
-  "Show values as labels": null,
-  "Visual Map Min": null,
-  "Visual Map Max": null,
-  "Min": null,
-  "Max": null,
-  "Display Name": null,
-  "X": null,
-  "X Label": null,
-  "Y": null,
-  "Y Label": null,
-  "Warning": null,
-  "This chart tries to load too much data (#Events:": null,
-  "Please change the chart settings or decrease the time range": null,
-  "Load anyway": null,
-  "(This might crash the browser)": null,
-  "Found no data in selected time range": null,
-  "Invalid configuration for": null,
-  "This chart is missing required fields - choose another chart type or add 
additional fields.": null,
-  "More options": null,
-  "Download data": null,
-  "Edit Chart": null,
-  "Reset": null,
-  "Delete Chart": null,
-  "The current data selection can't be displayed by this chart.": null,
-  "Deselect all": null,
-  "Field settings": null,
-  "Color": null,
-  "Label": null,
-  "Type": null,
-  "Bar": null,
-  "Line": null,
-  "Scatter": null,
-  "Scattered Line": null,
-  "Axis": null,
-  "Left": null,
-  "Right": null,
-  "Auto-scale {{title}}": "Auto-scale {{title}}",
-  "Chart settings": null,
-  "Show legend": null,
-  "Show toolbox": null,
-  "Show tooltip": null,
-  "Data Zoom": null,
-  "Active": null,
-  "Wheel": null,
-  "Slider": null,
-  "Add custom color mapping": null,
-  "Add Mapping": null,
-  "Value": null,
-  "Remove Mapping": null,
-  "New chart": null,
-  "Charts": null,
-  "Chart": null,
-  "Created": null,
-  "Edit chart": null,
-  "Clone chart": null,
-  "Delete chart": null,
-  "The desired chart was not found!": null,
-  "Chart Name": null,
-  "Add to Asset": null,
-  "Add To Asset": null,
-  "Discard": null,
-  "Data": null,
-  "Visualization": null,
-  "Back": null,
-  "Create": null,
-  "Chart Type": null,
-  "New Data Source": null,
-  "Clone Data Source": null,
-  "Delete Data Source": null,
-  "Dataset": null,
-  "No data available! Please connect an adapter or verify your pipeline is 
running": null,
-  "Connect Adapter": null,
-  "Query": null,
-  "Expand Less": null,
-  "Expand More": null,
-  "Raw": null,
-  "Show raw data from your data source.": null,
-  "Limit": null,
-  "Page": null,
-  "Aggregated": null,
-  "Aggregate raw data by time unit or value.": null,
-  "Auto-Aggregate": null,
-  "Single": null,
-  "Show single data entry.": null,
-  "Add Data Source": null,
-  "Deactivate browser overload warning": null,
-  "Ignore Events with missing values": null,
-  "Order": null,
-  "Newest (descending)": null,
-  "Oldest (ascending)": null,
-  "Group by": null,
-  "Add Filter": null,
-  "Mean": null,
-  "First": null,
-  "Last": null,
-  "Mode": null,
-  "Count": null,
-  "Sum": null,
-  "Median": null,
-  "Standard deviation": null,
-  "Spread": null,
-  "Unit": null,
-  "Background": null,
-  "Default": null,
-  "Text": null,
+  "Provider Type": null,
+  "Select Provider": null,
+  "S3": null,
+  "Provider Settings": null,
+  "Access Key": null,
+  "Enter Access Key": null,
+  "Secret Key": null,
+  "Enter Secret Key": null,
+  "Endpoint": null,
+  "Enter Endpoint": null,
+  "Invalid URI format.": null,
+  "Bucket": null,
+  "Enter Bucket Name": null,
+  "Region": null,
+  "Enter Region Name": null,
+  "Do you really want to delete the export provider?": null,
+  "This operation cannot be undone. Please ensure that the data provider is 
not used in a datalake retention.": null,
+  "Delete Data": null,
+  "Truncate Data": null,
+  "Date": null,
+  "Path": null,
+  "State": null,
+  "Fail": null,
+  "Start Sync": null,
+  "Run Sync Now": null,
+  "Delete Sync": null,
+  "Data Retention Action": null,
+  "delete": null,
+  "save": null,
+  "save and delete": null,
+  "Data Retention Intervals": null,
+  "Everything older than": null,
+  "days": null,
+  "Export Settings": null,
+  "Download Format": null,
+  "Delimiter": null,
+  "Export Provider": null,
+  "No export providers found": null,
+  "Create a new S3 export provider in the dataset settings.": null,
+  "Datasets": null,
+  "Refresh": null,
+  "Related Pipeline": null,
+  "# Events": null,
+  "Loading": null,
+  "Retention Rate": null,
+  "Set retention rate": null,
+  "Retention Log": null,
+  "Open Retention Log": null,
+  "Download data from index": null,
+  "Truncate all data from index": null,
+  "Remove index from database": null,
+  "Export Providers": null,
+  "Add, Edit, and Delete export providers used for backing up data lakes.": 
null,
+  "New": null,
+  "Edit Export Provider": null,
+  "Remove": null,
+  "Remove export provider configuration": null,
+  "Test": null,
+  "Test export provider configuration": null,
+  "no stored export providers": null,
   "Dashboard title": null,
   "Title must not be empty": null,
-  "Description": null,
   "Default view mode": null,
   "Grid view": null,
   "Slide view": null,
-  "Grid": null,
   "Grid columns": null,
-  "Time settings": null,
   "Use global time settings instead of chart time settings": null,
-  "Add Dashboard to Assets": null,
   "Add the current dashboard to an existing asset": null,
+  "Create": null,
   "New dashboard title": null,
   "Clone options": null,
   "Deep clone (also clone widgets)": null,
   "Modify chart configurations": null,
+  "Chart Name": null,
   "Clone": null,
   "The desired dashboard was not found!": null,
   "This dashboard is empty and doesn't contain any charts.": null,
+  "Discard": null,
   "View mode": null,
+  "Grid": null,
   "Slides": null,
-  "Options": null,
   "Edit dashboard": null,
   "Show time range selector": null,
   "Hide time range selector": null,
   "Delete dashboard": null,
+  "Charts": null,
   "No charts found - create a new chart first to add it to this dashboard.": 
null,
   "Create chart": null,
   "New dashboard": null,
   "Dashboards": null,
+  "Created": null,
   "Kiosk mode": null,
+  "Settings": null,
   "ID": null,
   "Output Topics": null,
   "Copy": null,
@@ -337,6 +260,7 @@
   "Reloading nodes": null,
   "Font Style": null,
   "Tree": null,
+  "Text": null,
   "Browse": null,
   "Add node": null,
   "Remove node": null,
@@ -351,6 +275,7 @@
   "Upload": null,
   "Add": null,
   "Import from file": null,
+  "Back": null,
   "File": null,
   "Reset code template": null,
   "Clean code": null,
@@ -387,6 +312,7 @@
   "will be stopped and needs manual review": null,
   "Please check and possibly modify existing dashboards and data views 
afterwards.": null,
   "Update adapter and migrate pipelines": null,
+  "Search": null,
   "New adapter": null,
   "Start all adapters": null,
   "Stop all adapters": null,
@@ -394,7 +320,6 @@
   "Adapters": null,
   "Messages": null,
   "Last message": null,
-  "Refresh": null,
   "The desired adapter was not found!": null,
   "Last published message": null,
   "Published messages": null,
@@ -407,6 +332,7 @@
   "Adapter Description": null,
   "Run adapter": null,
   "Start adapter now": null,
+  "Add to Asset": null,
   "Add Adapter to an existing Asset": null,
   "Remove Duplicates": null,
   "Avoid duplicated events within a certain time interval": null,
@@ -430,7 +356,6 @@
   "Measurement": null,
   "Dimension": null,
   "Header": null,
-  "Add a Nested Property": null,
   "Edit field": null,
   "There was an error while guessing the schema of your configured data 
stream": null,
   "Service Selection": null,
@@ -443,14 +368,19 @@
   "Docs": null,
   "Sites & Areas": null,
   "Manage your organization's sites and production areas": null,
-  "New": null,
   "Site": null,
   "Areas": null,
   "Geo features": null,
   "Geo features are used to better organize assets.": null,
   "Enable geo features": null,
-  "Tile server URL(use placeholders for x, y and z coordinates)": null,
-  "Copyright notice if required by the tile server": null,
+  "Layer type": null,
+  "Both tile servers and vector styles are supported.": null,
+  "Tile": null,
+  "Vector": null,
+  "Style/Tile server URL": null,
+  "For tile server, use placeholders for x, y and z coordinates": null,
+  "Copyright notice": null,
+  "Will be shown on the map if required by the tile server": null,
   "User Accounts": null,
   "Add and edit user accounts": null,
   "Service Accounts": null,
@@ -466,6 +396,7 @@
   "Group ID": null,
   "Edit user": null,
   "Delete service": null,
+  "Type": null,
   "Full Name": null,
   "Last Login": null,
   "Delete user": null,
@@ -475,9 +406,12 @@
   "Settings of externally-managed users cannot be changed.": null,
   "Must be a valid email address.": null,
   "Changing the current user's email will require a re-login.": null,
+  "Password": null,
   "Auto-create password and send to user": null,
   "Client Secret": null,
   "Minimum length 35 characters.": null,
+  "No groups configured": null,
+  "Create a new group in the Groups section of the security page.": null,
   "Account": null,
   "Enabled": null,
   "Locked": null,
@@ -488,35 +422,41 @@
   "Available Privileges": null,
   "Selected Privileges": null,
   "Alternate IDs": null,
+  "User alternate IDs to map externally defined roles to this group": null,
   "Group Name": null,
+  "User alternate IDs to map externally defined groups to this group": null,
   "Generate and download new key pair": null,
   "New Alternate ID": null,
   "Enter new alternate ID": null,
   "Kafka Settings": null,
   "Manage Kafka settings for pipeline communication": null,
-  "Batch Size": null,
-  "Message Max Bytes": null,
-  "Acks": null,
-  "Linger MS": null,
   "Protocols": null,
   "Manage the priority of protocols used": null,
+  "Restart required": null,
+  "Changing the broker priority does not take effect immediately and requires 
a restart. Use this feature with caution.": null,
   "Broker Configuration": null,
   "Manage broker connectivity": null,
   "Host": null,
   "Port": null,
   "Labels": null,
   "Configure labels which can be assigned to assets and other resources": null,
+  "Label": null,
   "Edit label": null,
+  "To delete a label, please remove the label from all assets": null,
   "Delete label": null,
   "Basic": null,
   "Basic settings": null,
+  "Default values": null,
   "These are default values - to use features such as email you need to store 
these values once.": null,
   "App Name": null,
+  "The app name as shown on the login screen and in emails": null,
   "Host and Port": null,
+  "The URL where the application can be accessed, e.g., for links in emails.": 
null,
   "Protocol": null,
   "Registration": null,
   "Registration process": null,
-  "Self - registration requires valid mail server and basic host settings.": 
null,
+  "Configuration required": null,
+  "Self-registration requires valid mail server and configured basic host/port 
settings.": null,
   "Allow self - registration": null,
   "Default roles for new users": null,
   "Allow self - service password recovery": null,
@@ -527,10 +467,12 @@
   "Links": null,
   "Configure application links": null,
   "Documentation Link": null,
+  "Define individual link targets to the documentation": null,
   "Show documentation link on login page": null,
   "Show documentation link in user menu": null,
   "Show API documentation link on login page": null,
   "Support Link": null,
+  "Add an additional link that links to your support page": null,
   "Show support link on login page": null,
   "Files": null,
   "Upload and manage files that are used by adapters or pipeline elements.": 
null,
@@ -582,7 +524,10 @@
   "Import from application package": null,
   "Start import process": null,
   "Upload application package file": null,
+  "Error while uploading application package": null,
+  "Check that the uploaded zip file is a valid export": null,
   "Select resources to import": null,
+  "Deselect all": null,
   "Assets": null,
   "Data Lake Storage": null,
   "Pipelines": null,
@@ -597,9 +542,12 @@
   "Download export": null,
   "Additional documents from generic storage": null,
   "Document ID": null,
+  "No linked resources": null,
+  "Only linked resources are part of the application package.": null,
   "Mail Settings": null,
   "Settings to connect to a mail server": null,
   "Mail Server": null,
+  "SMTP Host": null,
   "Transport": null,
   "SMTP server requires authentication": null,
   "SMTP Username": null,
@@ -610,17 +558,20 @@
   "Proxy Port": null,
   "Proxy requires authentication": null,
   "Proxy Username": null,
+  "Proxy Password": null,
   "Sender": null,
   "Sender Email Address": null,
   "Sender Name": null,
   "Recipient for test mail": null,
   "Send Test Mail": null,
   "Trying to send test mail...": null,
-  "Success - please check your mail inbox.": null,
+  "Please check your mail inbox to ensure the mail has been delivered.": null,
+  "Test mail send": null,
   "Could not send email": null,
   "Mail Template": null,
   "Email Template Configuration": null,
   "Reset changes": null,
+  "Use placeholders": null,
   "You can set various placeholder variables that will be replaced with the 
actual values when sending an email:": null,
   "Save changes": null,
   "Choose a name for your site": null,
@@ -631,6 +582,7 @@
   "Exact location of the site": null,
   "No areas defined yet.": null,
   "This site already exists": null,
+  "Could not upload file": null,
   "The following files already exist. Please rename them.": null,
   "Import files": null,
   "Rename files": null,
@@ -647,75 +599,169 @@
   "Uninstalling": null,
   "More Details:": null,
   "Make available to all users with appropriate role": null,
-  "Select Provider": null,
-  "S3": null,
-  "Access Key": null,
-  "Enter Access Key": null,
-  "Secret Key": null,
-  "Enter Secret Key": null,
-  "Endpoint": null,
-  "Enter Endpoint": null,
-  "Invalid URI format.": null,
-  "Bucket": null,
-  "Enter Bucket Name": null,
-  "Region": null,
-  "Enter Region Name": null,
-  "Do you really want to delete the export provider?": null,
-  "This operation cannot be undone. Please ensure that the data provider is 
not used in a datalake retention.": null,
-  "Delete Data": null,
-  "Truncate Data": null,
-  "Date": null,
-  "Path": null,
-  "State": null,
-  "Success": null,
-  "Fail": null,
-  "Error": null,
-  "Start Sync": null,
-  "Run Sync Now": null,
-  "Delete Sync": null,
-  "Data Retention Action": null,
-  "delete": null,
-  "save": null,
-  "save and delete": null,
-  "Data Retention Intervals": null,
-  "Everything older than": null,
-  "days": null,
-  "Export Settings": null,
-  "Download Format": null,
-  "Delimiter": null,
-  "Export Provider": null,
-  "Select Provider Type": null,
-  "No export providers found. Please create one first.": null,
-  "Data Lake Settings": null,
-  "Manage persisted data streams": null,
-  "Related Pipeline": null,
-  "# Events": null,
-  "Loading": null,
-  "Download data from index": null,
-  "Truncate": null,
-  "Truncate all data from index": null,
-  "Remove": null,
-  "Remove index from database": null,
-  "Retention Rate": null,
-  "Set retention rate": null,
-  "Retention Log": null,
-  "Open Retention Log": null,
-  "(no stored measurements)": null,
-  "Export Providers": null,
-  "Add, Edit, and Delete export providers used for backing up data lakes.": 
null,
-  "Provider Type": null,
-  "Edit Export Provider": null,
-  "Remove export provider configuration": null,
-  "Test": null,
-  "Test export provider configuration": null,
-  "no stored export providers": null,
+  "Field": null,
+  "Resolution": null,
+  "Threshold": null,
+  "With Threshold being": null,
+  "Upper Limit": null,
+  "Lower Limit": null,
+  "Warning Range (%)": null,
+  "Show Value in Traffic Light": null,
+  "Axes": null,
+  "left axis": null,
+  "right axis": null,
+  "Axis Pointer": null,
+  "Enable": null,
+  "Time": null,
+  "Select Fields": null,
+  "Filter": null,
+  "Last seen:": null,
+  "Select Value Type": null,
+  "Numeric Value": null,
+  "Boolean Value": null,
+  "Interval [sec]": null,
+  "Interval in seconds in which an event must arrive": null,
+  "Show Last Seen Timestamp": null,
+  "Select Mapping": null,
+  "True": null,
+  "False": null,
+  "Rounding": null,
+  "Inner Radius": null,
+  "Fields": null,
+  "Latitude": null,
+  "Longitude": null,
+  "Map Zoom": null,
+  "Focus map on last event": null,
+  "Marker or Trace": null,
+  "Marker": null,
+  "Trace": null,
+  "Marker Type": null,
+  "Pin": null,
+  "Car": null,
+  "Tooltip": null,
+  "Tooltip Content": null,
+  "Show delta indicator": null,
+  "Auto-compute number of bins": null,
+  "Number of bins": null,
+  "All values": null,
+  "Minimum value": null,
+  "Maximum value": null,
+  "Show values as labels": null,
+  "Visual Map Min": null,
+  "Visual Map Max": null,
+  "Min": null,
+  "Max": null,
+  "Display Name": null,
+  "X": null,
+  "X Label": null,
+  "Y": null,
+  "Y Label": null,
+  "Warning": null,
+  "This chart tries to load too much data (#Events:": null,
+  "Please change the chart settings or decrease the time range": null,
+  "Load anyway": null,
+  "(This might crash the browser)": null,
+  "Found no data in selected time range": null,
+  "Invalid configuration for": null,
+  "This chart is missing required fields - choose another chart type or add 
additional fields.": null,
+  "More options": null,
+  "Download data": null,
+  "Edit Chart": null,
+  "Reset": null,
+  "Delete Chart": null,
+  "The current data selection can't be displayed by this chart.": null,
+  "Field settings": null,
+  "Color": null,
+  "Bar": null,
+  "Line": null,
+  "Scatter": null,
+  "Scattered Line": null,
+  "Axis": null,
+  "Left": null,
+  "Right": null,
+  "Auto-scale {{title}}": "Auto-scale {{title}}",
+  "Chart settings": null,
+  "Show legend": null,
+  "Show toolbox": null,
+  "Show tooltip": null,
+  "Data Zoom": null,
+  "Active": null,
+  "Wheel": null,
+  "Slider": null,
+  "Add custom color mapping": null,
+  "Add Mapping": null,
+  "Value": null,
+  "Remove Mapping": null,
+  "The desired chart was not found!": null,
+  "Add To Asset": null,
+  "Data": null,
+  "Visualization": null,
+  "Chart Type": null,
+  "New Data Source": null,
+  "Clone Data Source": null,
+  "Delete Data Source": null,
+  "Dataset": null,
+  "No data available! Please connect an adapter or verify your pipeline is 
running": null,
+  "Connect Adapter": null,
+  "Query": null,
+  "Expand Less": null,
+  "Expand More": null,
+  "Raw": null,
+  "Show raw data from your data source.": null,
+  "Limit": null,
+  "Page": null,
+  "Aggregated": null,
+  "Aggregate raw data by time unit or value.": null,
+  "Auto-Aggregate": null,
+  "Single": null,
+  "Show single data entry.": null,
+  "Add Data Source": null,
+  "Deactivate browser overload warning": null,
+  "Ignore Events with missing values": null,
+  "Order": null,
+  "Newest (descending)": null,
+  "Oldest (ascending)": null,
+  "Group by": null,
+  "Add Filter": null,
+  "Mean": null,
+  "First": null,
+  "Last": null,
+  "Mode": null,
+  "Count": null,
+  "Sum": null,
+  "Median": null,
+  "Standard deviation": null,
+  "Spread": null,
+  "Unit": null,
+  "Background": null,
+  "Default": null,
+  "New chart": null,
+  "Chart": null,
+  "Edit chart": null,
+  "Clone chart": null,
+  "Delete chart": null,
   "Select All": null,
   "Deselect All": null,
   "Update links": null,
+  "Link Type": null,
+  "Data Stream": null,
+  "Dashboard": null,
+  "Adapter": null,
+  "Resource ID": null,
   "Create link": null,
   "Update link": null,
   "Asset Name": null,
   "New asset": null,
+  "Show subassets": null,
+  "Custom fields": null,
+  "Linked Resources": null,
+  "Adapters, dashboards, and other entries connected to this asset.": null,
+  "No linked resources found.": null,
+  "Attach adapters, dashboards, or pipelines in the asset editor to surface 
them here.": null,
+  "Navigate": null,
+  "No location defined for this asset yet.": null,
+  "Select asset to view details": null,
+  "Asset links": null,
   "Manage links": null,
   "Add link": null,
   "A short name of the asset": null,
@@ -723,64 +769,41 @@
   "A unique id for this asset in one word": null,
   "Asset Type": null,
   "The ISA95 type of this asset": null,
-  "Assign additional labels to better discover your assets": null,
+  "Labels & custom fields": null,
   "Sites": null,
   "Assign a location (site and area) to this asset": null,
   "Manage Sites": null,
+  "Area": null,
   "Add exact location": null,
+  "Assign additional labels to better discover your assets": null,
+  "Manage Labels": null,
   "No labels available - Click 'Manage Labels'": null,
   "Click to add label": null,
-  "Manage Labels": null,
+  "Add additional fields to the asset, e.g., to manage responsibilities": null,
+  "Field name": null,
   "success": null,
   "error": null,
   "waiting": null,
   "Network Error": null,
   "Deleting pipeline...": null,
   "Stopping pipeline...": null,
-  "Gauge": null,
-  "The current value displayed in a gauge": null,
-  "Table": null,
-  "A table displaying the data in rows and columns": null,
-  "Traffic Light": null,
-  "A traffic light that shows if a value is above/below a threshold": null,
-  "A simple red/green status light": null,
-  "Map": null,
-  "A map visualization for spatial coordinates": null,
-  "Time-Series Heatmap": null,
-  "A heatmap that shows values mapped to a color range": null,
-  "A heatmap that lets you map specific values to a color": null,
-  "Time Series Chart": null,
-  "A simple chart that shows values on a value/time graph": null,
-  "Image": null,
-  "Display an image": null,
-  "Indicator": null,
-  "The current value displayed as a number": null,
-  "Display points on an x/y plane": null,
-  "Histogram": null,
-  "Shows the distribution of numerical data": null,
-  "Pie": null,
-  "A pie chart that shows the frequency of specific values": null,
-  "Value Distribution Heatmap": null,
-  "A chart that shows the distribution of numerical data as a heatmap": null,
-  "2D Density Contour": null,
-  "A chart that shows data points as dots on an x/y plane and highlights 
similar points": null,
-  "No Warning Range defined": null,
-  "Current Warning Range: ": null,
-  "to": null,
-  "Are you sure you want to delete this chart?": null,
-  "The chart will be removed from all dashboards as well. This action cannot 
be undone!": null,
-  "Do you want to link the chart to an Asset?": null,
-  "Update asset links or close.": null,
+  "Testing the connection.": null,
+  "Connection was established and test file was successfully saved:": null,
+  "Connection could not be established.": null,
+  "Truncating data...": null,
+  "Deleting data...": null,
+  "Sync was successful.": null,
+  "Sync was not successful": null,
+  "Export Data": null,
+  "New Export Provider": null,
+  "Truncate data": null,
+  "Delete data": null,
+  "Delete Export Provider": null,
+  "Test Export Provider Connection": null,
+  "Set Data Retention": null,
   "Save changes?": null,
-  "Update all changes to chart or discard current changes.": null,
-  "Discard changes": null,
-  "Millisecond": null,
-  "Second": null,
-  "Minute": null,
-  "Hour": null,
-  "Day": null,
-  "Week": null,
   "Update all changes to dashboard charts or discard current changes.": null,
+  "Discard changes": null,
   "Off": null,
   "Are you sure you want to delete this dashboard?": null,
   "This action cannot be undone!": null,
@@ -813,7 +836,6 @@
   "Edit adapter": null,
   "Adapter generation": null,
   "General": null,
-  "Data Lake": null,
   "Export/Import": null,
   "Extensions": null,
   "Extension Services": null,
@@ -845,8 +867,6 @@
   "Service details": null,
   "Certificate details": null,
   "Installation": null,
-  "Adapter": null,
-  "Data Stream": null,
   "Data Processor": null,
   "Data Sink": null,
   "Manage permissions for pipeline element {{name}}": "Manage permissions for 
pipeline element {{name}}",
@@ -858,27 +878,54 @@
   "Email title": null,
   "Email preheader": null,
   "Email custom inner content (mandatory)": null,
-  "Testing the connection.": null,
-  "Connection was established and test file was successfully saved:": null,
-  "Connection could not be established.": null,
-  "Truncating data...": null,
-  "Deleting data...": null,
-  "Sync was successful.": null,
-  "Sync was not successful": null,
-  "Export Data": null,
-  "New Export Provider": null,
-  "Truncate data": null,
-  "Delete data": null,
-  "Delete Export Provider": null,
-  "Test Export Provider Connection": null,
-  "Set Data Retention": null,
+  "Gauge": null,
+  "The current value displayed in a gauge": null,
+  "Table": null,
+  "A table displaying the data in rows and columns": null,
+  "Traffic Light": null,
+  "A traffic light that shows if a value is above/below a threshold": null,
+  "A simple red/green status light": null,
+  "Map": null,
+  "A map visualization for spatial coordinates": null,
+  "Time-Series Heatmap": null,
+  "A heatmap that shows values mapped to a color range": null,
+  "A heatmap that lets you map specific values to a color": null,
+  "Time Series Chart": null,
+  "A simple chart that shows values on a value/time graph": null,
+  "Image": null,
+  "Display an image": null,
+  "Indicator": null,
+  "The current value displayed as a number": null,
+  "Display points on an x/y plane": null,
+  "Histogram": null,
+  "Shows the distribution of numerical data": null,
+  "Pie": null,
+  "A pie chart that shows the frequency of specific values": null,
+  "Value Distribution Heatmap": null,
+  "A chart that shows the distribution of numerical data as a heatmap": null,
+  "2D Density Contour": null,
+  "A chart that shows data points as dots on an x/y plane and highlights 
similar points": null,
+  "No Warning Range defined": null,
+  "Current Warning Range: ": null,
+  "to": null,
+  "Do you want to link the chart to an Asset?": null,
+  "Update asset links or close.": null,
+  "Update all changes to chart or discard current changes.": null,
+  "Millisecond": null,
+  "Second": null,
+  "Minute": null,
+  "Hour": null,
+  "Day": null,
+  "Week": null,
+  "Are you sure you want to delete this chart?": null,
+  "The chart will be removed from all dashboards as well. This action cannot 
be undone!": null,
   "Create asset": null,
   "Are you sure you want to delete this asset?": null,
   "Delete Asset": null,
   "Manage permissions for asset ": null,
+  "Update asset links": null,
   "Manage asset links": null,
   "Create asset links": null,
-  "Update asset links": null,
   "Owner": null,
   "Public Element": null,
   "visible to registered users": null,
diff --git 
a/ui/projects/streampipes/platform-services/src/lib/apis/labels.service.ts 
b/ui/projects/streampipes/platform-services/src/lib/apis/labels.service.ts
index b5db0c258f..306df1e68c 100644
--- a/ui/projects/streampipes/platform-services/src/lib/apis/labels.service.ts
+++ b/ui/projects/streampipes/platform-services/src/lib/apis/labels.service.ts
@@ -20,6 +20,7 @@ import { inject, Injectable } from '@angular/core';
 import { SpLabel } from '../model/labels/labels.model';
 import { Observable } from 'rxjs';
 import { GenericStorageService } from './generic-storage.service';
+import { map } from 'rxjs/operators';
 
 @Injectable({
     providedIn: 'root',
@@ -33,6 +34,30 @@ export class LabelsService {
         return this.genericStorageService.getAllDocuments(this.appDocType);
     }
 
+    getLabelsInUse(): Observable<string[]> {
+        return this.genericStorageService
+            .getAllDocuments('asset-management')
+            .pipe(map(docs => this.extractLabelIds(docs)));
+    }
+
+    extractLabelIds(assets) {
+        const allLabelIds = new Set<string>();
+
+        const extractLabelsFromAsset = asset => {
+            if (asset.labelIds) {
+                asset.labelIds.forEach(labelId => allLabelIds.add(labelId));
+            }
+            if (asset.assets) {
+                asset.assets.forEach(subasset =>
+                    extractLabelsFromAsset(subasset),
+                );
+            }
+        };
+        assets.forEach(asset => extractLabelsFromAsset(asset));
+
+        return Array.from(allLabelIds);
+    }
+
     addLabel(label: SpLabel): Observable<SpLabel> {
         if (!label.appDocType) {
             label.appDocType = this.appDocType;
diff --git 
a/ui/src/app/configuration/label-configuration/label-configuration.component.html
 
b/ui/src/app/configuration/label-configuration/label-configuration.component.html
index 7123e9aae5..b62cc2debe 100644
--- 
a/ui/src/app/configuration/label-configuration/label-configuration.component.html
+++ 
b/ui/src/app/configuration/label-configuration/label-configuration.component.html
@@ -50,64 +50,87 @@
                     ></sp-edit-label>
                 </div>
             }
-            @for (label of allLabels; track label) {
-                <div
-                    fxLayout="column"
-                    class="label-item"
-                    data-cy="available-labels-list"
-                >
-                    <div
-                        fxLayout="row"
-                        fxLayoutAlign="start center"
-                        fxLayoutGap="10px"
-                    >
+
+            <sp-table
+                class="mt-10"
+                [dataSource]="dataSource"
+                [columns]="['label', 'description', 'actions']"
+                matSort
+                data-cy="available-labels-list"
+            >
+                <ng-container matColumnDef="label">
+                    <th mat-header-cell mat-sort-header *matHeaderCellDef>
+                        <b>{{ 'Label' | translate }}</b>
+                    </th>
+                    <td mat-cell *matCellDef="let label">
                         <sp-label
                             size="small"
-                            fxFlex="20"
                             [labelText]="label.label"
                             [labelBackground]="label.color"
                             data-cy="label-text"
-                        >
-                        </sp-label>
+                        ></sp-label>
+                    </td>
+                </ng-container>
+                <ng-container matColumnDef="description">
+                    <th mat-header-cell mat-sort-header *matHeaderCellDef>
+                        <b>{{ 'Description' | translate }}</b>
+                    </th>
+
+                    <td mat-cell *matCellDef="let label">
                         @if (!isEditMode(label._id)) {
-                            <span fxFlex="50">{{ label.description }}</span>
+                            {{ label.description }}
+                        }
+                        @if (isEditMode(label._id)) {
+                            <sp-edit-label
+                                [editMode]="true"
+                                [showPreview]="false"
+                                [label]="label"
+                                (cancelEmitter)="removeEditedLabel(label._id)"
+                                (saveEmitter)="updateLabel(label)"
+                            ></sp-edit-label>
                         }
-                        <div fxFlex fxLayoutAlign="end center">
+                    </td>
+                </ng-container>
+                <ng-container matColumnDef="actions">
+                    <th mat-header-cell *matHeaderCellDef></th>
+                    <td mat-cell *matCellDef="let label">
+                        <div fxLayout="row" fxLayoutAlign="end center">
                             @if (!isEditMode(label._id)) {
                                 <button
                                     mat-icon-button
-                                    [matTooltip]="'Edit label' | translate"
                                     color="accent"
+                                    [matTooltip]="'Edit label' | translate"
                                     (click)="editedLabels.push(label._id)"
                                 >
-                                    <i class="material-icons">edit</i>
+                                    <mat-icon>edit</mat-icon>
                                 </button>
                             }
-                            <button
-                                mat-icon-button
-                                [matTooltip]="'Delete label' | translate"
-                                class="btn-warn"
-                                (click)="deleteLabel(label)"
-                                data-cy="delete-label-button"
-                            >
-                                <i class="material-icons">delete</i>
-                            </button>
-                        </div>
-                    </div>
-                    @if (isEditMode(label._id)) {
-                        <div fxLayout="column">
-                            <sp-edit-label
-                                [editMode]="true"
-                                [showPreview]="false"
-                                [label]="label"
-                                (cancelEmitter)="removeEditedLabel(label._id)"
-                                (saveEmitter)="updateLabel(label)"
+                            <div
+                                matTooltip="{{
+                                    labelsinUse.includes(label._id)
+                                        ? ('To delete a label, please remove 
the label from all assets'
+                                          | translate)
+                                        : ('Delete label' | translate)
+                                }}"
+                                [matTooltipShowDelay]="0"
+                                [matTooltipHideDelay]="0"
+                                class="tooltip-container"
                             >
-                            </sp-edit-label>
+                                <button
+                                    mat-icon-button
+                                    class="btn-warn"
+                                    color="accent"
+                                    (click)="deleteLabel(label)"
+                                    data-cy="delete-label-button"
+                                    
[disabled]="labelsinUse.includes(label._id)"
+                                >
+                                    <mat-icon>delete</mat-icon>
+                                </button>
+                            </div>
                         </div>
-                    }
-                </div>
-            }
+                    </td>
+                </ng-container>
+            </sp-table>
         </sp-split-section>
     </div>
 </sp-basic-nav-tabs>
diff --git 
a/ui/src/app/configuration/label-configuration/label-configuration.component.ts 
b/ui/src/app/configuration/label-configuration/label-configuration.component.ts
index e0ac542529..ca283b12f1 100644
--- 
a/ui/src/app/configuration/label-configuration/label-configuration.component.ts
+++ 
b/ui/src/app/configuration/label-configuration/label-configuration.component.ts
@@ -16,11 +16,13 @@
  *
  */
 
-import { Component, OnInit } from '@angular/core';
+import { Component, OnInit, ViewChild } from '@angular/core';
 import { SpConfigurationTabsService } from '../configuration-tabs.service';
 import { LabelsService, SpLabel } from '@streampipes/platform-services';
 import { SpConfigurationRoutes } from '../configuration.routes';
 import { SpBreadcrumbService, SpNavigationItem } from '@streampipes/shared-ui';
+import { MatTableDataSource } from '@angular/material/table';
+import { MatSort } from '@angular/material/sort';
 
 @Component({
     selector: 'sp-label-configuration',
@@ -34,6 +36,14 @@ export class SpLabelConfigurationComponent implements OnInit 
{
     allLabels: SpLabel[] = [];
     createLabelMode = false;
 
+    dataSource: MatTableDataSource<SpLabel> = new 
MatTableDataSource<SpLabel>();
+
+    @ViewChild(MatSort)
+    sort: MatSort;
+
+    displayedColumns = ['name', 'description', 'actions'];
+    labelsinUse = [];
+
     editedLabels: string[] = [];
 
     constructor(
@@ -54,6 +64,13 @@ export class SpLabelConfigurationComponent implements OnInit 
{
     reloadLabels(): void {
         this.labelsService.getAllLabels().subscribe(res => {
             this.allLabels = res;
+            this.dataSource.data = this.allLabels;
+            setTimeout(() => {
+                this.dataSource.sort = this.sort;
+            });
+        });
+        this.labelsService.getLabelsInUse().subscribe(labelsInUse => {
+            this.labelsinUse = labelsInUse;
         });
     }
 
diff --git 
a/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.html
 
b/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.html
index 745081d59a..39eeff4bf0 100644
--- 
a/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.html
+++ 
b/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.html
@@ -41,7 +41,7 @@
         data-cy="all-sites-table"
     >
         <ng-container matColumnDef="name">
-            <th mat-header-cell *matHeaderCellDef>
+            <th mat-header-cell mat-sort-header *matHeaderCellDef>
                 <b>{{ 'Site' | translate }}</b>
             </th>
             <td mat-cell *matCellDef="let site" data-cy="site-table-row-label">
@@ -49,7 +49,7 @@
             </td>
         </ng-container>
         <ng-container matColumnDef="areas">
-            <th mat-header-cell *matHeaderCellDef>
+            <th mat-header-cell mat-sort-header *matHeaderCellDef>
                 <b>{{ 'Areas' | translate }}</b>
             </th>
             <td mat-cell *matCellDef="let site" data-cy="site-table-row-areas">
@@ -68,17 +68,30 @@
                     >
                         <mat-icon>edit</mat-icon>
                     </button>
-                    <button
-                        [attr.data-cy]="
-                            'sites-delete-button-' +
-                            site.label.replaceAll(' ', '_')
-                        "
-                        (click)="deleteSite(site)"
-                        mat-icon-button
-                        color="accent"
+                    <div
+                        matTooltip="{{
+                            allUsedSiteIds.includes(site._id)
+                                ? ('To delete a site, please remove the site 
from all assets'
+                                  | translate)
+                                : ('Delete site' | translate)
+                        }}"
+                        [matTooltipShowDelay]="0"
+                        [matTooltipHideDelay]="0"
+                        class="tooltip-container"
                     >
-                        <mat-icon>delete</mat-icon>
-                    </button>
+                        <button
+                            [attr.data-cy]="
+                                'sites-delete-button-' +
+                                site.label.replaceAll(' ', '_')
+                            "
+                            (click)="deleteSite(site)"
+                            mat-icon-button
+                            color="accent"
+                            [disabled]="allUsedSiteIds.includes(site._id)"
+                        >
+                            <mat-icon>delete</mat-icon>
+                        </button>
+                    </div>
                 </div>
             </td>
         </ng-container>
diff --git 
a/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.ts
 
b/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.ts
index f23c9dc5a8..37c86bbeb3 100644
--- 
a/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.ts
+++ 
b/ui/src/app/configuration/sites-configuration/site-area-configuration/site-area-configuration.component.ts
@@ -16,7 +16,7 @@
  *
  */
 
-import { Component, Input, OnInit } from '@angular/core';
+import { Component, Input, OnInit, ViewChild } from '@angular/core';
 import {
     AssetConstants,
     AssetSiteDesc,
@@ -27,6 +27,7 @@ import { MatTableDataSource } from '@angular/material/table';
 import { ManageSiteDialogComponent } from 
'../../dialog/manage-site/manage-site-dialog.component';
 import { DialogService, PanelType } from '@streampipes/shared-ui';
 import { TranslateService } from '@ngx-translate/core';
+import { MatSort } from '@angular/material/sort';
 
 @Component({
     selector: 'sp-site-area-configuration',
@@ -40,6 +41,11 @@ export class SiteAreaConfigurationComponent implements 
OnInit {
     allSites: AssetSiteDesc[] = [];
     dataSource: MatTableDataSource<AssetSiteDesc> =
         new MatTableDataSource<AssetSiteDesc>();
+
+    allUsedSiteIds = [];
+
+    @ViewChild(MatSort)
+    sort: MatSort;
     displayedColumns = ['name', 'areas', 'actions'];
 
     constructor(
@@ -50,6 +56,14 @@ export class SiteAreaConfigurationComponent implements 
OnInit {
 
     ngOnInit() {
         this.loadSites();
+        this.dataSource.sortingDataAccessor = (site, column) => {
+            if (column === 'name') {
+                return site.label;
+            } else if (column === 'areas') {
+                return site.areas.toString();
+            }
+            return site[column];
+        };
     }
 
     loadSites(): void {
@@ -58,9 +72,29 @@ export class SiteAreaConfigurationComponent implements 
OnInit {
             .subscribe(res => {
                 this.allSites = res;
                 this.dataSource.data = this.allSites;
+                setTimeout(() => {
+                    this.dataSource.sort = this.sort;
+                });
+            });
+        this.listSitesInUse();
+    }
+
+    listSitesInUse(): void {
+        this.genericStorageService
+            .getAllDocuments(AssetConstants.ASSET_APP_DOC_NAME)
+            .subscribe(res => {
+                this.allUsedSiteIds = this.extractSiteIds(res);
             });
     }
 
+    extractSiteIds(assets) {
+        const allSiteIds = new Set<string>();
+
+        assets.forEach(asset => allSiteIds.add(asset.assetSite.siteId));
+
+        return Array.from(allSiteIds);
+    }
+
     deleteSite(site: AssetSiteDesc): void {
         this.genericStorageService
             .deleteDocument(


Reply via email to