carrierwave 0.9.0的自定义错误消息不适用于Rails 4

时间:2013-09-28 16:00:50

标签: ruby-on-rails ruby-on-rails-4 carrierwave

我在Rails 4中使用carrierwave 0.9.0,我正在尝试制作自定义错误消息。在做了一些搜索后,我发现了这个answer

en:
  errors:
    messages:
      extension_white_list_error: 'My Custom Message'

我试过这个,转到config/locales/en.yml然后添加上面的代码,但没有任何改变。错误消息仍然相同。

在github here上也有同样的问题,但是没有答案,我认为这个问题仅适用于Rails 4,但不确定,使用Rails 4时会遇到同样的问题吗?

3 个答案:

答案 0 :(得分:2)

对于i18n文件,Rails 4.0似乎存在一些加载问题

理想情况下,根据3 +

,I18n加载路径应该是什么
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/activesupport-4.0.0/lib/active_support/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/activemodel-4.0.0/lib/active_model/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/activerecord-4.0.0/lib/active_record/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/actionpack-4.0.0/lib/action_view/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/carrierwave-0.9.0/lib/carrierwave/locale/en.yml
/Users/joshianiket22/carrierwave_tester/config/locales/en.yml

在Rails 4.0中看到了什么

/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/activesupport-3.2.11/lib/active_support/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/activemodel-3.2.11/lib/active_model/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/activerecord-3.2.11/lib/active_record/locale/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/actionpack-3.2.11/lib/action_view/locale/en.yml
/Users/joshianiket22/workspace/zenjavi/carrierwave_tester/config/locales/en.yml
/Users/joshianiket22/.rvm/gems/ruby-1.9.3-p327@rails3_2/gems/carrierwave-0.9.0/lib/carrierwave/validations/../locale/en.yml

可以清楚地看到两者之间的区别,即在应用程序特定的 en.yml 之后加载了carrierwave en.yml 并且存在问题

我建议没有简单的方法,除非你在rails应用程序中更改load_paths以及如何管理如预期的那样更改load_paths的顺序

我已经通过here提出了拉取请求。完全敬畏Carrierwave的人来决定它

Hacky Solution:

我之前没有给你提供这个解决方案,但是如果你想要的那么糟糕,你可以做什么

在lib目录中定义一个文件(比如说auto_load_i18n.rb)并将lib路径分配给autoload(在 application.rb 中)

config.autoload_paths += %w(#{config.root}/lib)

auto_load_i18n.rb内写下这个

I18n.load_path.delete(Rails.root.join("config/locales/en.yml").to_s)
I18n.load_path << Rails.root.join("config/locales/en.yml").to_s

并要求application_controller.rb

顶部的lib文件
require 'auto_load_i18n'
class ApplicationController < ActionController::Base

我想一切都会有用

您现在可以理解我为什么要避免将其作为可能的解决方案:)

希望这个帮助

答案 1 :(得分:1)

现在修复了这些人:

https://github.com/carrierwaveuploader/carrierwave/pull/1264

感谢您的耐心等待。

答案 2 :(得分:0)

我使用导轨5.1 我创建了一个文件config/locales/carrierwave.ar.yml并写了

ar:
  carrierwave:
  errors:
    messages:
      min_size_error: "حجم الصورة لابد أن يكون أكبر من %{min_size}"
      max_size_error: "حجم الصورة لابد أن يكون أقل من %{max_size}"
      ....

您可以查看此file:)