ボクココ

個人開発に関するテックブログ

Rails4 における 国際化 ( I18N ) 方法まとめ

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

やはり本家のは内容が深い。