2012-02-13 1 views
7

Quelqu'un a quelques conseils sur la façon de traduire les associations de modèles dans Rails? Par exemple: J'ai un modèle de personne, qui peut avoir beaucoup de téléphone. Cependant, une personne doit avoir au moins un téléphone. Je ne suis pas capable de traduire cette validation. Le mieux que je pouvais faire était le suivant:Traduire Rails association de modèles - ne fonctionne pas

validates_presence_of :phones, :message => "At least one phone is required." 

Et sur mon YAML, je remplace cette ligne d'omettre le %{attribute}:

format: ! '%{message}' 

De cette façon que mon message est affiché, et j'éviter l'ONU- nom de champ traduit à afficher. Cela me cause beaucoup de maux de tête, car certaines gemmes ne me permettent tout simplement pas de passer :message => "something describing the error", donc je voulais configurer tous les messages d'erreur via mon YAML.

De plus, avec certains modèles, je suis capable de traduire leurs attributs, alors qu'avec d'autres, je ne le suis pas. Par exemple:

activerecord: 
    attributes: 
    additional_info: 
     account_manager: "Manager" 

Cela fonctionne. Je peux voir sur mon formulaire "Manager". Toutefois, lorsque ce champ a une erreur, Rails l'affichera comme "Additional info account manager can't be blank".

J'ai essayé ceci:

activerecord:   
    errors: 
    models: 
     additional_info: 
     attributes: 
      account_manager: "Manager" 

Mais pas de chance.

J'ai lu les documents, mais je ne sais pas pourquoi cela se produit.

Répondre

9

Rails 3.2 a changé ce comportement. La façon dont j'ai posté avant est obsolète.

Maintenant, pour traduire les associations, il faut ajouter une barre oblique (au lieu d'imbriquer tout). Ainsi, au lieu de cela:

activerecord: 
     attributes: 
     person: 
      additional_info: 
      account_manager: "Manager" 

Le bon est maintenant:

activerecord: 
     attributes: 
     person: 
      additional_info/account_manager: "Manager" 

Aussi, je compris que has_many associations sont traduites différemment de cela. Si vous voulez traduire ceux-ci, l'exemple suivant peut aider:

activerecord: 
     attributes: 
     emails: 
      address: "E-mail field" 

au lieu du nom du modèle, comme je l'ai fait ci-dessus, vous devez passer le nom de l'association, dans ce cas emails.

Vérifiez ce commentaire et tirez demande pour plus d'informations:

https://github.com/rails/rails/commit/c19bd4f88ea5cf56b2bc8ac0b97f59c5c89dbff7#commitcomment-619858

https://github.com/rails/rails/pull/3859

+0

je pensais quelque chose comme ça, mais pas de chance avec la position exacte des articles et pas de chance sur la façon de trouver, grâce !, vraiment apprécié – Alexis

7

Voici les chemins clés valides pour 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" 

Ainsi, compte tenu de ce modèle (qui a le i18n_key de :person):

class Person 
    has_many :friends 
end 

Vous auriez ces définitions: locale

activerecord: 
    attributes: 
    person: 
     first_name: 
     "My Name" 
    person/friends: 
     first_name: 
     "My Friend's Name" 
    friends: 
     first_name: 
     "A Friend's Name" 

Si votre modèle est espace de nommage, tels que:

class MyApp::Person 
    has_many :friends 
end 

le i18n_key devient :my_app/person et votre / clé commence à s'user:

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" 
Questions connexes