如何根据区域设置更改电子邮件语言格式?

时间:2015-12-02 17:17:55

标签: ruby-on-rails delayed-job

我为各个国家/地区设置了不同的语言环境,我可以为其他人翻译单词,但是如何将其翻译为邮寄者?

application.rb中:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = 'en'
config.i18n.available_locales = ['en', 'fr']

配置/区域设置/邮寄者/ en.yml:

en:
  report_mailer:
    report_review:
      subject: 'Proof:'

配置/区域设置/邮寄者/ fr.yml:

fr:
  report_mailer:
    report_review:
      subject: 'ÉPREUVE:'

在application.rb文件中,我提到locales为:

config.i18n.available_locales = ['en', 'fr']
config.i18n.fallbacks = { 'fr' => 'en'}

如果是邮件,我无法在语言环境设置为 fr 时进行翻译,仍然需要 en

应用程序/邮寄者/ report_mailer.rb:

class ReportMailer < ActionMailer::Base
  after_filter :set_delivery_options
  def set_delivery_options
    if @sender and @sender.use_smtp_settings?
      message.delivery_method.settings.merge!(@sender.smtp_settings.to_settings)
    end
  end
end

应用程序/邮寄者/ report_mailer.rb:

class ReportMailer < ClientMailer
  def client_review(review, requestor, reviewer)
    @review       = review
    @sender       = requestor
    @reviewer     = reviewer 
      mail(
        to:      @reviewer.email,
        subject: t('report_mailer.report_review.subject',
        job:     review.job.name
      ) if !@reviewer.email.nil? && @reviewer.email != ''
  end
end

我的一位大四学生建议将 I18n.default_locale = @ sender.account.locale 或类似set_delivery_options的内容添加到ReportMailer。但是没有帮助我。 所以请帮忙。

1 个答案:

答案 0 :(得分:3)

您可以使用I18n.with_locale方法

public void populateListView()
{
    lbxBugged.Items.Clear();
    SqlCeCommand cm = new SqlCeCommand("SELECT Bug_ID, Bug_Code, Bug_Description, Bug_Author FROM tblBugs ORDER BY Bug_ID ASC", mySqlConnection);

    try
    {
        mySqlConnection.Open();
        SqlCeDataReader dr = cm.ExecuteReader();
        while (dr.Read())
        {
            ListViewItem item = new ListViewItem(dr["Bug_ID"].ToString());
            item.SubItems.Add(dr["Bug_Code"].ToString());
            item.SubItems.Add(dr["Bug_Description"].ToString());
            item.SubItems.Add(dr["Bug_Author"].ToString());

            lbxBugged.Items.Add(item);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error");
    }


}

我使用的是英语,但你只需要在数据库中使用评论员设置