Railsで日本語でのバリデーションエラーメッセージの出し方

こんにちは!kossyです!

日本株式の売買単位の統一のニュースが出てました。

昔から株持ってる方なんかは、自分の株数が減ってると言って怒る方もいるんですよね。。。
1000株→100株になれば株数は減っても株価は10倍になるわけですから。(詳しくは「株式併合」でググってみてください)
まぁ、それぐらい自分の資産に興味ないってことなのかもしれませんが。





さて、今回はRailsで日本語でのエラーメッセージの出し方をブログに残したいと思います。



環境
Rails 5.1.6
Ruby 2.5.1
haml
MacOS Yosemite





まずは日本語化対応

i18nというプラグインrailsに入っているかどうかを

アプリ名 $ bundle list

コマンドで確認します。

その中に、

* i18n (1.1.0)
(バージョンは環境によって異なります)

とあれば大丈夫です。


各モデルにバリデーションを設定
バリデーションの設定の仕方については
下記の記事が詳しかったです。
qiita.com




application.rbを編集
config/application.rbに、

class Application < Rails::Application
  config.i18n.default_locale = :ja
  config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s]
end

と記載します。



ja.ymlファイルをgithubからダウンロード
github.com

ファイルの置き場所は、config/locales下に置きます。


htmlへの記載

エラーメッセージを表示したいファイル
    %ul
    - @変数名.errors.full_messages.each do |message|
      %li= message

errors.full_messagesで全てのエラーメッセージを配列で取得します。
そして、each文を用いて全て表示するようにしています。


ja.ymlファイルの編集

ja:
  activerecord:
    models:
      モデル名: "モデル"
    attributes:
      モデル名:
        カラム名: 日本語のカラム名
(以下は例)
ja:
  activerecord:
    models:
      review: "レビュー"
    attributes:
      review:
        bookname: "本のタイトル"
        language: "言語"
        level: "レベル"
        content: "本文"

日本語化したいモデルのカラム名を記述しています。



開発環境で確認!
英語表記だった箇所が日本語になっていれば対応完了です。


参考にしたサイト
Railsで日本語化対応にする方法 - Qiita
【Rails】バリデーションのエラーメッセージを表示する - イソップブログ
[初学者]Railsのi18nによる日本語化対応 - Qiita