Подтвердить что ты не робот

Структура Rails i18n и yml для форм-меток

В соответствии с документацией ActionView. Цитата:

Текст метки по умолчанию будет присвоен имени атрибута, если в текущем локали I18n (через views.labels. <modelname> . <attribute> ) не будет найден перевод, или вы явно укажете его.

У меня есть "пользовательская" модель и форма регистрации. Вот фрагмент соответствующей части:

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

Точки скрывают неважный код.

Как я понимаю документацию, если я предоставляю перевод в моем файле locale, в этом случае: dk, my dk.yml выглядит так:

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

Rails должен перевести текст метки и вставить "blahblah" вместо "Username".

Это не происходит, поэтому я, должно быть, что-то пропустил. Любая помощь была оценена.

4b9b3361

Ответ 1

Я думаю, что нашел другое решение здесь.

Мое приложение было версией 2.3.5. Теперь я изменил его на 2.3.8, а <%= f.label :username %> теперь использует перевод в:

dk:
  activerecord:
    attributes:
      user:
        username:

Я нашел подсказку в этом билете:

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

Ответ 2

В Rails 3.1, который немного изменился.

<% form_for @post do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>
  <%= f.submit %>
<% end %>

en:
  helpers:
    label:
      post:
        title: 'Customized title'

Ответ 3

Это потому, что метод label, который вы вызываете, не является тем из ActionView::Helpers::FormHelper, но на самом деле является методом label_tag из ActionView::Helpers::FormTagHelper. Метод form_for переписывает код в данном блоке, добавляя _tag к используемым помощникам формы. Поэтому вы не смотрите на документацию по правильному методу!

Я еще не использовал этот метод, поскольку иногда метка для поля может отличаться от нескольких форм с использованием одной и той же модели, поэтому я написал свой собственный помощник.