This is an automated email from the ASF dual-hosted git repository.
riemer 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 f532080c7f feat: Add translations to the Connect view (#3868)
f532080c7f is described below
commit f532080c7f49a84ed76179e7d624741027f32c49
Author: Dominik Riemer <[email protected]>
AuthorDate: Tue Oct 21 15:43:50 2025 +0200
feat: Add translations to the Connect view (#3868)
---
ui/deployment/i18n/de.json | 88 ++++++++++++++++------
ui/deployment/i18n/en.json | 81 +++++++++++++++-----
.../datalake-configuration.component.html | 7 +-
.../adapter-configuration.component.html | 22 +++---
.../adapter-configuration.component.ts | 6 ++
.../adapter-deployment-settings.component.html | 6 +-
.../adapter-settings.component.html | 10 +--
.../error-message/error-message.component.html | 6 +-
.../event-property-row.component.html | 18 +++--
.../adapter-details-code.component.html | 2 +-
.../adapter-details-data.component.html | 4 +-
.../adapter-details-logs.component.html | 2 +-
.../adapter-details-metrics.component.html | 6 +-
.../adapter-description.component.html | 8 +-
.../data-marketplace.component.html | 4 +-
.../existing-adapters.component.html | 6 +-
.../filter-toolbar/filter-toolbar.component.html | 2 +-
.../login/components/login/login.component.html | 36 +++++----
.../components/register/register.component.html | 22 +++---
.../restore-password.component.html | 26 ++++---
.../login/components/terms/terms.component.html | 4 +-
ui/src/app/login/login.module.ts | 2 +
22 files changed, 246 insertions(+), 122 deletions(-)
diff --git a/ui/deployment/i18n/de.json b/ui/deployment/i18n/de.json
index 441185ec7b..ebabde119c 100644
--- a/ui/deployment/i18n/de.json
+++ b/ui/deployment/i18n/de.json
@@ -52,6 +52,28 @@
"Modify Pipeline": "Pipeline bearbeiten",
"Modify pipeline": "Pipeline ändern",
"Delete Pipeline": "Pipeline löschen",
+ "Accept": "Akzeptieren",
+ "Reject": "Ablehnen",
+ "Restore password": "Passwort wiederherstellen",
+ "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.",
+ "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.",
+ "Login": "Anmelden",
+ "Email ": "E-Mail",
+ "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",
+ "Forgot password?": "Passwort vergessen?",
+ "Create new account": "Neuen Account erstellen",
+ "or": "oder",
+ "Login with": "Anmelden mit",
"Preparing pipeline editor...": "Pipeline-Editor vorbereiten...",
"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:",
@@ -197,6 +219,8 @@
"Clone chart": "Diagramm kopieren",
"Delete chart": "Diagramm löschen",
"Chart Name": "Diagrammname",
+ "Add to Asset": "Zu Asset hinzufügen",
+ "Add To Asset": "Zu Asset hinzufügen",
"Discard": "Verwerfen",
"Data": "Daten",
"Visualization": "Visualisierung",
@@ -257,6 +281,8 @@
"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",
"New dashboard title": "Neuer Dashboard-Titel",
"Clone options": "Optionen zum Klonen",
"Deep clone (also clone widgets)": "Tiefes Klonen (auch Widgets klonen)",
@@ -327,12 +353,23 @@
"Allow anonymous access through public link": "Anonymen Zugang über einen
öffentlichen Link ermöglichen",
"URL": "URL",
"(no log messages available)": "(keine Protokollmeldungen verfügbar)",
+ "Adapters": "Adapter",
"New adapter": "Neuer Adapter",
"Start all adapters": "Alle Adapter starten",
"Stop all adapters": "Alle Adapter anhalten",
+ "Refresh adapters": "Adapter neu laden",
"Messages": "Nachrichten",
"Last message": "Letzte Nachricht",
- "Add to Asset": "Zu Asset hinzufügen",
+ "Select Adapter": "Adapter auswählen",
+ "Create adapter": "Adapter erstellen",
+ "Docs": "Doku",
+ "Refresh": "Neu laden",
+ "Last published message": "Zuletzt veröffentlichte Nachricht",
+ "Published messages": "Nachrichten",
+ "Adapter running": "Adapter läuft",
+ "Adapter stopped": "Adapter gestoppt",
+ "Configure fields": "Felder konfigurieren",
+ "Start adapter": "Adapter starten",
"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",
@@ -348,6 +385,17 @@
"Show code to programmatically deploy this adapter over the API": "Code
anzeigen, um diesen Adapter programmatisch über die API einzusetzen",
"Start Adapter": "Start Adapter",
"Update Adapter": "Adapter aktualisieren",
+ "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",
+ "Basic Settings": "Basiseinstellungen",
+ "Save as template": "Als Vorlage speichern",
+ "Any available service": "Jeder verfügbare Service",
+ "Restrict to service tags": "Auf Service-Tags beschränken",
"Sites & Areas": "Standorte & Bereiche",
"Manage your organization's sites and production areas": "Verwaltung der
Standorte und Produktionsbereiche",
"New site": "Neuer Standort",
@@ -361,9 +409,9 @@
"User Accounts": "Benutzerkonten",
"Add and edit user accounts": "Benutzerkonten hinzufügen und bearbeiten",
"Existing user accounts": "Bestehende Benutzerkonten",
- "Service Accounts": "Service-Konten",
- "Add and edit service accounts": "Service-Konten hinzufügen und bearbeiten",
- "Existing service accounts": "Bestehende Service-Konten",
+ "Service Accounts": "Servicekonten",
+ "Add and edit service accounts": "Servicekonten hinzufügen und bearbeiten",
+ "Existing service accounts": "Bestehende Servicekonten",
"Manage user groups": "Benutzergruppen verwalten",
"Existing groups": "Bestehende Gruppen",
"Roles": "Rollen",
@@ -378,11 +426,10 @@
"Edit user": "Benutzer bearbeiten",
"Delete service": "Service löschen",
"New User": "Neuer Benutzer",
- "Email": "E-Mail",
"Full Name": "Vor- und Nachname",
"Last Login": "Letzte Anmeldung",
"Delete user": "Benutzer löschen",
- "New Service Account": "Neues Service-Konto",
+ "New Service Account": "Neues Servicekonto",
"Username": "Benutzername",
"New Role": "Neue Rolle",
"Role name": "Rollenbezeichnung",
@@ -390,11 +437,7 @@
"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",
- "Initial password": "Ursprüngliches Passwort",
- "Repeat password": "Passwort wiederholen",
- "Passwords do not match.": "Die Passwörter stimmen nicht überein.",
"Client Secret": "Client-Schlüssel",
"Minimum length 35 characters.": "Mindestens 35 Zeichen.",
"Account": "Konto",
@@ -454,8 +497,8 @@
"Show documentation link in user menu": "Link zur Dokumentation im
Benutzermenü anzeigen",
"API Documentation Link": "Link zur API-Dokumentation",
"Show API documentation link on login page": "Link zur API-Dokumentation auf
der Login-Seite anzeigen",
- "Support Link": "Link unterstützen",
- "Support URL": "URL unterstützen",
+ "Support Link": "Support-Link",
+ "Support URL": "Support-URL",
"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.",
@@ -472,20 +515,17 @@
"Configure trusted and rejected OPC-UA certificates": "Konfiguration der
vertrauenswürdigen und abgelehnten OPC-UA Zertifikate",
"Service Group": "Service-Gruppe",
"Service ID": "Service-ID",
- "Refresh": "Neu laden",
"View service details": "Service-Details anzeigen",
"Service Name": "Service-Name",
"Issuer": "Aussteller",
"Expires": "Läuft aus",
"Certificate Details": "Zertifikat-Details",
"Details": "Einzelheiten",
- "Reject": "Ablehnen",
"Trust": "Vertrauen",
"Delete certificate": "Zertifikat löschen",
"Install selected": "Ausgewählte installieren",
"Uninstall selected": "Ausgewählte deinstallieren",
"All": "Alle",
- "Adapters": "Adapter",
"Data Streams": "Datenströme",
"Data Processors": "Datenprozessoren",
"Data Sinks": "Datensenken",
@@ -571,7 +611,7 @@
"install": "installieren",
"uninstall": "deinstallieren",
"Press 'Next' to start the process.": "Auf \"Weiter\" drücken, um den
Vorgang zu starten.",
- "{{action}} {{ current }} of {{ total }} ({{ name }})...{{ status }}":
"{{Aktion}} {{ current }} von {{ total }} ({{ Name }})...{{ Status }}",
+ "{{action}} {{ current }} of {{ total }} ({{ name }})...{{ status }}":
"{{action}} {{ current }} von {{ total }} ({{name}})...{{ status }}",
"Installing": "Installation von",
"Uninstalling": "Deinstallation von",
"More Details:": "Mehr Details:",
@@ -588,9 +628,11 @@
"Bucket": "Bucket",
"Enter Bucket Name": "Bucketnamen eingeben",
"Region": "Region",
- "Select Region": "Region auswählen",
- "Truncate Data": "Daten leeren",
+ "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",
"Start Sync": "Synchronisierung starten",
"Delete Sync": "Sync löschen",
"Data Retention Action": "Aktion",
@@ -666,6 +708,8 @@
"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.",
"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",
@@ -694,7 +738,10 @@
"Updating adapter {{adapterName}}": "Aktualisieren des Adapters
{{AdapterName}}",
"Creating adapter {{adapterName}}": "Adapter erstellen {{adapterName}}",
"Starting adapter {{adapterName}}": "Adapter starten {{AdapterName}}",
- "Your {{assetTypes}} were successfully added to {{assetIds}}.": "Ihre
{{assetTypes}} wurden erfolgreich zu {{assetIds}} hinzugefügt.",
+ "Your Assets were successfully added.": "Assets erfolgreich hinzugefügt.",
+ "Your Assets were successfully deleted.": "Assets erfolgreich gelöscht.",
+ "Edit adapter: ": "Adapter bearbeiten:",
+ "New adapter: ": "Neuer Adapter:",
"General": "Allgemein",
"Data Lake": "Data Lake",
"Export/Import": "Export/Import",
@@ -819,6 +866,5 @@
"Documentation": "Dokumentation",
"Error Details": "Fehler-Details",
"All {{allResourcesAlias}}": "Alle {{allResourcesAlias}}",
- "{{ widgetTitle }} Clone": "{{ widgetTitle }} Kopie",
- "{{action}} {{ current }} of {{ total }} ({{ name }})...{{ status }}":
"{{action}} {{ current }} von {{ total }} ({{name}})...{{ status }}"
+ "{{ widgetTitle }} Clone": "{{ widgetTitle }} Kopie"
}
diff --git a/ui/deployment/i18n/en.json b/ui/deployment/i18n/en.json
index aa7fe2af2f..080c8c6bb3 100644
--- a/ui/deployment/i18n/en.json
+++ b/ui/deployment/i18n/en.json
@@ -52,6 +52,28 @@
"Modify Pipeline": null,
"Modify pipeline": null,
"Delete Pipeline": null,
+ "Accept": null,
+ "Reject": null,
+ "Restore password": null,
+ "Email": null,
+ "Reset password": null,
+ "Unknown error - contact your administrator to check the mail settings.":
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,
+ "Login": null,
+ "Email ": null,
+ "Password": null,
+ "Logging in": null,
+ "User not found or incorrect password provided.": null,
+ "Please try again": null,
+ "Forgot password?": null,
+ "Create new account": null,
+ "or": null,
+ "Login with": null,
"Preparing pipeline editor...": null,
"The tutorial requires pipeline elements that are not yet installed.": null,
"Install the following pipeline elements and start the tutorial again:":
null,
@@ -197,6 +219,8 @@
"Clone chart": null,
"Delete chart": null,
"Chart Name": null,
+ "Add to Asset": null,
+ "Add To Asset": null,
"Discard": null,
"Data": null,
"Visualization": null,
@@ -257,6 +281,8 @@
"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,
"New dashboard title": null,
"Clone options": null,
"Deep clone (also clone widgets)": null,
@@ -327,12 +353,23 @@
"Allow anonymous access through public link": null,
"URL": null,
"(no log messages available)": null,
+ "Adapters": null,
"New adapter": null,
"Start all adapters": null,
"Stop all adapters": null,
+ "Refresh adapters": null,
"Messages": null,
"Last message": null,
- "Add to Asset": null,
+ "Select Adapter": null,
+ "Create adapter": null,
+ "Docs": null,
+ "Refresh": null,
+ "Last published message": null,
+ "Published messages": null,
+ "Adapter running": null,
+ "Adapter stopped": null,
+ "Configure fields": null,
+ "Start adapter": null,
"Add Adapter to an existing Asset": null,
"Remove Duplicates": null,
"Avoid duplicated events within a certain time interval": null,
@@ -348,6 +385,17 @@
"Show code to programmatically deploy this adapter over the API": null,
"Start Adapter": null,
"Update Adapter": null,
+ "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,
+ "Basic Settings": null,
+ "Save as template": null,
+ "Any available service": null,
+ "Restrict to service tags": null,
"Sites & Areas": null,
"Manage your organization's sites and production areas": null,
"New site": null,
@@ -378,7 +426,6 @@
"Edit user": null,
"Delete service": null,
"New User": null,
- "Email": null,
"Full Name": null,
"Last Login": null,
"Delete user": null,
@@ -390,11 +437,7 @@
"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,
- "Initial password": null,
- "Repeat password": null,
- "Passwords do not match.": null,
"Client Secret": null,
"Minimum length 35 characters.": null,
"Account": null,
@@ -472,20 +515,17 @@
"Configure trusted and rejected OPC-UA certificates": null,
"Service Group": null,
"Service ID": null,
- "Refresh": null,
"View service details": null,
"Service Name": null,
"Issuer": null,
"Expires": null,
"Certificate Details": null,
"Details": null,
- "Reject": null,
"Trust": null,
"Delete certificate": null,
"Install selected": null,
"Uninstall selected": null,
"All": null,
- "Adapters": null,
"Data Streams": null,
"Data Processors": null,
"Data Sinks": null,
@@ -571,7 +611,7 @@
"install": null,
"uninstall": null,
"Press 'Next' to start the process.": null,
- "{{action}} {{ current }} of {{ total }} ({{ name }})...{{ status }}": null,
+ "{{action}} {{ current }} of {{ total }} ({{ name }})...{{ status }}":
"{{action}} {{ current }} of {{ total }} ({{name}})...{{ status }}",
"Installing": null,
"Uninstalling": null,
"More Details:": null,
@@ -588,9 +628,11 @@
"Bucket": null,
"Enter Bucket Name": null,
"Region": null,
- "Select Region": null,
- "Truncate Data": 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,
"Start Sync": null,
"Delete Sync": null,
"Data Retention Action": null,
@@ -666,6 +708,8 @@
"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,
"Save changes?": null,
"Update all changes to chart or discard current changes.": null,
"Discard changes": null,
@@ -694,7 +738,10 @@
"Updating adapter {{adapterName}}": "Updating adapter {{adapterName}}",
"Creating adapter {{adapterName}}": "Creating adapter {{adapterName}}",
"Starting adapter {{adapterName}}": "Starting adapter {{adapterName}}",
- "Your {{assetTypes}} were successfully added to {{assetIds}}.": "Your
{{assetTypes}} were successfully added to {{assetIds}}.",
+ "Your Assets were successfully added.": null,
+ "Your Assets were successfully deleted.": null,
+ "Edit adapter: ": null,
+ "New adapter: ": null,
"General": null,
"Data Lake": null,
"Export/Import": null,
@@ -819,11 +866,5 @@
"Documentation": null,
"Error Details": null,
"All {{allResourcesAlias}}": "All {{allResourcesAlias}}",
- "{{ widgetTitle }} Clone": "{{ widgetTitle }} Clone",
- "Your {{assetTypes}} were successfully added to {{assetIds}}.": "Your
{{assetTypes}} were successfully added to {{assetIds}}.",
- "Your {{assetTypes}} were successfully deleted from {{assetIds}}.": "Your
{{assetTypes}} were successfully deleted from {{assetIds}}.",
- "Starting adapter {{adapterName}}": "Starting adapter {{adapterName}}",
- "Creating adapter {{adapterName}}": "Creating adapter {{adapterName}}",
- "Updating adapter {{adapterName}}": "Updating adapter {{adapterName}}",
- "{{action}} {{ current }} of {{ total }} ({{ name }})...{{ status }}":
"{{action}} {{ current }} of {{ total }} ({{name}})...{{ status }}"
+ "{{ widgetTitle }} Clone": "{{ widgetTitle }} Clone"
}
diff --git
a/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html
b/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html
index 52fa1c9191..60c557f1ee 100644
---
a/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html
+++
b/ui/src/app/configuration/datalake-configuration/datalake-configuration.component.html
@@ -472,7 +472,12 @@
</table>
</div>
- <div *ngIf="availableExportProvider.length === 0">
+ <div
+ *ngIf="
+ !availableExportProvider ||
+ availableExportProvider.length === 0
+ "
+ >
<h5>{{ 'no stored export providers' | translate }}</h5>
</div>
</sp-split-section>
diff --git
a/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.html
b/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.html
index ab9892eaff..bdd4381ea0 100644
---
a/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.html
+++
b/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.html
@@ -22,7 +22,7 @@
mat-icon-button
color="accent"
(click)="openDocumentation()"
- matTooltip="Show documentation"
+ [matTooltip]="'Show documentation' | translate"
>
<i class="material-icons">menu_book</i>
</button>
@@ -30,18 +30,14 @@
mat-icon-button
color="accent"
(click)="removeSelection()"
- matTooltip="Cancel"
+ [matTooltip]="'Cancel' | translate"
>
<i class="material-icons">close</i>
</button>
</div>
<div fxLayout="column" fxLayoutAlign="center stretch" *ngIf="adapter">
<sp-basic-header-title-component
- [title]="
- isEditMode
- ? 'Edit adapter: ' + displayName
- : 'New adapter: ' + displayName
- "
+ [title]="pageTitle"
></sp-basic-header-title-component>
<mat-horizontal-stepper
@@ -51,7 +47,9 @@
class="stepper"
>
<mat-step>
- <ng-template matStepLabel>Settings</ng-template>
+ <ng-template matStepLabel>{{
+ 'Settings' | translate
+ }}</ng-template>
<sp-adapter-settings
[adapterDescription]="adapter"
(updateAdapterDescriptionEmitter)="adapter = $event"
@@ -62,7 +60,9 @@
</mat-step>
<mat-step>
- <ng-template matStepLabel>Configure fields</ng-template>
+ <ng-template matStepLabel>{{
+ 'Configure fields' | translate
+ }}</ng-template>
<sp-event-schema
fxLayout="column"
fxFlex="100"
@@ -76,7 +76,9 @@
</mat-step>
<mat-step>
- <ng-template matStepLabel>Start Adapter</ng-template>
+ <ng-template matStepLabel>{{
+ 'Start adapter' | translate
+ }}</ng-template>
<sp-start-adapter-configuration
[adapterDescription]="adapter"
[eventSchema]="adapter.dataStream.eventSchema"
diff --git
a/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
b/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
index 3f99e7a373..0d3be4d5a6 100644
---
a/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
+++
b/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
@@ -29,6 +29,7 @@ import { TransformationRuleService } from
'../../services/transformation-rule.se
import { Router } from '@angular/router';
import { DialogService, PanelType } from '@streampipes/shared-ui';
import { SpAdapterDocumentationDialogComponent } from
'../../dialog/adapter-documentation/adapter-documentation-dialog.component';
+import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'sp-adapter-configuration',
@@ -47,6 +48,7 @@ export class AdapterConfigurationComponent implements OnInit {
linkageData: LinkageData[];
myStepper: MatStepper;
parentForm: UntypedFormGroup;
+ pageTitle = '';
private eventSchemaComponent: EventSchemaComponent;
@@ -56,10 +58,14 @@ export class AdapterConfigurationComponent implements
OnInit {
private shepherdService: ShepherdService,
private _formBuilder: UntypedFormBuilder,
private router: Router,
+ private translate: TranslateService,
) {}
ngOnInit() {
this.parentForm = this._formBuilder.group({});
+ this.pageTitle = this.isEditMode
+ ? this.translate.instant('Edit adapter: ') + this.displayName
+ : this.translate.instant('New adapter: ') + this.displayName;
}
removeSelection() {
diff --git
a/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-deployment-settings/adapter-deployment-settings.component.html
b/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-deployment-settings/adapter-deployment-settings.component.html
index 45e0cdcc87..6ca9deab21 100644
---
a/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-deployment-settings/adapter-deployment-settings.component.html
+++
b/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-deployment-settings/adapter-deployment-settings.component.html
@@ -21,14 +21,16 @@
[(ngModel)]="deploymentMode"
(change)="handleSelectionChange($event)"
>
- <mat-radio-button value="all">Any available service</mat-radio-button>
+ <mat-radio-button value="all">{{
+ 'Any available service' | translate
+ }}</mat-radio-button>
<mat-radio-button
value="filter"
[disabled]="
deploymentMode === 'all' && availableServiceTags.length === 0
"
>
- Restrict to service tags
+ {{ 'Restrict to service tags' | translate }}
</mat-radio-button>
</mat-radio-group>
diff --git
a/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-settings.component.html
b/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-settings.component.html
index 2df9bf7345..eddabccb37 100644
---
a/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-settings.component.html
+++
b/ui/src/app/connect/components/adapter-configuration/adapter-settings/adapter-settings.component.html
@@ -19,7 +19,7 @@
<div fxFlex="100" fxLayout="column">
<div fxFlex="100" fxLayout="column">
<sp-basic-inner-panel
- panelTitle="Service Selection"
+ [panelTitle]="'Service Selection' | translate"
outerMargin="20px 0px"
>
<sp-adapter-deployment-settings
@@ -30,7 +30,7 @@
</sp-adapter-deployment-settings>
</sp-basic-inner-panel>
<sp-basic-inner-panel
- panelTitle="Basic Settings"
+ [panelTitle]="'Basic Settings' | translate"
outerMargin="20px 0px"
>
<div
@@ -86,7 +86,7 @@
(click)="removeSelection()"
data-cy="connect-new-adapter-cancel"
>
- Cancel
+ {{ 'Cancel' | translate }}
</button>
<button
mat-button
@@ -95,7 +95,7 @@
data-cy="create-template"
(click)="openTemplateDialog()"
>
- Store config as template
+ {{ 'Save as template' | translate }}
</button>
<div id="specific-settings-next-button">
<button
@@ -106,7 +106,7 @@
color="accent"
mat-flat-button
>
- Next
+ {{ 'Next' | translate }}
</button>
</div>
</div>
diff --git
a/ui/src/app/connect/components/adapter-configuration/schema-editor/error-message/error-message.component.html
b/ui/src/app/connect/components/adapter-configuration/schema-editor/error-message/error-message.component.html
index bdd48b8862..70f5c17c8c 100644
---
a/ui/src/app/connect/components/adapter-configuration/schema-editor/error-message/error-message.component.html
+++
b/ui/src/app/connect/components/adapter-configuration/schema-editor/error-message/error-message.component.html
@@ -19,8 +19,10 @@
<div fxLayout="column" fxFlex="100">
<div fxLayout="row" fxLayoutAlign="center center" fxFlex="100">
<div fxLayoutAlign="start center" class="error-text">
- There was an error while guessing the schema of your
- configured data stream:
+ {{
+ 'There was an error while guessing the schema of your
configured data stream'
+ | translate
+ }}:
</div>
</div>
<div fxLayout="row" fxLayoutAlign="center center" class="mt-10">
diff --git
a/ui/src/app/connect/components/adapter-configuration/schema-editor/event-property-row/event-property-row.component.html
b/ui/src/app/connect/components/adapter-configuration/schema-editor/event-property-row/event-property-row.component.html
index 23abf9e86c..56e697d9b3 100644
---
a/ui/src/app/connect/components/adapter-configuration/schema-editor/event-property-row/event-property-row.component.html
+++
b/ui/src/app/connect/components/adapter-configuration/schema-editor/event-property-row/event-property-row.component.html
@@ -124,15 +124,17 @@
class="small-select"
[attr.data-cy]="'property-scope-' + label"
>
- <mat-option value="MEASUREMENT_PROPERTY"
- >Measurement</mat-option
- >
+ <mat-option value="MEASUREMENT_PROPERTY">{{
+ 'Measurement' | translate
+ }}</mat-option>
<mat-option
*ngIf="runtimeType !== 'FLOAT'"
value="DIMENSION_PROPERTY"
- >Dimension</mat-option
+ >{{ 'Dimension' | translate }}</mat-option
>
- <mat-option value="HEADER_PROPERTY">Header</mat-option>
+ <mat-option value="HEADER_PROPERTY">{{
+ 'Header' | translate
+ }}</mat-option>
</mat-select>
</mat-form-field>
</div>
@@ -144,7 +146,9 @@
mat-button
(click)="addNestedProperty(node.data)"
>
- <mat-icon matTooltip="Add a Nested Property">queue</mat-icon>
+ <mat-icon [matTooltip]="'Add a Nested Property' | translate"
+ >queue</mat-icon
+ >
</button>
</div>
<div
@@ -159,7 +163,7 @@
(click)="openEditDialog(node.data)"
[attr.data-cy]="'edit-' + label.toLowerCase()"
>
- <mat-icon>edit</mat-icon> Edit field
+ <mat-icon>edit</mat-icon> {{ 'Edit field' | translate }}
</button>
</div>
<div fxLayoutAlign="end center">
diff --git
a/ui/src/app/connect/components/adapter-details/adapter-details-code/adapter-details-code.component.html
b/ui/src/app/connect/components/adapter-details/adapter-details-code/adapter-details-code.component.html
index 6a93d34e7f..19d6644f36 100644
---
a/ui/src/app/connect/components/adapter-details/adapter-details-code/adapter-details-code.component.html
+++
b/ui/src/app/connect/components/adapter-details/adapter-details-code/adapter-details-code.component.html
@@ -26,7 +26,7 @@
@if (adapter) {
<div fxLayout="column">
<sp-basic-header-title-component
- [title]="adapter.name + ' - Data'"
+ [title]="adapter.name + ' - ' + 'Data' | translate"
></sp-basic-header-title-component>
<sp-adapter-code-panel
[adapterDescription]="adapter"
diff --git
a/ui/src/app/connect/components/adapter-details/adapter-details-data/adapter-details-data.component.html
b/ui/src/app/connect/components/adapter-details/adapter-details-data/adapter-details-data.component.html
index 62e5d66e13..ae3a3a1b6d 100644
---
a/ui/src/app/connect/components/adapter-details/adapter-details-data/adapter-details-data.component.html
+++
b/ui/src/app/connect/components/adapter-details/adapter-details-data/adapter-details-data.component.html
@@ -31,11 +31,11 @@
<div fxFlex fxLayoutAlign="end center">
@if (adapter.running) {
<div class="adapter-status status-running">
- Adapter running
+ {{ 'Adapter running' | translate }}
</div>
} @else {
<div class="adapter-status status-stopped">
- Adapter stopped
+ {{ 'Adapter stopped' | translate }}
</div>
}
</div>
diff --git
a/ui/src/app/connect/components/adapter-details/adapter-details-logs/adapter-details-logs.component.html
b/ui/src/app/connect/components/adapter-details/adapter-details-logs/adapter-details-logs.component.html
index 9de320af3b..9010b685dd 100644
---
a/ui/src/app/connect/components/adapter-details/adapter-details-logs/adapter-details-logs.component.html
+++
b/ui/src/app/connect/components/adapter-details/adapter-details-logs/adapter-details-logs.component.html
@@ -27,7 +27,7 @@
mat-icon-button
color="accent"
class="mr-10"
- matTooltip="Refresh"
+ [matTooltip]="'Refresh' | translate"
(click)="triggerUpdate()"
>
<i class="material-icons">refresh</i>
diff --git
a/ui/src/app/connect/components/adapter-details/adapter-details-metrics/adapter-details-metrics.component.html
b/ui/src/app/connect/components/adapter-details/adapter-details-metrics/adapter-details-metrics.component.html
index 8f6ae096f8..a247b52eb1 100644
---
a/ui/src/app/connect/components/adapter-details/adapter-details-metrics/adapter-details-metrics.component.html
+++
b/ui/src/app/connect/components/adapter-details/adapter-details-metrics/adapter-details-metrics.component.html
@@ -27,7 +27,7 @@
mat-icon-button
color="accent"
class="mr-10"
- matTooltip="Refresh"
+ [matTooltip]="'Refresh' | translate"
(click)="triggerUpdate()"
>
<i class="material-icons">refresh</i>
@@ -36,8 +36,8 @@
<div fxFlex="100" fxLayout="column" *ngIf="adapter && adapterMetrics">
<sp-simple-metrics
[elementName]="adapter.name"
- lastPublishedLabel="Last published message"
- statusValueLabel="Published messages"
+ [lastPublishedLabel]="'Last published message' | translate"
+ [statusValueLabel]="'Published messages' | translate"
[lastTimestamp]="adapterMetrics.lastTimestamp"
[statusValue]="adapterMetrics.messagesOut.counter"
>
diff --git
a/ui/src/app/connect/components/data-marketplace/adapter-description/adapter-description.component.html
b/ui/src/app/connect/components/data-marketplace/adapter-description/adapter-description.component.html
index 5a38642a5d..df28d5a7a7 100644
---
a/ui/src/app/connect/components/data-marketplace/adapter-description/adapter-description.component.html
+++
b/ui/src/app/connect/components/data-marketplace/adapter-description/adapter-description.component.html
@@ -46,18 +46,18 @@
fxFlex
mat-flat-button
(click)="createEmitter.emit(adapter.appId)"
- matTooltip="Create adapter"
+ [matTooltip]="'Create adapter' | translate"
>
- <span>Create</span>
+ <span>{{ 'Create' | translate }}</span>
<mat-icon>add</mat-icon>
</button>
<button
mat-flat-button
class="mat-basic"
(click)="openDocumentation($event)"
- matTooltip="Show documentation"
+ [matTooltip]="'Show documentation' | translate"
>
- <span>Docs</span>
+ <span>{{ 'Docs' | translate }}</span>
<mat-icon>menu_book</mat-icon>
</button>
</div>
diff --git
a/ui/src/app/connect/components/data-marketplace/data-marketplace.component.html
b/ui/src/app/connect/components/data-marketplace/data-marketplace.component.html
index 838c9afbb6..c00a3cfb27 100644
---
a/ui/src/app/connect/components/data-marketplace/data-marketplace.component.html
+++
b/ui/src/app/connect/components/data-marketplace/data-marketplace.component.html
@@ -17,7 +17,7 @@
-->
<sp-basic-view
- showBackLink="true"
+ [showBackLink]="true"
[backLinkTarget]="['connect']"
[padding]="true"
>
@@ -30,7 +30,7 @@
</div>
<div fxLayout="column" fxFlex="100">
<sp-basic-header-title-component
- title="Select Adapter"
+ [title]="'Select Adapter' | translate"
></sp-basic-header-title-component>
<div fxFlex="100" fxLayout="column" fxLayoutAlign="center start">
<div
diff --git
a/ui/src/app/connect/components/existing-adapters/existing-adapters.component.html
b/ui/src/app/connect/components/existing-adapters/existing-adapters.component.html
index abd0e5d7be..b91e06fa03 100644
---
a/ui/src/app/connect/components/existing-adapters/existing-adapters.component.html
+++
b/ui/src/app/connect/components/existing-adapters/existing-adapters.component.html
@@ -18,7 +18,7 @@
<sp-asset-browser
filteredAssetLinkType="adapter"
- allResourcesAlias="Adapters"
+ [allResourcesAlias]="'Adapters' | translate"
[resourceCount]="existingAdapters.length"
(filterIdsEmitter)="applyAdapterFilters($event)"
>
@@ -85,7 +85,7 @@
</div>
<button
mat-icon-button
- matTooltip="Refresh adapters"
+ [matTooltip]="'Refresh adapters' | translate"
matTooltipPosition="below"
color="accent"
(click)="getAdaptersRunning()"
@@ -96,7 +96,7 @@
</div>
<div fxFlex="100" fxLayout="column">
<sp-basic-header-title-component
- title="Adapters"
+ [title]="'Adapters' | translate"
></sp-basic-header-title-component>
<div fxFlex="100" fxLayout="row" fxLayoutAlign="center start">
<sp-table
diff --git
a/ui/src/app/connect/components/filter-toolbar/filter-toolbar.component.html
b/ui/src/app/connect/components/filter-toolbar/filter-toolbar.component.html
index 7f790adbdd..639661fe96 100644
--- a/ui/src/app/connect/components/filter-toolbar/filter-toolbar.component.html
+++ b/ui/src/app/connect/components/filter-toolbar/filter-toolbar.component.html
@@ -31,7 +31,7 @@
>
<input
matInput
- placeholder="Find Element"
+ [placeholder]="'Search' | translate"
value=""
(input)="updateFilterTerm($event.target.value)"
name="something"
diff --git a/ui/src/app/login/components/login/login.component.html
b/ui/src/app/login/components/login/login.component.html
index d7f9463461..02ca813794 100644
--- a/ui/src/app/login/components/login/login.component.html
+++ b/ui/src/app/login/components/login/login.component.html
@@ -19,13 +19,13 @@
@if (configReady) {
<sp-auth-box [linkSettings]="loginSettings.linkSettings">
<div fxFlex="100" fxLayout="column" fxLayoutAlign="center start">
- <h1>Login</h1>
+ <h1>{{ 'Login' | translate }}</h1>
</div>
<div fxFlex="100" fxLayout="column" class="mt-10">
<form [formGroup]="parentForm" fxFlex="100" fxLayout="column">
<div fxFlex="100" fxLayout="column">
<mat-form-field fxFlex color="accent">
- <mat-label>Email</mat-label>
+ <mat-label>{{ 'Email ' | translate }}</mat-label>
<input
formControlName="username"
matInput
@@ -36,7 +36,7 @@
/>
</mat-form-field>
<mat-form-field fxFlex color="accent">
- <mat-label>Password</mat-label>
+ <mat-label>{{ 'Password' | translate }}</mat-label>
<input
formControlName="password"
matInput
@@ -55,8 +55,10 @@
(click)="doLogin()"
[disabled]="!parentForm.valid || loading"
>
- <span *ngIf="loading">Logging in...</span>
- <span *ngIf="!loading">Login</span>
+ <span *ngIf="loading"
+ >{{ 'Logging in' | translate }}...</span
+ >
+ <span *ngIf="!loading">{{ 'Login' | translate }}</span>
</button>
<mat-spinner
[mode]="'indeterminate'"
@@ -66,15 +68,18 @@
></mat-spinner>
<div class="md-warn" *ngIf="authenticationFailed">
<h5 class="login-error">
- User not found or incorrect password provided.<br
/>Please
- try again.
+ {{
+ 'User not found or incorrect password
provided.'
+ | translate
+ }}<br />
+ {{ 'Please try again' | translate }}
</h5>
</div>
<div fxLayout="row" class="mt-10">
<div *ngIf="loginSettings.allowPasswordRecovery">
- <a [routerLink]="['/restore-password']"
- >Forgot password?</a
- >
+ <a [routerLink]="['/restore-password']">{{
+ 'Forgot password?' | translate
+ }}</a>
</div>
<span
style="margin-left: 5px; margin-right: 5px"
@@ -86,9 +91,9 @@
|
</span>
<div *ngIf="loginSettings.allowSelfRegistration">
- <a [routerLink]="['/register']"
- >Create new account</a
- >
+ <a [routerLink]="['/register']">{{
+ 'Create new account' | translate
+ }}</a>
</div>
</div>
<div
@@ -97,7 +102,7 @@
*ngIf="loginSettings.oAuthSettings?.enabled"
>
<div class="separator">
- <span>or</span>
+ <span>{{ 'or' | translate }}</span>
</div>
<div
fxLayout="column"
@@ -113,7 +118,8 @@
(click)="doOAuthLogin(provider.registrationId)"
>
<span *ngIf="!loading"
- >Login with {{ provider.name }}</span
+ >{{ 'Login with' | translate }}
+ {{ provider.name }}</span
>
</button>
</div>
diff --git a/ui/src/app/login/components/register/register.component.html
b/ui/src/app/login/components/register/register.component.html
index b9080709c2..8268a73d63 100644
--- a/ui/src/app/login/components/register/register.component.html
+++ b/ui/src/app/login/components/register/register.component.html
@@ -18,20 +18,20 @@
<sp-auth-box [linkSettings]="loginSettings.linkSettings" *ngIf="configReady">
<div fxFlex="100" fxLayout="column" fxLayoutAlign="center start">
- <h1>Register</h1>
+ <h1>{{ 'Register' | translate }}</h1>
</div>
<div fxLayout="column" fxFlex="100">
<form [formGroup]="parentForm">
<div fxLayout="column">
<mat-form-field color="accent">
- <mat-label>Email</mat-label>
+ <mat-label>{{ 'Email' | translate }}</mat-label>
<input formControlName="username" fxFlex matInput />
<mat-error *ngIf="parentForm.controls.username.errors"
>Must be an email address.</mat-error
>
</mat-form-field>
<mat-form-field color="accent">
- <mat-label>Initial password</mat-label>
+ <mat-label>{{ 'Initial password' | translate }}</mat-label>
<input
formControlName="password"
fxFlex
@@ -41,7 +41,7 @@
/>
</mat-form-field>
<mat-form-field color="accent">
- <mat-label>Repeat password</mat-label>
+ <mat-label>{{ 'Repeat password' | translate }}</mat-label>
<input
formControlName="repeatPassword"
fxFlex
@@ -50,9 +50,9 @@
required
/>
</mat-form-field>
- <mat-error *ngIf="parentForm.hasError('notMatching')"
- >Passwords do not match.</mat-error
- >
+ <mat-error *ngIf="parentForm.hasError('notMatching')">{{
+ 'Passwords do not match.' | translate
+ }}</mat-error>
<div class="form-actions" style="margin-top: 20px">
<button
mat-button
@@ -62,7 +62,7 @@
[disabled]="!parentForm.valid"
*ngIf="!registrationSuccess"
>
- <span>Register</span>
+ <span>{{ 'Register' | translate }}</span>
</button>
<mat-spinner
[mode]="'indeterminate'"
@@ -78,11 +78,13 @@
</div>
<div class="md-success" *ngIf="registrationSuccess">
<h5 class="info-box register-success">
- We've sent out a confirmation mail to this address.
+ {{ 'We've sent out a confirmation mail to this
address.' | translate }}
</h5>
</div>
<div class="mt-10">
- <a [routerLink]="['/login']">Go to login page</a>
+ <a [routerLink]="['/login']">{{
+ 'Go to login page' | translate
+ }}</a>
</div>
</div>
</div>
diff --git
a/ui/src/app/login/components/restore-password/restore-password.component.html
b/ui/src/app/login/components/restore-password/restore-password.component.html
index ece5bf3b73..60c4ebeba7 100644
---
a/ui/src/app/login/components/restore-password/restore-password.component.html
+++
b/ui/src/app/login/components/restore-password/restore-password.component.html
@@ -18,17 +18,17 @@
<sp-auth-box [linkSettings]="loginSettings.linkSettings" *ngIf="configReady">
<div fxFlex="100" fxLayout="column" fxLayoutAlign="center start">
- <h1>Restore password</h1>
+ <h1>{{ 'Restore password' | translate }}</h1>
<h5>
- Enter your mail address and we'll send you a link to restore your
- password.
+ {{ 'Enter your mail address and we'll send you a link to restore
your
+ password.' | translate }}
</h5>
</div>
<div fxLayout="column" fxFlex="100">
<form [formGroup]="parentForm">
<div fxLayout="column">
<mat-form-field color="accent">
- <mat-label>Email</mat-label>
+ <mat-label>{{ 'Email' | translate }}</mat-label>
<input formControlName="username" fxFlex matInput />
</mat-form-field>
<div class="form-actions" style="margin-top: 20px">
@@ -40,15 +40,17 @@
[disabled]="!parentForm.valid"
*ngIf="!restoreSuccess"
>
- <span>Reset password</span>
+ <span>{{ 'Reset password' | translate }}</span>
</button>
<div
class="md-warn"
*ngIf="restoreCompleted && !restoreSuccess"
>
<h5 class="info-box register-error">
- Unknown error - contact your administrator to check
- the mail settings.
+ {{
+ 'Unknown error - contact your administrator to
check
+ the mail settings.' | translate
+ }}
</h5>
</div>
<div
@@ -56,12 +58,16 @@
*ngIf="restoreCompleted && restoreSuccess"
>
<h5 class="info-box register-success">
- In case this account exists, you'll receive a mail
- with instructions to restore your password shortly.
+ {{
+ "In case this account exists, you'll receive a
mail with instructions to restore your password shortly."
+ | translate
+ }}
</h5>
</div>
<div class="mt-10">
- <a [routerLink]="['/login']">Go to login page</a>
+ <a [routerLink]="['/login']">{{
+ 'Go to login page' | translate
+ }}</a>
</div>
</div>
</div>
diff --git a/ui/src/app/login/components/terms/terms.component.html
b/ui/src/app/login/components/terms/terms.component.html
index 0edc6acacb..150d9e74cd 100644
--- a/ui/src/app/login/components/terms/terms.component.html
+++ b/ui/src/app/login/components/terms/terms.component.html
@@ -31,14 +31,14 @@
<mat-divider></mat-divider>
<div fxLayout="row" fxLayoutGap="10px" fxFlex="none" class="mt-10">
<button mat-flat-button (click)="onTermsAcknowledged()">
- Accept
+ {{ 'Accept' | translate }}
</button>
<button
mat-flat-button
class="mat-basic"
(click)="onTermsRejected()"
>
- Reject
+ {{ 'Reject' | translate }}
</button>
</div>
</div>
diff --git a/ui/src/app/login/login.module.ts b/ui/src/app/login/login.module.ts
index 194c0f1151..0a8416e961 100644
--- a/ui/src/app/login/login.module.ts
+++ b/ui/src/app/login/login.module.ts
@@ -41,6 +41,7 @@ import { SetNewPasswordComponent } from
'./components/set-new-password/set-new-p
import { ActivateAccountComponent } from
'./components/activate-account/activate-account.component';
import { PlatformServicesModule } from '@streampipes/platform-services';
import { TermsComponent } from './components/terms/terms.component';
+import { TranslatePipe } from '@ngx-translate/core';
@NgModule({
imports: [
@@ -60,6 +61,7 @@ import { TermsComponent } from
'./components/terms/terms.component';
ReactiveFormsModule,
MatProgressBarModule,
PlatformServicesModule,
+ TranslatePipe,
],
declarations: [
ActivateAccountComponent,