64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
import { firstValueFrom } from 'rxjs';
|
|
import 'dayjs/locale/en';
|
|
import 'dayjs/locale/de';
|
|
import dayjs, { Dayjs } from 'dayjs';
|
|
import { DateAdapter } from '@angular/material/core';
|
|
import arraySupport from 'dayjs/plugin/arraySupport';
|
|
import localeData from 'dayjs/plugin/localeData';
|
|
import { registerLocaleData } from '@angular/common';
|
|
import localeDe from '@angular/common/locales/de';
|
|
import { BaseUserPreferenceService } from './base-user-preference.service';
|
|
|
|
dayjs.extend(arraySupport);
|
|
dayjs.extend(localeData);
|
|
|
|
@Injectable({
|
|
providedIn: 'root',
|
|
})
|
|
export class LanguageService {
|
|
constructor(
|
|
private readonly _translateService: TranslateService,
|
|
private readonly _userPreferenceService: BaseUserPreferenceService,
|
|
private readonly _dateAdapter: DateAdapter<Dayjs>,
|
|
) {
|
|
registerLocaleData(localeDe);
|
|
_translateService.addLangs(['en', 'de']);
|
|
_translateService.setDefaultLang('en');
|
|
}
|
|
|
|
get currentLanguage() {
|
|
return this._translateService.currentLang;
|
|
}
|
|
|
|
async set(language: string): Promise<void> {
|
|
dayjs.locale(language);
|
|
this._dateAdapter.setLocale(language);
|
|
await firstValueFrom(this._translateService.use(language));
|
|
}
|
|
|
|
isAvailable(language: string): boolean {
|
|
return this._translateService.getLangs().includes(language);
|
|
}
|
|
|
|
async setInitialLanguage(): Promise<void> {
|
|
const defaultLang = this.#getDefaultLanguage();
|
|
document.documentElement.lang = defaultLang;
|
|
this._translateService.setDefaultLang(defaultLang);
|
|
await this.set(defaultLang);
|
|
}
|
|
|
|
async change(language: string) {
|
|
await this._userPreferenceService.saveLanguage(language);
|
|
document.documentElement.lang = language;
|
|
await this.set(language);
|
|
}
|
|
|
|
#getDefaultLanguage() {
|
|
const preferredLang = this._userPreferenceService.getLanguage();
|
|
|
|
return this.isAvailable(preferredLang) ? preferredLang : 'en';
|
|
}
|
|
}
|