2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Rails5] deviseの日本語化について(devise.ja.ymlを入れても効かないとき)

Last updated at Posted at 2019-03-20

問題

最近またオリジナルアプリを開発し始めた。

deviseでセッションまわりを実装していると
エラーメッセージが英語なのが気になったので、
日本語に治そうとdevise.ja.ymlを作成したが
うまく適用されない。

理由は単純

deviseのエラーメッセージを表示するためのテンプレート
views/devise/shared/error_messages.html.erbを見てみると、

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

これで解決〜

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?