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

Каков СУХОЙ способ перевода определенных полей?

В моих представлениях RESTful у меня есть несколько повторяющихся фрагментов, например, в виде представления:

...
<dt><%= t("activerecord.attributes.user.firstname") %></dt>
<dd><%= @user.firstname %></dd>
...

Теперь вместо того, чтобы снова и снова писать t("activerecord.attributes.user.attr_name"), я хотел бы написать только t(:attr_name) (аналогично f.label :firstname в формах-представлениях).

В принципе, это не должно быть проблемой (по крайней мере, для представлений RESTful), поскольку модуль I18n может запросить метод controller для экстраполяции имени модели, а затем просто угадать правильную строку перевода.

Мой вопрос: у кого-нибудь был практический опыт с этим подходом? Может ли быть для этого даже RubyGem? Или: есть подводные камни, о которых я не подумал?


person DMKE    schedule 24.07.2011    source источник


Ответы (2)


Мне кажется, ActiveModel::Translation#human_attribute_name помогает (например, <%= User.human_attribute_name :firstname %>).

person DMKE    schedule 12.09.2012

Рекомендуемый способ сделать это — поместить это в партиал (например, app/views/user/_form.html.erb или даже app/views/user/_user.html.erb), а затем поставить перед именем ведущую точку, например:

<dt><%= t(".firstname") %></dt>
<dd><%= user.firstname %></dd>

Дополнительная информация: примеры (из Гибкая веб-разработка с помощью Rails); документация по Rails

person Sam Ruby    schedule 24.07.2011
comment
Использование партиалов кажется довольно приятным, но я думаю, что это будет только DRY, если один и тот же контент будет отображаться повторно. В документации также говорится, что вызов t('.foo') из шаблона people/index.html.erb фактически вызывает t('people.index.foo'). Я не хочу поддерживать беспорядок в моих файлах локали... - person DMKE; 25.07.2011