import { Injectable } from '@angular/core'; import {Language} from "../entities/language"; import {CrudService} from "./crud.service"; import {firstValueFrom} from "rxjs"; import {StorageService} from "./storage.service"; @Injectable({ providedIn: 'root' }) export class LangService { private languages: Map = new Map(); public allLanguages: string[] = []; public currentLang: Language; constructor(private crud: CrudService, private storage: StorageService) { this.loadLanguages(); } private async loadLanguages() { this.languages = new Map(); const res = await firstValueFrom(this.crud.client.get<{files: string[]}>(location?.origin + "/lang")); const languages = res.files; this.allLanguages = languages.map(lang => lang.replace(".json", "")); this.currentLang = await this.loadLanguage(this.storage.getItem("language") || "en-US"); } private async loadLanguage(name: string): Promise { const lang = await firstValueFrom(this.crud.client.get(`${location.origin}/assets/languages/${name}.json`)); this.languages.set(name, lang); return lang; } public async setLanguage(lang: string) { if (this.languages.get(lang) == undefined) await this.loadLanguage(lang); this.currentLang = this.languages.get(lang); this.storage.setItem("language", lang); } }