Búsqueda de sitios web

angular - ngx-translate con múltiples traducciones a la vez y texto dinámico en el archivo ts


Me gustaría implementar elementos dinámicos en múltiples traducciones con ngx-translate, con el fin de fusionar esta solución (múltiples traducciones):

this.translate.get(['HOME', 'MY_ACCOUNT', 'CHANGE_PASSWORD']).subscribe(res => {
      showToast(res.HOME,res.MY_ACCOUNT,res.CHANGE_PASSWORD);
});

con ese (texto dinámico) :

this.translate.get('HOME', {value: 'test_HOME'}).subscribe(res => {
      showToast(res);
});

Respuesta #1

No estoy seguro si ya encontraste tu propia solución, pero yo hice algo como:

public translateTableHeadings(stringArr: string[] = []): Observable<string[]> {
        const sub = new Subject<string[]>();

        const obs$ = Observable.from(stringArr);

        obs$
            .map(aString=>
                this.translate.get(aString)
            )
            .toArray()
            .takeUntil(sub)
            .subscribe(translatedStrings=> {
                sub.next(translatedStrings);
                sub.complete();
            });

        return sub.asObservable();
}

Aunque soy consciente de los cambios realizados en la función get en el TranslationService para manejar múltiples cadenas de traducción como entrada, tenía un caso de uso específico en el que necesitaba ejecutar código para cada una después de que fuera traducida (es decir, añadí un .map a this.translate.get(... y ejecuté algo de código allí).

Espero que esto ayude.

Respuesta #2

Según la anotación de tipo del método get en TranslateService, puedes especificar interpolateParams como el segundo parámetro.

TranslateService.get(key: string | string[], interpolateParams?: Object): Observable<any>