Rails 2.3.4 と I18n
2009/08/15
Lighthouse の 2.3.4 milestone によれば、Rails 2.3.4 は今月末(2009年8月31日)のリリース予定だそうです。
で、私にとって嬉しいのが、Ticket #745 への対応が、Rails 2.3.4 に入ったことです。まだ open の状態だけど、パッチはもうできあがっているし、確実にコミットされるはず。
このチケットは、Rails 2.2.2 で導入された国際化(I18n)モジュールのちょっとした不足を補うものです。
config/locals/ja.yml
で次のように書いたとします。
ja: activerecord: attributes: user: name: 名前 phone: 電話番号
すると ERB テンプレートでフォームをこんな風に書きたいですよね。
<% form_for @user do |f| %> <%= f.label :name %>: <%= f.text_field :name %><br /> <%= f.label :phone %>: <%= f.text_field :phone %><br /> <%= f.submit %> <% end %>
でも、これまでは label
メソッドが I18n に対応していなかったので、f.label :name
は「Name」という文字列を返すだけでした。
「名前」を返すのが自然なのに。
Rails 2.3.3 までの実装では、label
メソッドはカラム名を humanize メソッドで変換しているだけ。国際化とは無関係なのです。
だから、次のように書かなくてはなりませんでした。
<% I18n.with_options :scope => [:activerecord, :attributes, :user] do |locale| %> <% form_for @user do |f| %> <%= f.label :name, local.t(:name) %>: <%= f.text_field :name %><br /> <%= f.label :phone, local.t(:phone) %>: <%= f.text_field :phone %><br /> <%= f.submit %> <% end %> <% end %>
Rails 2.3.4 の登場で、かなり記述量が減りますね。
欲を言えば、submit
メソッドが作るボタンの文字列も、翻訳ファイルで指定できるといいのにね。
P.S. 残念ながら Rails 2.3.4 には取り込まれませんでした。マイルストーンが 2.3.5 に変更されています。