オリジナルアプリ製作中にこの機能の実装をしたかったので、調べて実装してみました。
(間違いありましたらご指摘いただけますと幸いです。)
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)%>
他にもいろいろ方法はあると思うので、ここの部分こうした方がいいよとか楽だよとかあればご共有ください。
よろしくお願いします!!