ruby-on-rails-3 – Ruby on Rails 3.2 Mailer,本地化邮件主题字段

我目前正在编写RoR 3.2中的邮件程序,它将发送应根据用户语言进行本地化的邮件.我设法渲染了正确的本地化视图,但是我在某些需要更改区域设置的字段(如主题)方面遇到了一些困难.
我已经阅读了一些反对在发送电子邮件之前更改语言环境的帖子.用户有许多不同的语言,这意味着每次向用户发送电子邮件时都要更改我的语言环境.

我知道可以更改区域设置,发送电子邮件,更改区域设置.这不像铁路的方式.这样做有正确的方法吗?

这是一个片段:

class AuthMailer < ActionMailer::Base
  add_template_helper(ApplicationHelper)
  default :from => PREDEF_MAIL_ADDRESSES::System[:general]

  [...]

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

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

  [...]
end

我的看法

auth_mailer
  invite.en.html.erb
  invite.en.text.erb
  invite.it.html.erb
  invite.it.text.erb
  ...

简而言之,在这种情况下,我想使用@locale本地化:subject,而不是通过运行:I18n.locale = locale

解决方法

可以暂时更改全局区域设置.有一个方便的I18n.with_locale方法.此外,ActionMailer会自动翻译主题.
class AuthMailer
  def invite(address,:locale => locale)

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

在语言环境中:

en:
  auth_mailer:
    invite:
      subject: Invitation

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...