ngx-translateとDatePipeを組み合わせて使いたい時 (カスタムパイプもあるよ)
結論テンプレート側ではできなかったです。
なのでコントローラ側でパイプなしで実装しました。さらに、それ用にカスタムパイプも作りました。
やりたかったこと
ngx-translateを使って、
言語 | 表記 | フォーマット |
---|---|---|
日本語 | 2017年8月24日 | YYYY年M月D日 |
英語 | Aug 24, 2017 | MMM DD, YYYY |
こんな感じで表示の出し分けをしたくて、ngx-translateとdatePipeを強引に組み合わせて、以下みたいな感じで書いてみたところ。。。
<p>{{ date | date: {{ 'DATE_FORMAT' | translate }} }}</p>
通常 date: 'YYYY-MM-DD'
ってするところを、強引にフォーマット部分に文字列を突っ込んでみましたが、ダメでした。やっぱダメかー。
そもそもそういう機能は無いみたいですねngx-translateには。
実装
なので、コントローラ側で実装してあげました。
DATE_FORMAT
ていうのに、英語だと"MMM DD, YYYY"
, 日本語だと"YYYY年M月D日"
という文字列が指定されてて、translate.get()
で取得してきます。
translateっていうのはngx-translateのサービスのObjectですね。
ここらへんのngx-translate実装の詳細は以下を参考にして下さい。
http://qiita.com/jyjoestrummer/items/4ee5f28e0843bd7c70bb
ほんでDateのコードですが、こんな感じでコントローラ側で言語に応じて日付を整形します。
// 日付を言語によって整形する
this.translate.get("DATE_FORMAT").subscribe((res: string) => {
let dateTranslated = moment(this.date).format(res);
this.dateTranslated = dateTranslated;
});
今回はionic3で実装しましたが、constructorとかionViewWillEnterで実行するようにしました。
以上っすわ〜。
追記 カスタムパイプ作りました
なんかいろんな画面で使う感じになったので、カスタムパイプにしました。
import { PipeTransform, Pipe } from '@angular/core';
import * as moment from 'moment';
import { TranslateService, LangChangeEvent } from '@ngx-translate/core';
// 言語によってDateを整形するPipe
@Pipe({
name: "dateTranslated"
})
export class DateTranslatedPipe implements PipeTransform {
constructor(
public translate: TranslateService) {
}
transform(date: string): string {
let dateTranslated;
this.translate.get("DATE_FORMAT").subscribe((res: string) => {
dateTranslated = moment(date).format(res);
});
return dateTranslated;
}
}
こんな感じで使います。
<p>{{ date | dateTranslated }}</p>
Author And Source
この問題について(ngx-translateとDatePipeを組み合わせて使いたい時 (カスタムパイプもあるよ)), 我々は、より多くの情報をここで見つけました https://qiita.com/eggmobile/items/2a109a6dfe2745a228dc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .