Angular:如何在使用AOT时在运行时获取当前语言环境

时间:2018-05-24 15:51:50

标签: angular internationalization

我正在编写我的项目:

ng serve --aot --i18nFile=client/locale/messages.fr.xlf --i18nFormat=xlf --locale=fr

如何在运行时访问区域设置ID?我想根据语言环境显示/隐藏元素。

PS。我确实意识到使用JIT编译我可以简单地这样做:

providers: [ { provide: LOCALE_ID, useValue: 'fr' } ]

但我正在寻找AOT解决方案。我也不想根据主机名或类似的东西来推断语言环境。

2 个答案:

答案 0 :(得分:18)

只需在构造函数中注入LOCALE_ID,例如

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

...

constructor(
  @Inject(LOCALE_ID) public locale: string
) { }

答案 1 :(得分:5)

注入令牌LOCALE_ID 提供您用户的语言或语言环境,它是静态的,默认为'en-US',除非您提供其他信息值(docs

providers: [{provide: LOCALE_ID, useValue: 'en-GB' }]

这是一种获取用户首选语言/语言环境的方法:

  getUsersLocale(defaultValue: string): string {
    if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
      return defaultValue;
    }
    const wn = window.navigator as any;
    let lang = wn.languages ? wn.languages[0] : defaultValue;
    lang = lang || wn.language || wn.browserLanguage || wn.userLanguage;
    return lang;
  }