schema_commentsアップデート
マイグレーションで、テーブルやカラムにコメントを記述することによって、db/schema.rbをテーブル定義書のようにしちゃうプラグインschema_commentsですが、テーブル、カラムのコメントをI18n用のYAMLにコメントを反映できるrakeタスクを追加しました。
http://github.com/akm/schema_comments
rake i18n:schema_comments:update_config_locale
と一発打つだけで頑張ってマイグレーションに書いていたコメントがモデル名/属性名としてYAMLに反映されます。
これができると、マイグレーションで書いたコメントがそのまま日本語リソースとして使えちゃったりします。
これまではエラーメッセージくらいにしか使われていなかったのですが、Rails2.3.4から labelヘルパーメソッドがi18n対応したそうで、labelを使ってもその翻訳を第2引数に渡す必要があったのですが、その必要もなくなります!これはすごい。この辺については詳しくはこちらのエントリが詳しいです。
http://www.oiax.jp/rails/zakkan/rails_2_3_4_and_i18n.html
追記
いえーい、って思って実際labelに反映されるかどうかを試してみたら、英語のまんまじゃーん!!ソース見たらhumanizeを使う実装のまんま。チケット#745( https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n )をよく見たら、一番最後に
Milestone changed from “2.3.4” to “2.3.5”
と書いてある。
悔しかったので、チケットにあったパッチをざっくり適用するモンキーパッチを書いた。
unless ActionView::Helpers::InstanceTag.instance_methods.include?('to_label_tag_without_i18n') ActionView::Helpers::InstanceTag.class_eval do def to_label_tag_with_i18n(text = nil, options = {}) options = options.stringify_keys tag_value = options.delete("value") name_and_id = options.dup name_and_id["id"] = name_and_id["for"] add_default_name_and_id_for_value(tag_value, name_and_id) options.delete("index") options["for"] ||= name_and_id["id"] if text.blank? content = object.class.respond_to?(:human_attribute_name) ? object.class.human_attribute_name(method_name) : method_name.humanize else content = text.to_s end #content = (text.blank? ? nil : text.to_s) || object_name.classify.constantize.human_attribute_name(method_name) label_tag(name_and_id["id"], content, options) end alias_method_chain :to_label_tag, :i18n end end
僕みたいに2.3.5まで待ちきれないという人はこれをapp/controllers/application_controller.rbの最後にでも追加しておくと良いでしょう。