👗

enumでエラーメッセージを日本語化にする

2023/10/03に公開

この記事で分かること

  • モデル・カラムの日本語変換の実装方法
  • エラー文(ja.errors.messages)の対処法

前提条件

  • 投稿ページが実装済み
  • enum_helpが実装済み

完成イメージ

  • Before
    complate_before

  • After
    complate_after

テーブル

table_item

実装手順

  1. モデル名・カラムを日本語化する
  2. エラー文から足らない翻訳箇所を見つける

実装方法

実装手順に沿って紹介します。

1.モデル名・カラムを日本語化する

エラー文を確認したときに、カラム名が日本語化されていないことが分かりました。
よって(ja.yml)から日本語訳を追加します。

locales/ja.yml
 ja:
    enums:
      user:
       position_status:
          normal: "一般"
          company: "企業"
       certification_status:
          unachieved: "未達"
          achieved: "認証"
          admin: "管理者"
       range:
          User: "ユーザー名"
          Item: "商品名/会社名"
      product:
       active_status:
          sale: "販売中"
          limited_time_sale: "期間限定販売"
          end_of_sale: "販売終了"
      item:
       status:
          waiting: "対応待ち"
          keep: "保留中"
          finish: "対応済み"
    activerecord:
        errors:
          messages:
            record_invalid: 'バリデーションに失敗しました: %{errors}'
            restrict_dependent_destroy:
              has_one: "%{record}が存在しているので削除できません"
              has_many: "%{record}が存在しているので削除できません"
+       models:
          product: 商品
+         item: 投稿
        attributes:
          product:
            id: 商品ID
            name: 商品名
            introduction: 紹介文
            price: 値段
            active_status: 販売ステータス
            is_secret: 公開ステータス
            genre: ジャンル
            created_at: 登録日時
            updated_at: 更新日時
            image: 商品画像
+         item:
+           id: 投稿ID
+           title: 商品名
+           body: レビュー内容
+           company: 製造会社
+           area: 購入場所
+           star: 評価
+           status: ステータス

上記のようにモデル名とカラム名を日本語化します。

2. エラー文から足らない翻訳箇所を見つける

error_image

次に長文部分のエラーメッセージを確認します。
確認すると、後半に「ja.errors.messages.not_a_number」と表示されています。
これは「jaファイルのerrors/messages記述欄にnot_a_numberが書かれていないよ」と示されています。
よってjaファイルの必要箇所にnot_a_numberを記述します。

locales/ja.yml
  # jaファイルを開いて
  # (上部略)
  errors: #errorsの
    format: "%{attribute}%{message}" 
    messages: #messagesの
      accepted: を受諾してください
      blank: を入力してください
      confirmation:%{attribute}の入力が一致しません
      empty: を入力してください
      equal_to:%{count}にしてください
      even: は偶数にしてください
      exclusion: は予約されています
      greater_than:%{count}より大きい値にしてください
      greater_than_or_equal_to:%{count}以上の値にしてください
      in:%{count}の範囲に含めてください
      inclusion: は一覧にありません
      invalid: は不正な値です
      less_than:%{count}より小さい値にしてください
      less_than_or_equal_to:%{count}以下の値にしてください
      model_invalid: 'バリデーションに失敗しました: %{errors}'
+     not_a_number: は数値で入力してください #not_a_numberを追加
      not_an_integer: は整数で入力してください
      odd: は奇数にしてください
      other_than:%{count}以外の値にしてください
      present: は入力しないでください
      required: を入力してください
      taken: はすでに存在します
      too_long:%{count}文字以内で入力してください
      too_short:%{count}文字以上で入力してください
      wrong_length:%{count}文字で入力してください

サンプルをコピペしたja.ymlだと必要に応じて、翻訳を増やす必要があると分かりました!

感想

モデル名の部分の日本語化はすぐにできたのですが、エラー文の方は苦戦しました。でもエラー文を落ち着いて読み解き対処すると解決してくれたので、改めてエラー文は重要だと思いました。

この記事をかいた人

https://twitter.com/tya_dwc
23/6/1にDWCに入学し、主にRailsの学習に取り組みました。卒業が近づきこれから何で学習をするか悩んだときに、技術ブログをしようと考えました。初心者ですがよろしくお願いします。

Discussion