📖

バリデーションエラーの日本語翻訳について

2024/03/17に公開

内容

PF作成の時にメンターさんに教えて頂いたことをいつもで引き出せるように書いておこうと思います。
やり方ではなく、やらかした事を書き残しておこうと思います。

config/application.rb

    :
module Studyring
  class Application < Rails::Application
    # デフォルトのlocaleを日本語(:ja)にする
    config.i18n.default_locale = :ja
  end
end

まず1点目、rails new で作った後、フォルダ名を変えてしまっていました。
module Studyring ← ここがフォルダ名と同じじゃないと適用されないので、翻訳されませんでした。

studies_controller.rb

    :
    if @study.save
      flash[:success] = "保存しました"
      redirect_to studies_path
    else
      render "new"
    end
    :

2点目、redirect_to と render についてよく分かってなかった。
そもそもrenderじゃないと、バリデーションエラーを表示できないのに、redirect_toを記載してた。

renderだと、指定先のアクションに応じたビューを直接表示するだけなので、creatアクションでrenderされた時は、creatアクションにいる状態で、renderで指定したアクションのビューを表示するという事になる。

その場合、creatのurlを取得する事になるので、表示しているビューと現在のurlが合ってない事になる。
これを回避しようとredirect_toを使ってましたが、そもそも他の方法で回避可能との事。

_errors.html.erb

<% if obj.errors.any? %>
  <div id="error_explanation>
    <ul class="list-unstyled alert alert-danger mt-2">
      <% obj.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>

3点目、errorを表示する部分テンプレートがそもそも間違ってた。
発生したエラーの数を表示してくれるエラー文がずっと翻訳されずに困ってました。

そこで、翻訳されないエラー文を直貼りして調べてみたら、普通に出てきました。
railsは記事が多くて、がさつに調べても出てくれるなと勉強になりました。

結局、不要だと思い消しました。

まとめ

rails-i18n/ja.yml at master · svenfuchs/rails-i18n - GitHub
とりあえずja.ymlを作って、上記をペーストすれば、ほとんどのエラーを翻訳してくれました。

Discussion