From 84d50b1eb6670759dc0ac44e15a7623dd65c4d79 Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Thu, 29 Jul 2021 18:41:45 +0200
Subject: [PATCH] [player] Add translations

---
 projects/common/assets/i18n/de.json           | 13 ++++++++++-
 .../src/app/components/form.component.ts      |  7 ++++--
 .../player-state/player-state.component.html  |  4 ++--
 .../player-state/player-state.component.ts    |  8 ++++---
 .../validation-message.component.ts           | 22 +++++++++----------
 5 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/projects/common/assets/i18n/de.json b/projects/common/assets/i18n/de.json
index 0967ef424..d93117e14 100644
--- a/projects/common/assets/i18n/de.json
+++ b/projects/common/assets/i18n/de.json
@@ -1 +1,12 @@
-{}
+{
+  "page": "Seite",
+  "alwaysVisiblePage": "Seite immer sichtbar",
+  "presentationIncomplete": "Bearbeitung unvollständig",
+  "responsesIncomplete": "Antworten sind unvollständig",
+  "noReason": "Navigation ohne Angabe von Gründen verweigert",
+  "inputRequired": "Eingabe erforderlich",
+  "InputTooShort": "Eingabe zu kurz",
+  "InputTooLong": "Eingabe zu lang",
+  "ValueTooSmall": "Wert zu klein",
+  "ValueTooBig": "Wert zu groß"
+}
diff --git a/projects/player/src/app/components/form.component.ts b/projects/player/src/app/components/form.component.ts
index 5fa132311..09fb03e5d 100644
--- a/projects/player/src/app/components/form.component.ts
+++ b/projects/player/src/app/components/form.component.ts
@@ -2,6 +2,7 @@ import { Component, Input, OnDestroy } from '@angular/core';
 import { FormArray, FormBuilder, FormGroup } from '@angular/forms';
 import { Subject } from 'rxjs';
 import { takeUntil } from 'rxjs/operators';
+import { TranslateService } from '@ngx-translate/core';
 import { FormService } from '../../../../common/form.service';
 import { VeronaSubscriptionService } from '../services/verona-subscription.service';
 import { VeronaPostService } from '../services/verona-post.service';
@@ -35,7 +36,8 @@ export class FormComponent implements OnDestroy {
               private formService: FormService,
               private veronaSubscriptionService: VeronaSubscriptionService,
               private veronaPostService: VeronaPostService,
-              private messageService: MessageService) {
+              private messageService: MessageService,
+              private translateService: TranslateService) {
     this.form = this.formBuilder.group({
       pages: this.formBuilder.array([])
     });
@@ -75,7 +77,8 @@ export class FormComponent implements OnDestroy {
   private onNavigationDenied(message: VopNavigationDeniedNotification): void {
     // eslint-disable-next-line no-console
     console.log('player: onNavigationDenied', message);
-    this.messageService.showWarning(message.reason?.join(', ') || 'noReason');
+    const reasons = message.reason?.map((reason: string) => this.translateService.instant(reason));
+    this.messageService.showWarning(reasons?.join(', ') || this.translateService.instant('noReason'));
     this.form.markAllAsTouched();
   }
 
diff --git a/projects/player/src/app/components/player-state/player-state.component.html b/projects/player/src/app/components/player-state/player-state.component.html
index 978f94d7a..3e7628393 100644
--- a/projects/player/src/app/components/player-state/player-state.component.html
+++ b/projects/player/src/app/components/player-state/player-state.component.html
@@ -3,12 +3,12 @@
   <mat-tab-group [fxFlex]="pageWidth" [(selectedIndex)]="currentIndex"
                  (selectedIndexChange)="onSelectedIndexChange()"
                  mat-align-tabs="start">
-    <mat-tab *ngFor="let page of scrollPages; let i = index" label="{{page.label}}">
+    <mat-tab *ngFor="let page of scrollPages; let i = index" label="{{'page' | translate}} {{i + 1}}">
       <app-page class="page" [parentForm]="parenForm" [page]="page"></app-page>
     </mat-tab>
   </mat-tab-group>
   <div *ngIf="alwaysVisiblePage" fxFlex="50">
-    <div class="mat-tab-label">{{alwaysVisiblePage.label}}</div>
+    <div class="mat-tab-label">{{'alwaysVisiblePage' | translate}}</div>
     <app-page class="page" [parentForm]="parenForm" [page]="alwaysVisiblePage"></app-page>
   </div>
 </div>
diff --git a/projects/player/src/app/components/player-state/player-state.component.ts b/projects/player/src/app/components/player-state/player-state.component.ts
index 0419df5d5..14248c6e1 100644
--- a/projects/player/src/app/components/player-state/player-state.component.ts
+++ b/projects/player/src/app/components/player-state/player-state.component.ts
@@ -4,6 +4,7 @@ import {
 import { FormGroup } from '@angular/forms';
 import { takeUntil } from 'rxjs/operators';
 import { Subject } from 'rxjs';
+import { TranslateService } from '@ngx-translate/core';
 import { UnitPage } from '../../../../../common/unit';
 import { VeronaSubscriptionService } from '../../services/verona-subscription.service';
 import {
@@ -25,7 +26,8 @@ export class PlayerStateComponent implements OnInit, OnDestroy {
   private ngUnsubscribe = new Subject<void>();
 
   constructor(private veronaSubscriptionService: VeronaSubscriptionService,
-              private veronaPostService: VeronaPostService) {
+              private veronaPostService: VeronaPostService,
+              private translateService: TranslateService) {
   }
 
   private get state(): RunningState {
@@ -37,8 +39,8 @@ export class PlayerStateComponent implements OnInit, OnDestroy {
   }
 
   get validPages():Record<string, string>[] {
-    return this.pages.map((page:UnitPage): Record<string, string> => (
-      { [page.id]: page.label }));
+    return this.scrollPages.map((page: UnitPage, index: number): Record<string, string> => (
+      { [page.id]: `${this.translateService.instant('page')} ${index}` }));
   }
 
   get alwaysVisiblePage(): UnitPage | undefined {
diff --git a/projects/player/src/app/components/validation-message.component.ts b/projects/player/src/app/components/validation-message.component.ts
index 9170750c6..5d835d002 100644
--- a/projects/player/src/app/components/validation-message.component.ts
+++ b/projects/player/src/app/components/validation-message.component.ts
@@ -12,22 +12,22 @@ import { FormService } from '../../../../common/form.service';
   template: `
       <ng-container *ngIf="formElementControl && formElementControl.touched">
           <mat-error *ngIf="formElementControl.errors?.required">
-              {{requiredMessage}}
+              {{requiredMessage | translate}}
           </mat-error>
           <mat-error *ngIf="formElementControl.errors?.requiredTrue">
-              {{requiredMessage}}
+              {{requiredMessage | translate}}
           </mat-error>
           <mat-error *ngIf="formElementControl.errors?.minlength">
-              {{minLengthMessage}}
+              {{minLengthMessage | translate}}
           </mat-error>
           <mat-error *ngIf="formElementControl.errors?.maxlength">
-              {{maxLengthMessage}}
+              {{maxLengthMessage | translate}}
           </mat-error>
           <mat-error *ngIf="formElementControl.errors?.min">
-              {{minMessage}}
+              {{minMessage | translate}}
           </mat-error>
           <mat-error *ngIf="formElementControl.errors?.max">
-              {{maxMessage}}
+              {{maxMessage | translate}}
           </mat-error>
       </ng-container>
   `
@@ -76,22 +76,22 @@ export class ValidationMessageComponent implements OnInit {
   }
 
   get requiredMessage(): string {
-    return (this.elementModel as InputUIElement).requiredWarnMessage || 'Eingabe erforderlich';
+    return (this.elementModel as InputUIElement).requiredWarnMessage || 'inputRequired';
   }
 
   get minLengthMessage(): string {
-    return (this.elementModel as TextFieldElement).minWarnMessage || 'Eingabe zu kurz';
+    return (this.elementModel as TextFieldElement).minWarnMessage || 'inputTooShort';
   }
 
   get maxLengthMessage(): string {
-    return (this.elementModel as TextFieldElement).maxWarnMessage || 'Eingabe zu lang';
+    return (this.elementModel as TextFieldElement).maxWarnMessage || 'inputTooLong';
   }
 
   get minMessage(): string {
-    return (this.elementModel as NumberFieldElement).minWarnMessage || 'Wert zu klein';
+    return (this.elementModel as NumberFieldElement).minWarnMessage || 'valueTooSmall';
   }
 
   get maxMessage(): string {
-    return (this.elementModel as NumberFieldElement).maxWarnMessage || 'Wert zu groß';
+    return (this.elementModel as NumberFieldElement).maxWarnMessage || 'valueTooBig';
   }
 }
-- 
GitLab