为 angular 应用程序刷新浏览器时,i18n 文件夹问题
On refresh of browser for angular application, i18n folder problem
我 运行 通过 npm 运行 watch 启动应用程序,它在单独的端口启动节点服务器,angular 在不同的端口启动应用程序。资产文件夹也在那里,其中包含用于语言实现的 i18n 文件夹,并且位于 src 文件夹内。我在 i18n 文件夹中有 en.json 和 fr.json 文件,我通过 ngx-translate 模块使用它们。当我刷新浏览器时,语言没有正确呈现。我正在使用 setdefaultlang 作为 en,但是在刷新时 en.json 的键出现而不是 keys.But 的值,当我导航时它呈现良好。可能是什么问题或我应该怎么做?
您的问题是 json 文件尚未到达您的应用程序。
勾选git issue here。有同样的问题。然后 json 出现在您的应用程序中,因此转换可用。
可以找到来自重定向的修复程序here
基本上是这样的:
providers: [
{
provide: APP_INITIALIZER,
useFactory: appInitializerFactory,
deps: [TranslateService, Injector],
multi: true
}
]
并在同一个文件中定义工厂函数appInitializerFactory upper:
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);
});
});
});
}
我 运行 通过 npm 运行 watch 启动应用程序,它在单独的端口启动节点服务器,angular 在不同的端口启动应用程序。资产文件夹也在那里,其中包含用于语言实现的 i18n 文件夹,并且位于 src 文件夹内。我在 i18n 文件夹中有 en.json 和 fr.json 文件,我通过 ngx-translate 模块使用它们。当我刷新浏览器时,语言没有正确呈现。我正在使用 setdefaultlang 作为 en,但是在刷新时 en.json 的键出现而不是 keys.But 的值,当我导航时它呈现良好。可能是什么问题或我应该怎么做?
您的问题是 json 文件尚未到达您的应用程序。
勾选git issue here。有同样的问题。然后 json 出现在您的应用程序中,因此转换可用。
可以找到来自重定向的修复程序here
基本上是这样的:
providers: [
{
provide: APP_INITIALIZER,
useFactory: appInitializerFactory,
deps: [TranslateService, Injector],
multi: true
}
]
并在同一个文件中定义工厂函数appInitializerFactory upper:
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);
});
});
});
}