Rails I18n: raccourcir les appels traduire (au moins dans les vues)
-
25-10-2019 - |
Question
Quelle est la façon DRY de traduire certains champs?
Dans mon point de vue RESTful, j'ai quelques extraits de répétition, comme celui-ci dans un show-vue:
...
<dt><%= t("activerecord.attributes.user.firstname") %></dt>
<dd><%= @user.firstname %></dd>
...
Maintenant, au lieu d'écrire t("activerecord.attributes.user.attr_name")
encore et encore, je voudrais écrire que t(:attr_name)
(similaire à f.label :firstname
sous la forme-vues).
En fait, cela ne devrait pas être un problème (au moins pour les vues RESTful), car le module I18n peut interroger la méthode controller
pour extrapoler le nom du modèle et devinez juste la chaîne de traduction correcte.
Ma question: Est-ce que quelqu'un a une expérience pratique avec cette approche? Y aurait-il même un rubygem pour cela? Ou: y at-il des pièges, je ne pensais pas
?La solution
Je semble, ActiveModel::Translation#human_attribute_name
le tour est joué (par exemple <%= User.human_attribute_name :firstname %>
).
Autres conseils
La méthode recommandée pour ce faire est de mettre cela en une partie (par exemple app/views/user/_form.html.erb
ou même app/views/user/_user.html.erb
), puis faites précéder le nom commençant par un point, donc:
<dt><%= t(".firstname") %></dt>
<dd><%= user.firstname %></dd>
Plus d'informations: exemples ( Agile Web Development avec Rails ); documentation Rails