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

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