]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.ts
import 15.2.0 Octopus source
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / components / language-selector / language-selector.component.ts
1 import { Component, Input, OnInit } from '@angular/core';
2
3 import * as _ from 'lodash';
4 import { defineLocale } from 'ngx-bootstrap/chronos';
5 import { BsLocaleService } from 'ngx-bootstrap/datepicker';
6
7 import { LanguageService } from '../../services/language.service';
8 import { languageBootstrapMapping, SupportedLanguages } from './supported-languages.enum';
9
10 @Component({
11 selector: 'cd-language-selector',
12 templateUrl: './language-selector.component.html',
13 styleUrls: ['./language-selector.component.scss']
14 })
15 export class LanguageSelectorComponent implements OnInit {
16 @Input()
17 isDropdown = true;
18
19 supportedLanguages: Record<string, any> = SupportedLanguages;
20 selectedLanguage: string;
21
22 constructor(private localeService: BsLocaleService, private languageService: LanguageService) {}
23
24 ngOnInit() {
25 this.selectedLanguage = this.languageService.getLocale();
26 this.defineUsedLanguage();
27
28 this.languageService.getLanguages().subscribe((langs) => {
29 this.supportedLanguages = _.pick(this.supportedLanguages, langs) as Object;
30 });
31 }
32
33 /**
34 * Sets ngx-bootstrap local based on the current language selection
35 *
36 * ngx-bootstrap locals documentation:
37 * https://valor-software.com/ngx-bootstrap/#/datepicker#locales
38 */
39 private defineUsedLanguage() {
40 const lang = this.selectedLanguage.slice(0, 2);
41 if (lang in languageBootstrapMapping) {
42 defineLocale(lang, languageBootstrapMapping[lang]);
43 this.localeService.use(lang);
44 }
45 }
46
47 /**
48 * Jest is being more restricted regarding spying on the reload method.
49 * This will allow us to spyOn this method instead.
50 */
51 reloadWindow() {
52 window.location.reload();
53 }
54
55 changeLanguage(lang: string) {
56 this.languageService.setLocale(lang);
57 this.reloadWindow();
58 }
59 }