2012-10-16 3 views
9

solo hanno problemi a fare I18n di lavorare senza ambiente Rails:I18n senza rotaie?


irb> require 'i18n' 
=> true 
irb> I18n.load_path=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml'] 
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml"] 
irb> I18n.load_path+=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml'] 
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml", "/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml"] 
irb> I18n.locale=:sk 
=> :sk 
irb> I18n.default_locale=:sk 
=> :sk 
irb> I18n.l Time.now 
I18n::MissingTranslationData: translation missing: 
sk.time.formats.default 
    from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:289:in 
`handle_exception' 
    from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:159:in 
`translate' 
    from 
/usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n/backend/base.rb:55:in 
`localize' 
    from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:236:in 
`localize' 
    from (irb):11 
    from /usr/bin/irb:12:in `<main>' 
irb> 

Che cosa sto facendo di sbagliato? Il sk.yml contiene l'elemento sk.time.formats.default !!

Inoltre, qual è il/i percorso/i di default di I18n in modo che non sia disturbato a fornire percorsi completi per ogni file YAML/Ruby di traduzione?

Grazie.

risposta

3

Sembra che il tuo load_path non sia impostato correttamente.

Provare a includere l'intera directory e se ha esito positivo, dovresti vedere i tuoi file: sk e: en chiamando lo I18n.load_path.

I18n.load_path = Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/*yml'] 

Impostazione dei percorsi di file direttamente può essere un po 'di confusione in quanto I18n non alzerà un errore se il file non esiste.

Come nota a margine, sconsiglio di includere le traduzioni dalla gemma rails-i18n poiché il percorso potrebbe essere diverso da una macchina all'altra con diverse versioni di ruby, ecc. Un file locale per il progetto sarebbe migliore.

15

È già impostato il percorso di ricerca per le definizioni della lingua con I18n.load_path.

Sembra, questo è sufficiente quando si utilizzano i binari . Senza binari, è necessario caricare anche le definizioni della lingua con I18n.backend.load_translations.

In sintesi, sono necessari due passaggi:

I18n.load_path = Dir['*.yml'] 
I18n.backend.load_translations 

I dizionari sono definiti con la chiave il linguaggio, per esempio come:

en: 
    hello: "Hello world" 

Se si preferisce definire la en.yml senza chiave lingua, si possono caricarli tramite

I18n.backend.store_translations(:en , YAML.load(File.read('en.yml'))) 

(Si può anche utilizzare un qui-documento o dirigere un rubino hash).