venkat
venkat

Reputation: 836

How to change the email language format based on locale?

I am having different locales for countries, i am able to translate words for others but how to translate it for mailers?

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']

config/locales/mailers/en.yml:

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

config/locales/mailers/fr.yml:

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

In application.rb file, I am mentioning locales as:

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

In case of mail, I could not translate when locale is set to fr, still it is taking to en.

app/mailers/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

app/mailers/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 [email protected]? && @reviewer.email != ''
  end
end

One of my senior suggested to add I18n.default_locale = @sender.account.locale or something like that set_delivery_options to ReportMailer. But didn't helped me. So please help.

Upvotes: 0

Views: 900

Answers (1)

AlexLarra
AlexLarra

Reputation: 881

You can use I18n.with_locale method

I18n.with_locale('en') do
  mail(
    to: @reviewer.email,
    subject: I18n.t('report_mailer.report_review.subject'
  )
end

I used english language but you just have to use the reviewer`s set on the database

Upvotes: 3

Related Questions