DateHelperJa 0.2 リリース

概要

日付を表示する datetime_select, date_select を日本語化するプラグインである DateHelperJa。2007年4月に Rails 1.2.x 向けとして、最初にリリースした。その後、一部の人々の間で細々と使われ続けたらしい。ありがたいことである。Rails 2.1 対応版を id:milk1000cc さん、Rails 2.2 を発展途上技術者こと石原さんに作っていただいた。石原さんの提案で、これらのパッチを統合して、DateHelperJa の Rails 2.1/2.2 対応版を Github にて公開することにした。(Rails 2.0 に対応しているかは不明)

今回のセカンド・リリースの目玉は、和暦への対応である。なんと、「平成21年」とか表示できてしまうのだ。もちろん、内部的には日付型で正しく扱われ、西暦で表示するときと何の変わりもない。システムによっては、和暦への対応が必要になることもあるだろう。そのときはぜひ使ってみてほしい。

使い方

使い方を簡単に説明しておこう。

まずはプラグインのインストール。Rails アプリのベースディレクトリで、

% ./script/plugin install git://github.com/elm200/date_helper_ja.git

とする。これだけで、datetime_select, date_select が日本語表示される。

(図1/datetime_select の日本語表示)

datetime_select("model", "attr")
# =>"2009年 2月 22日 03時 49分"

オリジナルの振る舞いに戻したいときは、:use_jp_xxx (xxx = year, month, day, hour, minute, second) というオプションを false に設定する。

datetime_select("model", "attr", :use_jp_hour => false, :use_jp_minute => false)
# => "2007年 2月 22日 - 03:49"

さて目玉の和暦対応である。
これは、:use_era_name というオプションを true にすることで和暦を表示する。

(図2/datetime_select の和暦表示)

datetime_select("model", "attr", :use_era_name => true)
# => "平成21年 2月 22日 10時41分"

さらに :era_format というオプションで和暦の表示スタイルを指定できる。:ja_long(デフォルト値), :ja_short, :alphabet が指定可能。

datetime_select("model", "attr", :use_era_name => true, :era_format => :ja_long)
# => "平成21年 2月 22日 10時41分"

datetime_select("model", "attr", :use_era_name => true, :era_format => :ja_short)
# => "平21年 2月 22日 10時41分"

datetime_select("model", "attr", :use_era_name => true, :era_format => :alphabet)
# => "H21年 2月 22日 10時41分"

distance_of_time_in_words の日本語化

Rails には2つの時点の間隔を概数で報告してくれる distance_of_time_in_words というメソッドがある。Rails 2.1 でこの DateHelperJa プラグインを使うと、これが日本語化される。
(Rails 2.2 では、i18n の機構を使って日本語化してほしい。参照⇒Rails 2.2の I18nによる日本語化を最も簡単に行う方法)

% script/console
Loading development environment.
>> include ActionView::Helpers::DateHelper
=> Object
>> distance_of_time_in_words(Time.now, Time.now + 29.seconds)
=> "1分以内"
>> distance_of_time_in_words(Time.now, Time.now + 45.seconds)
=> "1分"
>> distance_of_time_in_words(Time.now, Time.now + 30.minutes)
=> "30分"
>> distance_of_time_in_words(Time.now, Time.now + 2.days + 5.hours)
=> "2日"
>> distance_of_time_in_words(Time.now, Time.now + 3.months + 15.days)
=> "3ヶ月"
>> distance_of_time_in_words(Time.now, Time.now + 3.years + 6.months)
=> "3年以上"

こんな感じである。

最後に・・

いろいろミスやらバグやらあると思うので、お気軽にフィードバッグをください。
メールは、eijisakai@gmail.com

献辞

石原さんRails 2.2 対応パッチをありがとうございました。和暦対応は、基本的に石原さんがすべてやってくれました。

id:milk1000cc さん、Rails 2.1 対応パッチありがとうございました。

松田さん、distance_of_time_in_words の日本語リソースについて、質問に丁重に回答していただいてありがとうございました。