ngx перевод как реализовать языковой стандарт

Я использую ngx-translate.

Я хочу показать данные, используя канал

как дата, валюта в зависимости от

текущий язык / локаль.

Я закончил с этим

код только один работает, по крайней мере, в моем тесте.

Есть ли лучший / простой способ?

// Обслуживание

import { Injectable } from '@angular/core';
import {TranslateService, LangChangeEvent} from '@ngx-translate/core';

export function extract(s: string) {
  return s;
}

@Injectable({
  providedIn: 'root'
})
export class I18nService {
  defaultLanguage: string = 'en';
  supportedLanguages: string[];
  constructor(private translate: TranslateService) {
    const cultureLang = translate.getBrowserCultureLang();
    console.log('cultureLang',cultureLang);
    const lang = this.defaultLanguage;
    translate.addLangs(['en-US', 'it-IT']);
    translate.setDefaultLang(lang);
    translate.onLangChange
      .subscribe((event: LangChangeEvent) => { console.log('event',event.lang); });

  }
  use(language: string) {
    this.translate.use(language);
  }
  get language(): string{
    return this.translate.currentLang || this.defaultLanguage;
  }
  onChange(){
    return this.translate.onLangChange;
  }
}

// Труба

import {DatePipe} from '@angular/common';
import {Pipe, PipeTransform} from '@angular/core';
import {map} from 'rxjs/operators';
import { I18nService } from './i18n.service';

@Pipe({
    name: 'date'
})
export class MyDate implements PipeTransform {

    constructor(private i18n: I18nService) {}

    public transform(value: any, pattern: string = 'mediumDate'): any {
        let lang = this.i18n.language;
        this.i18n.use(lang);// just to trigger the first time use merge with of to emit the first value
        return this.i18n.onChange()
        .pipe(
           map(ev => {
            lang = ev.lang
            let ngPipe = new DatePipe(lang);
            return ngPipe.transform(value, pattern);
           }) 
        )


    }

}

// Использование

<p>The hero's birthday is {{ birthday | date:'shortDate' | async }}</p>

0 ответов

Другие вопросы по тегам