Перевод ngx не работает в сервисе автозагрузки при загрузке приложения angular2 / 4/6 - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть модуль приложения, как показано ниже, и у меня есть служба запуска, которая будет извлекать основные данные перед загрузкой приложения. Когда я пытаюсь предупредить переведенный текст в сервисе запуска, он не работает. Но если я дам немного времени, то это сработает. Как узнать, сколько времени нам нужно дать. Я полагаю, что файлы переводов en.json, fr.json не загружаются ко времени, когда моя служба запуска звонила, чтобы получить переводы.

imports: [
    // :CORE MODULE: //
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    **TranslateModule.forRoot({
        loader: {
            provide: TranslateLoader,
            useFactory: (createTranslateLoader),
            deps: [HttpClient]
        }
    }),**
    FormsModule,
    CommonModule, //<====added

    //:3RD PARTY MODULE://
    BootstrapModalModule,

    //:APPLICTION MODULES: //
    **AppLoadModule**, //Startupdata before APP loaded
    AppRoutingModule,
    FooterModule,
    ErrorModule,
    AccessDeniedModule,
    NotFoundModule,
    RouterModule.forRoot([]),
    ToasterModule.forChild(),
],

Модуль загрузки

export function load(appLoadService: AppLoadService) {
  return () => appLoadService.load();
}

@NgModule({
  imports: [HttpClientModule],
  providers: [
    AppLoadService,
    {
      provide: APP_INITIALIZER,
      useFactory: load,
      deps: [AppLoadService],
      multi: true
    }
  ]
})
export class AppLoadModule {}

@Injectable()
export class AppLoadService {

    constructor(
        private httpClient: HttpClient,
        private alertService: AlertService,
        private injector: Injector,
        private $localStorage: LocalStorageService,
    ) { }

    public get router(): Router { //this creates router property on your service.
        return this.injector.get(Router);
    }

    public get translate(): TranslateService { //this creates router property on your service.
        return this.injector.get(TranslateService);
    }

    load(): Promise<any> {
        console.log('1.App Loader: STARTED', new Date().toLocaleTimeString());
        return new Promise(resolve => {
            const promise = this.httpClient.get('assets/settings/config.json')
                .subscribe(
                    res_config => {


                        setTimeout(() => {
                            this.translate.get('logout').subscribe((res: string) => {
                                alert(res); // Not Translating if I give setTimeOut Zero
                            });
                        }, 2000);
...