2010-08-18 4 views
25

Selon le ActionView documentation. Quote:Rails structure i18n et yml pour les étiquettes de formulaire

Le texte de l'étiquette par défaut le nom de l'attribut à moins qu'une traduction se trouve dans les paramètres régionaux I18n en cours ou que vous spécifiez explicitement (par views.labels <modelname> <attribut>..).

J'ai un modèle "utilisateur" et un formulaire d'enregistrement. Voici un extrait de la partie pertinente:

<% form_for(@user) do |f| %> 
    ... 
    <p> 
    <%= f.label :username %> 
    <%= f.text_field :username, :class => 'full_width' %> 
    </p> 
    ... 
<% end %> 

Les points masquent un code sans importance.

Comme je comprends la documentation, si je fournir une traduction dans mon fichier de paramètres régionaux, dans ce cas: dk, mon dk.yml ressembler à ceci:

dk: 
    views: 
     labels: 
      user: 
       username: 
        "blahblah" 

Rails doivent traduire le texte de l'étiquette et insérer " blahblah "au lieu de" Username ".

Cela ne se produit pas, donc j'ai dû manquer quelque chose. Toute aide appréciée.

Répondre

26

Je pense avoir trouvé une autre solution ici.

Mon application était la version 2.3.5. Je l'ai changé à 2.3.8 et <%= f.label :username %> utilise maintenant la traduction en:

dk: 
    activerecord: 
    attributes: 
     user: 
     username: 

J'ai trouvé l'allusion dans ce billet:

https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n

+0

Et si vous voulez avoir une étiquette comme 'Entrez votre prénom'? Je ne pense pas que l'attribution d'attributs à une phrase comme celle-là soit propre, entraînera probablement des problèmes dans certains cas précis.Voir la réponse de Voldy pour une manière correcte de personnaliser une étiquette de formulaire. Vous pouvez même utiliser les deux approches ensemble, mais l'approche de Voldy remplacera celle-ci sur votre formulaire, et il devrait – mizurnix

1

C'est parce que la méthode label que vous appelez n'est pas celle de ActionView::Helpers::FormHelper mais est en fait la méthode label_tag de ActionView::Helpers::FormTagHelper. La méthode form_for réécrit le code dans le bloc donné en ajoutant _tag aux aides de formulaire utilisées. Donc vous ne regardez pas la documentation pour la bonne méthode!

Je n'ai pas encore utilisé cette méthode, car parfois l'étiquette d'un champ peut être différente de plusieurs formulaires utilisant le même modèle, j'ai donc écrit mon propre assistant.

+0

Merci, je ne le savais pas. Les méthodes form_for et label sont toutes les deux sur la page Doc ActionView :: Helpers :: FormHelper, donc j'ai supposé qu'elles travaillaient ensemble comme ça. J'ai changé mon code pour: '<% = label: user,: nom d'utilisateur%>' Avec le même fichier yml, mais je n'ai toujours pas la traduction. Est-ce que l'appel 'label' est dans le bloc' form_for'? – rhardih

+1

Pour être honnête, je n'ai jamais eu cette fonctionnalité à travailler. Étant curieux, je viens de regarder le code Rails et je pense que c'est une ancienne fonctionnalité et que la documentation n'a pas été corrigée: 'content = (text.blank?? Nil: text.to_s) || nom_méthode.humanize' à la ligne 473 de form_helper.rb –

+0

Dans ce cas, vous devez utiliser la méthode 't' spécifiant le champ' scope' présent dans votre fichier de traduction '.yml'. '<% = t: titre, portée: [: helpers,: label,: post]%>'. – mariowise

41

Dans Rails 3.1 qui est un peu modifié.

<% form_for @post do |f| %> 
    <%= f.label :title %> 
    <%= f.text_field :title %> 
    <%= f.submit %> 
<% end %> 

en: 
    helpers: 
    label: 
     post: 
     title: 'Customized title' 
+3

Merci pour cela. Y a-t-il une note de publication ou quelque chose que je peux regarder pour en savoir plus sur ce format? – astjohn

+1

La description de ce format est disponible dans la documentation [ActionView :: Helpers :: FormHelper.label] (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-label). – simonnordberg

+1

Je peux confirmer que cela fonctionne aussi pour Rails 4.0. –

Questions connexes