Deviseを使って送信されるメールのローカライズしたい。
けど、多言語化ファイル(config/locales以下のファイル)を使ったローカライズだと自由度が効かない。
要するに言語ごとにメールのテンプレートを分けたい!
という方のための方法。
Devise の helper を上書き
結論から言うと、テンプレートファイルを呼び出す順番を書き換える。
以下を config/initializers/devise.rb に追記する。
config/initializers/devise.rb
module Devise
module Mailers
module Helpers
protected
def template_paths
template_path = _prefixes.dup
template_path.unshift "#{@devise_mapping.scoped_path}/mailer" if self.class.scoped_views?
template_path.unshift "#{@devise_mapping.scoped_path}/mailer/#{I18n.default_locale}" if self.class.scoped_views?
template_path
end
end
end
end
ポイントは、template_path の先頭にロケール情報を含んだパスを追加する。
例えば、rails generate devise User で users というスコープを作成していて、
標準ロケールを日本語に設定している場合(config.i18n.default_locale = :ja)
追記前
template_paths # => ['users/mailer', 'devise/mailer']
追記後
template_paths # => ['users/mailer/ja', 'users/mailer', 'devise/mailer']
になる。
これで、Devise がメールを送る場合に探し出すテンプレートファイルの順番が
- app/views/users/mailer/ja
- app/views/users/mailer
- devise/mailer
に変わるので、ja ファイルの下に日本語で書かれたテンプレートファイルを置く。
これで、言語ごとにテンプレートファイルを分けることができる。