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?
问题:
回答1:
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
回答2:
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.