2013-02-01 4 views

Antwort

12

Der Rückgabewert von I18n.backend.send(:translations) ist nur ein Hash, so dass Sie auf eine Teilmenge zugreifen können, indem Sie einfach die entsprechenden Schlüssel übergeben.

z.B. wenn Sie:

I18n.backend.send(:translations)[:en][:foo][:bar] 
#=> { :some_term=>"a translation", :some_other_term => "another translation"} 
+2

Dank i

en: foo: bar: some_term: "a translation" some_other_term: "another translation" 

Dann können Sie die die Teilmenge des Hash unter bar mit bekommen habe inzwischen herausgefunden, dass I18n.t ('home') auch funktioniert – Rubytastic

+0

Schön, danke! Das funktionierte gut für mich, als ich nach einem Weg suchte, den eigentlichen Schlüsselnamen zu bekommen. – richddr

5

Der Standard I18n Backend ist I18n::Backend::Simple, die nicht die tran aussetzt Anweisungen für Sie. (I18.backend.translations ist eine geschützte Methode.)

Dies ist im Allgemeinen keine gute Idee, aber wenn Sie diese Informationen wirklich benötigen und die Datei nicht analysieren können, können Sie die Backend-Klasse erweitern.

class I18n::Backend::Simple 
    def translations_store 
    translations 
    end 
end 

Sie können dann I18n.backend.translations_store rufen die analysierten Übersetzungen zu erhalten. Sie sollten sich wahrscheinlich nicht darauf verlassen, dass dies eine langfristige Strategie ist, aber Sie erhalten die Informationen, die Sie gerade brauchen.

0

Einstellung I18n.locale dann I18n.t tun funktioniert gut, zB:

def self.all_t(string) 
    I18n.locale = :en 
    en = I18n.t("pages.home.#{string}") 
    I18n.locale = :fr 
    fr = I18n.("pages.home.#{string}") 
    [en, fr] 
end