7

Uygulamalarımız için kendi yazılı değerlendirmeler kullanıyoruz. Bunlar “boş” veya “geçersiz” gibi önceden çevrilmiş olanlardan birini kullanmazlar. , Sadece bazı ekledi: Onlar, varsayılan yöntem "% {nitelik}% {mesaj}" AncakRaylar i18n: de.errors.format değiştiriliyor: "% {attribute}% {message}" uygulamasının etkisi yok

tarafından olustuğu müşterilerimiz içinde "% {mesaj} % {niteliğini}" bunları biçimlendirmek için talep noktalama işaretleri.

errors: 
    models: 
    foo: 
     attributes: 
     bar: 
      steak_missing: sie haben Ihr Schnitzel vergessen 
      beer_missing: sie haben Ihr Bier vergessen 

Öncü çirkin:

Bunlar müşteri i18n hata mesajları olan bu zincirleme edilebilir yana

Bar sie haben Ihr Schnitzel vergessen 

, biz bu gibi onları olması gerekir:

Bar: sie haben Ihr Schnitzel vergessen, sie haben Ihr Bier vergessen. 

Tabanın bu şekilde değiştirilmesi i18n:

errors: &errors 
    format: ! "%{attribute}: %{message}." 

Hiçbir etki göstermiyor. Tamamen ya da başka bir şey yok. formtastic ve semantic_errors kullanıyoruz, (varsayılan) hata iletileri için kendi i18n'sini sağlıyor mu?

+0

Hangi Rails i18n arka ucunu kullanıyorsunuz? Ayrıca, sayfa, eylem veya parça önbelleğe alma etkin mi? – jpgeek

cevap

0

Sorunuzu doğru anlamak - Eğer formlarda böyle bir şey kullanın:

<%= f.semantic_errors :bar %> 

Eğer maymun yama bu yöntem can semantic_errors davranışı değiştirmek için. Bunu yapmak için sadece içeriği ile dosyayı {RAILS_ROOT}/config/initializers/semantic_errors_patch.rb ekleyin: Bu yama formtastic 2.2.1 ve rails 3.2.13 iyi çalışır

Formtastic::Helpers::ErrorsHelper.class_eval do 
    def semantic_errors(*args) 
    html_options = args.extract_options! 
    args = args - [:base] 

    full_errors = args.inject([]) do |array, method| 
     attribute = localized_string(method, method.to_sym, :label) || humanized_attribute_name(method) 
     errors = Array(@object.errors[method.to_sym]).to_sentence 
     errors.present? ? array << [attribute, errors].join(": ") : array ||= [] 
    end 
    full_errors << @object.errors[:base] 
    full_errors.flatten! 
    full_errors.compact! 

    return nil if full_errors.blank? 

    html_options[:class] ||= "errors" 
    template.content_tag(:ul, html_options) do 
     Formtastic::Util.html_safe(full_errors.map { |error| template.content_tag(:li, Formtastic::Util.html_safe(error)) }.join) 
    end 
    end 
end 

.

Bu yama iki hatalar için bir sonraki dizeyi üretecek:

Bar: sie haben Ihr Schnitzel vergessen und sie haben Ihr Bier vergessen. Tutar

: daha fazla hata varsa

gibi bir şey üretecek bir sayı değil boş olamaz, ve çok kısa

(en az 2 karakterdir)

Bu hat üzerinde bu davranışı chenge edebilirsiniz:

errors = Array(@object.errors[method.to_sym]).to_sentence 

@object.errors[method.to_sym] - w hataların toplamıdır hich son errors dizesini üretir.