在AOT编译的Angular应用程序中获取运行时的--locale值

14

我有一个多语言应用程序,每种语言都使用--aot编译,例如德语:

ng build --aot --env=prod --prod --build-optimizer --i18nFile=src/locale/DARI_messages_de_DE.xlf --i18nFormat=xlf --locale=de --missingTranslation warning --output-path dist/de --base-href /de/

我们需要在运行时获取本地化值,以便将其传递给后端处理。

如果您已经尝试从中获取

    import { LOCALE_ID } from '@angular/core';

constructor(private modalService: BsModalService) {
  console.log("LOCALE_ID", LOCALE_ID);
}

但是我认为LOCAL_ID是空的,我认为它仅用于JIT

有没有方法在运行时获取此参数?


你使用的 Angular 版本是什么?我正在使用 Angular 6,并且使用 --i18n-locale=de 仍然会得到 'en-US' 的 LOCALE_ID。 - Simon
@Simon 这是 Angular 的默认位置。 - s-f
2个回答

24
作为新手,我发现Simon的答案有点不完整。事实证明,你需要导入LOCALE_ID和Inject两个模块:

作为新手,我认为Simons的回答有些不够完整。事实证明,您需要导入LOCALE_ID和Inject两个模块:

import { Component, OnInit, LOCALE_ID, Inject } from '@angular/core';

@Component({
  selector: '...',
  templateUrl: '...',
  styleUrls: ['...']
})

export class ShinyComponent implements OnInit {

  constructor(@Inject(LOCALE_ID) protected localeId: string) { }

  public someFunction {} {
    console.log("Current locale is "+this.localeId); 
  }
}

ngOnInit() {}

有其他办法吗?我想不使用构造函数来实现它。这可行吗? - Vivek Kumar
我在Angular 10中仍然以相同的方式进行操作。我还没有发现其他方法。 - Jette

5

您应该让Angular注入LOCALE_ID

constructor(private modalService: BsModalService,
    @Inject( LOCALE_ID ) protected localeId: string) {
    console.log("LOCALE_ID", localeId);
}

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