# TraducciÃ³n mensajes de validaciÃ³n ActiveRecord

**URL:** <https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124>\
**Category:** ES\
**Created:** [February 20, 2007, 2:09am UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124 "2007-02-20T02:09:14Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![moctan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/48db29/32.png) [@moctan](https://www.ruby-forum.com/u/moctan)\
**Post date:** [February 20, 2007, 2:09am UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124/1 "2007-02-20T02:09:14Z")

</div>

Problema: error\_message\_on NO muestra los mensajes de error para cada  
campo en la vista. No obstante mensajes\_error\_para realiza su tarea  
correctamente, genera un mensaje indicando que no se ha podido  
almacenar.

Siguiendo el procedimiento encontrado aqui [1] :

Primeramente redefino el array que utiliza ActiveRecord, y ademÃ¡s  
nuestra versiÃ³n de error\_messages\_for, creando un archivo en  
lib/traduccion\_validaciones.rb :

module ActiveRecord  
class Errors  
begin  
@@default\_error\_messages = {  
:inclusion =\> “Es obligatorio”,  
:exclusion =\> “Es campo reservado”,  
:invalid =\> “No es vÃ¡lido”,  
:confirmation =\> “No coincide la confirmaciÃ³n”,  
:accepted =\> “Debe ser aceptado”,  
:empty =\> “No puede estar vacÃ­o”,  
:too\_long =\> “Es demasiado largo (%d caracteres como  
mÃ¡ximo)”,  
:too\_short =\> “Es demasiado corto (%d caracteres como  
mÃ­nimo)”,  
:wrong\_length =\> “Debe tener %d caracteres”,  
:taken =\> “Ya existe”,  
:not\_a\_number =\> “No es un nÃºmero”  
}  
end  
end  
end

module ActionView  
module Helpers  
module ActiveRecordHelper  
def mensajes\_error\_para (object\_name, options = {})  
options = options.symbolize\_keys  
object = instance\_variable\_get(“@#{object\_name}”)  
unless object.errors.empty?  
content\_tag(“div”,  
content\_tag(  
options[:header\_tag] || “h2”,  
“El #{object\_name.to\_s.gsub(”\_", " “)} no puede  
crearse”))  
end  
end  
end  
end  
end

Siguiendo con el procedimiento, invocamos el cÃ³digo anterior en  
config/environment.rb, antes de invocar Rails::Initializer :

require File.join(File.dirname( **FILE** ), ‘boot’)

require ‘traduccion\_validaciones’

Rails::Initializer.run do |config|  
.  
.  
.

En \_form.rhtml en la vista :

\<%= mensajes\_error\_para ‘cuenta’ %\>

\<%= error\_message\_on(:cuenta, :banco) %\>Banco  
\<%= text\_field 'cuenta', 'banco' %\>

\<%= error\_message\_on(:cuenta, :banco) %\>Tipo  
\<%= text\_field 'cuenta', 'tipo' %\>

En el modelo :

class Cuenta \< ActiveRecord::Base  
validates\_presence\_of :banco, :tipo  
end

[1] [http://sobrerailes.com/articles/2006/03/18/sudoku-on-rails-v6](http://sobrerailes.com/articles/2006/03/18/sudoku-on-rails-v6)

## Gracias.

Jaime Mora R.

---

<div class="post-metadata">

**Author:** ![moctan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/48db29/32.png) [@moctan](https://www.ruby-forum.com/u/moctan)\
**Post date:** [February 20, 2007, 6:53pm UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124/2 "2007-02-20T18:53:30Z")

</div>

Localization Simplified [1] es lo que necesito para resolver esto ?, QuÃ©  
opinan al respecto, me gustarÃ­a conocer sus comentarios.

[1] [http://www.agilewebdevelopment.com/plugins/localization\_simplified](http://www.agilewebdevelopment.com/plugins/localization_simplified)

## Gracias … saludos

Jaime Mora R.

---

<div class="post-metadata">

**Author:** ![moctan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/48db29/32.png) [@moctan](https://www.ruby-forum.com/u/moctan)\
**Post date:** [February 21, 2007, 9:52am UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124/3 "2007-02-21T09:52:06Z")

</div>

No sÃ© si te estÃ¡s complicando demasiado o no te entiendo bien.

Yo para eso pongo en environment.rb:

ActiveRecord::Errors.default\_error\_messages = {  
:inclusion =\> “no está incluido en la lista”,  
:exclusion =\> “está reservado”,  
:invalid =\> “es inválido”,  
:confirmation =\> “no coincide la confirmación”,  
:accepted =\> “debe ser aceptado”,  
:empty =\> “no puede estar vacío”,  
:blank =\> “no puede estar vacío”,  
:too\_long =\> “demasiado largo (máximo %d caracteres)”,  
:too\_short =\> “demasiado corto (mínimo %d caracteres)”,  
:wrong\_length =\> “longitud inválida (debería ser de  
%d  
caracteres)”,  
:taken =\> “ya existe ese nombre en la base de datos”,  
:not\_a\_number =\> “no es un número”  
}

Con esto los mensajes por defecto salen en espaÃ±ol.

Y si quieres hacer un mensaje para una validaciÃ³n en concreto, pones en  
el  
modelo:

validates\_presence\_of :loquesea, :message =\> “El mensaje que quieras”

---

<div class="post-metadata">

**Author:** ![moctan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/48db29/32.png) [@moctan](https://www.ruby-forum.com/u/moctan)\
**Post date:** [February 21, 2007, 4:52pm UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124/4 "2007-02-21T16:52:22Z")

</div>

Luis V. wrote:

> No sÃ© si te estÃ¡s complicando demasiado o no te entiendo bien.

Gracias Luis. Aprovechando de tu nobleza -:)), Â¿ CÃ³mo puedo traducir los  
mensajes que envÃ­a Rails en la lista resÃºmen de errores ? : “2 errors  
prohibited this cuenta from being saved” y “There were problems with the  
following fields:”

## Gracias por tu valiosa ayuda. Saludos.

Jaime Mora R.

---

<div class="post-metadata">

**Author:** ![moctan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/48db29/32.png) [@moctan](https://www.ruby-forum.com/u/moctan)\
**Post date:** [February 21, 2007, 5:56pm UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124/5 "2007-02-21T17:56:39Z")

</div>

Luis V. wrote:

> Pues asÃ­ lo hice yo.

Solucionado !!!. Por supuesto que me sirve, que tengas un buen dia.

## Gracias … saludos

Jaime Mora R.

---

<div class="post-metadata">

**Author:** ![moctan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/48db29/32.png) [@moctan](https://www.ruby-forum.com/u/moctan)\
**Post date:** [February 21, 2007, 5:15pm UTC](https://www.ruby-forum.com/t/traduccia-n-mensajes-de-validacia-n-activerecord/86124/6 "2007-02-21T17:15:01Z")

</div>

Pues asÃ­ lo hice yo.

En application\_helper:

def error\_messages\_for(object\_name, options = {})  
options = options.symbolize\_keys  
object = instance\_variable\_get("@#{object\_name}")  
if object && !object.errors.empty?  
content\_tag(“div”,  
content\_tag(  
options[:header\_tag] || “h2”,  
“Imposible guardar #{object\_name.to\_s.gsub(”\_", " “)}”  
) +  
content\_tag(“p”, “Los siguientes campos han tenido problemas:”) +  
content\_tag(“ul”, object.errors.full\_messages.collect { |msg|  
content\_tag(“li”, msg) }),  
“id” =\> options[:id] || “errorExplanation”, “class” =\>  
options[:class] || “errorExplanation”  
)  
else  
“”  
end  
end

Espero que te sirva. Un saludo
