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
我想一切都会奏效的
你现在可以理解我为什么要避免将其作为一种可能的解决方案:)
希望这有帮助
我使用rails 5.1我创建了一个文件config/locales/carrierwave.ar.yml
并写道
ar: carrierwave: errors: messages: min_size_error: "حجم الصورة لابد أن يكون أكبر من %{min_size}" max_size_error: "حجم الصورة لابد أن يكون أقل من %{max_size}" ....
你可以看看这个文件 🙂