Рельсы 3 помоста и i18n

Когда леса в Rails 3, генератор делает это:

<% if @user.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

  <ul>
  <% @user.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <% end %>
  </ul>
</div>
<% end %>

Но как насчет i18n? Сообщения переводятся, но почему заголовок в жестком коде? Я должен перевести это вручную? Это не кажется очень сухим?

С Уважением,

Иаков

2 ответа

Решение

Вы можете переопределить поведение по умолчанию для скаффолда, загрузив файлы здесь на github и поместив их в свой lib/templates/erb/scaffold, Когда вы создаете скаффолд, он понимает, что шаблоны есть, и использует их.

<% this code is executed and probably result in html %>, <%% this is converted to snippet %>, это было не так сложно, и тогда вы можете выполнить все ваши персонализации, но иметь yml автоматически сгенерированный файл может быть сложнее, в любом случае вы можете сделать ваши шаблоны почти автоматически.

Чтобы ответить на ваш вопрос, я тоже думаю, что scaffold может быть улучшен, но я читаю везде, где разработчики предпочитают писать свой собственный код с нуля. Поэтому я думаю, что усилия направлены на улучшение других функций. Скаффолд остается, по крайней мере, полезным генератором для понимания и ознакомления с логикой, когда вы начинающий.

Я думаю, что леса - это скорее подсказка, чем окончательный шаблон.

Вы можете добавить перевод, просто заменив "prohibited this user from being saved:" с t('my_message') и ддинг 'my_message: whatever' к en.yml, При добавлении перевода у вас нет повторений, и сухой принцип безопасен.

Просто оставим комментарий: я редко использую сообщение типа "4 ошибки не позволили этому пользователю быть сохраненным". По моему опыту, чаще всего просто перечислять все произошедшие ошибки и отображать неправильное поле красным цветом.

Другие вопросы по тегам