Railsでpathによる言語設定を行う

ゴール

/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") %>

参考サイト

コメント

タイトルとURLをコピーしました