Railsでi18nの多言語対応(ユーザーが選択した言語を反映)
結論
Railsガイドに基本は全て書いてあるので、その通り作成していきます。
全体像としては以下の通りです。
- ユーザーにlangageを保存しておくカラムを持たせておく。
- application.rbに必要な記載を書く。
- application_controller.rbに必要な記載を書く。
手順
ユーザーにlangageを保存しておくカラムを持たせておく
まず、ユーザーが選択した言語を反映するためには、ユーザーに言語設定を持たせておく必要があります。
例えば日本語ならja、英語ならenなどですね。
ユーザーテーブルのカラムにlangageなどのカラムを用意して、そこに言語設定を保存できるようにしておきます。
application.rbに必要な記載を書く
次にapplication.rbに必要な記載をしていきます。
以下のコードを参考にしてください。
application.rb
# デフォルトで使用する言語を指定
config.i18n.default_locale = :ja
# どこに翻訳ファイルがあるかというのを、I18nに教えてあげる
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
# 言語はこれだけだよというのを、I18nに教えてあげる(ホワイトリスト的なもの)
config.i18n.available_locales = %i(ja en)
# ホワイトリストにない言語設定されたら、エラーにする
config.i18n.enforce_available_locales = true
application_controller.rbに必要な記載を書く
最後にapplication_controller.rbに必要な記載を書いていきます。
以下のようなイメージです。
application_controller.rb
around_action :switch_locale # before actionではうまく動きません!
def switch_locale(&action)
locale = current_user.try(:langage) || I18n.default_locale # 現在のユーザーのlangageカラムの値を使ってlocaleを設定するという記述
I18n.with_locale(locale, &action) # with_localeを使うとlocale管理をよしなにやってくれる
end
さすがRailsのレールにのっただけあって、、、簡単です。。。
やってみてください、では!