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

88
我在我的新angular项目设置中遇到了以下错误。 已安装的软件包及其版本 错误:未捕获(在承诺中):错误:看起来您的应用程序或其依赖项之一正在使用i18n。 Angular 9引入了一个全局$localize()函数,需要加载它。请将import '@angular/localize';添加到您的polyfills.ts文件中。
注意:我来自以下链接。它建议退回到旧版本。 https://github.com/angular/angular/issues/32508

你的问题是什么?错误信息提供了明确的操作说明。 - JJJ
18个回答

132

首先,你需要确保你已经安装了@angular/localize包:

npm install @angular/localize --save

然后,按照错误提示,在你的polyfills.ts文件中导入import '@angular/localize/init'


在为ngcc添加postinstall步骤后,使用Jest运行单元测试时出现了此错误,建议参考此答案-https://dev59.com/6FIG5IYBdhLWcg3w01Hj#63727427。@angular/localize是我的package.json中的依赖项,而@angular/localize/init是我polyfills.ts中的导入,但大多数测试套件都会出现相同的错误。我正在运行Angular 9。有什么解决方法吗? - plantbeard
2
抱歉,我刚找到了答案。如果其他人也遇到了这个问题,请参考以下链接:https://github.com/just-jeb/angular-builders/issues/678#issuecomment-755903805 - plantbeard
对我来说,我需要使用 --skip-confirmation 标志:npm install @angular/localize --skip-confirmation --save。否则,我会得到 一个错误 "No terminal detected. '--skip-confirmation' can be used to bypass installation confirmation. Ensure package name is correct prior to '--skip-confirmation' option usage." - Nate Anderson

49
如果您正在使用 Angular CLI,最好的方法是运行: ng add @angular/localize 它会自动处理。
否则,将 import '@angular/localize/init'; 添加到您的 polyfills.ts 文件中。
已在 Angular 9 上进行了测试。

它是否会自动添加到package.json中,使用'ng add...'命令? - Gereon99

14
如果你在同一个工作区中有许多angular项目,运行 ng add @angular/localize 将只会在默认项目的polyfills.ts中添加导入语句import '@angular/localize/init' ,我认为这个问题将在以后的更新中得到解决。
所以你需要手动在其他项目的polyfills.ts文件中添加 import '@angular/localize/init'

4
被低估的答案。这在官方指南中从未被提到过。 - Lazar Ljubenović
2
我怀疑这个答案可能拯救了我的一天和理智。 - CodeMonkey
1
在我的情况下,ng add 也没有将它添加到 polyfills.ts 中。谢谢。 - Zuhair
1
这个答案为我节省了好几天的时间。我的默认项目已经有了导入,所以CLI报告非常误导人:“跳过安装:软件包已经安装,无需操作。” - Stewii
我的应用程序中是否有可能知道哪些部分/库依赖于i18n? - Samiullah Khan

8

我升级了一个包含多个子应用的大型Nx/Angular CLI应用程序至Angular 10后,出现了这个错误。错误中建议的解决方案(请从Angular CLI运行ng add @angular/localize)无法处理包含多个应用程序的应用程序。每个自动生成的应用程序都有自己的polyfill.ts文件。我在每个polyfill.ts文件中手动添加了导入(import '@angular/localize/init';)。为了修复在运行单元测试时出现相同的错误,我还必须在libs的test.ts文件中添加该导入。


我希望这个答案更高一些,这正是我在内部库中遇到的问题,不得不在test.ts中添加导入,否则它就无法移动。 - Zentaurus
谢谢!!!这是在NX中的答案! - holyknight

6
如果你正在运行ng test并且上述解决方法无效,那么请安装该包并将import "@angular/localize/init"添加到polyfills-test.ts文件中。

这里有一个很好的观点,还有一个用于测试的特定ts文件的设置。也需要更新。 - Camille

5
Angular 9引入了一个全局$localize()函数,如果你使用i18n,则需要加载该函数。
从Angular CLI中运行“ng add @angular/localize”。
然后确保您的应用程序的package.json文件中有以下依赖项: - @angular/localize 在polyfills.ts文件中导入"@angular/localize/init"。

5

你需要添加这个包

ng add @angular/localize

接着在你的 ployfills.ts 中加入 import '@angular/localize/init';

但是如果你的测试出现库问题导致失败,那么你必须要在 test.ts 中添加 import '@angular/localize/init';


我仍然遇到那个错误,我已经删除了扩展并清理了缓存和%appdata%文件夹 :( - Pratik Agarwal

5
我在将 Angular 版本从 12 升级到 13 的过程中遇到了这个错误。我按照以下步骤操作:
  1. 运行 ng add @angular/localize
  2. 在你的 polyfills.ts 中导入 '@angular/localize/init'
但是这并没有解决问题。我已经在我的模块中有了 @angular/localize,并且在 polyfills.ts 文件中也有导入,毕竟我的 Angular 12 应用程序运行良好。
为了解决这个问题,我必须更新 "@ng-bootstrap/ng-bootstrap" 版本。我希望这个建议能给某人省去一些麻烦,因为过时的 @ng-bootstrap/ng-bootstrap 版本和错误描述之间看起来没有明显的联系。

4

运行

npm install @angular/localize --save

接下来,在您的polyfills.ts文件中:

import '@angular/localize/init' 

这个方法对我有效


3

最好的方法是使用Angular CLI:

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

ng add @angular/localize

它将自动安装软件包,并将导入语句添加到 polyfills.ts 文件中。

导入语句是:

import '@angular/localize/init';

如果您不想使用CLI方法,那么可以手动在polyfills.ts文件中输入导入语句。还有一步是在dependencies标签下的package.json中添加以下行。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接