1

carrierwave 0.9.0与 Rails 4 一起使用,我正在尝试制作自定义错误消息。经过一番搜索,我找到了这个答案

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

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

这里的github上也有同样的问题,但没有答案,我认为这个问题是Rails 4特有的,但不确定,当你使用Rails 4时你有同样的问题吗?

4

3 回答 3

2

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

理想情况下,I18n 负载路径应该是 3+

/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 的家伙来决定它

哈克解决方案:

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

在 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

并要求在您的顶部的 lib 文件application_controller.rb

require 'auto_load_i18n'
class ApplicationController < ActionController::Base

我想那时一切都会好起来的

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

希望这有帮助

于 2013-09-29T11:04:51.043 回答
1

现在已经修复了,伙计们:

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

谢谢你的耐心。

于 2013-11-10T18:44:23.667 回答
0

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

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

你可以看看这个文件:)

于 2017-05-25T14:23:33.583 回答