Tengo el siguiente validación de un modelo:

validates_inclusion_of :whatever, :in => [true, false], :message => I18n.t('please_select_whatever')

Parece que la traducción no funciona en el modo de producción: en todos los idiomas siempre es la traducción al inglés que se presenta mostrada (probablemente porque me puse el inglés como el idioma predeterminado en mi aplicación…?).

Así que estoy asumiendo que no podemos traducir validaciones de los modelos, debido a que los modelos se carga una sola vez – cuando se inicia el servidor (y, a continuación, la configuración regional predeterminada sería aplicada).

Estoy en lo cierto? Si sí, ¿cómo se podría solucionar este problema?

Gracias por su ayuda!

InformationsquelleAutor TomDogg | 2010-12-15

3 Comentarios

  1. 48

    La solución es NO incluir cualquier personalizado mensaje de teclas en los modelos, como…

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

    El modelo se aplica entonces el mensaje por defecto las teclas, por ejemplo «:la inclusión» en el caso de «validates_inclusion_of»

    …y en config/locales/es.yml usted necesita tener:

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

    de referencia, echa un vistazo a los respectivos Rieles de guía:

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

    • Siempre olvido los valores predeterminados para el activerecord mensajes de error (y necesito cada pocos meses o así), afortunadamente Google me ayuda a encontrar esta respuesta una y otra vez!
    • => La mejor forma de abordar este problema es la respuesta por @iain a continuación.
    • Esta no es la dirección de porque OPs solución no funcionó: la traducción fue interpretado cuando el proyecto inicializa, lo que ocurre cada solicitud en dev, pero sólo una vez en el arranque en prod. Para el soporte de múltiples idiomas deben ser interpretados en tiempo de ejecución, que @iain la solución de direcciones. TomDogg la solución sólo funciona si se puede usar el mismo defecto de traducción en cada caso, lo cual no es siempre la mejor experiencia de usuario.
  2. 17

    Puede utilizar los símbolos, para especificar las traducciones:

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

    Y se puede traducir con un ámbito determinado. Ver el I18n guía para obtener más detalles.

    • La parte siguiente «:mensaje =>» debería ser algo a lo largo de las líneas de: I18n.t(‘activerecord.errores.modelos.[model_name].los atributos.[attribute_name]’)
    • No, esto no funciona. Sospecho que en Rails, no es posible tener traducciones en los modelos (ya que sólo se carga una vez).
    • El uso de un Símbolo como lo hice yo y la traducción en el lugar apropiado (como se indica en la guía). No llame I18n.t aquí. Mi ejemplo es el adecuado.
    • Se me olvidó mencionar: estoy en Rails 2.3. Supongo que la solución funciona para Rails 3, pero no para Rails 2.3?
    • Trabaja on Rails 2.2 y arriba y yo sé, porque he contribuido a esa parte.
    • Gracias por volver – Es extraño b/C Cuando lo hago como dices, todavía me «undefined method `select_whatever’ para el modelo…», lo cual me lleva a pensar que Rails no aceptar un símbolo en ese lugar…
    • lo que si tengo que enviar una variable a la i18n de la cadena. por ejemplo, «el valor de %{valor} no es válida» ?

  3. 3

    OK, iain respuesta funciona, pero me tomó mucho tiempo para averiguar dónde debo colocar el :select_whatever.

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

    ACEPTAR su en.yml debería tener este aspecto:

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

Dejar respuesta

Please enter your comment!
Please enter your name here