【发布时间】:2020-07-15 16:55:47
【问题描述】:
我需要为我的 Angular 应用程序异步加载翻译。我正在尝试使用 @angular/localize 模块中的 loadTranslations 函数。问题是它只有在我把它放在底部的polyfills.ts 文件中才有效。我需要使用 ajax 请求加载这些数据,所以我想延迟引导应用程序直到那个。这是来自main.ts的代码
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import '@angular/localize/init';
import { loadTranslations } from '@angular/localize';
// delay from ajax call
setTimeout(() => {
loadTranslations({
'test': '123'
});
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
}, 1000);
应用程序启动时没有错误,但未应用翻译。如果我删除异步延迟,它也不起作用:
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import '@angular/localize/init';
import { loadTranslations } from '@angular/localize';
loadTranslations({
'test': '123'
});
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
但如果我将 i18n 代码移动到 polyfills.ts(仅限同步版本),它会起作用
import '@angular/localize/init';
import { loadTranslations } from '@angular/localize';
loadTranslations({
'test': '123'
});
这是一个示例模板
<p i18n="@@test">Not working</p>
为什么它只适用于polyfills.ts 而不适用于main.ts,有没有办法异步初始化它?
【问题讨论】:
标签: angular typescript localization internationalization angular-i18n