翻译某些字段的DRY方式是什么?
在我的RESTful视图中,我有一些重复的片段,就像在show-view中一样:
...
<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吗?或者:有没有陷阱,我没想到?
答案 0 :(得分:6)
我似乎,ActiveModel::Translation#human_attribute_name
可以解决问题(例如<%= User.human_attribute_name :firstname %>
)。
答案 1 :(得分:2)
建议的方法是将其置于部分(例如app/views/user/_form.html.erb
或甚至app/views/user/_user.html.erb
),然后在名称前加一个前导点,这样:
<dt><%= t(".firstname") %></dt>
<dd><%= user.firstname %></dd>
更多信息:examples(来自Agile Web Development with Rails); Rails documentation