gaku様の備忘録

プログラミングとか、夢と現実と理想とか。。。

railsでdeviseプラグイン使用時、エラーメッセージを日本語化する

Deviseを使用しているとサインアップの内容に誤りがあった場合、以下のようなエラーメッセージを出力してくれる。
f:id:gaku3601:20141004184416p:plain
「2 errors prohibited this user from being saved:」は簡単に修正できる。
/config/locales/devise.en.ymlを以下の様に編集する。

errors:
    messages:
      already_confirmed: "was already confirmed, please try signing in"
      confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
      expired: "has expired, please request a new one"
      not_found: "not found"
      not_locked: "was not locked"
      not_saved:
        #one: "1 error prohibited this %{resource} from being saved:"
        one: "1つのエラーがあります。修正して再度送信して下さい。:"
        #other: "%{count} errors prohibited this %{resource} from being saved:"
        other: "%{count}のエラーがあります。修正して再度送信して下さい。"

このように修正すると先ほどのメッセージが日本語化される。

問題は
・Email can't be blank
・Password can't be blank
の部分。
文書内検索をしてもヒットする件数は0。
どうしたものかとGoogleで検索していると、どうやらActiveRecodeが自動で出力しているということだった。
ということで先ほどのファイルに以下を追加してどうなるか検証。

errors:
    messages:
      already_confirmed: "was already confirmed, please try signing in"
      confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
      expired: "has expired, please request a new one"
      not_found: "not found"
      not_locked: "was not locked"
      not_saved:
        one: "1つのエラーがあります。修正して再度送信して下さい。:"
        other: "%{count}のエラーがあります。修正して再度送信して下さい。"
      taken: "は既に使用されています。"
      blank: "が入力されていません。"
      too_short: "は%{count}文字以上に設定して下さい。"
      too_long: "は%{count}文字以下に設定して下さい。"
      invalid: "は有効でありません。"
      confirmation: "が内容とあっていません。"

f:id:gaku3601:20141004185445p:plain
見事成功。
しかし、EmailとかPaswordConfirmationとか文頭が英語で出てしまう。
まぁ、いいか。。。

■gaku様の一言
結構有益な情報じゃね?
Googleで検索しても英語文献しか出てこないようなのを中心にUPしていこうと思います(´・ω・`)

■参考文献
http://d.hatena.ne.jp/hardcore100/20080214/1202985276