Рельсы I18n: сократить вызовы перевода (по крайней мере, в представлениях) - PullRequest
5 голосов
/ 25 июля 2011

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

В моих представлениях 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 для этого?Или: есть подводные камни, о которых я не думал?

Ответы [ 2 ]

6 голосов
/ 12 сентября 2012

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

2 голосов
/ 25 июля 2011

Рекомендуемый способ сделать это состоит в том, чтобы поместить это в частичное (например, 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

...