2008-02-27 (Wed)

_ Ruby-GetText 1.90.0 では Rails 1.2.x をサポートしなくなった

なんの気無しに Ruby-GetText を 1.10.0 -> 1.90.0 に gem update すると、Rails 1.2.6 で作ったアプリで gettext が効かなくなっていた。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/44559

  • Ruby on Rails 2.0をサポートしました。(Rails 1.2.xは対象外とします)

との事なので、RAILS_ROOT/config/environment.rb で "gettext/rails" を require している行の直前に以下の行を追加。

  # Include your application configuration below
+ gem "gettext", "1.10.0"
  require "gettext/rails"

システムに gettext 1.10.0 がインストールされていない場合や、早まってアンイソストロールアンインストールしてしまった場合は、コマンドラインから以下のコマンドを実行。(バージョン指定付きで Ruby-GetText をインストール)

gem install gettext -v 1.10.0

_ Ruby-GetText 1.90.0 で localize_active_scaffold.rb を使う

activescaffold を手軽に日本語化するのに便利な localize_active_scaffold.rb も、同様に Ruby-GetText を 1.90.0 に update すると動かなくなってしまった。

どうやら 1.90.0 では ActionController::Base.textdomainname というメソッドが無くなってしまったようなので、以下の場当たりパッチ。

@@ -7,7 +7,11 @@
   include GetText

   # [09-12-07] changed to use the ActionController textdomainname and removed setting single locale
-  bindtextdomain(ActionController::Base.textdomainname, :path => File.join(RAILS_ROOT, "locale"))
+  begin
+    bindtextdomain(ActionController::Base.textdomainname, :path => File.join(RAILS_ROOT, "locale"))
+  rescue
+    bindtextdomain(ActionController::Base.textdomains.flatten.first, :path => File.join(RAILS_ROOT, "locale"))
+  end

   GT_LOG = Logger.new("#{RAILS_ROOT}/log/gettext.log")
   GT_LOG.level = Logger::WARN

こんな感じですかのう。

本日のツッコミ(全2件) [ツッコミを入れる]
_ ette (2008-04-17 (Thu) 23:01)

loc_stringがnilの場合はnilを返さないとまずいようなので。<br> def as_(loc_string, *args)<br>- LocalizeActiveScaffold.translate(loc_string) % args<br>+ LocalizeActiveScaffold.translate(loc_string) % args if loc_string<br> end<br>が必要かもしれない?(自信ないですが)<br><br>どうも、ActiveScaffold::DataStructures::Column#initializeにてlabelの初期値を定める時、AR#columns_hash(dbのカラムじゃないassociationとかですか)nilをas_に与えてるようで、LocalizeActiveScaffold#translateでnil.include?してしまうようでした。

_ valda (2008-04-18 (Fri) 09:25)

ette さん<br>貴重な情報どうもありがとうございます~