0

我想将我的 gem Monkey 补丁放入例如 /lib/gem_ext/i18n.rb 中:

module GemExt
  module I18n
    def self.translate(*args)
      raise 'ok'
    end
  end
end

...并通过 Rails 初始化程序 gem_ext.rb 混入到 gem 中。

我试过:

a) I18n.send :include, GemExt::I18n

b) I18n.send :include, GemExt::I18nExt

c) I18n.module_eval { include ::GemExt::I18n }

d) I18n.module_eval { include ::GemExt::I18nExt }

但是在重新启动 Rails 控制台后,它不会在 I18n.translate("key") 上引发此异常,但会显示原始行为,并且新声明的方法会引发 NoMethodError。

4

2 回答 2

2

如果你想monkeypatchI18n.translate方法只需写在/lib/gem_ext/i18n.rb 不需要GemExt 模块。

module I18n
 def self.translate(*args)
   raise 'ok'
 end
end
于 2012-05-21T11:17:01.160 回答
0

配置/初始化程序/gem_ext.rb

Dir[Rails.root.join("lib/gem_ext/**/*.rb")].each {|f| require f}

lib/gem_ext/i18n.rb

module GemExt::I18n
  extend ActiveSupport::Concern

  included do
    class << self
      def translate(*args)
        raise 'ok'
      end
    end
  end
end

I18n.send(:include, ::GemExt::I18n)
于 2012-06-06T16:32:25.517 回答