Ruby on rails 如何正确翻译回形针错误信息?

Ruby on rails 如何正确翻译回形针错误信息?,ruby-on-rails,ruby,ruby-on-rails-3,internationalization,paperclip,Ruby On Rails,Ruby,Ruby On Rails 3,Internationalization,Paperclip,我正在使用RubyonRails 3.2.2和曲别针插件。由于我想翻译回形针错误消息,因此我使用以下代码: class Article < ActiveRecord::Base validates_attachment_size :picture, :less_than => 4.megabytes, :message => I18n.t('trl_too_big_file_size', :scope => 'activerecord.errors

我正在使用RubyonRails 3.2.2和曲别针插件。由于我想翻译回形针错误消息,因此我使用以下代码:

class Article < ActiveRecord::Base
  validates_attachment_size :picture,
    :less_than => 4.megabytes,
    :message   => I18n.t('trl_too_big_file_size', :scope => 'activerecord.errors.messages')
end
我的
应用程序控制器是:

class ApplicationController < ActionController::Base
  before_filter :set_locale

  def set_locale
    # I am using code from http://guides.rubyonrails.org/i18n.html#setting-and-passing-the-locale.
    I18n.locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
  end
  # BTW: My `I18n.default_locale` is `:en` (english).
end
class ApplicationController
但是,当我提交与回形针附件相关的表单时,我的应用程序生成一个而不是翻译文本-即,它生成(并输出)未正确翻译的字符串,因为它始终引用默认的区域设置语言错误字符串
en.activerecord.errors.messages.trl\u过大\u文件大小
,即使
I18n.locale
:它
。我做了一些研究(例如),但我仍然无法正确地翻译模型文件中与回形针gem相关的错误消息(参见上面的代码)。这似乎是Parperclip gem的一个缺陷(也是因为我似乎不是唯一一个得到这个问题的人)

我怎样才能解决这个问题



备注:我认为问题与ApplicationController曲别针gem的某些“文件加载顺序过程”有关。。。但是我不知道如何解决这个问题。

您可能需要使用lambda作为消息

类文章4.MB,
:message=>lambda{
I18n.t('trl\u too\u big\u file\u size',:scope=>'activerecord.errors.messages')
}
结束

不要在消息参数中使用lambda,您不能简单地在YAML文件中使用适当的键吗?具体来说,不是这样的:

class Article < ActiveRecord::Base
  validates_attachment_size :picture,
    :less_than => 4.megabytes
end
在英语本地YAML文件中有类似条目

en:
  activerecord:
    errors:
      models:
        article:
          attributes:
            picture:
              less_than: is too big

假设您的语言环境设置正确,并且其他ActiveRecord本地化消息显示正确,那么我希望这能起作用,因为曲别针的验证器通过I18n.t方法使用底层ActiveRecord消息包。

我不明白为什么,但有时您的代码(通过使用
lambda
函数)似乎有效,但有时似乎无效。我怎样才能确保翻译按预期工作?@Backo:您的版本不工作,因为在加载类时会计算您的
I18n.t
调用,然后您将拥有默认的语言环境;lambda版本在需要消息时执行lambda,因此
I18n.t
在需要消息时执行,并且应正确设置区域设置。如果lambda版本有时不起作用,那么您可能有时没有正确设置区域设置。您解决了这个问题吗?我尝试在回答中使用这两种解决方案,但第一种根本不起作用(显然,回形针中仍然不支持ActiveRecord I18n),lambda会翻译消息(即“必须最多%{max]kilobytes”),但是模型和属性名不会翻译,尽管我在YAML文件中有它们。
class Article < ActiveRecord::Base
  validates_attachment_size :picture,
    :less_than => 4.megabytes
end
it:
  activerecord:
    errors:
      models:
        article:
          attributes:
            picture:
              less_than: è troppo grande
en:
  activerecord:
    errors:
      models:
        article:
          attributes:
            picture:
              less_than: is too big