ActiveScaffoldをgettextで国際化するときにやられたこと
とある理由で、Rails2.0をいじってます。
ActiveScaffoldをRuby-GetTextを使って日本語化しようとして、
以下の情報を参考にやってみた。
何の関連も定義していないモデルは問題なく国際化できたけど、
acts_as_treeを使ってツリー構造になっているモデルを
ActiveScaffoldで表示させようとすると、こんなエラーが発生した。
NoMethodError (You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.include?): /lib/localize_active_scaffold.rb:24:in `translate' /lib/localize_active_scaffold.rb:89:in `as_'
とりあえず、Ruby-GetTextを1.1.0から1.9.0にバージョンアップしてみる。
するとこんなエラー。
NoMethodError (undefined method `textdomainname' for ActionController::Base:Class): /lib/localize_active_scaffold.rb:10 C:/dev/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' C:/dev/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
以下の情報を元に、localize_active_scaffoldにパッチをあてるも
状況は変わらず。
Ruby-GetText 1.90.0 では Rails 1.2.x をサポートしなくなった, Ruby-GetText 1.90.0 で localize_active_scaffold.rb を使う - underscore.jp/diary(2008-02-27)
どうも、acts_as_treeで追加されたchildrenが、
localize_active_scaffoldのas_にnilを渡しており、
例外が出ているようだ。
とりあえず、localize_active_scaffold.rb:24 translateのifに
引数がnilだったらという条件を追加して対応したが、
根本的な対応になっていない。
def self.translate(string_to_localize) if string_to_localize && string_to_localize.include?('|') res = s_(string_to_localize)
どうしたらいいのかな?