💭
[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を追加
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: ">>"
参考文献(エラーメッセージの日本語化対応)
YAMLファイルとは?
YAML(ヤムル、またはワイエーエムエル)は、設定ファイルとしてよく使われるデータフォーマット。
拡張子は .yaml
や .yml
。環境設定やアプリの設定を管理するのに便利。
YAMLの特徴
-
シンプルな書き方
key: value
の形式(このキーに対してこの設定値が使える)で記述し、リストは-
を使う -
スペースでインデント
インデントにはタブではなく スペース を使うルール。ズレると正しく動かないので注意! -
親要素でまとめられる
グループ化してデータを整理できる。
key: value
student:
- "山田太郎"
- "田中太郎"
- "佐藤太郎"
このように key: value
形式で書き、リストは -
を使って並べる。
設定ファイルはJSONで書くこともできるが、YAMLの方が簡単で人間にとって読みやすい。
YAMLとJSONは使う場面が違う。
-
YAML:
- 設定ファイル、定義ファイルとしてよく使われる
- 環境ごとにDBの接続先・ストレージのURLが違うことがある、環境構築の定義ファイルなど⇒こういう設定はYAML形式で書いてある
-
JSON:
- システム間のデータの受け渡し
項目 | YAML | JSON |
---|---|---|
用途 | 設定ファイル | データのやりとり |
書きやすさ | シンプルで直感的 | カンマやクォートが多く書くのが面倒 |
人間の読みやすさ | 読みやすい | 機械向けで読みにくい |
参考文献(YAMLファイル)
今回起きたエラー
エラーメッセージを統一させる
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>
参考文献
メンターさんに教えてもらったこと
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)
Discussion