J'essaie d'importer dynamiquement des locales dans une application Angular 9 (basée sur monorepo). Je fais quelque chose comme ce qui suit :
import { Injectable } from '@angular/core';
import { registerLocaleData } from '@angular/common';
@Injectable()
export class LocaleService {
...
private capitalize(str: string): string {
return str.charAt[0].toUpperCase() + str.substring(1).toLowerCase();
}
registerLocales() {
for (const lang of ['de', 'fr', 'es']) {
const basePkg = `locale${this.capitalize(lang)}`;
const extraPkg = basePkg + 'Extra';
const base = import(`@angular/common/locales/${lang}`).then(m => m[basePkg]);
const extra = import(`@angular/common/locales/extra/${lang}`).then(m => m[extraPkg]);
registerLocaleData(base, extra);
}
}
}
au lieu de :
import { Injectable } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import localeDe from '@angular/common/locales/de';
import localeDeExtra from '@angular/common/locales/extra/de';
import localeEs from '@angular/common/locales/es';
import localeEsExtra from '@angular/common/locales/extra/es';
import localeFr from '@angular/common/locales/fr';
import localeFrExtra from '@angular/common/locales/extra/fr';
@Injectable()
export class LocaleService {
...
registerLocales() {
registerLocaleData(localeDe, localeDeExtra);
registerLocaleData(localeEs, localeEsExtra);
registerLocaleData(localeFr, localeFrExtra);
}
}
Avant même que ce code ne s'exécute, j'obtiens une multitude d'erreurs causées par les importations du formulaire :
AVERTISSEMENT dans /home/me/somerepo/node_modules/@angular/common/locales/zu.d.ts Module a échoué (de /home/me/somerepo/node_modules/@ngtools/webpack/src/index.js) : Erreur : /home/me/somerepo/node_modules/@angular/common/locales/zu.d.ts est absent de la compilation TypeScript. Veuillez vous assurer qu'elle se trouve dans dans votre tsconfig via la propriété 'files' ou 'include'.
En commentant les importations et l'appel à registerLocaleData
élimine l'erreur. Mais qu'est-ce que je fais de mal ici ?