7

Utilizamos algunas validaciones auto por escrito para nuestras aplicaciones. Estos no usan uno de los ya traducidos como 'vacío' o 'inválido'. Ellos están formateados por cierto defecto "% {atributo}% {mensaje}"rieles i18n: cambiar de.errors.format: "% {atributo}% {mensaje}" no tiene ningún efecto

Sin embargo, nuestros clientes demandan para darles formato en "% {atributo} :.% {mensaje} ", sólo algunas añadió Puntuaciones

Estos son los mensajes de error en la i18n cliente:

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

que conducen a la fea:

Bar sie haben Ihr Schnitzel vergessen 

ya que estos pueden ser encadenados, tenemos que tener como esto:

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

Teniendo esto cambiado en la base i18n:

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

No muestra ningún efecto. Tampoco lo elimina totalmente ni nada más. Estamos utilizando formtastic y sus semántica_errors, ¿proporciona su propio i18n para los mensajes de error (predeterminado)?

+0

¿Qué back-end Rails i18n está utilizando? Además, ¿tiene activada la caché de página, acción o fragmento? – jpgeek

Respuesta

0

si he entendido bien su pregunta - que utilice algo como esto en sus formas:

<%= f.semantic_errors :bar %> 

para cambiar el comportamiento semantic_errors que pueda mono-parche de este método. Para ello sólo tiene que añadir el archivo {RAILS_ROOT}/config/initializers/semantic_errors_patch.rb con contenido:

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 

Este parche funciona bien con formtastic 2.2.1 y rails 3.2.13.

Este parche producirá siguiente cadena de dos errores:

Bar: Sie haben vergessen RSI Schnitzel und sie haben vergessen RSI Bier.

Si hay más errores que se producen algo como:

Monto: no es un número, no puede estar en blanco, y es demasiado corto (mínimo es de 2 caracteres)

puede chenge este comportamiento en esta línea:

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

@object.errors[method.to_sym] - es una colección de errores w que producen cadena final errors.

Cuestiones relacionadas