Структура 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".
Это не происходит, поэтому я, должно быть, что-то пропустил. Любая помощь была оценена.
Ответы
Ответ 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
к используемым помощникам формы. Поэтому вы не смотрите на документацию по правильному методу!
Я еще не использовал этот метод, поскольку иногда метка для поля может отличаться от нескольких форм с использованием одной и той же модели, поэтому я написал свой собственный помощник.