0
0

More than 1 year has passed since last update.

【Rails】リンクで言語を切り替える方法

Posted at

オリジナルアプリ製作中にこの機能の実装をしたかったので、調べて実装してみました。
(間違いありましたらご指摘いただけますと幸いです。)

1.デフォルトの言語などの設定

application.rb
    config.i18n.available_locales = %i(ja ko)
    #()の中にjaやko等、使用可能な言語の記載を行う
    config.i18n.enforce_available_locales = true
    #enforce_available_localesをtrueにすることで上記以外の言語の際はエラーを発生させることができる
    config.i18n.default_locale = :ja
    #デフォルトの言語を設定する
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] 
    #ymlファイルを読み込む設定をする

2.コントローラー

application.controller.rb
class ApplicationController < ActionController::Base
before_action :set_locale

  def change_locale
    locale = params[:locale].to_sym
    #リクエストのパラメーターで渡された言語を取得し、シンボルに変換(params[:locale]は言語切り替えリンクから送られてくるパラメータ
    locale = I18n.default_locale unless I18n.available_locales.include?(locale)
    #取得した言語が使用可能な言語ではない場合、デフォルトの言語を使用する
    session[:locale] = locale
    #選択した言語をセッションに保存する
    redirect_back(fallback_location: root_path)
    #現在のページにリダイレクトする(これによって言語の切り替えのみが行える)
  end

private

  def set_locale
    I18n.locale = session[:locale] || I18n.default_locale
  end
end

3.ルーティング

route.rb
get 'change_locale/:locale', to: 'application#change_locale', as: :change_locale
#change_locale/:localeの:localeの部分にjaやkoが入る
#ApplicationControllerのchange_localeアクションが実行されるように指示

4.リンクとymlファイルの作成

application.html.erb
<%= link_to "한국어", change_locale_path(:ko) %>
<%= link_to "日本語", change_locale_path(:ja) %>
ja.yml
ja:
  button_topic_create: 'トピックを作成する'
  view topic: 'トピックを見る'
  edit: '編集'
  delete: '削除'
ko.yml
ko:
  button_topic_create: '토픽 만들기'
  view topic: '토픽 보기'
  edit: '편집'
  delete: '삭제'

ボタンや、リンクの文字を翻訳する場合は下記のようにViewを編集する

<%= link_to t('view topic'), topic_path(topic.id)%>
<%= link_to t('edit'), edit_topic_path(topic.id)%>

他にもいろいろ方法はあると思うので、ここの部分こうした方がいいよとか楽だよとかあればご共有ください。
よろしくお願いします!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0