6

Ich verwende I18n-js, und meine Client-Seite I18n.t ruft alle eine Übersetzung fehlende Nachricht zurück, wenn in der Produktion ausgeführt wird.I18n Ladepfad wird beim Ausführen von "bin/rake assets: precompile" nicht gesetzt!

Alles ist in Entwicklung und Test in Ordnung.

Die Ursache dieses Problems scheint in der Asset-Pipeline zu liegen.

I18n.load_path enthält keine meiner Übersetzungen (wenn bin/Rake Vermögen ausgeführt wird: precompile) nur die folgenden Pfade enthält:

["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"] 

Diese sehen aus wie die Standard-Active, activemodel, Active und Action Übersetzungen aus den Edelsteinen ...

Meine Übersetzung Pfaden setzen jedoch bekomme wie erwartet, wenn ist laufen/Schienen-Konsole in der Entwicklung und Produktion:

1.9.3p125 :002 > I18n.load_path 
=> ["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/devise-2.0.4/config/locales/en.yml", 
"/media/sf_code/Project/config/locales/active_record.en.yml", 
"/media/sf_code/Project/config/locales/project.en.yml"] 

Tatsächlich heißt es in der I18n-Dokumentation: "Das Standardgebietsschema lautet: en und alle Übersetzungen von config/locales/*. Rb, yml werden automatisch geladen."

Ich habe auch versucht

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s] 

aber noch keine Freude in application.rb angeben.

Jeder hat eine Idee, was dazu führen könnte, dass I18n.load_path nicht nur beim Ausführen von Assets gesetzt wird: precompile?

Vielen Dank für alle Ideen

Antwort

0

Haben Sie eine Standard-Locale definieren? Wenn nicht, können Sie es auf diese Zeile in Ihrer Konfigurations Hinzufügen/application.rb

config.i18n.default_locale = :fr 

Vielleicht sollten Sie diese Zeile auch in Ihrem production.rb hinzufügen, um locale Fallbacks für I18n zu aktivieren:

config.i18n.fallbacks = true 

Dann seien Sie vorsichtig, dass Sie keine Tab-Einrückung in Ihrer Locale-Datei, sondern nur Leerzeichen-Einrückung haben.

Gebietsschema ist keine Assets, Assets sind nur js, CSS und Bilder, daher gibt es keine Verbindung zwischen Assets Compilierung und Gebietsschemas.

3

Dies ist tatsächlich auf eine Asset-Konfiguration Flag, die Sie wahrscheinlich in Ihrer config/application.rb festgelegt haben.

config.assets.initialize_on_precompile = false 

Die Rake Vermögen: precompile Rake Aufgabe prüft, ob dieses Flag und gefunden, wenn falsch, lädt nur die Gruppe Vermögenswerte und nicht vollständig die Anwendung initialisieren. Umgekehrt werden Anwendungslokale dem I18n.load_path nicht hinzugefügt.

0

Dies liegt daran, die i18n.js nicht kompiliert und unter public/assets verarbeitet zu tun, so müssen Sie die folgende Zeile in config/environments/production.rb

config.assets.precompile += %w(i18n.js en_locale.js fr_locale.js) 

Dann rake assets:precompile werden Sie feststellen, laufen hinzufügen, dass public/assets/i18n-MD5.js existiert jetzt und bereit, serviert werden .

Verwandte Themen