我从角度 12 移动到角度 13,并且出现了一个新错误。 所以基本上我曾经通过导入语言环境文件来加载用户的文化。
const localeUri = `@angular/common/locales/${localeId}.js`;
return import(localeUri).then((module) => {
logger.debug("Culture Angular : '" + localeId + "'");
registerLocaleData(module.default);
}).catch((err) => {
logger.fatal("culture not defined for angular", err);
});
此解决方案适用于 Angular12,但不再适用于 Angular13。 Webpack 找不到任何语言环境。
我尝试了 github 上找到的一些解决方案,但没有任何积极的结果
https://github.com/highlightjs/highlight.js/issues/3223#issuecomment-953337602
https://github.com/angular/angular-cli/issues/22154
有什么解决办法吗?
设法通过更改我们导入的路径并将
.js
更改为 .mjs
来使其工作
之前:
import(
/* webpackInclude: /(de|de-AT|en|en-GB)\.js$/ */
`@angular/common/locales/${locale}.js`
).then((module) => {
registerLocaleData(module.default);
});
之后:
import(
/* webpackInclude: /(de|de-AT|en|en-GB)\.mjs$/ */
`../../../../../../node_modules/@angular/common/locales/${locale}.mjs`
).then((module) => {
registerLocaleData(module.default);
});
使用 Angular 13.1.1 和 NX 13.4.2
这里已经提到了解决方案:https://github.com/angular/angular-cli/issues/22154
最近,我迁移到了 Angular 13。我也遇到了同样的问题。以下更改对我有用。
import(`@/../@angular/common/locales/${lang}.mjs`)
.then(localModule => {
registerLocaleData(localModule.default)
});
我猜是因为 tsconfig.json 中的模块
您现在必须从
@angular/common/locales/global/
导入,并且不再需要registerLocaleData
。
Angular 13 之前:
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
registerLocaleData(localeFr, 'fr-FR');
使用 Angular 13:
import '@angular/common/locales/global/fr';
// and you can use fr-FR whenever you want