【问题标题】:How to localize a generic error messages partial in Rails 3.2.3?如何本地化 Rails 3.2.3 中的部分通用错误消息?
【发布时间】:2013-01-26 11:34:19
【问题描述】:

我在 Rails 3.2.3 中使用以下部分显示我的大多数模型的错误消息:

# _error_messages.html.erb

<% if object.errors.any? %>
<div id="error_explanation">
    <h3><%= pluralize(object.errors.count, "error") %>
    prohibited this <%= object.class.to_s.underscore.humanize.downcase %> from being saved:</h3>        
    <p>There were problems with the following fields:</p>
    <ul>
        <% object.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
        <% end %>
    </ul>
</div>
<% end %>

在我决定使用 I18n 本地化我的应用程序之前,这非常有效。

我为包含以下内容的德语内容创建了一个新文件de.yml

# de.yml

errors: &errors
  format: ! '%{attribute} %{message}'
  messages:
    blank: muss ausgefüllt werden
  template:
    body: ! 'Bitte überprüfen Sie die folgenden Felder:'
    header:
      one: ! 'Konnte %{model} nicht speichern: ein Fehler.'
      other: ! 'Konnte %{model} nicht speichern: %{count} Fehler.'

etc. etc. etc.

现在如何在我的错误消息中使用此内容?

尤其是&lt;%= object.class.to_s.underscore.humanize.downcase %&gt; 这行让我很困惑。我尝试了类似&lt;%= t 'activerecord.errors.template.header', :model =&gt; object.model_name.human %&gt; 但没有任何运气。

有人可以帮忙吗?

我已经阅读了三遍 Rails 本地化指南,但我被困在这里。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


    【解决方案1】:

    首先你应该这样设置你的语言环境:

    应用程序.rb

    config.i18n.default_locale = :de
    

    其次,您的语言环境文件应如下所示:

    de.yml

    de:
      activerecord:
        models:
          order: Заказ
        attributes:
          order:
            link: Ссылка на модель часов
            name: Имя
            phone: Телефон
            accept_message: Комментарий к заказу
            decline_message: Причина отказа
            finish_message: Комментарий к заказу
        errors:
          models:
            order:
              attributes:
                link:
                  blank: не может быть пустой
                phone:
                  invalid: должен содержать только цифры. Пример: 9208003020 или 2716070.
                  blank: не может быть пустым
                name:
                  blank: не может быть пустым
                decline_message:
                  blank: не может быть пустой
    

    【讨论】:

    • 好的,谢谢。我的文件看起来和你的一样。我在上面发布的只是我的yml 文件的exerpt
    • 让我们尝试调试。在&lt;% raise(object.errors.full_messages.inspect) 上替换&lt;% object.errors.full_messages.each 它返回什么输出?
    • 谢谢,我认为我最初的问题可能有点误导。这次我自己找到了解决方案并将其发布在上面。不过感谢您的帮助!
    【解决方案2】:

    好的,这次我自己找到了答案,感谢thread

    我只是将我的 _error_messages.html.rb 部分更改为:

    <% if object.errors.any? %>
    <div id="error_explanation">
        <h3><%= t('errors.template.header', :model => object.class.model_name.human, :count => object.errors.count) %></h3>
        <p><%= t('errors.template.body') %></p>
        <ul>
            <% object.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
            <% end %>
        </ul>
    </div>
    <% end %>
    

    现在可以了,我很高兴 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      相关资源
      最近更新 更多