improve: performance
This commit is contained in:
1 parent
9223fc3a12
commit
d8d1528fa9
7 files changed
+115
-95
No files matched your search
@@ -1,54 +1,27 @@
|
||||
import { Injectable, computed, signal } from '@angular/core';
|
||||
import { Injectable, computed, inject } from '@angular/core';
|
||||
|
||||
import { deLanguage } from '../../languages/de';
|
||||
import { enLanguage } from '../../languages/en';
|
||||
import type { LanguageCode, LanguagePack, LanguageShellPack } from '../../languages/language.types';
|
||||
import type { LanguageCode, LanguagePack } from '../../languages/language.types';
|
||||
import { LanguagePreferenceService } from './language-preference.service';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class LanguageService {
|
||||
private static readonly storageKey = 'portfolio-language';
|
||||
private readonly currentLanguageCode = signal<LanguageCode>('en');
|
||||
private readonly languageConfirmed = signal(true);
|
||||
private readonly languagePreferenceService = inject(LanguagePreferenceService);
|
||||
|
||||
readonly languageCode = this.currentLanguageCode.asReadonly();
|
||||
readonly isLanguageConfirmed = this.languageConfirmed.asReadonly();
|
||||
readonly content = computed<LanguagePack>(() => this.getPack(this.currentLanguageCode()));
|
||||
readonly shellContent = computed<LanguageShellPack>(() => this.toShellPack(this.content()));
|
||||
readonly languageCode = this.languagePreferenceService.languageCode;
|
||||
readonly isLanguageConfirmed = this.languagePreferenceService.isLanguageConfirmed;
|
||||
readonly content = computed<LanguagePack>(() => this.getPack(this.languageCode()));
|
||||
|
||||
initializeFromStorage(): LanguageCode {
|
||||
if (typeof window === 'undefined') {
|
||||
return this.currentLanguageCode();
|
||||
}
|
||||
|
||||
const storedLanguage = window.localStorage.getItem(LanguageService.storageKey);
|
||||
if (storedLanguage === 'de' || storedLanguage === 'en') {
|
||||
this.currentLanguageCode.set(storedLanguage);
|
||||
}
|
||||
|
||||
return this.currentLanguageCode();
|
||||
return this.languagePreferenceService.initializeFromStorage();
|
||||
}
|
||||
|
||||
confirmLanguage(code: LanguageCode): void {
|
||||
this.currentLanguageCode.set(code);
|
||||
this.languageConfirmed.set(true);
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window.localStorage.setItem(LanguageService.storageKey, code);
|
||||
}
|
||||
}
|
||||
|
||||
getShellPack(code: LanguageCode): LanguageShellPack {
|
||||
return this.toShellPack(this.getPack(code));
|
||||
this.languagePreferenceService.confirmLanguage(code);
|
||||
}
|
||||
|
||||
getPack(code: LanguageCode): LanguagePack {
|
||||
return code === 'de' ? deLanguage : enLanguage;
|
||||
}
|
||||
|
||||
private toShellPack(pack: LanguagePack): LanguageShellPack {
|
||||
return {
|
||||
app: pack.app,
|
||||
footer: pack.footer,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user