UNPKG

@osaedasia/oresume

Version:

A user-friendly library for generating complete Single Page Applications (SPAs)

2 lines (1 loc) 1.49 kB
import{Observable as e}from"./observer/Observable.js";import{EmptyLanguageConfigurationError as t}from"../domain/exceptions/Language.js";class s{static _instance=null;supportedLanguages;countryCode;_storeKey="O-Store[LanguageService]";_defaultCountryCode;_supportedLanguages;constructor(e){if(0===e.supportedLanguages.length)throw new t("At least one supported language must be provided.");this._defaultCountryCode=e.defaultLanguage,this._supportedLanguages=new Set,this.supportedLanguages=[],this._addSupportedLanguages(e.supportedLanguages),this.countryCode=this._getCodeObservable()}get defaultLanguage(){return this._defaultCountryCode}static getInstance(e){return null===s._instance&&(s._instance=new s(e)),s._instance}_addSupportedLanguage(e){this._supportedLanguages.has(e)||(this._supportedLanguages.add(e),this.supportedLanguages.push(e))}_addSupportedLanguages(e){for(const t of e)this._addSupportedLanguage(t)}_getCodeObservable(){const t=this._detectBrowserCountryCode(),s=this._assertValidCountryCode(t),a=new e(s,this._storeKey);return a.state=this._assertValidCountryCode(a.state),a.subscribe(this._updateHtmlLang.bind(this)),this._updateHtmlLang(a.state),a}_detectBrowserCountryCode(){return navigator.language.split("-")[0].toLowerCase()}_assertValidCountryCode(e){return this._supportedLanguages.has(e)?e:this._defaultCountryCode}_updateHtmlLang(e){const t=this._assertValidCountryCode(e),s=document.querySelector("html");s&&(s.lang=t)}}export{s as LanguageService};