web-dev-qa-db-fra.com

Angulaire: comment obtenir les paramètres régionaux en cours d'exécution lors de l'utilisation d'AOT

Je compile mon projet avec:

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

Comment puis-je accéder à l'ID de paramètres régionaux lors de l'exécution? Je souhaite afficher/masquer les éléments en fonction des paramètres régionaux.

PS. Je me rends compte qu'en utilisant la compilation JIT, je peux simplement faire ceci:

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

Mais je cherche une solution AOT. Je préfère également ne pas déduire les paramètres régionaux basés sur le nom d'hôte ou quelque chose comme ça.

7
Baconbeastnz

Injectez simplement LOCALE_ID dans votre constructeur, par exemple.

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

...

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

Le jeton d'injection LOCALE_ID pas fournissez la langue ou les paramètres régionaux de votre utilisateur, ils sont statiques et par défaut _ 'en-US' sauf si vous fournissez une valeur différente ( docs ):

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

Voici une méthode qui obtient la langue/l'environnement local préféré de l'utilisateur:

  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;
  }
4
inorganik