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

?
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top