i18nとは
Internationalization、日本語で言う国際化のこと iとnの間が18文字だからこう言うそう。
参考にさせていただいた記事
実際にやったこと
1 デフォルトの言語を日本語に設定する config/application.rbを下記のようにする
require_relative 'boot' require 'rails/all' Bundler.require(*Rails.groups) module BoardApp class Application < Rails::Application config.time_zone = 'Tokyo' ★ config.active_record.default_timezone = :local # アプリケーションが対応している言語のホワイトリスト(ja = 日本語, en = 英語) config.i18n.available_locales = %i(ja en) # 言語ファイルを階層ごとに設定するための記述 ※ config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] # 上記の対応言語以外の言語が指定された場合、エラーとするかの設定(今回は書かなかった) config.i18n.enforce_available_locales = true # 以下の記述を追記する(設定必須) # デフォルトのlocaleを日本語(:ja)にする config.i18n.default_locale = :ja end end
- コメントアウトになっている部分を
#
消して有効にした。 - ★部分…これ記述したらrails sでエラーになりました。確かTOKYOにする前はデフォルトでカナダ?とかになってた気がする。消しても問題なかったですが、コメントアウトがいいかなと思います。
2 gem 'rails-i18n'をインストール
$ gem install rails-i18n
Gemfileに以下を記述
gem 'rails-i18n'
$ bundle install
3 辞書になるファイルを作成する config/localesに多言語設定ファイル(*.yml)を配置する。
locales
├── en.yml
├── ja.yml
└── translation_ja.yml
モデルごとに置くこともできるみたいだけど、よくわからず一個だけ置きました😇 中身はこんな感じ(ja.yml)
ja: view: name: '名前' age: '年齢'
en.ymlはこれの英語バージョン
4 HTMLに埋め込む
t('view.name')
完成🥰
5 動的に切り替える controller/application_controller.rbに以下を設定
class ApplicationController < ActionController::Base before_action :set_locale def set_locale I18n.locale = locale end def locale @locale ||= params[:locale] ||= I18n.default_locale end def default_url_options(options={}) options.merge(locale: locale) end end
上記設定を入れることで、localeを動的に変更します。
config/routes.rbに以下を追記
Rails.application.routes.draw do scope '(:locale)', locale: /#{I18n.available_locales.map(&:to_s).join('|')}/ do # For details on the DSL available within this file, see resources :resource_As end end
動的多言語対応するアクションをscopeで囲むと[domain]/ja/hogehoge/といった記述で表示する言語をパラメタとしてアクションに渡すことができます。渡されたパラメタは、application_controller.rb内で、判断され、対応言語の場合はその言語で画面描画します。(あんまりよくわかってない)
以上!備忘録でした〜🌈