この記事では、Railsに同梱されているi18n gemを使ってアプリケーションを多言語化する方法を紹介します。
1. 実行環境
- macOS:12.5.1
- Ruby:3.1.2
- Rails:6.1.7
- i18n:1.12.0
2. 手順
2-1. i18nモジュールの設定
使用する言語のリストとデフォルトで使用する言語を設定します。
config/initializers/locale.rb
に以下を追記します。
# 英語と日本語の利用を許可する I18n.available_locales = [:en, :ja] # デフォルトの言語を日本語にする I18n.default_locale = :ja
2-2. ロケールファイルのダウンロード
使用する言語のデフォルトのロケールファイルをsvenfuchs/rails-i18nからダウンロードします。
日本語
$ curl -s https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -o config/locales/ja.yml
英語
$ curl -s https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/en.yml -o config/locales/en.yml
上記のコマンドによりconfig/locales/ja.yml
とconfig/locales/en.yml
が作成されます。
以降はこれらのファイルに翻訳を追加していきます。
2-3. Active Recordモデルで翻訳を行なう
config/locales/ja.yml
に以下を追記します。
ja: activerecord: models: book: 本 attributes: book: title: タイトル memo: メモ
model_name.human
とhuman_attribute_name
を使ってモデル名とカラム名の訳語を表示します。
Book.model_name.human #=> 本 Book.human_attribute_name(:title) #=> タイトル Book.human_attribute_name(:memo) #=> メモ
config/locales/en.yml
に英訳を追加します。
en: activerecord: models: book: Book attributes: book: title: Title memo: Memo
2-4. その他の翻訳
config/locales/ja.yml
に以下を追記します。
ja: views: common: show: 詳細 title_new: "%{name}の新規作成" controllers: common: notice_create: "%{name}が作成されました。"
I18n.translate
メソッドを使って訳文を参照します。
I18n.translate()
はI18n.t()
またはt()
のように省略可能です。
t('views.common.show') #=> 詳細 t('views.common.title_new', name: Book.model_name.human) #=> 本の新規作成 t('controllers.common.notice_destroy', name: Book.model_name.human) #=> 本が作成されました。
config/locales/en.yml
に英訳を追加します。
en: views: common: show: Show title_new: "New %{name}" controllers: common: notice_create: "%{name} was successfully created."
2-5. URLクエリパラメータでロケールを切り替え
app/controllers/application_controller.rb
に以下を追記します。
class ApplicationController < ActionController::Base around_action :switch_locale def switch_locale(&action) locale = params[:locale] || I18n.default_locale I18n.with_locale(locale, &action) end def default_url_options { locale: I18n.locale } end end
上記の設定により、http://localhost:3000/books?locale=ja
で日本語に、http://localhost:3000/books?locale=en
で英語に切り替えることができます。
default_url_options
により全てのURLのクエリパラメータに自動的にロケール情報が含まれるようになります。
【参考】