Расширить модуль в Rails 3 - PullRequest
       0

Расширить модуль в Rails 3

1 голос
/ 12 декабря 2011

Я хочу определить функцию available_translations, которая перечисляет переводы, которые я сделал для своего приложения, в модуль I18n.

Я попытался поместить в файл lib/i18n.rb следующее, но оно не работает, когда я пытаюсь использовать его с консоли rails:

module I18n
  # Return the translations available for this application.
  def self.available_translations
    languages = []
    Dir.glob(Rails.root.to_s + '/config/locales/*.yml') do |filename|
      if md = filename.match #^.+/(\w+).yml$#
        languages << md[1]
      end
    end
    languages
  end
end

Консоль

ruby-1.9.2-p290 :003 > require Rails.root.to_s + '/lib/i18n.rb'
=> false
ruby-1.9.2-p290 :004 > I18n.available_translations
NoMethodError: undefined method `available_translations' for I18n:Module
...

Помимо решения моей конкретной проблемы, я был бы очень рад узнать, как работает весь этот модуль в Ruby on Rails, потому что он все еще смущает меня, поэтому я был бы признателен за ссылки на документы или исходный код очень .

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Любой из этих способов решит вашу проблему:

  • переместите код в config / initializers / i18n.rb, или
  • , требуйте ваш файл из config / application.rb, или
  • Имена вашего класса в противном случае (для запуска автозагрузки)

Код в lib / i18n.rb не будет загружен автозагрузкой, так как имя I18n будет уже загружено, так что либо вы загружаетесделайте это самостоятельно или измените имя класса (и имя файла), чтобы новое имя вызывало поведение автозагрузки.

0 голосов
/ 22 февраля 2013

Кстати, метод I18n.available_locales () представлен в рельсах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...