LoginSignup
3
0

More than 3 years have passed since last update.

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

Posted at

Rails6.0のエラーメッセージを日本語にする方法を忘れないように記事にします。
間違いなどありましたらご指摘いただければ幸いです。

準備

app/models/post.rb
class Post < ApplicationRecord
 validates :text, :image, presence: true
end

上記は例です。
モデルにバリデーションを設定します。

app/controllers/posts_controller.rb
def create
  @post = Post.new(post_params)
  if @post.valid?
    @post.save
    redirect_to root_path
  else
    render 'new'
  end
end

上記は例です。
コントローラーで保存処理の部分に条件分岐を記載します。
保存できればルートにリダイレクトして、保存できなければ投稿画面に戻る等です。

次にエラーメッセージ用のviewファイルを作ります。
view/layouta配下に_error.html.erbのような名前でファイルを作成します。
部分テンプレートで使いまわせるように_(アンダーバー)を忘れずに。

app/views/layouts/_error.html.erb
<% if model.errors.any? %>
<div class="error">
  <ul>
    <% model.errors.full_messages.each do |message| %>
    <li class='error-message'><%= message %></li>
    <% end %>
  </ul>
</div>
<% end %>

上記のようにどのモデルでも対応できるように<% if model.errors.any? %>と記述します。エラーメッセージをeach domessage`に入れて表示させます。

×××.html.erb
<%= render 'layouts/error', model: form.object %>

エラーメッセージを表示させたい部分には上記のように記述します。
うまく保存の処理ができなかった場合にrenderメソッドで_error.html.erbを呼び出し表示させます。

言語設定

config/application.rb
module <アプリ名>
 class Application < Rails::Application
   # Initialize configuration defaults for originally generated Rails version.
   config.load_defaults 6.0

   # 以下を追加
   config.i18n.default_locale = :ja
  # 省略
 end
end

上記のようにconfig/application.rbconfig.i18n.default_locale = :jaと編集します。

Gemの導入

日本語に対応しているlocaleファイルであるrails-i18nというGemを導入します。
rails-i18n
rails-i18nに登録されている日本語

Gemfile
gem 'rails-i18n'

Gemfileの一番下にgem 'rails-i18n'と記述します。

ターミナル
bundle install

忘れずbundle installしてください。

ここまで実施するとエラーメッセージが「Textを入力してください」みたいに中途半端な日本語で表示されます。
ここから完全に日本語にしていきます。

日本語用localeファイル作成

localeファイルはconfig/locale配下にあります。
デフォルトではen.ymlというファイルがあり、
deviseを導入していればdevise.en.ymlというファイルが存在していると思います。

config/locales配下にdevise.ja.ymlというファイルを作成します。
[devise-i18n]8https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml)
上記のサイトのコードを全てコピーしてdevise.ja.ymlに貼り付けます。
少しでもインデントが変わるとエラーになるため気をつけてください。

このままだと自分で作成したNicknameとかImageとかのカラムはまだ日本語にならないので
新たにja.ymlというファイルをconfig/locale配下に作成します。

config/locale/ja.yml
ja:
 activerecord:
   attributes:
     user:
       nickname: ニックネーム
     tweet:
       text: テキスト
       image: 画像

上記のように自分で作ったカラムをどう表示させたいか記述します。
こちらも少しでもインデントが変わるとエラーになるので注意です。

これで全て日本語化したエラーメッセージできました。

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

ちなみにdeviseでユーザー認証を取り入れている場合は新規登録は元々用意されているもので特に変更しなくてOKですが
ログインについては少し変更が必要みたいです。

app/views/devise/sessions/new.html.erb
<div class="contents row">
  <div class="container">
    <div class="new-head">
      <h2>ログイン</h2>
    </div>

    # 以下を追加
    <div class='login-flash-message'>
      <%= flash[:notice] %>
      <%= flash[:alert] %>
    </div>
    <%= form_with model: @user, url: user_session_path, id: 'new_user', class: 'new_user', local: true do |f| %>
    # ここまで追加
  # 省略

上記のようにviewを変更することで対応できます。

以上です。

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0