私は私のプロジェクトを次のものでコンパイルしています:
ng serve --aot --i18nFile=client/locale/messages.fr.xlf --i18nFormat=xlf --locale=fr
実行時にロケールIDにアクセスするにはどうすればよいですか?ロケールに基づいて要素を表示/非表示にします。
PS。 JITコンパイルを使用すると、これを簡単に行えることがわかります。
providers: [ { provide: LOCALE_ID, useValue: 'fr' } ]
しかし、私はAOTソリューションを探しています。また、ホスト名またはそのようなものに基づいてロケールを推測することも避けます。
コンストラクターにLOCALE_IDを挿入するだけです。
import { LOCALE_ID } from '@angular/core';
...
constructor(
@Inject(LOCALE_ID) public locale: string
) { }
インジェクショントークンLOCALE_ID
はユーザーの言語またはロケールを提供しない、静的でデフォルトは'en-US'
異なる値を指定しない限り( docs ):
providers: [{provide: LOCALE_ID, useValue: 'en-GB' }]
ユーザーの優先言語/ロケールを取得するメソッドは次のとおりです。
getUsersLocale(defaultValue: string): string {
if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
return defaultValue;
}
const wn = window.navigator as any;
let lang = wn.languages ? wn.languages[0] : defaultValue;
lang = lang || wn.language || wn.browserLanguage || wn.userLanguage;
return lang;
}