67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
|
import { Injectable } from '@angular/core';
|
||
|
import { TranslateService, LangChangeEvent } from '@ngx-translate/core';
|
||
|
|
||
|
import { Language } from '../enums/language.enum';
|
||
|
import { StorageService } from './storage.service';
|
||
|
|
||
|
@Injectable({
|
||
|
providedIn: 'root',
|
||
|
})
|
||
|
export class LanguageService {
|
||
|
constructor(private translate: TranslateService, private storageService: StorageService) {}
|
||
|
|
||
|
public getLangage(): Language {
|
||
|
return this.translate.currentLang as Language;
|
||
|
}
|
||
|
|
||
|
public setLanguage(language: Language): void {
|
||
|
this.translate.use(language.toString().toUpperCase());
|
||
|
}
|
||
|
|
||
|
public getAvailableLanguages(): string[] {
|
||
|
return this.translate.getLangs();
|
||
|
}
|
||
|
|
||
|
public configureAndInitTranslations(): void {
|
||
|
// always save in storage the currentLang used
|
||
|
this.translate.onLangChange.subscribe((event: LangChangeEvent) => {
|
||
|
this.storageService.language = event.lang as Language;
|
||
|
});
|
||
|
|
||
|
// set all languages available
|
||
|
this.translate.addLangs(Object.keys(Language));
|
||
|
|
||
|
// set language
|
||
|
this.setLanguageOnInit();
|
||
|
}
|
||
|
|
||
|
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) {
|
||
|
this.setLanguage(Language.EN);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private setLanguageFromStorage(): void {
|
||
|
if (this.storageService.language && this.translate.getLangs().includes(this.storageService.language)) {
|
||
|
this.setLanguage(this.storageService.language);
|
||
|
}
|
||
|
}
|
||
|
private setLanguageFromBrowser(): void {
|
||
|
const currentBrowserLanguage: Language = this.translate.getBrowserLang().toUpperCase() as Language;
|
||
|
if (this.translate.getLangs().includes(currentBrowserLanguage)) {
|
||
|
this.setLanguage(currentBrowserLanguage);
|
||
|
}
|
||
|
}
|
||
|
}
|