Railsでi18nの多言語対応(ユーザーが選択した言語を反映)

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のレールにのっただけあって、、、簡単です。。。

やってみてください、では!

Leave a Reply

Your email address will not be published.

CAPTCHA