angular 5 为 i18n 动态更改语言环境
angular 5 change locale dynamically for i18n
我正在尝试动态更改区域设置以更改 i18n 语言。
我有两个文件,一个是英文值,另一个是法文值。
我现在试过的是这样的:
ngOnInit() {
const localeName = localStorage.getItem('locale') || 'fr';
import(`@angular/common/locales/${localeName}.js`).then(locale => {
registerLocaleData(locale.default);
});
}
但它给了我以下错误:
error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
关于如何动态地从英语切换到法语的任何想法? :/
嗯,不确定这是一个好的解决方案,但这是我所做的。它对我有用,所以也许它可以帮助其他人。
在 main.ts 中:
if (localStorage.getItem('locale') === null) {
localStorage.setItem('locale', 'en');
}
const locale = localStorage.getItem('locale');
declare const require;
const translations = require(`raw-loader!./locale/messages.${locale}.xlf`);
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [
{provide: TRANSLATIONS, useValue: translations},
{provide: TRANSLATIONS_FORMAT, useValue: 'xlf'}
]
});
在 html 代码中:
<a mat-menu-item href="" (click)="changeLang('fr')">
<mat-icon>settings</mat-icon>
<span>FR</span>
</a>
<a mat-menu-item href="" (click)="changeLang('en')">
<mat-icon>settings</mat-icon>
<span>EN</span>
</a>
在 component.ts 中:
changeLang(lang: string) {
if (lang === 'fr') {
localStorage.setItem('locale', 'fr');
}
if (lang === 'en') {
localStorage.setItem('locale', 'en');
}
}
别骂我,我只是angular的新手^^
我正在尝试动态更改区域设置以更改 i18n 语言。 我有两个文件,一个是英文值,另一个是法文值。
我现在试过的是这样的:
ngOnInit() {
const localeName = localStorage.getItem('locale') || 'fr';
import(`@angular/common/locales/${localeName}.js`).then(locale => {
registerLocaleData(locale.default);
});
}
但它给了我以下错误:
error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.
关于如何动态地从英语切换到法语的任何想法? :/
嗯,不确定这是一个好的解决方案,但这是我所做的。它对我有用,所以也许它可以帮助其他人。
在 main.ts 中:
if (localStorage.getItem('locale') === null) {
localStorage.setItem('locale', 'en');
}
const locale = localStorage.getItem('locale');
declare const require;
const translations = require(`raw-loader!./locale/messages.${locale}.xlf`);
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [
{provide: TRANSLATIONS, useValue: translations},
{provide: TRANSLATIONS_FORMAT, useValue: 'xlf'}
]
});
在 html 代码中:
<a mat-menu-item href="" (click)="changeLang('fr')">
<mat-icon>settings</mat-icon>
<span>FR</span>
</a>
<a mat-menu-item href="" (click)="changeLang('en')">
<mat-icon>settings</mat-icon>
<span>EN</span>
</a>
在 component.ts 中:
changeLang(lang: string) {
if (lang === 'fr') {
localStorage.setItem('locale', 'fr');
}
if (lang === 'en') {
localStorage.setItem('locale', 'en');
}
}
别骂我,我只是angular的新手^^