web-dev-qa-db-fra.com

Angular 9 Les données locales pour 'en-US' sont introuvables. Aucune donnée locale ne sera incluse pour cette locale)

Je reçois cet étrange avertissement

Locale data for 'en-US' cannot be found. No locale data will be included for this locale lors de l'exécution ng build --configuration=prod --localize

voici mon angular.json

// omitted
"i18n": {
    "sourceLocale": "en-US",
    "locales": {
      "sr-Latn": {
        "translation": "src/locale/messages.sr.xlf",
        "baseHref": "/sr/"
      }
    }
  },
// omitted

La documentation indique clairement que en-US est importé par défaut. Pour aggraver les choses, lorsque je change sourceLocale dans une autre langue (dites "de"), le message d'avertissement disparaît.
L'enregistrement manuel des données locales en-US n'aide pas non plus

6
SeaBiscuit

C'est vraiment ennuyeux. Le compilateur s'attend à disposer de ressources en-US et compile même l'application à l'aide de en-US et de base-href.

Voilà comment j'ai résolu cela.

1) J'ignore simplement le répertoire d'avertissement et de sortie en-US.

2) Je compile l'application deux fois. D'abord sans option --localized. Cela compile l'application d'origine, utilise\comme base-href et n'utilise aucun fichier de traduction. Ensuite, je compile une autre fois avec --localized et cela compile toutes mes langues avec base-href correspondant aux codes de langue.

ng build --prod --outputPath=dist/original
ng build --prod --outputPath=dist/localized --localize

3) Je déploie la version d'origine à partir de dist/original et toutes les autres versions de dist/localized sauf le répertoire en-US.

1
Jaska

J'ai le même problème.

Comme vous l'avez dit, la valeur par défaut de LOCALE_ID semble être en-US, car c'est ce que cela représente quand rien n'est spécifié.

De plus, en regardant @angular/common/locales/* il semble que la valeur par défaut de registerLocaleData soit en. @angular/common/locales/en existe, @angular/common/locales/en-US n'existe pas! Même avec de-DE: @angular/common/locales/de-DE n'existe pas, mais @angular/common/locales/de Est-ce que.

Pour l'instant, j'ai tout changé pour en/de et ça marche:


Exemple de localisation pour l'anglais et l'allemand:

angular.json

[...]
      "i18n": {
        "sourceLocale": "en",
        "locales": {
          "de": "src/locale/messages.de.xlf"
        }
      }
[...]

app.module.ts

[...]
import { registerLocaleData } from '@angular/common';
import localeDe from '@angular/common/locales/de';
import localeEn from '@angular/common/locales/en';

registerLocaleData(localeDe, localeEn);
[...]
0
cocoseis

Avec la version la plus récente 9.0.2, vous pouvez spécifier la sourceLocale baseHref

"i18n": {
    "sourceLocale": {
      "baseHref": "/",
      "code": "en"
    },
    "locales": {
      "fr": "src/locale/messages.fr.xlf",
      "de": "src/locale/messages.de.xlf",
      "es": "src/locale/messages.es.xlf",
      "it": "src/locale/messages.it.xlf",
      "ja": "src/locale/messages.ja.xlf",
      "ko": "src/locale/messages.ko.xlf",
      "zh": {
        "translation": "src/locale/messages.cn.xlf",
        "baseHref": "/cn/"
      }
    }
0
Tony Smith