35

Bir modelde aşağıdaki doğrulama vardır:Raylar Uluslararasılaştırma (I18n) model validasyonlarda: Olası ya da değil?

çeviri üretim modunda çalışmıyor görünüyor
validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever') 

: Tüm dillerde hep ben varsayılan olarak ingilizce set muhtemelen (diplayed alır ingilizce çeviri var uygulamasındaki yerel ayar ...?).

Bu nedenle, modellerdeki doğrulamaları tercüme edemeyeceğimizi varsayıyoruz çünkü modeller yalnızca bir kez yükleniyor - sunucu önyüklendiğinde (ve sonra varsayılan yerel ayar uygulanacak).

Doğru muyum? Eğer evet ise, bu problemi nasıl çözersiniz?

Yardımlarınız için teşekkürler!

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever 

Ve belli bir kapsamı ile çevrilecektir:

cevap

44

...

:message => I18n.t('activerecord.errors.models.my_model.attributes.whatever.please_select_whatever') 

sonra örneğin varsayılan mesaj anahtarları uygulanır modeli: durumunda "içerme" , başvuru için

en: 
    activerecord: 
    errors: 
     models: 
     my_model: 
      attributes: 
      whatever: 
       inclusion: "Please select whatever." # see default key: "inclusion" 

re göz atın: "validates_inclusion_of"

... ve yapılandırma/yerellerde arasında/en.yml olması gerekir prospektif Raylar kılavuzu:

http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

+0

Her zaman activerecord hata mesajlarının varsayılan değerlerini unutuyorum (ve birkaç ayda bir ihtiyacım var), minnetle Google bu cevabı tekrar tekrar bulmama yardımcı oluyor! –

+0

=> Bu soruna yaklaşmanın en iyi yolu, @iain tarafından verilen cevaptır. –

+1

Bu işlemin nedeni * neden * OPs çözümü işe yaramadı: çeviri, _initialized_ projesinde, dev dosyasındaki her istek olduğunda, ancak yalnızca prod olarak önyüklemede iken yorumlandı. Birden çok dili desteklemek için, _iuntime adresinde yorumlanmalıdır. TomDogg'un çözümü yalnızca her durumda aynı varsayılan çeviriyi kullanabiliyorsanız çalışır, bu her zaman en iyi UX değildir. – Woahdae

16

Sen çeviriler belirtmek için, semboller kullanabilirsiniz. Daha fazla bilgi için I18n guide'a bakın. çözüm modelleri gibi herhangi özel mesajı anahtarlar değil etmektir

+0

parçası ": mesajın =>" çizgisinde bir şey olmalıdır: (I18n.t 'activerecord.errors.models [model_name] .attributes. [attribute_name] ') – TomDogg

+0

Hayır, bu işe yaramıyor. Rails'te, modellerde çeviri yapmak mümkün olmadığından şüpheleniyorum (sadece bir kez yüklendikleri için). – TomDogg

+4

Yaptığım şekilde bir Sembol kullanın ve çeviriyi uygun yere yerleştirin (kılavuzda belirtildiği gibi). Burada I18n'yi arama. Benim örneğim doğru. – iain

1

Tamam, iain cevap çalışır, ama ben :select_whatever koymak nerede anlamaya çok uzun zaman aldı. Tamam

validates_inclusion_of :whatever, :in => [true, false], :message => :select_whatever

senin en.yml gibi görünmelidir: Aşağıdaki

en: 
    errors: 
    messages: 
     select_whatever: "error!!"