rails6 パラメーターで表示する言語を切り替える

rails6でrails-i18nを使用して、パラメーターで表示する言語を切り替えて多言語対応を行うまでの手順を記述してます。Railsのバージョンは6.1.1を使用してます。
環境
- OS CentOS Linux release 7.9.2009 (Core)
- Ruby 2.7.2
- Rails 6.1.1
- rbenv 1.1.2-40-g62d7798
rails-i18nインストール
Gemfileに以下を追加して、
1 |
gem "rails-i18n" |
rails-i18nをインストールを実行します。
1 |
bundle install |
言語切り替え
まず言語を切り替えるため「config/locales」配下に「ja.yml」という名前でファイルを以下の内容で作成します。
1 2 3 4 |
ja: disp: index: title: ユーザ一覧 |
同じ階層にある「en.yml」も編集しておきます。
1 2 3 4 |
en: disp: index: title: User list |
次に「config」配下にある「application.rb」に以下を追加します。
1 2 3 4 5 6 7 8 9 10 11 |
# 言語ファイルのパス I18n.load_path += Dir[Rails.root.join("config/locales/*.{rb,yml}")] # 使用する言語ファイル config.i18n.available_locales = %i(ja en) # 言語ファイルがない場合はエラーを出すか config.i18n.enforce_available_locales = true # デフォルトの言語 config.i18n.default_locale = :ja |
「app/controllers」配下にある「application_controller.rb」に以下の関数を追加して、「locale」パラメーターにより言語を切り替えられるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class ApplicationController < ActionController::Base before_action :set_locale def set_locale I18n.locale = locale end def locale @locale ||= params[:locale] ||= I18n.default_locale end def default_url_options(options = {}) options.merge(locale: locale) end end |
「config」配下の「routes.rb」も対象のページを以下のように、scopeで囲みます。
1 2 3 |
scope "(:locale)", locale: /#{I18n.available_locales.map(&:to_s).join("|")}/ do get "disp", to: "disp#index" end |
これでrailsを再起動すれば、言語の切り替えを行うことが可能です。
Viewで表示
viewで利用する場合は、以下のコードを追加します。
1 |
<%= t(".title") %> |
表示結果「http://localhost/disp」

切り替える場合は、URLにパラメーター
「http://localhost/disp?locale=en」を追加します。

-
前の記事
javascript throwを使って例外を発生させる 2021.02.03
-
次の記事
Ruby 配列の最後に要素を追加する 2021.02.03
コメントを書く