🗼

Rails エラーメッセージの日本語化

2023/05/24に公開

はじめに

現在チーム開発中、プログラミング学習2ヶ月目の初学者です🔰

エラーメッセージを日本語化する中でちょっと苦戦したので、
備忘録として残しておきます!
間違いなどあればぜひコメントで教えてください🙆🏻‍♀️

Gemの導入

Gemfile
gem "rails-i18n"

bundle installを忘れずに!

configファイルを編集

以下を記述することで、エラーメッセージが日本語化される!

config/application.rb
 class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.1

+    config.i18n.default_locale = :ja

    # I18nライブラリに訳文の探索場所を指示する
+    config.i18n.load_path += Dir[Rails.root.join('config/locales/*.yml').to_s]

カラム名以外が日本語になっている状況!

カラム名を日本語にする

専用のymlファイルを作成する!

下記のようにモデル、属性、カラム名に分けて記述したら無事日本語になりました🔥
インデントが少しでもズレると変わらないので注意です!!
あと、ja:や models:などの記述は1つで大丈夫です💪🏻

こんな感じで記述!

config/locals/ja.yml
ja:
 activerecord:
   models:
     item: 商品名
     genre: ジャンル名
     shipping_address: 配送先
   attributes:
     item:
       name: 商品名
       description: 商品説明
       price_without_tax: 税抜金額
       genre: ジャンル名
     genre:
       name: ジャンル名
     shipping_address:
       postal_code: 郵便番号
       address: 住所
       name: 宛名
:

このサイトのNG例に注意です!!
https://qiita.com/Keichan_15/items/eae011dccea44abda768

例(配送先)

ちなみにバリデーションはこんな感じ!

app/models/shipping_address.rb
class ShippingAddress < ApplicationRecord

  belongs_to :customer

  #バリデーション設定
  validates :name, :address, presence: true
  validates :address, length: { maximum: 50 }, presence: true
  validates :postal_code, format: {with: /\A\d{7}\z/}, presence: true

コントローラーはこんな感じ!
保存に失敗した場合にrenderの記述がないとエラーメッセージが表示されないです。

controllers/public/shipping_addreses_controller.rb
class Public::ShippingAddressesController < ApplicationController
 def create
    @shipping_address = ShippingAddress.new(shipping_address_params)
    @shipping_address.customer_id = current_customer.id
   if @shipping_address.save
     # 保存に成功した場合の処理
    redirect_to shipping_addresses_path, notice: "配送先を登録しました。"
   else
     # 保存に失敗した場合の処理
     @shipping_addresses = current_customer.shipping_addresses
     render :index
     flash.now[:alert] = "配送先の登録に失敗しました。"
    end
  end

エラーメッセージを呼び出す記述

views/public/shipping_addresses/index.html.erb
<%= render "layouts/error_messages", model: @shipping_address %>

エラーメッセージの部分テンプレート

views/layouts/_error_messages.html.erb
<% if model.errors.any? %>
  <div class="alert alert-danger">
    <ul class="mb-0">
      <% model.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

devise関連の日本語化

config/lacalesディレクトリに、devise.ja.ymlファイルを作成し、
下記の翻訳コードを記述!

https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml

今回は、userではなく、customerで作成しているため、
userのところを下記のように変更!
これもインデントに要注意!

config/locals/devise.ja.yml
ja:devise.ja.yml
  activerecord:
    attributes:
      customer:
        first_name:last_name:furigana_last_name: セイ
        furigana_first_name: メイ
        post_code: 郵便番号
        address: 住所
        telephone_number: 電話番号
        password: パスワード
:

こんな感じでエラーメッセージが無事日本語になリました!

🌱参考にさせていただいた記事

https://qiita.com/RIN_HM/items/8ddf2c9ff95bd7eccce3

https://zenn.dev/machamp/articles/rails-validation-message

https://study-hobby.com/2021/08/27/【rails】バリデーションエラーメッセージを日本語/

https://atsukinoblog.com/エラーメッセージの日本語化/


インデントなど少しでもずれたり記述方法が違うとエラーになってしまうので苦戦しました😂

チーム開発ももう終わりに近づいてきていて、
最初は右も左もわからない状態でメンバーが1人抜けてしまったり
イレギュラーなことも多かったですが、
無事完成できそうで安心しているのと、みんなで作り上げる楽しさを知りました🥹

無我夢中で毎日寝不足でしたが、
ポートフォリオやこれからに活かせるいろんなことが学べたなあ

残りの期間も精一杯頑張ります!🏋🏻パワー

Discussion