How can I send emails in Rails 3 using the recipient's locale?

Jose picture Jose · Aug 22, 2010 · Viewed 9.9k times · Source

How can I send mails in a mailer using the recipient's locale. I have the preferred locale for each user in the database. Notice this is different from the current locale (I18n.locale), as long as the current user doesn't have to be the recipient. So the difficult thing is to use the mailer in a different locale without changing I18n.locale:

def new_follower(user, follower)
  @follower = follower
  @user = user
  mail :to=>@user.email
end

Using I18n.locale = @user.profile.locale before mail :to=>... would solve the mailer issue, but would change the behaviour in the rest of the thread.

Answer

Miguelgraz picture Miguelgraz · Apr 17, 2013

I believe the best way to do this is with the great method I18n.with_locale, it allows you to temporarily change the I18n.locale inside a block, you can use it like this:

def new_follower(user, follower)
  @follower = follower
  @user = user
  I18n.with_locale(@user.profile.locale) do
    mail to: @user.email
  end
end

And it'll change the locale just to send the email, immediately changing back after the block ends.

Source: http://www.rubydoc.info/docs/rails/2.3.8/I18n.with_locale