Angular 6 混合 i18n JIT 和 AOT

Angular 6 Mixing i18n JIT and AOT

好像开发用的是JIT,生产用的是AOT,还好。 但是我正在尝试使用 JIT 读取似乎为 null 的 LOCALE_ID:

@Inject(LOCALE_ID) public localeId: string;

结果为空。

我怀疑我需要在 JIT 设置中指定语言。 根据这些说明: https://angular.io/guide/i18n#merge-with-the-jit-compiler

但是,如果我进行此设置,是否会与以后使用 AOT 进行翻译发生冲突? - 如何在 JIT 中访问默认语言环境而不使其为空? - 如何在 angular 6 中混合使用 JIT 和 AOT?

遵循您提供的指南不会破坏 AoT 编译的 i18n 设置,但不需要这样做。我试过像您在我的一个组件中所做的那样注入该令牌,但它不是 null,而是 en-US。此外,当我确实在我的 app.module.ts 中提供了一些其他令牌时(例如 providers: [ { provide: LOCALE_ID, useValue: 'de' } ],,正如 https://angular.io/guide/i18n#merge-with-the-jit-compiler 所建议的那样),我注入的令牌变成了 de.

所以要回答 How can I access the default locale without it being null in JIT ?:您必须注入令牌(就像您所做的那样),但您不能用 app.module.ts 中提供的其他值覆盖它。

考虑到这一点,您的代码中的其他地方可能存在问题,因此如果您提供 stackblitz 或其他内容,我们或许可以查明您的问题。