From b64b49cc2e52849f8ed4c17eac6a64f2dd60c8ba Mon Sep 17 00:00:00 2001 From: Sean Engelhardt Date: Fri, 3 Aug 2018 15:16:40 +0200 Subject: [PATCH] Layout and translation fixes --- client/README.md | 7 ++ client/src/app/base.component.ts | 7 +- .../agenda-list/agenda-list.component.ts | 6 +- .../assignment-list.component.ts | 13 ++- client/src/app/site/login/login.component.ts | 9 +- .../mediafile-list.component.ts | 13 ++- .../motion-list/motion-list.component.html | 100 ++++++++++++++++++ .../motion-list/motion-list.component.ts | 5 +- .../settings-list/settings-list.component.ts | 13 ++- client/src/app/site/site.component.html | 32 ++---- client/src/app/site/site.component.scss | 9 +- client/src/app/site/site.component.ts | 5 +- client/src/app/site/start/start.component.ts | 6 +- .../users/user-list/user-list.component.ts | 13 ++- client/src/assets/i18n/de.json | 13 ++- client/src/assets/i18n/en.json | 23 ++-- client/src/assets/i18n/fr.json | 11 ++ client/src/styles.scss | 4 +- 18 files changed, 224 insertions(+), 65 deletions(-) diff --git a/client/README.md b/client/README.md index 03e1e310f..76bda7797 100644 --- a/client/README.md +++ b/client/README.md @@ -44,3 +44,10 @@ A running OpenSlides (2.2 or higher) instance is expected on port 8000. Start OpenSlides as usual using `python manage.py start --no-browser --host 0.0.0.0` + +### Translation + +We are using ngx-translate for translation purposes. +Use `npm run extract` to extract strings and update elements an with translation functions. + +Language files can be found in `/src/assets/i18n`. diff --git a/client/src/app/base.component.ts b/client/src/app/base.component.ts index be6501f79..03f316eaa 100644 --- a/client/src/app/base.component.ts +++ b/client/src/app/base.component.ts @@ -1,6 +1,6 @@ -import { Injector } from '@angular/core'; import { Title } from '@angular/platform-browser'; import { OpenSlidesComponent } from './openslides.component'; +import { TranslateService } from '@ngx-translate/core'; /** * Provides functionalities that will be used by most components @@ -20,7 +20,7 @@ export abstract class BaseComponent extends OpenSlidesComponent { /** * Child constructor that implements the titleServices and calls Super from OpenSlidesComponent */ - constructor(protected titleService?: Title) { + constructor(protected titleService?: Title, protected translate?: TranslateService) { super(); } @@ -30,6 +30,7 @@ export abstract class BaseComponent extends OpenSlidesComponent { * TODO Might translate the prefix here? */ setTitle(prefix: string): void { - this.titleService.setTitle(prefix + this.titleSuffix); + const translatedPrefix = this.translate.instant(prefix); + this.titleService.setTitle(translatedPrefix + this.titleSuffix); } } diff --git a/client/src/app/site/agenda/agenda-list/agenda-list.component.ts b/client/src/app/site/agenda/agenda-list/agenda-list.component.ts index 75ea40afc..19cab2e3f 100644 --- a/client/src/app/site/agenda/agenda-list/agenda-list.component.ts +++ b/client/src/app/site/agenda/agenda-list/agenda-list.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Title } from '@angular/platform-browser'; import { BaseComponent } from 'app/base.component'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-agenda-list', @@ -8,12 +9,11 @@ import { BaseComponent } from 'app/base.component'; styleUrls: ['./agenda-list.component.css'] }) export class AgendaListComponent extends BaseComponent implements OnInit { - constructor(titleService: Title) { - super(titleService); + constructor(titleService: Title, protected translate: TranslateService) { + super(titleService, translate); } ngOnInit() { - //TODO translate super.setTitle('Agenda'); } diff --git a/client/src/app/site/assignments/assignment-list/assignment-list.component.ts b/client/src/app/site/assignments/assignment-list/assignment-list.component.ts index 4c2a04592..74a4b4ab6 100644 --- a/client/src/app/site/assignments/assignment-list/assignment-list.component.ts +++ b/client/src/app/site/assignments/assignment-list/assignment-list.component.ts @@ -1,14 +1,21 @@ import { Component, OnInit } from '@angular/core'; +import { BaseComponent } from '../../../base.component'; +import { TranslateService } from '@ngx-translate/core'; +import { Title } from '@angular/platform-browser'; @Component({ selector: 'app-assignment-list', templateUrl: './assignment-list.component.html', styleUrls: ['./assignment-list.component.css'] }) -export class AssignmentListComponent implements OnInit { - constructor() {} +export class AssignmentListComponent extends BaseComponent implements OnInit { + constructor(titleService: Title, protected translate: TranslateService) { + super(titleService, translate); + } - ngOnInit() {} + ngOnInit() { + super.setTitle('Assignments'); + } downloadAssignmentButton(): void { console.log('Hello World'); diff --git a/client/src/app/site/login/login.component.ts b/client/src/app/site/login/login.component.ts index 4375025a5..5c9e7d843 100644 --- a/client/src/app/site/login/login.component.ts +++ b/client/src/app/site/login/login.component.ts @@ -7,6 +7,7 @@ import { AuthService } from 'app/core/services/auth.service'; import { OperatorService } from 'app/core/services/operator.service'; import { ErrorStateMatcher } from '@angular/material'; import { FormControl, FormGroupDirective, NgForm, FormGroup, Validators, FormBuilder } from '@angular/forms'; +import { TranslateService } from '@ngx-translate/core'; /** * Custom error states. Might become part of the shared module later. @@ -64,6 +65,7 @@ export class LoginComponent extends BaseComponent implements OnInit { inProcess = false; /** + * Constructor for the login component * * @param titleService Setting the title * @param authService Authenticating the user @@ -72,13 +74,14 @@ export class LoginComponent extends BaseComponent implements OnInit { * @param formBuilder To build the form and validate */ constructor( - titleService: Title, + protected titleService: Title, + protected translate: TranslateService, private authService: AuthService, private operator: OperatorService, private router: Router, private formBuilder: FormBuilder ) { - super(titleService); + super(titleService, translate); this.createForm(); } @@ -89,6 +92,8 @@ export class LoginComponent extends BaseComponent implements OnInit { * Observes the operator, if a user was already logged in, recreate to user and skip the login */ ngOnInit() { + //this is necessary since the HTML document never uses the word "Log In" + const loginWord = this.translate.instant('Log In'); super.setTitle('Log In'); // if there is stored login information, try to login directly. diff --git a/client/src/app/site/mediafiles/mediafile-list/mediafile-list.component.ts b/client/src/app/site/mediafiles/mediafile-list/mediafile-list.component.ts index e73d86e7c..97791fb52 100644 --- a/client/src/app/site/mediafiles/mediafile-list/mediafile-list.component.ts +++ b/client/src/app/site/mediafiles/mediafile-list/mediafile-list.component.ts @@ -1,12 +1,19 @@ import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; +import { TranslateService } from '@ngx-translate/core'; +import { BaseComponent } from '../../../base.component'; @Component({ selector: 'app-mediafile-list', templateUrl: './mediafile-list.component.html', styleUrls: ['./mediafile-list.component.css'] }) -export class MediafileListComponent implements OnInit { - constructor() {} +export class MediafileListComponent extends BaseComponent implements OnInit { + constructor(titleService: Title, protected translate: TranslateService) { + super(titleService, translate); + } - ngOnInit() {} + ngOnInit() { + super.setTitle('Files'); + } } diff --git a/client/src/app/site/motions/motion-list/motion-list.component.html b/client/src/app/site/motions/motion-list/motion-list.component.html index b3801c7f9..23669987d 100644 --- a/client/src/app/site/motions/motion-list/motion-list.component.html +++ b/client/src/app/site/motions/motion-list/motion-list.component.html @@ -14,6 +14,106 @@ + +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
+ +
+ Motion Works +
+
Motion Works diff --git a/client/src/app/site/motions/motion-list/motion-list.component.ts b/client/src/app/site/motions/motion-list/motion-list.component.ts index 7eada3d5d..f6243b1da 100644 --- a/client/src/app/site/motions/motion-list/motion-list.component.ts +++ b/client/src/app/site/motions/motion-list/motion-list.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Title } from '@angular/platform-browser'; import { BaseComponent } from 'app/base.component'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-motion-list', @@ -8,8 +9,8 @@ import { BaseComponent } from 'app/base.component'; styleUrls: ['./motion-list.component.css'] }) export class MotionListComponent extends BaseComponent implements OnInit { - constructor(titleService: Title) { - super(titleService); + constructor(titleService: Title, protected translate: TranslateService) { + super(titleService, translate); } ngOnInit() { diff --git a/client/src/app/site/settings/settings-list/settings-list.component.ts b/client/src/app/site/settings/settings-list/settings-list.component.ts index b54e437ae..ab75bade8 100644 --- a/client/src/app/site/settings/settings-list/settings-list.component.ts +++ b/client/src/app/site/settings/settings-list/settings-list.component.ts @@ -1,12 +1,19 @@ import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; +import { TranslateService } from '@ngx-translate/core'; +import { BaseComponent } from '../../../base.component'; @Component({ selector: 'app-settings-list', templateUrl: './settings-list.component.html', styleUrls: ['./settings-list.component.css'] }) -export class SettingsListComponent implements OnInit { - constructor() {} +export class SettingsListComponent extends BaseComponent implements OnInit { + constructor(titleService: Title, protected translate: TranslateService) { + super(titleService, translate); + } - ngOnInit() {} + ngOnInit() { + super.setTitle('Settings'); + } } diff --git a/client/src/app/site/site.component.html b/client/src/app/site/site.component.html index 98a2cf5ec..131c0549d 100644 --- a/client/src/app/site/site.component.html +++ b/client/src/app/site/site.component.html @@ -1,10 +1,8 @@ - - @@ -16,7 +14,6 @@ - Edit Profile @@ -30,24 +27,7 @@ Logout - - - - - - - @@ -87,9 +67,12 @@