繁体   English   中英

Angular 5中的动态国际化(日期和货币)

[英]Dynamic Internationalization in Angular 5 (Date and currency)

我在应用程序中遇到了日期和货币插补的问题。 我试图找出一些解决方法,但我无法解决我的问题。 我的应用程序是这样工作的:它使用美国语言环境进行了初始化。 用户登录数据到达后,其中一个字段是用户区域。 这是本地设置的。 为此,我这样做:

// app.module
providers: [
...
{
  provide: LOCALE_ID, 
  deps: [LocaleService],
  useFactory: localeProviderFactory
}
...]

export function localeProviderFactory(provider: LocaleService) {
 return provider.getCurrent();
}

//my service
export class LocaleService {
  locale: BehaviorSubject<any>;

  constructor() {
    this.locale = new BehaviorSubject<GroupModel> (this.getGroupFromLocalStorage());
  }

  private getGroupFromLocalStorage(): GroupModel {
    let parse = JSON.parse(localStorage.getItem('currentUser'));
    return parse ? parse.Region : 'en-US';
  }  

  setLocale(val) {
    this.locale.next(val);
  }

  getCurrent() {
    return this.locale.getValue();
  }
}

因此,在用户登录后,我在LocaleService调用setLocale()LocaleService传递新的用户区域。

问题是我不知道将设置哪个区域,也不想将所有语言环境导入应用程序。 Angular 5需要在应用启动之前导入所有语言环境。 带有:

import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';
registerLocaleData(localeFr);

是否可以在运行时动态导入/加载和注册语言环境? 还是有一些解决方法?

不,很遗憾,这是不可能的。 作为罗布麦凯布在回答自己的问题在这里说:

Angular一次只能使用一种语言,因此您必须完全重新加载应用程序才能更改lang。 对JIT的支持仅意味着它可以与JIT一起使用,但是您仍必须在引导程序中提供翻译,因为它将在编译期间替换模板中的文本,而此lib使用绑定,这意味着您可以随时更改翻译。 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM