I have defined translated attributes and model names in the translation file and Modelname.human_attribute_name(...) returns the correctly translated attribute name, but the attribute names in the error messages are untranslated. What is needed that the attribute names in the error messages are translated?
From the Guide on the subject, you will need to set up the localization file properly with your model names and attribute names:
en:
activerecord:
models:
user: Dude
attributes:
user:
login: "Handle"
Since this is YAML, make sure all your "tabs" are actually two soft spaces. Then you can get them out with User.human_name
and User.human_attribute_name(:login)
.
I didn't take that for gospel -- there could have been a bug. I tested it, and it works fine. I made a model named Model
with an attribute title
. Here is a snippet of my fr.yml
file in config/locales
:
fr:
activerecord:
models:
model: "Sumfink"
attributes:
model:
title: "Tiltile"
Here's the relevant view code:
<h1>New <%= Model.human_name %></h1>
<% form_for(@model) do |f| %>
<%= f.error_messages %>
<%= Model.human_attribute_name("title") %><br />
<%= f.text_field :title %>
<%= f.error_message_on :title %>
...
And a screenshot of the properly translated output: http://screencast.com/t/et5FhVe1Gp
Just wanted to say thanks to Ian, I had the same question and your answer was perfect. Just one question though, does either of you know why Model.human_attribute_name(:title) doesn't work? I thought symbol works wherever string does but it barfed on me.
Kudos to Ian, just wanted to add that in order to highlight the label in case of a failed validation you need to write it like this:
<%= f.label "title", Model.human_attribute_name("title") %><br />
For some reason, writing it just like:
<%= f.label "title" %><br />
doesn't display the translation.