views:

68

answers:

2

According to the ActionView documentation. Quote:

The text of label will default to the attribute name unless a translation is found in the current I18n locale (through views.labels.<modelname>.<attribute>) or you specify it explicitly.

I have a "user" model and a registration form. Here's a snippet of the relevant part:

<% form_for(@user) do |f| %>
    ...
    <p>
    <%= f.label :username %>
    <%= f.text_field :username, :class => 'full_width' %>
    </p>
    ...
<% end %>

Dots hide unimportant code.

As I understand the documentation, if I provide a translation in my locale file, in this case :dk, my dk.yml looking like so:

dk:
    views:
        labels:
            user:
                username:
                    "blahblah"

Rails should translate the label text and insert "blahblah" instead of "Username".

This is not happening, so I must have missed something. Any help appreciated.

+1  A: 

That's because the label method you are calling is not the one from ActionView::Helpers::FormHelper but is in fact the label_tag method from ActionView::Helpers::FormTagHelper. The form_for method is rewriting the code in the given block by adding _tag to the used form helpers. So you're not looking at the documentation for the right method!

I've not yet used that method, as sometimes the label for a field can be different from multiple forms using the same model, so I've written my own helper.

Nicolas Buduroi
Thank you, I didn't know that. The form_for and label methods are both on `ActionView::Helpers::FormHelper` doc page, so I just assumed they worked together like that. I've changed my code to: `<%= label :user, :username %>` With the same yml file, but I still do not get the translation. Does it matter that the `label` call is within the `form_for` block?
rhardih
To be honest, I've never got that feature to work. Being curious, I've just looked at Rails code and I think this is an old feature and that the documentation hasn't been fixed: `content = (text.blank? ? nil : text.to_s) || method_name.humanize` at line 473 of form_helper.rb
Nicolas Buduroi
A: 

I think I found another solution here.

My app was version 2.3.5. I've now changed it to 2.3.8 and <%= f.label :username %> now uses the translation in:

dk:
    activerecord:
        attributes:
           user:
                username:

I found the hint in this ticket:

https://rails.lighthouseapp.com/projects/8994/tickets/745-form-label-should-use-i18n

rhardih