質問: deviseのメッセージが日本語化できなくて困っています。 認証が必要なアクションを作り、未認証状態でアクセスしたところ、Authorized users only.というように英語のエラーメッセージが返ってきてしまいます。 以下が、その再現です。 ``` curl -X POST http://192.168.100.100:3000/api/schedules/ -d "body=hogehoge&user_id=-1" {"errors":["Authorized users only."]} # <= 日本語化したい ``` どうすれば日本語化できるかご教示ください。 自身が気づいた点としては、後述のdevise.ja.ymlで、Authorized users only.に対する日本語訳が無いのだと思います。この点についても何かご存知でしたらご教示ください。よろしくおねがいします。 --- なお、deviseの設定は以下のページを参考にしました。 まずこちらのページを参考にしてdeviseを導入しました。認証が必要なアクションには、以下のように before_action :authenticate_user! を付けました。 ``` class ApplicationController < ActionController::Base before_action :authenticate_user! ... end ``` また、こちらのページを参考にしてconfig/locale/devise.ja.ymlを所定のディレクトリに配置しました。config/application.rbも参考ページ通りです。 --- (追記) 自分はdeviseとdevise_token_authというgemを使っていたのですが、gemの実装の中に"Authorized users only."というエラーメッセージがベタ書きされてました。これを編集すれば、思い通りのメッセージになりました。 いじったファイルは以下です。 /usr/local/var/rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/devise_token_auth-0.1.39/lib/devise_token_auth/controllers/helpers.rb テスト結果は以下です。 ``` curl -X POST http://192.168.100.100:3000/api/schedules/ -d "year=2017&month=12&day=31&user_id=1" {"errors":["認証が必要です。"]} ```
回答: 対応としては、config/locales/ja.ymlに ``` ja: activerecord: models: book: 本 user: ユーザー attributes: book: title: 作品名 author: 著者名 created_at: 登録日時 updated_at: 更新日時 user: email: メールアドレス password: パスワード password_confirmation: 確認用パスワード current_password: 現在のパスワード errors: messages: invalid: "が不正な値です。" confirmation: "が一致しません。" accepted: "を承諾してください。" empty: "が記入されていません。" blank: "が記入されていません。" inclusion: "は一覧にありません。" exclusion: "は予約されています。" too_long: "は%{count}文字以内で記入してください。" too_short: "は%{count}文字以上で記入してください。" wrong_length: "は%{count}文字で記入してください。" taken: "はすでに使用されています。" not_a_number: "は数値で入力してください。" greater_than: "は%{count}より大きい値を指定してください。" greater_than_or_equal_to: "は%{count}以上の値を指定してください。" equal_to: "は%{count}を指定してください。" less_than: "は%{count}より小さい値を指定してください。" less_than_or_equal_to: "は%{count}以下の値を指定してください。" ``` みたいに書きます。 基本的に[英語: 日本語]の形式に書いていきます。 githubのrails-i18nを参考にするといいと思います。 ちなみにactiverecord:とerrors:の間にmodelで定義しているテーブルの情報を記述します。