@@ -54,6 +54,8 @@ const makeObservable = <T>(value: T | Observable<T>): Observable<T> => {
5454 return isObservable ( value ) ? value : of ( value ) ;
5555} ;
5656
57+
58+
5759@Injectable ( )
5860export class TranslateService implements ITranslateService {
5961 protected loadingTranslations ! : Observable < InterpolatableTranslationObject > ;
@@ -457,23 +459,26 @@ export class TranslateService implements ITranslateService {
457459 key : string | string [ ] ,
458460 interpolateParams ?: InterpolationParameters ,
459461 ) : Translation {
462+
460463 if ( ! isDefinedAndNotNull ( key ) || key . length === 0 ) {
461464 return "" ;
462465 }
463466
464467 const result = this . getParsedResult ( key , interpolateParams ) ;
465468
466- if ( isObservable ( result ) ) {
467- if ( Array . isArray ( key ) ) {
468- return key . reduce ( ( acc : Record < string , string > , currKey : string ) => {
469- acc [ currKey ] = currKey ;
470- return acc ;
471- } , { } ) ;
472- }
473- return key ;
474- }
469+ return isObservable ( result ) ? this . keyToObject ( key ) : result ;
470+ }
475471
476- return result ;
472+
473+ private keyToObject ( key : string | string [ ] )
474+ {
475+ if ( Array . isArray ( key ) ) {
476+ return key . reduce ( ( acc : Record < string , string > , currKey : string ) => {
477+ acc [ currKey ] = currKey ;
478+ return acc ;
479+ } , { } ) ;
480+ }
481+ return key ;
477482 }
478483
479484 /**
@@ -597,3 +602,102 @@ export class TranslateService implements ITranslateService {
597602 }
598603
599604}
605+
606+ @Injectable ( )
607+ export class ChildTranslateService extends TranslateService {
608+
609+ protected parent :TranslateService = inject ( TranslateService , { skipSelf :true } ) ;
610+
611+ public override use ( lang : Language ) : Observable < InterpolatableTranslationObject >
612+ {
613+ return this . parent . use ( lang ) ;
614+ }
615+
616+ public override setFallbackLang ( lang : Language ) : Observable < InterpolatableTranslationObject >
617+ {
618+ return this . parent . setFallbackLang ( lang ) ;
619+ }
620+
621+ public override getFallbackLang ( ) : Language | null
622+ {
623+ return this . parent . getFallbackLang ( ) ;
624+ }
625+
626+
627+ public override get onLangChange ( ) : Observable < TranslationChangeEvent > {
628+ return this . parent . onLangChange ;
629+ }
630+
631+ public override get onFallbackLangChange ( ) : Observable < TranslationChangeEvent > {
632+ return this . parent . onFallbackLangChange ;
633+ }
634+
635+ public override addLangs ( languages : Language [ ] ) : void
636+ {
637+ return this . parent . addLangs ( languages ) ;
638+ }
639+
640+ public override getLangs ( ) : readonly Language [ ]
641+ {
642+ return this . parent . getLangs ( ) ;
643+ }
644+
645+
646+ /*
647+ public override get onTranslationChange(): Observable<TranslationChangeEvent> {
648+
649+ // local and parent
650+ }
651+
652+ */
653+
654+ /*
655+
656+ public abstract reloadLang(lang: Language): Observable<InterpolatableTranslationObject>;
657+ public abstract resetLang(lang: Language): void;
658+
659+ */
660+ public override instant (
661+ key : string | string [ ] ,
662+ interpolateParams ?: InterpolationParameters ,
663+ ) : Translation
664+ {
665+ return super . instant ( key , interpolateParams ) || this . parent . instant ( key , interpolateParams ) ;
666+ }
667+
668+ /*
669+ public abstract stream(
670+ key: string | string[],
671+ interpolateParams?: InterpolationParameters,
672+ ): Observable<Translation>;
673+
674+ public abstract getStreamOnTranslationChange(
675+ key: string | string[],
676+ interpolateParams?: InterpolationParameters,
677+ ): Observable<Translation>;
678+
679+ public abstract get(
680+ key: string | string[],
681+ interpolateParams?: InterpolationParameters,
682+ ): Observable<Translation>;
683+
684+ public abstract getParsedResult(
685+ key: string | string[],
686+ interpolateParams?: InterpolationParameters,
687+ ): StrictTranslation | Observable<StrictTranslation>;
688+
689+
690+
691+ public abstract set(
692+ key: string,
693+ translation: string | TranslationObject,
694+ lang?: Language,
695+ ): void;
696+
697+ public abstract setTranslation(
698+ lang: Language,
699+ translations: TranslationObject,
700+ shouldMerge?: boolean,
701+ ): void;
702+ */
703+ }
0 commit comments