I'm attempting to dynamically import locales in an Angular 9 (monorepo-based) app. I'm doing something like the following:
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);
}
}
}
instead of:
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);
}
}
Within this code even executing, I'm getting a boatload of errors caused by the imports of the form:
WARNING in /home/me/somerepo/node_modules/@angular/common/locales/zu.d.ts Module build failed (from /home/me/somerepo/node_modules/@ngtools/webpack/src/index.js): Error: /home/me/somerepo/node_modules/@angular/common/locales/zu.d.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.
Commenting out the imports and call to registerLocaleData eliminates the error. What on earth am I doing wrong here?