私はこの奇妙な警告を受けています
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)アプリケーションを2回コンパイルします。まず--localizedオプションなし。これにより、元のアプリケーションがコンパイルされ、\がbase-hrefとして使用され、翻訳ファイルは使用されません。次に、-localizedを使用してもう一度コンパイルします。これにより、すべての言語が言語コードと一致するbase-hrefでコンパイルされます。
ng build --prod --outputPath=dist/original
ng build --prod --outputPath=dist/localized --localize
3)元のビルドをdist/original
からデプロイし、en-USディレクトリを除く他のすべてのビルドをdist/localized
からデプロイします。
私は同じ問題を抱えています。
あなたが言ったように、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);
[...]
最新バージョン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/"
}
}