8

Ben devise gem kullanıyorum ve onay postasını çevirmek istiyorum.Kendi posta şablonunu bulun ve yerelleştirin

t("it.really.works") 

Ama ben don: o zaman

I18n.locale = @locale 

Ve:

class LocalizedDeviseMailer < Devise::Mailer 
    def confirmation_instructions(record, locale) 
    @locale = locale 
    super 
    end 
end 

Yani, benim şablonda ben böyle bir şey yapabilirsiniz: Ben zaten kendi şablon ve geçersiz kılınan mailler yöntemi var değişkenimi mailer yöntemine yerel ayar ile nasıl ileteceğimi bilmiyorum. Bunu yapmanın en iyi yolu nedir? Herhangi bir yardım takdir edilecektir.

cevap

1

Bunu yapmanın en kolay yolu, kayıtlara eklemek olduğunu düşünüyorum. Dolayısıyla bunu Kullanıcı bir yerel sütun ekleyebilir veya juste

Yani sadece kaydında bu yerel tanımlamak gerek

Kullanıcı modelinde bir attr_accessor :locale ekleyip posta şablonunun yerelleştirme sunuyor I18n.locale = record.locale

8

bir cihazla birlikte kullanmak "doğal". konuyu yerelleştirilmesine nasıl açıklanabilir

Bu dosyada vasiyetle kaynak kodu

https://github.com/plataformatec/devise/blob/master/lib/devise/mailers/helpers.rb bir göz var

# Setup a subject doing an I18n lookup. At first, it attemps to set a subject 
    # based on the current mapping: 
    # 
    # en: 
    #  devise: 
    #  mailer: 
    #   confirmation_instructions: 
    #   user_subject: '...' 
    # 

Bu da vücut şablon (sizin yerel ayarlar dosyaları eklenecek) başka html.erb olarak lokalize gerektiğini

https://github.com/plataformatec/devise/blob/master/app/views/devise/mailer/confirmation_instructions.html.erb

Dep Yeni kullanıcınız http://yoursite/it/users/sign_up veya http://yoursite/en/users/sign_up (yerelleştirilmiş başvurunuz için normalde rotalarınızda yaptığınız gibi) kullanarak oturum açacaksa sonlandırırsanız, iyi yerelleştirilmiş konu ve postalar (italyanca İngilizce olarak, İngilizce dilinde) gönderilecektir.

+0

Cevabınız için teşekkürler. Ben bu çözümü deniyordum, ancak yolun içinde yerel bir yer bulunmadığında ve şablon özel olduğunda (benim tarafımdan değil, tasarımla sağlanmışsa) başarısız oluyor. Maalesef yönlendirme işlemini değiştiremiyorum. Bu nedenle, kullanıcı modelinde yer işareti eklemek yalnızca tek çözümdür. – zachar

+0

Rotalarınızda varsayılan bir yer belirleme belirtebilirsiniz http://guides.rubyonrails.org/i18n.html 'kapsam "(: yerel)",: locale =>/tr | o/ kaynaklar yapın: Of –

+1

: Kullanıcıların Sonu 've özel şablonu (views' raylar' dan üzerine şablon kütleyi oluşturmak) yerine kullanılır Tabii, ama bu projede bunu yapmaya izin yok. Bu sefer bana bağlı değil. Neyse, yardımın için teşekkürler. Kullanıcı modeline yerel nitelik eklemek zorunda kaldım ve şimdi bir çekicilik gibi çalışıyor. – zachar

6

Kullanıcı modelinize bir locale sütun eklemeniz ve kendi posta makinenizi kullanmanız önerilir. Bu şekilde, kendi stil sayfalarınızı ve from alanlarınızı ayarlamayı veya ek posta eklemeyi planlıyorsanız, daha fazla esnekliğe sahip olursunuz.

class UserMailer < Devise::Mailer 
    default from: "[email protected]" 

    def confirmation_instructions(user) 
    @user = user 
    set_locale(@user) 
    mail to: @user.email 
    end 

    def reset_password_instructions(user) 
    @user = user 
    set_locale(@user) 
    mail to: @user.email 
    end 

    def unlock_instructions(user) 
    @user = user 
    set_locale(@user) 
    mail to: @user.email 
    end 

    private 
    def set_locale(user) 
    I18n.locale = user.locale || I18n.default_locale 
    end 
end 
+1

Bu 3.1rc2 devise için doğru yöntem imzası değil mi? def reset_password_instructions (kullanım, jeton, seçmesi = {}) i sadece son cihazla birlikte uygun imza kullanmak için düzenlenmiş –

+1

@IvailoBardarov –

0

Bir daha yolu başlatıcı eklemektir

Devise.setup do |config| 
    ... 
    config.mailer = "UserMailer" 
    ... 
end 

app/mailers/user_mailer.rb yılında:

config/initializer/devise.rb yılında Ruby < 2.1 için

require 'devise/mailer' 

module Devise 
    class Mailer 
    module Localized 
     %w(
     confirmation_instructions 
     reset_password_instructions 
     unlock_instructions 
    ).each do |method| 
     define_method(method) do |resource, *args| 
      I18n.with_locale(resource.try(:locale)) do 
      super(resource, *args) 
      end 
     end 
     end 
    end 

    prepend Localized 
    end 
end 

Eğer alias_method_chain ile endişe kullanabilirsiniz.

İlgili konular