Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Translated attributes in Rails error messages (Rails 2.3.2, I18N)

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?

like image 853
Rainer Blessing Avatar asked May 22 '09 16:05

Rainer Blessing


2 Answers

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

like image 141
Ian Terrell Avatar answered Oct 27 '22 11:10

Ian Terrell


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.

like image 26
schastar Avatar answered Oct 27 '22 10:10

schastar