💭

[Rails]エラーメッセージを日本語にする

に公開

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

1. config/application.rbの設定

config.i18n.default_locale = :ja」を追加する。

module アプリケーション名
  class Application < Rails::Application
    config.load_defaults 6.1

    # デフォルトのロケールを日本語に設定
    config.i18n.default_locale = :ja
    # config.i18n.default_locale = :enだと英語設定
  end
end

2. Gemfileを追加

https://github.com/svenfuchs/rails-i18n/tree/master
rails-i18n」という日本語対応のGemfileを導入する。

gem 'rails-i18n'
bundle install

ここまでが翻訳ファイルを読み込む設定!あとは翻訳ファイルを作成する。


3. 日本語翻訳用ファイルを作成

config/locales 内に ja.ymlファイルを作成する。

ja:
  activerecord:
    models:
      task: "タスク"
      user: "ユーザー"
    attributes:
      task:
        title: "タスク名"
        keyword1: "キーワード1"
        keyword2: "キーワード2"
        keyword3: "キーワード3"
      user:
        name: "名前"
        email: "メールアドレス"
      group:
        name: "グループ名"
        image: "画像"
        summary: "概要"
    errors:
      messages:
        blank: "を入力してください。"
        invalid: "が不正です"
        too_long: "は%{count}文字以内で入力してください。"
        too_short: "は%{count}文字以上で入力してください。"

  views:
    pagination:
      previous: "<<"
      next: ">>"

参考文献(エラーメッセージの日本語化対応)

https://qiita.com/tkm2933/items/ba80807ba805062049ec
https://plog.kobacchi.com/error-message-localizing-into-japanese/
https://www.youtube.com/watch?v=Ij1p4U587HM

YAMLファイルとは?

YAML(ヤムル、またはワイエーエムエル)は、設定ファイルとしてよく使われるデータフォーマット。
拡張子は .yaml.yml 。環境設定やアプリの設定を管理するのに便利。

YAMLの特徴

  • シンプルな書き方
    key: value の形式(このキーに対してこの設定値が使える)で記述し、リストは - を使う
  • スペースでインデント
    インデントにはタブではなく スペース を使うルール。ズレると正しく動かないので注意!
  • 親要素でまとめられる
    グループ化してデータを整理できる。
key: value
student:
  - "山田太郎"
  - "田中太郎"
  - "佐藤太郎"

このように key: value 形式で書き、リストは - を使って並べる。

設定ファイルはJSONで書くこともできるが、YAMLの方が簡単で人間にとって読みやすい。
YAMLとJSONは使う場面が違う。

  • YAML
    • 設定ファイル、定義ファイルとしてよく使われる
    • 環境ごとにDBの接続先・ストレージのURLが違うことがある、環境構築の定義ファイルなど⇒こういう設定はYAML形式で書いてある
  • JSON
    • システム間のデータの受け渡し
項目 YAML JSON
用途 設定ファイル データのやりとり
書きやすさ シンプルで直感的 カンマやクォートが多く書くのが面倒
人間の読みやすさ 読みやすい 機械向けで読みにくい

参考文献(YAMLファイル)

https://www.youtube.com/watch?v=UaLK3YAYT0A
https://www.youtube.com/watch?v=rpbq6vXcNbM&t=276s

今回起きたエラー

エラーメッセージを統一させる

app/views/public/shared/_error_messages.html.erb などを使用してエラー文の書き方を統一させる。
いろんなところにバラバラの書き方をした結果、下記の通りエラー文が表示されなかったり、重複して表示される不具合が起きた。

以下は app/views/public/shared/_error_messages.html.erb のコード。

<% if resource.errors.any? %>
  <div class="new-error-message" id="error_explanation">
    <b class="title"><%= pluralize(resource.errors.count, '件のエラーが発生しました。') %></b>
    <ul>
      <% resource.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

以下は /app/views/public/users/edit.html.erb のコード。

<div class="main-title">
  <h4><i class="fa-solid fa-user"></i>ユーザー編集画面</h4>
</div>

<%= render "public/shared/error_messages", resource: @user %>

<div class="index-results">
  <div class="index-card">
    <div class="index-header">
      <%= form_with model:@user do |f| %>
        <p>
        <b>プロフィール画像</b><br>
        <%= f.file_field :image, accept: "image/*" %>
        </p>
        <div class="form-field">
          <b>ユーザー名</b>
          <%= f.text_field :name, class: "form-input" %>
        </div>
        <div class="form-field">
          <b>メールアドレス</b>
          <%= f.text_field :email, class: "form-input" %>
        </div>
        <div class="form-field">
          <%= f.submit "保存", class: "submit-btn" %>
        </div>
      <% end %>
    </div>
  </div>
</div>

参考文献

https://railstutorial.jp/chapters/sign_up?version=4.2


メンターさんに教えてもらったこと

byebugを使って処理を途中で止めて、どこまで動いてるかチェックする。
byebugは変数の中身を見ることができる。デバッグツールと呼ばれる。

byebug
  def create
    @task = Task.new(task_params)
    @task.user_id = current_user.id
    # ここに追加した!
    byebug
    if @task.save
      flash[:notice] = 'タスクが作成されました。'
      redirect_to task_path(@task.id)
    else
      flash.now[:alert] = 'タスクの作成に失敗しました。'
      @new_task = @task  
      @tasks = Task.page(params[:page])
      render :index
    end
  end

上記だと、@task.user_id = current_user.idまでで処理を止める。
ターミナルに(byebug)と出てくるので、どこでエラーが起きているか一行一行処理内容を見ていく。


参考文献(byebug)

https://qiita.com/shinpachix/items/b9b8d952570780bfdaa7
https://zenn.dev/cyaroya/articles/114430907f7b31

Discussion