Rails I18N: Verkürzen Sie die Übersetzungsaufrufe (zumindest in den Ansichten)
-
25-10-2019 - |
Frage
Was ist der trockene Weg, um bestimmte Felder zu übersetzen?
In meinen erholsamen Ansichten habe ich einige wiederholte Ausschnitte wie diese in einer Show-Ansicht:
...
<dt><%= t("activerecord.attributes.user.firstname") %></dt>
<dd><%= @user.firstname %></dd>
...
Jetzt anstatt zu schreiben t("activerecord.attributes.user.attr_name")
Immer wieder möchte ich nur schreiben t(:attr_name)
(ähnlich zu f.label :firstname
in den Formviews).
Grundsätzlich sollte dies kein Problem sein (zumindest für die erholsamen Ansichten), da das i18n -Modul die abfragen könnte controller
Methode, um den Modellnamen zu extrapolieren und dann einfach die richtige Übersetzungszeichenfolge zu erraten.
Meine Frage: Hatte jemand praktische Erfahrung mit diesem Ansatz? Könnte es sogar ein Rubygem dafür geben? Oder: Gibt es Fallstricke, habe ich nicht gedacht?
Lösung
Ich scheint, ActiveModel::Translation#human_attribute_name
macht den Trick (zB <%= User.human_attribute_name :firstname %>
).
Andere Tipps
Die empfohlene Möglichkeit, dies zu tun app/views/user/_form.html.erb
oder auch app/views/user/_user.html.erb
) und dann dem Namen mit einem führenden Punkt vor, somit:
<dt><%= t(".firstname") %></dt>
<dd><%= user.firstname %></dd>
Mehr Informationen: Beispiele (aus Agile Webentwicklung mit Schienen); Schienendokumentation