Angular NGO模块的提供程序无效。仅允许提供程序和类型的实例,得到:[?[object]?,…]

Angular NGO模块的提供程序无效。仅允许提供程序和类型的实例,得到:[?[object]?,…],angular,Angular,在我的应用程序中,我想为语言引入国际化。所以我有两个带翻译的文件“.json”。 我有一个错误: NgModule“TranslateModule”的提供程序无效-仅允许提供程序和类型的实例,获取:[?[object]?,…] 我看不出我做错了什么。这是app.module.ts import {BrowserModule} from '@angular/platform-browser'; import {NgModule} from '@angular/core'; import {Tran

在我的应用程序中,我想为语言引入国际化。所以我有两个带翻译的文件“.json”。 我有一个错误:

NgModule“TranslateModule”的提供程序无效-仅允许提供程序和类型的实例,获取:[?[object]?,…]

我看不出我做错了什么。这是app.module.ts

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {TranslateModule} from 'ng2-translate';

import {AppComponent} from './app.component';
import {NavbarComponent} from './components/navbar/navbar.component';
import {RouterModule} from '@angular/router';
import {appRoutes} from './app.route';
import {DoctorsComponent} from './pages/doctors/doctors.component';
import {HomeComponent} from './pages/home/home.component';
import {HospitalsComponent} from './pages/hospitals/hospitals.component';
import {HttpClientModule} from '@angular/common/http';
import {FormsModule} from '@angular/forms';
import {translateFactory} from './TranslateFactory.component';
import {TranslateLoader} from '@ngx-translate/core';


@NgModule({
  declarations: [
    AppComponent,
    NavbarComponent,
    HomeComponent,
    DoctorsComponent,
    HospitalsComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule,
    RouterModule.forRoot(
      appRoutes,
      {enableTracing: false}
    ),
    TranslateModule.forRoot({
      loader: {
        provider: TranslateLoader,
        useClass: (translateFactory)
      }
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
这是TranslateFactory.component.ts

import * as enTranslate from '../i18n/en.json';
import * as roTranslate from '../i18n/ro.json';
import { of, Observable } from 'rxjs';
import { TranslateLoader as NgxTranslateLoader } from '@ngx-translate/core';

const TRANSLATIONS = {
  en: enTranslate,
  ro: roTranslate
};

export class TranslateLoader implements NgxTranslateLoader {

  public getTranslation(lang: string): Observable<any> {
    return of(TRANSLATIONS[lang]);
  }
}

export function translateFactory() {
  return new TranslateLoader();
}
您能提出一些解决方案或告诉我我做错了什么吗?

TranslateModule.forRoot({
加载器:{
提供者:TranslateLoader,
useClass:(translateFactory)
}
})
使用
useFactory
而不是
useClass

使用
提供
而不是
提供程序

从'ng2 translate'导入{TranslateModule};

使用
@ngx translate/core
而不是
ng2 translate

我找到了另一种可行的方法

@ngx translate/core导入TranslateService和TranslateModule

在app.module.ts中使用HttpLoaderFactory和TranslateLoader:

TranslateModule.forRoot({
          loader: {
            provide: TranslateLoader,
            useFactory: HttpLoaderFactory,
            deps: [HttpClient ]
          }
        })


export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}
确保“.json”文件位于/assets/i18n中。这是获取用于翻译的json的默认文件夹。

请尝试以下操作:

TranslateModule.forRoot({
  loader: {
    provide: TranslateLoader,
    // useFactory: createTranslateLoader,
    useClass: CustomI18nLoader, //custom class
    deps: [HttpClient],
  },
}),
//自定义类如下:

class CustomLoader implements TranslateLoader {
constructor(private http: HttpClient) { }

  getTranslation(lang: string): Observable<any> {
    return this.http.get(`./assets/i18n/${lang}.json`);
  }
}
类CustomLoader实现TranslateLoader{
构造函数(私有http:HttpClient){}
getTranslation(lang:string):可观察{
返回这个.http.get(`./assets/i18n/${lang}.json`);
}
}

另一个错误,我认为ng2 translate是正确的。错误:
类型“{provider:typeof TranslateLoader;useFactory:()=>TranslateLoader;}”不可分配给类型“provider”。对象文字只能指定已知属性,并且类型“provider”中不存在“provider”。
使用
提供
而不是
提供
。很久以前,
ng2-translate
的名字改为
@ngx-translate
。在
使用…
部分,要么使用
useClass:TranslateLoader
要么使用
useFactory:translateFactory
。我两种方法都试过了。但是有同样的问题。我将项目从角度9更新到了角度10,也更新到了角度11,但仍停留在这一点上。错误:NgModule“AppModule”的提供程序无效-仅允许提供程序和类型的实例,获取:[……,…,…,…,,…,,,,,,,,,…]
class CustomLoader implements TranslateLoader {
constructor(private http: HttpClient) { }

  getTranslation(lang: string): Observable<any> {
    return this.http.get(`./assets/i18n/${lang}.json`);
  }
}