6

Sto usando I18n-js e il mio lato client I18n.t chiama tutti restituiscono un messaggio di traduzione mancante durante l'esecuzione in produzione.Il percorso di caricamento I18n non viene impostato durante l'esecuzione di "bin/rake assets: precompilare"!

Tutto è ok in fase di sviluppo e test.

La radice di questo problema sembra essere nella pipeline degli asset.

I18n.load_path non contiene nessuna delle mie traduzioni (quando si esegue le attività bin/rake: precompilazione) contiene solo i seguenti percorsi:

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

Questi sembrano l'ActiveSupport predefinita, activemodel, ActiveRecord e actionpack traduzioni del le gemme ...

miei percorsi traduzione Peraltro Preparati come previsto durante l'esecuzione di bin/rotaie console nello sviluppo e produzione:

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

In effetti la documentazione I18n afferma: "Le impostazioni locali predefinite sono: en e tutte le traduzioni da config/locales/*. Rb, yml sono caricate automaticamente."

Ho anche provato specificando in application.rb

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

Ma ancora nessuna gioia.

Chiunque ha idea di cosa possa causare l'impossibilità di impostare I18n.load_path solo durante l'esecuzione delle risorse: precompilare?

Grazie per tutte le idee

risposta

0

Hai definiscono un locale di default? In caso contrario, è possibile farlo aggiungendo questa linea nella configurazione/application.rb

config.i18n.default_locale = :fr 

Forse si dovrebbe aggiungere questa riga anche nel vostro production.rb al fine di consentire fallback di localizzazione per l'I18n:

config.i18n.fallbacks = true 

Quindi, sii cauto di non avere il rientro della tabulazione nel file locale ma solo il rientro degli spazi.

Locale non è un asset, le risorse sono solo js, ​​css e immagini quindi non esiste alcun collegamento tra la compilazione delle risorse e le impostazioni locali.

3

Questo è in realtà dovuto a un flag di configurazione asset probabilmente impostato in config/application.rb.

config.assets.initialize_on_precompile = false 

Le attività rastrello: precompilazione controlli task rake per questa bandiera, e se trovato ad essere falso, carica solo il gruppo attivo e non inizializza completamente l'applicazione. A loro volta, le localizzazioni dell'applicazione non vengono aggiunte al percorso I18n.load.

0

Questo perché il i18n.js non è compilato e trasformazione, sotto public/assets per farlo è necessario aggiungere la seguente riga nel config/environments/production.rb

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

Quindi eseguire rake assets:precompile si noterà che public/assets/i18n-MD5.js ora esiste e pronto per essere servito .