argos/dmp-frontend/src/app/core/services/language/language.service.ts

51 lines
1.6 KiB
TypeScript

import { Injectable } from '@angular/core';
import { BaseService } from '@common/base/base.service';
import { TranslateService } from '@ngx-translate/core';
import { Observable } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';
import { LanguageHttpService } from './language.http.service';
@Injectable()
export class LanguageService extends BaseService {
private currentLanguage: string;
private availableLanguageCodes: string[];
constructor(
private translate: TranslateService,
private languageHttpService: LanguageHttpService
) {
super();
}
public changeLanguage(lang: string) {
this.currentLanguage = lang;
this.translate.use(lang);
}
public getCurrentLanguage() {
if (this.currentLanguage == null) throw new Error("languages not loaded");
return this.currentLanguage;
}
public loadAvailableLanguages(): Observable<string[]> {
return this.languageHttpService.queryAvailableCodes(this.languageHttpService.buildAutocompleteLookup())
.pipe(takeUntil(this._destroyed)).pipe(
map((data) => {
this.availableLanguageCodes = data.items;
if (this.availableLanguageCodes.length > 0) this.currentLanguage = this.availableLanguageCodes[0];
return this.availableLanguageCodes;
})
);
}
public getDefaultLanguagesCode() {
if (this.availableLanguageCodes == null || this.availableLanguageCodes.length == 0) throw new Error("languages not loaded");
return this.availableLanguageCodes[0];
}
public getAvailableLanguagesCodes() {
if (this.availableLanguageCodes == null) throw new Error("languages not loaded");
return this.availableLanguageCodes;
}
}