diff --git a/projects/editor/src/app/app.component.ts b/projects/editor/src/app/app.component.ts
index a891b67fcc2a9248c4d091de675a2777d73bfd8f..780534ec58fb607547f7ad3316c56eb40606c6a9 100644
--- a/projects/editor/src/app/app.component.ts
+++ b/projects/editor/src/app/app.component.ts
@@ -1,4 +1,5 @@
 import { Component } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
   selector: 'editor-aspect',
@@ -14,4 +15,8 @@ import { Component } from '@angular/core';
 })
 export class AppComponent {
   title = 'verona-editor-aspect';
+  constructor(private translateService: TranslateService) {
+    translateService.addLangs(['de']);
+    translateService.setDefaultLang('de');
+  }
 }
diff --git a/projects/editor/src/app/app.module.ts b/projects/editor/src/app/app.module.ts
index 7e7e2ef1c2a9677c23cb3b267abbc162892aad32..242a58ad19d4194df4f4b4cd059aafb3cbadc080 100644
--- a/projects/editor/src/app/app.module.ts
+++ b/projects/editor/src/app/app.module.ts
@@ -7,6 +7,7 @@ import { createCustomElement } from '@angular/elements';
 import { MatDialogModule } from '@angular/material/dialog';
 import { MatButtonToggleModule } from '@angular/material/button-toggle';
 
+import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
 import { AppComponent } from './app.component';
 import { ToolbarComponent } from './components/toolbar/toolbar.component';
 import { UiElementToolboxComponent } from './components/unit-view/page-view/ui-element-toolbox/ui-element-toolbox.component';
@@ -20,6 +21,7 @@ import { CanvasSectionToolbarComponent } from './components/unit-view/page-view/
 import { CanvasDragOverlayComponent } from './components/unit-view/page-view/canvas/canvas-drag-overlay.component';
 import { SharedModule } from '../../../common/app.module';
 import { ConfirmationDialog, MultilineTextEditDialog, TextEditDialog } from './dialog.service';
+import { EditorTranslateLoader } from './editor-translate-loader';
 
 @NgModule({
   declarations: [
@@ -44,7 +46,13 @@ import { ConfirmationDialog, MultilineTextEditDialog, TextEditDialog } from './d
     CommonModule,
     SharedModule,
     MatDialogModule,
-    MatButtonToggleModule
+    MatButtonToggleModule,
+    TranslateModule.forRoot({
+      loader: {
+        provide: TranslateLoader,
+        useClass: EditorTranslateLoader
+      }
+    })
   ],
   providers: []
 })
diff --git a/projects/editor/src/app/components/toolbar/toolbar.component.html b/projects/editor/src/app/components/toolbar/toolbar.component.html
index 709aa6d3c972174fce77af61077366b146105095..5d7da36cf86de6ec199e0b24f77a30d6198f5a64 100644
--- a/projects/editor/src/app/components/toolbar/toolbar.component.html
+++ b/projects/editor/src/app/components/toolbar/toolbar.component.html
@@ -1,10 +1,10 @@
 <mat-toolbar>
   <button mat-raised-button (click)="load()">
-    Unit laden
+    {{'loadUnit' | translate}}
     <mat-icon>file_upload</mat-icon>
   </button>
   <button mat-raised-button (click)="save()">
-    Unit speichern
+    {{'saveUnit' | translate}}
     <mat-icon>file_download</mat-icon>
   </button>
 </mat-toolbar>
diff --git a/projects/editor/src/app/editor-translate-loader.ts b/projects/editor/src/app/editor-translate-loader.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8b377dc063dc261850feeab72562cf311774c48b
--- /dev/null
+++ b/projects/editor/src/app/editor-translate-loader.ts
@@ -0,0 +1,15 @@
+import { TranslateLoader } from '@ngx-translate/core';
+import { from, merge, Observable } from 'rxjs';
+import { reduce } from 'rxjs/operators';
+
+export class EditorTranslateLoader implements TranslateLoader {
+  getTranslation = (lang: string): Observable<Record<string, string>> => merge(
+    from(import(`../assets/i18n/${lang}.json`)),
+    from(import(`../../../common/assets/i18n/${lang}.json`))
+  ).pipe(
+    reduce((
+      merged: Record<string, string>,
+      file: Record<string, string>
+    ): Record<string, string> => ({ ...merged, ...file }), {})
+  );
+}
diff --git a/projects/editor/src/assets/i18n/de.json b/projects/editor/src/assets/i18n/de.json
new file mode 100644
index 0000000000000000000000000000000000000000..8056db49a72b855c60fcb6559cd6d483dc6bb59d
--- /dev/null
+++ b/projects/editor/src/assets/i18n/de.json
@@ -0,0 +1,4 @@
+{
+  "loadUnit": "Unit laden",
+  "saveUnit": "Unit speichern"
+}
diff --git a/projects/player/src/app/classes/player-translate-loader.ts b/projects/player/src/app/classes/player-translate-loader.ts
index e4cd196467a3cd84cd38dd83213eab990ca8485e..4b4aede906206118603585cd34518d1136f9b409 100644
--- a/projects/player/src/app/classes/player-translate-loader.ts
+++ b/projects/player/src/app/classes/player-translate-loader.ts
@@ -7,6 +7,9 @@ export class PlayerTranslateLoader implements TranslateLoader {
     from(import(`../../assets/i18n/${lang}.json`)),
     from(import(`../../../../common/assets/i18n/${lang}.json`))
   ).pipe(
-    reduce((merged, entity) => ({ ...merged, ...entity }), {})
+    reduce((
+      merged: Record<string, string>,
+      file: Record<string, string>
+    ): Record<string, string> => ({ ...merged, ...file }), {})
   );
 }