Rails i18n: сократить вызовы перевода (по крайней мере, в видах)
-
25-10-2019 - |
Вопрос
Какой сухой способ перевести определенные поля?
В моих спокойных просмотрах у меня есть несколько повторяющихся фрагментов, подобных этому в виде.
...
<dt><%= t("activerecord.attributes.user.firstname") %></dt>
<dd><%= @user.firstname %></dd>
...
Теперь вместо того, чтобы писать t("activerecord.attributes.user.attr_name")
Снова и снова я хотел бы написать только t(:attr_name)
(похожий на f.label :firstname
в обзорах формы).
По сути, это не должно быть проблемой (по крайней мере, для спокойных представлений), поскольку модуль I18N может запрашивать controller
Метод экстраполяции имени модели, а затем просто угадайте правильную строку перевода.
Мой вопрос: у кого -нибудь был практический опыт с этим подходом? Может ли даже быть рубигем? Или: Есть ли ловушки, я не думал?
Решение
Я кажется, ActiveModel::Translation#human_attribute_name
делает трюк (например, <%= User.human_attribute_name :firstname %>
).
Другие советы
Рекомендуемый способ сделать это - поместить это в частичное (например, app/views/user/_form.html.erb
или даже app/views/user/_user.html.erb
), а затем предшествует названию ведущей точкой, таким образом:
<dt><%= t(".firstname") %></dt>
<dd><%= user.firstname %></dd>
Дополнительная информация: Примеры (из Agile Web Development с Rails); Документация Rails