Rails アジャイル本 第13章 タスクI:国際化(ロケールの追加)

商品テーブル products にロケールの列 locale を追加するマイグレーションを作成する。

$ ruby script/generate migration add_locale_to_product locale:string
      exists  db/migrate
      create  db/migrate/20100329045143_add_locale_to_product.rb

マイグレーションを実行する。

$ rake db:migrate
(in /Users/hoge/rails_prj/depot)
==  AddLocaleToProduct: migrating =============================================
-- add_column(:products, :locale, :string)
   -> 0.0010s
==  AddLocaleToProduct: migrated (0.0012s) ====================================

ビューを locale の表示・入力・変更ができるように修正する。

app/views/products/index.html.erb (表示)

<td class="list-description">
  <dl>
    <dt><%=h product.title %></dt>
    <dd><%=h truncate(product.description.gsub(/<.*?>/, ''), :length => 80) %><br />
    (locale: <%=h product.locale %>)</dd>
  </dl>
</td>

app/views/products/show.html.erb (表示)

<p>
  <b>Locale:</b>
  <%=h @product.locale %>
</p>

app/views/products/new.html.erb (入力)

<p>
  <%= f.label :locale %><br />
  <%= f.text_field :locale %>
</p>

app/views/products/edit.html.erb (変更)

<p>
  <%= f.label :locale %><br />
  <%= f.text_field :locale %>
</p>

locale の入力を必須とするよう、バリデーションに追加する。

app/models/product.rb

validates_presence_of :title, :description, :image_url, :locale

ロケールに一致する商品のみを選択するように Product.find_products_for_sale メソッドを修正する。

def self.find_products_for_sale
  all(:order => "title", :conditions => { :locale => I18n.locale })
end

Rails 2.3.5 で i18n を使ってメッセージを日本語化する
Rails I18n generators でロケールファイルを生成する

RailsによるアジャイルWebアプリケーション開発
Sam Ruby David Heinemeier Hansson Dave Thomas
オーム社
売り上げランキング: 29946
«
»