りゅうじの学習blog

学習したことをアウトプットしていきます。

i18nによる日本語化対応

こんにちは、りゅうじです。

i18n を使って viewconrtoller に直接文字を入力する事なく日本語表示させる方法を書いていきます。

手順

  1. デフォルトの言語を日本語に設定する
  2. gem 'rails-i18n' をインストール
  3. 複数のロケールファイルに読み込まれる様に path を通す
  4. config/locales 以下にロケールファイルを配置
  5. ja.yml に日本語を設定する
  6. 設定した日本語を表示させる
  7. 様々な記述方法

一つ一つまとめていきます。

1.デフォルトの言語を日本語に設定する

#config/application.rb

#略
Bundler.require(*Rails.groups)

module RunteqNormal
  class Application < Rails::Application
    config.i18n.default_locale = :ja #追記
  end
end

config.i18n.default_locale = :ja を追記します。

2. gem 'rails-i18n' をインストール

Gemfile に追加

#Gemfile
gem 'rails-i18n'

ターミナルで

#ターミナル
$ bundle install --path vendor/bundle

3.複数のロケールファイルに読み込まれる様に path を通す

#config/application.rb

#略
Bundler.require(*Rails.groups)

module RunteqNormal
  class Application < Rails::Application
    #略
    config.i18n.default_locale = :ja
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]#追記
  end
end

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] こちらを追記する事で複数のロケールファイルが読み込める様になります。

また、この設定の変更を反映させるには、サーバーを再起動させる必要があります。

app 以下のコードや config/routes.rb などのファイルは再起動しなくても反映されますが、他のファイルは基本的にはサーバーを起動し直す必要があると覚えておいてください。

4.config/locales 以下にロケールファイルを配置

activerecord はモデル用

views はビュー用

5. ja.yml に日本語を設定する

記述する際のポイント

lazy lookup記法を使用していること

ビューだけでなくコントローラーでも使えるため

https://railsguides.jp/i18n.html#探索の「遅延」(lazy-lookup)

i18nの定義はアンダースコアを用いた snake_case であること。

snake_case とは

小文字で書いて、アンダースコアでつなげる事。

モデルの日本語化を設定する

#config/locals/activerecord.ja.yml
ja:
  activerecord:
    models:
      user: 'ユーザー'
      board: '掲示板'
      comment: 'コメント'
    attributes:
      user:
        last_name: '姓'
        first_name: '名'
        email: 'メールアドレス'
        password: 'パスワード'
        password_confirmation: 'パスワード確認'
        avatar: 'アバター'
        role: '権限'

そしてここの

attributes:
      user:
        last_name: '姓'
        first_name: '名'
        email: 'メールアドレス'
        password: 'パスワード'
        password_confirmation: 'パスワード確認'

この記載でモデルに紐づく場合の form_with model: ~ の中も日本語化できてとても便利です。

user_settions  などのモデルを持たないビューでの form_with ではlavelに対して記述する必要があります。

ビューの日本語化を設定する

#config/locales/views.ja.yml
ja:
  defaults: #すべてのコントローラーで使える
    login: 'ログイン'
    register: '登録'
    logout: 'ログアウト'
  users:
    new:
      title: 'ユーザー登録'
      last_name: '姓'
      first_name: '名'
      email: 'メールアドレス'
    create:
      success: 'ユーザー登録が完了しました'
      fail: 'ユーザー登録に失敗しました'

この様に実際の階層と同様に書きます。

6.設定した日本語を表示させる

わかりやすい様に簡易的に書きます。

モデルで使う場合

#config/locals/activerecord.ja.yml
ja:
  activerecord:
    models:
      user: ユーザ
    attributes:
      user:
        name: 名前

これを表示させる

<%= User.model_name.human #=> "ユーザ" %>

<%= User.human_attribute_name(:name) #=> "名前" %>

ビューで使う場合

#config/locales/views.ja.yml
ja:
  defaults: #すべてのコントローラーで使える
    login: 'ログイン'
    register: '登録'
    logout: 'ログアウト'
  users:
    new:
      title: 'ユーザー登録'
      last_name: '姓'
      first_name: '名'
      email: 'メールアドレス'

対応するビューの中ではツリーを省略できる。 「ユーザ登録」が表示される 「users.new.html.erb」に記述されているので

#config/locales/views.ja.yml
users:
  new:
部分を自動的に読み込んでいるから省略できる
省略した場合
<%= t('.title') %>

省略しない場合
<%= t('users.new.title') %>

どちらでも表示できます。

最後に

読んで頂いた方、ありがとうございました。