問題
最近またオリジナルアプリを開発し始めた。
deviseでセッションまわりを実装していると
エラーメッセージが英語なのが気になったので、
日本語に治そうとdevise.ja.ymlを作成したが
うまく適用されない。
理由は単純
deviseのエラーメッセージを表示するためのテンプレート
views/devise/shared/error_messages.html.erbを見てみると、
<%= I18n.t("errors.messages.not_saved",
count: resource.errors.count,
resource: resource.class.model_name.human.downcase)
%>
とある。
I18nのtranslateというメソッド(ここではt)を使っていることがわかるので、
I18nを導入していなければならない。
解決策
rails newをしただけではGemfileに標準でi18nのgemが入っていないので、
インストールして設定する必要がある。
1. 以下をGemfileに追記し、bundle installする
Railsが5.0系バージョンのとき
gem 'rails-i18n', '~> 5.1'
Railsが4.0系バージョンのとき
gem 'rails-i18n', '~> 4.0'
2. config/application.rb に以下を追加する。
config.i18n.default_locale = :ja
私はこれだけで十分でしたが、以下も追加する必要があるらしい。
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
Rails.rootにconfig/localesディレクトリ配下のrbファイルもしくはymlファイルを登録し、
i18nで読み込むように設定するってことかな。。
module アプリ名
class Application < Rails::Application
config.i18n.default_locale = :ja
# 以下必要に応じて
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
end
end
これで解決〜