rail3 国際化対応

rais 2.2 から国際化対応が正式採用されたけど、なんか日本語化でいろんなのが出てるっぽい。とりあえず svenfuchs/rails-i18n でいってみよ。:-)

インストールはこんな感じ。

$ gem install i18n thor


APP_ROOT にある Gemfile の最後にこれ(↓)を追記する。

gem 'i18n_generators'


bundle を実行する。gem よりしっかりした依存関係のチェック機構らしい。自分の環境だと complete! って言われた。不足があれば追加してくれるっぽい。

$ bundle install

i18n generator を実行する。config/application.rb を上書きする?って確認されるので 'Y' (overwrite) する。

$ rails generate i18n ja

実行すると config/application.rb のロケールが日本語になる。

config.i18n.default_locale = 'ja'


あと config/locales/ja.yml が追加されてエラーメッセージとか日本語化されてる。こんな感じ。

...
  errors:
    format: "%{attribute} %{message}"

    messages: &errors_messages
      inclusion: "は一覧にありません。"
      exclusion: "は予約されています。"
      invalid: "は不正な値です。"
      confirmation: "が一致しません。"
      accepted: "を受諾してください。"
      empty: "を入力してください。"
      blank: "を入力してください。"
      too_long: "は%{count}文字以内で入力してください。"
      too_short: "は%{count}文字以上で入力してください。"
      wrong_length: "は%{count}文字で入力してください。"
      not_a_number: "は数値で入力してください。"
      not_an_integer: "は整数で入力してください。"
      greater_than: "は%{count}より大きい値にしてください。"
      greater_than_or_equal_to: "は%{count}以上の値にしてください。"
      equal_to: "は%{count}にしてください。"
      less_than: "は%{count}より小さい値にしてください。"
      less_than_or_equal_to: "は%{count}以下の値にしてください。"
      odd: "は奇数にしてください。"
      even: "は偶数にしてください。"
...
おまけ

rails3 になってファイル構成が変わってて困った。APP_ROOT にある Gemfile ってのが増えてる。Bundler ってツール用の設定ファイルで plugin 間の依存関係を辿って環境構築してくれるツールらしい。gem より便利ツールってことで rails3 に採用されたっぽい。こちらさん(↓)が詳しく解説してくれてるよ。:-)


ついでに config/application.rb も増えてる。これも config/environment.rb から独立したものっぽい。

require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(:default, Rails.env) if defined?(Bundler)
module [APP_NAME]
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
  end
end

その分、config/environment.rb がすっきりしたなぁ :-)

require File.expand_path('../application', __FILE__)
[APP_NAME]::Application.initialize!
おまけ2

ロケール指定で言語を切り替える方法が書いてあった。ロケール固定より便利だよね。こんど試してみよ :-)

# app/controllers/application.rb

before_filter :set_locale
def set_locale
I18n.locale = params[:locale]
end

Ruby On Rails 国際標準化機能 I18n その1