rails3 I18n: не может переопределить 1 ошибку, запрещающую сохранение этого пакета:

Когда я получаю ошибки в пакете модели, я всегда вижу первую (англ.=непереведенную) строку:

1 error prohibited this packet from being saved:
Naam Gelieve het veld Naam in te vullen!

Найден перевод ошибки для одного поля!

Пока у меня есть следующее в моем nl.yml

nl:

  activemodel:
    errors:
      template:
        header:
          one:   "1 fout voorkwam dat dit %{model} kon bewaard worden"
          other: "%{count} fouten voorkwamen dat deze %{model} kon bewaard worden"
        body:    "Er waren problemen met de volgende velden:"

  errors:
    template:
      body: "Controleer alstublieft de volgende velden:"
      header:
        one: "Kon dit {{model}} object niet opslaan: 1 fout."
        other: "Kon dit {{model}} niet opslaan: {{count}} fouten."

  activerecord:
    errors:
      template:
        header:
          one:   "1 fout voorkwam dat dit %{model} kon bewaard worden"
          other: "%{count} fouten voorkwamen dat deze %{model} kon bewaard worden"
        body:    "Er waren problemen met de volgende velden:"
      messages:
        blank: Gelieve het veld %{attribute} in te vullen!
    models:
      survey: test
      packet: woordenlijst
      user: gebruiker
    attributes:
      survey:
        name: Naam

Если вы много чего искали, на rails-i18n, скачали их nl.yml, но ничего не помогает. Кто-нибудь знает, почему это не работает?

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

Кто-нибудь знает, как это отлаживать?

Могу ли я как-то удалить перевод по умолчанию, чтобы я получил ошибку, какой перевод не будет найден?


person nathanvda    schedule 29.09.2010    source источник


Ответы (1)


Дох! Нашел! Глупый я!

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

 = form_for @packet do |f|
   -if @packet.errors.any?
     #errorExplanation
       %h2= "#{pluralize(@packet.errors.count, "error")} prohibited this packet from being saved:"

Так что неудивительно, что я не смог это перевести. Аааааааааа!!

Решение состоит в том, чтобы использовать плагин dynamic-form (который дает вам ту же функциональность, что и в rails 2.3) или соответствующим образом адаптируйте представление, как я сделал:

  -if @packet.errors.any?
    #errorExplanation
      %h2
        - if @packet.errors.count == 1
          = t 'activerecord.errors.template.header.one', :model => @packet.class.human_name
        - else
          = t 'activerecord.errors.template.header.other', :model => @packet.class.human_name, :count => @packet.errors.count
      %b= t 'activerecord.errors.template.body'
      %ul
        - @packet.errors.full_messages.each do |msg|
          %li= msg

Но, поскольку нам нужно сделать это для каждого представления, возможно, имеющего ошибки, это должно перейти в частичное или использовать плагин, упомянутый выше :)

person nathanvda    schedule 01.10.2010