Rails i18n: сократить вызовы перевода (по крайней мере, в видах)

StackOverflow https://stackoverflow.com/questions/6809678

Вопрос

Какой сухой способ перевести определенные поля?

В моих спокойных просмотрах у меня есть несколько повторяющихся фрагментов, подобных этому в виде.

...
<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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top