ゴール
/books/new # 日本語ページ
/en/books/new # 英語ページ
でアクセスできる。
やること
config/routes.rbに以下を追加。localeをパスに含めても含めなくてもアクセスできるようになる。jaは不要ならつけない。
scope "(:locale)", locale: /en|ja/ do
resources :books
end
config/initializers/locale.rbに以下を記述する。
I18n.available_locales = [:en, :ja]
I18n.default_locale = :ja
application_controller.rbに以下を追加。
class ApplicationController < ActionController::Base
around_action :switch_locale
def switch_locale(&action)
locale = params[:locale] || I18n.default_locale
I18n.with_locale(locale, &action)
end
end
これで言語設定を切り替えることができる。コントローラでputs localeでログを出すと実際に切り替わっていることがわかる。/en/をつけるとlocaleが:enになっている。つけないとデフォルトの:jaになる。
言語切り替えボタンをつける
ユーザーが言語を切り替えられるように切り替え用のボタンをヘッダーにつける。English/日本語とか。
<%= link_to 'English', url_for(locale: :en) %>
<%= link_to '日本語', url_for(locale: nil) %>
ymlファイルの作成
config/locales/en.yml
en:
hello: "Hello world"
config/locales/ja.yml
ja:
hello: "こんにちは"
表示
言語を切り替えたいerbファイルで
<%= t("hello") %>
コメント