##目的
Gem 'rails-i18n'を使って、日本語対応させること。
このGemを導入するときに詰まった部分をメモとして残す。
##開発環境
・Ruby 2.6.4
・Rails 5.2.3
##参考資料
Rails 国際化 (i18n) API
[I18n::InvalidLocaleData ロケールファイルを翻訳できない]
(https://qiita.com/niwa1903/items/10154b8cbe1cd0416495)
##導入手順
###①gem 'rails-i18n'をインストールする。
gem 'rails-i18n', '~> 5.1'
$ bundle install
RailsのGemをインストールするときの、いつもの流れです。
###②デフォルトの言語を日本語に設定する。そしてi18nの複数ロケールファイルが読み込まれるようpathを通す。
module App
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
# 2行追記:デフォルトのlocaleを日本語(:ja)にする.
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
end
end
モジュールの中に2行追記してください。この記述がないと、Gemをインストールしても日本語対応してくれないようです。
###③localesフォルダの中にja.ymlファイルを作る
####・modelの日本語対応
ja:
activerecord:
models:
user: 'ユーザー'
board: '掲示板'
attributes:
user:
email: 'メールアドレス'
password: 'パスワード'
password_confirmation: 'パスワード確認'
last_name: '姓'
first_name: '名'
model全体に対応させるときはmodelsの階層を作り、
カラム名を対応させるときはattributesの階層を作ります。
####・view,controllerの日本語対応
ja:
users:
new:
title: 'ユーザー登録'
to_login_page: 'ログインページへ'
create:
success: 'ユーザー登録が完了しました'
fail: 'ユーザー登録に失敗しました'
view/ja.ymlに記述することで、controllerにも適応されます。
ただ、インデントをきっちり2つずつにして階層構造を作らないと、日本語適用されないよう。
ja.ymlの書き方については、以下のRailsガイドの記事が参考になります。
探索の「遅延」(lazy lookup)
###④viewやcontrollerで、設定した日本語を表示させる
ja:
books:
index:
title: "ほげほげ"
上記のような階層構造になっていれば、以下のようにして、app/views/books/index.html.erbビューテンプレート内部でbooks.index.title値にアクセスできます。
<%= t '.title' %> または <%= t ('.title') %>
省略せずに書くと以下になります。
<%= t 'books.index.title' %>
####これでGem 'rails-i18n'を使って、日本語対応できるはずです!