【问题标题】:On refresh of browser for angular application, i18n folder problem在为 Angular 应用程序刷新浏览器时,i18n 文件夹问题
【发布时间】:2020-03-14 22:19:51
【问题描述】:

我正在通过 npm run watch 运行应用程序,该应用程序在单独的端口中启动节点服务器,并在不同的端口中启动角度应用程序。 assets 文件夹也在那里,其中包含用于语言实现的 i18n 文件夹,并且位于 src 文件夹中。我在 i18n 文件夹中有 en.json 和 fr.json 文件,我通过 ngx-translate 模块使用它们。当我刷新浏览器时,语言没有正确呈现。我将 setdefaultlang 用作 en 但刷新时 en.json 的键而不是键的值。但是当我导航时它呈现正常。可能是什么问题或我应该怎么做?

【问题讨论】:

  • the language is not being rendered properly 是什么意思?
  • 我将 en.json 作为 i18n 文件夹中的文件。当我刷新时,显示的是 json 的键而不是 json 文件中的值。但是当我导航时,它就解决了。只有在刷新时才会一次又一次地发生。

标签: angular internationalization page-refresh ngx-translate angular-i18n


【解决方案1】:

您的问题是 json 文件尚未到达您的应用程序。

检查git issue here。有同样的问题。然后 json 进入您的应用程序,因此可以进行转换。

重定向的修复可以在here找到

基本上是这样的:

providers: [
  {
    provide: APP_INITIALIZER,
    useFactory: appInitializerFactory,
    deps: [TranslateService, Injector],
    multi: true
  }
]

并在同一个文件中定义工厂函数appInitializerFactory上层:

import { Injector, APP_INITIALIZER } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { LOCATION_INITIALIZED } from '@angular/common';

export function appInitializerFactory(translate: TranslateService, injector: Injector) {
  return () => new Promise<any>((resolve: any) => {
    const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
    locationInitialized.then(() => {
      const langToSet = 'en-GB'
      translate.setDefaultLang('en-US');
      translate.use(langToSet).subscribe(() => {
        console.info(`Successfully initialized '${langToSet}' language.'`);
      }, err => {
        console.error(`Problem with '${langToSet}' language initialization.'`);
      }, () => {
        resolve(null);
      });
    });
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    相关资源
    最近更新 更多