2012-10-16 12 views
9

tylko kłopoty, aby I18n pracować bez Rails środowiska:I18n bez szyn?


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> 

Co robię źle? Sk.yml zawiera element sk.time.formats.default !

Co to jest domyślna ścieżka ładowania I18n, więc nie będę zadał sobie trudu, aby dostarczyć pełne ścieżki do każdego tłumaczenia pliku YAML/Ruby?

Dzięki.

Odpowiedz

3

Wygląda na to, że twoja zmienna load_path nie jest ustawiona poprawnie.

Spróbuj dodać cały katalog, a jeśli się powiedzie, powinieneś zobaczyć swoje pliki: sk i: en, dzwoniąc pod numer I18n.load_path.

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

Bezpośrednie ustawienie ścieżek plików może być nieco mylące, ponieważ I18n nie zgłosi błędu, jeśli plik nie istnieje.

Na marginesie, odradzam dodawanie tłumaczeń z gem-i18n gem, ponieważ ścieżka może się różnić od jednej maszyny na inną z różnymi wersjami ruby ​​itp. Plik lokalny dla projektu byłby lepszy.

15

Już ustawiłeś ścieżkę wyszukiwania dla definicji języka za pomocą I18n.load_path.

Wygląda na to, że wystarczy użyć szyn. Bez szyn, musisz również załadować definicje języka za pomocą I18n.backend.load_translations.

Podsumowując, potrzebne są dwa etapy:

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

słowników są zdefiniowane z kluczem języka, na przykład jak:

en: 
    hello: "Hello world" 

Jeśli wolisz, aby określić swój en.yml bez klucza językowego, można załadować je poprzez

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

(Można też użyć tutaj dokumencie lub skierować ruby-hash).