rails2.1.2からrails2.2.3へのアップデート

個人的に作成、使用しているrailsアプリをrails2.1.2からrails2.2.3へアップデートした時の記録。すごーく今更感満載な記事です。。。

gettext-railsが未対応

rails2.2から標準で国際化の仕組みとしてi18nをサポートするようになりました。
さらにgettext-railsはrails2.2はサポートされてないし、特にこだわりがなければrailsの標準の機能をつかっとこうということでi18nへ変更しました。

gettextの呼び出しを削除

config/environment.rbを修正

config.gem "gettext", :lib => "gettext/rails" # これを削除

app/controller/application.rbを修正

init_gettext "personal_management"     # これを削除
i18n_generatorsをインストールする

バージョンは1.1.0を指定する。environment.rbのconfig.gemに指定してはいけない。i18n_generatorsのload errorになる。

gem install i18n_generators -v1.0.0 --no-rdoc --no-ri
script/generate i18n ja
とりあえずgetttextの_メソッドをi18nのtメソッド等に置き替える
  • '_'メソッドとか'N_'メソッドをtメソッドに変更する。
  • '_'メソッドは固定的に翻訳するだけのメソッドで
  • 'N_'メソッドは翻訳文字列に動的に文字列を入れている。

i18nで動的に文字列を入れこむには

t('view.hello_rails', :hoge => 'ほげ')

とやって

view:
  hello_rails: '%{hoge}こんにちわrails'

とオプション引数を設定して、翻訳ファイル上に%{option_key}と書く。ただし、これはrails2.3以上の機能なので、2.2では動的に変更することはあきらめる。

rails2.2はあくまでもrails2.3へのステップアップバージョン。まぁテストが通ればいい。

untranslateを使用している箇所を削除する

エラーメッセージにはActiveRecordのメソッドっぽいのが出ていたけど
gettextで翻訳対象か否かのメソッドなので、こいつを宣言しているモデルは単純にconfig/localesの翻訳ファイルに入れなければいいだけ。

反省

たぶん、国際化の部分をi18nにする以外の部分は何も触らなくてもアップデートは可能です。
gettext-railsもrails2.3にすると対応しているバージョンが存在するし、すでにrails自体のバージョンが3系になっている現在、rails2.2を経由する必要はなく、rails2.1からrails2.3へアップデートしても問題は無いと思います。