簡體   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