【问题标题】:ngx-translate and angular universal: client side translations not foundngx-translate 和 Angular Universal:找不到客户端翻译
【发布时间】:2018-01-11 10:56:27
【问题描述】:

自从半天以来,我尝试将 ngx-translate 与 Angular 通用入门应用程序 https://github.com/angular/universal-starter 一起使用,但没有成功。有人知道为什么跟随不起作用?

当我启动 npm start 我的服务器并重新加载我的页面时,我简要地看到在被替换为 key 之前找到了翻译,这通常表明某些东西不适用于 ngx-translate。另外,当我在server-app.module.ts 中更改翻译路径时,我在服务器的控制台中看到一个错误,因此我认为我的服务器部分没问题,问题来自客户端。

app.module.ts:

 export function exportTranslateStaticLoader(http: HttpClient) {
    return new TranslateHttpLoader(http, './assets/i18n/', '.json');
 }

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

浏览器应用程序.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
      }
    })
 ]

翻译通用加载器:

 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();
     });
   }
 }

webpack.common.js:

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

app.component.ts:

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

此外,当我查询 http://localhost:8000/assets/i18n/en.json 时,我的 en.json 分别得到了一个有效的答案:

{
   "TEST": "Super super"
 }

感谢任何帮助,这让我抓狂。

【问题讨论】:

  • 按照doc 中的指导尝试更简单的设置。您也可以查看answer
  • 谢谢,但我不会尝试更简单的设置,我想在 Angular 通用的情况下使用 ngx-translate,除了通用启动器应用程序的克隆之外,我的项目中没有其他任何东西和 ngx 翻译
  • ngx-translate 更简单的设置是 ngx-translate 团队在他们的文档中推荐的。它会自动从assets &gt; i18n 中提取json 文件,因此您无需更改webpack.common.js 中的任何内容。一天结束,这是你的选择:)
  • 这里,gist.github.com/ocombe/8af9d555ab2da45cd1042ef2ccb0ef6b,ngx-translate 的创建者@ocombe 的示例展示了 TranslateUniversalLoader 的使用。按照这个我的服务器端,就像我说的,看起来不错

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


【解决方案1】:

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

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

【讨论】:

  • 这样我得到错误:没有 HttpClient 的提供者
  • @netshark1000 你很可能需要在你的 app.module 中导入 HttpClientModule。 HttpClientModule 是在 Angular 4.3 中引入的 blog.angular-university.io/angular-http
  • 谢谢 - 它有助于消除错误。但是找不到我的翻译(控制台中没有任何错误)...
  • @netshark1000 您应该创建一个新的单独问题/帖子并记录您的问题(您的代码看起来如何、模块、app.component、package.json 等)
猜你喜欢
  • 2022-06-23
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2020-02-09
相关资源
最近更新 更多