Angular 9引入了需要加载的全局'$localize()'函数

Angular 9 introduced a global '$localize()' function that needs to be loaded

我在新 angular 项目设置中遇到以下错误。

Installed Packages and its versions

ERROR Error: Uncaught (in promise): Error: It looks like your application or one of its dependencies is using i18n. Angular 9 introduced a global $localize() function that needs to be loaded. Please add import '@angular/localize'; to your polyfills.ts file. Error: It looks like your application or one of its dependencies is using i18n. Angular 9 introduced a global $localize() function that needs to be loaded.

注:我来自以下。它建议回退到旧版本。 https://github.com/angular/angular/issues/32508

你需要先确保你有@angular/localize包:

npm install @angular/localize --save

然后,import '@angular/localize/init' 在您的 polyfills.ts 文件中,就像错误所说

Angular 9引入了一个全局的$localize()函数,使用i18n需要加载

运行 ng add @angular/localize 来自 Angular CLI。

然后确保你有:
- @angular/localize 作为您应用的 package.json
的依赖项 - import '@angular/localize/init' 在你的 polyfills.ts

由于 i18n 属性现在在生成的代码中转换为 $localize 调用,我们需要加载 $localize 函数。

CLI 提供了一个示意图来为您执行此操作。只需 运行: 添加 @angular/localize

它会将包添加到您的依赖项中,并将必要的导入添加到您的 polyfill 中(导入'@angular/localize/init')

您还可以参考以下link了解更多说明。 https://blog.ninja-squad.com/2019/12/10/angular-localize/

如果您使用 Angular CLI,最好的方法是 运行

ng add @angular/localize

它会自动处理

否则

import '@angular/localize/init'; 到你的 polyfills.ts

测试 Angular 9

如果您在同一个工作区中有许多 angular 个项目,运行 ng add @angular/localize 将添加导入语句 import '@angular/localize/init' polyfills.ts 仅在默认项目中,我认为这将在以后的更新中修复。

所以你需要在其他项目中手动添加import '@angular/localize/init'到polyfills.ts。

如果您是 运行 ng test 而以上答案不起作用,请安装软件包并添加

import "@angular/localize/init"

polyfills-test.ts

最好的方法是使用 Angular CLI:

您只需 运行 在终端中输入以下命令:

ng add @angular/localize

它会自动安装包,还会在 polyfills.ts 文件中添加导入语句。

导入语句为:

import '@angular/localize/init';

如果您不想通过 CLI 方法,那么您可以在 polyfills.ts 文件中手动输入导入语句。 此外,您还需要再做一步,即在 dependencies 标签下的 package.json 中添加以下行。

"dependencies":{
    ...
    "@angular/localize":"^9.1.0",
    ...    
}

在我将具有多个子应用程序的大型 Nx/Angular CLI 应用程序升级到 Angular 10 后,此错误开始出现。错误中建议的解决方案(请 运行 ng add @angular/localize 来自 Angular CLI)如果应用程序包含多个应用程序则不起作用。每个 auto-generated 应用都有自己的 polyfill.ts。我在每个 polyfill.ts 文件中手动添加了导入 (import '@angular/localize/init';)。要在 运行 单元测试时修复相同的错误,我还必须在库的 test.ts 文件中添加导入。

你必须添加这个包

ng add @angular/localize

然后将 import '@angular/localize/init'; 添加到您的 ployfills.ts

但是 如果您的 测试 在库中失败,您必须将 import '@angular/localize/init'; 添加到您的 test.ts

运行

npm install @angular/localize --save

然后,在您的 polyfills.ts

import '@angular/localize/init' 

这对我有用

因为这个问题我换了操作系统。昨天我找到了这个问题的原因。由于我在 Visual Studio 代码中安装了一个插件,我遇到了这个问题。如果您使用的是 Angular9,请不要安装前两个插件。你可以安装第三个。

对我来说,这个错误是在 运行 npm test 时出现的,所以上面的解决方案没有帮助。为了解决它,我必须在 jest.ts 文件中导入本地化。 只需添加:

import "@angular/localize/init";

我在将 Angular 版本从 12 更新到 13 时遇到此错误。我按照说明操作:

  1. 运行 添加@angular/localize
  2. 在你的 polyfills.ts
  3. 中导入 '@angular/localize/init'

但它对我不起作用。在我的模块中已经有 @angular/localize 并且在 polyfills.ts 文件中有导入,毕竟我的 Angular 12 应用程序工作正常。

为了解决这个问题,我必须更新“@ng-bootstrap/ng-bootstrap”版本。考虑到过时的@ng-bootstrap/ng-bootstrap 版本和错误描述之间没有明显的 link,我希望这个建议可以减轻一些人的头痛。