我想定义一个函数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中的整个模块是如何工作的,因为它仍然让我感到困惑,所以我非常感谢链接到文档或源代码非常
答案 0 :(得分:2)
其中任何一个都可以解决您的问题:
lib / i18n.rb中的代码不会被自动加载加载,因为I18n名称已经加载,所以要么自己加载它,要么更改类名(和文件名),以便新名称将触发自动加载行为。
答案 1 :(得分:0)
BTW,I18n.available_locales()方法在rails中显示。