// Angular import { Injectable, EventEmitter } from '@angular/core'; import { registerLocaleData } from '@angular/common'; import localeNb from '@angular/common/locales/nb'; import localeLt from '@angular/common/locales/lt'; import localePl from '@angular/common/locales/pl'; import localeEnGb from '@angular/common/locales/en-GB'; import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; import * as moment from 'moment'; export const Languages = ['en', 'no', 'lt', 'pl']; @Injectable() export class MwLocaleService { onLocaleChanged = new EventEmitter(); private currentLocale = 'en-GB'; constructor(private translateService: TranslateService) { this.onLangChanged(translateService.currentLang); this.translateService.onLangChange.subscribe((event: LangChangeEvent) => this.onLangChanged(event.lang) ); } registerLocales(): void { registerLocaleData(localeNb, 'nb'); registerLocaleData(localeLt, 'lt'); registerLocaleData(localePl, 'pl'); registerLocaleData(localeEnGb, 'en-GB'); } langToLocale(langCode: string): string { let locale = 'en-GB'; switch (langCode) { case 'pl': locale = 'pl'; break; case 'lt': locale = 'lt'; break; case 'no': locale = 'nb'; break; case 'en': locale = 'en-GB'; } return locale; } private onLangChanged(lang: string): void { this.currentLocale = this.langToLocale(lang); this.handleMomentLocale(lang); this.onLocaleChanged.emit(this.currentLocale); } private handleMomentLocale(lang: any): void { let momentLocale = lang; if (momentLocale === 'no') { momentLocale = 'nb'; } if (momentLocale === 'en') { momentLocale = 'en-gb'; } moment.locale(momentLocale); } public toString: () => string = () => { return this.currentLocale; }; public toLowerCase: () => string = () => { return this.currentLocale.toLowerCase(); }; }