Angular 9 找不到 'en-US' 的区域设置数据。此语言环境将不包含任何语言环境数据
Angular 9 Locale data for 'en-US' cannot be found. No locale data will be included for this locale
我收到这个奇怪的警告
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')时,警告消息消失。
手动注册 en-US 语言环境数据也无济于事
这确实很烦人。编译器期望有 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 目录之外的所有其他构建。
如果将 sourceLocale 设置为 en
,它会起作用。
- 但我不明白为什么默认值
en-US
不起作用。
"i18n": {
"sourceLocale": "en",
"locales": {...}
}
最新版本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/"
}
}
我也遇到了同样的问题
如您所说,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);
[...]
可能与文件名为 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": {...}
}
我收到这个奇怪的警告
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')时,警告消息消失。
手动注册 en-US 语言环境数据也无济于事
这确实很烦人。编译器期望有 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 目录之外的所有其他构建。
如果将 sourceLocale 设置为 en
,它会起作用。
- 但我不明白为什么默认值
en-US
不起作用。
"i18n": {
"sourceLocale": "en",
"locales": {...}
}
最新版本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/"
}
}
我也遇到了同样的问题
如您所说,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);
[...]
可能与文件名为 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": {...}
}