Ngx-translate с Angular Universal

Я только что обновился с ng2-translate (v. 5.x.x) до ngx-translate (v. 6.x.x) в своем универсальном приложении Angular 2.

Перед обновлением я использовал этот загрузчик (можно найти здесь):

class TranslateUniversalLoader implements TranslateLoader {
  public getTranslation(lang: string): Observable<any> {
    return Observable.create(observer => {
      observer.next(JSON.parse(fs.readFileSync(`src/i18n/${lang}.json`, 'utf8')));
      observer.complete();
    });
  }
}

Это я использовал так:

@NgModule({
  bootstrap: [AppComponent],
  declarations: [ AppComponent ],
  imports: [
    FormsModule,
    CoreModule,
    ViewsModule,
    TranslateModule.forRoot({
      provide: TranslateLoader,
      useClass: TranslateUniversalLoader,
    }),
    UniversalModule
  ]
})

Однако после обновления до ngx-translate я получаю эту ошибку в консоли терминала (таким образом, ошибка на стороне сервера):

Module build failed: Error: /src/app/app.node.module.ts (65,7): 
Argument of type '{ provide: typeof TranslateLoader; useClass: typeof TranslateUniversalLoader; }' is not assignable to parameter of type 'TranslateModuleConfig'.

Итак, кто-нибудь знает, как настроить собственный загрузчик для поддержки на стороне сервера с помощью Angular Universal с ngx-translate?


person don    schedule 06.03.2017    source источник


Ответы (1)


Решение оказалось намного проще, чем ожидалось, и подробно описано в руководстве по миграции.

В 6.x.x изменилось то, что нарушало код, - это ожидаемое значение, переданное в forRoot().

Теперь нам нужно передать загрузчик как объект ключа loader, вот так:

TranslateModule.forRoot({
  loader: {
    provide: TranslateLoader,
    useClass: TranslateUniversalLoader,
  }
}),
person don    schedule 08.03.2017