Twitterをよく見ると、ツイートした時間の表示は○○前とか約○○時間前みたいなかなりアバウトな時間表示になっています。Ruby on Railsではago_ago_in_words
メソッドを使うことで簡単に実装することができます。ここではその使い方について。
ヘルパーに追加
Viewでこの関数を使うときに、直接、Viewに書いてしまうのは、見た目とロジックの分離という視点で、MVCの考え方の上ではあまりよろしくないので、helperに書きましょう。全てのViewで使いたいときはapp/helper/application_helper.rb
に書けばいいと思います。
def date_format(datetime) time_ago_in_words(datetime) + '前' end
これで、Viewの中で<%= datetime(post.created_at) %>
みたいに読み込んでやると、今からどのくらい前かを表示することができます。
ただ、このままだと、”2days前”みたいな喧嘩売ってるとしか思えないような表記になるので、日本語化してやりましょう。
言語の設定
まず、このアプリケーションで使用する言語を選択します。ここでは日本語を選択しようと思うのでconfig/application.rb
の中に以下のような文を書き込みましょう。たぶん、この部分は最初:de
の状態でコメントアウトされていると思います。
config.i18n.default_locale = :ja
次に、日本語の翻訳ファイルを作成します。翻訳用のファイルはconfig/locales
の中に入っています。その中にja.yml
を作成して、
ja: datetime: distance_in_words: half_a_minute: "30秒前後" less_than_x_seconds: one: "1秒" other: "%{count}秒" x_seconds: one: "1秒" other: "%{count}秒" less_than_x_minutes: one: "1分" other: "%{count}分" about_x_hours: one: "約1時間" other: "約%{count}時間" x_days: one: "1日" other: "%{count}日" about_x_months: one: "約1ヶ月" other: "約%{count}ヶ月" x_months: one: "1ヶ月" other: "%{count}ヶ月" about_x_years: one: "約1年" other: "約%{count}年" over_x_years: one: "1年以上" other: "%{count}年以上"
という風に書き込んでやりましょう。そうすれば、約1時間前みたいな感じの表記になると思います。
まとめ
基幹システムとかじゃない限り、正直、正確な時間が必要なときなんてめったにないですよね。更新頻度が高いサービスとかの場合だと、どのくらい前なのか、とかのほうがパッと把握できる有意義な情報です。そういう○○前という情報をパッと書けるのはありがたいです。
コメントを残す