2020-05-05 18:17:12 +02:00
|
|
|
import { Injectable } from '@angular/core';
|
2022-02-03 12:26:04 +01:00
|
|
|
import { LangChangeEvent, TranslateService } from '@ngx-translate/core';
|
2020-05-05 18:17:12 +02:00
|
|
|
|
2022-02-03 12:26:04 +01:00
|
|
|
import { LanguageEnum } from '../enums/language.enum';
|
2020-05-05 18:17:12 +02:00
|
|
|
import { StorageService } from './storage.service';
|
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
providedIn: 'root',
|
|
|
|
})
|
|
|
|
export class LanguageService {
|
|
|
|
constructor(private translate: TranslateService, private storageService: StorageService) {}
|
|
|
|
|
2022-02-03 12:26:04 +01:00
|
|
|
public getLangage(): LanguageEnum {
|
|
|
|
return this.translate.currentLang as LanguageEnum;
|
2020-05-05 18:17:12 +02:00
|
|
|
}
|
|
|
|
|
2022-02-03 12:26:04 +01:00
|
|
|
public setLanguage(language: LanguageEnum): void {
|
2020-11-05 14:39:01 +01:00
|
|
|
this.translate.use(language.toString());
|
2020-05-05 18:17:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public getAvailableLanguages(): string[] {
|
|
|
|
return this.translate.getLangs();
|
|
|
|
}
|
|
|
|
|
|
|
|
public configureAndInitTranslations(): void {
|
|
|
|
// always save in storage the currentLang used
|
|
|
|
this.translate.onLangChange.subscribe((event: LangChangeEvent) => {
|
2022-02-03 12:26:04 +01:00
|
|
|
this.storageService.language = event.lang as LanguageEnum;
|
2020-05-05 18:17:12 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
// set all languages available
|
2022-02-03 12:26:04 +01:00
|
|
|
this.translate.addLangs(Object.keys(LanguageEnum));
|
2020-05-05 18:17:12 +02:00
|
|
|
|
|
|
|
// set language
|
|
|
|
this.setLanguageOnInit();
|
|
|
|
}
|
|
|
|
|
2021-11-08 10:26:16 +01:00
|
|
|
public getPrimeNgStrings() {
|
|
|
|
return this.translate.get('calendar_widget');
|
|
|
|
}
|
|
|
|
|
2020-05-05 18:17:12 +02:00
|
|
|
private setLanguageOnInit(): void {
|
|
|
|
// set language from storage
|
|
|
|
if (!this.translate.currentLang) {
|
|
|
|
this.setLanguageFromStorage();
|
|
|
|
}
|
|
|
|
|
|
|
|
// or set language from browser
|
|
|
|
if (!this.translate.currentLang) {
|
|
|
|
this.setLanguageFromBrowser();
|
|
|
|
}
|
|
|
|
|
|
|
|
// set default language
|
|
|
|
if (!this.translate.currentLang) {
|
2022-02-03 12:26:04 +01:00
|
|
|
this.setLanguage(LanguageEnum.FR);
|
2020-05-05 18:17:12 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private setLanguageFromStorage(): void {
|
2020-11-05 14:39:01 +01:00
|
|
|
console.log('this.storageService.language', this.storageService.language);
|
2020-05-05 18:17:12 +02:00
|
|
|
if (this.storageService.language && this.translate.getLangs().includes(this.storageService.language)) {
|
|
|
|
this.setLanguage(this.storageService.language);
|
|
|
|
}
|
|
|
|
}
|
2022-02-03 12:26:04 +01:00
|
|
|
|
2020-05-05 18:17:12 +02:00
|
|
|
private setLanguageFromBrowser(): void {
|
2022-02-03 12:26:04 +01:00
|
|
|
const currentBrowserLanguage: LanguageEnum = this.translate.getBrowserLang().toUpperCase() as LanguageEnum;
|
2020-11-05 14:39:01 +01:00
|
|
|
console.log('currentBrowserLanguage', currentBrowserLanguage);
|
2020-05-05 18:17:12 +02:00
|
|
|
if (this.translate.getLangs().includes(currentBrowserLanguage)) {
|
|
|
|
this.setLanguage(currentBrowserLanguage);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|