Rails 2.1.0でgettextを使えるようにする
最近、gemでRuby on Railsを入れると、長らく2.0.2だったのが2.1.0にバージョンアップしています。しかし、これを入れるとなぜかgettextが使えなくなってしまいます。。
gemで入れたgettextの最新バージョン1.91.0だったのですが、どうやらRails側のインターフェースが変わったようです。
gettext/railsは、ActionView::Baseにfile_exists?というメソッドがあることを想定しているのですが、それがRails 2.1.0では別のクラス(ActionView::TemplateFinder?)に移動してしまったようです。
NoMethodError (undefined method `file_exists?' for #<ActionView::Base:0xac3f94>): /usr/share/jruby-1.1.2/lib/ruby/gems/1.8/gems/gettext-1.91.0/lib/gettext/rails.rb:281:in `render_file' /usr/share/jruby-1.1.2/lib/ruby/gems/1.8/gems/gettext-1.91.0/lib/gettext/rails.rb:279:in `each' /usr/share/jruby-1.1.2/lib/ruby/gems/1.8/gems/gettext-1.91.0/lib/gettext/rails.rb:279:in `render_file' /usr/share/jruby-1.1.2/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/rescue.rb:181:in `rescue_action_locally' /usr/share/jruby-1.1.2/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/rescue.rb:125:in `rescue_action' :Edge Rails and gettext: undefined method file_exists? (NoMethodError) — zargony.com
ググったところ、このサイトで解決策が見つかりました。
config/initializers/gettext.rbに、以下のように記述します。
module ActionView class Base delegate :file_exists?, :to => :finder unless respond_to?(:file_exists?) end endEdge Rails and gettext: undefined method file_exists? (NoMethodError) — zargony.com
これはいわゆるworkaround(回避策)なので、そのうちgettext側に修正が入ると思いますが、日本語対応をgettextで行っている人(特にactionmailerなどを使っている人)はおそらく、Railsを2.1.0にあげた瞬間につまずくところだと思いますので、このworkaroundはかなり役に立つと思います。