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

时间:2014-03-19 09:27:56

标签: ruby ruby-on-rails-4 rails-engines

我有一个关于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中加载语言环境的配置或一些重要步骤?

2 个答案:

答案 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