ruby on rails 3 - Rails i18n: cambiando de.errors.format: "%{attribute}%{message}" no tiene efecto
activeadmin datepicker (1)
Usamos algunas validaciones auto escritas para nuestras aplicaciones. Estos no usan uno de los ya traducidos como ''vacío'' o ''inválido''. Están formateados por la forma predeterminada "% {attribute}% {message}"
Sin embargo, nuestros clientes exigen formatearlos en "% {attribute} : % {message} . ", Solo algunas puntuaciones agregadas.
Estos son los mensajes de error en el cliente i18n:
errors:
models:
foo:
attributes:
bar:
steak_missing: sie haben Ihr Schnitzel vergessen
beer_missing: sie haben Ihr Bier vergessen
Llevando a feo
Bar sie haben Ihr Schnitzel vergessen
Dado que estos pueden estar encadenados, necesitamos tenerlos así:
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 mensajes de error (predeterminados)?
Si entiendo correctamente su pregunta, utiliza algo como esto en sus formularios:
<%= f.semantic_errors :bar %>
Para cambiar el comportamiento de los semantic_errors
, puedes aplicar un parche mono a este método. Para hacer esto simplemente agregue 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á la siguiente cadena para dos errores:
Bar: sie haben Ihr Schnitzel vergessen und sie haben Ihr Bier vergessen.
Si hay más errores, producirá algo como:
Importe: no es un número, no puede estar en blanco y es demasiado corto (mínimo 2 caracteres)
Puedes resaltar 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 que produce cadena de errors
finales.