Rails 4引擎自动加载引擎的i18n语言环境文件?

问题描述:

我得到了一个关于Rails引擎的问题,Rails引擎没有提到Rails引擎。我希望在这里得到它。Rails 4引擎自动加载引擎的i18n语言环境文件?

我得到了一个引擎,例如名为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

其实我看了这个之后,我不明白你在说什么,你的意思是rails不加载引擎的locale文件或者? –

在应用程序控制器中声明的所有方法都可以从任何位置看到。表明应用程序的语言应被加载代码:

# 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 

希望这有助于你兰迪沼泽

+0

答案可能并不清楚,因为它只提供源代码。你能编辑你的文章并添加更多解释吗?谢谢。 –

我使用

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

以便默认轨道正在加载您的引擎区域

它也在文档中提到

http://edgeapi.rubyonrails.org/classes/Rails/Engine.html

然后确保该文件在你的config/application.rb中的顶部加载(或在你的Gemfile),它会在自动加载模式,控制器和内部应用助手,负载路线config/routes.rb,在config/locales/加载语言环境,并在lib/tasks/加载任务。