🦁

日本語対応のためのGem 'rails-i18n'の使い方

2022/02/10に公開

目的

Gem 'rails-i18n'を使って、日本語対応させること。
このGemを導入するときに詰まった部分をメモとして残す。

開発環境

・Ruby 2.6.4
・Rails 5.2.3

参考資料

Rails 国際化 (i18n) API

Railsのi18nによる日本語化対応

[I18n::InvalidLocaleData ロケールファイルを翻訳できない]
(https://qiita.com/niwa1903/items/10154b8cbe1cd0416495)

導入手順

①gem 'rails-i18n'をインストールする。

#Gemfile
gem 'rails-i18n', '~> 5.1'
$ bundle install

RailsのGemをインストールするときの、いつもの流れです。

②デフォルトの言語を日本語に設定する。そしてi18nの複数ロケールファイルが読み込まれるようpathを通す。

config/application.rb
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の日本語対応

config/locales/activerecord/ja.yml
ja:
    activerecord:
     models:
       user: 'ユーザー'
       board: '掲示板'
     attributes:
       user:
         email: 'メールアドレス'
         password: 'パスワード'
         password_confirmation: 'パスワード確認'
         last_name: '姓'
         first_name: '名'

model全体に対応させるときはmodelsの階層を作り、
カラム名を対応させるときはattributesの階層を作ります。

・view,controllerの日本語対応

config/locales/view/ja.yml
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'を使って、日本語対応できるはずです!

Discussion