2010-12-07 3 views
10

J'utilise l'aide automatique d'étiquette de formulaire pour créer mes étiquettes de formulaire et les faire traduire via le support i18n, mais je veux avoir du HTML dans l'étiquette et je ne peux pas comprendre comment le rendre HTML sécurisé.Rails 3: Utilisation du HTML dans les traductions d'aide de formulaire i18n

Par exemple:

en: 
    helpers: 
    label: 
     product: 
     name: 'Your Product Name <small>Try to be creative</small>' 

finit comme:

<label for="product_name">Your Product Name &lt;Try to be creative&gt;</label> 

Mais je veux que ce soit:

<label for="product_name">Your Product Name <small>Try to be creative</small></label> 

est-il un moyen pour moi de préciser la traduction comme html_safe afin qu'il ne soit pas codé avant la sortie?

En outre, cela semble être la manière la plus sémantique de configurer le HTML, mais je suis ouvert aux suggestions si je m'approche complètement de ce problème.

Merci :)

Mise à jour:

<%= form_for @product do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
<% end %> 

Répondre

12

Je ne sais pas comment votre aide réelle est, mais vous pouvez utiliser html_safe pour faire facilement (à condition que la valeur de votre étiquette ne sera pas entrée par d'autres utilisateurs).

quelque chose comme: t("helpers.label.product.name").html_safe

Si cela ne fonctionne pas, s'il vous plaît donner votre implémentation de votre méthode d'assistance, ou uniquement les lignes pour sortir le résultat.

====== ====== MIS À JOUR

Merci à votre code mis à jour, maintenant je sais ce qui est la meilleure réponse: D

Je ne sais pas trop si vous voulez vraiment helpers.label.product.name.

Mais il y a une autre façon de penser serait mieux, ce qui est définit comme il suit:

en: 
    activerecord: 
    attributes: 
     product: 
     labels: 
      name: "Your Product Name <small>Try to be creative</small>" 

Si vous ne voulez pas construire votre propre générateur de formulaire personnalisé, utilisez ceci:

= f.label :name, Product.human_attribute_name("labels.name").html_safe 

En fait, si vous définissez votre propre générateur de formulaire, il est facile de redéfinir la méthode d'étiquette pour générer automatiquement son texte.

+0

J'utilise le standard aide Rails: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i -label –

+0

Alors utilisez-vous sur un modèle? Pourriez-vous coller votre code ici? – PeterWong

+0

J'ai ajouté l'utilisation à la question originale. J'utilise simplement l'assistant de formulaire Rails standard pour un modèle. –

14

La façon de rendre automatiquement une clé normale html sûre dans rails3 est d'ajouter _html ou .html au nom de la clé. Par exemple. name_html. Cela ne fonctionne que via la méthode translate/t dans la vue, c'est-à-dire pas via I18n.t Cela ne fonctionnera pas de toute façon car l'assistant de formulaire standard n'essaie pas cette version de la clé.

La création de votre propre générateur de formulaires est la manière de procéder comme suggéré. Vous pouvez également faire

f.label :name, t('helpers.label.product.name_html') 

Si cela ne se produit que dans quelques endroits.

-8

L'autre option est de faire ce qui suit:

name: '<span>Your Product Name <small>Try to be creative</small></span>' 
Questions connexes