2014-03-19 6 views
7

Ich habe eine Frage über Rails-Engine, die nicht unter Rails-Leitfaden über Rails-Engine erwähnt. Ich hoffe, es hier zu bekommen.Wird die i18n Locales-Datei von Rails 4 Engine automatisch geladen?

Ich habe eine Engine, zum Beispiel my_engine, und eine App namens my_app.

für Entwicklungszwecke, in meinem Gemfile my_app, schließe ich einfach my_engine mit folgender Zeile ein: Dateischlüssel.

#my_app/Gemfile 
... 
gem "my_engine", :path => "./../my_engine" 
... 

und my_engine Struktur ist wie folgt:

. 
├── 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 

Und ich fand, dass, während ich versuche, I18n.load_path unter my_app zu untersuchen, gibt es keine jeden einzelnen Bahnpunkt my_engine, was bedeutet, my_app doesn Laden Sie nicht die Gebietsschema-Transaktionen von my_engine.

>>rails console 
Loading development environment (Rails 4.0.2) 
2.1.0 :001 >I18n.load_path.each { |x| puts x } 

Ich habe einige Config oder einige wichtige Schritte zum Laden von Locales in my_engine fehlt?

+0

eigentlich nachdem ich das gelesen habe, verstehe ich nicht, worüber du sprichst, meinst du rails lädt die locales files der engine oder? –

Antwort

0

Alle in Application Controller deklarierten Methoden können von jedem Standort aus gesehen werden.

# 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 

Hoffnung, dies hilft Ihnen Randy Marsh

+0

Die Antwort ist möglicherweise für einige nicht klar, da sie nur den Quellcode bereitstellt. Könnten Sie Ihren Beitrag bearbeiten und weitere Erläuterungen hinzufügen? Vielen Dank. –

2

Ich verwende

Rails 4.1.6 

und ich bestieg mein Motor wie diese in Gemfile

: indicate Anwendung mit dem Code welcher Sprache geladen werden
gem 'core', path: "core" 

wenn ich meine Lastpfade

überprüfe
I18n.load_path.find_all { |p| p.match("core") }.each { |p| puts p } 

Ich sehe Gegenden von meinem Motor enthalten

/absolute_path/core/config/locales/de.yml

/absolute_path/core/config/locales/en.yml

so als Standardschienen Motor locales Laden

es auch in der Dokumentation erwähnt wird

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

anschließend sicher, dass diese Datei an der Spitze Ihrer config/application.rb (oder in Ihrem Gemfile) geladen wird und es wird automatisch Modelle, Controller und Helfer innerhalb App, laden Routen laden, bei config/routes.rb lädt locales unter config/locales/und lädt Aufgaben unter lib/tasks/.