web-dev-qa-db-fra.com

Comment traduire les validations du modèle d'enregistrement actif

Lorsque je soumets un formulaire contenant une erreur, il renvoie un message d'erreur. Comment traduire ces messages d'erreur avec i18n? J'ai déjà la traduction de tous les autres textes dans mes vues, donc je sais comment l18n fonctionne dans Rails. Je reçois maintenant ceci:

2 errors prohibited this user from being saved:

Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank
Email translation missing: nl.activerecord.errors.models.user.attributes.email.blank

Je veux traduire à la fois le titre et les erreurs.

28
John

La traduction du titre serait:

nl:
  activerecord:
    errors:
      template:
        header:
          one:   "1 error prohibited this %{model} from being saved"
          other: "%{count} errors prohibited this %{model} from being saved"
        body:    "There were problems with the following fields:"

Pour traduire les messages d'erreur, Rails utilisera l'ordre de traductions suivant:

activerecord.errors.models.user.attributes.name.blank
activerecord.errors.models.user.blank
activerecord.errors.messages.blank
errors.attributes.name.blank
errors.messages.blank

Vous pouvez donc ajouter:

nl:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              blank: "foo blank in nl bar baz"

Il est documenté dans le Rails Internationalization (I18n) API Guide , qui pourrait vous donner plus d'informations.

38
tbuehlmann

Utilisez simplement le fichier de traduction néerlandais que vous pouvez trouvez ici . Il contient des traductions pour la plupart (sinon la totalité) des messages de validation ActiveRecord.

Copiez le fichier dans config/locales/ dans votre projet.

Méthode alternative

Si vous souhaitez bénéficier de traductions mises à jour, ajoutez ce qui suit à votre Gemfile au lieu de copier les fichiers de traduction à la main:

gem 'Rails-i18n'
23
rdvdijk

Le guide Rails I18n couvre assez bien cela.

Vous pouvez mettre ce qui suit dans config/locales/nl.yml pour traduire les attributs:

nl:
  activerecord:
    models:
      user: "User"
    attributes:
      email: "Email"

Pour les messages d'erreur, ActiveRecord les recherchera dans les espaces de noms suivants:

activerecord.errors.models.[model_name].attributes.[attribute_name]
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.[attribute_name]
errors.messages

model, attribute et value sont interpolés et disponibles dans vos traductions, par exemple:

nl:
  errors:
    messages:
      blank: "Please fill the %{model}'s %{attribute}"
12
Benoit Garret