У меня есть служба с именем «LocaleService», предоставленная в «root», которая содержит всю мою логику локали.
Эта служба инициирует локализацию приложения и предоставляет некоторые функции о локалях.
Я должен инициализировать этот сервис в main.ts, чтобы заставить работать угловой языковой стандарт
Вот моя инициализация:
var injector = ReflectiveInjector.resolveAndCreate([LocaleService]);
var localeService : LocaleService = injector.get(LocaleService)
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [
{ provide: TRANSLATIONS, useValue: localeService.translations },
{ provide: TRANSLATIONS_FORMAT, useValue: 'xlf' },
{ provide: LOCALE_ID, useValue: localeService.locale },
]
})
.catch(err => console.log(err));
Проблема заключается в том, что служба запускается во второй раз при использовании вмой один из моих компонентов, подобный этому:
constructor(private localeService : LocaleService, private userEndpoint: UserEndpoint) { }
ngOnInit() {
alert(this.localeService.locale);
this.user = new User();
this.userEndpoint.getCurrentUser().subscribe(u =>{
this.user = u;
})
}
Я бы хотел, чтобы мои провайдеры начальной загрузки носили один и тот же экземпляр везде, но это не так.
Есть ли способ нести один и тот же экземпляря создал в main.ts все мои приложения?
Вот мой сервис:
import { Injectable } from '@angular/core';
import { loadMessages, locale } from 'devextreme/localization';
import { registerLocaleData } from '@angular/common';
import localeFRCA from '@angular/common/locales/fr-CA';
import config from "devextreme/core/config";
import "devextreme-intl";
declare const require;
@Injectable({providedIn:'root'})
export class LocaleService {
translations : string;
locale : string;
constructor(){
//Default currency CAD
config({defaultCurrency:"CAD"});
//register angular locale frCA
registerLocaleData(localeFRCA);
let dxMessageFR = require("devextreme/localization/messages/fr.json");
loadMessages(dxMessageFR);
this.locale = localStorage.getItem('locale');
if (!this.locale) {
if (navigator.language.toUpperCase().indexOf("FR") !== -1)
this.locale = "fr-CA";
else
this.locale = "en-CA";
localStorage.setItem('locale', this.locale);
}
//set devextreme intl language for dev extreme widget;
locale(this.locale);
this.translations = require(`raw-loader!../../locale/messages.${this.locale}.xlf`);
}
}