找不到“ en-US”的Angular 9 Locale数据。此语言环境不会包含任何语言环境数据

时间:2019-12-28 20:41:19

标签: angular-cli angular9

我收到这个奇怪的警告

Locale data for 'en-US' cannot be found. No locale data will be included for this locale  运行ng build --configuration=prod --localize

这是我的angular.json

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

文档明确指出默认情况下已导入en-US。 更糟糕的是,当我将sourceLocale更改为任何其他语言(例如“ de”)时,警告消息就会消失。
手动注册美国语言环境数据无济于事

5 个答案:

答案 0 :(得分:3)

如果将sourceLocale设置为en,则可以正常工作。

  • 但是我不知道为什么默认值en-US不起作用。
"i18n": {
    "sourceLocale": "en",
    "locales": {...}
}

答案 1 :(得分:1)

这确实很烦人。编译器希望拥有en-US资源,甚至可以使用en-US和base-href来编译应用程序。

这就是我解决这个问题的方式。

1)我只是忽略警告和en-US输出目录。

2)我两次编译应用程序。首先不带--localized选项。这将编译原始应用程序,将\用作base-href,并且不使用任何翻译文件。然后,我再次使用--localized进行编译,这将使用与语言代码匹配的base-href来编译我的所有语言。

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

3)我从dist/original部署了原始版本,从dist/localized部署了所有其他版本,但en-US目录除外。

答案 2 :(得分:0)

在最新版本9.0.2中,您可以指定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/"
      }
    }

答案 3 :(得分:0)

我有同样的问题。

就像您说的那样,LOCALE_ID的默认值似乎是en-US,因为这是未指定任何内容时所代表的含义。

再看一下@angular/common/locales/*,registerLocaleData的默认值是en@angular/common/locales/en存在,@angular/common/locales/en-US不存在! 与de-DE相同:@angular/common/locales/de-DE不存在,但@angular/common/locales/de存在。

目前,我已将所有内容都切换为en / de,并且可以使用:


英语和德语本地化示例:

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);
[...]

答案 4 :(得分:0)

也许与该文件名为en-US-POSIX的事实有关,如此处https://github.com/angular/angular/blob/master/packages/common/locales/en-US-POSIX.ts

尝试动态import('@angular/common/locales/en-US-POSIX')有效。

因此尝试此操作可能会

"i18n": {
    "sourceLocale": "en-US-POSIX",
    "locales": {...}
}