ruby-on-rails - tutorial - rails i18n with parameters
Traducir la asociaciĆ³n de modelo Rails-no funciona (2)
¿Alguien tiene algunos consejos sobre cómo traducir asociaciones de modelos en Rails?
Por ejemplo: Tengo un modelo de persona, que puede tener muchos teléfonos. Sin embargo, una Persona necesita tener al menos un Teléfono. No puedo traducir esa validación. Lo mejor que pude hacer fue esto:
validates_presence_of :phones, :message => "At least one phone is required."
Y en mi YAML, reemplacé esta línea para omitir el %{attribute}
:
format: ! ''%{message}''
De esta forma solo se muestra mi mensaje, y evito que se muestre el nombre del campo sin traducir.
Esto me está causando muchos dolores de cabeza, porque algunas gemas simplemente no me permiten pasar :message => "something describing the error"
, así que quería configurar todos los mensajes de error a través de mi YAML.
Además, con algunos modelos puedo traducir sus atributos, mientras que con otros no. Por ejemplo:
activerecord:
attributes:
additional_info:
account_manager: "Manager"
Esto funciona. Puedo ver en mi formulario "Gerente". Sin embargo, cuando este campo tenga un error, Rails lo mostrará como "Additional info account manager can''t be blank"
.
Intenté esto:
activerecord:
errors:
models:
additional_info:
attributes:
account_manager: "Manager"
Pero sin suerte.
Leí los documentos, pero no tengo idea de por qué está sucediendo.
Rails 3.2 ha cambiado este comportamiento. La forma en que publiqué antes está obsoleta.
Ahora, para traducir asociaciones, existe la necesidad de agregar una barra inclinada (en lugar de anidar todo). Entonces en vez de esto:
activerecord:
attributes:
person:
additional_info:
account_manager: "Manager"
Lo correcto ahora es:
activerecord:
attributes:
person:
additional_info/account_manager: "Manager"
Además, descubrí que has_many
muchas asociaciones se están traduciendo de manera diferente. Si desea traducir esos, el siguiente ejemplo puede ayudar:
activerecord:
attributes:
emails:
address: "E-mail field"
En lugar del nombre del modelo, como hice anteriormente, debe pasar el nombre de la asociación, en este caso emails
.
Verifique este comentario y solicite más información:
https://github.com/rails/rails/commit/c19bd4f88ea5cf56b2bc8ac0b97f59c5c89dbff7#commitcomment-619858
Estas son las rutas clave válidas para Rails 4.1:
# Basic Attribute on Model
activerecord:
attributes:
#{model_class.model_name.i18n_key}:
#{attribute_name}:
"Localized Value"
# Attribute on Nested Model
activerecord:
attributes:
#{model_class.model_name.i18n_key}/#{association_name}:
#{attribute_name}:
"Localized Value"
#{association_name}:
#{attribute_name}:
"Fallback Localized Value"
Entonces, dado este modelo (que tiene la i18n_key
de :person
):
class Person
has_many :friends
end
Tendría estas definiciones de configuración regional:
activerecord:
attributes:
person:
first_name:
"My Name"
person/friends:
first_name:
"My Friend''s Name"
friends:
first_name:
"A Friend''s Name"
Si su modelo es un espacio de nombres, como:
class MyApp::Person
has_many :friends
end
el i18n_key
convierte en :my_app/person
y tu /
key comienza a desgastarse:
activerecord:
attributes:
my_app/person:
first_name:
"My Name"
my_app/person/friends:
first_name:
"My Friend''s Name"
friends:
first_name:
"A Friend''s Name"