Angular 5和ngx-translate在共享模块中刷新后会丢失翻译。

6

我有一个使用ngx-translate的angular应用程序。以下是版本:

"@angular/core": "5.2.6",
"@ngx-translate/core": "9.1.1",
"@ngx-translate/http-loader": "2.0.1"

在AppModule类中,我添加了以下导入语句:
imports: [
    .....
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: (createTranslateLoader),
        deps: [HttpClient]
      }
    })
    ......
]
.....
export function createTranslateLoader(http: HttpClient) {
  return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}

我创建了一个 SharedModule,该模块导出TranslateModule:

exports: [
    // Modules
    TranslateModule,
    ....
]

除了在不同模块中的页面(导入SharedModule的AppModule)刷新时,一切都很顺利。在这种情况下,我需要导航回主页(编码在AppModule中),一旦到达主页,ngx-translate就会重新开始工作,我可以使用ngx-translate重新导航到其他页面。
有人能帮帮我吗?先感谢!
更新: 似乎问题与刷新页面时translateService.currentLang未定义有关。如果我通过translateService.use(language)在ngOnInit中以编程方式设置语言,则它可以正常工作。 如何避免在每个组件中手动设置当前语言变量的检查,并设置默认的currentLang?
1个回答

7

我在共享模块中也有翻译模块,并且每个模块都导入了这个翻译模块。我在共享模块中导出了TranslateModule。通过这样做,一切都按预期工作,每个模块的翻译都显示出来了。也许你可以尝试同样的方法,看看是否适用于你。

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

通过app.module在您的引导组件中使用translateService设置useDefaultLanguage。这样,它就是在顶层设置默认语言的唯一位置。


我尝试了但没有成功。如果我刷新页面,我会失去翻译,仍然看到关键字而不是值。 - user4330585
你的其他模块是否导入了共享模块?并且你将translatemodule加载器和函数放到了共享模块的路径中吗? - Taranjit Kang
我在主要问题中分享了一个更新。你有什么想法吗? - user4330585
在你的app.module中引导组件时,通过translateService.use(language)设置ngOnInit应该是唯一的地方。 - Taranjit Kang
你说得对!谢谢Taranjit Kang,我将把正确答案分配给你 :) - user4330585

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接