From 50f10a9420af89cf8b8462af7a711612e7757b3b Mon Sep 17 00:00:00 2001 From: Tiago Melo Date: Wed, 2 Oct 2019 11:06:23 +0000 Subject: [PATCH] mgr/dashboard: Only show available languages Read locale from LOCALE_ID, this is defined during build. Signed-off-by: Tiago Melo --- .../frontend/src/app/locale.helper.ts | 42 ------------------- .../language-selector.component.ts | 15 ++++--- .../shared/services/language.service.spec.ts | 34 +++++++++++++++ .../app/shared/services/language.service.ts | 22 ++++++++++ 4 files changed, 66 insertions(+), 47 deletions(-) delete mode 100644 src/pybind/mgr/dashboard/frontend/src/app/locale.helper.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.ts diff --git a/src/pybind/mgr/dashboard/frontend/src/app/locale.helper.ts b/src/pybind/mgr/dashboard/frontend/src/app/locale.helper.ts deleted file mode 100644 index b2c02e8239f..00000000000 --- a/src/pybind/mgr/dashboard/frontend/src/app/locale.helper.ts +++ /dev/null @@ -1,42 +0,0 @@ -export class LocaleHelper { - static getBrowserLang(): string { - const lang = navigator.language; - - if (lang.includes('cs')) { - return 'cs'; - } else if (lang.includes('de')) { - return 'de-DE'; - } else if (lang.includes('en')) { - return 'en-US'; - } else if (lang.includes('es')) { - return 'es-ES'; - } else if (lang.includes('fr')) { - return 'fr-FR'; - } else if (lang.includes('id')) { - return 'id-ID'; - } else if (lang.includes('it')) { - return 'it-IT'; - } else if (lang.includes('ja')) { - return 'ja-JP'; - } else if (lang.includes('pl')) { - return 'pl-PL'; - } else if (lang.includes('pt')) { - return 'pt-BR'; - } else if (lang.includes('zh-TW')) { - return 'zh-TW'; - } else if (lang.includes('zh')) { - return 'zh-CN'; - } else { - return undefined; - } - } - - static getLocale(): string { - return window.localStorage.getItem('lang') || this.getBrowserLang() || 'en-US'; - } - - static setLocale(lang: string) { - document.cookie = `cd-lang=${lang}`; - } -} - diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.ts index 8262eff99fc..032ae4207a6 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.ts @@ -1,9 +1,10 @@ import { Component, Input, OnInit } from '@angular/core'; +import * as _ from 'lodash'; import { defineLocale } from 'ngx-bootstrap/chronos'; import { BsLocaleService } from 'ngx-bootstrap/datepicker'; -import { LocaleHelper } from '../../../locale.helper'; +import { LanguageService } from '../../services/language.service'; import { languageBootstrapMapping, SupportedLanguages } from './supported-languages.enum'; @Component({ @@ -15,14 +16,18 @@ export class LanguageSelectorComponent implements OnInit { @Input() isDropdown = true; - supportedLanguages = SupportedLanguages; + supportedLanguages: Object = SupportedLanguages; selectedLanguage: string; - constructor(private localeService: BsLocaleService) {} + constructor(private localeService: BsLocaleService, private languageService: LanguageService) {} ngOnInit() { - this.selectedLanguage = LocaleHelper.getLocale(); + this.selectedLanguage = this.languageService.getLocale(); this.defineUsedLanguage(); + + this.languageService.getLanguages().subscribe((langs) => { + this.supportedLanguages = _.pick(this.supportedLanguages, langs) as Object; + }); } /** @@ -48,7 +53,7 @@ export class LanguageSelectorComponent implements OnInit { } changeLanguage(lang: string) { - LocaleHelper.setLocale(lang); + this.languageService.setLocale(lang); this.reloadWindow(); } } diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.spec.ts new file mode 100644 index 00000000000..5c4ad820a86 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.spec.ts @@ -0,0 +1,34 @@ +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; + +import { configureTestBed } from '../../../testing/unit-test-helper'; +import { LanguageService } from './language.service'; + +describe('LanguageService', () => { + let service: LanguageService; + let httpTesting: HttpTestingController; + + configureTestBed({ + providers: [LanguageService], + imports: [HttpClientTestingModule] + }); + + beforeEach(() => { + service = TestBed.get(LanguageService); + httpTesting = TestBed.get(HttpTestingController); + }); + + afterEach(() => { + httpTesting.verify(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should call create', () => { + service.getLanguages().subscribe(); + const req = httpTesting.expectOne('ui-api/langs'); + expect(req.request.method).toBe('GET'); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.ts new file mode 100644 index 00000000000..80b602a5758 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.ts @@ -0,0 +1,22 @@ +import { HttpClient } from '@angular/common/http'; +import { Inject, LOCALE_ID } from '@angular/core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class LanguageService { + constructor(private http: HttpClient, @Inject(LOCALE_ID) protected localeId: string) {} + + getLocale(): string { + return this.localeId || 'en-US'; + } + + setLocale(lang: string) { + document.cookie = `cd-lang=${lang}`; + } + + getLanguages() { + return this.http.get('ui-api/langs'); + } +} -- 2.39.5