translation missing: ja~ 系のエラー。日本語、英語どちらも対応させる。


前提知識

なぜこのエラーが出たのか

ja.yml内に、該当する値が存在しないから

以前Fakerを日本語化したため、Railsアプリのデフォルトが日本語になっていた。

application.rb
    config.i18n.available_locales = %i[ja en]
    config.i18n.default_locale = :ja


Rspecを行った。

spec/models./post_spec.rb
 it 'is invalid without a title' do
     post = Post.new()
     post.valid?
     expect(post.errors.messages[:title]).to include('can`t be blank')
  end


エラー発生

 Failure/Error: expect(post.errors.messages[:title]).to 
include('Can not be blank')
expected #<ActiveModel::DeprecationHandlingMessageArray(["translation missing: ja.activerecord.errors.models.post.attributes.title.blank"])> to include "Can not be blank"

大事なところ

translation missing: 
ja.activerecord.errors.models.post.attributes.title.blank"

ja.ymlのja.activerecord.errors.models.post.attributes.title.blankに対する値がないというエラー。

解決方法

ja.ymlにエラーに書かれている内容通りに設定する
"ja.activerecord.errors.models.post.attributes.title.blank"

ja.yml
ja:
  activerecord:
    errors:
      models:
        post:
          attributes:
            title:
              blank: "タイトルが空白です"

rails cで確認してみる

pry(main)> I18n.t("activerecord.errors.models.post.attributes.title.blank")
=> "タイトルが空白です。"

rspecを直す

spec/models./post_spec.rb
 it 'is invalid without a title' do
     post = Post.new()
     post.valid?
     - expect(post.errors.messages[:title]).to include('can`t be blank')
     + expect(post.errors.messages[:title]).to include(I18n.t("activerecord.errors.models.post.attributes.title.blank"))

  end

Rspec無事通りました。

参考:
https://railsguides.jp/i18n.html#%E8%A8%B3%E6%96%87%E3%81%AE%E5%8F%82%E7%85%A7
https://qiita.com/punkshiraishi/items/bdb2d48425782e25eadc
https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5
https://pikawaka.com/rails/i18n