新規登録画面や、編集画面のような、フォームの中であれば、
<%= f.label :family_name %>
のように、フォームのラベルメソッドを利用するだけで、
自動でI18nのロケールファイルを利用してくれるのに、
参照画面や一覧画面のような、フォーム外の場所だと、
いちいち、
<%= t activerecord.attributes.person.family_name %>
のように、長いキーを指定しないといけないところでした。
これをちょっと改善する、コードを書いてみました。
ActiveRecodeの拡張
以下の内容のrubyファイルを、config/initializersに配置する。class ActiveRecord::Base
# class methods
class << self
# ロケールファイルに定義された、モデルや属性の表示名を取得する。
# 引数は属性名の文字列かシンボル。引数を省略するとモデル名を取得できます。
def label(field=nil)
key = "activerecord."
if field
key << "attributes." << self.name.underscore << "." << field.to_s
else
key << "models." << self.name.underscore
end
return I18n.t key
end
end
end
使い方
Personというモデルに、family_nameという属性がある場合の例。
labelメソッドの引数は属性名を表す文字列かシンボル。引数を省略すると、モデル名が取得できます。
<%= Person.label :family_name %>
わざわざ、ActiveRecord::Baseのメソッドにしなくても、
普通にApplicationHelperに、t_modelメソッドみたいなものを作れば良かっただけの話だな、
と後から気づいたものの、せっかく書いたのでアップします。。