rails6 エラーメッセージを日本語化する

rails6でrails-i18nを使用して、バリデーションのエラーメッセージを日本語化するまでの手順を記述してます。Railsのバージョンは6.1.1を使用してます。
環境
- OS CentOS Linux release 7.9.2009 (Core)
- Ruby 2.7.2
- Rails 6.1.1
- rbenv 1.1.2-40-g62d7798
rails-i18nインストール
Gemfileに以下を追加して、
gem "rails-i18n"
インストールを実行します。
bundle install
アプリケーション作成
まずは、scaffoldを使用してアプリケーションの雛形を作成します。
rails g scaffold foo title:string content:text
テーブルも作成しておきます。
rails db:migrate
バリデーション設定
「app/models」配下にある「foo.rb」に以下の内容を追加します。
ここでは、titleを必須項目として未入力にでるエラーを日本語化して表示します。
class Foo < ApplicationRecord
validates :title,
presence: true
end
titleを未入力の状態で「Update Foo」をクリックすると、

エラーメッセージは英語のままとなります。

日本語化
日本語化するには、まず「config/locales」配下に「ja.yml」というファイルを以下の内容で作成します。
ja:
activerecord:
attributes:
foo:
title: タイトル
次に「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
これで後は、railsを再起動すれば日本語化されます。

別の方法
以下のように、カスタムバリデーションを使用して、日本語化する方法もあります。
class Foo < ApplicationRecord
validate :add_error_foo
def add_error_foo
if title.blank?
errors[:base] << "タイトルを入力してください"
end
end
end
-
前の記事
nuget 「リモート名を解決できませんでした。: ‘api.nuget.org’」が発生した場合 2021.02.07
-
次の記事
javascript カンマ演算子の使い方 2021.02.08
コメントを書く