我正在编写我的项目:
ng serve --aot --i18nFile=client/locale/messages.fr.xlf --i18nFormat=xlf --locale=fr
如何在运行时访问区域设置ID?我想根据语言环境显示/隐藏元素。
PS。我确实意识到使用JIT编译我可以简单地这样做:
providers: [ { provide: LOCALE_ID, useValue: 'fr' } ]
但我正在寻找AOT解决方案。我也不想根据主机名或类似的东西来推断语言环境。
答案 0 :(得分:18)
只需在构造函数中注入LOCALE_ID,例如
import { LOCALE_ID } from '@angular/core';
...
constructor(
@Inject(LOCALE_ID) public locale: string
) { }
答案 1 :(得分:5)
注入令牌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;
}