Ruby on Rails 3.2 Mailer, localize mail subject field

让人想犯罪 __ 提交于 2019-11-29 06:57:38

It is OK to change the global locale temporarily. There is a handy I18n.with_locale method for that. Also ActionMailer automatically translates a subject.

class AuthMailer
  def invite(address, token, locale)
    @token = token
    @locale = locale
    @url = url_for(:controller => "signup_requests", :action => "new", :token => token.key, :locale => locale)

    I18n.with_locale(locale) do
      mail(:to => address)
    end
  end
end

In the locale:

en:
  auth_mailer:
    invite:
      subject: Invitation

Rails 4 way:

# config/locales/en.yml
en:
  user_mailer:
    welcome:
      subject: 'Hello, %{username}'

# app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
  def welcome(user)
    mail(subject: default_i18n_subject(username: user.name))
  end
end

default_i18n_subject - Translates the subject using Rails I18n class under [mailer_scope, action_name] scope. If it does not find a translation for the subject under the specified scope it will default to a humanized version of the action_name. If the subject has interpolations, you can pass them through the interpolations parameter.

You should be able to pass a locale when you call I18n like so:

mail(:subject => I18n.t("app.invite.subject", :locale => locale), :to => address) do |format|
  format.html { render ("invite."+locale) }
  format.text { render ("invite."+locale) }
end

Remember that the locale variable needs to be a symbol.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!