import { observable, WritableObservable } from 'micro-observables'; import { Locale, LocaleResolver } from '@lib/locale-resolver/LocaleResolver'; /** * Récupère la langue par défaut, et permet de changer la langue courante * en enregistrant le choix dans le locale storage */ export default class LocaleService { static readonly LOCALE_FR: Locale = { code: 'fr', name: 'Français' } as const; static readonly LOCALE_EN: Locale = { code: 'en', name: 'English' } as const; private readonly currentLocale: WritableObservable; constructor(private readonly localeResolver: LocaleResolver) { this.currentLocale = observable(localeResolver.resolve()); LocaleService.setHtmlLang(this.currentLocale.get()); } getCurrentLocale() { return this.currentLocale.readOnly(); } setCurrentLocale(newLocale: Locale) { this.currentLocale.set(newLocale); if (this.localeResolver.hasLocaleStorage()) { this.localeResolver.setPreferredLocale(newLocale); } LocaleService.setHtmlLang(newLocale); } getAvailableLocales() { return this.localeResolver.getAvailableLocales(); } private static setHtmlLang(local: Locale) { if (typeof document !== 'undefined') { document.documentElement.setAttribute('lang', local.code); } } }