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>