Rails I18n: accorciare le chiamate tradurre (almeno nelle visualizzazioni)
-
25-10-2019 - |
Domanda
Qual è il modo DRY di tradurre alcuni campi?
Nel mio punto di vista RESTful, ho alcuni frammenti che si ripetono, come questo in uno show-view:
...
<dt><%= t("activerecord.attributes.user.firstname") %></dt>
<dd><%= @user.firstname %></dd>
...
Ora, invece di scrivere t("activerecord.attributes.user.attr_name")
più e più volte, mi piacerebbe scrivere solo t(:attr_name)
(simile a f.label :firstname
nei form-vista).
In sostanza, questo non dovrebbe essere un problema (almeno per il punto di vista RESTful), poiché il modulo I18n potrebbe interrogare il metodo controller
di estrapolare il nome del modello e poi basta indovinare la stringa di traduzione corretta.
La mia domanda: qualcuno ha avuto esperienza pratica con questo approccio? Potrebbe anche esserci un rubygem per esso? Oppure: sono lì insidie, non pensavo di
?Soluzione
I sembra, ActiveModel::Translation#human_attribute_name
fa il trucco (ad es <%= User.human_attribute_name :firstname %>
).
Altri suggerimenti
Il metodo consigliato per farlo è quello di mettere questo in un parziale (ad esempio app/views/user/_form.html.erb
o anche app/views/user/_user.html.erb
), e quindi precedere il nome con un punto, quindi:
<dt><%= t(".firstname") %></dt>
<dd><%= user.firstname %></dd>
Più informazioni: esempi (da Agile Web Development con Rails ); Rails documentazione