【Rails】Railsの日本語化

# 目的
Railsの作成済みアプリを日本語化する。
また、導入した`devise`も同様に日本語化する。

# 開発環境
macOS: *Big Sur*
Rubyバージョン: *2.6.5*
Railsバージョン: *6.0.0*

# 前提
- アプリが作成されている。
- `devise`が導入されている。
[【Rails】ユーザー管理機能(devise)の導入](https://qiita.com/oak1331/items/0759bd297e9fd3b81ed2)
- アプリ名は`test-app`とする。

# 手順

1. [application.rbの設定](#applicationrbの設定)
1. [Gemのインストール](#gemのインストール)
1. [devise.ja.ymlの編集](#devisejaymlの編集)

# application.rbの設定

以下のように必要な記述を追記していきます。

```ruby:config/application.rb
#省略

module TestApp
  class Application < Rails::Application
    config.load_defaults 6.0

    config.time_zone = 'Tokyo'
    config.active_record.default_timezone = :local
    config.i18n.default_locale = :ja
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

#省略
  end
end
```

デフォルトの設定だと`config/localesに存在する.ymlファイル`しか読み込みませんが、
`config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]`という記述により、
下記のように`config/locales以下のすべてのディレクトリに入ってる.yml`を読み込むようになります。

```:ディレクトリ例
config
└── locales
    ├── 00_model.ja.yml
    └── 01_views
        └── users
            └── ja.yml
```

以上で`application.rb`の設定は完了しました！

# Gemのインストール

続いてGemのインストールです!

Gemfileに必要なGemを追記します。

```ruby:Gemfile
# 省略

gem 'rails-i18n', '~> 6.0'
gem 'devise-i18n'
gem 'devise-i18n-views'
```

```:ターミナル
% bundle install
```

```:ターミナル
% rails s
```

これで必要なGemがインストールできました!

# devise.ja.ymlの編集

最後にdeviseの日本語化です。
`devise.ja.yml`を作成し、下記のように記述します！

```:devise.ja.yml
ja:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              taken: "は既に使用されています。"
              blank: "が入力されていません。"
              too_short: "は%{count}文字以上に設定して下さい。"
              too_long: "は%{count}文字以下に設定して下さい。"
              invalid: "は有効でありません。"
            password:
              taken: "は既に使用されています。"
              blank: "が入力されていません。"
              too_short: "は%{count}文字以上に設定して下さい。"
              too_long: "は%{count}文字以下に設定して下さい。"
              invalid: "は有効でありません。"
              confirmation: "が内容と合っていません。"
            name:
              blank: "が入力されていません。"
    attributes:
      user:
        current_password: "現在のパスワード"
        name: "名前"
        nickname: "ニックネーム"
        email: "メールアドレス"
        password: "パスワード"
        password_confirmation: "もう一度パスワードを入力してください"
        remember_me: "次回から自動的にログイン"
    models:
      user: "ユーザー"
  devise:
    confirmations:
      new:
        resend_confirmation_instructions: "アカウント確認メール再送"
    mailer:
      confirmation_instructions:
        action: "アカウント確認"
        greeting: "ようこそ、%{recipient}さん!"
        instruction: "次のリンクでメールアドレスの確認が完了します:"
      reset_password_instructions:
        action: "パスワード変更"
        greeting: "こんにちは、%{recipient}さん!"
        instruction: "誰かがパスワードの再設定を希望しました。次のリンクでパスワードの再設定が出来ます。"
        instruction_2: "あなたが希望したのではないのなら、このメールは無視してください。"
        instruction_3: "上のリンクにアクセスして新しいパスワードを設定するまで、パスワードは変更されません。"
      unlock_instructions:
        action: "アカウントのロック解除"
        greeting: "こんにちは、%{recipient}さん!"
        instruction: "アカウントのロックを解除するには下のリンクをクリックしてください。"
        message: "ログイン失敗が繰り返されたため、アカウントはロックされています。"
    passwords:
      edit:
        change_my_password: "パスワードを変更する"
        change_your_password: "パスワードを変更"
        confirm_new_password: "確認用新しいパスワード"
        new_password: "新しいパスワード"
      new:
        forgot_your_password: "パスワードを忘れましたか?"
        send_me_reset_password_instructions: "パスワードの再設定方法を送信する"
    registrations:
      edit:
        are_you_sure: "本当に良いですか?"
        cancel_my_account: "アカウント削除"
        currently_waiting_confirmation_for_email: "%{email} の確認待ち"
        leave_blank_if_you_don_t_want_to_change_it: "空欄のままなら変更しません"
        title: "%{resource}編集"
        unhappy: "気に入りません"
        update: "更新"
        we_need_your_current_password_to_confirm_your_changes: "変更を反映するには現在のパスワードを入力してください"
      new:
        sign_up: "アカウント登録"
    sessions:
      new:
        sign_in: "ログイン"
    shared:
      links:
        back: "戻る"
        didn_t_receive_confirmation_instructions: "アカウント確認のメールを受け取っていませんか?"
        didn_t_receive_unlock_instructions: "アカウントの凍結解除方法のメールを受け取っていませんか?"
        forgot_your_password: "パスワードを忘れましたか?"
        sign_in: "ログイン"
        sign_in_with_provider: "%{provider}でログイン"
        sign_up: "アカウント登録"
    unlocks:
      new:
        resend_unlock_instructions: "アカウントの凍結解除方法を再送する"
```

これで、日本語になったと思います！

# 最後に

以上で日本語化の実装はできました。
足りない機能は各自編集をお願いします。
では。