ngx-translate和angular universal:找不到客户端翻译

时间:2017-08-03 17:27:02

标签: node.js angular angular-universal ngx-translate

我尝试使用角度通用入门应用https://github.com/angular/universal-starter的ngx-translate半天后没有成功。让某人知道为什么跟随不起作用?

当我启动npm start我的服务器并重新加载我的页面时,我简要地看到在用key代替之前找到了翻译,server-app.module.ts传统上显示某些内容与ngx-translate不兼容。此外,当我更改 export function exportTranslateStaticLoader(http: HttpClient) { return new TranslateHttpLoader(http, './assets/i18n/', '.json'); } imports: [ TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: exportTranslateStaticLoader, deps: [Http] } } ) ] 中的翻译路径时,我在服务器的控制台中看到错误,因此我认为我的服务器部分没问题,问题来自客户端。

app.module.ts:

 imports: [TranslateModule.forChild()]

浏览器的app.module.ts:

  export function translateFactory() {
    return new TranslateUniversalLoader('./dist/assets/i18n', '.json');
  }

  imports: [
      TranslateModule.forRoot({
         loader: {
          provide: TranslateLoader,
           useFactory: translateFactory
      }
    })
 ]

服务器app.module.ts:

 import {Observable} from "rxjs/Observable";
 import {TranslateLoader} from '@ngx-translate/core';
 const fs = require('fs');

 export class TranslateUniversalLoader implements TranslateLoader {
   constructor(private prefix: string = 'i18n', private suffix: string = '.json') {}

   public getTranslation(lang: string): Observable<any> {
     return Observable.create(observer => {
 observer.next(JSON.parse(fs.readFileSync(`${this.prefix}/${lang}${this.suffix}`, 'utf8')));
       observer.complete();
     });
   }
 }

TranslateUniversalLoader:

 plugins: [
new copyWebpackPlugin([
     {
       from: './src/assets/i18n/en.json',
       to: './assets/i18n/en.json'
     }
   ])
 ]   

webpack.common.js:

 ngOnInit() {
     this.translateService.setDefaultLang('en');
     this.translateService.use('en');
 }

app.component.ts:

http://localhost:8000/assets/i18n/en.json

此外,当我查询{ "TEST": "Super super" } 时,我得到了一个有效的答案,分别是我的en.json:

{{1}}

任何帮助表示赞赏,这让我感到疯狂。

1 个答案:

答案 0 :(得分:0)

知道了,在app.module.ts中我应该注入HttpClient而不是Http(关于AoT的README仍然显示Http):

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