我有一个关于Rails引擎的问题,在Rails指南中没有提到Rails引擎。我希望能在这里得到它。
我有一个引擎,例如,名为my_engine,还有一个名为my_app的应用。
出于开发目的,在my_app的Gemfile中,我只是简单地将my_engine包含在以下行中,使用:file key。
#my_app/Gemfile
...
gem "my_engine", :path => "./../my_engine"
...
和my_engine结构是这样的:
.
├── Gemfile
├── Gemfile.lock
├── app
│ ├── ...
| |...
|
├── config
│ ├── locales
│ │ └── models
│ │ └── products
│ │ ├── en.yml
│ │ └── zh-TW.yml
│ └── routes.rb
├── lib
│ ├── my_engine
│ │ ├── engine.rb
│ │ └── version.rb
│ ├── my_engine.rb
│ └── tasks
│ └── my_engine_tasks.rake
我发现当我尝试检查my_app下的I18n.load_path时,没有任何单一路径指向my_engine,这意味着,my_app不会加载my_engine的语言环境事务。
>>rails console
Loading development environment (Rails 4.0.2)
2.1.0 :001 >I18n.load_path.each { |x| puts x }
我是否遗漏了一些关于在my_engine中加载语言环境的配置或一些重要步骤?
答案 0 :(得分:3)
我正在使用
Rails 4.1.6
我在Gemfile中安装了我的引擎
gem 'core', path: "core"
当我检查我的载入路径时
I18n.load_path.find_all { |p| p.match("core") }.each { |p| puts p }
我看到我的引擎中包含的语言环境
/absolute_path/core/config/locales/de.yml
/absolute_path/core/config/locales/en.yml
因为默认rails正在加载引擎区域设置
在文档
中也提到了它http://edgeapi.rubyonrails.org/classes/Rails/Engine.html
然后确保在config / application.rb(或Gemfile)的顶部加载此文件,它将自动加载app内的模型,控制器和帮助程序,在config / routes.rb加载路由,加载语言环境在config / locales / ,并在lib / tasks / 加载任务。
答案 1 :(得分:0)
可以从任何位置查看Application Controller中声明的所有方法。指示应用程序应使用代码加载哪种语言:
# on my_app/app/controller/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
I18n.locale = request.headers['HTTP_ACCEPT_LANGUAGE'].split(',')[0].split('-')[0]
end
希望这可以帮助你Randy Marsh