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

mfholz pushed a commit to branch ngx-translate
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/ngx-translate by this push:
     new 1554f8b3b7 Add german translation to data explorer module
1554f8b3b7 is described below

commit 1554f8b3b7d8367a6b47ac30447a91a2510ebbbe
Author: Marcelfrueh <[email protected]>
AuthorDate: Thu Feb 13 18:24:44 2025 +0100

    Add german translation to data explorer module
---
 ui/deployment/i18n/de.json                         |  82 ++++++++++++++++-
 ui/deployment/i18n/en.json                         |  82 ++++++++++++++++-
 .../data-explorer-chart-view.component.ts          |  15 ++--
 ...lorer-widget-appearance-settings.component.html |   6 +-
 .../data-explorer-designer-panel.component.html    |  15 ++--
 .../aggregate-configuration.component.html         |   4 +-
 .../aggregate-configuration.component.ts           |  17 ++--
 ...ta-explorer-widget-data-settings.component.html | 100 +++++++++++++--------
 .../field-selection-panel.component.html           |  10 +--
 .../field-selection/field-selection.component.html |  16 ++--
 ...ion-panel-row-property-selection.component.html |   2 +-
 ...ion-panel-row-value-autocomplete.component.html |   2 +-
 ...-selection-panel-row-value-input.component.html |   2 +-
 .../filter-selection-panel.component.html          |   4 +-
 .../group-selection-panel.component.html           |   6 +-
 .../order-selection-panel.component.html           |   6 +-
 ...-explorer-visualisation-settings.component.html |   2 +-
 ...data-explorer-chart-view-toolbar.component.html |  14 +--
 .../data-explorer-overview-table.component.html    |  12 +--
 .../data-explorer-overview-table.component.ts      |  19 ++--
 .../overview/data-explorer-overview.component.html |   4 +-
 ui/src/app/data-explorer/data-explorer.module.ts   |   2 +
 22 files changed, 314 insertions(+), 108 deletions(-)

diff --git a/ui/deployment/i18n/de.json b/ui/deployment/i18n/de.json
index 57e9ec6a1c..1230d708db 100644
--- a/ui/deployment/i18n/de.json
+++ b/ui/deployment/i18n/de.json
@@ -2,5 +2,85 @@
   "New Pipeline": "Neue Pipeline",
   "Start All Pipelines": "Alle Pipelines starten",
   "Stop all pipelines": "Alle Pipelines stoppen",
-  "Last modified": "Zuletzt geändert"
+  "Last modified": "Zuletzt geändert",
+  "Charts": "Diagramme",
+  "New chart": "Neues Diagramm",
+  "Chart": "Diagramm",
+  "Show chart": "Diagramm anzeigen",
+  "Edit chart": "Diagramm bearbeiten",
+  "Manage permissions": "Berechtigungen verwalten",
+  "Delete chart": "Diagramm löschen",
+  "Chart Name": "Diagrammname",
+  "Save": "Speichern",
+  "Discard": "Verwerfen",
+  "Download data": "Daten herunterladen",
+  "Data": "Daten",
+  "Visualization": "Visualisierung",
+  "Appearance": "Darstellung",
+  "Next": "Weiter",
+  "Back": "Zurück",
+  "Create": "Erstellen",
+  "Chart Type": "Diagrammtyp",
+  "New Data Source": "Neue Datenquelle",
+  "Clone Data Source": "Datenquelle klonen",
+  "Delete Data Source": "Datenquelle löschen",
+  "Data Source": "Datenquelle",
+  "Expand Less": "Ausklappen",
+  "Expand More": "Einklappen",
+  "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",
+  "Start Pipeline": "Pipeline starten",
+  "Pipeline": "Pipeline",
+  "Select this option if you want to use data from one of your pipelines.": 
"Wählen Sie diese Option, wenn Sie Daten aus einer Ihrer Pipelines verwenden 
möchten.",
+  "Database Identifier": "Datenbankname",
+  "Choose this option to work with individual measurements from a Data Lake.": 
"Wählen Sie diese Option, um mit einzelnen Größen aus einem Data Lake zu 
arbeiten.",
+  "Query": "Abfrage",
+  "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.": "Aggregieren von Rohdaten nach 
Zeiteinheit oder Wert.",
+  "Auto-Aggregate": "Auto-Aggregiert",
+  "Single": "Einzeln",
+  "Show single data entry.": "Einzelne Dateneingabe anzeigen.",
+  "Add Data Source": "Datenquelle hinzufügen",
+  "Deactivate browser overload warning": "Warnung vor Browser-Überlastung 
deaktivieren",
+  "Ignore Events with missing values": "Ignorieren von Ereignissen mit 
fehlenden Werten",
+  "Order": "Sortieren",
+  "Newest (descending)": "Neueste zuerst (absteigend)",
+  "Oldest (ascending)": "Älteste zuerst(aufsteigend)",
+  "Group by": "Gruppieren nach",
+  "Select all": "Alle auswählen",
+  "Deselect all": "Alle abwählen",
+  "Filter": "Filter",
+  "Add Filter": "Filter hinzufügen",
+  "Value": "Wert",
+  "Field": "Feld",
+  "Fields": "Felder",
+  "Mean": "Mittelwert",
+  "First": "Erster",
+  "Last": "Letzter",
+  "Min": "Min",
+  "Max": "Max",
+  "Mode": "Modus",
+  "Count": "Anzahl",
+  "Sum": "Summe",
+  "Unit": "Einheit",
+  "Color": "Farbe",
+  "Background": "Hintergrund",
+  "Text": "Text",
+  "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!",
+  "Cancel": "Abbrechen",
+  "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",
+  "Update": "Aktualisieren",
+  "Millisecond": "Millisekunde",
+  "Second": "Sekunde",
+  "Minute": "Minute",
+  "Hour": "Stunde",
+  "Day": "Tag",
+  "Week": "Woche"
 }
diff --git a/ui/deployment/i18n/en.json b/ui/deployment/i18n/en.json
index 60dbc70969..537766076f 100644
--- a/ui/deployment/i18n/en.json
+++ b/ui/deployment/i18n/en.json
@@ -2,5 +2,85 @@
   "New Pipeline": null,
   "Start All Pipelines": null,
   "Stop all pipelines": null,
-  "Last modified": null
+  "Last modified": null,
+  "Charts": null,
+  "New chart": null,
+  "Chart": null,
+  "Show chart": null,
+  "Edit chart": null,
+  "Manage permissions": null,
+  "Delete chart": null,
+  "Chart Name": null,
+  "Save": null,
+  "Discard": null,
+  "Download data": null,
+  "Data": null,
+  "Visualization": null,
+  "Appearance": null,
+  "Next": null,
+  "Back": null,
+  "Create": null,
+  "Chart Type": null,
+  "New Data Source": null,
+  "Clone Data Source": null,
+  "Delete Data Source": null,
+  "Data Source": null,
+  "Expand Less": null,
+  "Expand More": null,
+  "No data available! Please connect an adapter or verify your pipeline is 
running": null,
+  "Connect Adapter": null,
+  "Start Pipeline": null,
+  "Pipeline": null,
+  "Select this option if you want to use data from one of your pipelines.": 
null,
+  "Database Identifier": null,
+  "Choose this option to work with individual measurements from a Data Lake.": 
null,
+  "Query": 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,
+  "Select all": null,
+  "Deselect all": null,
+  "Filter": null,
+  "Add Filter": null,
+  "Value": null,
+  "Field": null,
+  "Fields": null,
+  "Mean": null,
+  "First": null,
+  "Last": null,
+  "Min": null,
+  "Max": null,
+  "Mode": null,
+  "Count": null,
+  "Sum": null,
+  "Unit": null,
+  "Color": null,
+  "Background": null,
+  "Text": 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,
+  "Cancel": null,
+  "Save changes?": null,
+  "Update all changes to chart or discard current changes.": null,
+  "Discard changes": null,
+  "Update": null,
+  "Millisecond": null,
+  "Second": null,
+  "Minute": null,
+  "Hour": null,
+  "Day": null,
+  "Week": null
 }
diff --git 
a/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
 
b/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
index 01037a1f5b..5e2f01d849 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
+++ 
b/ui/src/app/data-explorer/components/chart-view/data-explorer-chart-view.component.ts
@@ -39,6 +39,7 @@ import { SupportsUnsavedChangeDialog } from 
'../../../data-explorer-shared/model
 import { Observable, of } from 'rxjs';
 import { MatDialog } from '@angular/material/dialog';
 import { map } from 'rxjs/operators';
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
     selector: 'sp-data-explorer-data-view',
@@ -67,6 +68,7 @@ export class DataExplorerChartViewComponent
         private routingService: DataExplorerRoutingService,
         private dataViewService: ChartService,
         private timeSelectionService: TimeSelectionService,
+        private translateService: TranslateService,
     ) {}
 
     ngOnInit() {
@@ -139,7 +141,8 @@ export class DataExplorerChartViewComponent
         this.dataView['@class'] =
             'org.apache.streampipes.model.datalake.DataExplorerWidgetModel';
         this.dataView.baseAppearanceConfig = {};
-        this.dataView.baseAppearanceConfig.widgetTitle = 'New chart';
+        this.dataView.baseAppearanceConfig.widgetTitle =
+            this.translateService.instant('New chart');
         this.dataView.dataConfig = {};
         this.dataView.dataConfig.ignoreMissingValues = false;
         this.dataView.baseAppearanceConfig.backgroundColor = '#FFFFFF';
@@ -166,11 +169,13 @@ export class DataExplorerChartViewComponent
             const dialogRef = this.dialog.open(ConfirmDialogComponent, {
                 width: '500px',
                 data: {
-                    title: 'Save changes?',
-                    subtitle:
+                    title: this.translateService.instant('Save changes?'),
+                    subtitle: this.translateService.instant(
                         'Update all changes to chart or discard current 
changes.',
-                    cancelTitle: 'Discard changes',
-                    okTitle: 'Update',
+                    ),
+                    cancelTitle:
+                        this.translateService.instant('Discard changes'),
+                    okTitle: this.translateService.instant('Update'),
                     confirmAndCancel: true,
                 },
             });
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/appearance-settings/data-explorer-widget-appearance-settings.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/appearance-settings/data-explorer-widget-appearance-settings.component.html
index 65bd1ef214..774574963c 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/appearance-settings/data-explorer-widget-appearance-settings.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/appearance-settings/data-explorer-widget-appearance-settings.component.html
@@ -16,10 +16,10 @@
   ~
   -->
 
-<sp-configuration-box title="Color">
+<sp-configuration-box [title]="'Color' | translate">
     <div fxLayout="column" class="mt-10">
         <div fxFlex="100" fxLayout="row" class="mb-10">
-            <span>Background</span>
+            <span>{{ 'Background' | translate }}</span>
             <span fxFlex></span>
             <input
                 [(colorPicker)]="
@@ -39,7 +39,7 @@
         </div>
 
         <div fxFlex="100" fxLayout="row" class="mb-10">
-            <span>Text</span>
+            <span>{{ 'Text' | translate }}</span>
             <span fxFlex></span>
             <input
                 [(colorPicker)]="
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-explorer-designer-panel.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-explorer-designer-panel.component.html
index 3096802638..f2f8636447 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-explorer-designer-panel.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-explorer-designer-panel.component.html
@@ -31,7 +31,10 @@
                 fxFlexFill
                 class="small-tab-headers mat-tab-fill-height"
             >
-                <mat-tab data-cy="designer-panel-data-config" label="Data">
+                <mat-tab
+                    data-cy="designer-panel-data-config"
+                    [label]="'Data' | translate"
+                >
                     <div class="scroll-tab-content">
                         <sp-data-explorer-widget-data-settings
                             #dataSettingsPanel
@@ -49,7 +52,7 @@
                 </mat-tab>
                 <mat-tab
                     data-cy="designer-panel-visualization-config"
-                    label="Visualization"
+                    [label]="'Visualization' | translate"
                     [disabled]="
                         !currentlyConfiguredWidget.dataConfig.sourceConfigs ||
                         currentlyConfiguredWidget.dataConfig.sourceConfigs
@@ -70,7 +73,7 @@
                 </mat-tab>
                 <mat-tab
                     data-cy="designer-panel-appearance-config"
-                    label="Appearance"
+                    [label]="'Appearance' | translate"
                 >
                     <div class="scroll-tab-content">
                         <sp-data-explorer-widget-appearance-settings
@@ -108,7 +111,7 @@
                 *ngIf="newWidgetMode && selectedIndex === 0"
                 (click)="selectedIndex = 1"
             >
-                Next
+                {{ 'Next' | translate }}
             </button>
             <button
                 *ngIf="newWidgetMode && selectedIndex === 1"
@@ -118,7 +121,7 @@
                 (click)="selectedIndex = 0"
                 style="margin-right: 10px"
             >
-                Back
+                {{ 'Back' | translate }}
             </button>
             <button
                 mat-button
@@ -128,7 +131,7 @@
                 *ngIf="newWidgetMode && selectedIndex === 1"
                 (click)="createNewWidget()"
             >
-                Create
+                {{ 'Create' | translate }}
             </button>
         </div>
     </div>
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.html
index 8d24715250..54a5e42ec8 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.html
@@ -40,7 +40,7 @@
                     >{{ agg.label }}</mat-option
                 >
             </mat-select>
-            <mat-label>Unit</mat-label>
+            <mat-label> {{ 'Unit' | translate }}</mat-label>
         </mat-form-field>
         <mat-form-field
             appearance="outline"
@@ -54,7 +54,7 @@
                 [(ngModel)]="queryConfig.aggregationValue"
                 (ngModelChange)="triggerDataRefresh()"
             />
-            <mat-label>Value</mat-label>
+            <mat-label>{{ 'Value' | translate }}</mat-label>
         </mat-form-field>
     </div>
 </div>
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.ts
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.ts
index 924f663637..92511b1f0a 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.ts
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component.ts
@@ -16,9 +16,10 @@
  *
  */
 
-import { Component, Input } from '@angular/core';
+import { Component, inject, Input } from '@angular/core';
 import { QueryConfig } from '@streampipes/platform-services';
 import { ChartConfigurationService } from 
'../../../../../../data-explorer-shared/services/chart-configuration.service';
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
     selector: 'sp-aggregate-configuration',
@@ -29,13 +30,15 @@ export class AggregateConfigurationComponent {
     @Input() queryConfig: QueryConfig;
     @Input() widgetId: string;
 
+    translateService: TranslateService = inject(TranslateService);
+
     availableAggregations = [
-        { value: 'ms', label: 'Millisecond' },
-        { value: 's', label: 'Second' },
-        { value: 'm', label: 'Minute' },
-        { value: 'h', label: 'Hour' },
-        { value: 'd', label: 'Day' },
-        { value: 'w', label: 'Week' },
+        { value: 'ms', label: this.translateService.instant('Millisecond') },
+        { value: 's', label: this.translateService.instant('Second') },
+        { value: 'm', label: this.translateService.instant('Minute') },
+        { value: 'h', label: this.translateService.instant('Hour') },
+        { value: 'd', label: this.translateService.instant('Day') },
+        { value: 'w', label: this.translateService.instant('Week') },
     ];
 
     constructor(private widgetConfigService: ChartConfigurationService) {}
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/data-explorer-widget-data-settings.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/data-explorer-widget-data-settings.component.html
index 0f7bceafac..f8c59a7f3e 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/data-explorer-widget-data-settings.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/data-explorer-widget-data-settings.component.html
@@ -28,16 +28,15 @@
                 <div fxFlex="100" fxLayout="row">
                     <div fxFlex fxLayoutAlign="start center">
                         {{
-                            sourceConfig.measureName
-                                ? sourceConfig.measureName
-                                : 'New Data Source'
+                            sourceConfig?.measureName ||
+                                ('New Data Source' | translate)
                         }}
                     </div>
                     <div fxFlex fxLayoutAlign="end center">
                         <button
                             mat-icon-button
                             color="accent"
-                            matTooltip="Clone Data Source"
+                            [matTooltip]="'Clone Data Source' | translate"
                         >
                             <i
                                 class="material-icons plus-icon align-btn"
@@ -48,7 +47,7 @@
                         <button
                             mat-icon-button
                             color="accent"
-                            matTooltip="Delete Data Source"
+                            [matTooltip]="'Delete Data Source' | translate"
                             (click)="removeSourceConfig(i)"
                         >
                             <i class="material-icons align-btn">delete</i>
@@ -57,17 +56,17 @@
                 </div>
             </mat-expansion-panel-header>
             <div fxFlex="100" fxLayout="column" class="mt-10">
-                <sp-configuration-box title="Data Source">
+                <sp-configuration-box [title]="'Data Source' | translate">
                     <div header fxFlex class="header-container">
                         <span fxFlex></span>
                         <button
                             mat-icon-button
                             class="pull-btn-right"
-                            matTooltip="{{
+                            [matTooltip]="
                                 expandFieldsDataSource
-                                    ? 'Expand Less'
-                                    : 'Expand More'
-                            }}"
+                                    ? ('Expand Less' | translate)
+                                    : ('Expand More' | translate)
+                            "
                             (click)="toggleExpandFieldsDataSource()"
                             [disabled]="
                                 availablePipelines.length === 0 &&
@@ -97,8 +96,10 @@
                         >
                             <i class="material-icons warning-icon">warning</i>
                             <b>
-                                No data available! Please connect an adapter or
-                                verify your pipeline is running.
+                                {{
+                                    'No data available! Please connect an 
adapter or verify your pipeline is running'
+                                        | translate
+                                }}
                             </b>
                         </div>
                         <div
@@ -114,7 +115,7 @@
                                 class="small-button"
                                 (click)="navigateToConnect()"
                             >
-                                Connect Adapter
+                                {{ 'Connect Adapter' | translate }}
                             </button>
                             <button
                                 mat-button
@@ -123,7 +124,7 @@
                                 class="small-button"
                                 (click)="navigateToPipelines()"
                             >
-                                Start Pipeline
+                                {{ 'Start Pipeline' | translate }}
                             </button>
                         </div>
                     </div>
@@ -155,11 +156,13 @@
                                     [value]="'pipeline'"
                                     [disabled]="availablePipelines.length === 
0"
                                 >
-                                    <b>Pipeline</b>
+                                    <b>{{ 'Pipeline' | translate }}</b>
                                 </mat-radio-button>
                                 <p class="description">
-                                    Select this option if you want to use data
-                                    from one of your pipelines.
+                                    {{
+                                        'Select this option if you want to use 
data from one of your pipelines.'
+                                            | translate
+                                    }}
                                 </p>
                                 <div
                                     class="selection-form-field"
@@ -221,11 +224,15 @@
                                         availableMeasurements.length === 0
                                     "
                                 >
-                                    <b>Database Identifier</b>
+                                    <b>{{
+                                        'Database Identifier' | translate
+                                    }}</b>
                                 </mat-radio-button>
                                 <p class="description">
-                                    Choose this option to work with individual
-                                    measurements from a Data Lake.
+                                    {{
+                                        'Choose this option to work with 
individual measurements from a Data Lake.'
+                                            | translate
+                                    }}
                                 </p>
                                 <div
                                     class="selection-form-field"
@@ -270,7 +277,7 @@
                 </sp-configuration-box>
 
                 <sp-configuration-box
-                    title="Query"
+                    [title]="'Query' | translate"
                     *ngIf="sourceConfig.measureName"
                 >
                     <div header fxFlex class="header-container">
@@ -278,11 +285,11 @@
                         <button
                             mat-icon-button
                             class="pull-btn-right"
-                            matTooltip="{{
-                                expandFieldsQuery
-                                    ? 'Expand Less'
-                                    : 'Expand More'
-                            }}"
+                            [matTooltip]="
+                                expandFieldsDataSource
+                                    ? ('Expand Less' | translate)
+                                    : ('Expand More' | translate)
+                            "
                             (click)="toggleExpandFieldsQuery()"
                         >
                             <mat-icon>{{
@@ -313,10 +320,14 @@
                                 <mat-radio-button
                                     class="selection-radio-button"
                                     [value]="'raw'"
-                                    >Raw
+                                >
+                                    {{ 'Raw' | translate }}
                                 </mat-radio-button>
                                 <p class="description">
-                                    Show raw data from your data source.
+                                    {{
+                                        'Show raw data from your data source.'
+                                            | translate
+                                    }}
                                 </p>
                                 <div
                                     fxLayout="column"
@@ -331,7 +342,11 @@
                                             appearance="outline"
                                         >
                                             <mat-label>
-                                                <span>&nbsp;Limit</span>
+                                                <span
+                                                    >&nbsp;{{
+                                                        'Limit' | translate
+                                                    }}</span
+                                                >
                                             </mat-label>
                                             <input
                                                 [(ngModel)]="
@@ -350,7 +365,11 @@
                                             appearance="outline"
                                         >
                                             <mat-label>
-                                                <span>&nbsp;Page</span>
+                                                <span
+                                                    >&nbsp;{{
+                                                        'Page' | translate
+                                                    }}</span
+                                                >
                                             </mat-label>
                                             <input
                                                 [(ngModel)]="
@@ -379,10 +398,14 @@
                                 <mat-radio-button
                                     class="selection-radio-button"
                                     [value]="'aggregated'"
-                                    >Aggregated
+                                >
+                                    {{ 'Aggregated' | translate }}
                                 </mat-radio-button>
                                 <p class="description">
-                                    Aggregate raw data by time unit or value.
+                                    {{
+                                        'Aggregate raw data by time unit or 
value.'
+                                            | translate
+                                    }}
                                 </p>
                                 <div
                                     fxLayout="column"
@@ -401,7 +424,7 @@
                                             "
                                             (change)="triggerDataRefresh()"
                                         >
-                                            Auto-Aggregate
+                                            {{ 'Auto-Aggregate' | translate }}
                                         </mat-checkbox>
                                     </div>
                                     <sp-aggregate-configuration
@@ -431,10 +454,11 @@
                                 <mat-radio-button
                                     class="selection-radio-button"
                                     [value]="'single'"
-                                    >Single
+                                >
+                                    {{ 'Single' | translate }}
                                 </mat-radio-button>
                                 <p class="description">
-                                    Show single data entry.
+                                    {{ 'Show single data entry.' | translate }}
                                 </p>
                             </div>
                         </mat-radio-group>
@@ -474,19 +498,19 @@
             (click)="addDataSource()"
             style="margin-right: 10px; margin-bottom: 15px"
         >
-            Add Data Source
+            {{ 'Add Data Source' | translate }}
         </button>
     </div>
     <div class="p-10">
         <mat-checkbox [(ngModel)]="dataConfig.ignoreTooMuchDataWarning">
-            Deactivate browser overload warning
+            {{ 'Deactivate browser overload warning' | translate }}
         </mat-checkbox>
         <mat-checkbox
             [(ngModel)]="dataConfig.ignoreMissingValues"
             (change)="triggerDataRefresh()"
             data-cy="data-explorer-ignore-missing-values-checkbox"
         >
-            Ignore Events with missing values
+            {{ 'Ignore Events with missing values' | translate }}
         </mat-checkbox>
     </div>
 </div>
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection-panel/field-selection-panel.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection-panel/field-selection-panel.component.html
index 9310ddc078..3479840ee3 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection-panel/field-selection-panel.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection-panel/field-selection-panel.component.html
@@ -15,7 +15,7 @@
   ~ limitations under the License.
   ~
   -->
-<sp-configuration-box title="Fields">
+<sp-configuration-box [title]="'Fields' | translate">
     <div header fxLayoutAlign="start center" fxFlex="100">
         <button
             mat-button
@@ -25,7 +25,7 @@
             data-cy="data-explorer-data-set-field-select-all"
             (click)="selectAllFields()"
         >
-            Select all
+            {{ 'Select all' | translate }}
         </button>
         <button
             mat-button
@@ -33,13 +33,13 @@
             class="small-button mat-basic btn-margin"
             (click)="deselectAllFields()"
         >
-            Deselect all
+            {{ 'Deselect all' | translate }}
         </button>
         <span fxFlex></span>
         <button
             mat-icon-button
             class="pull-btn-right"
-            matTooltip="Expand More"
+            [matTooltip]="'Expand More' | translate"
             (click)="toggleExpandFields()"
             *ngIf="!expandFields"
         >
@@ -48,7 +48,7 @@
         <button
             mat-icon-button
             class="pull-btn-right"
-            matTooltip="Expand Less"
+            [matTooltip]="'Expand Less' | translate"
             (click)="toggleExpandFields()"
             *ngIf="expandFields"
         >
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection/field-selection.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection/field-selection.component.html
index c1aa46e710..16734effeb 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection/field-selection.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/field-selection/field-selection.component.html
@@ -40,28 +40,28 @@
                 (ngModelChange)="triggerConfigurationUpdate()"
             >
                 <mat-option [value]="'MEAN'" *ngIf="field.numeric">
-                    <span class="pipeline-name">Mean</span>
+                    <span class="pipeline-name">{{ 'Mean' | translate }}</span>
                 </mat-option>
                 <mat-option [value]="'FIRST'">
-                    <span class="pipeline-name">First</span>
+                    <span class="pipeline-name">{{ 'First' | translate 
}}</span>
                 </mat-option>
                 <mat-option [value]="'LAST'">
-                    <span class="pipeline-name">Last</span>
+                    <span class="pipeline-name">{{ 'Last' | translate }}</span>
                 </mat-option>
                 <mat-option [value]="'MIN'" *ngIf="field.numeric">
-                    <span class="pipeline-name">Min</span>
+                    <span class="pipeline-name">{{ 'Min' | translate }}</span>
                 </mat-option>
                 <mat-option [value]="'MAX'" *ngIf="field.numeric">
-                    <span class="pipeline-name">Max</span>
+                    <span class="pipeline-name">{{ 'Max' | translate }}</span>
                 </mat-option>
                 <mat-option [value]="'MODE'">
-                    <span class="pipeline-name">Mode</span>
+                    <span class="pipeline-name">{{ 'Mode' | translate }}</span>
                 </mat-option>
                 <mat-option [value]="'COUNT'">
-                    <span class="pipeline-name">Count</span>
+                    <span class="pipeline-name">{{ 'Count' | translate 
}}</span>
                 </mat-option>
                 <mat-option [value]="'SUM'">
-                    <span class="pipeline-name">Sum</span>
+                    <span class="pipeline-name">{{ 'Sum' | translate }}</span>
                 </mat-option>
             </mat-select>
         </mat-form-field>
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-property-selection/filter-selection-panel-row-property-selection.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-property-selection/filter-selection-panel-row-property-selection.component.html
index 23c7ba5c26..f104e1e5b7 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-property-selection/filter-selection-panel-row-property-selection.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-property-selection/filter-selection-panel-row-property-selection.component.html
@@ -16,7 +16,7 @@
   ~
   -->
 <mat-form-field color="accent" class="w-140-px mr-5" appearance="outline">
-    <mat-label>Field</mat-label>
+    <mat-label>{{ 'Field' | translate }}</mat-label>
     <mat-select
         [(value)]="filter.field"
         (selectionChange)="updateParentComponent()"
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input-autocomplete/filter-selection-panel-row-value-autocomplete.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input-autocomplete/filter-selection-panel-row-value-autocomplete.component.html
index 81ff27305b..1661c5c180 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input-autocomplete/filter-selection-panel-row-value-autocomplete.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input-autocomplete/filter-selection-panel-row-value-autocomplete.component.html
@@ -18,7 +18,7 @@
 <mat-form-field color="accent" appearance="outline" class="w-140-px mr-5">
     <input
         type="text"
-        placeholder="Value"
+        [placeholder]="'Value' | translate"
         aria-label="Number"
         matInput
         [(ngModel)]="value"
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input/filter-selection-panel-row-value-input.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input/filter-selection-panel-row-value-input.component.html
index 8f7c507b79..4c692f034e 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input/filter-selection-panel-row-value-input.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input/filter-selection-panel-row-value-input.component.html
@@ -18,7 +18,7 @@
 <mat-form-field color="accent" appearance="outline" class="w-140-px mr-5">
     <input
         type="text"
-        placeholder="Value"
+        [placeholder]="'Value' | translate"
         aria-label="Number"
         matInput
         [(ngModel)]="value"
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel.component.html
index f2dd8b0d27..67e4710fbf 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel.component.html
@@ -16,7 +16,7 @@
   ~
   -->
 
-<sp-configuration-box title="Filter" marginTop="5px">
+<sp-configuration-box [title]="'Filter' | translate" marginTop="5px">
     <div header fxLayoutAlign="start center" fxFlex="100">
         <button
             mat-button
@@ -27,7 +27,7 @@
             (click)="addFilter()"
             style="margin-right: 10px"
         >
-            Add Filter
+            {{ 'Add Filter' | translate }}
         </button>
     </div>
     <div fxLayout="column">
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/group-selection-panel/group-selection-panel.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/group-selection-panel/group-selection-panel.component.html
index e1d19a603f..6aa691692a 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/group-selection-panel/group-selection-panel.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/group-selection-panel/group-selection-panel.component.html
@@ -15,7 +15,7 @@
   ~ limitations under the License.
   ~
   -->
-<sp-configuration-box title="Group by" marginTop="5px">
+<sp-configuration-box [title]="'Group by' | translate" marginTop="5px">
     <div header>
         <button
             mat-button
@@ -25,7 +25,7 @@
             style="margin-right: 10px"
             (click)="selectAllFields()"
         >
-            Select all
+            {{ 'Select all' | translate }}
         </button>
         <button
             mat-button
@@ -34,7 +34,7 @@
             style="margin-right: 10px"
             (click)="deselectAllFields()"
         >
-            Deselect all
+            {{ 'Deselect all' | translate }}
         </button>
     </div>
     <div fxLayout="column" class="field-scroll-panel">
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/order-selection-panel/order-selection-panel.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/order-selection-panel/order-selection-panel.component.html
index 9e47655f85..909d726e06 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/order-selection-panel/order-selection-panel.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/data-settings/order-selection-panel/order-selection-panel.component.html
@@ -16,7 +16,7 @@
   ~
   -->
 
-<sp-configuration-box title="Order" marginTop="5px">
+<sp-configuration-box [title]="'Order' | translate" marginTop="5px">
     <mat-radio-group
         class="selection-radio-group"
         (change)="triggerConfigurationUpdate()"
@@ -26,13 +26,13 @@
             class="selection-radio-button"
             [value]="'DESC'"
             data-cy="descending-radio-button"
-            >Newest (descending)
+            >{{ 'Newest (descending)' | translate }}
         </mat-radio-button>
         <mat-radio-button
             class="selection-radio-button"
             [value]="'ASC'"
             data-cy="ascending-radio-button"
-            >Oldest (ascending)
+            >{{ 'Oldest (ascending)' | translate }}
         </mat-radio-button>
     </mat-radio-group>
 </sp-configuration-box>
diff --git 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/visualisation-settings/data-explorer-visualisation-settings.component.html
 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/visualisation-settings/data-explorer-visualisation-settings.component.html
index 6d1480b19c..3719c9ae05 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/designer-panel/visualisation-settings/data-explorer-visualisation-settings.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/designer-panel/visualisation-settings/data-explorer-visualisation-settings.component.html
@@ -18,7 +18,7 @@
 
 <div fxFlex="100" fxLayout="column" class="form-field-small">
     <sp-configuration-box
-        title="Chart Type"
+        [title]="'Chart Type' | translate"
         marginTop="5px"
         background="var(--color-bg-2)"
     >
diff --git 
a/ui/src/app/data-explorer/components/chart-view/toolbar/data-explorer-chart-view-toolbar.component.html
 
b/ui/src/app/data-explorer/components/chart-view/toolbar/data-explorer-chart-view-toolbar.component.html
index 0efb909a24..fc0370a889 100644
--- 
a/ui/src/app/data-explorer/components/chart-view/toolbar/data-explorer-chart-view-toolbar.component.html
+++ 
b/ui/src/app/data-explorer/components/chart-view/toolbar/data-explorer-chart-view-toolbar.component.html
@@ -36,7 +36,9 @@
                 class="mt-5 form-field-small widget-title-container"
                 *ngIf="editMode"
             >
-                <span class="widget-title-text">Chart Name</span>
+                <span class="widget-title-text">{{
+                    'Chart Name' | translate
+                }}</span>
                 <mat-form-field
                     appearance="outline"
                     color="accent"
@@ -56,30 +58,30 @@
         <button
             mat-raised-button
             color="accent"
-            matTooltip="Save"
+            [matTooltip]="'Save' | translate"
             class="edit-menu-btn"
             (click)="saveDataViewEmitter.emit()"
             data-cy="save-data-view-btn"
             *ngIf="editMode"
         >
             <mat-icon>save</mat-icon>
-            Save
+            {{ 'Save' | translate }}
         </button>
         <button
             mat-raised-button
-            matTooltip="Discard"
+            [matTooltip]="'Discard' | translate"
             class="mat-basic mr-10 edit-menu-btn"
             (click)="discardDataViewEmitter.emit()"
             data-cy="discard-data-explorer-widget-btn"
             *ngIf="editMode"
         >
             <i class="material-icons">undo</i>
-            <span>&nbsp;Discard</span>
+            <span>&nbsp;{{ 'Discard' | translate }}</span>
         </button>
         <button
             mat-icon-button
             color="accent"
-            matTooltip="Download data"
+            [matTooltip]="'Download data' | translate"
             (click)="downloadFileEmitter.emit()"
             data-cy="data-view-data-download-btn"
             *ngIf="editMode"
diff --git 
a/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.html
 
b/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.html
index ab137f0ee2..c45176bd5e 100644
--- 
a/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.html
+++ 
b/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.html
@@ -18,7 +18,7 @@
 
 <div fxFlex="100" fxLayout="column">
     <sp-basic-header-title-component
-        title="Charts"
+        [title]="'Charts' | translate"
     ></sp-basic-header-title-component>
     <div fxFlex="100" fxLayout="row" fxLayoutAlign="center start">
         <sp-table
@@ -33,7 +33,7 @@
                     mat-header-cell
                     *matHeaderCellDef
                 >
-                    Chart
+                    {{ 'Chart' | translate }}
                 </th>
                 <td
                     fxFlex="60"
@@ -63,7 +63,7 @@
                         <button
                             mat-icon-button
                             color="accent"
-                            matTooltip="Show data view"
+                            [matTooltip]="'Show chart' | translate"
                             (click)="openDataView(element, false)"
                         >
                             <i class="material-icons">visibility</i>
@@ -71,7 +71,7 @@
                         <button
                             mat-icon-button
                             color="accent"
-                            matTooltip="Edit data view"
+                            [matTooltip]="'Edit chart' | translate"
                             *ngIf="hasDataExplorerWritePrivileges"
                             [attr.data-cy]="
                                 'edit-data-view-' +
@@ -87,7 +87,7 @@
                         <button
                             mat-icon-button
                             color="accent"
-                            matTooltip="Manage permissions"
+                            [matTooltip]="'Manage permissions' | translate"
                             *ngIf="isAdmin"
                             (click)="showPermissionsDialog(element)"
                         >
@@ -96,7 +96,7 @@
                         <button
                             mat-icon-button
                             color="accent"
-                            matTooltip="Delete data view"
+                            [matTooltip]="'Delete chart' | translate"
                             *ngIf="hasDataExplorerWritePrivileges"
                             [attr.data-cy]="
                                 'delete-data-view-' +
diff --git 
a/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.ts
 
b/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.ts
index 99b74b9389..4180bb82cb 100644
--- 
a/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.ts
+++ 
b/ui/src/app/data-explorer/components/overview/data-explorer-overview-table/data-explorer-overview-table.component.ts
@@ -32,6 +32,7 @@ import { AuthService } from 
'../../../../services/auth.service';
 import { DataExplorerRoutingService } from 
'../../../../data-explorer-shared/services/data-explorer-routing.service';
 import { DataExplorerSharedService } from 
'../../../../data-explorer-shared/services/data-explorer-shared.service';
 import { MatDialog } from '@angular/material/dialog';
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
     selector: 'sp-data-explorer-overview-table',
@@ -55,6 +56,7 @@ export class SpDataExplorerDataViewOverviewComponent extends 
SpDataExplorerOverv
         currentUserService: CurrentUserService,
         routingService: DataExplorerRoutingService,
         private dialog: MatDialog,
+        private translateService: TranslateService,
     ) {
         super(dialogService, authService, currentUserService, routingService);
     }
@@ -84,7 +86,9 @@ export class SpDataExplorerDataViewOverviewComponent extends 
SpDataExplorerOverv
         const dialogRef =
             this.dataExplorerDashboardService.openPermissionsDialog(
                 chart.elementId,
-                `Manage permissions for chart 
${chart.baseAppearanceConfig.widgetTitle}`,
+                this.translateService.instant(
+                    `Manage permissions for chart 
${chart.baseAppearanceConfig.widgetTitle}`,
+                ),
             );
 
         dialogRef.afterClosed().subscribe(refresh => {
@@ -98,11 +102,14 @@ export class SpDataExplorerDataViewOverviewComponent 
extends SpDataExplorerOverv
         const dialogRef = this.dialog.open(ConfirmDialogComponent, {
             width: '600px',
             data: {
-                title: 'Are you sure you want to delete this data view?',
-                subtitle:
-                    'The data view will be removed from all dashboards as 
well. This action cannot be undone!',
-                cancelTitle: 'Cancel',
-                okTitle: 'Delete Data View',
+                title: this.translateService.instant(
+                    'Are you sure you want to delete this chart?',
+                ),
+                subtitle: this.translateService.instant(
+                    'The chart will be removed from all dashboards as well. 
This action cannot be undone!',
+                ),
+                cancelTitle: this.translateService.instant('Cancel'),
+                okTitle: this.translateService.instant('Delete chart'),
                 confirmAndCancel: true,
             },
         });
diff --git 
a/ui/src/app/data-explorer/components/overview/data-explorer-overview.component.html
 
b/ui/src/app/data-explorer/components/overview/data-explorer-overview.component.html
index e64d0ae4ad..3eee341faa 100644
--- 
a/ui/src/app/data-explorer/components/overview/data-explorer-overview.component.html
+++ 
b/ui/src/app/data-explorer/components/overview/data-explorer-overview.component.html
@@ -18,7 +18,7 @@
 
 <sp-asset-browser
     filteredAssetLinkType="chart"
-    allResourcesAlias="Charts"
+    [allResourcesAlias]="'Charts' | translate"
     [resourceCount]="resourceCount"
     (filterIdsEmitter)="applyChartFilters($event)"
 >
@@ -40,7 +40,7 @@
                 *ngIf="hasDataExplorerWritePrivileges"
             >
                 <i class="material-icons">add</i>
-                <span>New chart</span>
+                <span>{{ 'New chart' | translate }}</span>
             </button>
         </div>
         <div fxFlex="100" fxLayout="column">
diff --git a/ui/src/app/data-explorer/data-explorer.module.ts 
b/ui/src/app/data-explorer/data-explorer.module.ts
index 13b7a97c7c..c2f3e23561 100644
--- a/ui/src/app/data-explorer/data-explorer.module.ts
+++ b/ui/src/app/data-explorer/data-explorer.module.ts
@@ -81,6 +81,7 @@ import { FilterSelectionPanelRowValueInputComponent } from 
'./components/chart-v
 import { FilterSelectionPanelRowValueAutocompleteComponent } from 
'./components/chart-view/designer-panel/data-settings/filter-selection-panel/filter-selection-panel-row/panel-row-value-input-autocomplete/filter-selection-panel-row-value-autocomplete.component';
 import { DataExplorerSharedModule } from 
'../data-explorer-shared/data-explorer-shared.module';
 import { AggregateConfigurationComponent } from 
'./components/chart-view/designer-panel/data-settings/aggregate-configuration/aggregate-configuration.component';
+import { TranslateModule } from '@ngx-translate/core';
 
 @NgModule({
     imports: [
@@ -126,6 +127,7 @@ import { AggregateConfigurationComponent } from 
'./components/chart-view/designe
         MatChipsModule,
         PlatformServicesModule,
         SharedUiModule,
+        TranslateModule.forChild(),
         NgxEchartsModule.forChild(),
         RouterModule.forChild([
             {

Reply via email to