2013-02-01 15 views
8

In Rails i18n, come ottenere tutti i valori per una determinata chiave utilizzando il seguente:Rails i18n come ottenere tutti i valori per un determinato tasto?

translations = I18n.backend.send(:translations) 

ottenere tutte le chiavi

ho bisogno di essere in grado di ottenere una certa sezioneper esempio restituire solo tutto sotto "casa" backend I18n

en: 
    home: 
    test: test 

risposta

12

Il valore di ritorno di I18n.backend.send(:translations) è solo un hash, quindi è possibile accedere a un sottoinsieme semplicemente passando le chiavi appropriate.

ad es. se si dispone di:

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

Poi si può ottenere il sottoinsieme di hash sotto bar con:

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

Grazie i scoperto nel frattempo che I18n.t ('casa') funziona anche – Rubytastic

+0

Bello, grazie! questo ha funzionato alla grande per me perché stavo cercando un modo per ottenere il vero nome della chiave. – richddr

5

l'impostazione di default è I18n::Backend::Simple, che non espone il tran spiegazioni per voi. (I18.backend.translations è un metodo protetto)

Questa non è generalmente una buona idea, ma se hai davvero bisogno di queste informazioni e non puoi analizzare il file, puoi estendere la classe di backend.

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

È quindi possibile chiamare I18n.backend.translations_store per ottenere le traduzioni analizzate. Probabilmente non dovresti fare affidamento su questo come una strategia a lungo termine, ma ti fornisce le informazioni di cui hai bisogno in questo momento.

0

Impostazione I18n.locale poi facendo I18n.t funziona bene, ad esempio:

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