Rails3で日付選択ヘルパーを日本語化する

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

Ruby on Rails3を使ってフォームを作っているとき、日付選択表記が、

[2011] [August] [17]

のようになるのが気味が悪いので、日本語化に挑戦してみた。
結果としては、以下のようにすればOK。

ビューファイル

<%=raw date_select_jp 'event','open_at' %>

application_helper.rb

  def date_select_jp(object_name, method, options={ })
    options[:use_month_numbers] = true unless options[:use_month_numbers]
    t = date_select(object_name, method, options)
    if options[:discard_day]
      t.gsub(/<\/select>(.+?)<\/select>/m, "</select>年\\1</select>月")
    else
      t.gsub(/<\/select>(.+?)<\/select>(.+?)<\/select>/m, "</select>年\\1</select>月\\2</select>日")
    end
  end

以下、検証した方法。

まずは定番とされている、

config.i18n.default_locale = :ja

をapplication.rbに指定し、ja.ymlをダウンロードしてくる方法。
これをやった結果、日付選択フォームには

[2011][8月][17]

と表示されるようになった。これでも全然気持ちが悪い。

探していくと、次のようなページに行き当たった。

[Rails] date_selectを簡易日本語化

ここのページ通りアプリケーションヘルパーを拡張したところ、今度はフォームの部分に、

<select id="event_date_1i" name="event[date(1i)]">
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
……
</select>

こんな具合にHTMLタグがそのまま表示されるようになってしまった。
これはRails3の仕様によるもの(ビュー上で、変数はHTMLタグをエスケープする)なので、メソッド名の前に raw をつけてやることで解決する。

#しかし、この程度のことがRails3の文献で語られていないのは大丈夫なのかなぁ……。

記事の品質向上のため、感想をお聞かせください。

  • 分かりやすかった・ためになった (1)
  • 分かりにくかった・ためにならなかった (0)
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメント

  1. 匿名 より:

    date_select_jpメソッド側で、returnする文字列にhtml_safeを付けるとエスケープされないです

    1. あぁ~なるほど、html_safeなんていうメソッドがありましたか。勉強になりました。ありがとうございます。

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)