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

我使用带有Rails 4的carrierwave 0.9.0 ,我正在尝试制作自定义错误消息。 做了一些搜索后,我找到了这个答案 :

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

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

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

对于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的顺序

我在这里给了拉请求。 完全敬畏Carrierwave的人来决定它

Hacky解决方案:

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

在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 

我想一切都会奏效的

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

希望这有帮助

它现在已修好了:

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

谢谢你的耐心。

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

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

你可以看看这个文件 🙂