Таким образом, кажется, что вставить два разных значения в наблюдаемое в функции getTranslation
мешает с помощью ngx-translate - хотя я нашел обходной путь.
Я не уверен, что это лучший способ чтобы сделать это, но это работает и решает мою проблему, так что я просто буду впереди go и буду его использовать.
CustomTranslateLoader:
getTranslation(lang: string): Observable<any> {
const translations = new BehaviorSubject(undefined);
translations.next(JSON.parse(this.localStorageService.getItem('translations')));
return translations;
}
loadTranslation(lang) {
return this.blockpitApiService.get('/translations/' + lang);
}
app.component.ts
constructor(
private translate: TranslateService,
private translateService: CustomTranslateLoader,
private localStorageService: LocalStorageService
) {
language = translate.getBrowserLang();
translate.setDefaultLang(language);
// load translations from server and update translations
this.translateService.loadTranslation(language).subscribe(response => {
this.localStorageService.setItem('translations', JSON.stringify(response.data));
translate.setTranslation(language, response.data);
translate.use(language);
});
}
Поскольку ngx-translate просто игнорирует, когда мы выполняем sh новые переводы в наблюдаемую, мы можем просто вызвать translate.setTranslation(language, response.data)
и translate.use(language)
, чтобы обновить значения, используемые при переводе.
Вызывая это, как только наш вызов API завершен, мы первоначально видим перевод, который сначала установлен в getTranslation
, который автоматически вызывает ngx-перевод, и переводы API, как только они становятся доступны, когда мы .subscribe
для функции в нашем app.component.ts
.