2014-03-19 53 views
7

我得到了一個關於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文件或者? –

回答

0

在應用程序控制器中聲明的所有方法都可以從任何位置看到。表明應用程序的語言應被加載代碼:

# 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

答案可能並不清楚,因爲它只提供源代碼。你能編輯你的文章並添加更多解釋嗎?謝謝。 –

2

我使用

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/加載任務。