Rails4.0.0 で国際化するための方法をまとめます。
app/controllers/application_controller.rb
/en/ , /ja/ のパラメータがあるかないかをみて、なかったらヘッダの Accept Language を見て、それもなかったら application.rb にある言語で表示。
class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_filter :set_locale def url_options { :locale => I18n.locale }.merge(super) end private def set_locale extracted_locale = params[:locale] || extract_locale_from_accept_language I18n.locale = (I18n::available_locales.include? extracted_locale.to_sym) ? extracted_locale : I18n.default_locale end def extract_locale_from_accept_language request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first end end
config/application.rb
config/locales/*/.yml を見る。 デフォルトの言語はja
module MyApp class Application < Rails::Application config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] config.i18n.default_locale = :ja end end
config/routes.rb
/locale/~~ のURLパターンだが、locale指定がなくてもOKなようにする
MyApp::Application.routes.draw do get '/(:locale)' => 'welcome#index' scope "/(:locale)", locale: /en|ja/ do resources :users resource :sessions end end
config/locales/views/ja.yml
en.yml も同じようにセット
ja: view: title: タイトル
app/views/welcome/index.html.erb
<body> <h1><%= I18n.t('view.title') %></h1> </body>
確認
localhost:3000/en/ localhost:3000/ja/ localhost:3000/
のどれでもアクセスできるようになってるはず。
参考もと
http://guides.rubyonrails.org/i18n.html
やはり本家のは内容が深い。