日本語対応のためのGem 'rails-i18n'の使い方
目的
Gem 'rails-i18n'を使って、日本語対応させること。 このGemを導入するときに詰まった部分をメモとして残す。
開発環境
参考資料
[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' %>