Calendar Helper Plugin をいじる

昨日の日記でRailsで使えそうなカレンダープラグインを列挙しました。それぞれのドキュメントを読んだりした感じから、一番シンプルで拡張しやすそうだという理由から、Calendar Helper Plugin を使うことにしました。

Calendar Helper Plugin のおさらい

概要

昨日は眠かったのであまり上手くまとめられていなかったので、もう一度簡単にまとめてみます。
Calendar Helper Plugin は、Jeremy Voorhis さんが作って、Jarkko Laine さんが拡張したプラグインです。TABLEタグで作られたシンプルなカレンダーを作成してくれます。

特徴

Calendar Helper Plugin は、ビューに対応するrhtmlファイルの挿入したい箇所にコードを挿入すると、そこに生成されたHTMLが埋め込まれます。基本的な使い方は以下のような感じです。

app/views/hoge.rhtml


<%= calendar(:year => 2007, :month => 6) %>

calendar は、呼出し時に少なくともオプションとして、表示する年(;year)と月(:month)を指定する必要があります。他にも色々なオプションがありますが、詳しくはドキュメントを読んでみてください。

大きな欠点

calendar には、月や曜日に日本語が使えないという大きな欠点があります。そのままでは、月はJanuary or Jan、曜日は Sunday or Sun、といった感じで表示されます。(以下図参照)



日本人なら日本語も使いたいですよね?そう思った人なら以下の話は役に立つかもしれませんよ?

Plugin の拡張

というわけで、対応していないなら対応させてしまえということに。まず、どんな出力をサポートするかを考えます。とりあえず、月 => 1月、曜日 => 日といった一般的な日本語はサポートしましょう。これだけだとつまらないので、月に陰暦も使えるようにしてみます。(睦月とか卯月ってやつです)

オプションで渡してしまえ

さて、インタフェースを変えずに日本語サポートするにはどうしたらいいかと考えた結果、オプションに月や曜日のフォーマットを指定するようにすればいいことにしました。オプションはとりあえず以下のような名前にしました。

  • 月の表示に関するオプションは :month_expression
  • 曜日の表示に関するオプションは :week_expression

英語がアレなのでまずかったら言ってください。これに識別子を与えてやります。月の表示方法には以下の2つの識別子をあげましょう。

  • 通常の月(1月、2月)は 'jp_normal'
  • 陰暦(睦月、卯月)は 'jp_lunar'

これもアレだったら読み替えてください。

曜日は今のところ日、月、火の簡略方式のみにしましょう。長すぎるとカレンダーがコンパクトになりませんしね。

  • 曜日を日本語にする場合は 'jp'

これを使った呼び出し例はこんな感じになります。

月を陰暦で、曜日を日本語で表示する

<%= calendar({:year => 2007, :month => 6,
      :month_expression => 'jp_lunar', :week_expression => 'jp'}) %>

これで一応インタフェース部分は終了です。

コード修正は長くなりそうなのでまた明日。