Observerとgettext/rails

今日、久しぶりに rake updatepo したら、Userモデルのフィールドに関するpoファイルのエントリが消えてしまいました。他の新しく追加した10ほどのモデルに関してはちゃんと抽出されているのに、Userモデルだけスルーされていたのです。
GetText::ActiveRecordParserというクラスのparseメソッドがフィールドを抽出していることまでわかったのですが、なぜUserモデルだけスルーされているのかわからずに1時間ほどはまったのですが、app/models/user.rbでわざと例外を発生させてスタックトレースを見るなどして、どうもconfig/environment.rbの読み込みの段階でUserモデルがロードされてしまっていることが原因らしい、ということがわかりました。
GetText::ActiveRecordParser.parseメソッドは、ファイルをロードする前と後で追加された定数に関してフィールドの抽出を行います。したがって、事前にモデルがロードされているケースでは、そのモデルはパース対象にならない、ということのようです。今回の場合、config/environment.rbの中で

Rails::Initializer.run do |config|
  config.active_record.observers = :user_observer
end

のように、Userモデルにオブザーバを登録していたために、GetText::ActiveRecordParser.target?メソッド中でconfig/environment.rbをrequireした時点でUserモデルがロードされてしまった、ということです。
これを回避するために私がとった策は、

Rails::Initializer.run do |config|
  # config.active_record.observers = :user_observer
end

require 'gettext/rails'
ActiveRecord::Base.observers = :user_observer unless $0 =~ /rake$/

という感じです。
rakeで起動された場合はオブザーバの登録をしないのです。
それだけなら、Initializerブロックの中の、コメントアウトされている行に unless〜 を書いてもいいかもしれませんが、別の理由でそもそもInitializerブロックの中でオブザーバの宣言はできません。
というのも、データベースにない属性をローカライズするなどの理由で、モデルクラス定義中で N_() メソッドを使っている場合があるからです。Initializerブロック中ではまだ gettext/rails が読み込まれていないので、やはりオブザーバ登録の時点でUserモデルが読み込まれ、エラーになります(これに関してはpoファイルの抽出とは関係ないのですが、サーバを再起動して初めて気がつきました)。それなら require 'gettext/rails' を config/environment.rb の最初の方に書けばいいか、というとそれもダメです。エラーメッセージの日本語化が上手くいかなくなります。
そんなわけでgettext/railsはObserverにも対応して欲しいな…という記事でした。

早くも追記

自分にググレカスゆいたいです
http://www.yotabanana.com/lab/20071024.html#p01
あとはモデルクラスで require 'gettext/rails' すればモデル定義中で N_() も使えると。