@@ -185,8 +185,6 @@ export class TranslateService implements ITranslateService, OnDestroy {
185185 private missingTranslationHandler = inject ( MissingTranslationHandler ) ;
186186 private store : TranslateStore = inject ( TranslateStore ) ;
187187
188- private _loaderIndex ! : number ;
189-
190188 private readonly extend : boolean = false ;
191189
192190 /**
@@ -227,8 +225,6 @@ export class TranslateService implements ITranslateService, OnDestroy {
227225 }
228226
229227 constructor ( ) {
230- this . _loaderIndex = this . store . addLoader ( inject ( TranslateLoader ) ) ;
231-
232228 const config : TranslateServiceConfig = {
233229 extend : false ,
234230 fallbackLang : null ,
@@ -249,10 +245,12 @@ export class TranslateService implements ITranslateService, OnDestroy {
249245 if ( config . extend ) {
250246 this . extend = true ;
251247 }
248+
249+ this . store . addLoader ( this . currentLoader ) ;
252250 }
253251
254- ngOnDestroy ( ) {
255- this . store . removeLoader ( this . _loaderIndex ) ;
252+ ngOnDestroy ( ) : void {
253+ this . store . removeLoader ( this . currentLoader ) ;
256254 }
257255
258256 /**
@@ -350,28 +348,24 @@ export class TranslateService implements ITranslateService, OnDestroy {
350348 this . pending = true ;
351349
352350 const loaders = this . store . getLoaders ( ) ;
353- if ( loaders . size === 0 ) return of ( { } as InterpolatableTranslationObject ) ;
354-
355- const requests : Observable < TranslationObject > [ ] = [ ] ;
356- loaders . forEach ( ( loader ) => {
357- requests . push ( loader . getTranslation ( lang ) . pipe ( take ( 1 ) ) ) ;
358- } ) ;
351+ let loadAndMerge : Observable < TranslationObject > ;
352+
353+ if ( loaders . length === 0 ) {
354+ return of ( { } as InterpolatableTranslationObject ) ;
355+ } else if ( loaders . length === 1 ) {
356+ loadAndMerge = loaders [ 0 ] . getTranslation ( lang ) ;
357+ } else {
358+ const requests : Observable < TranslationObject > [ ] = loaders . map ( ( loader ) =>
359+ loader . getTranslation ( lang ) . pipe ( take ( 1 ) ) ,
360+ ) ;
361+ loadAndMerge = forkJoin ( requests ) . pipe (
362+ map ( ( results : TranslationObject [ ] ) =>
363+ results . reduce ( ( acc , curr ) => mergeDeep ( acc , curr ) , { } as TranslationObject ) ,
364+ ) ,
365+ ) ;
366+ }
359367
360- // Merge all translation objects
361- const loadingTranslations = (
362- requests . length > 1
363- ? forkJoin ( requests ) . pipe (
364- map ( ( results : TranslationObject [ ] ) =>
365- results . reduce (
366- ( acc , curr ) => mergeDeep ( acc , curr ) ,
367- { } as TranslationObject ,
368- ) ,
369- ) ,
370- )
371- : requests [ 0 ]
372- ) . pipe ( shareReplay ( 1 ) , take ( 1 ) ) ;
373-
374- this . loadingTranslations = loadingTranslations . pipe (
368+ this . loadingTranslations = loadAndMerge . pipe ( shareReplay ( 1 ) , take ( 1 ) ) . pipe (
375369 map ( ( res : TranslationObject ) => this . compiler . compileTranslations ( res , lang ) ) ,
376370 shareReplay ( 1 ) ,
377371 take ( 1 ) ,
@@ -388,7 +382,7 @@ export class TranslateService implements ITranslateService, OnDestroy {
388382 } ,
389383 } ) ;
390384
391- return loadingTranslations ;
385+ return this . loadingTranslations ;
392386 }
393387
394388 /**
0 commit comments