日本語表示にしたい!

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

1.デフォルト言語を日本語に設定 config/application.rbに以下の記述を追記

module 〇〇
  class 〇〇 < Rails::Aplication
    ...
    config.i18n.default_locale = :ja
  end
end

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

# rails5系なら
gem 'rails-i18n', '~> 5.1'

$ bundle

1の設定をしていないと反映されないため注意!!

3.複数のロケールファイルが読み込まれるようpathを通す config/application.rbに以下の記述を追記

module 〇〇
  class 〇〇 < Rails::Aplication
    ...
    config.i18n.default_locale = :ja
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
  end
end

長いやつを記入すると、複数のロケールファイルが読み込まれる。

4.config/locales以下にロケールファイルを配置 views/modelによってロケールファイルを分ける。

config
└── locales
    ├── model.ja.yml  # modelは1つのファイルで管理します。
    └── views         # views関連のファイルはここで管理する
        ├── admin
        │   ├── dashboards
        │   │   └── ja.yml
        │   ├── ja.yml
        │   ├── user_sessions
        │   │   └── ja.yml
        │   └── users
        │       └── ja.yml
        ├── boards
        │   └── ja.yml
        ├── dashboards
        │   └── ja.yml
        ├── password_resets
        │   └── ja.yml
        ├── shared
        │   └── ja.yml
        ├── user_sessions
        │   └── ja.yml
        └── users
            └── ja.yml

各階層ごとにymlをつくる。

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

# ビューはビューを格納しているフォルダ名を起点にし、ビュー名毎に記述する。
# インデント(2space)でpathを制御している

ja:
  users:
    index:
      title: 'ユーザ一覧'
    show:
      # 引数の指定もできる。
      title: '%{user_name}さんのユーザ情報'
    edit:
      # view側で t(.titile), user_name: @user.name みたいな感じで設定できる
      title: '%{user_name}さんのユーザ情報を編集'

modelの日本語化を設定する

# モデルは全て activerecord 以下に記述する。
# これにより、User.model_name.human / User.human_attribute_name({attr_name})で使用可能。

ja:
  activerecord:
    models:
      # view側: User.model_name.human => "ユーザ" / t("activerecord.models.user")と同じ
      user: ユーザー 
      board: 掲示板
    # model毎に定義したいattributesを記述
    attributes:
        user:
          id: ID
          # view側: User.human_attribute_name :name => "名前" / t("activerecord.attributes.user.name")と同じ
          first_name: 名前
          last_name: 姓
          email: メールアドレス
          file: プロフィール画像
          crypted_password: パスワード
  # 全てのmodelで共通して使用するattributesを定義
  attributes:
    created_at: 作成日
    updated_at: 更新日

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

viewで使う場合

# 対応するビューの中ではツリーを省略できる。
# 「ユーザ一覧」が表示される(users.index.titleを参照。)
# 「users.index.html.erb」に記述されているので
# ja.ymlの
# users:
    index:
部分を自動的に読み込んでいるから省略できる
<%= t '.title' %>

# 省略しない記述は以下のようになる。
# 「ユーザ一覧」が表示される
<%= t 'users.index.title' %>


# 日付・時刻(DateオブジェクトやTimeオブジェクト)変換するする場合
<%= l Time.now %>

# 翻訳対象がnilになる(変数とか)場合、defaultを設定しておく
<%= l nil %>
=> I18n::ArgumentError: Object must be a Date, DateTime or Time object. nil given.
↓
↓ nil対策
↓
<%= l nil, default: '' %>
=> ""

# t = translate (config/locales配下の訳文(ja.yml)を参照する)(I18n.t)
# l = localize (DateオブジェクトやTimeオブジェクトを現地のフォーマットに変換する)(I18n.l)

-----------------------------------------------

#### modelで使う場合

# 「ユーザー」が表示される。(activerecord.models.userを参照)
<li><%= User.model_name.human %></li>

# 「ID」が表示される。(activerecord.attributes.user.idを参照)
<li><%= User.human_attribute_name(:id) %></li>

# 「メールアドレス」が表示される。(activerecord.attributes.user.emailを参照)
<li><%= User.human_attribute_name(:email) %></li>

参考 https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5