6

Używam I18n-js, a moja strona klienta I18n.t wywołuje wszystkie zwracają brakujący komunikat tłumaczenia podczas uruchamiania w produkcji.Ścieżka obciążenia I18n nie jest ustawiana podczas pracy z "bin/rake assets: precompile"!

Wszystko jest w porządku podczas programowania i testowania.

Źródło tego problemu wydaje się być w potoku aktywów.

I18n.load_path nie zawiera żadnego z moich tłumaczeń (podczas uruchamiania aktywa bin/Zgrabiarka: prekompilacji) to tylko zawiera następujące ścieżki:

["/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"] 

te wyglądają jak domyślnego ActiveSupport, activemodel, ActiveRecord i actionpack tłumaczenia z klejnotów ...

ścieżki moje tłumaczenia są jednak gotowi zgodnie z oczekiwaniami podczas uruchamiania bin/szyny konsoli w rozwoju i produkcji:

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"] 

Rzeczywiście, dokumentacja I18n stwierdza: "Domyślne ustawienia regionalne to: en i wszystkie tłumaczenia z config/locales/*. Rb, yml są ładowane automatycznie."

Próbowałem zostały również określając w environment.rb

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

ale nadal nie radość.

Ktoś ma pojęcie, co może spowodować, że I18n.load_path nie będzie ustawiona tylko podczas działania zasobów: prekompilacja?

Dzięki za wszelkie pomysły

Odpowiedz

0

Czy zdefiniować domyślne ustawienia regionalne? Jeśli nie, można to zrobić dodając ten wiersz w config/environment.rb

config.i18n.default_locale = :fr 

Może powinieneś dodać ten wiersz też w production.rb w celu umożliwienia locale fallbacks dla I18n:

config.i18n.fallbacks = true 

Następnie należy zachować ostrożność, aby w pliku lokalizacji nie było wcięcia tabulacji, a jedynie wcięcia spacji.

Ustawienia regionalne nie są zasobami, a zasoby są tylko plikami js, css i obrazami, więc nie ma połączenia między kompilacją zasobów a ustawieniami regionalnymi.

3

Jest tak z powodu flagi konfiguracji zasobu, którą prawdopodobnie ustawiłeś w pliku config/application.rb.

config.assets.initialize_on_precompile = false 

Aktywa Zgrabiarka: prekompilacji sprawdza zadanie natarcia dla tej flagi, a jeśli okaże się fałszywa, tylko ładuje grupę aktywów i nie w pełni zainicjować aplikacji. Z kolei ustawienia aplikacji nie są dodawane do ścieżki I18n.load_path.

0

To dlatego, że i18n.js nie jest kompilowany i przetwarzane w ramach public/assets zrobić, więc trzeba dodać następującą linię w config/environments/production.rb

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

Następnie uruchom rake assets:precompile można zauważyć, że public/assets/i18n-MD5.js teraz istnieje i gotowe do podania .